@enbox/dwn-sdk-js 0.0.6 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (527) hide show
  1. package/dist/browser.mjs +8 -8
  2. package/dist/browser.mjs.map +4 -4
  3. package/dist/esm/generated/precompiled-validators.js +762 -911
  4. package/dist/esm/generated/precompiled-validators.js.map +1 -1
  5. package/dist/esm/src/core/abstract-message.js +4 -0
  6. package/dist/esm/src/core/abstract-message.js.map +1 -1
  7. package/dist/esm/src/core/auth.js +22 -33
  8. package/dist/esm/src/core/auth.js.map +1 -1
  9. package/dist/esm/src/core/constants.js +11 -0
  10. package/dist/esm/src/core/constants.js.map +1 -0
  11. package/dist/esm/src/core/core-protocol.js +44 -0
  12. package/dist/esm/src/core/core-protocol.js.map +1 -0
  13. package/dist/esm/src/core/dwn-constant.js +7 -7
  14. package/dist/esm/src/core/dwn-constant.js.map +1 -1
  15. package/dist/esm/src/core/dwn-error.js +10 -12
  16. package/dist/esm/src/core/dwn-error.js.map +1 -1
  17. package/dist/esm/src/core/grant-authorization.js +50 -52
  18. package/dist/esm/src/core/grant-authorization.js.map +1 -1
  19. package/dist/esm/src/core/message.js +85 -116
  20. package/dist/esm/src/core/message.js.map +1 -1
  21. package/dist/esm/src/core/messages-grant-authorization.js +63 -78
  22. package/dist/esm/src/core/messages-grant-authorization.js.map +1 -1
  23. package/dist/esm/src/core/protocol-authorization-action.js +266 -0
  24. package/dist/esm/src/core/protocol-authorization-action.js.map +1 -0
  25. package/dist/esm/src/core/protocol-authorization-validation.js +321 -0
  26. package/dist/esm/src/core/protocol-authorization-validation.js.map +1 -0
  27. package/dist/esm/src/core/protocol-authorization.js +144 -741
  28. package/dist/esm/src/core/protocol-authorization.js.map +1 -1
  29. package/dist/esm/src/core/protocols-grant-authorization.js +24 -38
  30. package/dist/esm/src/core/protocols-grant-authorization.js.map +1 -1
  31. package/dist/esm/src/core/record-chain.js +64 -0
  32. package/dist/esm/src/core/record-chain.js.map +1 -0
  33. package/dist/esm/src/core/records-grant-authorization.js +53 -72
  34. package/dist/esm/src/core/records-grant-authorization.js.map +1 -1
  35. package/dist/esm/src/core/resumable-task-manager.js +50 -65
  36. package/dist/esm/src/core/resumable-task-manager.js.map +1 -1
  37. package/dist/esm/src/core/tenant-gate.js +2 -13
  38. package/dist/esm/src/core/tenant-gate.js.map +1 -1
  39. package/dist/esm/src/dwn.js +108 -101
  40. package/dist/esm/src/dwn.js.map +1 -1
  41. package/dist/esm/src/event-stream/event-emitter-event-log.js +204 -0
  42. package/dist/esm/src/event-stream/event-emitter-event-log.js.map +1 -0
  43. package/dist/esm/src/handlers/messages-read.js +67 -81
  44. package/dist/esm/src/handlers/messages-read.js.map +1 -1
  45. package/dist/esm/src/handlers/messages-subscribe.js +51 -63
  46. package/dist/esm/src/handlers/messages-subscribe.js.map +1 -1
  47. package/dist/esm/src/handlers/messages-sync.js +75 -89
  48. package/dist/esm/src/handlers/messages-sync.js.map +1 -1
  49. package/dist/esm/src/handlers/protocols-configure.js +153 -163
  50. package/dist/esm/src/handlers/protocols-configure.js.map +1 -1
  51. package/dist/esm/src/handlers/protocols-query.js +52 -55
  52. package/dist/esm/src/handlers/protocols-query.js.map +1 -1
  53. package/dist/esm/src/handlers/records-count.js +97 -85
  54. package/dist/esm/src/handlers/records-count.js.map +1 -1
  55. package/dist/esm/src/handlers/records-delete.js +75 -93
  56. package/dist/esm/src/handlers/records-delete.js.map +1 -1
  57. package/dist/esm/src/handlers/records-query.js +116 -105
  58. package/dist/esm/src/handlers/records-query.js.map +1 -1
  59. package/dist/esm/src/handlers/records-read.js +130 -132
  60. package/dist/esm/src/handlers/records-read.js.map +1 -1
  61. package/dist/esm/src/handlers/records-subscribe.js +164 -104
  62. package/dist/esm/src/handlers/records-subscribe.js.map +1 -1
  63. package/dist/esm/src/handlers/records-write.js +213 -280
  64. package/dist/esm/src/handlers/records-write.js.map +1 -1
  65. package/dist/esm/src/index.js +5 -2
  66. package/dist/esm/src/index.js.map +1 -1
  67. package/dist/esm/src/interfaces/messages-read.js +24 -32
  68. package/dist/esm/src/interfaces/messages-read.js.map +1 -1
  69. package/dist/esm/src/interfaces/messages-subscribe.js +28 -41
  70. package/dist/esm/src/interfaces/messages-subscribe.js.map +1 -1
  71. package/dist/esm/src/interfaces/messages-sync.js +26 -40
  72. package/dist/esm/src/interfaces/messages-sync.js.map +1 -1
  73. package/dist/esm/src/interfaces/protocols-configure.js +87 -65
  74. package/dist/esm/src/interfaces/protocols-configure.js.map +1 -1
  75. package/dist/esm/src/interfaces/protocols-query.js +55 -68
  76. package/dist/esm/src/interfaces/protocols-query.js.map +1 -1
  77. package/dist/esm/src/interfaces/records-count.js +50 -66
  78. package/dist/esm/src/interfaces/records-count.js.map +1 -1
  79. package/dist/esm/src/interfaces/records-delete.js +45 -55
  80. package/dist/esm/src/interfaces/records-delete.js.map +1 -1
  81. package/dist/esm/src/interfaces/records-query.js +60 -76
  82. package/dist/esm/src/interfaces/records-query.js.map +1 -1
  83. package/dist/esm/src/interfaces/records-read.js +51 -67
  84. package/dist/esm/src/interfaces/records-read.js.map +1 -1
  85. package/dist/esm/src/interfaces/records-subscribe.js +53 -68
  86. package/dist/esm/src/interfaces/records-subscribe.js.map +1 -1
  87. package/dist/esm/src/interfaces/records-write-query.js +102 -0
  88. package/dist/esm/src/interfaces/records-write-query.js.map +1 -0
  89. package/dist/esm/src/interfaces/records-write-signing.js +81 -0
  90. package/dist/esm/src/interfaces/records-write-signing.js.map +1 -0
  91. package/dist/esm/src/interfaces/records-write.js +396 -610
  92. package/dist/esm/src/interfaces/records-write.js.map +1 -1
  93. package/dist/esm/src/jose/algorithms/signing/ed25519.js +10 -19
  94. package/dist/esm/src/jose/algorithms/signing/ed25519.js.map +1 -1
  95. package/dist/esm/src/jose/jws/general/builder.js +23 -35
  96. package/dist/esm/src/jose/jws/general/builder.js.map +1 -1
  97. package/dist/esm/src/jose/jws/general/verifier.js +56 -69
  98. package/dist/esm/src/jose/jws/general/verifier.js.map +1 -1
  99. package/dist/esm/src/protocols/permission-grant.js +43 -14
  100. package/dist/esm/src/protocols/permission-grant.js.map +1 -1
  101. package/dist/esm/src/protocols/permission-request.js +28 -14
  102. package/dist/esm/src/protocols/permission-request.js.map +1 -1
  103. package/dist/esm/src/protocols/permissions.js +325 -227
  104. package/dist/esm/src/protocols/permissions.js.map +1 -1
  105. package/dist/esm/src/smt/smt-store-level.js +42 -64
  106. package/dist/esm/src/smt/smt-store-level.js.map +1 -1
  107. package/dist/esm/src/smt/smt-store-memory.js +19 -45
  108. package/dist/esm/src/smt/smt-store-memory.js.map +1 -1
  109. package/dist/esm/src/smt/smt-utils.js +28 -45
  110. package/dist/esm/src/smt/smt-utils.js.map +1 -1
  111. package/dist/esm/src/smt/sparse-merkle-tree.js +426 -471
  112. package/dist/esm/src/smt/sparse-merkle-tree.js.map +1 -1
  113. package/dist/esm/src/state-index/state-index-level.js +113 -150
  114. package/dist/esm/src/state-index/state-index-level.js.map +1 -1
  115. package/dist/esm/src/store/blockstore-level.js +54 -156
  116. package/dist/esm/src/store/blockstore-level.js.map +1 -1
  117. package/dist/esm/src/store/blockstore-mock.js +48 -153
  118. package/dist/esm/src/store/blockstore-mock.js.map +1 -1
  119. package/dist/esm/src/store/data-store-level.js +137 -100
  120. package/dist/esm/src/store/data-store-level.js.map +1 -1
  121. package/dist/esm/src/store/index-level-compound.js +246 -0
  122. package/dist/esm/src/store/index-level-compound.js.map +1 -0
  123. package/dist/esm/src/store/index-level.js +307 -715
  124. package/dist/esm/src/store/index-level.js.map +1 -1
  125. package/dist/esm/src/store/level-wrapper.js +143 -244
  126. package/dist/esm/src/store/level-wrapper.js.map +1 -1
  127. package/dist/esm/src/store/message-store-level.js +71 -94
  128. package/dist/esm/src/store/message-store-level.js.map +1 -1
  129. package/dist/esm/src/store/resumable-task-store-level.js +62 -101
  130. package/dist/esm/src/store/resumable-task-store-level.js.map +1 -1
  131. package/dist/esm/src/store/storage-controller.js +131 -146
  132. package/dist/esm/src/store/storage-controller.js.map +1 -1
  133. package/dist/esm/src/types/permission-types.js.map +1 -1
  134. package/dist/esm/src/types/protocols-types.js +10 -0
  135. package/dist/esm/src/types/protocols-types.js.map +1 -1
  136. package/dist/esm/src/types/records-types.js.map +1 -1
  137. package/dist/esm/src/utils/abort.js +8 -19
  138. package/dist/esm/src/utils/abort.js.map +1 -1
  139. package/dist/esm/src/utils/array.js +15 -49
  140. package/dist/esm/src/utils/array.js.map +1 -1
  141. package/dist/esm/src/utils/cid.js +29 -77
  142. package/dist/esm/src/utils/cid.js.map +1 -1
  143. package/dist/esm/src/utils/data-stream.js +37 -65
  144. package/dist/esm/src/utils/data-stream.js.map +1 -1
  145. package/dist/esm/src/utils/encryption.js +136 -162
  146. package/dist/esm/src/utils/encryption.js.map +1 -1
  147. package/dist/esm/src/utils/filter.js +1 -12
  148. package/dist/esm/src/utils/filter.js.map +1 -1
  149. package/dist/esm/src/utils/hd-key.js +45 -71
  150. package/dist/esm/src/utils/hd-key.js.map +1 -1
  151. package/dist/esm/src/utils/jws.js +9 -20
  152. package/dist/esm/src/utils/jws.js.map +1 -1
  153. package/dist/esm/src/utils/memory-cache.js +12 -23
  154. package/dist/esm/src/utils/memory-cache.js.map +1 -1
  155. package/dist/esm/src/utils/messages.js +21 -33
  156. package/dist/esm/src/utils/messages.js.map +1 -1
  157. package/dist/esm/src/utils/private-key-signer.js +9 -17
  158. package/dist/esm/src/utils/private-key-signer.js.map +1 -1
  159. package/dist/esm/src/utils/protocols.js +62 -70
  160. package/dist/esm/src/utils/protocols.js.map +1 -1
  161. package/dist/esm/src/utils/records.js +103 -166
  162. package/dist/esm/src/utils/records.js.map +1 -1
  163. package/dist/esm/src/utils/secp256k1.js +60 -96
  164. package/dist/esm/src/utils/secp256k1.js.map +1 -1
  165. package/dist/esm/src/utils/secp256r1.js +54 -71
  166. package/dist/esm/src/utils/secp256r1.js.map +1 -1
  167. package/dist/esm/src/utils/time.js +5 -18
  168. package/dist/esm/src/utils/time.js.map +1 -1
  169. package/dist/esm/src/utils/url.js +3 -3
  170. package/dist/esm/src/utils/url.js.map +1 -1
  171. package/dist/esm/tests/core/auth.spec.js +3 -12
  172. package/dist/esm/tests/core/auth.spec.js.map +1 -1
  173. package/dist/esm/tests/core/message.spec.js +50 -59
  174. package/dist/esm/tests/core/message.spec.js.map +1 -1
  175. package/dist/esm/tests/core/protocol-authorization.spec.js +10 -18
  176. package/dist/esm/tests/core/protocol-authorization.spec.js.map +1 -1
  177. package/dist/esm/tests/dwn.spec.js +65 -89
  178. package/dist/esm/tests/dwn.spec.js.map +1 -1
  179. package/dist/esm/tests/event-emitter-event-log.spec.js +305 -0
  180. package/dist/esm/tests/event-emitter-event-log.spec.js.map +1 -0
  181. package/dist/esm/tests/features/author-delegated-grant.spec.js +337 -347
  182. package/dist/esm/tests/features/author-delegated-grant.spec.js.map +1 -1
  183. package/dist/esm/tests/features/owner-delegated-grant.spec.js +160 -172
  184. package/dist/esm/tests/features/owner-delegated-grant.spec.js.map +1 -1
  185. package/dist/esm/tests/features/owner-signature.spec.js +78 -82
  186. package/dist/esm/tests/features/owner-signature.spec.js.map +1 -1
  187. package/dist/esm/tests/features/permissions.spec.js +449 -184
  188. package/dist/esm/tests/features/permissions.spec.js.map +1 -1
  189. package/dist/esm/tests/features/protocol-composition.spec.js +981 -360
  190. package/dist/esm/tests/features/protocol-composition.spec.js.map +1 -1
  191. package/dist/esm/tests/features/protocol-create-action.spec.js +45 -54
  192. package/dist/esm/tests/features/protocol-create-action.spec.js.map +1 -1
  193. package/dist/esm/tests/features/protocol-delete-action.spec.js +99 -108
  194. package/dist/esm/tests/features/protocol-delete-action.spec.js.map +1 -1
  195. package/dist/esm/tests/features/protocol-update-action.spec.js +108 -117
  196. package/dist/esm/tests/features/protocol-update-action.spec.js.map +1 -1
  197. package/dist/esm/tests/features/records-immutable.spec.js +315 -0
  198. package/dist/esm/tests/features/records-immutable.spec.js.map +1 -0
  199. package/dist/esm/tests/features/records-prune.spec.js +178 -194
  200. package/dist/esm/tests/features/records-prune.spec.js.map +1 -1
  201. package/dist/esm/tests/features/records-record-limit.spec.js +542 -0
  202. package/dist/esm/tests/features/records-record-limit.spec.js.map +1 -0
  203. package/dist/esm/tests/features/records-tags.spec.js +456 -463
  204. package/dist/esm/tests/features/records-tags.spec.js.map +1 -1
  205. package/dist/esm/tests/features/resumable-tasks.spec.js +88 -98
  206. package/dist/esm/tests/features/resumable-tasks.spec.js.map +1 -1
  207. package/dist/esm/tests/handlers/messages-read.spec.js +215 -210
  208. package/dist/esm/tests/handlers/messages-read.spec.js.map +1 -1
  209. package/dist/esm/tests/handlers/messages-subscribe.spec.js +309 -171
  210. package/dist/esm/tests/handlers/messages-subscribe.spec.js.map +1 -1
  211. package/dist/esm/tests/handlers/messages-sync.spec.js +272 -199
  212. package/dist/esm/tests/handlers/messages-sync.spec.js.map +1 -1
  213. package/dist/esm/tests/handlers/protocols-configure.spec.js +247 -241
  214. package/dist/esm/tests/handlers/protocols-configure.spec.js.map +1 -1
  215. package/dist/esm/tests/handlers/protocols-query.spec.js +159 -172
  216. package/dist/esm/tests/handlers/protocols-query.spec.js.map +1 -1
  217. package/dist/esm/tests/handlers/records-count.spec.js +101 -105
  218. package/dist/esm/tests/handlers/records-count.spec.js.map +1 -1
  219. package/dist/esm/tests/handlers/records-delete.spec.js +266 -279
  220. package/dist/esm/tests/handlers/records-delete.spec.js.map +1 -1
  221. package/dist/esm/tests/handlers/records-query.spec.js +984 -996
  222. package/dist/esm/tests/handlers/records-query.spec.js.map +1 -1
  223. package/dist/esm/tests/handlers/records-read.spec.js +542 -671
  224. package/dist/esm/tests/handlers/records-read.spec.js.map +1 -1
  225. package/dist/esm/tests/handlers/records-subscribe.spec.js +433 -302
  226. package/dist/esm/tests/handlers/records-subscribe.spec.js.map +1 -1
  227. package/dist/esm/tests/handlers/records-write.spec.js +1216 -1140
  228. package/dist/esm/tests/handlers/records-write.spec.js.map +1 -1
  229. package/dist/esm/tests/interfaces/messages-get.spec.js +39 -48
  230. package/dist/esm/tests/interfaces/messages-get.spec.js.map +1 -1
  231. package/dist/esm/tests/interfaces/messages-subscribe.spec.js +4 -13
  232. package/dist/esm/tests/interfaces/messages-subscribe.spec.js.map +1 -1
  233. package/dist/esm/tests/interfaces/protocols-configure.spec.js +212 -88
  234. package/dist/esm/tests/interfaces/protocols-configure.spec.js.map +1 -1
  235. package/dist/esm/tests/interfaces/protocols-query.spec.js +8 -17
  236. package/dist/esm/tests/interfaces/protocols-query.spec.js.map +1 -1
  237. package/dist/esm/tests/interfaces/records-delete.spec.js +8 -17
  238. package/dist/esm/tests/interfaces/records-delete.spec.js.map +1 -1
  239. package/dist/esm/tests/interfaces/records-query.spec.js +20 -29
  240. package/dist/esm/tests/interfaces/records-query.spec.js.map +1 -1
  241. package/dist/esm/tests/interfaces/records-read.spec.js +42 -51
  242. package/dist/esm/tests/interfaces/records-read.spec.js.map +1 -1
  243. package/dist/esm/tests/interfaces/records-subscribe.spec.js +16 -25
  244. package/dist/esm/tests/interfaces/records-subscribe.spec.js.map +1 -1
  245. package/dist/esm/tests/interfaces/records-write.spec.js +190 -219
  246. package/dist/esm/tests/interfaces/records-write.spec.js.map +1 -1
  247. package/dist/esm/tests/jose/jws/general.spec.js +36 -45
  248. package/dist/esm/tests/jose/jws/general.spec.js.map +1 -1
  249. package/dist/esm/tests/protocols/permission-grant.spec.js +44 -50
  250. package/dist/esm/tests/protocols/permission-grant.spec.js.map +1 -1
  251. package/dist/esm/tests/protocols/permission-request.spec.js +23 -32
  252. package/dist/esm/tests/protocols/permission-request.spec.js.map +1 -1
  253. package/dist/esm/tests/protocols/permissions.spec.js +49 -55
  254. package/dist/esm/tests/protocols/permissions.spec.js.map +1 -1
  255. package/dist/esm/tests/scenarios/aggregator.spec.js +127 -138
  256. package/dist/esm/tests/scenarios/aggregator.spec.js.map +1 -1
  257. package/dist/esm/tests/scenarios/deleted-record.spec.js +372 -36
  258. package/dist/esm/tests/scenarios/deleted-record.spec.js.map +1 -1
  259. package/dist/esm/tests/scenarios/end-to-end-tests.spec.js +55 -64
  260. package/dist/esm/tests/scenarios/end-to-end-tests.spec.js.map +1 -1
  261. package/dist/esm/tests/scenarios/nested-roles.spec.js +66 -76
  262. package/dist/esm/tests/scenarios/nested-roles.spec.js.map +1 -1
  263. package/dist/esm/tests/scenarios/subscriptions.spec.js +451 -354
  264. package/dist/esm/tests/scenarios/subscriptions.spec.js.map +1 -1
  265. package/dist/esm/tests/smt/smt-store-level.spec.js +76 -87
  266. package/dist/esm/tests/smt/smt-store-level.spec.js.map +1 -1
  267. package/dist/esm/tests/smt/sparse-merkle-tree.spec.js +344 -353
  268. package/dist/esm/tests/smt/sparse-merkle-tree.spec.js.map +1 -1
  269. package/dist/esm/tests/state-index/state-index-level.spec.js +117 -126
  270. package/dist/esm/tests/state-index/state-index-level.spec.js.map +1 -1
  271. package/dist/esm/tests/store/blockstore-level.spec.js +44 -99
  272. package/dist/esm/tests/store/blockstore-level.spec.js.map +1 -1
  273. package/dist/esm/tests/store/blockstore-mock.spec.js +40 -120
  274. package/dist/esm/tests/store/blockstore-mock.spec.js.map +1 -1
  275. package/dist/esm/tests/store/data-store-level.spec.js +160 -108
  276. package/dist/esm/tests/store/data-store-level.spec.js.map +1 -1
  277. package/dist/esm/tests/store/index-level.spec.js +404 -414
  278. package/dist/esm/tests/store/index-level.spec.js.map +1 -1
  279. package/dist/esm/tests/store/message-store-level.spec.js +13 -22
  280. package/dist/esm/tests/store/message-store-level.spec.js.map +1 -1
  281. package/dist/esm/tests/store/message-store.spec.js +229 -238
  282. package/dist/esm/tests/store/message-store.spec.js.map +1 -1
  283. package/dist/esm/tests/test-event-stream.js +12 -13
  284. package/dist/esm/tests/test-event-stream.js.map +1 -1
  285. package/dist/esm/tests/test-stores.js +16 -13
  286. package/dist/esm/tests/test-stores.js.map +1 -1
  287. package/dist/esm/tests/test-suite.js +8 -15
  288. package/dist/esm/tests/test-suite.js.map +1 -1
  289. package/dist/esm/tests/utils/cid.spec.js +24 -33
  290. package/dist/esm/tests/utils/cid.spec.js.map +1 -1
  291. package/dist/esm/tests/utils/data-stream.spec.js +48 -57
  292. package/dist/esm/tests/utils/data-stream.spec.js.map +1 -1
  293. package/dist/esm/tests/utils/encryption-callbacks.spec.js +45 -54
  294. package/dist/esm/tests/utils/encryption-callbacks.spec.js.map +1 -1
  295. package/dist/esm/tests/utils/encryption.spec.js +229 -82
  296. package/dist/esm/tests/utils/encryption.spec.js.map +1 -1
  297. package/dist/esm/tests/utils/filters.spec.js +46 -55
  298. package/dist/esm/tests/utils/filters.spec.js.map +1 -1
  299. package/dist/esm/tests/utils/hd-key.spec.js +10 -19
  300. package/dist/esm/tests/utils/hd-key.spec.js.map +1 -1
  301. package/dist/esm/tests/utils/jws.spec.js +3 -12
  302. package/dist/esm/tests/utils/jws.spec.js.map +1 -1
  303. package/dist/esm/tests/utils/memory-cache.spec.js +9 -18
  304. package/dist/esm/tests/utils/memory-cache.spec.js.map +1 -1
  305. package/dist/esm/tests/utils/messages.spec.js +18 -20
  306. package/dist/esm/tests/utils/messages.spec.js.map +1 -1
  307. package/dist/esm/tests/utils/poller.js +22 -33
  308. package/dist/esm/tests/utils/poller.js.map +1 -1
  309. package/dist/esm/tests/utils/private-key-signer.spec.js +15 -24
  310. package/dist/esm/tests/utils/private-key-signer.spec.js.map +1 -1
  311. package/dist/esm/tests/utils/records.spec.js +14 -27
  312. package/dist/esm/tests/utils/records.spec.js.map +1 -1
  313. package/dist/esm/tests/utils/secp256k1.spec.js +16 -25
  314. package/dist/esm/tests/utils/secp256k1.spec.js.map +1 -1
  315. package/dist/esm/tests/utils/secp256r1.spec.js +18 -27
  316. package/dist/esm/tests/utils/secp256r1.spec.js.map +1 -1
  317. package/dist/esm/tests/utils/test-data-generator.js +446 -467
  318. package/dist/esm/tests/utils/test-data-generator.js.map +1 -1
  319. package/dist/esm/tests/validation/json-schemas/definitions.spec.js +2 -11
  320. package/dist/esm/tests/validation/json-schemas/definitions.spec.js.map +1 -1
  321. package/dist/esm/tests/validation/json-schemas/jwk/general-jwk.spec.js +4 -13
  322. package/dist/esm/tests/validation/json-schemas/jwk/general-jwk.spec.js.map +1 -1
  323. package/dist/esm/tests/validation/json-schemas/jwk/public-jwk.spec.js +8 -17
  324. package/dist/esm/tests/validation/json-schemas/jwk/public-jwk.spec.js.map +1 -1
  325. package/dist/esm/tests/validation/json-schemas/jwk-verification-method.spec.js +3 -12
  326. package/dist/esm/tests/validation/json-schemas/jwk-verification-method.spec.js.map +1 -1
  327. package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js +4 -13
  328. package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js.map +1 -1
  329. package/dist/esm/tests/validation/json-schemas/records/records-query.spec.js +2 -11
  330. package/dist/esm/tests/validation/json-schemas/records/records-query.spec.js.map +1 -1
  331. package/dist/esm/tests/validation/json-schemas/records/records-read.spec.js +2 -11
  332. package/dist/esm/tests/validation/json-schemas/records/records-read.spec.js.map +1 -1
  333. package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js +44 -24
  334. package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js.map +1 -1
  335. package/dist/types/generated/precompiled-validators.d.ts +49 -40
  336. package/dist/types/generated/precompiled-validators.d.ts.map +1 -1
  337. package/dist/types/src/core/constants.d.ts +11 -0
  338. package/dist/types/src/core/constants.d.ts.map +1 -0
  339. package/dist/types/src/core/core-protocol.d.ts +89 -0
  340. package/dist/types/src/core/core-protocol.d.ts.map +1 -0
  341. package/dist/types/src/core/dwn-error.d.ts +9 -12
  342. package/dist/types/src/core/dwn-error.d.ts.map +1 -1
  343. package/dist/types/src/core/grant-authorization.d.ts +6 -2
  344. package/dist/types/src/core/grant-authorization.d.ts.map +1 -1
  345. package/dist/types/src/core/protocol-authorization-action.d.ts +42 -0
  346. package/dist/types/src/core/protocol-authorization-action.d.ts.map +1 -0
  347. package/dist/types/src/core/protocol-authorization-validation.d.ts +81 -0
  348. package/dist/types/src/core/protocol-authorization-validation.d.ts.map +1 -0
  349. package/dist/types/src/core/protocol-authorization.d.ts +24 -106
  350. package/dist/types/src/core/protocol-authorization.d.ts.map +1 -1
  351. package/dist/types/src/core/record-chain.d.ts +24 -0
  352. package/dist/types/src/core/record-chain.d.ts.map +1 -0
  353. package/dist/types/src/core/records-grant-authorization.d.ts.map +1 -1
  354. package/dist/types/src/dwn.d.ts +19 -7
  355. package/dist/types/src/dwn.d.ts.map +1 -1
  356. package/dist/types/src/event-stream/event-emitter-event-log.d.ts +50 -0
  357. package/dist/types/src/event-stream/event-emitter-event-log.d.ts.map +1 -0
  358. package/dist/types/src/handlers/messages-read.d.ts +3 -8
  359. package/dist/types/src/handlers/messages-read.d.ts.map +1 -1
  360. package/dist/types/src/handlers/messages-subscribe.d.ts +6 -10
  361. package/dist/types/src/handlers/messages-subscribe.d.ts.map +1 -1
  362. package/dist/types/src/handlers/messages-sync.d.ts +3 -8
  363. package/dist/types/src/handlers/messages-sync.d.ts.map +1 -1
  364. package/dist/types/src/handlers/protocols-configure.d.ts +3 -10
  365. package/dist/types/src/handlers/protocols-configure.d.ts.map +1 -1
  366. package/dist/types/src/handlers/protocols-query.d.ts +3 -8
  367. package/dist/types/src/handlers/protocols-query.d.ts.map +1 -1
  368. package/dist/types/src/handlers/records-count.d.ts +3 -6
  369. package/dist/types/src/handlers/records-count.d.ts.map +1 -1
  370. package/dist/types/src/handlers/records-delete.d.ts +3 -8
  371. package/dist/types/src/handlers/records-delete.d.ts.map +1 -1
  372. package/dist/types/src/handlers/records-query.d.ts +3 -8
  373. package/dist/types/src/handlers/records-query.d.ts.map +1 -1
  374. package/dist/types/src/handlers/records-read.d.ts +3 -8
  375. package/dist/types/src/handlers/records-read.d.ts.map +1 -1
  376. package/dist/types/src/handlers/records-subscribe.d.ts +8 -10
  377. package/dist/types/src/handlers/records-subscribe.d.ts.map +1 -1
  378. package/dist/types/src/handlers/records-write.d.ts +4 -24
  379. package/dist/types/src/handlers/records-write.d.ts.map +1 -1
  380. package/dist/types/src/index.d.ts +8 -4
  381. package/dist/types/src/index.d.ts.map +1 -1
  382. package/dist/types/src/interfaces/messages-subscribe.d.ts +5 -0
  383. package/dist/types/src/interfaces/messages-subscribe.d.ts.map +1 -1
  384. package/dist/types/src/interfaces/protocols-configure.d.ts.map +1 -1
  385. package/dist/types/src/interfaces/records-subscribe.d.ts +5 -0
  386. package/dist/types/src/interfaces/records-subscribe.d.ts.map +1 -1
  387. package/dist/types/src/interfaces/records-write-query.d.ts +33 -0
  388. package/dist/types/src/interfaces/records-write-query.d.ts.map +1 -0
  389. package/dist/types/src/interfaces/records-write-signing.d.ts +34 -0
  390. package/dist/types/src/interfaces/records-write-signing.d.ts.map +1 -0
  391. package/dist/types/src/interfaces/records-write.d.ts +13 -53
  392. package/dist/types/src/interfaces/records-write.d.ts.map +1 -1
  393. package/dist/types/src/protocols/permission-grant.d.ts +1 -1
  394. package/dist/types/src/protocols/permission-grant.d.ts.map +1 -1
  395. package/dist/types/src/protocols/permission-request.d.ts +1 -1
  396. package/dist/types/src/protocols/permission-request.d.ts.map +1 -1
  397. package/dist/types/src/protocols/permissions.d.ts +40 -3
  398. package/dist/types/src/protocols/permissions.d.ts.map +1 -1
  399. package/dist/types/src/state-index/state-index-level.d.ts.map +1 -1
  400. package/dist/types/src/store/data-store-level.d.ts +20 -4
  401. package/dist/types/src/store/data-store-level.d.ts.map +1 -1
  402. package/dist/types/src/store/index-level-compound.d.ts +70 -0
  403. package/dist/types/src/store/index-level-compound.d.ts.map +1 -0
  404. package/dist/types/src/store/index-level.d.ts +4 -58
  405. package/dist/types/src/store/index-level.d.ts.map +1 -1
  406. package/dist/types/src/store/storage-controller.d.ts +4 -4
  407. package/dist/types/src/store/storage-controller.d.ts.map +1 -1
  408. package/dist/types/src/types/message-types.d.ts +3 -3
  409. package/dist/types/src/types/message-types.d.ts.map +1 -1
  410. package/dist/types/src/types/messages-types.d.ts +12 -3
  411. package/dist/types/src/types/messages-types.d.ts.map +1 -1
  412. package/dist/types/src/types/method-handler.d.ts +24 -3
  413. package/dist/types/src/types/method-handler.d.ts.map +1 -1
  414. package/dist/types/src/types/permission-types.d.ts +7 -0
  415. package/dist/types/src/types/permission-types.d.ts.map +1 -1
  416. package/dist/types/src/types/protocols-types.d.ts +41 -1
  417. package/dist/types/src/types/protocols-types.d.ts.map +1 -1
  418. package/dist/types/src/types/records-types.d.ts +16 -6
  419. package/dist/types/src/types/records-types.d.ts.map +1 -1
  420. package/dist/types/src/types/subscriptions.d.ts +151 -13
  421. package/dist/types/src/types/subscriptions.d.ts.map +1 -1
  422. package/dist/types/src/utils/hd-key.d.ts +1 -9
  423. package/dist/types/src/utils/hd-key.d.ts.map +1 -1
  424. package/dist/types/src/utils/messages.d.ts +7 -5
  425. package/dist/types/src/utils/messages.d.ts.map +1 -1
  426. package/dist/types/src/utils/protocols.d.ts +5 -0
  427. package/dist/types/src/utils/protocols.d.ts.map +1 -1
  428. package/dist/types/src/utils/records.d.ts +1 -11
  429. package/dist/types/src/utils/records.d.ts.map +1 -1
  430. package/dist/types/tests/dwn.spec.d.ts.map +1 -1
  431. package/dist/types/tests/event-emitter-event-log.spec.d.ts +2 -0
  432. package/dist/types/tests/event-emitter-event-log.spec.d.ts.map +1 -0
  433. package/dist/types/tests/features/author-delegated-grant.spec.d.ts.map +1 -1
  434. package/dist/types/tests/features/owner-delegated-grant.spec.d.ts.map +1 -1
  435. package/dist/types/tests/features/owner-signature.spec.d.ts.map +1 -1
  436. package/dist/types/tests/features/permissions.spec.d.ts.map +1 -1
  437. package/dist/types/tests/features/protocol-composition.spec.d.ts.map +1 -1
  438. package/dist/types/tests/features/records-immutable.spec.d.ts +2 -0
  439. package/dist/types/tests/features/records-immutable.spec.d.ts.map +1 -0
  440. package/dist/types/tests/features/records-record-limit.spec.d.ts +2 -0
  441. package/dist/types/tests/features/records-record-limit.spec.d.ts.map +1 -0
  442. package/dist/types/tests/features/records-tags.spec.d.ts.map +1 -1
  443. package/dist/types/tests/features/resumable-tasks.spec.d.ts.map +1 -1
  444. package/dist/types/tests/handlers/messages-read.spec.d.ts.map +1 -1
  445. package/dist/types/tests/handlers/messages-subscribe.spec.d.ts.map +1 -1
  446. package/dist/types/tests/handlers/messages-sync.spec.d.ts.map +1 -1
  447. package/dist/types/tests/handlers/records-count.spec.d.ts.map +1 -1
  448. package/dist/types/tests/handlers/records-delete.spec.d.ts.map +1 -1
  449. package/dist/types/tests/handlers/records-query.spec.d.ts.map +1 -1
  450. package/dist/types/tests/handlers/records-read.spec.d.ts.map +1 -1
  451. package/dist/types/tests/handlers/records-subscribe.spec.d.ts.map +1 -1
  452. package/dist/types/tests/handlers/records-write.spec.d.ts.map +1 -1
  453. package/dist/types/tests/scenarios/deleted-record.spec.d.ts.map +1 -1
  454. package/dist/types/tests/scenarios/subscriptions.spec.d.ts.map +1 -1
  455. package/dist/types/tests/test-event-stream.d.ts +11 -12
  456. package/dist/types/tests/test-event-stream.d.ts.map +1 -1
  457. package/dist/types/tests/test-suite.d.ts +2 -2
  458. package/dist/types/tests/test-suite.d.ts.map +1 -1
  459. package/dist/types/tests/utils/test-data-generator.d.ts +18 -0
  460. package/dist/types/tests/utils/test-data-generator.d.ts.map +1 -1
  461. package/package.json +5 -4
  462. package/src/core/constants.ts +11 -0
  463. package/src/core/core-protocol.ts +129 -0
  464. package/src/core/dwn-error.ts +15 -12
  465. package/src/core/grant-authorization.ts +20 -3
  466. package/src/core/protocol-authorization-action.ts +377 -0
  467. package/src/core/protocol-authorization-validation.ts +487 -0
  468. package/src/core/protocol-authorization.ts +111 -856
  469. package/src/core/record-chain.ts +99 -0
  470. package/src/core/records-grant-authorization.ts +6 -8
  471. package/src/dwn.ts +58 -73
  472. package/src/event-stream/event-emitter-event-log.ts +283 -0
  473. package/src/handlers/messages-read.ts +8 -9
  474. package/src/handlers/messages-subscribe.ts +24 -28
  475. package/src/handlers/messages-sync.ts +10 -16
  476. package/src/handlers/protocols-configure.ts +47 -32
  477. package/src/handlers/protocols-query.ts +6 -9
  478. package/src/handlers/records-count.ts +11 -10
  479. package/src/handlers/records-delete.ts +12 -21
  480. package/src/handlers/records-query.ts +12 -12
  481. package/src/handlers/records-read.ts +34 -22
  482. package/src/handlers/records-subscribe.ts +47 -26
  483. package/src/handlers/records-write.ts +47 -104
  484. package/src/index.ts +9 -5
  485. package/src/interfaces/messages-subscribe.ts +7 -1
  486. package/src/interfaces/protocols-configure.ts +73 -8
  487. package/src/interfaces/records-count.ts +1 -1
  488. package/src/interfaces/records-delete.ts +1 -1
  489. package/src/interfaces/records-query.ts +1 -1
  490. package/src/interfaces/records-read.ts +1 -1
  491. package/src/interfaces/records-subscribe.ts +8 -1
  492. package/src/interfaces/records-write-query.ts +139 -0
  493. package/src/interfaces/records-write-signing.ts +123 -0
  494. package/src/interfaces/records-write.ts +66 -261
  495. package/src/protocols/permission-grant.ts +1 -1
  496. package/src/protocols/permission-request.ts +1 -1
  497. package/src/protocols/permissions.ts +148 -6
  498. package/src/state-index/state-index-level.ts +5 -7
  499. package/src/store/data-store-level.ts +124 -34
  500. package/src/store/index-level-compound.ts +324 -0
  501. package/src/store/index-level.ts +68 -341
  502. package/src/store/storage-controller.ts +11 -11
  503. package/src/types/message-types.ts +3 -3
  504. package/src/types/messages-types.ts +12 -3
  505. package/src/types/method-handler.ts +26 -4
  506. package/src/types/mitt.d.ts +28 -0
  507. package/src/types/permission-types.ts +7 -0
  508. package/src/types/protocols-types.ts +46 -0
  509. package/src/types/records-types.ts +16 -6
  510. package/src/types/subscriptions.ts +178 -14
  511. package/src/utils/hd-key.ts +0 -9
  512. package/src/utils/messages.ts +17 -37
  513. package/src/utils/protocols.ts +8 -0
  514. package/src/utils/records.ts +8 -59
  515. package/dist/esm/src/event-stream/event-emitter-stream.js +0 -60
  516. package/dist/esm/src/event-stream/event-emitter-stream.js.map +0 -1
  517. package/dist/esm/tests/event-stream/event-emitter-stream.spec.js +0 -77
  518. package/dist/esm/tests/event-stream/event-emitter-stream.spec.js.map +0 -1
  519. package/dist/esm/tests/event-stream/event-stream.spec.js +0 -123
  520. package/dist/esm/tests/event-stream/event-stream.spec.js.map +0 -1
  521. package/dist/types/src/event-stream/event-emitter-stream.d.ts +0 -23
  522. package/dist/types/src/event-stream/event-emitter-stream.d.ts.map +0 -1
  523. package/dist/types/tests/event-stream/event-emitter-stream.spec.d.ts +0 -2
  524. package/dist/types/tests/event-stream/event-emitter-stream.spec.d.ts.map +0 -1
  525. package/dist/types/tests/event-stream/event-stream.spec.d.ts +0 -2
  526. package/dist/types/tests/event-stream/event-stream.spec.d.ts.map +0 -1
  527. package/src/event-stream/event-emitter-stream.ts +0 -69
@@ -1,12 +1,3 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
1
  import { authenticate } from '../core/auth.js';
11
2
  import { Cid } from '../utils/cid.js';
12
3
  import { DataStream } from '../utils/data-stream.js';
@@ -22,267 +13,214 @@ import { StorageController } from '../store/storage-controller.js';
22
13
  import { DwnError, DwnErrorCode } from '../core/dwn-error.js';
23
14
  import { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';
24
15
  export class RecordsWriteHandler {
25
- constructor(didResolver, messageStore, dataStore, stateIndex, eventStream) {
26
- this.didResolver = didResolver;
27
- this.messageStore = messageStore;
28
- this.dataStore = dataStore;
29
- this.stateIndex = stateIndex;
30
- this.eventStream = eventStream;
16
+ deps;
17
+ constructor(deps) {
18
+ this.deps = deps;
31
19
  }
32
- handle(_a) {
33
- return __awaiter(this, arguments, void 0, function* ({ tenant, message, dataStream }) {
34
- let recordsWrite;
20
+ async handle({ tenant, message, dataStream }) {
21
+ let recordsWrite;
22
+ try {
23
+ recordsWrite = await RecordsWrite.parse(message);
24
+ await ProtocolAuthorization.validateReferentialIntegrity(tenant, recordsWrite, this.deps.messageStore, this.deps.coreProtocols);
25
+ }
26
+ catch (e) {
27
+ return messageReplyFromError(e, 400);
28
+ }
29
+ // authentication & authorization
30
+ try {
31
+ await authenticate(message.authorization, this.deps.didResolver, message.attestation);
32
+ await this.authorizeRecordsWrite(tenant, recordsWrite, this.deps.messageStore);
33
+ }
34
+ catch (e) {
35
+ return messageReplyFromError(e, 401);
36
+ }
37
+ // get existing messages matching the `recordId`
38
+ const query = {
39
+ interface: DwnInterfaceName.Records,
40
+ recordId: message.recordId
41
+ };
42
+ const { messages: existingMessages } = await this.deps.messageStore.query(tenant, [query]);
43
+ // if the incoming write is not the initial write, then it must not modify any immutable properties defined by the initial write
44
+ const newMessageIsInitialWrite = await recordsWrite.isInitialWrite();
45
+ let initialWrite;
46
+ if (!newMessageIsInitialWrite) {
35
47
  try {
36
- recordsWrite = yield RecordsWrite.parse(message);
37
- // Protocol-authorized record specific validation
38
- if (message.descriptor.protocol !== undefined) {
39
- yield ProtocolAuthorization.validateReferentialIntegrity(tenant, recordsWrite, this.messageStore);
40
- }
48
+ initialWrite = await RecordsWrite.getInitialWrite(existingMessages);
49
+ RecordsWrite.verifyEqualityOfImmutableProperties(initialWrite, message);
41
50
  }
42
51
  catch (e) {
43
52
  return messageReplyFromError(e, 400);
44
53
  }
45
- // authentication & authorization
46
- try {
47
- yield authenticate(message.authorization, this.didResolver, message.attestation);
48
- yield RecordsWriteHandler.authorizeRecordsWrite(tenant, recordsWrite, this.messageStore);
49
- }
50
- catch (e) {
51
- return messageReplyFromError(e, 401);
52
- }
53
- // get existing messages matching the `recordId`
54
- const query = {
55
- interface: DwnInterfaceName.Records,
56
- recordId: message.recordId
54
+ }
55
+ const newestExistingMessage = await Message.getNewestMessage(existingMessages);
56
+ let incomingMessageIsNewest = false;
57
+ let newestMessage; // keep reference of newest message for pruning later
58
+ if (newestExistingMessage === undefined || await Message.isNewer(message, newestExistingMessage)) {
59
+ incomingMessageIsNewest = true;
60
+ newestMessage = message;
61
+ }
62
+ else { // existing message is the same age or newer than the incoming message
63
+ newestMessage = newestExistingMessage;
64
+ }
65
+ if (!incomingMessageIsNewest) {
66
+ return {
67
+ status: { code: 409, detail: 'Conflict' }
57
68
  };
58
- const { messages: existingMessages } = yield this.messageStore.query(tenant, [query]);
59
- // if the incoming write is not the initial write, then it must not modify any immutable properties defined by the initial write
60
- const newMessageIsInitialWrite = yield recordsWrite.isInitialWrite();
61
- let initialWrite;
62
- if (!newMessageIsInitialWrite) {
63
- try {
64
- initialWrite = yield RecordsWrite.getInitialWrite(existingMessages);
65
- RecordsWrite.verifyEqualityOfImmutableProperties(initialWrite, message);
66
- }
67
- catch (e) {
68
- return messageReplyFromError(e, 400);
69
- }
70
- }
71
- const newestExistingMessage = yield Message.getNewestMessage(existingMessages);
72
- let incomingMessageIsNewest = false;
73
- let newestMessage; // keep reference of newest message for pruning later
74
- if (newestExistingMessage === undefined || (yield Message.isNewer(message, newestExistingMessage))) {
75
- incomingMessageIsNewest = true;
76
- newestMessage = message;
69
+ }
70
+ // Look up the core protocol (if any) for the incoming message so that lifecycle hooks
71
+ // can be dispatched generically rather than checking for specific protocol URIs.
72
+ const coreProtocol = message.descriptor.protocol !== undefined
73
+ ? this.deps.coreProtocols?.get(message.descriptor.protocol)
74
+ : undefined;
75
+ try {
76
+ if (newestExistingMessage?.descriptor.method === DwnMethodName.Delete) {
77
+ throw new DwnError(DwnErrorCode.RecordsWriteNotAllowedAfterDelete, 'RecordsWrite is not allowed after a RecordsDelete.');
77
78
  }
78
- else { // existing message is the same age or newer than the incoming message
79
- newestMessage = newestExistingMessage;
79
+ // Dispatch pre-processing hooks to the core protocol, if applicable.
80
+ // This allows core protocols to perform cross-record validation before storage
81
+ // (e.g. ensuring revocation tag consistency with the parent grant's scoped protocol).
82
+ if (coreProtocol?.preProcessWrite !== undefined) {
83
+ await coreProtocol.preProcessWrite(tenant, message, this.deps.messageStore);
80
84
  }
81
- if (!incomingMessageIsNewest) {
82
- return {
83
- status: { code: 409, detail: 'Conflict' }
84
- };
85
+ // 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
86
+ // This would allow an initial write to be written to the DB without data, but having it not queryable,
87
+ // because query implementation filters on `isLatestBaseState` being `true`
88
+ // thus preventing a user's attempt to gain authorized access to data by referencing the dataCid of a private data in their initial writes,
89
+ // See: https://github.com/enboxorg/enbox/issues/359 for more info
90
+ let isLatestBaseState = false;
91
+ let messageWithOptionalEncodedData = message;
92
+ if (dataStream !== undefined) {
93
+ messageWithOptionalEncodedData = await this.processMessageWithDataStream(tenant, message, dataStream);
94
+ isLatestBaseState = true;
85
95
  }
86
- try {
87
- if ((newestExistingMessage === null || newestExistingMessage === void 0 ? void 0 : newestExistingMessage.descriptor.method) === DwnMethodName.Delete) {
88
- throw new DwnError(DwnErrorCode.RecordsWriteNotAllowedAfterDelete, 'RecordsWrite is not allowed after a RecordsDelete.');
89
- }
90
- // NOTE: We want to perform additional validation before storing the RecordsWrite.
91
- // This is necessary for core DWN RecordsWrite that needs additional processing and allows us to fail before the storing and post processing.
92
- //
93
- // Example: Ensures that the protocol tag of a permission revocation RecordsWrite and the parent grant's scoped protocol match.
94
- yield this.preProcessingForCoreRecordsWrite(tenant, message);
95
- // 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
96
- // This would allow an initial write to be written to the DB without data, but having it not queryable,
97
- // because query implementation filters on `isLatestBaseState` being `true`
98
- // thus preventing a user's attempt to gain authorized access to data by referencing the dataCid of a private data in their initial writes,
99
- // See: https://github.com/enboxorg/enbox/issues/359 for more info
100
- let isLatestBaseState = false;
101
- let messageWithOptionalEncodedData = message;
102
- if (dataStream !== undefined) {
103
- messageWithOptionalEncodedData = yield this.processMessageWithDataStream(tenant, message, dataStream);
96
+ else {
97
+ // else data stream is NOT provided
98
+ // if the incoming message is not an initial write, and no dataStream is provided, we would allow it provided it passes validation
99
+ // processMessageWithoutDataStream() abstracts that logic
100
+ if (!newMessageIsInitialWrite) {
101
+ const newestExistingWrite = newestExistingMessage;
102
+ messageWithOptionalEncodedData = await this.processMessageWithoutDataStream(tenant, message, newestExistingWrite);
104
103
  isLatestBaseState = true;
105
104
  }
106
- else {
107
- // else data stream is NOT provided
108
- // if the incoming message is not an initial write, and no dataStream is provided, we would allow it provided it passes validation
109
- // processMessageWithoutDataStream() abstracts that logic
110
- if (!newMessageIsInitialWrite) {
111
- const newestExistingWrite = newestExistingMessage;
112
- messageWithOptionalEncodedData = yield this.processMessageWithoutDataStream(tenant, message, newestExistingWrite);
113
- isLatestBaseState = true;
114
- }
115
- }
116
- const indexes = yield recordsWrite.constructIndexes(isLatestBaseState);
117
- yield this.messageStore.put(tenant, messageWithOptionalEncodedData, indexes);
118
- yield this.stateIndex.insert(tenant, yield Message.getCid(message), indexes);
119
- // NOTE: We only emit a `RecordsWrite` when the message is the latest base state.
120
- // Because we allow a `RecordsWrite` which is not the latest state to be written, but not queried, we shouldn't emit it either.
121
- // It will be emitted as a part of a subsequent next write, if it is the latest base state.
122
- if (this.eventStream !== undefined && isLatestBaseState) {
123
- this.eventStream.emit(tenant, { message, initialWrite }, indexes);
124
- }
125
105
  }
126
- catch (error) {
127
- if (error instanceof DwnError) {
128
- if (error.code === DwnErrorCode.RecordsWriteMissingEncodedDataInPrevious ||
129
- error.code === DwnErrorCode.RecordsWriteMissingDataInPrevious ||
130
- error.code === DwnErrorCode.RecordsWriteNotAllowedAfterDelete ||
131
- error.code === DwnErrorCode.RecordsWriteDataCidMismatch ||
132
- error.code === DwnErrorCode.RecordsWriteDataSizeMismatch ||
133
- error.code.startsWith('PermissionsProtocolValidate') ||
134
- error.code.startsWith('SchemaValidator')) {
135
- return messageReplyFromError(error, 400);
136
- }
137
- }
138
- // else throw
139
- throw error;
140
- }
141
- const messageReply = {
142
- // In order to discern between something that was accepted as a queryable write and something that was accepted
143
- // as an initial state we use separate response codes. See https://github.com/enboxorg/enbox/issues/695
144
- // for more details.
145
- status: (newMessageIsInitialWrite && dataStream === undefined) ?
146
- { code: 204, detail: 'No Content' } :
147
- { code: 202, detail: 'Accepted' }
148
- };
149
- // delete all existing messages of the same record that are not newest, except for the initial write
150
- yield StorageController.deleteAllOlderMessagesButKeepInitialWrite(tenant, existingMessages, newestMessage, this.messageStore, this.dataStore, this.stateIndex);
151
- yield this.postProcessingForCoreRecordsWrite(tenant, recordsWrite);
152
- return messageReply;
153
- });
154
- }
155
- ;
156
- /**
157
- * Performs additional necessary validation before storing the RecordsWrite if it is a core DWN RecordsWrite that needs additional processing.
158
- * For instance: a Permission revocation RecordsWrite.
159
- */
160
- preProcessingForCoreRecordsWrite(tenant, recordsWriteMessage) {
161
- return __awaiter(this, void 0, void 0, function* () {
162
- var _a;
163
- // we validate the protocol tag of the revocation message against the grant's scoped protocol
164
- // to do this we will fetch the grant, and compare the the scoped protocol value to the protocol tag of the revocation message
165
- if (recordsWriteMessage.descriptor.protocol === PermissionsProtocol.uri &&
166
- recordsWriteMessage.descriptor.protocolPath === PermissionsProtocol.revocationPath) {
167
- // get the parentId of the revocation message, which is the permissionGrantId
168
- // fetch the grant in order to get the grant's protocol
169
- const permissionGrantId = recordsWriteMessage.descriptor.parentId;
170
- const grant = yield PermissionsProtocol.fetchGrant(tenant, this.messageStore, permissionGrantId);
171
- // get the protocol values of the revocation message from the protocol tag and the protocol from the grant scope if they are defined
172
- // compare the two values ensuring they must match
173
- const revokeTagProtocol = (_a = recordsWriteMessage.descriptor.tags) === null || _a === void 0 ? void 0 : _a.protocol;
174
- const grantProtocol = 'protocol' in grant.scope ? grant.scope.protocol : undefined;
175
- if (grantProtocol !== revokeTagProtocol) {
176
- throw new DwnError(DwnErrorCode.PermissionsProtocolValidateRevocationProtocolTagMismatch, `Revocation protocol ${revokeTagProtocol} does not match grant protocol ${grantProtocol}`);
177
- }
106
+ const indexes = await recordsWrite.constructIndexes(isLatestBaseState);
107
+ await this.deps.messageStore.put(tenant, messageWithOptionalEncodedData, indexes);
108
+ await this.deps.stateIndex.insert(tenant, await Message.getCid(message), indexes);
109
+ // NOTE: We only emit a `RecordsWrite` when the message is the latest base state.
110
+ // Because we allow a `RecordsWrite` which is not the latest state to be written, but not queried, we shouldn't emit it either.
111
+ // It will be emitted as a part of a subsequent next write, if it is the latest base state.
112
+ if (this.deps.eventLog !== undefined && isLatestBaseState) {
113
+ await this.deps.eventLog.emit(tenant, { message, initialWrite }, indexes);
178
114
  }
179
- });
180
- }
181
- static validateSchemaForCoreRecordsWrite(recordsWriteMessage, dataBytes) {
182
- if (recordsWriteMessage.descriptor.protocol === PermissionsProtocol.uri) {
183
- PermissionsProtocol.validateSchema(recordsWriteMessage, dataBytes);
184
115
  }
185
- }
186
- /**
187
- * Performs additional necessary tasks if the RecordsWrite handled is a core DWN RecordsWrite that need additional processing.
188
- * For instance: a Permission revocation RecordsWrite.
189
- */
190
- postProcessingForCoreRecordsWrite(tenant, recordsWrite) {
191
- return __awaiter(this, void 0, void 0, function* () {
192
- // If this message is a Permission revocation, we need to delete all grant-authorized messages with timestamp after revocation
193
- // TODO: https://github.com/enboxorg/enbox/issues/716
194
- // This code is a direct copy and paste from the original PermissionsRevokeHandler (no longer exists),
195
- // but it appears that there was no test for it and it does not look like the code worked:
196
- // - not seeing `permissionGrantId` being an index
197
- // - not seeing `this.dataStore` being called to delete actual data
198
- // - test coverage is missing for the main delete logic
199
- if (recordsWrite.message.descriptor.protocol === PermissionsProtocol.uri &&
200
- recordsWrite.message.descriptor.protocolPath === PermissionsProtocol.revocationPath) {
201
- const permissionGrantId = recordsWrite.message.descriptor.parentId;
202
- const grantAuthorizedMessagesQuery = {
203
- permissionGrantId,
204
- dateCreated: { gte: recordsWrite.message.descriptor.messageTimestamp },
205
- };
206
- const { messages: grantAuthorizedMessagesAfterRevoke } = yield this.messageStore.query(tenant, [grantAuthorizedMessagesQuery]);
207
- const grantAuthorizedMessageCidsAfterRevoke = [];
208
- for (const grantAuthorizedMessage of grantAuthorizedMessagesAfterRevoke) {
209
- const messageCid = yield Message.getCid(grantAuthorizedMessage);
210
- yield this.messageStore.delete(tenant, messageCid);
116
+ catch (error) {
117
+ if (error instanceof DwnError) {
118
+ if (error.code === DwnErrorCode.RecordsWriteMissingEncodedDataInPrevious ||
119
+ error.code === DwnErrorCode.RecordsWriteMissingDataInPrevious ||
120
+ error.code === DwnErrorCode.RecordsWriteNotAllowedAfterDelete ||
121
+ error.code === DwnErrorCode.RecordsWriteDataCidMismatch ||
122
+ error.code === DwnErrorCode.RecordsWriteDataSizeMismatch ||
123
+ error.code.startsWith('SchemaValidator') ||
124
+ this.deps.coreProtocols?.mapErrorToStatusCode(error.code) !== undefined) {
125
+ return messageReplyFromError(error, 400);
211
126
  }
212
- this.stateIndex.delete(tenant, grantAuthorizedMessageCidsAfterRevoke);
213
127
  }
214
- });
128
+ // else throw
129
+ throw error;
130
+ }
131
+ const messageReply = {
132
+ // In order to discern between something that was accepted as a queryable write and something that was accepted
133
+ // as an initial state we use separate response codes. See https://github.com/enboxorg/enbox/issues/695
134
+ // for more details.
135
+ status: (newMessageIsInitialWrite && dataStream === undefined) ?
136
+ { code: 204, detail: 'No Content' } :
137
+ { code: 202, detail: 'Accepted' }
138
+ };
139
+ // delete all existing messages of the same record that are not newest, except for the initial write
140
+ await StorageController.deleteAllOlderMessagesButKeepInitialWrite(tenant, existingMessages, newestMessage, this.deps.messageStore, this.deps.dataStore, this.deps.stateIndex);
141
+ // Dispatch post-processing hooks to the core protocol, if applicable.
142
+ // This allows core protocols to perform cascading side effects after a successful write
143
+ // (e.g. deleting messages authorized by a revoked grant).
144
+ if (coreProtocol?.postProcessWrite !== undefined) {
145
+ await coreProtocol.postProcessWrite(tenant, recordsWrite, {
146
+ messageStore: this.deps.messageStore,
147
+ dataStore: this.deps.dataStore,
148
+ stateIndex: this.deps.stateIndex,
149
+ });
150
+ }
151
+ return messageReply;
215
152
  }
153
+ ;
216
154
  /**
217
155
  * Returns a `RecordsQueryReplyEntry` with a copy of the incoming message and the incoming data encoded to `Base64URL`.
218
156
  */
219
- cloneAndAddEncodedData(message, dataBytes) {
220
- return __awaiter(this, void 0, void 0, function* () {
221
- const recordsWrite = Object.assign({}, message);
222
- recordsWrite.encodedData = Encoder.bytesToBase64Url(dataBytes);
223
- return recordsWrite;
224
- });
157
+ async cloneAndAddEncodedData(message, dataBytes) {
158
+ const recordsWrite = { ...message };
159
+ recordsWrite.encodedData = Encoder.bytesToBase64Url(dataBytes);
160
+ return recordsWrite;
225
161
  }
226
- processMessageWithDataStream(tenant, message, dataStream) {
227
- return __awaiter(this, void 0, void 0, function* () {
228
- let messageWithOptionalEncodedData = message;
229
- // if data is below the threshold, we store it within MessageStore
230
- if (message.descriptor.dataSize <= DwnConstant.maxDataSizeAllowedToBeEncoded) {
231
- // validate data integrity before setting.
232
- const dataBytes = yield DataStream.toBytes(dataStream);
233
- const dataCid = yield Cid.computeDagPbCidFromBytes(dataBytes);
234
- RecordsWriteHandler.validateDataIntegrity(message.descriptor.dataCid, message.descriptor.dataSize, dataCid, dataBytes.length);
235
- RecordsWriteHandler.validateSchemaForCoreRecordsWrite(message, dataBytes);
236
- messageWithOptionalEncodedData = yield this.cloneAndAddEncodedData(message, dataBytes);
162
+ async processMessageWithDataStream(tenant, message, dataStream) {
163
+ let messageWithOptionalEncodedData = message;
164
+ // if data is below the threshold, we store it within MessageStore
165
+ if (message.descriptor.dataSize <= DwnConstant.maxDataSizeAllowedToBeEncoded) {
166
+ // validate data integrity before setting.
167
+ const dataBytes = await DataStream.toBytes(dataStream);
168
+ const dataCid = await Cid.computeDagPbCidFromBytes(dataBytes);
169
+ RecordsWriteHandler.validateDataIntegrity(message.descriptor.dataCid, message.descriptor.dataSize, dataCid, dataBytes.length);
170
+ // Dispatch schema validation to the core protocol, if applicable.
171
+ const coreProtocol = message.descriptor.protocol !== undefined
172
+ ? this.deps.coreProtocols?.get(message.descriptor.protocol)
173
+ : undefined;
174
+ if (coreProtocol?.validateRecord !== undefined) {
175
+ coreProtocol.validateRecord(message, dataBytes);
237
176
  }
238
- else {
239
- // split the dataStream into two: one for CID computation and one for storage
240
- const [dataStreamCopy1, dataStreamCopy2] = DataStream.duplicateDataStream(dataStream, 2);
241
- try {
242
- // perform storage and CID computation in parallel
243
- const [dataCid, DataStorePutResult] = yield Promise.all([
244
- Cid.computeDagPbCidFromStream(dataStreamCopy1),
245
- this.dataStore.put(tenant, message.recordId, message.descriptor.dataCid, dataStreamCopy2)
246
- ]);
247
- RecordsWriteHandler.validateDataIntegrity(message.descriptor.dataCid, message.descriptor.dataSize, dataCid, DataStorePutResult.dataSize);
248
- }
249
- catch (error) {
250
- // unwind/delete data if we have issue with storage or the data failed integrity validation
251
- yield this.dataStore.delete(tenant, message.recordId, message.descriptor.dataCid);
252
- throw error;
253
- }
177
+ messageWithOptionalEncodedData = await this.cloneAndAddEncodedData(message, dataBytes);
178
+ }
179
+ else {
180
+ // split the dataStream into two: one for CID computation and one for storage
181
+ const [dataStreamCopy1, dataStreamCopy2] = DataStream.duplicateDataStream(dataStream, 2);
182
+ try {
183
+ // perform storage and CID computation in parallel
184
+ const [dataCid, DataStorePutResult] = await Promise.all([
185
+ Cid.computeDagPbCidFromStream(dataStreamCopy1),
186
+ this.deps.dataStore.put(tenant, message.recordId, message.descriptor.dataCid, dataStreamCopy2)
187
+ ]);
188
+ RecordsWriteHandler.validateDataIntegrity(message.descriptor.dataCid, message.descriptor.dataSize, dataCid, DataStorePutResult.dataSize);
254
189
  }
255
- return messageWithOptionalEncodedData;
256
- });
190
+ catch (error) {
191
+ // unwind/delete data if we have issue with storage or the data failed integrity validation
192
+ await this.deps.dataStore.delete(tenant, message.recordId, message.descriptor.dataCid);
193
+ throw error;
194
+ }
195
+ }
196
+ return messageWithOptionalEncodedData;
257
197
  }
258
- processMessageWithoutDataStream(tenant, message, newestExistingWrite) {
259
- return __awaiter(this, void 0, void 0, function* () {
260
- const messageWithOptionalEncodedData = Object.assign({}, message); // clone
261
- const { dataCid, dataSize } = message.descriptor;
262
- // Since incoming message is not an initial write, and no dataStream is provided, we first check integrity against newest existing write.
263
- // we preform the dataCid check in case a user attempts to gain access to data by referencing a different known dataCid,
264
- // so we insure that the data is already associated with the existing newest message
265
- // See: https://github.com/enboxorg/enbox/issues/359 for more info
266
- RecordsWriteHandler.validateDataIntegrity(dataCid, dataSize, newestExistingWrite.descriptor.dataCid, newestExistingWrite.descriptor.dataSize);
267
- if (dataSize <= DwnConstant.maxDataSizeAllowedToBeEncoded) {
268
- // we encode the data from the original write if it is smaller than the data-store threshold
269
- if (newestExistingWrite.encodedData !== undefined) {
270
- messageWithOptionalEncodedData.encodedData = newestExistingWrite.encodedData;
271
- }
272
- else {
273
- throw new DwnError(DwnErrorCode.RecordsWriteMissingEncodedDataInPrevious, `No dataStream was provided and unable to get data from previous message`);
274
- }
198
+ async processMessageWithoutDataStream(tenant, message, newestExistingWrite) {
199
+ const messageWithOptionalEncodedData = { ...message }; // clone
200
+ const { dataCid, dataSize } = message.descriptor;
201
+ // Since incoming message is not an initial write, and no dataStream is provided, we first check integrity against newest existing write.
202
+ // we preform the dataCid check in case a user attempts to gain access to data by referencing a different known dataCid,
203
+ // so we insure that the data is already associated with the existing newest message
204
+ // See: https://github.com/enboxorg/enbox/issues/359 for more info
205
+ RecordsWriteHandler.validateDataIntegrity(dataCid, dataSize, newestExistingWrite.descriptor.dataCid, newestExistingWrite.descriptor.dataSize);
206
+ if (dataSize <= DwnConstant.maxDataSizeAllowedToBeEncoded) {
207
+ // we encode the data from the original write if it is smaller than the data-store threshold
208
+ if (newestExistingWrite.encodedData !== undefined) {
209
+ messageWithOptionalEncodedData.encodedData = newestExistingWrite.encodedData;
275
210
  }
276
211
  else {
277
- // else just make sure the data is in the data store
278
- // attempt to retrieve the data from the previous message
279
- const DataStoreGetResult = yield this.dataStore.get(tenant, newestExistingWrite.recordId, message.descriptor.dataCid);
280
- if (DataStoreGetResult === undefined) {
281
- throw new DwnError(DwnErrorCode.RecordsWriteMissingDataInPrevious, `No dataStream was provided and unable to get data from previous message`);
282
- }
212
+ throw new DwnError(DwnErrorCode.RecordsWriteMissingEncodedDataInPrevious, `No dataStream was provided and unable to get data from previous message`);
213
+ }
214
+ }
215
+ else {
216
+ // else just make sure the data is in the data store
217
+ // attempt to retrieve the data from the previous message
218
+ const DataStoreGetResult = await this.deps.dataStore.get(tenant, newestExistingWrite.recordId, message.descriptor.dataCid);
219
+ if (DataStoreGetResult === undefined) {
220
+ throw new DwnError(DwnErrorCode.RecordsWriteMissingDataInPrevious, `No dataStream was provided and unable to get data from previous message`);
283
221
  }
284
- return messageWithOptionalEncodedData;
285
- });
222
+ }
223
+ return messageWithOptionalEncodedData;
286
224
  }
287
225
  /**
288
226
  * Validates the expected `dataCid` and `dataSize` in the descriptor vs the received data.
@@ -300,44 +238,39 @@ export class RecordsWriteHandler {
300
238
  throw new DwnError(DwnErrorCode.RecordsWriteDataSizeMismatch, `actual data size ${actualDataSize} bytes does not match dataSize in descriptor: ${expectedDataSize}`);
301
239
  }
302
240
  }
303
- static authorizeRecordsWrite(tenant, recordsWrite, messageStore) {
304
- return __awaiter(this, void 0, void 0, function* () {
305
- // if owner signature is given (`owner` is not `undefined`), it must be the same as the tenant DID
306
- if (recordsWrite.owner !== undefined && recordsWrite.owner !== tenant) {
307
- throw new DwnError(DwnErrorCode.RecordsWriteOwnerAndTenantMismatch, `Owner ${recordsWrite.owner} must be the same as tenant ${tenant} when specified.`);
308
- }
309
- if (recordsWrite.isSignedByAuthorDelegate) {
310
- yield recordsWrite.authorizeAuthorDelegate(messageStore);
311
- }
312
- if (recordsWrite.isSignedByOwnerDelegate) {
313
- yield recordsWrite.authorizeOwnerDelegate(messageStore);
314
- }
315
- if (recordsWrite.owner !== undefined) {
316
- // if incoming message is a write retained by this tenant, we by-design always allow
317
- // NOTE: the "owner === tenant" check is already done earlier in this method
318
- return;
319
- }
320
- else if (recordsWrite.author === tenant) {
321
- // if author is the same as the target tenant, we can directly grant access
322
- return;
323
- }
324
- else if (recordsWrite.author !== undefined && recordsWrite.signaturePayload.permissionGrantId !== undefined) {
325
- const permissionGrant = yield PermissionsProtocol.fetchGrant(tenant, messageStore, recordsWrite.signaturePayload.permissionGrantId);
326
- yield RecordsGrantAuthorization.authorizeWrite({
327
- recordsWriteMessage: recordsWrite.message,
328
- expectedGrantor: tenant,
329
- expectedGrantee: recordsWrite.author,
330
- permissionGrant,
331
- messageStore
332
- });
333
- }
334
- else if (recordsWrite.message.descriptor.protocol !== undefined) {
335
- yield ProtocolAuthorization.authorizeWrite(tenant, recordsWrite, messageStore);
336
- }
337
- else {
338
- throw new DwnError(DwnErrorCode.RecordsWriteAuthorizationFailed, 'message failed authorization');
339
- }
340
- });
241
+ async authorizeRecordsWrite(tenant, recordsWrite, messageStore) {
242
+ // if owner signature is given (`owner` is not `undefined`), it must be the same as the tenant DID
243
+ if (recordsWrite.owner !== undefined && recordsWrite.owner !== tenant) {
244
+ throw new DwnError(DwnErrorCode.RecordsWriteOwnerAndTenantMismatch, `Owner ${recordsWrite.owner} must be the same as tenant ${tenant} when specified.`);
245
+ }
246
+ if (recordsWrite.isSignedByAuthorDelegate) {
247
+ await recordsWrite.authorizeAuthorDelegate(messageStore);
248
+ }
249
+ if (recordsWrite.isSignedByOwnerDelegate) {
250
+ await recordsWrite.authorizeOwnerDelegate(messageStore);
251
+ }
252
+ if (recordsWrite.owner !== undefined) {
253
+ // if incoming message is a write retained by this tenant, we by-design always allow
254
+ // NOTE: the "owner === tenant" check is already done earlier in this method
255
+ return;
256
+ }
257
+ else if (recordsWrite.author === tenant) {
258
+ // if author is the same as the target tenant, we can directly grant access
259
+ return;
260
+ }
261
+ else if (recordsWrite.author !== undefined && recordsWrite.signaturePayload.permissionGrantId !== undefined) {
262
+ const permissionGrant = await PermissionsProtocol.fetchGrant(tenant, messageStore, recordsWrite.signaturePayload.permissionGrantId);
263
+ await RecordsGrantAuthorization.authorizeWrite({
264
+ recordsWriteMessage: recordsWrite.message,
265
+ expectedGrantor: tenant,
266
+ expectedGrantee: recordsWrite.author,
267
+ permissionGrant,
268
+ messageStore
269
+ });
270
+ }
271
+ else {
272
+ await ProtocolAuthorization.authorizeWrite(tenant, recordsWrite, messageStore, this.deps.coreProtocols);
273
+ }
341
274
  }
342
275
  }
343
276
  //# sourceMappingURL=records-write.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"records-write.js","sourceRoot":"","sources":["../../../../src/handlers/records-write.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"records-write.js","sourceRoot":"","sources":["../../../../src/handlers/records-write.ts"],"names":[],"mappings":"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"}