@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,58 @@
1
+ import type { PrivateJwk, PublicJwk } from '../types/jose-types.js';
2
+
3
+ import { Secp256k1 } from './secp256k1.js';
4
+
5
+ export enum KeyDerivationScheme {
6
+ /**
7
+ * Key derivation using the `dataFormat` value for Flat-space records.
8
+ */
9
+ DataFormats = 'dataFormats',
10
+ ProtocolContext = 'protocolContext',
11
+ ProtocolPath = 'protocolPath',
12
+ /**
13
+ * Key derivation using the `schema` value for Flat-space records.
14
+ */
15
+ Schemas = 'schemas'
16
+ }
17
+
18
+ export type DerivedPrivateJwk = {
19
+ rootKeyId: string,
20
+ derivationScheme: KeyDerivationScheme;
21
+ derivationPath?: string[];
22
+ derivedPrivateKey: PrivateJwk,
23
+ };
24
+
25
+ /**
26
+ * Class containing hierarchical deterministic key related utility methods used by the DWN.
27
+ */
28
+ export class HdKey {
29
+ /**
30
+ * Derives a descendant private key.
31
+ * NOTE: currently only supports SECP256K1 keys.
32
+ */
33
+ public static async derivePrivateKey(ancestorKey: DerivedPrivateJwk, subDerivationPath: string[]): Promise<DerivedPrivateJwk> {
34
+ const ancestorPrivateKey = Secp256k1.privateJwkToBytes(ancestorKey.derivedPrivateKey);
35
+ const ancestorPrivateKeyDerivationPath = ancestorKey.derivationPath ?? [];
36
+ const derivedPrivateKeyBytes = await Secp256k1.derivePrivateKey(ancestorPrivateKey, subDerivationPath);
37
+ const derivedPrivateJwk = await Secp256k1.privateKeyToJwk(derivedPrivateKeyBytes);
38
+ const derivedDescendantPrivateKey: DerivedPrivateJwk = {
39
+ rootKeyId : ancestorKey.rootKeyId,
40
+ derivationScheme : ancestorKey.derivationScheme,
41
+ derivationPath : [...ancestorPrivateKeyDerivationPath, ...subDerivationPath],
42
+ derivedPrivateKey : derivedPrivateJwk
43
+ };
44
+
45
+ return derivedDescendantPrivateKey;
46
+ }
47
+
48
+ /**
49
+ * Derives a descendant public key from an ancestor private key.
50
+ * NOTE: currently only supports SECP256K1 keys.
51
+ */
52
+ public static async derivePublicKey(ancestorKey: DerivedPrivateJwk, subDerivationPath: string[]): Promise<PublicJwk> {
53
+ const derivedDescendantPrivateKey = await HdKey.derivePrivateKey(ancestorKey, subDerivationPath);
54
+ const derivedDescendantPublicKey = await Secp256k1.getPublicJwk(derivedDescendantPrivateKey.derivedPrivateKey);
55
+
56
+ return derivedDescendantPublicKey;
57
+ }
58
+ }
@@ -0,0 +1,95 @@
1
+ import type { GeneralJws } from '../types/jws-types.js';
2
+ import type { SignatureEntry } from '../types/jws-types.js';
3
+ import type { Signer } from '../types/signer.js';
4
+ import type { KeyMaterial, PublicJwk } from '../types/jose-types.js';
5
+
6
+ import isPlainObject from 'lodash/isPlainObject.js';
7
+
8
+ import { Encoder } from './encoder.js';
9
+ import { PrivateKeySigner } from './private-key-signer.js';
10
+ import { signatureAlgorithms } from '../jose/algorithms/signing/signature-algorithms.js';
11
+ import { DwnError, DwnErrorCode } from '../core/dwn-error.js';
12
+
13
+
14
+ /**
15
+ * Utility class for JWS related operations.
16
+ */
17
+ export class Jws {
18
+ /**
19
+ * Gets the `kid` from a general JWS signature entry.
20
+ */
21
+ public static getKid(signatureEntry: SignatureEntry): string {
22
+ const { kid } = Encoder.base64UrlToObject(signatureEntry.protected);
23
+ return kid;
24
+ }
25
+
26
+ /**
27
+ * Gets the signer DID from a general JWS signature entry.
28
+ */
29
+ public static getSignerDid(signatureEntry: SignatureEntry): string {
30
+ const kid = Jws.getKid(signatureEntry);
31
+ const did = Jws.extractDid(kid);
32
+ return did;
33
+ }
34
+
35
+ /**
36
+ * Verifies the signature against the given payload.
37
+ * @returns `true` if signature is valid; `false` otherwise
38
+ */
39
+ public static async verifySignature(base64UrlPayload: string, signatureEntry: SignatureEntry, jwkPublic: PublicJwk): Promise<boolean> {
40
+ const signatureAlgorithm = signatureAlgorithms[jwkPublic.crv];
41
+
42
+ if (!signatureAlgorithm) {
43
+ throw new DwnError(DwnErrorCode.JwsVerifySignatureUnsupportedCrv, `unsupported crv. crv must be one of ${Object.keys(signatureAlgorithms)}`);
44
+ }
45
+
46
+ const payload = Encoder.stringToBytes(`${signatureEntry.protected}.${base64UrlPayload}`);
47
+ const signatureBytes = Encoder.base64UrlToBytes(signatureEntry.signature);
48
+
49
+ return await signatureAlgorithm.verify(payload, signatureBytes, jwkPublic);
50
+ }
51
+
52
+ /**
53
+ * Decodes the payload of the given JWS object as a plain object.
54
+ */
55
+ public static decodePlainObjectPayload(jws: GeneralJws): any {
56
+ let payloadJson;
57
+ try {
58
+ payloadJson = Encoder.base64UrlToObject(jws.payload);
59
+ } catch {
60
+ throw new DwnError(DwnErrorCode.JwsDecodePlainObjectPayloadInvalid, 'payload is not a JSON object');
61
+ }
62
+
63
+ if (!isPlainObject(payloadJson)) {
64
+ throw new DwnError(DwnErrorCode.JwsDecodePlainObjectPayloadInvalid, 'signed payload must be a plain object');
65
+ }
66
+
67
+ return payloadJson;
68
+ }
69
+
70
+ /**
71
+ * Extracts the DID from the given `kid` string.
72
+ */
73
+ public static extractDid(kid: string): string {
74
+ const [ did ] = kid.split('#');
75
+ return did;
76
+ }
77
+
78
+ /**
79
+ * Creates a Signer[] from the given Personas.
80
+ */
81
+ public static createSigners(keyMaterials: KeyMaterial[]): Signer[] {
82
+ const signers = keyMaterials.map((keyMaterial) => Jws.createSigner(keyMaterial));
83
+ return signers;
84
+ }
85
+
86
+ /**
87
+ * Creates a Signer from the given Persona.
88
+ */
89
+ public static createSigner(keyMaterial: KeyMaterial): Signer {
90
+ const privateJwk = keyMaterial.keyPair.privateJwk;
91
+ const keyId = keyMaterial.keyId;
92
+ const signer = new PrivateKeySigner({ privateJwk, keyId });
93
+ return signer;
94
+ }
95
+ }
@@ -0,0 +1,31 @@
1
+ import type { Cache } from '../types/cache.js';
2
+ import { LRUCache } from 'lru-cache';
3
+
4
+ /**
5
+ * A cache using local memory.
6
+ */
7
+ export class MemoryCache implements Cache {
8
+ private cache: LRUCache<string, any>;
9
+
10
+ /**
11
+ * @param timeToLiveInSeconds time-to-live for every key-value pair set in the cache
12
+ */
13
+ public constructor (private timeToLiveInSeconds: number) {
14
+ this.cache = new LRUCache({
15
+ max : 100_000,
16
+ ttl : timeToLiveInSeconds * 1000
17
+ });
18
+ }
19
+
20
+ async set(key: string, value: any): Promise<void> {
21
+ try {
22
+ this.cache.set(key, value);
23
+ } catch {
24
+ // let the code continue as this is a non-fatal error
25
+ }
26
+ }
27
+
28
+ async get(key: string): Promise<any | undefined> {
29
+ return this.cache.get(key);
30
+ }
31
+ }
@@ -0,0 +1,55 @@
1
+ import flat from 'flat';
2
+
3
+ /**
4
+ * Flattens the given object.
5
+ * e.g. `{ a: { b: { c: 42 } } }` becomes `{ 'a.b.c': 42 }`
6
+ */
7
+ export function flatten(obj: unknown): Record<string, unknown> {
8
+ const flattened = flat.flatten<unknown, Record<string, unknown>>(obj);
9
+ removeEmptyObjects(flattened);
10
+ return flattened;
11
+ }
12
+
13
+ /**
14
+ * Checks whether the given object has any properties.
15
+ */
16
+ export function isEmptyObject(obj: unknown): boolean {
17
+ if (typeof(obj) !== 'object') {
18
+ return false;
19
+ }
20
+
21
+ for (const _ in obj) {
22
+ return false;
23
+ }
24
+
25
+ return true;
26
+ }
27
+
28
+ /**
29
+ * Recursively removes all properties with an empty object or array as its value from the given object.
30
+ */
31
+ export function removeEmptyObjects(obj: Record<string, unknown>): void {
32
+ Object.keys(obj).forEach(key => {
33
+ if (typeof(obj[key]) === 'object') {
34
+ // recursive remove empty object or array properties in nested objects
35
+ removeEmptyObjects(obj[key] as Record<string, unknown>);
36
+ }
37
+
38
+ if (isEmptyObject(obj[key])) {
39
+ delete obj[key];
40
+ }
41
+ });
42
+ }
43
+
44
+ /**
45
+ * Recursively removes all properties with `undefined` as its value from the given object.
46
+ */
47
+ export function removeUndefinedProperties(obj: Record<string, unknown>): void {
48
+ Object.keys(obj).forEach(key => {
49
+ if (obj[key] === undefined) {
50
+ delete obj[key];
51
+ } else if (typeof(obj[key]) === 'object') {
52
+ removeUndefinedProperties(obj[key] as Record<string, unknown>); // recursive remove `undefined` properties in nested objects
53
+ }
54
+ });
55
+ }
@@ -0,0 +1,72 @@
1
+ import type { PrivateJwk } from '../types/jose-types.js';
2
+ import type { Signer } from '../types/signer.js';
3
+
4
+ import { signatureAlgorithms } from '../jose/algorithms/signing/signature-algorithms.js';
5
+ import { DwnError, DwnErrorCode } from '../core/dwn-error.js';
6
+
7
+ /**
8
+ * Input to `PrivateKeySigner` constructor.
9
+ */
10
+ export type PrivateKeySignerOptions = {
11
+ /**
12
+ * Private JWK to create the signer from.
13
+ */
14
+ privateJwk: PrivateJwk;
15
+
16
+ /**
17
+ * If not specified, the constructor will attempt to default/fall back to the `kid` value in the given `privateJwk`.
18
+ */
19
+ keyId?: string;
20
+
21
+ /**
22
+ * If not specified, the constructor will attempt to default/fall back to the `alg` value in the given `privateJwk`.
23
+ */
24
+ algorithm?: string;
25
+ };
26
+
27
+ /**
28
+ * A signer that signs using a private key.
29
+ */
30
+ export class PrivateKeySigner implements Signer {
31
+ public keyId;
32
+ public algorithm;
33
+ private privateJwk: PrivateJwk;
34
+ private signatureAlgorithm;
35
+
36
+ public constructor(options: PrivateKeySignerOptions) {
37
+ if (options.keyId === undefined && options.privateJwk.kid === undefined) {
38
+ throw new DwnError(
39
+ DwnErrorCode.PrivateKeySignerUnableToDeduceKeyId,
40
+ `Unable to deduce the key ID`
41
+ );
42
+ }
43
+
44
+ // NOTE: `alg` is optional for a JWK as specified in https://datatracker.ietf.org/doc/html/rfc7517#section-4.4
45
+ if (options.algorithm === undefined && options.privateJwk.alg === undefined) {
46
+ throw new DwnError(
47
+ DwnErrorCode.PrivateKeySignerUnableToDeduceAlgorithm,
48
+ `Unable to deduce the signature algorithm`
49
+ );
50
+ }
51
+
52
+ this.keyId = options.keyId ?? options.privateJwk.kid!;
53
+ this.algorithm = options.algorithm ?? options.privateJwk.alg!;
54
+ this.privateJwk = options.privateJwk;
55
+ this.signatureAlgorithm = signatureAlgorithms[options.privateJwk.crv];
56
+
57
+ if (!this.signatureAlgorithm) {
58
+ throw new DwnError(
59
+ DwnErrorCode.PrivateKeySignerUnsupportedCurve,
60
+ `Unsupported crv ${options.privateJwk.crv}, crv must be one of ${Object.keys(signatureAlgorithms)}`
61
+ );
62
+ }
63
+ }
64
+
65
+ /**
66
+ * Signs the given content and returns the signature as bytes.
67
+ */
68
+ public async sign (content: Uint8Array): Promise<Uint8Array> {
69
+ const signatureBytes = await this.signatureAlgorithm.sign(content, this.privateJwk);
70
+ return signatureBytes;
71
+ }
72
+ }
@@ -0,0 +1,50 @@
1
+ import type { DerivedPrivateJwk } from '../utils/hd-key.js';
2
+ import type { PrivateJwk } from '../types/jose-types.js';
3
+ import type { ProtocolDefinition, ProtocolRuleSet } from '../types/protocols-types.js';
4
+
5
+ import { Secp256k1 } from './secp256k1.js';
6
+ import { HdKey, KeyDerivationScheme } from '../utils/hd-key.js';
7
+
8
+ /**
9
+ * Class containing Protocol related utility methods.
10
+ */
11
+ export class Protocols {
12
+ /**
13
+ * Derives public encryptions keys and inject it in the `$encryption` property for each protocol path segment of the given Protocol definition,
14
+ * then returns the final encryption-enabled protocol definition.
15
+ * NOTE: The original definition passed in is unmodified.
16
+ */
17
+ public static async deriveAndInjectPublicEncryptionKeys(
18
+ protocolDefinition: ProtocolDefinition,
19
+ rootKeyId: string,
20
+ privateJwk: PrivateJwk
21
+ ): Promise<ProtocolDefinition> {
22
+ // clone before modify
23
+ const encryptionEnabledProtocolDefinition = JSON.parse(JSON.stringify(protocolDefinition)) as ProtocolDefinition;
24
+
25
+ // a function that recursively creates and adds `$encryption` property to every rule set
26
+ async function addEncryptionProperty(ruleSet: ProtocolRuleSet, parentKey: DerivedPrivateJwk): Promise<void> {
27
+ for (const key in ruleSet) {
28
+ // if we encounter a nested rule set (a property name that doesn't begin with '$'), recursively inject the `$encryption` property
29
+ if (!key.startsWith('$')) {
30
+ const derivedPrivateKey = await HdKey.derivePrivateKey(parentKey, [key]);
31
+ const publicKeyJwk = await Secp256k1.getPublicJwk(derivedPrivateKey.derivedPrivateKey);
32
+
33
+ ruleSet[key].$encryption = { rootKeyId, publicKeyJwk };
34
+ await addEncryptionProperty(ruleSet[key], derivedPrivateKey);
35
+ }
36
+ }
37
+ }
38
+
39
+ // inject encryption property starting from each root level record type
40
+ const rootKey: DerivedPrivateJwk = {
41
+ derivationScheme : KeyDerivationScheme.ProtocolPath,
42
+ derivedPrivateKey : privateJwk,
43
+ rootKeyId
44
+ };
45
+ const protocolLevelDerivedKey = await HdKey.derivePrivateKey(rootKey, [KeyDerivationScheme.ProtocolPath, protocolDefinition.protocol]);
46
+ await addEncryptionProperty(encryptionEnabledProtocolDefinition.structure, protocolLevelDerivedKey);
47
+
48
+ return encryptionEnabledProtocolDefinition;
49
+ }
50
+ }
@@ -0,0 +1,326 @@
1
+ import type { DerivedPrivateJwk } from './hd-key.js';
2
+ import type { Readable } from 'readable-stream';
3
+ import type { Filter, GenericSignaturePayload, RangeFilter } from '../types/message-types.js';
4
+ import type { RangeCriterion, RecordsDeleteMessage, RecordsFilter, RecordsQueryMessage, RecordsReadMessage, RecordsWriteDescriptor, RecordsWriteMessage } from '../types/records-types.js';
5
+
6
+ import { Encoder } from './encoder.js';
7
+ import { Encryption } from './encryption.js';
8
+ import { KeyDerivationScheme } from './hd-key.js';
9
+ import { Message } from '../core/message.js';
10
+ import { Secp256k1 } from './secp256k1.js';
11
+ import { DwnError, DwnErrorCode } from '../core/dwn-error.js';
12
+ import { normalizeProtocolUrl, normalizeSchemaUrl } from './url.js';
13
+
14
+ /**
15
+ * Class containing useful utilities related to the Records interface.
16
+ */
17
+ export class Records {
18
+ /**
19
+ * Decrypts the encrypted data in a message reply using the given ancestor private key.
20
+ * @param ancestorPrivateKey Any ancestor private key in the key derivation path.
21
+ */
22
+ public static async decrypt(
23
+ recordsWrite: RecordsWriteMessage,
24
+ ancestorPrivateKey: DerivedPrivateJwk,
25
+ cipherStream: Readable
26
+ ): Promise<Readable> {
27
+ const { encryption } = recordsWrite;
28
+
29
+ // look for an encrypted symmetric key that is encrypted by the public key corresponding to the given private key
30
+ const matchingEncryptedKey = encryption!.keyEncryption.find(key =>
31
+ key.rootKeyId === ancestorPrivateKey.rootKeyId &&
32
+ key.derivationScheme === ancestorPrivateKey.derivationScheme
33
+ );
34
+ if (matchingEncryptedKey === undefined) {
35
+ throw new DwnError(
36
+ DwnErrorCode.RecordsDecryptNoMatchingKeyEncryptedFound,
37
+ `Unable to find a symmetric key encrypted using key \
38
+ with ID '${ancestorPrivateKey.rootKeyId}' and '${ancestorPrivateKey.derivationScheme}' derivation scheme.`
39
+ );
40
+ }
41
+
42
+ const fullDerivationPath = Records.constructKeyDerivationPath(matchingEncryptedKey.derivationScheme, recordsWrite);
43
+
44
+ // NOTE: right now only `ECIES-ES256K` algorithm is supported for asymmetric encryption,
45
+ // so we will assume that's the algorithm without additional switch/if statements
46
+ const leafPrivateKey = await Records.derivePrivateKey(ancestorPrivateKey, fullDerivationPath);
47
+ const encryptedKeyBytes = Encoder.base64UrlToBytes(matchingEncryptedKey.encryptedKey);
48
+ const ephemeralPublicKey = Secp256k1.publicJwkToBytes(matchingEncryptedKey.ephemeralPublicKey);
49
+ const keyEncryptionInitializationVector = Encoder.base64UrlToBytes(matchingEncryptedKey.initializationVector);
50
+ const messageAuthenticationCode = Encoder.base64UrlToBytes(matchingEncryptedKey.messageAuthenticationCode);
51
+ const dataEncryptionKey = await Encryption.eciesSecp256k1Decrypt({
52
+ ciphertext : encryptedKeyBytes,
53
+ ephemeralPublicKey,
54
+ initializationVector : keyEncryptionInitializationVector,
55
+ messageAuthenticationCode,
56
+ privateKey : leafPrivateKey
57
+ });
58
+
59
+
60
+ // NOTE: right now only `A256CTR` algorithm is supported for symmetric encryption,
61
+ // so we will assume that's the algorithm without additional switch/if statements
62
+ const dataEncryptionInitializationVector = Encoder.base64UrlToBytes(encryption!.initializationVector);
63
+ const plaintextStream = await Encryption.aes256CtrDecrypt(dataEncryptionKey, dataEncryptionInitializationVector, cipherStream);
64
+
65
+ return plaintextStream;
66
+ }
67
+
68
+ /**
69
+ * Constructs full key derivation path using the specified scheme.
70
+ */
71
+ public static constructKeyDerivationPath(
72
+ keyDerivationScheme: KeyDerivationScheme,
73
+ recordsWriteMessage: RecordsWriteMessage
74
+ ): string[] {
75
+
76
+ const descriptor = recordsWriteMessage.descriptor;
77
+ const contextId = recordsWriteMessage.contextId;
78
+
79
+ let fullDerivationPath;
80
+ if (keyDerivationScheme === KeyDerivationScheme.DataFormats) {
81
+ fullDerivationPath = Records.constructKeyDerivationPathUsingDataFormatsScheme(descriptor.schema, descriptor.dataFormat);
82
+ } else if (keyDerivationScheme === KeyDerivationScheme.ProtocolPath) {
83
+ fullDerivationPath = Records.constructKeyDerivationPathUsingProtocolPathScheme(descriptor);
84
+ } else if (keyDerivationScheme === KeyDerivationScheme.ProtocolContext) {
85
+ fullDerivationPath = Records.constructKeyDerivationPathUsingProtocolContextScheme(contextId);
86
+ } else {
87
+ // `schemas` scheme
88
+ fullDerivationPath = Records.constructKeyDerivationPathUsingSchemasScheme(descriptor.schema);
89
+ }
90
+
91
+ return fullDerivationPath;
92
+ }
93
+
94
+ /**
95
+ * Constructs the full key derivation path using `dataFormats` scheme.
96
+ */
97
+ public static constructKeyDerivationPathUsingDataFormatsScheme(schema: string | undefined, dataFormat: string ): string[] {
98
+ if (schema !== undefined) {
99
+ return [
100
+ KeyDerivationScheme.DataFormats,
101
+ schema, // this is as spec-ed on TP27, the intent is to support sharing the key for just a specific data type under a schema
102
+ dataFormat
103
+ ];
104
+ } else {
105
+ return [
106
+ KeyDerivationScheme.DataFormats,
107
+ dataFormat
108
+ ];
109
+ }
110
+ }
111
+
112
+ /**
113
+ * Constructs the full key derivation path using `protocolPath` scheme.
114
+ */
115
+ public static constructKeyDerivationPathUsingProtocolPathScheme(descriptor: RecordsWriteDescriptor): string[] {
116
+ // ensure `protocol` is defined
117
+ // NOTE: no need to check `protocolPath` and `contextId` because earlier code ensures that if `protocol` is defined, those are defined also
118
+ if (descriptor.protocol === undefined) {
119
+ throw new DwnError(
120
+ DwnErrorCode.RecordsProtocolPathDerivationSchemeMissingProtocol,
121
+ 'Unable to construct key derivation path using `protocols` scheme because `protocol` is missing.'
122
+ );
123
+ }
124
+
125
+ const protocolPathSegments = descriptor.protocolPath!.split('/');
126
+ const fullDerivationPath = [
127
+ KeyDerivationScheme.ProtocolPath,
128
+ descriptor.protocol,
129
+ ...protocolPathSegments
130
+ ];
131
+
132
+ return fullDerivationPath;
133
+ }
134
+
135
+ /**
136
+ * Constructs the full key derivation path using `protocolContext` scheme.
137
+ */
138
+ public static constructKeyDerivationPathUsingProtocolContextScheme(contextId: string | undefined): string[] {
139
+ if (contextId === undefined) {
140
+ throw new DwnError(
141
+ DwnErrorCode.RecordsProtocolContextDerivationSchemeMissingContextId,
142
+ 'Unable to construct key derivation path using `protocolContext` scheme because `contextId` is missing.'
143
+ );
144
+ }
145
+
146
+ const fullDerivationPath = [
147
+ KeyDerivationScheme.ProtocolContext,
148
+ contextId
149
+ ];
150
+
151
+ return fullDerivationPath;
152
+ }
153
+
154
+ /**
155
+ * Constructs the full key derivation path using `schemas` scheme.
156
+ */
157
+ public static constructKeyDerivationPathUsingSchemasScheme( schema: string | undefined ): string[] {
158
+ if (schema === undefined) {
159
+ throw new DwnError(
160
+ DwnErrorCode.RecordsSchemasDerivationSchemeMissingSchema,
161
+ 'Unable to construct key derivation path using `schemas` scheme because `schema` is missing.'
162
+ );
163
+ }
164
+
165
+ const fullDerivationPath = [
166
+ KeyDerivationScheme.Schemas,
167
+ schema
168
+ ];
169
+
170
+ return fullDerivationPath;
171
+ }
172
+
173
+ /**
174
+ * Derives a descendant private key given an ancestor private key and the full absolute derivation path.
175
+ * NOTE: right now only `ECIES-ES256K` algorithm is supported for asymmetric encryption,
176
+ * so we will only derive SECP256K1 key without additional conditional checks
177
+ */
178
+ public static async derivePrivateKey(ancestorPrivateKey: DerivedPrivateJwk, fullDescendantDerivationPath: string[]): Promise<Uint8Array> {
179
+ if (ancestorPrivateKey.derivedPrivateKey.crv !== 'secp256k1') {
180
+ throw new DwnError(
181
+ DwnErrorCode.RecordsDerivePrivateKeyUnSupportedCurve,
182
+ `Curve ${ancestorPrivateKey.derivedPrivateKey.crv} is not supported.`
183
+ );
184
+ }
185
+
186
+ const ancestorPrivateKeyDerivationPath = ancestorPrivateKey.derivationPath ?? [];
187
+
188
+ Records.validateAncestorKeyAndDescentKeyDerivationPathsMatch(ancestorPrivateKeyDerivationPath, fullDescendantDerivationPath);
189
+
190
+ const subDerivationPath = fullDescendantDerivationPath.slice(ancestorPrivateKeyDerivationPath.length);
191
+ const ancestorPrivateKeyBytes = Secp256k1.privateJwkToBytes(ancestorPrivateKey.derivedPrivateKey);
192
+ const leafPrivateKey = await Secp256k1.derivePrivateKey(ancestorPrivateKeyBytes, subDerivationPath);
193
+
194
+ return leafPrivateKey;
195
+ }
196
+
197
+ /**
198
+ * Validates that ancestor derivation path matches the descendant derivation path completely.
199
+ * @throws {DwnError} with `DwnErrorCode.RecordsInvalidAncestorKeyDerivationSegment` if fails validation.
200
+ */
201
+ public static validateAncestorKeyAndDescentKeyDerivationPathsMatch(
202
+ ancestorKeyDerivationPath: string[],
203
+ descendantKeyDerivationPath: string[]
204
+ ): void {
205
+ for (let i = 0; i < ancestorKeyDerivationPath.length; i++) {
206
+ const ancestorSegment = ancestorKeyDerivationPath[i];
207
+ const descendantSegment = descendantKeyDerivationPath[i];
208
+ if (ancestorSegment !== descendantSegment) {
209
+ throw new DwnError(
210
+ DwnErrorCode.RecordsInvalidAncestorKeyDerivationSegment,
211
+ `Ancestor key derivation segment '${ancestorSegment}' mismatches against the descendant key derivation segment '${descendantSegment}'.`);
212
+ }
213
+ }
214
+ }
215
+
216
+ /**
217
+ * Normalizes the protocol and schema URLs within a provided RecordsFilter and returns a copy of RecordsFilter with the modified values.
218
+ *
219
+ * @param filter incoming RecordsFilter to normalize.
220
+ * @returns {RecordsFilter} a copy of the incoming RecordsFilter with the normalized properties.
221
+ */
222
+ public static normalizeFilter(filter: RecordsFilter): RecordsFilter {
223
+ let protocol;
224
+ if (filter.protocol === undefined) {
225
+ protocol = undefined;
226
+ } else {
227
+ protocol = normalizeProtocolUrl(filter.protocol);
228
+ }
229
+
230
+ let schema;
231
+ if (filter.schema === undefined) {
232
+ schema = undefined;
233
+ } else {
234
+ schema = normalizeSchemaUrl(filter.schema);
235
+ }
236
+
237
+ return {
238
+ ...filter,
239
+ protocol,
240
+ schema,
241
+ };
242
+ }
243
+
244
+ /**
245
+ * Converts an incoming RecordsFilter into a Filter usable by MessageStore.
246
+ *
247
+ * @param filter A RecordsFilter
248
+ * @returns {Filter} a generic Filter able to be used with MessageStore.
249
+ */
250
+ public static convertFilter(filter: RecordsFilter): Filter {
251
+ const filterCopy = { ...filter } as Filter;
252
+
253
+ const { dateCreated, datePublished, dateUpdated } = filter;
254
+ const dateCreatedFilter = dateCreated ? this.convertRangeCriterion(dateCreated) : undefined;
255
+ if (dateCreatedFilter) {
256
+ filterCopy.dateCreated = dateCreatedFilter;
257
+ }
258
+
259
+ const datePublishedFilter = datePublished ? this.convertRangeCriterion(datePublished): undefined;
260
+ if (datePublishedFilter) {
261
+ // only return published records when filtering with a datePublished range.
262
+ filterCopy.published = true;
263
+ filterCopy.datePublished = datePublishedFilter;
264
+ }
265
+
266
+ const messageTimestampFilter = dateUpdated ? this.convertRangeCriterion(dateUpdated) : undefined;
267
+ if (messageTimestampFilter) {
268
+ filterCopy.messageTimestamp = messageTimestampFilter;
269
+ delete filterCopy.dateUpdated;
270
+ }
271
+ return filterCopy as Filter;
272
+ }
273
+
274
+ private static convertRangeCriterion(inputFilter: RangeCriterion): RangeFilter | undefined {
275
+ let rangeFilter: RangeFilter | undefined;
276
+ if (inputFilter.to !== undefined && inputFilter.from !== undefined) {
277
+ rangeFilter = {
278
+ gte : inputFilter.from,
279
+ lt : inputFilter.to,
280
+ };
281
+ } else if (inputFilter.to !== undefined) {
282
+ rangeFilter = {
283
+ lt: inputFilter.to,
284
+ };
285
+ } else if (inputFilter.from !== undefined) {
286
+ rangeFilter = {
287
+ gte: inputFilter.from,
288
+ };
289
+ }
290
+ return rangeFilter;
291
+ }
292
+
293
+ /**
294
+ * Validates the referential integrity regarding delegated grant.
295
+ * @param signaturePayload Decoded payload of the signature of the message. `undefined` if message is not signed.
296
+ * Usage of this property is purely for performance optimization so we don't have to decode the signature payload again.
297
+ */
298
+ public static validateDelegatedGrantReferentialIntegrity(
299
+ message: RecordsReadMessage | RecordsQueryMessage | RecordsWriteMessage | RecordsDeleteMessage,
300
+ signaturePayload: GenericSignaturePayload | undefined
301
+ ): void {
302
+ // `deletedGrantId` in the payload of the message signature and `authorDelegatedGrant` in `authorization` must both exist or be both undefined
303
+ const delegatedGrantIdDefined = signaturePayload?.delegatedGrantId !== undefined;
304
+ const authorDelegatedGrantDefined = message.authorization?.authorDelegatedGrant !== undefined;
305
+ if (delegatedGrantIdDefined !== authorDelegatedGrantDefined) {
306
+ throw new DwnError(
307
+ DwnErrorCode.RecordsValidateIntegrityDelegatedGrantAndIdExistenceMismatch,
308
+ `delegatedGrantId and authorDelegatedGrant must both exist or be undefined. \
309
+ delegatedGrantId defined: ${delegatedGrantIdDefined}, authorDelegatedGrant defined: ${authorDelegatedGrantDefined}`
310
+ );
311
+ }
312
+
313
+ // when delegated grant exists, the grantee (grantedTo) must be the same as the signer of the message
314
+ if (authorDelegatedGrantDefined) {
315
+ const delegatedGrant = message.authorization!.authorDelegatedGrant!;
316
+ const grantedTo = delegatedGrant.descriptor.grantedTo;
317
+ const signer = Message.getSigner(message);
318
+ if (grantedTo !== signer) {
319
+ throw new DwnError(
320
+ DwnErrorCode.RecordsValidateIntegrityGrantedToAndSignerMismatch,
321
+ `grantedTo ${grantedTo} must be the same as the signer ${signer} of the message`
322
+ );
323
+ }
324
+ }
325
+ }
326
+ }