@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
@@ -7,7 +7,6 @@ import type { PublicKeyJwk } from '../types/jose-types.js';
7
7
  import type {
8
8
  DataEncodedRecordsWriteMessage,
9
9
  InternalRecordsWriteMessage,
10
- RecordsWriteAttestationPayload,
11
10
  RecordsWriteDescriptor,
12
11
  RecordsWriteMessage,
13
12
  RecordsWriteSignaturePayload,
@@ -17,25 +16,35 @@ import type { EncryptionInput, JweEncryption } from '../utils/encryption.js';
17
16
  import type { GenericMessage, GenericSignaturePayload } from '../types/message-types.js';
18
17
 
19
18
  import { Cid } from '../utils/cid.js';
20
- import { Encoder } from '../utils/encoder.js';
21
- import { Encryption } from '../utils/encryption.js';
22
- import { GeneralJwsBuilder } from '../jose/jws/general/builder.js';
23
19
  import { Jws } from '../utils/jws.js';
24
- import { KeyDerivationScheme } from '../utils/hd-key.js';
25
20
  import { Message } from '../core/message.js';
26
21
  import { PermissionGrant } from '../protocols/permission-grant.js';
27
22
  import { Records } from '../utils/records.js';
28
23
  import { RecordsGrantAuthorization } from '../core/records-grant-authorization.js';
29
24
  import { removeUndefinedProperties } from '../utils/object.js';
30
25
  import { Time } from '../utils/time.js';
26
+ import {
27
+ createAttestation,
28
+ createEncryptionProperty,
29
+ createSignerSignature,
30
+ validateAttestationIntegrity,
31
+ } from './records-write-signing.js';
31
32
  import { DwnError, DwnErrorCode } from '../core/dwn-error.js';
32
33
  import { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';
34
+ import {
35
+ fetchInitialRecordsWrite,
36
+ fetchInitialRecordsWriteMessage,
37
+ fetchNewestRecordsWrite,
38
+ getAttesters,
39
+ getInitialWrite,
40
+ verifyEqualityOfImmutableProperties,
41
+ } from './records-write-query.js';
33
42
  import { normalizeProtocolUrl, normalizeSchemaUrl, validateProtocolUrlNormalized, validateSchemaUrlNormalized } from '../utils/url.js';
34
43
 
35
44
  export type RecordsWriteOptions = {
36
45
  recipient?: string;
37
- protocol?: string;
38
- protocolPath?: string;
46
+ protocol: string;
47
+ protocolPath: string;
39
48
  protocolRole?: string;
40
49
  schema?: string;
41
50
  tags?: RecordsWriteTags;
@@ -43,7 +52,7 @@ export type RecordsWriteOptions = {
43
52
 
44
53
  /**
45
54
  * Must be given if this message is for a non-root protocol record.
46
- * If not given, it either means this write is for a root protocol record or a flat-space record.
55
+ * If not given, it means this write is for a root protocol record.
47
56
  */
48
57
  parentContextId?: string;
49
58
 
@@ -226,7 +235,7 @@ export class RecordsWrite implements MessageInterface<RecordsWriteMessage> {
226
235
  }
227
236
  }
228
237
 
229
- this.attesters = RecordsWrite.getAttesters(message);
238
+ this.attesters = getAttesters(message);
230
239
 
231
240
  // consider converting isInitialWrite() & getEntryId() into properties for performance and convenience
232
241
  }
@@ -254,7 +263,7 @@ export class RecordsWrite implements MessageInterface<RecordsWriteMessage> {
254
263
  await Message.validateSignatureStructure(message.authorization.ownerSignature, message.descriptor);
255
264
  }
256
265
 
257
- await RecordsWrite.validateAttestationIntegrity(message);
266
+ await validateAttestationIntegrity(message);
258
267
 
259
268
  const recordsWrite = new RecordsWrite(message);
260
269
 
@@ -273,12 +282,11 @@ export class RecordsWrite implements MessageInterface<RecordsWriteMessage> {
273
282
  * @param options.dateCreated If `undefined`, it will be auto-filled with current time.
274
283
  * @param options.messageTimestamp If `undefined`, it will be auto-filled with current time.
275
284
  * @param options.parentContextId Must be given if this message is for a non-root protocol record.
276
- * If not given, it either means this write is for a root protocol record or a flat-space record.
285
+ * If not given, it means this write is for a root protocol record.
277
286
  */
278
287
  public static async create(options: RecordsWriteOptions): Promise<RecordsWrite> {
279
- if ((options.protocol === undefined && options.protocolPath !== undefined) ||
280
- (options.protocol !== undefined && options.protocolPath === undefined)) {
281
- throw new DwnError(DwnErrorCode.RecordsWriteCreateProtocolAndProtocolPathMutuallyInclusive, '`protocol` and `protocolPath` must both be defined or undefined at the same time');
288
+ if (options.protocol === undefined || options.protocolPath === undefined) {
289
+ throw new DwnError(DwnErrorCode.RecordsWriteCreateMissingProtocol, '`protocol` and `protocolPath` are required');
282
290
  }
283
291
 
284
292
  if ((options.data === undefined && options.dataCid === undefined) ||
@@ -303,7 +311,7 @@ export class RecordsWrite implements MessageInterface<RecordsWriteMessage> {
303
311
  const descriptor: RecordsWriteDescriptor = {
304
312
  interface : DwnInterfaceName.Records,
305
313
  method : DwnMethodName.Write,
306
- protocol : options.protocol !== undefined ? normalizeProtocolUrl(options.protocol) : undefined,
314
+ protocol : normalizeProtocolUrl(options.protocol),
307
315
  protocolPath : options.protocolPath,
308
316
  recipient : options.recipient,
309
317
  schema : options.schema !== undefined ? normalizeSchemaUrl(options.schema) : undefined,
@@ -334,10 +342,10 @@ export class RecordsWrite implements MessageInterface<RecordsWriteMessage> {
334
342
 
335
343
  // `attestation` generation
336
344
  const descriptorCid = await Cid.computeCid(descriptor);
337
- const attestation = await RecordsWrite.createAttestation(descriptorCid, options.attestationSigners);
345
+ const attestation = await createAttestation(descriptorCid, options.attestationSigners);
338
346
 
339
347
  // `encryption` generation
340
- const encryption = await RecordsWrite.createEncryptionProperty(descriptor, options.encryptionInput);
348
+ const encryption = await createEncryptionProperty(options.encryptionInput);
341
349
 
342
350
  const message: InternalRecordsWriteMessage = {
343
351
  recordId,
@@ -465,7 +473,7 @@ export class RecordsWrite implements MessageInterface<RecordsWriteMessage> {
465
473
  }
466
474
 
467
475
  // Build only the new recipients (reuses createEncryptionProperty for ECDH-ES+A256KW logic)
468
- const newEncryption = await RecordsWrite.createEncryptionProperty(this._message.descriptor, encryptionInput);
476
+ const newEncryption = await createEncryptionProperty(encryptionInput);
469
477
  if (newEncryption) {
470
478
  this._message.encryption.recipients.push(...newEncryption.recipients);
471
479
  }
@@ -484,7 +492,7 @@ export class RecordsWrite implements MessageInterface<RecordsWriteMessage> {
484
492
  // the contextKey schema. We chose the in-record approach because it keeps
485
493
  // records self-contained and the read/decrypt path unchanged.
486
494
  } else {
487
- this._message.encryption = await RecordsWrite.createEncryptionProperty(this._message.descriptor, encryptionInput);
495
+ this._message.encryption = await createEncryptionProperty(encryptionInput);
488
496
 
489
497
  // Full replacement invalidates the authorization — caller must re-sign.
490
498
  delete this._message.authorization;
@@ -521,22 +529,19 @@ export class RecordsWrite implements MessageInterface<RecordsWriteMessage> {
521
529
  // compute `recordId` if not given at construction time
522
530
  this._message.recordId = this._message.recordId ?? await RecordsWrite.getEntryId(authorDid, descriptor);
523
531
 
524
- // compute `contextId` if this is a protocol-space record
525
- if (this._message.descriptor.protocol !== undefined) {
526
- // if `parentContextId` is not given, this is a root protocol record
527
- if (this.parentContextId === undefined || this.parentContextId === '') {
528
- this._message.contextId = this._message.recordId;
529
- } else {
530
- // else this is a non-root protocol record
531
-
532
- this._message.contextId = this.parentContextId + '/' + this._message.recordId;
533
- }
532
+ // compute `contextId` all records belong to a protocol
533
+ if (this.parentContextId === undefined || this.parentContextId === '') {
534
+ // root protocol record
535
+ this._message.contextId = this._message.recordId;
536
+ } else {
537
+ // non-root protocol record
538
+ this._message.contextId = this.parentContextId + '/' + this._message.recordId;
534
539
  }
535
540
 
536
541
  // `signature` generation
537
- const signature = await RecordsWrite.createSignerSignature({
542
+ const signature = await createSignerSignature({
538
543
  recordId : this._message.recordId,
539
- contextId : this._message.contextId,
544
+ contextId : this._message.contextId!, // contextId is computed just above, always defined here
540
545
  descriptorCid,
541
546
  attestation : this._message.attestation,
542
547
  encryption : this._message.encryption,
@@ -580,7 +585,6 @@ export class RecordsWrite implements MessageInterface<RecordsWriteMessage> {
580
585
 
581
586
  this._ownerSignaturePayload = Jws.decodePlainObjectPayload(ownerSignature);
582
587
  this._owner = Jws.extractDid(signer.keyId);
583
- ;
584
588
  }
585
589
 
586
590
  /**
@@ -625,9 +629,8 @@ export class RecordsWrite implements MessageInterface<RecordsWriteMessage> {
625
629
  );
626
630
  }
627
631
 
628
- // if the message is also a protocol context root, the `contextId` must match the expected deterministic value
629
- if (this.message.descriptor.protocol !== undefined &&
630
- this.message.descriptor.parentId === undefined) {
632
+ // if the message is a protocol context root, the `contextId` must match the expected deterministic value
633
+ if (this.message.descriptor.parentId === undefined) {
631
634
  const expectedContextId = await this.getEntryId();
632
635
 
633
636
  if (this.message.contextId !== expectedContextId) {
@@ -690,9 +693,7 @@ export class RecordsWrite implements MessageInterface<RecordsWriteMessage> {
690
693
  }
691
694
  }
692
695
 
693
- if (this.message.descriptor.protocol !== undefined) {
694
- validateProtocolUrlNormalized(this.message.descriptor.protocol);
695
- }
696
+ validateProtocolUrlNormalized(this.message.descriptor.protocol);
696
697
  if (this.message.descriptor.schema !== undefined) {
697
698
  validateSchemaUrlNormalized(this.message.descriptor.schema);
698
699
  }
@@ -704,45 +705,6 @@ export class RecordsWrite implements MessageInterface<RecordsWriteMessage> {
704
705
  }
705
706
  }
706
707
 
707
- /**
708
- * Validates the structural integrity of the `attestation` property.
709
- * NOTE: Cryptographic verification of attestation signatures is performed in `authenticate()`.
710
- */
711
- private static async validateAttestationIntegrity(message: RecordsWriteMessage): Promise<void> {
712
- if (message.attestation === undefined) {
713
- return;
714
- }
715
-
716
- // TODO: multi-attesters to be unblocked by #205 - Revisit database interfaces (https://github.com/enboxorg/enbox/issues/205)
717
- if (message.attestation.signatures.length !== 1) {
718
- throw new DwnError(
719
- DwnErrorCode.RecordsWriteAttestationIntegrityMoreThanOneSignature,
720
- `Currently implementation only supports 1 attester, but got ${message.attestation.signatures.length}`
721
- );
722
- }
723
-
724
- const payloadJson = Jws.decodePlainObjectPayload(message.attestation);
725
- const { descriptorCid } = payloadJson;
726
-
727
- // `descriptorCid` validation - ensure that the provided descriptorCid matches the CID of the actual message
728
- const expectedDescriptorCid = await Cid.computeCid(message.descriptor);
729
- if (descriptorCid !== expectedDescriptorCid) {
730
- throw new DwnError(
731
- DwnErrorCode.RecordsWriteAttestationIntegrityDescriptorCidMismatch,
732
- `descriptorCid ${descriptorCid} does not match expected descriptorCid ${expectedDescriptorCid}`
733
- );
734
- }
735
-
736
- // check to ensure that no other unexpected properties exist in payload.
737
- const propertyCount = Object.keys(payloadJson).length;
738
- if (propertyCount > 1) {
739
- throw new DwnError(
740
- DwnErrorCode.RecordsWriteAttestationIntegrityInvalidPayloadProperty,
741
- `Only 'descriptorCid' is allowed in attestation payload, but got ${propertyCount} properties.`
742
- );
743
- }
744
- };
745
-
746
708
  /**
747
709
  * Computes the deterministic Entry ID of this message.
748
710
  */
@@ -799,9 +761,9 @@ export class RecordsWrite implements MessageInterface<RecordsWriteMessage> {
799
761
  }
800
762
 
801
763
  // add additional indexes to optional values if given
802
- // TODO: index multi-attesters to be unblocked by #205 - Revisit database interfaces (https://github.com/enboxorg/enbox/issues/205)
764
+ // TODO: index multiple attesters (https://github.com/enboxorg/enbox/issues/223)
803
765
  if (this.attesters.length > 0) { indexes.attester = this.attesters[0]; }
804
- if (message.contextId !== undefined) { indexes.contextId = message.contextId; }
766
+ indexes.contextId = message.contextId;
805
767
 
806
768
  return indexes;
807
769
  }
@@ -811,7 +773,7 @@ export class RecordsWrite implements MessageInterface<RecordsWriteMessage> {
811
773
  * @param messageStore Used to check if the grant has been revoked.
812
774
  */
813
775
  public async authorizeAuthorDelegate(messageStore: MessageStore): Promise<void> {
814
- const delegatedGrant = await PermissionGrant.parse(this.message.authorization.authorDelegatedGrant!);
776
+ const delegatedGrant = PermissionGrant.parse(this.message.authorization.authorDelegatedGrant!);
815
777
  await RecordsGrantAuthorization.authorizeWrite({
816
778
  recordsWriteMessage : this.message,
817
779
  expectedGrantor : this.author!,
@@ -826,7 +788,7 @@ export class RecordsWrite implements MessageInterface<RecordsWriteMessage> {
826
788
  * @param messageStore Used to check if the grant has been revoked.
827
789
  */
828
790
  public async authorizeOwnerDelegate(messageStore: MessageStore): Promise<void> {
829
- const delegatedGrant = await PermissionGrant.parse(this.message.authorization.ownerDelegatedGrant!);
791
+ const delegatedGrant = PermissionGrant.parse(this.message.authorization.ownerDelegatedGrant!);
830
792
  await RecordsGrantAuthorization.authorizeWrite({
831
793
  recordsWriteMessage : this.message,
832
794
  expectedGrantor : this.owner!,
@@ -852,76 +814,15 @@ export class RecordsWrite implements MessageInterface<RecordsWriteMessage> {
852
814
  return (entryId === recordsWriteMessage.recordId);
853
815
  }
854
816
 
855
- /**
856
- * Creates the JWE `encryption` property if encryption input is given. Else `undefined` is returned.
857
- * Uses ECDH-ES+A256KW key agreement with X25519 and AEAD content encryption (A256GCM or XC20P).
858
- * @param descriptor Descriptor of the `RecordsWrite` message which contains the information needed by key path derivation schemes.
859
- */
860
- /**
861
- * Creates the JWE `encryption` property if encryption input is given. Else `undefined` is returned.
862
- * Uses ECDH-ES+A256KW key agreement with X25519 and AEAD content encryption (A256GCM or XC20P).
863
- * @param descriptor Descriptor of the `RecordsWrite` message which contains the information needed by key path derivation schemes.
864
- * @param encryptionInput The encryption input containing CEK, IV, and recipient key encryption inputs.
865
- * @param tag The authentication tag from the AEAD content encryption (stored in the JWE, separate from the ciphertext).
866
- */
867
- /**
868
- * Creates the JWE `encryption` property if encryption input is given. Else `undefined` is returned.
869
- * Uses ECDH-ES+A256KW key agreement with X25519 and AEAD content encryption (A256GCM or XC20P).
870
- * @param descriptor Descriptor of the `RecordsWrite` message which contains the information needed by key path derivation schemes.
871
- * @param encryptionInput The encryption input containing CEK, IV, authentication tag, and recipient key encryption inputs.
872
- */
873
- private static async createEncryptionProperty(
874
- descriptor: RecordsWriteDescriptor,
875
- encryptionInput: EncryptionInput | undefined,
876
- ): Promise<JweEncryption | undefined> {
877
- if (encryptionInput === undefined) {
878
- return undefined;
879
- }
880
-
881
- // Validate derivation scheme prerequisites
882
- for (const keyEncryptionInput of encryptionInput.keyEncryptionInputs) {
883
- if (keyEncryptionInput.derivationScheme === KeyDerivationScheme.ProtocolPath && descriptor.protocol === undefined) {
884
- throw new DwnError(
885
- DwnErrorCode.RecordsWriteMissingProtocol,
886
- '`protocols` encryption scheme cannot be applied to record without the `protocol` property.'
887
- );
888
- }
889
-
890
- if (keyEncryptionInput.derivationScheme === KeyDerivationScheme.Schemas && descriptor.schema === undefined) {
891
- throw new DwnError(
892
- DwnErrorCode.RecordsWriteMissingSchema,
893
- '`schemas` encryption scheme cannot be applied to record without the `schema` property.'
894
- );
895
- }
896
- }
897
-
898
- // Build the JWE structure. The authentication tag comes from the AEAD encryption of record data.
899
- const jwe = await Encryption.buildJwe(encryptionInput, encryptionInput.authenticationTag);
900
-
901
- return jwe;
902
- }
903
-
904
- /**
905
- * Creates the `attestation` property of a RecordsWrite message if given signature inputs; returns `undefined` otherwise.
906
- */
817
+ /** Delegate to `createAttestation` in `records-write-signing.ts`. */
907
818
  public static async createAttestation(descriptorCid: string, signers?: MessageSigner[]): Promise<GeneralJws | undefined> {
908
- if (signers === undefined || signers.length === 0) {
909
- return undefined;
910
- }
911
-
912
- const attestationPayload: RecordsWriteAttestationPayload = { descriptorCid };
913
- const attestationPayloadBytes = Encoder.objectToBytes(attestationPayload);
914
-
915
- const builder = await GeneralJwsBuilder.create(attestationPayloadBytes, signers);
916
- return builder.getJws();
819
+ return createAttestation(descriptorCid, signers);
917
820
  }
918
821
 
919
- /**
920
- * Creates the `signature` property in the `authorization` of a `RecordsWrite` message.
921
- */
822
+ /** Delegate to `createSignerSignature` in `records-write-signing.ts`. */
922
823
  public static async createSignerSignature(input: {
923
824
  recordId: string,
924
- contextId: string | undefined,
825
+ contextId: string,
925
826
  descriptorCid: string,
926
827
  attestation: GeneralJws | undefined,
927
828
  encryption: JweEncryption | undefined,
@@ -930,140 +831,44 @@ export class RecordsWrite implements MessageInterface<RecordsWriteMessage> {
930
831
  permissionGrantId?: string,
931
832
  protocolRole?: string
932
833
  }): Promise<GeneralJws> {
933
- const { recordId, contextId, descriptorCid, attestation, encryption, signer, delegatedGrantId, permissionGrantId, protocolRole } = input;
934
-
935
- const attestationCid = attestation ? await Cid.computeCid(attestation) : undefined;
936
- const encryptionCid = encryption ? await Cid.computeCid(encryption) : undefined;
937
-
938
- const signaturePayload: RecordsWriteSignaturePayload = {
939
- recordId,
940
- descriptorCid,
941
- contextId,
942
- attestationCid,
943
- encryptionCid,
944
- delegatedGrantId,
945
- permissionGrantId,
946
- protocolRole
947
- };
948
- removeUndefinedProperties(signaturePayload);
949
-
950
- const signaturePayloadBytes = Encoder.objectToBytes(signaturePayload);
951
-
952
- const builder = await GeneralJwsBuilder.create(signaturePayloadBytes, [signer]);
953
- const signature = builder.getJws();
954
-
955
- return signature;
834
+ return createSignerSignature(input);
956
835
  }
957
836
 
958
- /**
959
- * Gets the initial write from the given list of `RecordsWrite`.
960
- */
837
+ /** Delegate to `getInitialWrite` in `records-write-query.ts`. */
961
838
  public static async getInitialWrite(messages: GenericMessage[]): Promise<RecordsWriteMessage> {
962
- for (const message of messages) {
963
- if (await RecordsWrite.isInitialWrite(message)) {
964
- return message as RecordsWriteMessage;
965
- }
966
- }
967
-
968
- throw new DwnError(DwnErrorCode.RecordsWriteGetInitialWriteNotFound, `Initial write is not found.`);
839
+ return getInitialWrite(messages);
969
840
  }
970
841
 
971
- /**
972
- * Verifies that immutable properties of the two given messages are identical.
973
- * @throws {Error} if immutable properties between two RecordsWrite message
974
- */
975
- public static verifyEqualityOfImmutableProperties(existingWriteMessage: RecordsWriteMessage, newMessage: RecordsWriteMessage): boolean {
976
- const mutableDescriptorProperties = ['dataCid', 'dataSize', 'dataFormat', 'datePublished', 'published', 'messageTimestamp', 'tags'];
977
-
978
- // get distinct property names that exist in either the existing message given or new message
979
- let descriptorPropertyNames: string[] = [];
980
- descriptorPropertyNames.push(...Object.keys(existingWriteMessage.descriptor));
981
- descriptorPropertyNames.push(...Object.keys(newMessage.descriptor));
982
- descriptorPropertyNames = [...new Set(descriptorPropertyNames)]; // step to remove duplicates
983
-
984
- // ensure all immutable properties are not modified
985
- for (const descriptorPropertyName of descriptorPropertyNames) {
986
- // if property is supposed to be immutable
987
- if (mutableDescriptorProperties.indexOf(descriptorPropertyName) === -1) {
988
- const valueInExistingWrite = (existingWriteMessage.descriptor as Record<string, unknown>)[descriptorPropertyName];
989
- const valueInNewMessage = (newMessage.descriptor as Record<string, unknown>)[descriptorPropertyName];
990
- if (valueInNewMessage !== valueInExistingWrite) {
991
- throw new DwnError(
992
- DwnErrorCode.RecordsWriteImmutablePropertyChanged,
993
- `${descriptorPropertyName} is an immutable property: cannot change '${valueInExistingWrite}' to '${valueInNewMessage}'`
994
- );
995
- }
996
- }
997
- }
998
-
999
- return true;
842
+ /** Delegate to `verifyEqualityOfImmutableProperties` in `records-write-query.ts`. */
843
+ public static verifyEqualityOfImmutableProperties(
844
+ existingWriteMessage: RecordsWriteMessage, newMessage: RecordsWriteMessage
845
+ ): boolean {
846
+ return verifyEqualityOfImmutableProperties(existingWriteMessage, newMessage);
1000
847
  }
1001
848
 
1002
- /**
1003
- * Gets the DID of the attesters of the given message.
1004
- */
849
+ /** Delegate to `getAttesters` in `records-write-query.ts`. */
1005
850
  public static getAttesters(message: InternalRecordsWriteMessage): string[] {
1006
- const attestationSignatures = message.attestation?.signatures ?? [];
1007
- const attesters = attestationSignatures.map((signature) => Jws.getSignerDid(signature));
1008
- return attesters;
851
+ return getAttesters(message);
1009
852
  }
1010
853
 
854
+ /** Delegate to `fetchNewestRecordsWrite` in `records-write-query.ts`. */
1011
855
  public static async fetchNewestRecordsWrite(
1012
- messageStore: MessageStore,
1013
- tenant: string,
1014
- recordId: string,
856
+ messageStore: MessageStore, tenant: string, recordId: string,
1015
857
  ): Promise<RecordsWriteMessage> {
1016
- // get existing RecordsWrite messages matching the `recordId`
1017
- const query = {
1018
- interface : DwnInterfaceName.Records,
1019
- method : DwnMethodName.Write,
1020
- recordId : recordId
1021
- };
1022
-
1023
- const { messages: existingMessages } = await messageStore.query(tenant, [ query ]);
1024
- const newestWrite = await Message.getNewestMessage(existingMessages);
1025
- if (newestWrite !== undefined) {
1026
- return newestWrite as RecordsWriteMessage;
1027
- }
1028
-
1029
- throw new DwnError(DwnErrorCode.RecordsWriteGetNewestWriteRecordNotFound, 'record not found');
858
+ return fetchNewestRecordsWrite(messageStore, tenant, recordId);
1030
859
  }
1031
860
 
1032
- /**
1033
- * Fetches the initial RecordsWrite of a record.
1034
- * @returns The initial RecordsWrite if found; `undefined` otherwise.
1035
- */
861
+ /** Delegate to `fetchInitialRecordsWrite` in `records-write-query.ts`. */
1036
862
  public static async fetchInitialRecordsWrite(
1037
- messageStore: MessageStore,
1038
- tenant: string,
1039
- recordId: string
863
+ messageStore: MessageStore, tenant: string, recordId: string
1040
864
  ): Promise<RecordsWrite | undefined> {
1041
-
1042
- const initialRecordsWriteMessage = await RecordsWrite.fetchInitialRecordsWriteMessage(messageStore, tenant, recordId);
1043
- if (initialRecordsWriteMessage === undefined) {
1044
- return undefined;
1045
- }
1046
-
1047
- const initialRecordsWrite = await RecordsWrite.parse(initialRecordsWriteMessage);
1048
- return initialRecordsWrite;
865
+ return fetchInitialRecordsWrite(messageStore, tenant, recordId) as Promise<RecordsWrite | undefined>;
1049
866
  }
1050
867
 
1051
- /**
1052
- * Fetches the initial RecordsWrite message of a record.
1053
- * @returns The initial RecordsWriteMessage if found; `undefined` otherwise.
1054
- */
868
+ /** Delegate to `fetchInitialRecordsWriteMessage` in `records-write-query.ts`. */
1055
869
  public static async fetchInitialRecordsWriteMessage(
1056
- messageStore: MessageStore,
1057
- tenant: string,
1058
- recordId: string
870
+ messageStore: MessageStore, tenant: string, recordId: string
1059
871
  ): Promise<RecordsWriteMessage | undefined> {
1060
- const query = { entryId: recordId };
1061
- const { messages } = await messageStore.query(tenant, [query]);
1062
-
1063
- if (messages.length === 0) {
1064
- return undefined;
1065
- }
1066
-
1067
- return messages[0] as RecordsWriteMessage;
872
+ return fetchInitialRecordsWriteMessage(messageStore, tenant, recordId);
1068
873
  }
1069
874
  }
@@ -68,7 +68,7 @@ export class PermissionGrant {
68
68
  * and that the decoded data contains `scope` and `dateExpires`.
69
69
  * @throws {DwnError} if any required field is missing.
70
70
  */
71
- public static async parse(message: DataEncodedRecordsWriteMessage): Promise<PermissionGrant> {
71
+ public static parse(message: DataEncodedRecordsWriteMessage): PermissionGrant {
72
72
  PermissionGrant.validateMessage(message);
73
73
  const permissionGrant = new PermissionGrant(message);
74
74
  return permissionGrant;
@@ -49,7 +49,7 @@ export class PermissionRequest {
49
49
  * and that the decoded data contains `scope`.
50
50
  * @throws {DwnError} if any required field is missing.
51
51
  */
52
- public static async parse(message: DataEncodedRecordsWriteMessage): Promise<PermissionRequest> {
52
+ public static parse(message: DataEncodedRecordsWriteMessage): PermissionRequest {
53
53
  PermissionRequest.validateMessage(message);
54
54
  const permissionRequest = new PermissionRequest(message);
55
55
  return permissionRequest;