@abaxxtech/id 0.0.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 (711) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +31 -0
  3. package/README.npm.md +31 -0
  4. package/dist/bundles/dwn.js +83 -0
  5. package/dist/cjs/index.js +31250 -0
  6. package/dist/cjs/package.json +1 -0
  7. package/dist/esm/generated/precompiled-validators.js +7820 -0
  8. package/dist/esm/generated/precompiled-validators.js.map +1 -0
  9. package/dist/esm/json-schemas/definitions.json +23 -0
  10. package/dist/esm/src/core/abstract-message.js +37 -0
  11. package/dist/esm/src/core/abstract-message.js.map +1 -0
  12. package/dist/esm/src/core/auth.js +97 -0
  13. package/dist/esm/src/core/auth.js.map +1 -0
  14. package/dist/esm/src/core/dwn-constant.js +8 -0
  15. package/dist/esm/src/core/dwn-constant.js.map +1 -0
  16. package/dist/esm/src/core/dwn-error.js +138 -0
  17. package/dist/esm/src/core/dwn-error.js.map +1 -0
  18. package/dist/esm/src/core/grant-authorization.js +108 -0
  19. package/dist/esm/src/core/grant-authorization.js.map +1 -0
  20. package/dist/esm/src/core/message-reply.js +5 -0
  21. package/dist/esm/src/core/message-reply.js.map +1 -0
  22. package/dist/esm/src/core/message.js +200 -0
  23. package/dist/esm/src/core/message.js.map +1 -0
  24. package/dist/esm/src/core/protocol-authorization.js +449 -0
  25. package/dist/esm/src/core/protocol-authorization.js.map +1 -0
  26. package/dist/esm/src/core/records-grant-authorization.js +106 -0
  27. package/dist/esm/src/core/records-grant-authorization.js.map +1 -0
  28. package/dist/esm/src/core/tenant-gate.js +20 -0
  29. package/dist/esm/src/core/tenant-gate.js.map +1 -0
  30. package/dist/esm/src/did/did-dht-resolver.js +241 -0
  31. package/dist/esm/src/did/did-dht-resolver.js.map +1 -0
  32. package/dist/esm/src/did/did-ion-resolver.js +53 -0
  33. package/dist/esm/src/did/did-ion-resolver.js.map +1 -0
  34. package/dist/esm/src/did/did-key-resolver.js +135 -0
  35. package/dist/esm/src/did/did-key-resolver.js.map +1 -0
  36. package/dist/esm/src/did/did-resolver.js +70 -0
  37. package/dist/esm/src/did/did-resolver.js.map +1 -0
  38. package/dist/esm/src/did/did.js +36 -0
  39. package/dist/esm/src/did/did.js.map +1 -0
  40. package/dist/esm/src/dwn.js +164 -0
  41. package/dist/esm/src/dwn.js.map +1 -0
  42. package/dist/esm/src/enums/dwn-interface-method.js +22 -0
  43. package/dist/esm/src/enums/dwn-interface-method.js.map +1 -0
  44. package/dist/esm/src/event-log/event-log-level.js +112 -0
  45. package/dist/esm/src/event-log/event-log-level.js.map +1 -0
  46. package/dist/esm/src/handlers/events-get.js +48 -0
  47. package/dist/esm/src/handlers/events-get.js.map +1 -0
  48. package/dist/esm/src/handlers/messages-get.js +76 -0
  49. package/dist/esm/src/handlers/messages-get.js.map +1 -0
  50. package/dist/esm/src/handlers/permissions-grant.js +62 -0
  51. package/dist/esm/src/handlers/permissions-grant.js.map +1 -0
  52. package/dist/esm/src/handlers/permissions-request.js +63 -0
  53. package/dist/esm/src/handlers/permissions-request.js.map +1 -0
  54. package/dist/esm/src/handlers/permissions-revoke.js +114 -0
  55. package/dist/esm/src/handlers/permissions-revoke.js.map +1 -0
  56. package/dist/esm/src/handlers/protocols-configure.js +102 -0
  57. package/dist/esm/src/handlers/protocols-configure.js.map +1 -0
  58. package/dist/esm/src/handlers/protocols-query.js +72 -0
  59. package/dist/esm/src/handlers/protocols-query.js.map +1 -0
  60. package/dist/esm/src/handlers/records-delete.js +119 -0
  61. package/dist/esm/src/handlers/records-delete.js.map +1 -0
  62. package/dist/esm/src/handlers/records-query.js +206 -0
  63. package/dist/esm/src/handlers/records-query.js.map +1 -0
  64. package/dist/esm/src/handlers/records-read.js +118 -0
  65. package/dist/esm/src/handlers/records-read.js.map +1 -0
  66. package/dist/esm/src/handlers/records-write.js +252 -0
  67. package/dist/esm/src/handlers/records-write.js.map +1 -0
  68. package/dist/esm/src/index.js +43 -0
  69. package/dist/esm/src/index.js.map +1 -0
  70. package/dist/esm/src/interfaces/events-get.js +41 -0
  71. package/dist/esm/src/interfaces/events-get.js.map +1 -0
  72. package/dist/esm/src/interfaces/messages-get.js +58 -0
  73. package/dist/esm/src/interfaces/messages-get.js.map +1 -0
  74. package/dist/esm/src/interfaces/permissions-grant.js +130 -0
  75. package/dist/esm/src/interfaces/permissions-grant.js.map +1 -0
  76. package/dist/esm/src/interfaces/permissions-request.js +47 -0
  77. package/dist/esm/src/interfaces/permissions-request.js.map +1 -0
  78. package/dist/esm/src/interfaces/permissions-revoke.js +47 -0
  79. package/dist/esm/src/interfaces/permissions-revoke.js.map +1 -0
  80. package/dist/esm/src/interfaces/protocols-configure.js +149 -0
  81. package/dist/esm/src/interfaces/protocols-configure.js.map +1 -0
  82. package/dist/esm/src/interfaces/protocols-query.js +80 -0
  83. package/dist/esm/src/interfaces/protocols-query.js.map +1 -0
  84. package/dist/esm/src/interfaces/records-delete.js +56 -0
  85. package/dist/esm/src/interfaces/records-delete.js.map +1 -0
  86. package/dist/esm/src/interfaces/records-query.js +81 -0
  87. package/dist/esm/src/interfaces/records-query.js.map +1 -0
  88. package/dist/esm/src/interfaces/records-read.js +65 -0
  89. package/dist/esm/src/interfaces/records-read.js.map +1 -0
  90. package/dist/esm/src/interfaces/records-write.js +677 -0
  91. package/dist/esm/src/interfaces/records-write.js.map +1 -0
  92. package/dist/esm/src/jose/algorithms/signing/ed25519.js +54 -0
  93. package/dist/esm/src/jose/algorithms/signing/ed25519.js.map +1 -0
  94. package/dist/esm/src/jose/algorithms/signing/signature-algorithms.js +13 -0
  95. package/dist/esm/src/jose/algorithms/signing/signature-algorithms.js.map +1 -0
  96. package/dist/esm/src/jose/jws/general/builder.js +47 -0
  97. package/dist/esm/src/jose/jws/general/builder.js.map +1 -0
  98. package/dist/esm/src/jose/jws/general/signer.js +36 -0
  99. package/dist/esm/src/jose/jws/general/signer.js.map +1 -0
  100. package/dist/esm/src/jose/jws/general/verifier.js +97 -0
  101. package/dist/esm/src/jose/jws/general/verifier.js.map +1 -0
  102. package/dist/esm/src/schema-validator.js +28 -0
  103. package/dist/esm/src/schema-validator.js.map +1 -0
  104. package/dist/esm/src/store/blockstore-level.js +187 -0
  105. package/dist/esm/src/store/blockstore-level.js.map +1 -0
  106. package/dist/esm/src/store/data-store-level.js +192 -0
  107. package/dist/esm/src/store/data-store-level.js.map +1 -0
  108. package/dist/esm/src/store/index-level.js +302 -0
  109. package/dist/esm/src/store/index-level.js.map +1 -0
  110. package/dist/esm/src/store/level-wrapper.js +296 -0
  111. package/dist/esm/src/store/level-wrapper.js.map +1 -0
  112. package/dist/esm/src/store/message-store-level.js +236 -0
  113. package/dist/esm/src/store/message-store-level.js.map +1 -0
  114. package/dist/esm/src/store/storage-controller.js +69 -0
  115. package/dist/esm/src/store/storage-controller.js.map +1 -0
  116. package/dist/esm/src/types/cache.js +2 -0
  117. package/dist/esm/src/types/cache.js.map +1 -0
  118. package/dist/esm/src/types/data-store.js +2 -0
  119. package/dist/esm/src/types/data-store.js.map +1 -0
  120. package/dist/esm/src/types/delegated-grant-message.js +2 -0
  121. package/dist/esm/src/types/delegated-grant-message.js.map +1 -0
  122. package/dist/esm/src/types/did-types.js +2 -0
  123. package/dist/esm/src/types/did-types.js.map +1 -0
  124. package/dist/esm/src/types/event-log.js +2 -0
  125. package/dist/esm/src/types/event-log.js.map +1 -0
  126. package/dist/esm/src/types/event-types.js +2 -0
  127. package/dist/esm/src/types/event-types.js.map +1 -0
  128. package/dist/esm/src/types/jose-types.js +2 -0
  129. package/dist/esm/src/types/jose-types.js.map +1 -0
  130. package/dist/esm/src/types/jws-types.js +2 -0
  131. package/dist/esm/src/types/jws-types.js.map +1 -0
  132. package/dist/esm/src/types/message-interface.js +2 -0
  133. package/dist/esm/src/types/message-interface.js.map +1 -0
  134. package/dist/esm/src/types/message-store.js +2 -0
  135. package/dist/esm/src/types/message-store.js.map +1 -0
  136. package/dist/esm/src/types/message-types.js +6 -0
  137. package/dist/esm/src/types/message-types.js.map +1 -0
  138. package/dist/esm/src/types/messages-types.js +2 -0
  139. package/dist/esm/src/types/messages-types.js.map +1 -0
  140. package/dist/esm/src/types/method-handler.js +2 -0
  141. package/dist/esm/src/types/method-handler.js.map +1 -0
  142. package/dist/esm/src/types/permissions-grant-descriptor.js +6 -0
  143. package/dist/esm/src/types/permissions-grant-descriptor.js.map +1 -0
  144. package/dist/esm/src/types/permissions-types.js +2 -0
  145. package/dist/esm/src/types/permissions-types.js.map +1 -0
  146. package/dist/esm/src/types/protocols-types.js +15 -0
  147. package/dist/esm/src/types/protocols-types.js.map +1 -0
  148. package/dist/esm/src/types/records-types.js +8 -0
  149. package/dist/esm/src/types/records-types.js.map +1 -0
  150. package/dist/esm/src/types/signer.js +2 -0
  151. package/dist/esm/src/types/signer.js.map +1 -0
  152. package/dist/esm/src/utils/abort.js +40 -0
  153. package/dist/esm/src/utils/abort.js.map +1 -0
  154. package/dist/esm/src/utils/array.js +72 -0
  155. package/dist/esm/src/utils/array.js.map +1 -0
  156. package/dist/esm/src/utils/cid.js +130 -0
  157. package/dist/esm/src/utils/cid.js.map +1 -0
  158. package/dist/esm/src/utils/data-stream.js +88 -0
  159. package/dist/esm/src/utils/data-stream.js.map +1 -0
  160. package/dist/esm/src/utils/encoder.js +45 -0
  161. package/dist/esm/src/utils/encoder.js.map +1 -0
  162. package/dist/esm/src/utils/encryption.js +128 -0
  163. package/dist/esm/src/utils/encryption.js.map +1 -0
  164. package/dist/esm/src/utils/hd-key.js +60 -0
  165. package/dist/esm/src/utils/hd-key.js.map +1 -0
  166. package/dist/esm/src/utils/jws.js +89 -0
  167. package/dist/esm/src/utils/jws.js.map +1 -0
  168. package/dist/esm/src/utils/memory-cache.js +41 -0
  169. package/dist/esm/src/utils/memory-cache.js.map +1 -0
  170. package/dist/esm/src/utils/object.js +50 -0
  171. package/dist/esm/src/utils/object.js.map +1 -0
  172. package/dist/esm/src/utils/private-key-signer.js +43 -0
  173. package/dist/esm/src/utils/private-key-signer.js.map +1 -0
  174. package/dist/esm/src/utils/protocols.js +51 -0
  175. package/dist/esm/src/utils/protocols.js.map +1 -0
  176. package/dist/esm/src/utils/records.js +267 -0
  177. package/dist/esm/src/utils/records.js.map +1 -0
  178. package/dist/esm/src/utils/secp256k1.js +219 -0
  179. package/dist/esm/src/utils/secp256k1.js.map +1 -0
  180. package/dist/esm/src/utils/string.js +16 -0
  181. package/dist/esm/src/utils/string.js.map +1 -0
  182. package/dist/esm/src/utils/time.js +84 -0
  183. package/dist/esm/src/utils/time.js.map +1 -0
  184. package/dist/esm/src/utils/url.js +63 -0
  185. package/dist/esm/src/utils/url.js.map +1 -0
  186. package/dist/esm/tests/core/auth.spec.js +25 -0
  187. package/dist/esm/tests/core/auth.spec.js.map +1 -0
  188. package/dist/esm/tests/core/message-reply.spec.js +19 -0
  189. package/dist/esm/tests/core/message-reply.spec.js.map +1 -0
  190. package/dist/esm/tests/core/message.spec.js +85 -0
  191. package/dist/esm/tests/core/message.spec.js.map +1 -0
  192. package/dist/esm/tests/did/did-ion-resolver.spec.js +82 -0
  193. package/dist/esm/tests/did/did-ion-resolver.spec.js.map +1 -0
  194. package/dist/esm/tests/did/did-key-resolver.spec.js +74 -0
  195. package/dist/esm/tests/did/did-key-resolver.spec.js.map +1 -0
  196. package/dist/esm/tests/did/did-resolver.spec.js +84 -0
  197. package/dist/esm/tests/did/did-resolver.spec.js.map +1 -0
  198. package/dist/esm/tests/did/did.spec.js +22 -0
  199. package/dist/esm/tests/did/did.spec.js.map +1 -0
  200. package/dist/esm/tests/dwn.spec.js +252 -0
  201. package/dist/esm/tests/dwn.spec.js.map +1 -0
  202. package/dist/esm/tests/end-to-end-tests.spec.js +218 -0
  203. package/dist/esm/tests/end-to-end-tests.spec.js.map +1 -0
  204. package/dist/esm/tests/event-log/event-log-level.spec.js +137 -0
  205. package/dist/esm/tests/event-log/event-log-level.spec.js.map +1 -0
  206. package/dist/esm/tests/handlers/events-get.spec.js +108 -0
  207. package/dist/esm/tests/handlers/events-get.spec.js.map +1 -0
  208. package/dist/esm/tests/handlers/messages-get.spec.js +209 -0
  209. package/dist/esm/tests/handlers/messages-get.spec.js.map +1 -0
  210. package/dist/esm/tests/handlers/permissions-grant.spec.js +249 -0
  211. package/dist/esm/tests/handlers/permissions-grant.spec.js.map +1 -0
  212. package/dist/esm/tests/handlers/permissions-request.spec.js +132 -0
  213. package/dist/esm/tests/handlers/permissions-request.spec.js.map +1 -0
  214. package/dist/esm/tests/handlers/permissions-revoke.spec.js +311 -0
  215. package/dist/esm/tests/handlers/permissions-revoke.spec.js.map +1 -0
  216. package/dist/esm/tests/handlers/protocols-configure.spec.js +254 -0
  217. package/dist/esm/tests/handlers/protocols-configure.spec.js.map +1 -0
  218. package/dist/esm/tests/handlers/protocols-query.spec.js +373 -0
  219. package/dist/esm/tests/handlers/protocols-query.spec.js.map +1 -0
  220. package/dist/esm/tests/handlers/records-delete.spec.js +630 -0
  221. package/dist/esm/tests/handlers/records-delete.spec.js.map +1 -0
  222. package/dist/esm/tests/handlers/records-query.spec.js +1937 -0
  223. package/dist/esm/tests/handlers/records-query.spec.js.map +1 -0
  224. package/dist/esm/tests/handlers/records-read.spec.js +1729 -0
  225. package/dist/esm/tests/handlers/records-read.spec.js.map +1 -0
  226. package/dist/esm/tests/handlers/records-write.spec.js +3381 -0
  227. package/dist/esm/tests/handlers/records-write.spec.js.map +1 -0
  228. package/dist/esm/tests/interfaces/events-get.spec.js +73 -0
  229. package/dist/esm/tests/interfaces/events-get.spec.js.map +1 -0
  230. package/dist/esm/tests/interfaces/messages-get.spec.js +93 -0
  231. package/dist/esm/tests/interfaces/messages-get.spec.js.map +1 -0
  232. package/dist/esm/tests/interfaces/permissions-grant.spec.js +216 -0
  233. package/dist/esm/tests/interfaces/permissions-grant.spec.js.map +1 -0
  234. package/dist/esm/tests/interfaces/permissions-request.spec.js +45 -0
  235. package/dist/esm/tests/interfaces/permissions-request.spec.js.map +1 -0
  236. package/dist/esm/tests/interfaces/protocols-configure.spec.js +334 -0
  237. package/dist/esm/tests/interfaces/protocols-configure.spec.js.map +1 -0
  238. package/dist/esm/tests/interfaces/protocols-query.spec.js +49 -0
  239. package/dist/esm/tests/interfaces/protocols-query.spec.js.map +1 -0
  240. package/dist/esm/tests/interfaces/records-delete.spec.js +42 -0
  241. package/dist/esm/tests/interfaces/records-delete.spec.js.map +1 -0
  242. package/dist/esm/tests/interfaces/records-query.spec.js +75 -0
  243. package/dist/esm/tests/interfaces/records-query.spec.js.map +1 -0
  244. package/dist/esm/tests/interfaces/records-read.spec.js +65 -0
  245. package/dist/esm/tests/interfaces/records-read.spec.js.map +1 -0
  246. package/dist/esm/tests/interfaces/records-write.spec.js +369 -0
  247. package/dist/esm/tests/interfaces/records-write.spec.js.map +1 -0
  248. package/dist/esm/tests/jose/jws/general.spec.js +185 -0
  249. package/dist/esm/tests/jose/jws/general.spec.js.map +1 -0
  250. package/dist/esm/tests/scenarios/delegated-grant.spec.js +490 -0
  251. package/dist/esm/tests/scenarios/delegated-grant.spec.js.map +1 -0
  252. package/dist/esm/tests/scenarios/end-to-end-tests.spec.js +218 -0
  253. package/dist/esm/tests/scenarios/end-to-end-tests.spec.js.map +1 -0
  254. package/dist/esm/tests/store/data-store-level.spec.js +192 -0
  255. package/dist/esm/tests/store/data-store-level.spec.js.map +1 -0
  256. package/dist/esm/tests/store/index-level.spec.js +428 -0
  257. package/dist/esm/tests/store/index-level.spec.js.map +1 -0
  258. package/dist/esm/tests/store/message-store-level.spec.js +51 -0
  259. package/dist/esm/tests/store/message-store-level.spec.js.map +1 -0
  260. package/dist/esm/tests/store/message-store.spec.js +395 -0
  261. package/dist/esm/tests/store/message-store.spec.js.map +1 -0
  262. package/dist/esm/tests/store-dependent-tests.spec.js +8 -0
  263. package/dist/esm/tests/store-dependent-tests.spec.js.map +1 -0
  264. package/dist/esm/tests/test-stores.js +40 -0
  265. package/dist/esm/tests/test-stores.js.map +1 -0
  266. package/dist/esm/tests/test-suite.js +51 -0
  267. package/dist/esm/tests/test-suite.js.map +1 -0
  268. package/dist/esm/tests/utils/cid.spec.js +83 -0
  269. package/dist/esm/tests/utils/cid.spec.js.map +1 -0
  270. package/dist/esm/tests/utils/data-stream.spec.js +30 -0
  271. package/dist/esm/tests/utils/data-stream.spec.js.map +1 -0
  272. package/dist/esm/tests/utils/encryption.spec.js +151 -0
  273. package/dist/esm/tests/utils/encryption.spec.js.map +1 -0
  274. package/dist/esm/tests/utils/jws.spec.js +11 -0
  275. package/dist/esm/tests/utils/jws.spec.js.map +1 -0
  276. package/dist/esm/tests/utils/memory-cache.spec.js +38 -0
  277. package/dist/esm/tests/utils/memory-cache.spec.js.map +1 -0
  278. package/dist/esm/tests/utils/object.spec.js +39 -0
  279. package/dist/esm/tests/utils/object.spec.js.map +1 -0
  280. package/dist/esm/tests/utils/private-key-signer.spec.js +47 -0
  281. package/dist/esm/tests/utils/private-key-signer.spec.js.map +1 -0
  282. package/dist/esm/tests/utils/records.spec.js +56 -0
  283. package/dist/esm/tests/utils/records.spec.js.map +1 -0
  284. package/dist/esm/tests/utils/secp256k1.spec.js +77 -0
  285. package/dist/esm/tests/utils/secp256k1.spec.js.map +1 -0
  286. package/dist/esm/tests/utils/test-data-generator.js +570 -0
  287. package/dist/esm/tests/utils/test-data-generator.js.map +1 -0
  288. package/dist/esm/tests/utils/test-stub-generator.js +39 -0
  289. package/dist/esm/tests/utils/test-stub-generator.js.map +1 -0
  290. package/dist/esm/tests/utils/time.spec.js +67 -0
  291. package/dist/esm/tests/utils/time.spec.js.map +1 -0
  292. package/dist/esm/tests/utils/url.spec.js +46 -0
  293. package/dist/esm/tests/utils/url.spec.js.map +1 -0
  294. package/dist/esm/tests/validation/json-schemas/definitions.spec.js +36 -0
  295. package/dist/esm/tests/validation/json-schemas/definitions.spec.js.map +1 -0
  296. package/dist/esm/tests/validation/json-schemas/jwk/general-jwk.spec.js +53 -0
  297. package/dist/esm/tests/validation/json-schemas/jwk/general-jwk.spec.js.map +1 -0
  298. package/dist/esm/tests/validation/json-schemas/jwk/public-jwk.spec.js +39 -0
  299. package/dist/esm/tests/validation/json-schemas/jwk/public-jwk.spec.js.map +1 -0
  300. package/dist/esm/tests/validation/json-schemas/jwk-verification-method.spec.js +76 -0
  301. package/dist/esm/tests/validation/json-schemas/jwk-verification-method.spec.js.map +1 -0
  302. package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js +74 -0
  303. package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js.map +1 -0
  304. package/dist/esm/tests/validation/json-schemas/records/records-query.spec.js +151 -0
  305. package/dist/esm/tests/validation/json-schemas/records/records-query.spec.js.map +1 -0
  306. package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js +389 -0
  307. package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js.map +1 -0
  308. package/dist/esm/tests/vectors/protocol-definitions/anyone-collaborate.json +25 -0
  309. package/dist/esm/tests/vectors/protocol-definitions/author-can.json +32 -0
  310. package/dist/esm/tests/vectors/protocol-definitions/chat.json +56 -0
  311. package/dist/esm/tests/vectors/protocol-definitions/credential-issuance.json +37 -0
  312. package/dist/esm/tests/vectors/protocol-definitions/dex.json +52 -0
  313. package/dist/esm/tests/vectors/protocol-definitions/email.json +50 -0
  314. package/dist/esm/tests/vectors/protocol-definitions/free-for-all.json +30 -0
  315. package/dist/esm/tests/vectors/protocol-definitions/friend-role.json +48 -0
  316. package/dist/esm/tests/vectors/protocol-definitions/message.json +20 -0
  317. package/dist/esm/tests/vectors/protocol-definitions/minimal.json +10 -0
  318. package/dist/esm/tests/vectors/protocol-definitions/nested.json +31 -0
  319. package/dist/esm/tests/vectors/protocol-definitions/private-protocol.json +13 -0
  320. package/dist/esm/tests/vectors/protocol-definitions/recipient-can.json +36 -0
  321. package/dist/esm/tests/vectors/protocol-definitions/social-media.json +88 -0
  322. package/dist/esm/tests/vectors/protocol-definitions/thread-role.json +68 -0
  323. package/dist/types/generated/precompiled-validators.d.ts +113 -0
  324. package/dist/types/generated/precompiled-validators.d.ts.map +1 -0
  325. package/dist/types/src/core/abstract-message.d.ts +19 -0
  326. package/dist/types/src/core/abstract-message.d.ts.map +1 -0
  327. package/dist/types/src/core/auth.d.ts +30 -0
  328. package/dist/types/src/core/auth.d.ts.map +1 -0
  329. package/dist/types/src/core/dwn-constant.d.ts +8 -0
  330. package/dist/types/src/core/dwn-constant.d.ts.map +1 -0
  331. package/dist/types/src/core/dwn-error.d.ts +133 -0
  332. package/dist/types/src/core/dwn-error.d.ts.map +1 -0
  333. package/dist/types/src/core/grant-authorization.d.ts +35 -0
  334. package/dist/types/src/core/grant-authorization.d.ts.map +1 -0
  335. package/dist/types/src/core/message-reply.d.ts +33 -0
  336. package/dist/types/src/core/message-reply.d.ts.map +1 -0
  337. package/dist/types/src/core/message.d.ts +79 -0
  338. package/dist/types/src/core/message.d.ts.map +1 -0
  339. package/dist/types/src/core/protocol-authorization.d.ts +85 -0
  340. package/dist/types/src/core/protocol-authorization.d.ts.map +1 -0
  341. package/dist/types/src/core/records-grant-authorization.d.ts +38 -0
  342. package/dist/types/src/core/records-grant-authorization.d.ts.map +1 -0
  343. package/dist/types/src/core/tenant-gate.d.ts +16 -0
  344. package/dist/types/src/core/tenant-gate.d.ts.map +1 -0
  345. package/dist/types/src/did/did-dht-resolver.d.ts +26 -0
  346. package/dist/types/src/did/did-dht-resolver.d.ts.map +1 -0
  347. package/dist/types/src/did/did-ion-resolver.d.ts +20 -0
  348. package/dist/types/src/did/did-ion-resolver.d.ts.map +1 -0
  349. package/dist/types/src/did/did-key-resolver.d.ts +32 -0
  350. package/dist/types/src/did/did-key-resolver.d.ts.map +1 -0
  351. package/dist/types/src/did/did-resolver.d.ts +20 -0
  352. package/dist/types/src/did/did-resolver.d.ts.map +1 -0
  353. package/dist/types/src/did/did.d.ts +15 -0
  354. package/dist/types/src/did/did.d.ts.map +1 -0
  355. package/dist/types/src/dwn.d.ts +74 -0
  356. package/dist/types/src/dwn.d.ts.map +1 -0
  357. package/dist/types/src/enums/dwn-interface-method.d.ts +20 -0
  358. package/dist/types/src/enums/dwn-interface-method.d.ts.map +1 -0
  359. package/dist/types/src/event-log/event-log-level.d.ts +26 -0
  360. package/dist/types/src/event-log/event-log-level.d.ts.map +1 -0
  361. package/dist/types/src/handlers/events-get.d.ts +16 -0
  362. package/dist/types/src/handlers/events-get.d.ts.map +1 -0
  363. package/dist/types/src/handlers/messages-get.d.ts +18 -0
  364. package/dist/types/src/handlers/messages-get.d.ts.map +1 -0
  365. package/dist/types/src/handlers/permissions-grant.d.ts +17 -0
  366. package/dist/types/src/handlers/permissions-grant.d.ts.map +1 -0
  367. package/dist/types/src/handlers/permissions-request.d.ts +17 -0
  368. package/dist/types/src/handlers/permissions-request.d.ts.map +1 -0
  369. package/dist/types/src/handlers/permissions-revoke.d.ts +17 -0
  370. package/dist/types/src/handlers/permissions-revoke.d.ts.map +1 -0
  371. package/dist/types/src/handlers/protocols-configure.d.ts +21 -0
  372. package/dist/types/src/handlers/protocols-configure.d.ts.map +1 -0
  373. package/dist/types/src/handlers/protocols-query.d.ts +20 -0
  374. package/dist/types/src/handlers/protocols-query.d.ts.map +1 -0
  375. package/dist/types/src/handlers/records-delete.d.ts +22 -0
  376. package/dist/types/src/handlers/records-delete.d.ts.map +1 -0
  377. package/dist/types/src/handlers/records-query.d.ts +78 -0
  378. package/dist/types/src/handlers/records-query.d.ts.map +1 -0
  379. package/dist/types/src/handlers/records-read.d.ts +17 -0
  380. package/dist/types/src/handlers/records-read.d.ts.map +1 -0
  381. package/dist/types/src/handlers/records-write.d.ts +61 -0
  382. package/dist/types/src/handlers/records-write.d.ts.map +1 -0
  383. package/dist/types/src/index.d.ts +72 -0
  384. package/dist/types/src/index.d.ts.map +1 -0
  385. package/dist/types/src/interfaces/events-get.d.ts +13 -0
  386. package/dist/types/src/interfaces/events-get.d.ts.map +1 -0
  387. package/dist/types/src/interfaces/messages-get.d.ts +19 -0
  388. package/dist/types/src/interfaces/messages-get.d.ts.map +1 -0
  389. package/dist/types/src/interfaces/permissions-grant.d.ts +59 -0
  390. package/dist/types/src/interfaces/permissions-grant.d.ts.map +1 -0
  391. package/dist/types/src/interfaces/permissions-request.d.ts +19 -0
  392. package/dist/types/src/interfaces/permissions-request.d.ts.map +1 -0
  393. package/dist/types/src/interfaces/permissions-revoke.d.ts +14 -0
  394. package/dist/types/src/interfaces/permissions-revoke.d.ts.map +1 -0
  395. package/dist/types/src/interfaces/protocols-configure.d.ts +21 -0
  396. package/dist/types/src/interfaces/protocols-configure.d.ts.map +1 -0
  397. package/dist/types/src/interfaces/protocols-query.d.ts +17 -0
  398. package/dist/types/src/interfaces/protocols-query.d.ts.map +1 -0
  399. package/dist/types/src/interfaces/records-delete.d.ts +24 -0
  400. package/dist/types/src/interfaces/records-delete.d.ts.map +1 -0
  401. package/dist/types/src/interfaces/records-query.d.ts +29 -0
  402. package/dist/types/src/interfaces/records-query.d.ts.map +1 -0
  403. package/dist/types/src/interfaces/records-read.d.ts +31 -0
  404. package/dist/types/src/interfaces/records-read.d.ts.map +1 -0
  405. package/dist/types/src/interfaces/records-write.d.ts +259 -0
  406. package/dist/types/src/interfaces/records-write.d.ts.map +1 -0
  407. package/dist/types/src/jose/algorithms/signing/ed25519.d.ts +3 -0
  408. package/dist/types/src/jose/algorithms/signing/ed25519.d.ts.map +1 -0
  409. package/dist/types/src/jose/algorithms/signing/signature-algorithms.d.ts +3 -0
  410. package/dist/types/src/jose/algorithms/signing/signature-algorithms.d.ts.map +1 -0
  411. package/dist/types/src/jose/jws/general/builder.d.ts +10 -0
  412. package/dist/types/src/jose/jws/general/builder.d.ts.map +1 -0
  413. package/dist/types/src/jose/jws/general/signer.d.ts +8 -0
  414. package/dist/types/src/jose/jws/general/signer.d.ts.map +1 -0
  415. package/dist/types/src/jose/jws/general/verifier.d.ts +32 -0
  416. package/dist/types/src/jose/jws/general/verifier.d.ts.map +1 -0
  417. package/dist/types/src/schema-validator.d.ts +8 -0
  418. package/dist/types/src/schema-validator.d.ts.map +1 -0
  419. package/dist/types/src/store/blockstore-level.d.ts +35 -0
  420. package/dist/types/src/store/blockstore-level.d.ts.map +1 -0
  421. package/dist/types/src/store/data-store-level.d.ts +44 -0
  422. package/dist/types/src/store/data-store-level.d.ts.map +1 -0
  423. package/dist/types/src/store/index-level.d.ts +69 -0
  424. package/dist/types/src/store/index-level.d.ts.map +1 -0
  425. package/dist/types/src/store/level-wrapper.d.ts +44 -0
  426. package/dist/types/src/store/level-wrapper.d.ts.map +1 -0
  427. package/dist/types/src/store/message-store-level.d.ts +70 -0
  428. package/dist/types/src/store/message-store-level.d.ts.map +1 -0
  429. package/dist/types/src/store/storage-controller.d.ts +19 -0
  430. package/dist/types/src/store/storage-controller.d.ts.map +1 -0
  431. package/dist/types/src/types/cache.d.ts +16 -0
  432. package/dist/types/src/types/cache.d.ts.map +1 -0
  433. package/dist/types/src/types/data-store.d.ts +69 -0
  434. package/dist/types/src/types/data-store.d.ts.map +1 -0
  435. package/dist/types/src/types/delegated-grant-message.d.ts +14 -0
  436. package/dist/types/src/types/delegated-grant-message.d.ts.map +1 -0
  437. package/dist/types/src/types/did-types.d.ts +68 -0
  438. package/dist/types/src/types/did-types.d.ts.map +1 -0
  439. package/dist/types/src/types/event-log.d.ts +39 -0
  440. package/dist/types/src/types/event-log.d.ts.map +1 -0
  441. package/dist/types/src/types/event-types.d.ts +18 -0
  442. package/dist/types/src/types/event-types.d.ts.map +1 -0
  443. package/dist/types/src/types/jose-types.d.ts +75 -0
  444. package/dist/types/src/types/jose-types.d.ts.map +1 -0
  445. package/dist/types/src/types/jws-types.d.ts +27 -0
  446. package/dist/types/src/types/jws-types.d.ts.map +1 -0
  447. package/dist/types/src/types/message-interface.d.ts +22 -0
  448. package/dist/types/src/types/message-interface.d.ts.map +1 -0
  449. package/dist/types/src/types/message-store.d.ts +43 -0
  450. package/dist/types/src/types/message-store.d.ts.map +1 -0
  451. package/dist/types/src/types/message-types.d.ts +113 -0
  452. package/dist/types/src/types/message-types.d.ts.map +1 -0
  453. package/dist/types/src/types/messages-types.d.ts +23 -0
  454. package/dist/types/src/types/messages-types.d.ts.map +1 -0
  455. package/dist/types/src/types/method-handler.d.ts +17 -0
  456. package/dist/types/src/types/method-handler.d.ts.map +1 -0
  457. package/dist/types/src/types/permissions-grant-descriptor.d.ts +65 -0
  458. package/dist/types/src/types/permissions-grant-descriptor.d.ts.map +1 -0
  459. package/dist/types/src/types/permissions-types.d.ts +33 -0
  460. package/dist/types/src/types/permissions-types.d.ts.map +1 -0
  461. package/dist/types/src/types/protocols-types.d.ts +138 -0
  462. package/dist/types/src/types/protocols-types.d.ts.map +1 -0
  463. package/dist/types/src/types/records-types.d.ts +164 -0
  464. package/dist/types/src/types/records-types.d.ts.map +1 -0
  465. package/dist/types/src/types/signer.d.ts +26 -0
  466. package/dist/types/src/types/signer.d.ts.map +1 -0
  467. package/dist/types/src/utils/abort.d.ts +5 -0
  468. package/dist/types/src/utils/abort.d.ts.map +1 -0
  469. package/dist/types/src/utils/array.d.ts +18 -0
  470. package/dist/types/src/utils/array.d.ts.map +1 -0
  471. package/dist/types/src/utils/cid.d.ts +30 -0
  472. package/dist/types/src/utils/cid.d.ts.map +1 -0
  473. package/dist/types/src/utils/data-stream.d.ts +27 -0
  474. package/dist/types/src/utils/data-stream.d.ts.map +1 -0
  475. package/dist/types/src/utils/encoder.d.ts +14 -0
  476. package/dist/types/src/utils/encoder.d.ts.map +1 -0
  477. package/dist/types/src/utils/encryption.d.ts +44 -0
  478. package/dist/types/src/utils/encryption.d.ts.map +1 -0
  479. package/dist/types/src/utils/hd-key.d.ts +35 -0
  480. package/dist/types/src/utils/hd-key.d.ts.map +1 -0
  481. package/dist/types/src/utils/jws.d.ts +39 -0
  482. package/dist/types/src/utils/jws.d.ts.map +1 -0
  483. package/dist/types/src/utils/memory-cache.d.ts +15 -0
  484. package/dist/types/src/utils/memory-cache.d.ts.map +1 -0
  485. package/dist/types/src/utils/object.d.ts +18 -0
  486. package/dist/types/src/utils/object.d.ts.map +1 -0
  487. package/dist/types/src/utils/private-key-signer.d.ts +34 -0
  488. package/dist/types/src/utils/private-key-signer.d.ts.map +1 -0
  489. package/dist/types/src/utils/protocols.d.ts +14 -0
  490. package/dist/types/src/utils/protocols.d.ts.map +1 -0
  491. package/dist/types/src/utils/records.d.ts +68 -0
  492. package/dist/types/src/utils/records.d.ts.map +1 -0
  493. package/dist/types/src/utils/secp256k1.d.ts +78 -0
  494. package/dist/types/src/utils/secp256k1.d.ts.map +1 -0
  495. package/dist/types/src/utils/string.d.ts +6 -0
  496. package/dist/types/src/utils/string.d.ts.map +1 -0
  497. package/dist/types/src/utils/time.d.ts +49 -0
  498. package/dist/types/src/utils/time.d.ts.map +1 -0
  499. package/dist/types/src/utils/url.d.ts +5 -0
  500. package/dist/types/src/utils/url.d.ts.map +1 -0
  501. package/dist/types/tests/core/auth.spec.d.ts +2 -0
  502. package/dist/types/tests/core/auth.spec.d.ts.map +1 -0
  503. package/dist/types/tests/core/message-reply.spec.d.ts +2 -0
  504. package/dist/types/tests/core/message-reply.spec.d.ts.map +1 -0
  505. package/dist/types/tests/core/message.spec.d.ts +2 -0
  506. package/dist/types/tests/core/message.spec.d.ts.map +1 -0
  507. package/dist/types/tests/did/did-ion-resolver.spec.d.ts +2 -0
  508. package/dist/types/tests/did/did-ion-resolver.spec.d.ts.map +1 -0
  509. package/dist/types/tests/did/did-key-resolver.spec.d.ts +2 -0
  510. package/dist/types/tests/did/did-key-resolver.spec.d.ts.map +1 -0
  511. package/dist/types/tests/did/did-resolver.spec.d.ts +2 -0
  512. package/dist/types/tests/did/did-resolver.spec.d.ts.map +1 -0
  513. package/dist/types/tests/did/did.spec.d.ts +2 -0
  514. package/dist/types/tests/did/did.spec.d.ts.map +1 -0
  515. package/dist/types/tests/dwn.spec.d.ts +2 -0
  516. package/dist/types/tests/dwn.spec.d.ts.map +1 -0
  517. package/dist/types/tests/end-to-end-tests.spec.d.ts +2 -0
  518. package/dist/types/tests/end-to-end-tests.spec.d.ts.map +1 -0
  519. package/dist/types/tests/event-log/event-log-level.spec.d.ts +2 -0
  520. package/dist/types/tests/event-log/event-log-level.spec.d.ts.map +1 -0
  521. package/dist/types/tests/handlers/events-get.spec.d.ts +2 -0
  522. package/dist/types/tests/handlers/events-get.spec.d.ts.map +1 -0
  523. package/dist/types/tests/handlers/messages-get.spec.d.ts +2 -0
  524. package/dist/types/tests/handlers/messages-get.spec.d.ts.map +1 -0
  525. package/dist/types/tests/handlers/permissions-grant.spec.d.ts +2 -0
  526. package/dist/types/tests/handlers/permissions-grant.spec.d.ts.map +1 -0
  527. package/dist/types/tests/handlers/permissions-request.spec.d.ts +2 -0
  528. package/dist/types/tests/handlers/permissions-request.spec.d.ts.map +1 -0
  529. package/dist/types/tests/handlers/permissions-revoke.spec.d.ts +2 -0
  530. package/dist/types/tests/handlers/permissions-revoke.spec.d.ts.map +1 -0
  531. package/dist/types/tests/handlers/protocols-configure.spec.d.ts +2 -0
  532. package/dist/types/tests/handlers/protocols-configure.spec.d.ts.map +1 -0
  533. package/dist/types/tests/handlers/protocols-query.spec.d.ts +2 -0
  534. package/dist/types/tests/handlers/protocols-query.spec.d.ts.map +1 -0
  535. package/dist/types/tests/handlers/records-delete.spec.d.ts +2 -0
  536. package/dist/types/tests/handlers/records-delete.spec.d.ts.map +1 -0
  537. package/dist/types/tests/handlers/records-query.spec.d.ts +2 -0
  538. package/dist/types/tests/handlers/records-query.spec.d.ts.map +1 -0
  539. package/dist/types/tests/handlers/records-read.spec.d.ts +2 -0
  540. package/dist/types/tests/handlers/records-read.spec.d.ts.map +1 -0
  541. package/dist/types/tests/handlers/records-write.spec.d.ts +2 -0
  542. package/dist/types/tests/handlers/records-write.spec.d.ts.map +1 -0
  543. package/dist/types/tests/interfaces/events-get.spec.d.ts +2 -0
  544. package/dist/types/tests/interfaces/events-get.spec.d.ts.map +1 -0
  545. package/dist/types/tests/interfaces/messages-get.spec.d.ts +2 -0
  546. package/dist/types/tests/interfaces/messages-get.spec.d.ts.map +1 -0
  547. package/dist/types/tests/interfaces/permissions-grant.spec.d.ts +2 -0
  548. package/dist/types/tests/interfaces/permissions-grant.spec.d.ts.map +1 -0
  549. package/dist/types/tests/interfaces/permissions-request.spec.d.ts +2 -0
  550. package/dist/types/tests/interfaces/permissions-request.spec.d.ts.map +1 -0
  551. package/dist/types/tests/interfaces/protocols-configure.spec.d.ts +2 -0
  552. package/dist/types/tests/interfaces/protocols-configure.spec.d.ts.map +1 -0
  553. package/dist/types/tests/interfaces/protocols-query.spec.d.ts +2 -0
  554. package/dist/types/tests/interfaces/protocols-query.spec.d.ts.map +1 -0
  555. package/dist/types/tests/interfaces/records-delete.spec.d.ts +2 -0
  556. package/dist/types/tests/interfaces/records-delete.spec.d.ts.map +1 -0
  557. package/dist/types/tests/interfaces/records-query.spec.d.ts +2 -0
  558. package/dist/types/tests/interfaces/records-query.spec.d.ts.map +1 -0
  559. package/dist/types/tests/interfaces/records-read.spec.d.ts +2 -0
  560. package/dist/types/tests/interfaces/records-read.spec.d.ts.map +1 -0
  561. package/dist/types/tests/interfaces/records-write.spec.d.ts +2 -0
  562. package/dist/types/tests/interfaces/records-write.spec.d.ts.map +1 -0
  563. package/dist/types/tests/jose/jws/general.spec.d.ts +2 -0
  564. package/dist/types/tests/jose/jws/general.spec.d.ts.map +1 -0
  565. package/dist/types/tests/scenarios/delegated-grant.spec.d.ts +2 -0
  566. package/dist/types/tests/scenarios/delegated-grant.spec.d.ts.map +1 -0
  567. package/dist/types/tests/scenarios/end-to-end-tests.spec.d.ts +2 -0
  568. package/dist/types/tests/scenarios/end-to-end-tests.spec.d.ts.map +1 -0
  569. package/dist/types/tests/store/data-store-level.spec.d.ts +2 -0
  570. package/dist/types/tests/store/data-store-level.spec.d.ts.map +1 -0
  571. package/dist/types/tests/store/index-level.spec.d.ts +2 -0
  572. package/dist/types/tests/store/index-level.spec.d.ts.map +1 -0
  573. package/dist/types/tests/store/message-store-level.spec.d.ts +2 -0
  574. package/dist/types/tests/store/message-store-level.spec.d.ts.map +1 -0
  575. package/dist/types/tests/store/message-store.spec.d.ts +2 -0
  576. package/dist/types/tests/store/message-store.spec.d.ts.map +1 -0
  577. package/dist/types/tests/store-dependent-tests.spec.d.ts +2 -0
  578. package/dist/types/tests/store-dependent-tests.spec.d.ts.map +1 -0
  579. package/dist/types/tests/test-stores.d.ts +30 -0
  580. package/dist/types/tests/test-stores.d.ts.map +1 -0
  581. package/dist/types/tests/test-suite.d.ts +16 -0
  582. package/dist/types/tests/test-suite.d.ts.map +1 -0
  583. package/dist/types/tests/utils/cid.spec.d.ts +2 -0
  584. package/dist/types/tests/utils/cid.spec.d.ts.map +1 -0
  585. package/dist/types/tests/utils/data-stream.spec.d.ts +2 -0
  586. package/dist/types/tests/utils/data-stream.spec.d.ts.map +1 -0
  587. package/dist/types/tests/utils/encryption.spec.d.ts +2 -0
  588. package/dist/types/tests/utils/encryption.spec.d.ts.map +1 -0
  589. package/dist/types/tests/utils/jws.spec.d.ts +2 -0
  590. package/dist/types/tests/utils/jws.spec.d.ts.map +1 -0
  591. package/dist/types/tests/utils/memory-cache.spec.d.ts +2 -0
  592. package/dist/types/tests/utils/memory-cache.spec.d.ts.map +1 -0
  593. package/dist/types/tests/utils/object.spec.d.ts +2 -0
  594. package/dist/types/tests/utils/object.spec.d.ts.map +1 -0
  595. package/dist/types/tests/utils/private-key-signer.spec.d.ts +2 -0
  596. package/dist/types/tests/utils/private-key-signer.spec.d.ts.map +1 -0
  597. package/dist/types/tests/utils/records.spec.d.ts +2 -0
  598. package/dist/types/tests/utils/records.spec.d.ts.map +1 -0
  599. package/dist/types/tests/utils/secp256k1.spec.d.ts +2 -0
  600. package/dist/types/tests/utils/secp256k1.spec.d.ts.map +1 -0
  601. package/dist/types/tests/utils/test-data-generator.d.ts +323 -0
  602. package/dist/types/tests/utils/test-data-generator.d.ts.map +1 -0
  603. package/dist/types/tests/utils/test-stub-generator.d.ts +16 -0
  604. package/dist/types/tests/utils/test-stub-generator.d.ts.map +1 -0
  605. package/dist/types/tests/utils/time.spec.d.ts +2 -0
  606. package/dist/types/tests/utils/time.spec.d.ts.map +1 -0
  607. package/dist/types/tests/utils/url.spec.d.ts +2 -0
  608. package/dist/types/tests/utils/url.spec.d.ts.map +1 -0
  609. package/dist/types/tests/validation/json-schemas/definitions.spec.d.ts +2 -0
  610. package/dist/types/tests/validation/json-schemas/definitions.spec.d.ts.map +1 -0
  611. package/dist/types/tests/validation/json-schemas/jwk/general-jwk.spec.d.ts +2 -0
  612. package/dist/types/tests/validation/json-schemas/jwk/general-jwk.spec.d.ts.map +1 -0
  613. package/dist/types/tests/validation/json-schemas/jwk/public-jwk.spec.d.ts +2 -0
  614. package/dist/types/tests/validation/json-schemas/jwk/public-jwk.spec.d.ts.map +1 -0
  615. package/dist/types/tests/validation/json-schemas/jwk-verification-method.spec.d.ts +2 -0
  616. package/dist/types/tests/validation/json-schemas/jwk-verification-method.spec.d.ts.map +1 -0
  617. package/dist/types/tests/validation/json-schemas/protocols/protocols-configure.spec.d.ts +2 -0
  618. package/dist/types/tests/validation/json-schemas/protocols/protocols-configure.spec.d.ts.map +1 -0
  619. package/dist/types/tests/validation/json-schemas/records/records-query.spec.d.ts +2 -0
  620. package/dist/types/tests/validation/json-schemas/records/records-query.spec.d.ts.map +1 -0
  621. package/dist/types/tests/validation/json-schemas/records/records-write.spec.d.ts +2 -0
  622. package/dist/types/tests/validation/json-schemas/records/records-write.spec.d.ts.map +1 -0
  623. package/package.json +156 -0
  624. package/src/core/abstract-message.ts +48 -0
  625. package/src/core/auth.ts +108 -0
  626. package/src/core/dwn-constant.ts +7 -0
  627. package/src/core/dwn-error.ts +136 -0
  628. package/src/core/grant-authorization.ts +163 -0
  629. package/src/core/message-reply.ts +42 -0
  630. package/src/core/message.ts +224 -0
  631. package/src/core/protocol-authorization.ts +691 -0
  632. package/src/core/records-grant-authorization.ts +167 -0
  633. package/src/core/tenant-gate.ts +18 -0
  634. package/src/did/did-dht-resolver.ts +241 -0
  635. package/src/did/did-ion-resolver.ts +52 -0
  636. package/src/did/did-key-resolver.ts +137 -0
  637. package/src/did/did-resolver.ts +77 -0
  638. package/src/did/did.ts +39 -0
  639. package/src/dwn.ts +213 -0
  640. package/src/enums/dwn-interface-method.ts +20 -0
  641. package/src/event-log/event-log-level.ts +116 -0
  642. package/src/handlers/events-get.ts +46 -0
  643. package/src/handlers/messages-get.ts +80 -0
  644. package/src/handlers/permissions-grant.ts +52 -0
  645. package/src/handlers/permissions-request.ts +54 -0
  646. package/src/handlers/permissions-revoke.ts +121 -0
  647. package/src/handlers/protocols-configure.ts +104 -0
  648. package/src/handlers/protocols-query.ts +81 -0
  649. package/src/handlers/records-delete.ts +139 -0
  650. package/src/handlers/records-query.ts +253 -0
  651. package/src/handlers/records-read.ts +127 -0
  652. package/src/handlers/records-write.ts +296 -0
  653. package/src/index.ts +81 -0
  654. package/src/interfaces/events-get.ts +43 -0
  655. package/src/interfaces/messages-get.ts +59 -0
  656. package/src/interfaces/permissions-grant.ts +175 -0
  657. package/src/interfaces/permissions-request.ts +55 -0
  658. package/src/interfaces/permissions-revoke.ts +46 -0
  659. package/src/interfaces/protocols-configure.ts +188 -0
  660. package/src/interfaces/protocols-query.ts +99 -0
  661. package/src/interfaces/records-delete.ts +67 -0
  662. package/src/interfaces/records-query.ts +100 -0
  663. package/src/interfaces/records-read.ts +82 -0
  664. package/src/interfaces/records-write.ts +924 -0
  665. package/src/jose/algorithms/signing/ed25519.ts +61 -0
  666. package/src/jose/algorithms/signing/signature-algorithms.ts +15 -0
  667. package/src/jose/jws/general/builder.ts +48 -0
  668. package/src/jose/jws/general/signer.ts +29 -0
  669. package/src/jose/jws/general/verifier.ts +113 -0
  670. package/src/schema-validator.ts +34 -0
  671. package/src/store/blockstore-level.ts +113 -0
  672. package/src/store/data-store-level.ts +188 -0
  673. package/src/store/index-level.ts +306 -0
  674. package/src/store/level-wrapper.ts +262 -0
  675. package/src/store/message-store-level.ts +284 -0
  676. package/src/store/storage-controller.ts +80 -0
  677. package/src/types/cache.ts +16 -0
  678. package/src/types/data-store.ts +78 -0
  679. package/src/types/delegated-grant-message.ts +15 -0
  680. package/src/types/did-types.ts +95 -0
  681. package/src/types/event-log.ts +46 -0
  682. package/src/types/event-types.ts +20 -0
  683. package/src/types/jose-types.ts +76 -0
  684. package/src/types/jws-types.ts +28 -0
  685. package/src/types/message-interface.ts +24 -0
  686. package/src/types/message-store.ts +56 -0
  687. package/src/types/message-types.ts +115 -0
  688. package/src/types/messages-types.ts +26 -0
  689. package/src/types/method-handler.ts +17 -0
  690. package/src/types/permissions-grant-descriptor.ts +79 -0
  691. package/src/types/permissions-types.ts +42 -0
  692. package/src/types/protocols-types.ts +154 -0
  693. package/src/types/records-types.ts +184 -0
  694. package/src/types/signer.ts +27 -0
  695. package/src/utils/abort.ts +31 -0
  696. package/src/utils/array.ts +39 -0
  697. package/src/utils/cid.ts +101 -0
  698. package/src/utils/data-stream.ts +85 -0
  699. package/src/utils/encoder.ts +54 -0
  700. package/src/utils/encryption.ts +145 -0
  701. package/src/utils/hd-key.ts +58 -0
  702. package/src/utils/jws.ts +95 -0
  703. package/src/utils/memory-cache.ts +31 -0
  704. package/src/utils/object.ts +55 -0
  705. package/src/utils/private-key-signer.ts +72 -0
  706. package/src/utils/protocols.ts +50 -0
  707. package/src/utils/records.ts +326 -0
  708. package/src/utils/secp256k1.ts +209 -0
  709. package/src/utils/string.ts +13 -0
  710. package/src/utils/time.ts +77 -0
  711. package/src/utils/url.ts +66 -0
@@ -0,0 +1,253 @@
1
+ import type { DataStore } from '../types/data-store.js';
2
+ import type { DidResolver } from '../did/did-resolver.js';
3
+ import type { MessageStore } from '../types//message-store.js';
4
+ import type { MethodHandler } from '../types/method-handler.js';
5
+ import type { Filter, GenericMessage, MessageSort } from '../types/message-types.js';
6
+ import type { RecordsQueryMessage, RecordsQueryReply, RecordsWriteMessageWithOptionalEncodedData } from '../types/records-types.js';
7
+
8
+ import { authenticate } from '../core/auth.js';
9
+ import { DateSort } from '../types/records-types.js';
10
+ import { messageReplyFromError } from '../core/message-reply.js';
11
+ import { ProtocolAuthorization } from '../core/protocol-authorization.js';
12
+ import { Records } from '../utils/records.js';
13
+ import { RecordsQuery } from '../interfaces/records-query.js';
14
+ import { SortOrder } from '../types/message-types.js';
15
+ import { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';
16
+
17
+ export class RecordsQueryHandler implements MethodHandler {
18
+
19
+ constructor(private didResolver: DidResolver, private messageStore: MessageStore, private dataStore: DataStore) { }
20
+
21
+ public async handle({
22
+ tenant,
23
+ message
24
+ }: {tenant: string, message: RecordsQueryMessage}): Promise<RecordsQueryReply> {
25
+ let recordsQuery: RecordsQuery;
26
+ try {
27
+ recordsQuery = await RecordsQuery.parse(message);
28
+ } catch (e) {
29
+ return messageReplyFromError(e, 400);
30
+ }
31
+
32
+ let recordsWrites: RecordsWriteMessageWithOptionalEncodedData[];
33
+ let cursor: string|undefined;
34
+ // if this is an anonymous query and the filter supports published records, query only published records
35
+ if (RecordsQueryHandler.filterIncludesPublishedRecords(recordsQuery) && recordsQuery.author === undefined) {
36
+ const results = await this.fetchPublishedRecords(tenant, recordsQuery);
37
+ recordsWrites = results.messages as RecordsWriteMessageWithOptionalEncodedData[];
38
+ cursor = results.cursor;
39
+ } else {
40
+ // authentication and authorization
41
+ try {
42
+ await authenticate(message.authorization!, this.didResolver);
43
+
44
+ // Only run protocol authz if message deliberately invokes it
45
+ if (RecordsQueryHandler.shouldProtocolAuthorizeQuery(recordsQuery)) {
46
+ await ProtocolAuthorization.authorizeQuery(tenant, recordsQuery, this.messageStore);
47
+ }
48
+ } catch (e) {
49
+ return messageReplyFromError(e, 401);
50
+ }
51
+
52
+ if (recordsQuery.author === tenant) {
53
+ const results = await this.fetchRecordsAsOwner(tenant, recordsQuery);
54
+ recordsWrites = results.messages as RecordsWriteMessageWithOptionalEncodedData[];
55
+ cursor = results.cursor;
56
+ } else {
57
+ const results = await this.fetchRecordsAsNonOwner(tenant, recordsQuery);
58
+ recordsWrites = results.messages as RecordsWriteMessageWithOptionalEncodedData[];
59
+ cursor = results.cursor;
60
+ }
61
+ }
62
+
63
+ return {
64
+ status : { code: 200, detail: 'OK' },
65
+ entries : recordsWrites,
66
+ cursor
67
+ };
68
+ }
69
+
70
+ /**
71
+ * Convert an incoming DateSort to a sort type accepted by MessageStore
72
+ * Defaults to 'dateCreated' in Descending order if no sort is supplied.
73
+ *
74
+ * @param dateSort the optional DateSort from the RecordsQuery message descriptor.
75
+ * @returns {MessageSort} for MessageStore sorting.
76
+ */
77
+ private convertDateSort(dateSort?: DateSort): MessageSort {
78
+ switch (dateSort) {
79
+ case DateSort.CreatedAscending:
80
+ return { dateCreated: SortOrder.Ascending };
81
+ case DateSort.CreatedDescending:
82
+ return { dateCreated: SortOrder.Descending };
83
+ case DateSort.PublishedAscending:
84
+ return { datePublished: SortOrder.Ascending };
85
+ case DateSort.PublishedDescending:
86
+ return { datePublished: SortOrder.Descending };
87
+ default:
88
+ return { dateCreated: SortOrder.Ascending };
89
+ }
90
+ }
91
+
92
+ /**
93
+ * Fetches the records as the owner of the DWN with no additional filtering.
94
+ */
95
+ private async fetchRecordsAsOwner(
96
+ tenant: string,
97
+ recordsQuery: RecordsQuery
98
+ ): Promise<{ messages: GenericMessage[], cursor?: string }> {
99
+ const { dateSort, filter, pagination } = recordsQuery.message.descriptor;
100
+
101
+ // fetch all published records matching the query
102
+ const queryFilter = {
103
+ ...Records.convertFilter(filter),
104
+ interface : DwnInterfaceName.Records,
105
+ method : DwnMethodName.Write,
106
+ isLatestBaseState : true
107
+ };
108
+
109
+ const messageSort = this.convertDateSort(dateSort);
110
+ return this.messageStore.query(tenant, [ queryFilter ], messageSort, pagination);
111
+ }
112
+
113
+ /**
114
+ * Fetches the records as a non-owner.
115
+ *
116
+ * Filters can support returning both published and unpublished records,
117
+ * as well as explicitly only published or only unpublished records.
118
+ *
119
+ * A) BOTH published and unpublished:
120
+ * 1. published records; and
121
+ * 2. unpublished records intended for the query author (where `recipient` is the query author); and
122
+ * 3. unpublished records authorized by a protocol rule.
123
+ *
124
+ * B) PUBLISHED:
125
+ * 1. only published records;
126
+ *
127
+ * C) UNPUBLISHED:
128
+ * 1. unpublished records intended for the query author (where `recipient` is the query author); and
129
+ * 2. unpublished records authorized by a protocol rule.
130
+ *
131
+ */
132
+ private async fetchRecordsAsNonOwner(
133
+ tenant: string, recordsQuery: RecordsQuery
134
+ ): Promise<{ messages: GenericMessage[], cursor?: string }> {
135
+ const { dateSort, pagination } = recordsQuery.message.descriptor;
136
+ const filters: any[] = [];
137
+
138
+ if (RecordsQueryHandler.filterIncludesPublishedRecords(recordsQuery)) {
139
+ filters.push(RecordsQueryHandler.buildPublishedRecordsFilter(recordsQuery));
140
+ }
141
+
142
+ if (RecordsQueryHandler.filterIncludesUnpublishedRecords(recordsQuery)) {
143
+ filters.push(RecordsQueryHandler.buildUnpublishedRecordsByQueryAuthorFilter(recordsQuery));
144
+
145
+ const recipientFilter = recordsQuery.message.descriptor.filter.recipient;
146
+ if (recipientFilter === undefined || recipientFilter === recordsQuery.author) {
147
+ filters.push(RecordsQueryHandler.buildUnpublishedRecordsForQueryAuthorFilter(recordsQuery));
148
+ }
149
+
150
+ if (RecordsQueryHandler.shouldProtocolAuthorizeQuery(recordsQuery)) {
151
+ filters.push(RecordsQueryHandler.buildUnpublishedProtocolAuthorizedRecordsFilter(recordsQuery));
152
+ }
153
+ }
154
+
155
+ const messageSort = this.convertDateSort(dateSort);
156
+ return this.messageStore.query(tenant, filters, messageSort, pagination );
157
+ }
158
+
159
+ /**
160
+ * Fetches only published records.
161
+ */
162
+ private async fetchPublishedRecords(
163
+ tenant: string, recordsQuery: RecordsQuery
164
+ ): Promise<{ messages: GenericMessage[], cursor?: string }> {
165
+ const { dateSort, pagination } = recordsQuery.message.descriptor;
166
+ const filter = RecordsQueryHandler.buildPublishedRecordsFilter(recordsQuery);
167
+ const messageSort = this.convertDateSort(dateSort);
168
+ return this.messageStore.query(tenant, [ filter ], messageSort, pagination);
169
+ }
170
+
171
+ private static buildPublishedRecordsFilter(recordsQuery: RecordsQuery): Filter {
172
+ // fetch all published records matching the query
173
+ return {
174
+ ...Records.convertFilter(recordsQuery.message.descriptor.filter),
175
+ interface : DwnInterfaceName.Records,
176
+ method : DwnMethodName.Write,
177
+ published : true,
178
+ isLatestBaseState : true
179
+ };
180
+ }
181
+
182
+ /**
183
+ * Creates a filter for unpublished records that are intended for the query author (where `recipient` is the author).
184
+ */
185
+ private static buildUnpublishedRecordsForQueryAuthorFilter(recordsQuery: RecordsQuery): Filter {
186
+ // include records where recipient is query author
187
+ return {
188
+ ...Records.convertFilter(recordsQuery.message.descriptor.filter),
189
+ interface : DwnInterfaceName.Records,
190
+ method : DwnMethodName.Write,
191
+ recipient : recordsQuery.author!,
192
+ isLatestBaseState : true,
193
+ published : false
194
+ };
195
+ }
196
+
197
+ /**
198
+ * Creates a filter for unpublished records that are within the specified protocol.
199
+ * Validation that `protocol` and other required protocol-related fields occurs before this method.
200
+ */
201
+ private static buildUnpublishedProtocolAuthorizedRecordsFilter(recordsQuery: RecordsQuery): Filter {
202
+ return {
203
+ ...Records.convertFilter(recordsQuery.message.descriptor.filter),
204
+ interface : DwnInterfaceName.Records,
205
+ method : DwnMethodName.Write,
206
+ isLatestBaseState : true,
207
+ published : false
208
+ };
209
+ }
210
+
211
+ /**
212
+ * Creates a filter for only unpublished records where the author is the same as the query author.
213
+ */
214
+ private static buildUnpublishedRecordsByQueryAuthorFilter(recordsQuery: RecordsQuery): Filter {
215
+ // include records where author is the same as the query author
216
+ return {
217
+ ...Records.convertFilter(recordsQuery.message.descriptor.filter),
218
+ author : recordsQuery.author!,
219
+ interface : DwnInterfaceName.Records,
220
+ method : DwnMethodName.Write,
221
+ isLatestBaseState : true,
222
+ published : false
223
+ };
224
+ }
225
+
226
+ /**
227
+ * Determines if ProtocolAuthorization.authorizeQuery should be run and if the corresponding filter should be used.
228
+ */
229
+ private static shouldProtocolAuthorizeQuery(recordsQuery: RecordsQuery): boolean {
230
+ return recordsQuery.signaturePayload!.protocolRole !== undefined;
231
+ }
232
+
233
+ /**
234
+ * Checks if the recordQuery filter supports returning published records.
235
+ */
236
+ private static filterIncludesPublishedRecords(recordsQuery: RecordsQuery): boolean {
237
+ const { filter } = recordsQuery.message.descriptor;
238
+ // When `published` and `datePublished` range are both undefined, published records can be returned.
239
+ return filter.datePublished !== undefined || filter.published !== false;
240
+ }
241
+
242
+ /**
243
+ * Checks if the recordQuery filter supports returning unpublished records.
244
+ */
245
+ private static filterIncludesUnpublishedRecords(recordsQuery: RecordsQuery): boolean {
246
+ const { filter } = recordsQuery.message.descriptor;
247
+ // When `published` and `datePublished` range are both undefined, unpublished records can be returned.
248
+ if (filter.datePublished === undefined && filter.published === undefined) {
249
+ return true;
250
+ }
251
+ return filter.published === false;
252
+ }
253
+ }
@@ -0,0 +1,127 @@
1
+ import type { DataStore } from '../types/data-store.js';
2
+ import type { DidResolver } from '../did/did-resolver.js';
3
+ import type { Filter } from '../types/message-types.js';
4
+ import type { MessageStore } from '../types//message-store.js';
5
+ import type { MethodHandler } from '../types/method-handler.js';
6
+ import type { RecordsReadMessage, RecordsReadReply, RecordsWriteMessageWithOptionalEncodedData } from '../types/records-types.js';
7
+
8
+ import { authenticate } from '../core/auth.js';
9
+ import { DataStream } from '../utils/data-stream.js';
10
+ import { DwnInterfaceName } from '../enums/dwn-interface-method.js';
11
+ import { Encoder } from '../utils/encoder.js';
12
+ import { GrantAuthorization } from '../core/grant-authorization.js';
13
+ import { Message } from '../core/message.js';
14
+ import { messageReplyFromError } from '../core/message-reply.js';
15
+ import { ProtocolAuthorization } from '../core/protocol-authorization.js';
16
+ import { Records } from '../utils/records.js';
17
+ import { RecordsGrantAuthorization } from '../core/records-grant-authorization.js';
18
+ import { RecordsRead } from '../interfaces/records-read.js';
19
+ import { RecordsWrite } from '../interfaces/records-write.js';
20
+ import { DwnError, DwnErrorCode } from '../core/dwn-error.js';
21
+
22
+ export class RecordsReadHandler implements MethodHandler {
23
+
24
+ constructor(private didResolver: DidResolver, private messageStore: MessageStore, private dataStore: DataStore) { }
25
+
26
+ public async handle({
27
+ tenant,
28
+ message
29
+ }: { tenant: string, message: RecordsReadMessage }): Promise<RecordsReadReply> {
30
+
31
+ let recordsRead: RecordsRead;
32
+ try {
33
+ recordsRead = await RecordsRead.parse(message);
34
+ } catch (e) {
35
+ return messageReplyFromError(e, 400);
36
+ }
37
+
38
+ // authentication
39
+ try {
40
+ if (recordsRead.author !== undefined) {
41
+ await authenticate(message.authorization!, this.didResolver);
42
+ }
43
+ } catch (e) {
44
+ return messageReplyFromError(e, 401);
45
+ }
46
+
47
+ // get the latest active messages matching the supplied filter
48
+ // only RecordsWrite messages will be returned due to 'isLatestBaseState' being set to true.
49
+ const query: Filter = {
50
+ interface : DwnInterfaceName.Records,
51
+ isLatestBaseState : true,
52
+ ...Records.convertFilter(message.descriptor.filter)
53
+ };
54
+ const { messages: existingMessages } = await this.messageStore.query(tenant, [ query ]);
55
+ if (existingMessages.length === 0) {
56
+ return {
57
+ status: { code: 404, detail: 'Not Found' }
58
+ };
59
+ } else if (existingMessages.length > 1) {
60
+ return messageReplyFromError(new DwnError(
61
+ DwnErrorCode.RecordsReadReturnedMultiple,
62
+ 'Multiple records exist for the RecordsRead filter'
63
+ ), 400);
64
+ }
65
+
66
+ const newestRecordsWrite = existingMessages[0] as RecordsWriteMessageWithOptionalEncodedData;
67
+ try {
68
+ await RecordsReadHandler.authorizeRecordsRead(tenant, recordsRead, await RecordsWrite.parse(newestRecordsWrite), this.messageStore);
69
+ } catch (error) {
70
+ return messageReplyFromError(error, 401);
71
+ }
72
+
73
+ let data;
74
+ if (newestRecordsWrite.encodedData !== undefined) {
75
+ const dataBytes = Encoder.base64UrlToBytes(newestRecordsWrite.encodedData);
76
+ data = DataStream.fromBytes(dataBytes);
77
+ delete newestRecordsWrite.encodedData;
78
+ } else {
79
+ const messageCid = await Message.getCid(newestRecordsWrite);
80
+ const result = await this.dataStore.get(tenant, messageCid, newestRecordsWrite.descriptor.dataCid);
81
+ if (result?.dataStream === undefined) {
82
+ return {
83
+ status: { code: 404, detail: 'Not Found' }
84
+ };
85
+ }
86
+ data = result.dataStream;
87
+ }
88
+
89
+ const messageReply: RecordsReadReply = {
90
+ status : { code: 200, detail: 'OK' },
91
+ record : {
92
+ ...newestRecordsWrite,
93
+ data,
94
+ }
95
+ };
96
+ return messageReply;
97
+ };
98
+
99
+ private static async authorizeRecordsRead(
100
+ tenant: string,
101
+ recordsRead: RecordsRead,
102
+ newestRecordsWrite: RecordsWrite,
103
+ messageStore: MessageStore
104
+ ): Promise<void> {
105
+ const { descriptor } = newestRecordsWrite.message;
106
+
107
+ // if author is the same as the target tenant, we can directly grant access
108
+ if (recordsRead.author === tenant) {
109
+ return;
110
+ } else if (descriptor.published === true) {
111
+ // authentication is not required for published data
112
+ return;
113
+ } else if (recordsRead.author !== undefined && recordsRead.author === descriptor.recipient) {
114
+ // The recipient of a message may always read it
115
+ return;
116
+ } else if (recordsRead.author !== undefined && recordsRead.signaturePayload!.permissionsGrantId !== undefined) {
117
+ const permissionsGrantMessage = await GrantAuthorization.fetchGrant(tenant, messageStore, recordsRead.signaturePayload!.permissionsGrantId);
118
+ await RecordsGrantAuthorization.authorizeRead(
119
+ tenant, recordsRead, newestRecordsWrite.message, recordsRead.author, permissionsGrantMessage, messageStore
120
+ );
121
+ } else if (descriptor.protocol !== undefined) {
122
+ await ProtocolAuthorization.authorizeRead(tenant, recordsRead, newestRecordsWrite, messageStore);
123
+ } else {
124
+ throw new DwnError(DwnErrorCode.RecordsReadAuthorizationFailed, 'message failed authorization');
125
+ }
126
+ }
127
+ }
@@ -0,0 +1,296 @@
1
+ import type { DataStore } from '../types/data-store.js';
2
+ import type { DidResolver } from '../did/did-resolver.js';
3
+ import type { EventLog } from '../types/event-log.js';
4
+ import type { GenericMessageReply } from '../core/message-reply.js';
5
+ import type { MessageStore } from '../types//message-store.js';
6
+ import type { MethodHandler } from '../types/method-handler.js';
7
+ import type { RecordsDeleteMessage, RecordsWriteMessage, RecordsWriteMessageWithOptionalEncodedData } from '../types/records-types.js';
8
+
9
+ import { authenticate } from '../core/auth.js';
10
+ import { Cid } from '../utils/cid.js';
11
+ import { DataStream } from '../utils/data-stream.js';
12
+ import { DwnConstant } from '../core/dwn-constant.js';
13
+ import { Encoder } from '../utils/encoder.js';
14
+ import { GrantAuthorization } from '../core/grant-authorization.js';
15
+ import { Message } from '../core/message.js';
16
+ import { messageReplyFromError } from '../core/message-reply.js';
17
+ import { ProtocolAuthorization } from '../core/protocol-authorization.js';
18
+ import { RecordsGrantAuthorization } from '../core/records-grant-authorization.js';
19
+ import { RecordsWrite } from '../interfaces/records-write.js';
20
+ import { StorageController } from '../store/storage-controller.js';
21
+ import { DwnError, DwnErrorCode } from '../core/dwn-error.js';
22
+ import { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';
23
+
24
+ export type RecordsWriteHandlerOptions = {
25
+ skipDataStorage?: boolean; // used for DWN sync
26
+ };
27
+
28
+ type HandlerArgs = { tenant: string, message: RecordsWriteMessage, options?: RecordsWriteHandlerOptions, dataStream?: _Readable.Readable};
29
+
30
+ export class RecordsWriteHandler implements MethodHandler {
31
+
32
+ constructor(private didResolver: DidResolver, private messageStore: MessageStore, private dataStore: DataStore, private eventLog: EventLog) { }
33
+
34
+ public async handle({
35
+ tenant,
36
+ message,
37
+ options,
38
+ dataStream
39
+ }: HandlerArgs): Promise<GenericMessageReply> {
40
+ let recordsWrite: RecordsWrite;
41
+ try {
42
+ recordsWrite = await RecordsWrite.parse(message);
43
+
44
+ // Protocol record specific validation
45
+ if (message.descriptor.protocol !== undefined) {
46
+ await ProtocolAuthorization.validateReferentialIntegrity(tenant, recordsWrite, this.messageStore);
47
+ }
48
+ } catch (e) {
49
+ return messageReplyFromError(e, 400);
50
+ }
51
+
52
+ // authentication & authorization
53
+ try {
54
+ await authenticate(message.authorization, this.didResolver);
55
+ await RecordsWriteHandler.authorizeRecordsWrite(tenant, recordsWrite, this.messageStore);
56
+ } catch (e) {
57
+ return messageReplyFromError(e, 401);
58
+ }
59
+
60
+ // get existing messages matching the `recordId`
61
+ const query = {
62
+ interface : DwnInterfaceName.Records,
63
+ recordId : message.recordId
64
+ };
65
+ const { messages: existingMessages } = await this.messageStore.query(tenant, [ query ]);
66
+
67
+ // If this exact message already exists, treat as idempotent no-op.
68
+ // This makes sync convergent: receiving the same message twice is always safe.
69
+ const incomingMessageCid = await Message.getCid(message);
70
+ for (const existingMessage of existingMessages) {
71
+ const existingCid = await Message.getCid(existingMessage);
72
+ if (existingCid === incomingMessageCid) {
73
+ return { status: { code: 202, detail: 'Accepted' } };
74
+ }
75
+ }
76
+
77
+
78
+ // if the incoming write is not the initial write, then it must not modify any immutable properties defined by the initial write
79
+ const newMessageIsInitialWrite = await recordsWrite.isInitialWrite();
80
+ if (!newMessageIsInitialWrite) {
81
+ try {
82
+ const initialWrite = await RecordsWrite.getInitialWrite(existingMessages);
83
+ RecordsWrite.verifyEqualityOfImmutableProperties(initialWrite, message);
84
+ } catch (e) {
85
+ return messageReplyFromError(e, 400);
86
+ }
87
+ }
88
+
89
+ const newestExistingMessage = await Message.getNewestMessage(existingMessages);
90
+
91
+ let incomingMessageIsNewest = false;
92
+ let newestMessage; // keep reference of newest message for pruning later
93
+ if (newestExistingMessage === undefined || await Message.isNewer(message, newestExistingMessage)) {
94
+ incomingMessageIsNewest = true;
95
+ newestMessage = message;
96
+ } else { // existing message is the same age or newer than the incoming message
97
+ newestMessage = newestExistingMessage;
98
+ }
99
+
100
+ if (!incomingMessageIsNewest) {
101
+ return {
102
+ status: { code: 409, detail: 'Conflict' }
103
+ };
104
+ }
105
+
106
+ const isLatestBaseState = true;
107
+ const indexes = await recordsWrite.constructRecordsWriteIndexes(isLatestBaseState);
108
+
109
+ // if data is below a certain threshold, we embed the data directly into the message for storage in MessageStore.
110
+ let messageWithOptionalEncodedData: RecordsWriteMessageWithOptionalEncodedData = message;
111
+
112
+ // try to store data, unless options explicitly say to skip storage
113
+ if (options === undefined || !options.skipDataStorage) {
114
+ if (dataStream === undefined && newestExistingMessage?.descriptor.method === DwnMethodName.Delete) {
115
+ return messageReplyFromError(new DwnError(DwnErrorCode.RecordsWriteMissingDataStream, 'No data stream was provided with the previous message being a delete'), 400);
116
+ }
117
+
118
+ try {
119
+ // if data is below the threshold, we store it within MessageStore
120
+ if (message.descriptor.dataSize <= DwnConstant.maxDataSizeAllowedToBeEncoded) {
121
+ // processes and sets `encodedData` with appropriate data.
122
+ messageWithOptionalEncodedData = await this.processEncodedData(
123
+ message,
124
+ dataStream,
125
+ newestExistingMessage as (RecordsWriteMessage|RecordsDeleteMessage) | undefined
126
+ );
127
+ } else {
128
+ await this.putData(tenant, message, dataStream);
129
+ }
130
+ } catch (error) {
131
+ const e = error as any;
132
+ if (e.code === DwnErrorCode.RecordsWriteMissingDataInPrevious ||
133
+ e.code === DwnErrorCode.RecordsWriteMissingDataAssociation ||
134
+ e.code === DwnErrorCode.RecordsWriteDataCidMismatch ||
135
+ e.code === DwnErrorCode.RecordsWriteDataSizeMismatch) {
136
+ return messageReplyFromError(error, 400);
137
+ }
138
+
139
+ // else throw
140
+ throw error;
141
+ }
142
+ }
143
+
144
+ await this.messageStore.put(tenant, messageWithOptionalEncodedData, indexes);
145
+ await this.eventLog.append(tenant, await Message.getCid(message));
146
+
147
+ const messageReply = {
148
+ status: { code: 202, detail: 'Accepted' }
149
+ };
150
+
151
+ // delete all existing messages that are not newest, except for the initial write
152
+ await StorageController.deleteAllOlderMessagesButKeepInitialWrite(
153
+ tenant, existingMessages, newestMessage, this.messageStore, this.dataStore, this.eventLog
154
+ );
155
+
156
+ return messageReply;
157
+ };
158
+
159
+ /**
160
+ * Embeds the record's data into the `encodedData` property.
161
+ * If dataStream is present, it uses the dataStream. Otherwise, uses the `encodedData` from the most recent RecordsWrite.
162
+ *
163
+ * @returns {RecordsWriteMessageWithOptionalEncodedData} `encodedData` embedded.
164
+ *
165
+ * @throws {DwnError} with `DwnErrorCode.RecordsWriteMissingDataInPrevious`
166
+ * if `dataStream` is absent AND `encodedData` of previous message is missing
167
+ * @throws {DwnError} with `DwnErrorCode.RecordsWriteDataCidMismatch`
168
+ * if the data stream resulted in a data CID that mismatches with `dataCid` in the given message
169
+ * @throws {DwnError} with `DwnErrorCode.RecordsWriteDataSizeMismatch`
170
+ * if `dataSize` in `descriptor` given mismatches the actual data size
171
+ */
172
+ public async processEncodedData(
173
+ message: RecordsWriteMessage,
174
+ dataStream?: _Readable.Readable,
175
+ newestExistingMessage?: RecordsWriteMessage | RecordsDeleteMessage
176
+ ): Promise<RecordsWriteMessageWithOptionalEncodedData> {
177
+ let dataBytes;
178
+ if (dataStream === undefined) {
179
+ const newestWithData = newestExistingMessage as RecordsWriteMessageWithOptionalEncodedData | undefined;
180
+ if (newestWithData?.encodedData === undefined) {
181
+ throw new DwnError(
182
+ DwnErrorCode.RecordsWriteMissingDataInPrevious,
183
+ `No dataStream was provided and unable to get data from previous message`
184
+ );
185
+ } else {
186
+ dataBytes = Encoder.base64UrlToBytes(newestWithData.encodedData);
187
+ }
188
+ } else {
189
+ dataBytes = await DataStream.toBytes(dataStream);
190
+ }
191
+
192
+ const dataCid = await Cid.computeDagPbCidFromBytes(dataBytes);
193
+ RecordsWriteHandler.validateDataIntegrity(message.descriptor.dataCid, message.descriptor.dataSize, dataCid, dataBytes.length);
194
+
195
+ const recordsWrite: RecordsWriteMessageWithOptionalEncodedData = { ...message };
196
+ recordsWrite.encodedData = Encoder.bytesToBase64Url(dataBytes);
197
+ return recordsWrite;
198
+ }
199
+
200
+ /**
201
+ * Puts the given data in storage unless tenant already has that data for the given recordId
202
+ *
203
+ * @throws {DwnError} with `DwnErrorCode.RecordsWriteMissingDataAssociation`
204
+ * if `dataStream` is absent AND unable to associate data given `dataCid`
205
+ * @throws {DwnError} with `DwnErrorCode.RecordsWriteDataCidMismatch`
206
+ * if the data stream resulted in a data CID that mismatches with `dataCid` in the given message
207
+ * @throws {DwnError} with `DwnErrorCode.RecordsWriteDataSizeMismatch`
208
+ * if `dataSize` in `descriptor` given mismatches the actual data size
209
+ */
210
+ public async putData(
211
+ tenant: string,
212
+ message: RecordsWriteMessage,
213
+ dataStream?: _Readable.Readable,
214
+ ): Promise<void> {
215
+ let result: { dataCid: string, dataSize: number };
216
+ const messageCid = await Message.getCid(message);
217
+
218
+ if (dataStream === undefined) {
219
+ const associateResult = await this.dataStore.associate(tenant, messageCid, message.descriptor.dataCid);
220
+ if (associateResult === undefined) {
221
+ throw new DwnError(DwnErrorCode.RecordsWriteMissingDataAssociation, `Unable to associate dataCid ${message.descriptor.dataCid} ` +
222
+ `to messageCid ${messageCid} because dataStream was not provided and data was not found in dataStore`);
223
+ }
224
+ result = associateResult;
225
+ } else {
226
+ result = await this.dataStore.put(tenant, messageCid, message.descriptor.dataCid, dataStream);
227
+ }
228
+
229
+ try {
230
+ RecordsWriteHandler.validateDataIntegrity(message.descriptor.dataCid, message.descriptor.dataSize, result.dataCid, result.dataSize);
231
+ } catch (error) {
232
+ // delete data and throw error to caller
233
+ await this.dataStore.delete(tenant, messageCid, message.descriptor.dataCid);
234
+ throw error;
235
+ }
236
+ }
237
+
238
+ /**
239
+ * Validates the expected `dataCid` and `dataSize` in the descriptor vs the received data.
240
+ *
241
+ * @throws {DwnError} with `DwnErrorCode.RecordsWriteDataCidMismatch`
242
+ * if the data stream resulted in a data CID that mismatches with `dataCid` in the given message
243
+ * @throws {DwnError} with `DwnErrorCode.RecordsWriteDataSizeMismatch`
244
+ * if `dataSize` in `descriptor` given mismatches the actual data size
245
+ */
246
+ static validateDataIntegrity(
247
+ expectedDataCid: string,
248
+ expectedDataSize: number,
249
+ actualDataCid: string,
250
+ actualDataSize: number
251
+ ): void {
252
+ if (expectedDataCid !== actualDataCid) {
253
+ throw new DwnError(
254
+ DwnErrorCode.RecordsWriteDataCidMismatch,
255
+ `actual data CID ${actualDataCid} does not match dataCid in descriptor: ${expectedDataCid}`
256
+ );
257
+ }
258
+ if (expectedDataSize !== actualDataSize) {
259
+ throw new DwnError(
260
+ DwnErrorCode.RecordsWriteDataSizeMismatch,
261
+ `actual data size ${actualDataSize} bytes does not match dataSize in descriptor: ${expectedDataSize}`
262
+ );
263
+ }
264
+ }
265
+
266
+ private static async authorizeRecordsWrite(tenant: string, recordsWrite: RecordsWrite, messageStore: MessageStore): Promise<void> {
267
+ // if owner DID is specified, it must be the same as the tenant DID
268
+ if (recordsWrite.owner !== undefined && recordsWrite.owner !== tenant) {
269
+ throw new DwnError(
270
+ DwnErrorCode.RecordsWriteOwnerAndTenantMismatch,
271
+ `Owner ${recordsWrite.owner} must be the same as tenant ${tenant} when specified.`
272
+ );
273
+ }
274
+
275
+ if (recordsWrite.isSignedByDelegatee) {
276
+ await recordsWrite.authorizeDelegatee(messageStore);
277
+ }
278
+
279
+ if (recordsWrite.owner !== undefined) {
280
+ // if incoming message is a write retained by this tenant, we by-design always allow
281
+ // NOTE: the "owner === tenant" check is already done earlier in this method
282
+ return;
283
+ } else if (recordsWrite.author === tenant) {
284
+ // if author is the same as the target tenant, we can directly grant access
285
+ return;
286
+ } else if (recordsWrite.author !== undefined && recordsWrite.signaturePayload!.permissionsGrantId !== undefined) {
287
+ const permissionsGrantMessage = await GrantAuthorization.fetchGrant(tenant, messageStore, recordsWrite.signaturePayload!.permissionsGrantId);
288
+ await RecordsGrantAuthorization.authorizeWrite(tenant, recordsWrite.message, recordsWrite.author, permissionsGrantMessage, messageStore);
289
+ } else if (recordsWrite.message.descriptor.protocol !== undefined) {
290
+ await ProtocolAuthorization.authorizeWrite(tenant, recordsWrite, messageStore);
291
+ } else {
292
+ throw new DwnError(DwnErrorCode.RecordsWriteAuthorizationFailed, 'message failed authorization');
293
+ }
294
+ }
295
+
296
+ }