@enbox/dwn-sdk-js 0.0.7 → 0.1.0

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 (368) 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 +817 -911
  4. package/dist/esm/generated/precompiled-validators.js.map +1 -1
  5. package/dist/esm/src/core/constants.js +11 -0
  6. package/dist/esm/src/core/constants.js.map +1 -0
  7. package/dist/esm/src/core/core-protocol.js +44 -0
  8. package/dist/esm/src/core/core-protocol.js.map +1 -0
  9. package/dist/esm/src/core/dwn-error.js +12 -12
  10. package/dist/esm/src/core/dwn-error.js.map +1 -1
  11. package/dist/esm/src/core/grant-authorization.js +16 -3
  12. package/dist/esm/src/core/grant-authorization.js.map +1 -1
  13. package/dist/esm/src/core/protocol-authorization-action.js +5 -0
  14. package/dist/esm/src/core/protocol-authorization-action.js.map +1 -1
  15. package/dist/esm/src/core/protocol-authorization-validation.js +91 -0
  16. package/dist/esm/src/core/protocol-authorization-validation.js.map +1 -1
  17. package/dist/esm/src/core/protocol-authorization.js +53 -30
  18. package/dist/esm/src/core/protocol-authorization.js.map +1 -1
  19. package/dist/esm/src/core/records-grant-authorization.js +6 -8
  20. package/dist/esm/src/core/records-grant-authorization.js.map +1 -1
  21. package/dist/esm/src/core/resumable-task-manager.js +2 -0
  22. package/dist/esm/src/core/resumable-task-manager.js.map +1 -1
  23. package/dist/esm/src/dwn.js +42 -18
  24. package/dist/esm/src/dwn.js.map +1 -1
  25. package/dist/esm/src/event-stream/event-emitter-event-log.js +204 -0
  26. package/dist/esm/src/event-stream/event-emitter-event-log.js.map +1 -0
  27. package/dist/esm/src/handlers/messages-read.js +7 -11
  28. package/dist/esm/src/handlers/messages-read.js.map +1 -1
  29. package/dist/esm/src/handlers/messages-subscribe.js +22 -24
  30. package/dist/esm/src/handlers/messages-subscribe.js.map +1 -1
  31. package/dist/esm/src/handlers/messages-sync.js +11 -15
  32. package/dist/esm/src/handlers/messages-sync.js.map +1 -1
  33. package/dist/esm/src/handlers/protocols-configure.js +37 -27
  34. package/dist/esm/src/handlers/protocols-configure.js.map +1 -1
  35. package/dist/esm/src/handlers/protocols-query.js +7 -11
  36. package/dist/esm/src/handlers/protocols-query.js.map +1 -1
  37. package/dist/esm/src/handlers/records-count.js +10 -12
  38. package/dist/esm/src/handlers/records-count.js.map +1 -1
  39. package/dist/esm/src/handlers/records-delete.js +10 -18
  40. package/dist/esm/src/handlers/records-delete.js.map +1 -1
  41. package/dist/esm/src/handlers/records-query.js +11 -15
  42. package/dist/esm/src/handlers/records-query.js.map +1 -1
  43. package/dist/esm/src/handlers/records-read.js +31 -26
  44. package/dist/esm/src/handlers/records-read.js.map +1 -1
  45. package/dist/esm/src/handlers/records-subscribe.js +39 -26
  46. package/dist/esm/src/handlers/records-subscribe.js.map +1 -1
  47. package/dist/esm/src/handlers/records-write.js +128 -105
  48. package/dist/esm/src/handlers/records-write.js.map +1 -1
  49. package/dist/esm/src/index.js +5 -2
  50. package/dist/esm/src/index.js.map +1 -1
  51. package/dist/esm/src/interfaces/messages-subscribe.js +1 -0
  52. package/dist/esm/src/interfaces/messages-subscribe.js.map +1 -1
  53. package/dist/esm/src/interfaces/protocols-configure.js +33 -3
  54. package/dist/esm/src/interfaces/protocols-configure.js.map +1 -1
  55. package/dist/esm/src/interfaces/records-count.js +1 -1
  56. package/dist/esm/src/interfaces/records-count.js.map +1 -1
  57. package/dist/esm/src/interfaces/records-delete.js +1 -1
  58. package/dist/esm/src/interfaces/records-delete.js.map +1 -1
  59. package/dist/esm/src/interfaces/records-query.js +1 -1
  60. package/dist/esm/src/interfaces/records-query.js.map +1 -1
  61. package/dist/esm/src/interfaces/records-read.js +1 -1
  62. package/dist/esm/src/interfaces/records-read.js.map +1 -1
  63. package/dist/esm/src/interfaces/records-subscribe.js +2 -1
  64. package/dist/esm/src/interfaces/records-subscribe.js.map +1 -1
  65. package/dist/esm/src/interfaces/records-write-signing.js +1 -12
  66. package/dist/esm/src/interfaces/records-write-signing.js.map +1 -1
  67. package/dist/esm/src/interfaces/records-write.js +25 -41
  68. package/dist/esm/src/interfaces/records-write.js.map +1 -1
  69. package/dist/esm/src/protocols/permission-grant.js +1 -1
  70. package/dist/esm/src/protocols/permission-grant.js.map +1 -1
  71. package/dist/esm/src/protocols/permission-request.js +1 -1
  72. package/dist/esm/src/protocols/permission-request.js.map +1 -1
  73. package/dist/esm/src/protocols/permissions.js +113 -5
  74. package/dist/esm/src/protocols/permissions.js.map +1 -1
  75. package/dist/esm/src/state-index/state-index-level.js +5 -7
  76. package/dist/esm/src/state-index/state-index-level.js.map +1 -1
  77. package/dist/esm/src/store/data-store-level.js +110 -33
  78. package/dist/esm/src/store/data-store-level.js.map +1 -1
  79. package/dist/esm/src/store/index-level.js +42 -32
  80. package/dist/esm/src/store/index-level.js.map +1 -1
  81. package/dist/esm/src/store/storage-controller.js +70 -6
  82. package/dist/esm/src/store/storage-controller.js.map +1 -1
  83. package/dist/esm/src/types/permission-types.js.map +1 -1
  84. package/dist/esm/src/types/protocols-types.js +11 -0
  85. package/dist/esm/src/types/protocols-types.js.map +1 -1
  86. package/dist/esm/src/types/records-types.js.map +1 -1
  87. package/dist/esm/src/utils/hd-key.js +0 -8
  88. package/dist/esm/src/utils/hd-key.js.map +1 -1
  89. package/dist/esm/src/utils/messages.js +16 -34
  90. package/dist/esm/src/utils/messages.js.map +1 -1
  91. package/dist/esm/src/utils/records.js +5 -43
  92. package/dist/esm/src/utils/records.js.map +1 -1
  93. package/dist/esm/tests/core/protocol-authorization.spec.js +2 -1
  94. package/dist/esm/tests/core/protocol-authorization.spec.js.map +1 -1
  95. package/dist/esm/tests/dwn.spec.js +32 -43
  96. package/dist/esm/tests/dwn.spec.js.map +1 -1
  97. package/dist/esm/tests/event-emitter-event-log.spec.js +305 -0
  98. package/dist/esm/tests/event-emitter-event-log.spec.js.map +1 -0
  99. package/dist/esm/tests/features/author-delegated-grant.spec.js +14 -7
  100. package/dist/esm/tests/features/author-delegated-grant.spec.js.map +1 -1
  101. package/dist/esm/tests/features/owner-delegated-grant.spec.js +9 -5
  102. package/dist/esm/tests/features/owner-delegated-grant.spec.js.map +1 -1
  103. package/dist/esm/tests/features/owner-signature.spec.js +14 -7
  104. package/dist/esm/tests/features/owner-signature.spec.js.map +1 -1
  105. package/dist/esm/tests/features/permissions.spec.js +12 -12
  106. package/dist/esm/tests/features/permissions.spec.js.map +1 -1
  107. package/dist/esm/tests/features/protocol-composition.spec.js +636 -5
  108. package/dist/esm/tests/features/protocol-composition.spec.js.map +1 -1
  109. package/dist/esm/tests/features/protocol-create-action.spec.js +4 -4
  110. package/dist/esm/tests/features/protocol-create-action.spec.js.map +1 -1
  111. package/dist/esm/tests/features/protocol-delete-action.spec.js +7 -7
  112. package/dist/esm/tests/features/protocol-delete-action.spec.js.map +1 -1
  113. package/dist/esm/tests/features/protocol-update-action.spec.js +4 -4
  114. package/dist/esm/tests/features/protocol-update-action.spec.js.map +1 -1
  115. package/dist/esm/tests/features/records-delivery.spec.js +236 -0
  116. package/dist/esm/tests/features/records-delivery.spec.js.map +1 -0
  117. package/dist/esm/tests/features/records-immutable.spec.js +315 -0
  118. package/dist/esm/tests/features/records-immutable.spec.js.map +1 -0
  119. package/dist/esm/tests/features/records-prune.spec.js +4 -4
  120. package/dist/esm/tests/features/records-prune.spec.js.map +1 -1
  121. package/dist/esm/tests/features/records-record-limit.spec.js +542 -0
  122. package/dist/esm/tests/features/records-record-limit.spec.js.map +1 -0
  123. package/dist/esm/tests/features/records-squash.spec.js +1055 -0
  124. package/dist/esm/tests/features/records-squash.spec.js.map +1 -0
  125. package/dist/esm/tests/features/records-tags.spec.js +16 -4
  126. package/dist/esm/tests/features/records-tags.spec.js.map +1 -1
  127. package/dist/esm/tests/features/resumable-tasks.spec.js +7 -8
  128. package/dist/esm/tests/features/resumable-tasks.spec.js.map +1 -1
  129. package/dist/esm/tests/handlers/messages-read.spec.js +11 -5
  130. package/dist/esm/tests/handlers/messages-read.spec.js.map +1 -1
  131. package/dist/esm/tests/handlers/messages-subscribe.spec.js +169 -22
  132. package/dist/esm/tests/handlers/messages-subscribe.spec.js.map +1 -1
  133. package/dist/esm/tests/handlers/messages-sync.spec.js +103 -21
  134. package/dist/esm/tests/handlers/messages-sync.spec.js.map +1 -1
  135. package/dist/esm/tests/handlers/protocols-configure.spec.js +5 -5
  136. package/dist/esm/tests/handlers/protocols-configure.spec.js.map +1 -1
  137. package/dist/esm/tests/handlers/protocols-query.spec.js +5 -5
  138. package/dist/esm/tests/handlers/protocols-query.spec.js.map +1 -1
  139. package/dist/esm/tests/handlers/records-count.spec.js +9 -4
  140. package/dist/esm/tests/handlers/records-count.spec.js.map +1 -1
  141. package/dist/esm/tests/handlers/records-delete.spec.js +24 -25
  142. package/dist/esm/tests/handlers/records-delete.spec.js.map +1 -1
  143. package/dist/esm/tests/handlers/records-query.spec.js +68 -9
  144. package/dist/esm/tests/handlers/records-query.spec.js.map +1 -1
  145. package/dist/esm/tests/handlers/records-read.spec.js +24 -138
  146. package/dist/esm/tests/handlers/records-read.spec.js.map +1 -1
  147. package/dist/esm/tests/handlers/records-subscribe.spec.js +175 -35
  148. package/dist/esm/tests/handlers/records-subscribe.spec.js.map +1 -1
  149. package/dist/esm/tests/handlers/records-write.spec.js +176 -72
  150. package/dist/esm/tests/handlers/records-write.spec.js.map +1 -1
  151. package/dist/esm/tests/interfaces/records-write.spec.js +52 -68
  152. package/dist/esm/tests/interfaces/records-write.spec.js.map +1 -1
  153. package/dist/esm/tests/protocols/permission-grant.spec.js +6 -6
  154. package/dist/esm/tests/protocols/permission-grant.spec.js.map +1 -1
  155. package/dist/esm/tests/protocols/permission-request.spec.js +4 -4
  156. package/dist/esm/tests/protocols/permission-request.spec.js.map +1 -1
  157. package/dist/esm/tests/protocols/permissions.spec.js +4 -4
  158. package/dist/esm/tests/protocols/permissions.spec.js.map +1 -1
  159. package/dist/esm/tests/scenarios/aggregator.spec.js +4 -4
  160. package/dist/esm/tests/scenarios/aggregator.spec.js.map +1 -1
  161. package/dist/esm/tests/scenarios/deleted-record.spec.js +350 -5
  162. package/dist/esm/tests/scenarios/deleted-record.spec.js.map +1 -1
  163. package/dist/esm/tests/scenarios/end-to-end-tests.spec.js +4 -4
  164. package/dist/esm/tests/scenarios/end-to-end-tests.spec.js.map +1 -1
  165. package/dist/esm/tests/scenarios/nested-roles.spec.js +4 -4
  166. package/dist/esm/tests/scenarios/nested-roles.spec.js.map +1 -1
  167. package/dist/esm/tests/scenarios/subscriptions.spec.js +93 -40
  168. package/dist/esm/tests/scenarios/subscriptions.spec.js.map +1 -1
  169. package/dist/esm/tests/store/data-store-level.spec.js +102 -41
  170. package/dist/esm/tests/store/data-store-level.spec.js.map +1 -1
  171. package/dist/esm/tests/test-event-stream.js +12 -13
  172. package/dist/esm/tests/test-event-stream.js.map +1 -1
  173. package/dist/esm/tests/test-suite.js +10 -4
  174. package/dist/esm/tests/test-suite.js.map +1 -1
  175. package/dist/esm/tests/utils/messages.spec.js +12 -5
  176. package/dist/esm/tests/utils/messages.spec.js.map +1 -1
  177. package/dist/esm/tests/utils/records.spec.js +8 -12
  178. package/dist/esm/tests/utils/records.spec.js.map +1 -1
  179. package/dist/esm/tests/utils/test-data-generator.js +36 -2
  180. package/dist/esm/tests/utils/test-data-generator.js.map +1 -1
  181. package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js +37 -8
  182. package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js.map +1 -1
  183. package/dist/types/generated/precompiled-validators.d.ts +49 -40
  184. package/dist/types/generated/precompiled-validators.d.ts.map +1 -1
  185. package/dist/types/src/core/constants.d.ts +11 -0
  186. package/dist/types/src/core/constants.d.ts.map +1 -0
  187. package/dist/types/src/core/core-protocol.d.ts +89 -0
  188. package/dist/types/src/core/core-protocol.d.ts.map +1 -0
  189. package/dist/types/src/core/dwn-error.d.ts +12 -12
  190. package/dist/types/src/core/dwn-error.d.ts.map +1 -1
  191. package/dist/types/src/core/grant-authorization.d.ts +6 -2
  192. package/dist/types/src/core/grant-authorization.d.ts.map +1 -1
  193. package/dist/types/src/core/protocol-authorization-action.d.ts.map +1 -1
  194. package/dist/types/src/core/protocol-authorization-validation.d.ts +30 -0
  195. package/dist/types/src/core/protocol-authorization-validation.d.ts.map +1 -1
  196. package/dist/types/src/core/protocol-authorization.d.ts +19 -11
  197. package/dist/types/src/core/protocol-authorization.d.ts.map +1 -1
  198. package/dist/types/src/core/records-grant-authorization.d.ts.map +1 -1
  199. package/dist/types/src/core/resumable-task-manager.d.ts +2 -1
  200. package/dist/types/src/core/resumable-task-manager.d.ts.map +1 -1
  201. package/dist/types/src/dwn.d.ts +19 -7
  202. package/dist/types/src/dwn.d.ts.map +1 -1
  203. package/dist/types/src/event-stream/event-emitter-event-log.d.ts +50 -0
  204. package/dist/types/src/event-stream/event-emitter-event-log.d.ts.map +1 -0
  205. package/dist/types/src/handlers/messages-read.d.ts +3 -8
  206. package/dist/types/src/handlers/messages-read.d.ts.map +1 -1
  207. package/dist/types/src/handlers/messages-subscribe.d.ts +6 -10
  208. package/dist/types/src/handlers/messages-subscribe.d.ts.map +1 -1
  209. package/dist/types/src/handlers/messages-sync.d.ts +3 -8
  210. package/dist/types/src/handlers/messages-sync.d.ts.map +1 -1
  211. package/dist/types/src/handlers/protocols-configure.d.ts +3 -10
  212. package/dist/types/src/handlers/protocols-configure.d.ts.map +1 -1
  213. package/dist/types/src/handlers/protocols-query.d.ts +3 -8
  214. package/dist/types/src/handlers/protocols-query.d.ts.map +1 -1
  215. package/dist/types/src/handlers/records-count.d.ts +3 -6
  216. package/dist/types/src/handlers/records-count.d.ts.map +1 -1
  217. package/dist/types/src/handlers/records-delete.d.ts +3 -8
  218. package/dist/types/src/handlers/records-delete.d.ts.map +1 -1
  219. package/dist/types/src/handlers/records-query.d.ts +3 -8
  220. package/dist/types/src/handlers/records-query.d.ts.map +1 -1
  221. package/dist/types/src/handlers/records-read.d.ts +3 -8
  222. package/dist/types/src/handlers/records-read.d.ts.map +1 -1
  223. package/dist/types/src/handlers/records-subscribe.d.ts +8 -10
  224. package/dist/types/src/handlers/records-subscribe.d.ts.map +1 -1
  225. package/dist/types/src/handlers/records-write.d.ts +12 -25
  226. package/dist/types/src/handlers/records-write.d.ts.map +1 -1
  227. package/dist/types/src/index.d.ts +8 -4
  228. package/dist/types/src/index.d.ts.map +1 -1
  229. package/dist/types/src/interfaces/messages-subscribe.d.ts +5 -0
  230. package/dist/types/src/interfaces/messages-subscribe.d.ts.map +1 -1
  231. package/dist/types/src/interfaces/protocols-configure.d.ts.map +1 -1
  232. package/dist/types/src/interfaces/records-subscribe.d.ts +5 -0
  233. package/dist/types/src/interfaces/records-subscribe.d.ts.map +1 -1
  234. package/dist/types/src/interfaces/records-write-signing.d.ts +3 -4
  235. package/dist/types/src/interfaces/records-write-signing.d.ts.map +1 -1
  236. package/dist/types/src/interfaces/records-write.d.ts +11 -11
  237. package/dist/types/src/interfaces/records-write.d.ts.map +1 -1
  238. package/dist/types/src/protocols/permission-grant.d.ts +1 -1
  239. package/dist/types/src/protocols/permission-grant.d.ts.map +1 -1
  240. package/dist/types/src/protocols/permission-request.d.ts +1 -1
  241. package/dist/types/src/protocols/permission-request.d.ts.map +1 -1
  242. package/dist/types/src/protocols/permissions.d.ts +40 -3
  243. package/dist/types/src/protocols/permissions.d.ts.map +1 -1
  244. package/dist/types/src/state-index/state-index-level.d.ts.map +1 -1
  245. package/dist/types/src/store/data-store-level.d.ts +20 -4
  246. package/dist/types/src/store/data-store-level.d.ts.map +1 -1
  247. package/dist/types/src/store/index-level.d.ts +4 -0
  248. package/dist/types/src/store/index-level.d.ts.map +1 -1
  249. package/dist/types/src/store/storage-controller.d.ts +20 -6
  250. package/dist/types/src/store/storage-controller.d.ts.map +1 -1
  251. package/dist/types/src/types/message-types.d.ts +3 -3
  252. package/dist/types/src/types/message-types.d.ts.map +1 -1
  253. package/dist/types/src/types/messages-types.d.ts +12 -3
  254. package/dist/types/src/types/messages-types.d.ts.map +1 -1
  255. package/dist/types/src/types/method-handler.d.ts +24 -3
  256. package/dist/types/src/types/method-handler.d.ts.map +1 -1
  257. package/dist/types/src/types/permission-types.d.ts +7 -0
  258. package/dist/types/src/types/permission-types.d.ts.map +1 -1
  259. package/dist/types/src/types/protocols-types.d.ts +69 -2
  260. package/dist/types/src/types/protocols-types.d.ts.map +1 -1
  261. package/dist/types/src/types/records-types.d.ts +23 -6
  262. package/dist/types/src/types/records-types.d.ts.map +1 -1
  263. package/dist/types/src/types/subscriptions.d.ts +151 -13
  264. package/dist/types/src/types/subscriptions.d.ts.map +1 -1
  265. package/dist/types/src/utils/hd-key.d.ts +1 -9
  266. package/dist/types/src/utils/hd-key.d.ts.map +1 -1
  267. package/dist/types/src/utils/messages.d.ts +7 -5
  268. package/dist/types/src/utils/messages.d.ts.map +1 -1
  269. package/dist/types/src/utils/records.d.ts +1 -11
  270. package/dist/types/src/utils/records.d.ts.map +1 -1
  271. package/dist/types/tests/dwn.spec.d.ts.map +1 -1
  272. package/dist/types/tests/event-emitter-event-log.spec.d.ts +2 -0
  273. package/dist/types/tests/event-emitter-event-log.spec.d.ts.map +1 -0
  274. package/dist/types/tests/features/author-delegated-grant.spec.d.ts.map +1 -1
  275. package/dist/types/tests/features/owner-delegated-grant.spec.d.ts.map +1 -1
  276. package/dist/types/tests/features/owner-signature.spec.d.ts.map +1 -1
  277. package/dist/types/tests/features/protocol-composition.spec.d.ts.map +1 -1
  278. package/dist/types/tests/features/records-delivery.spec.d.ts +2 -0
  279. package/dist/types/tests/features/records-delivery.spec.d.ts.map +1 -0
  280. package/dist/types/tests/features/records-immutable.spec.d.ts +2 -0
  281. package/dist/types/tests/features/records-immutable.spec.d.ts.map +1 -0
  282. package/dist/types/tests/features/records-record-limit.spec.d.ts +2 -0
  283. package/dist/types/tests/features/records-record-limit.spec.d.ts.map +1 -0
  284. package/dist/types/tests/features/records-squash.spec.d.ts +2 -0
  285. package/dist/types/tests/features/records-squash.spec.d.ts.map +1 -0
  286. package/dist/types/tests/features/records-tags.spec.d.ts.map +1 -1
  287. package/dist/types/tests/features/resumable-tasks.spec.d.ts.map +1 -1
  288. package/dist/types/tests/handlers/messages-read.spec.d.ts.map +1 -1
  289. package/dist/types/tests/handlers/messages-subscribe.spec.d.ts.map +1 -1
  290. package/dist/types/tests/handlers/messages-sync.spec.d.ts.map +1 -1
  291. package/dist/types/tests/handlers/records-count.spec.d.ts.map +1 -1
  292. package/dist/types/tests/handlers/records-delete.spec.d.ts.map +1 -1
  293. package/dist/types/tests/handlers/records-query.spec.d.ts.map +1 -1
  294. package/dist/types/tests/handlers/records-read.spec.d.ts.map +1 -1
  295. package/dist/types/tests/handlers/records-subscribe.spec.d.ts.map +1 -1
  296. package/dist/types/tests/handlers/records-write.spec.d.ts.map +1 -1
  297. package/dist/types/tests/scenarios/deleted-record.spec.d.ts.map +1 -1
  298. package/dist/types/tests/scenarios/subscriptions.spec.d.ts.map +1 -1
  299. package/dist/types/tests/test-event-stream.d.ts +11 -12
  300. package/dist/types/tests/test-event-stream.d.ts.map +1 -1
  301. package/dist/types/tests/test-suite.d.ts +2 -2
  302. package/dist/types/tests/test-suite.d.ts.map +1 -1
  303. package/dist/types/tests/utils/test-data-generator.d.ts +19 -0
  304. package/dist/types/tests/utils/test-data-generator.d.ts.map +1 -1
  305. package/package.json +5 -4
  306. package/src/core/constants.ts +11 -0
  307. package/src/core/core-protocol.ts +129 -0
  308. package/src/core/dwn-error.ts +18 -12
  309. package/src/core/grant-authorization.ts +20 -3
  310. package/src/core/protocol-authorization-action.ts +5 -0
  311. package/src/core/protocol-authorization-validation.ts +133 -0
  312. package/src/core/protocol-authorization.ts +71 -23
  313. package/src/core/records-grant-authorization.ts +6 -8
  314. package/src/core/resumable-task-manager.ts +3 -1
  315. package/src/dwn.ts +58 -73
  316. package/src/event-stream/event-emitter-event-log.ts +283 -0
  317. package/src/handlers/messages-read.ts +8 -9
  318. package/src/handlers/messages-subscribe.ts +24 -28
  319. package/src/handlers/messages-sync.ts +10 -16
  320. package/src/handlers/protocols-configure.ts +47 -32
  321. package/src/handlers/protocols-query.ts +6 -9
  322. package/src/handlers/records-count.ts +11 -10
  323. package/src/handlers/records-delete.ts +12 -21
  324. package/src/handlers/records-query.ts +12 -12
  325. package/src/handlers/records-read.ts +34 -22
  326. package/src/handlers/records-subscribe.ts +47 -26
  327. package/src/handlers/records-write.ts +152 -119
  328. package/src/index.ts +9 -5
  329. package/src/interfaces/messages-subscribe.ts +7 -1
  330. package/src/interfaces/protocols-configure.ts +51 -3
  331. package/src/interfaces/records-count.ts +1 -1
  332. package/src/interfaces/records-delete.ts +1 -1
  333. package/src/interfaces/records-query.ts +1 -1
  334. package/src/interfaces/records-read.ts +1 -1
  335. package/src/interfaces/records-subscribe.ts +8 -1
  336. package/src/interfaces/records-write-signing.ts +2 -22
  337. package/src/interfaces/records-write.ts +35 -48
  338. package/src/protocols/permission-grant.ts +1 -1
  339. package/src/protocols/permission-request.ts +1 -1
  340. package/src/protocols/permissions.ts +148 -6
  341. package/src/state-index/state-index-level.ts +5 -7
  342. package/src/store/data-store-level.ts +124 -34
  343. package/src/store/index-level.ts +44 -35
  344. package/src/store/storage-controller.ts +89 -12
  345. package/src/types/message-types.ts +3 -3
  346. package/src/types/messages-types.ts +12 -3
  347. package/src/types/method-handler.ts +26 -4
  348. package/src/types/mitt.d.ts +28 -0
  349. package/src/types/permission-types.ts +7 -0
  350. package/src/types/protocols-types.ts +78 -1
  351. package/src/types/records-types.ts +24 -6
  352. package/src/types/subscriptions.ts +178 -14
  353. package/src/utils/hd-key.ts +0 -9
  354. package/src/utils/messages.ts +17 -37
  355. package/src/utils/records.ts +7 -58
  356. package/dist/esm/src/event-stream/event-emitter-stream.js +0 -46
  357. package/dist/esm/src/event-stream/event-emitter-stream.js.map +0 -1
  358. package/dist/esm/tests/event-stream/event-emitter-stream.spec.js +0 -68
  359. package/dist/esm/tests/event-stream/event-emitter-stream.spec.js.map +0 -1
  360. package/dist/esm/tests/event-stream/event-stream.spec.js +0 -114
  361. package/dist/esm/tests/event-stream/event-stream.spec.js.map +0 -1
  362. package/dist/types/src/event-stream/event-emitter-stream.d.ts +0 -23
  363. package/dist/types/src/event-stream/event-emitter-stream.d.ts.map +0 -1
  364. package/dist/types/tests/event-stream/event-emitter-stream.spec.d.ts +0 -2
  365. package/dist/types/tests/event-stream/event-emitter-stream.spec.d.ts.map +0 -1
  366. package/dist/types/tests/event-stream/event-stream.spec.d.ts +0 -2
  367. package/dist/types/tests/event-stream/event-stream.spec.d.ts.map +0 -1
  368. package/src/event-stream/event-emitter-stream.ts +0 -69
@@ -13,7 +13,7 @@ import { HdKey } from '../../src/utils/hd-key.js';
13
13
  import { KeyDerivationScheme } from '../../src/utils/hd-key.js';
14
14
  import { RecordsReadHandler } from '../../src/handlers/records-read.js';
15
15
  import { TestDataGenerator } from '../utils/test-data-generator.js';
16
- import { TestEventStream } from '../test-event-stream.js';
16
+ import { TestEventLog } from '../test-event-stream.js';
17
17
  import { TestStores } from '../test-stores.js';
18
18
  import { TestStubGenerator } from '../utils/test-stub-generator.js';
19
19
  import { afterAll, beforeAll, beforeEach, describe, expect, it } from 'bun:test';
@@ -29,7 +29,7 @@ export function testRecordsReadHandler() {
29
29
  let dataStore;
30
30
  let resumableTaskStore;
31
31
  let stateIndex;
32
- let eventStream;
32
+ let eventLog;
33
33
  let dwn;
34
34
  beforeEach(() => {
35
35
  sinon.restore(); // wipe all previous stubs/spies/mocks/fakes
@@ -44,8 +44,8 @@ export function testRecordsReadHandler() {
44
44
  dataStore = stores.dataStore;
45
45
  resumableTaskStore = stores.resumableTaskStore;
46
46
  stateIndex = stores.stateIndex;
47
- eventStream = TestEventStream.get();
48
- dwn = await Dwn.create({ didResolver, messageStore, dataStore, stateIndex, eventStream, resumableTaskStore });
47
+ eventLog = TestEventLog.get();
48
+ dwn = await Dwn.create({ didResolver, messageStore, dataStore, stateIndex, eventLog, resumableTaskStore });
49
49
  });
50
50
  beforeEach(async () => {
51
51
  // clean up before each test rather than after so that a test does not depend on other tests to do the clean up
@@ -59,6 +59,7 @@ export function testRecordsReadHandler() {
59
59
  });
60
60
  it('should allow tenant to RecordsRead their own record', async () => {
61
61
  const alice = await TestDataGenerator.generateDidKeyPersona();
62
+ await TestDataGenerator.installDefaultTestProtocol(dwn, alice);
62
63
  // insert data
63
64
  const { message, dataStream, dataBytes } = await TestDataGenerator.generateRecordsWrite({ author: alice });
64
65
  const writeReply = await dwn.processMessage(alice.did, message, { dataStream });
@@ -80,6 +81,7 @@ export function testRecordsReadHandler() {
80
81
  });
81
82
  it('should not allow non-tenant to RecordsRead a record', async () => {
82
83
  const alice = await TestDataGenerator.generateDidKeyPersona();
84
+ await TestDataGenerator.installDefaultTestProtocol(dwn, alice);
83
85
  // insert data
84
86
  const { message, dataStream } = await TestDataGenerator.generateRecordsWrite({ author: alice });
85
87
  const writeReply = await dwn.processMessage(alice.did, message, { dataStream });
@@ -97,6 +99,7 @@ export function testRecordsReadHandler() {
97
99
  });
98
100
  it('should allow reading of data that is published without `authorization`', async () => {
99
101
  const alice = await TestDataGenerator.generateDidKeyPersona();
102
+ await TestDataGenerator.installDefaultTestProtocol(dwn, alice);
100
103
  // insert public data
101
104
  const { message, dataStream, dataBytes } = await TestDataGenerator.generateRecordsWrite({ author: alice, published: true });
102
105
  const writeReply = await dwn.processMessage(alice.did, message, { dataStream });
@@ -115,6 +118,7 @@ export function testRecordsReadHandler() {
115
118
  });
116
119
  it('should allow an authenticated user to RecordRead data that is published', async () => {
117
120
  const alice = await TestDataGenerator.generateDidKeyPersona();
121
+ await TestDataGenerator.installDefaultTestProtocol(dwn, alice);
118
122
  // insert public data
119
123
  const { message, dataStream, dataBytes } = await TestDataGenerator.generateRecordsWrite({ author: alice, published: true });
120
124
  const writeReply = await dwn.processMessage(alice.did, message, { dataStream });
@@ -135,6 +139,7 @@ export function testRecordsReadHandler() {
135
139
  it('should allow a non-tenant to read RecordsRead data they have received', async () => {
136
140
  const alice = await TestDataGenerator.generateDidKeyPersona();
137
141
  const bob = await TestDataGenerator.generateDidKeyPersona();
142
+ await TestDataGenerator.installDefaultTestProtocol(dwn, alice);
138
143
  // Alice inserts data with Bob as recipient
139
144
  const { message, dataStream, dataBytes } = await TestDataGenerator.generateRecordsWrite({
140
145
  author: alice,
@@ -158,6 +163,7 @@ export function testRecordsReadHandler() {
158
163
  });
159
164
  it('should return 400 when fetching initial write for a deleted record fails', async () => {
160
165
  const alice = await TestDataGenerator.generateDidKeyPersona();
166
+ await TestDataGenerator.installDefaultTestProtocol(dwn, alice);
161
167
  // Write a record
162
168
  const { message: writeMessage, dataStream } = await TestDataGenerator.generateRecordsWrite({ author: alice });
163
169
  const writeReply = await dwn.processMessage(alice.did, writeMessage, { dataStream });
@@ -295,6 +301,7 @@ export function testRecordsReadHandler() {
295
301
  });
296
302
  it('should include `initialWrite` property if RecordsWrite is not initial write', async () => {
297
303
  const alice = await TestDataGenerator.generateDidKeyPersona();
304
+ await TestDataGenerator.installDefaultTestProtocol(dwn, alice);
298
305
  const write = await TestDataGenerator.generateRecordsWrite({ author: alice, published: false });
299
306
  const writeReply = await dwn.processMessage(alice.did, write.message, { dataStream: write.dataStream });
300
307
  expect(writeReply.status.code).toBe(202);
@@ -731,6 +738,7 @@ export function testRecordsReadHandler() {
731
738
  });
732
739
  it('should return the earliest published record when `dateSort` is `PublishedAscending`', async () => {
733
740
  const alice = await TestDataGenerator.generateDidKeyPersona();
741
+ await TestDataGenerator.installDefaultTestProtocol(dwn, alice);
734
742
  const schema = 'aSchema';
735
743
  const write1 = await TestDataGenerator.generateRecordsWrite({
736
744
  author: alice,
@@ -758,6 +766,7 @@ export function testRecordsReadHandler() {
758
766
  });
759
767
  it('should return the latest published record when `dateSort` is `PublishedDescending`', async () => {
760
768
  const alice = await TestDataGenerator.generateDidKeyPersona();
769
+ await TestDataGenerator.installDefaultTestProtocol(dwn, alice);
761
770
  const schema = 'aSchema';
762
771
  const write1 = await TestDataGenerator.generateRecordsWrite({
763
772
  author: alice,
@@ -1036,6 +1045,7 @@ export function testRecordsReadHandler() {
1036
1045
  // scenario: Alice grants Bob access to RecordsWrite, then Bob tries to invoke the grant with RecordsRead
1037
1046
  const alice = await TestDataGenerator.generateDidKeyPersona();
1038
1047
  const bob = await TestDataGenerator.generateDidKeyPersona();
1048
+ await TestDataGenerator.installDefaultTestProtocol(dwn, alice);
1039
1049
  // Alice writes a record which Bob will later try to read
1040
1050
  const { recordsWrite, dataStream } = await TestDataGenerator.generateRecordsWrite({
1041
1051
  author: alice,
@@ -1433,6 +1443,7 @@ export function testRecordsReadHandler() {
1433
1443
  });
1434
1444
  it('should return 404 RecordRead if data has been deleted', async () => {
1435
1445
  const alice = await TestDataGenerator.generateDidKeyPersona();
1446
+ await TestDataGenerator.installDefaultTestProtocol(dwn, alice);
1436
1447
  // insert public data
1437
1448
  const { message, dataStream } = await TestDataGenerator.generateRecordsWrite({ author: alice, published: true });
1438
1449
  const writeReply = await dwn.processMessage(alice.did, message, { dataStream });
@@ -1464,6 +1475,7 @@ export function testRecordsReadHandler() {
1464
1475
  });
1465
1476
  it('should return 404 underlying data store cannot locate the data when data is above threshold', async () => {
1466
1477
  const alice = await TestDataGenerator.generateDidKeyPersona();
1478
+ await TestDataGenerator.installDefaultTestProtocol(dwn, alice);
1467
1479
  sinon.stub(dataStore, 'get').resolves(undefined);
1468
1480
  // insert data larger than the allowed amount in encodedData
1469
1481
  const { message, dataStream } = await TestDataGenerator.generateRecordsWrite({
@@ -1485,6 +1497,7 @@ export function testRecordsReadHandler() {
1485
1497
  describe('data from encodedData', () => {
1486
1498
  it('should not get data from DataStore if encodedData exists', async () => {
1487
1499
  const alice = await TestDataGenerator.generateDidKeyPersona();
1500
+ await TestDataGenerator.installDefaultTestProtocol(dwn, alice);
1488
1501
  //since the data is at the threshold it will be returned from the messageStore in the `encodedData` field.
1489
1502
  const { message, dataStream, dataBytes } = await TestDataGenerator.generateRecordsWrite({
1490
1503
  author: alice,
@@ -1509,6 +1522,7 @@ export function testRecordsReadHandler() {
1509
1522
  });
1510
1523
  it('should get data from DataStore if encodedData does not exist', async () => {
1511
1524
  const alice = await TestDataGenerator.generateDidKeyPersona();
1525
+ await TestDataGenerator.installDefaultTestProtocol(dwn, alice);
1512
1526
  //since the data is over the threshold it will not be returned from the messageStore in the `encodedData` field.
1513
1527
  const { message, dataStream, dataBytes } = await TestDataGenerator.generateRecordsWrite({
1514
1528
  author: alice,
@@ -1533,138 +1547,6 @@ export function testRecordsReadHandler() {
1533
1547
  });
1534
1548
  });
1535
1549
  describe('encryption scenarios', () => {
1536
- it('should be able to decrypt flat-space schema-contained record with a correct derived key', async () => {
1537
- // scenario: Alice writes into her own DWN an encrypted record and she is able to decrypt it
1538
- const alice = await TestDataGenerator.generatePersona();
1539
- TestStubGenerator.stubDidResolver(didResolver, [alice]);
1540
- // encrypt Alice's record
1541
- const originalData = TestDataGenerator.randomBytes(1000);
1542
- const dataEncryptionInitializationVector = TestDataGenerator.randomBytes(12);
1543
- const dataEncryptionKey = TestDataGenerator.randomBytes(32);
1544
- const { ciphertext: encryptedDataBytes, tag: authenticationTag } = await Encryption.aeadEncrypt(ContentEncryptionAlgorithm.A256GCM, dataEncryptionKey, dataEncryptionInitializationVector, originalData);
1545
- // TODO: #450 - Should not require a root key to specify the derivation scheme (https://github.com/enboxorg/enbox/issues/450)
1546
- const rootPrivateKeyWithSchemasScheme = {
1547
- rootKeyId: alice.keyId,
1548
- derivationScheme: KeyDerivationScheme.Schemas,
1549
- derivedPrivateKey: alice.encryptionKeyPair.privateJwk
1550
- };
1551
- const schema = 'https://some-schema.com';
1552
- const schemaDerivationPath = Records.constructKeyDerivationPathUsingSchemasScheme(schema);
1553
- const schemaDerivedPrivateKey = await HdKey.derivePrivateKey(rootPrivateKeyWithSchemasScheme, schemaDerivationPath);
1554
- const schemaDerivedPublicKey = await HdKey.derivePublicKey(rootPrivateKeyWithSchemasScheme, schemaDerivationPath);
1555
- const rootPrivateKeyWithDataFormatsScheme = {
1556
- rootKeyId: alice.keyId,
1557
- derivationScheme: KeyDerivationScheme.DataFormats,
1558
- derivedPrivateKey: alice.encryptionKeyPair.privateJwk
1559
- };
1560
- const dataFormat = 'some/format';
1561
- const dataFormatDerivationPath = Records.constructKeyDerivationPathUsingDataFormatsScheme(dataFormat);
1562
- const dataFormatDerivedPublicKey = await HdKey.derivePublicKey(rootPrivateKeyWithDataFormatsScheme, dataFormatDerivationPath);
1563
- const encryptionInput = {
1564
- initializationVector: dataEncryptionInitializationVector,
1565
- key: dataEncryptionKey,
1566
- authenticationTag,
1567
- keyEncryptionInputs: [{
1568
- publicKeyId: alice.keyId, // reusing signing key for encryption purely as a convenience
1569
- publicKey: schemaDerivedPublicKey,
1570
- derivationScheme: KeyDerivationScheme.Schemas
1571
- },
1572
- {
1573
- publicKeyId: alice.keyId, // reusing signing key for encryption purely as a convenience
1574
- publicKey: dataFormatDerivedPublicKey,
1575
- derivationScheme: KeyDerivationScheme.DataFormats
1576
- }]
1577
- };
1578
- const { message, dataStream } = await TestDataGenerator.generateRecordsWrite({
1579
- author: alice,
1580
- schema,
1581
- dataFormat,
1582
- data: encryptedDataBytes,
1583
- encryptionInput
1584
- });
1585
- const writeReply = await dwn.processMessage(alice.did, message, { dataStream });
1586
- expect(writeReply.status.code).toBe(202);
1587
- const recordsRead = await RecordsRead.create({
1588
- filter: {
1589
- recordId: message.recordId,
1590
- },
1591
- signer: Jws.createSigner(alice)
1592
- });
1593
- // test able to derive correct key using `schemas` scheme from root key to decrypt the message
1594
- const readReply = await dwn.processMessage(alice.did, recordsRead.message);
1595
- expect(readReply.status.code).toBe(200);
1596
- const recordsWriteMessage = readReply.entry.recordsWrite;
1597
- const cipherStream = readReply.entry.data;
1598
- const plaintextDataStream = await Records.decrypt(recordsWriteMessage, schemaDerivedPrivateKey, cipherStream);
1599
- const plaintextBytes = await DataStream.toBytes(plaintextDataStream);
1600
- expect(ArrayUtility.byteArraysEqual(plaintextBytes, originalData)).toBe(true);
1601
- // test able to derive correct key using `dataFormat` scheme from root key to decrypt the message
1602
- const readReply2 = await dwn.processMessage(alice.did, recordsRead.message); // send the same read message to get a new cipher stream
1603
- expect(readReply2.status.code).toBe(200);
1604
- const cipherStream2 = readReply2.entry.data;
1605
- const plaintextDataStream2 = await Records.decrypt(recordsWriteMessage, rootPrivateKeyWithDataFormatsScheme, cipherStream2);
1606
- const plaintextBytes2 = await DataStream.toBytes(plaintextDataStream2);
1607
- expect(ArrayUtility.byteArraysEqual(plaintextBytes2, originalData)).toBe(true);
1608
- // test unable to decrypt the message if dataFormat-derived key uses an incorrect data format in derivation path
1609
- const readReply3 = await dwn.processMessage(alice.did, recordsRead.message); // process the same read message to get a new cipher stream
1610
- expect(readReply3.status.code).toBe(200);
1611
- const cipherStream3 = readReply3.entry.data;
1612
- const invalidDerivationPath = [KeyDerivationScheme.DataFormats, 'wrong/format'];
1613
- const inValidDescendantPrivateKey = await HdKey.derivePrivateKey(rootPrivateKeyWithDataFormatsScheme, invalidDerivationPath);
1614
- await expect(Records.decrypt(recordsWriteMessage, inValidDescendantPrivateKey, cipherStream3)).rejects.toThrow(DwnErrorCode.RecordsInvalidAncestorKeyDerivationSegment);
1615
- });
1616
- it('should be able to decrypt flat-space schema-less record with the correct derived key', async () => {
1617
- // scenario: Alice writes into her own DWN an encrypted record and she is able to decrypt it
1618
- const alice = await TestDataGenerator.generatePersona();
1619
- TestStubGenerator.stubDidResolver(didResolver, [alice]);
1620
- // encrypt Alice's record
1621
- const originalData = TestDataGenerator.randomBytes(1000);
1622
- const dataEncryptionInitializationVector = TestDataGenerator.randomBytes(12);
1623
- const dataEncryptionKey = TestDataGenerator.randomBytes(32);
1624
- const { ciphertext: encryptedDataBytes, tag: authenticationTag } = await Encryption.aeadEncrypt(ContentEncryptionAlgorithm.A256GCM, dataEncryptionKey, dataEncryptionInitializationVector, originalData);
1625
- // TODO: #450 - Should not require a root key to specify the derivation scheme (https://github.com/enboxorg/enbox/issues/450)
1626
- const rootPrivateKeyWithDataFormatsScheme = {
1627
- rootKeyId: alice.keyId,
1628
- derivationScheme: KeyDerivationScheme.DataFormats,
1629
- derivedPrivateKey: alice.encryptionKeyPair.privateJwk
1630
- };
1631
- const dataFormat = `image/jpg`;
1632
- const dataFormatDerivationPath = Records.constructKeyDerivationPathUsingDataFormatsScheme(dataFormat);
1633
- const dataFormatDerivedPublicKey = await HdKey.derivePublicKey(rootPrivateKeyWithDataFormatsScheme, dataFormatDerivationPath);
1634
- const encryptionInput = {
1635
- initializationVector: dataEncryptionInitializationVector,
1636
- key: dataEncryptionKey,
1637
- authenticationTag,
1638
- keyEncryptionInputs: [{
1639
- publicKeyId: alice.keyId, // reusing signing key for encryption purely as a convenience
1640
- publicKey: dataFormatDerivedPublicKey,
1641
- derivationScheme: KeyDerivationScheme.DataFormats
1642
- }]
1643
- };
1644
- const recordsWrite = await RecordsWrite.create({
1645
- signer: Jws.createSigner(alice),
1646
- dataFormat,
1647
- data: encryptedDataBytes,
1648
- encryptionInput
1649
- });
1650
- const dataStream = DataStream.fromBytes(encryptedDataBytes);
1651
- const writeReply = await dwn.processMessage(alice.did, recordsWrite.message, { dataStream });
1652
- expect(writeReply.status.code).toBe(202);
1653
- const recordsRead = await RecordsRead.create({
1654
- filter: {
1655
- recordId: recordsWrite.message.recordId,
1656
- },
1657
- signer: Jws.createSigner(alice)
1658
- });
1659
- // test able to derive correct key using `dataFormat` scheme from root key to decrypt the message
1660
- const readReply = await dwn.processMessage(alice.did, recordsRead.message); // send the same read message to get a new cipher stream
1661
- expect(readReply.status.code).toBe(200);
1662
- const cipherStream = readReply.entry.data;
1663
- const recordsWriteMessage = readReply.entry.recordsWrite;
1664
- const plaintextDataStream = await Records.decrypt(recordsWriteMessage, rootPrivateKeyWithDataFormatsScheme, cipherStream);
1665
- const plaintextBytes = await DataStream.toBytes(plaintextDataStream);
1666
- expect(ArrayUtility.byteArraysEqual(plaintextBytes, originalData)).toBe(true);
1667
- });
1668
1550
  it('should only be able to decrypt record with a correct derived private key - `protocol-context` derivation scheme', async () => {
1669
1551
  // scenario: Bob initiated an encrypted chat thread with Alice,
1670
1552
  // bob is able to decrypt subsequent messages from Alice using the `protocol-context` derived private key
@@ -1912,7 +1794,9 @@ export function testRecordsReadHandler() {
1912
1794
  const didResolver = TestStubGenerator.createDidResolverStub(mismatchingPersona);
1913
1795
  const messageStoreStub = sinon.createStubInstance(MessageStoreLevel);
1914
1796
  const dataStoreStub = sinon.createStubInstance(DataStoreLevel);
1915
- const recordsReadHandler = new RecordsReadHandler(didResolver, messageStoreStub, dataStoreStub);
1797
+ const recordsReadHandler = new RecordsReadHandler({
1798
+ didResolver, messageStore: messageStoreStub, dataStore: dataStoreStub,
1799
+ });
1916
1800
  const reply = await recordsReadHandler.handle({ tenant: alice.did, message: recordsRead.message });
1917
1801
  expect(reply.status.code).toBe(401);
1918
1802
  });
@@ -1927,7 +1811,9 @@ export function testRecordsReadHandler() {
1927
1811
  // setting up a stub method resolver & message store
1928
1812
  const messageStoreStub = sinon.createStubInstance(MessageStoreLevel);
1929
1813
  const dataStoreStub = sinon.createStubInstance(DataStoreLevel);
1930
- const recordsReadHandler = new RecordsReadHandler(didResolver, messageStoreStub, dataStoreStub);
1814
+ const recordsReadHandler = new RecordsReadHandler({
1815
+ didResolver, messageStore: messageStoreStub, dataStore: dataStoreStub,
1816
+ });
1931
1817
  // stub the `parse()` function to throw an error
1932
1818
  sinon.stub(RecordsRead, 'parse').throws('anyError');
1933
1819
  const reply = await recordsReadHandler.handle({ tenant: alice.did, message: recordsRead.message });