@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,167 @@
1
+ import type { MessageStore } from '../types/message-store.js';
2
+ import type { PermissionsGrantMessage } from '../types/permissions-types.js';
3
+ import type { RecordsPermissionScope } from '../types/permissions-grant-descriptor.js';
4
+ import type { RecordsRead } from '../interfaces/records-read.js';
5
+ import type { RecordsWriteMessage } from '../types/records-types.js';
6
+
7
+ import { GrantAuthorization } from './grant-authorization.js';
8
+ import { PermissionsConditionPublication } from '../types/permissions-grant-descriptor.js';
9
+ import { DwnError, DwnErrorCode } from './dwn-error.js';
10
+
11
+ export class RecordsGrantAuthorization {
12
+ /**
13
+ * Authorizes the given RecordsWrite in the scope of the DID given.
14
+ */
15
+ public static async authorizeWrite(
16
+ tenant: string,
17
+ incomingMessage: RecordsWriteMessage,
18
+ author: string,
19
+ permissionsGrantMessage: PermissionsGrantMessage,
20
+ messageStore: MessageStore,
21
+ ): Promise<void> {
22
+ await GrantAuthorization.authorizeGenericMessage(
23
+ tenant,
24
+ incomingMessage,
25
+ author,
26
+ permissionsGrantMessage,
27
+ messageStore
28
+ );
29
+
30
+ RecordsGrantAuthorization.verifyScope(incomingMessage, permissionsGrantMessage);
31
+
32
+ RecordsGrantAuthorization.verifyConditions(incomingMessage, permissionsGrantMessage);
33
+ }
34
+
35
+ /**
36
+ * Authorizes the scope of a PermissionsGrant for RecordsRead.
37
+ */
38
+ public static async authorizeRead(
39
+ tenant: string,
40
+ incomingMessage: RecordsRead,
41
+ newestRecordsWriteMessage: RecordsWriteMessage,
42
+ author: string,
43
+ permissionsGrantMessage: PermissionsGrantMessage,
44
+ messageStore: MessageStore,
45
+ ): Promise<void> {
46
+ await GrantAuthorization.authorizeGenericMessage(
47
+ tenant,
48
+ incomingMessage.message,
49
+ author,
50
+ permissionsGrantMessage,
51
+ messageStore
52
+ );
53
+
54
+ RecordsGrantAuthorization.verifyScope(newestRecordsWriteMessage, permissionsGrantMessage);
55
+ }
56
+
57
+ /**
58
+ * @param recordsWrite The source of the record being authorized. If the incoming message is a write,
59
+ * then this is the incoming RecordsWrite. Otherwise, it is the newest existing RecordsWrite.
60
+ */
61
+ private static verifyScope(
62
+ recordsWriteMessage: RecordsWriteMessage,
63
+ permissionsGrantMessage: PermissionsGrantMessage,
64
+ ): void {
65
+ const grantScope = permissionsGrantMessage.descriptor.scope as RecordsPermissionScope;
66
+
67
+ if (RecordsGrantAuthorization.isUnrestrictedScope(grantScope)) {
68
+ // scope has no restrictions beyond interface and method. Message is authorized to access any record.
69
+ return;
70
+ } else if (recordsWriteMessage.descriptor.protocol !== undefined) {
71
+ // authorization of protocol records must have grants that explicitly include the protocol
72
+ RecordsGrantAuthorization.authorizeProtocolRecord(recordsWriteMessage, grantScope);
73
+ } else {
74
+ RecordsGrantAuthorization.authorizeFlatRecord(recordsWriteMessage, grantScope);
75
+ }
76
+ }
77
+
78
+ /**
79
+ * Authorizes a grant scope for a protocol record
80
+ */
81
+ private static authorizeProtocolRecord(
82
+ recordsWriteMessage: RecordsWriteMessage,
83
+ grantScope: RecordsPermissionScope
84
+ ): void {
85
+ // Protocol records must have grants specifying the protocol
86
+ if (grantScope.protocol === undefined) {
87
+ throw new DwnError(
88
+ DwnErrorCode.RecordsGrantAuthorizationScopeNotProtocol,
89
+ 'Grant for protocol record must specify protocol in its scope'
90
+ );
91
+ }
92
+
93
+ // The record's protocol must match the protocol specified in the record
94
+ if (grantScope.protocol !== recordsWriteMessage.descriptor.protocol) {
95
+ throw new DwnError(
96
+ DwnErrorCode.RecordsGrantAuthorizationScopeProtocolMismatch,
97
+ `Grant scope specifies different protocol than what appears in the record`
98
+ );
99
+ }
100
+
101
+ // If grant specifies either contextId, check that record is that context
102
+ if (grantScope.contextId !== undefined && grantScope.contextId !== recordsWriteMessage.contextId) {
103
+ throw new DwnError(
104
+ DwnErrorCode.RecordsGrantAuthorizationScopeContextIdMismatch,
105
+ `Grant scope specifies different contextId than what appears in the record`
106
+ );
107
+ }
108
+
109
+ // If grant specifies protocolPath, check that record is at that protocolPath
110
+ if (grantScope.protocolPath !== undefined && grantScope.protocolPath !== recordsWriteMessage.descriptor.protocolPath) {
111
+ throw new DwnError(
112
+ DwnErrorCode.RecordsGrantAuthorizationScopeProtocolPathMismatch,
113
+ `Grant scope specifies different protocolPath than what appears in the record`
114
+ );
115
+ }
116
+ }
117
+
118
+ /**
119
+ * Authorizes a grant scope for a non-protocol record
120
+ */
121
+ private static authorizeFlatRecord(
122
+ recordsWriteMessage: RecordsWriteMessage,
123
+ grantScope: RecordsPermissionScope
124
+ ): void {
125
+ if (grantScope.schema !== undefined) {
126
+ if (grantScope.schema !== recordsWriteMessage.descriptor.schema) {
127
+ throw new DwnError(
128
+ DwnErrorCode.RecordsGrantAuthorizationScopeSchema,
129
+ `Record does not have schema in PermissionsGrant scope with schema '${grantScope.schema}'`
130
+ );
131
+ }
132
+ }
133
+ }
134
+
135
+ /**
136
+ * Verifies grant `conditions`.
137
+ * Currently the only condition is `published` which only applies to RecordsWrites
138
+ */
139
+ private static verifyConditions(recordsWriteMessage: RecordsWriteMessage, permissionsGrantMessage: PermissionsGrantMessage): void {
140
+ const conditions = permissionsGrantMessage.descriptor.conditions;
141
+
142
+ // If conditions require publication, RecordsWrite must have `published` === true
143
+ if (conditions?.publication === PermissionsConditionPublication.Required && !recordsWriteMessage.descriptor.published) {
144
+ throw new DwnError(
145
+ DwnErrorCode.RecordsGrantAuthorizationConditionPublicationRequired,
146
+ 'PermissionsGrant requires message to be published'
147
+ );
148
+ }
149
+
150
+ // if conditions prohibit publication, RecordsWrite must have published === false or undefined
151
+ if (conditions?.publication === PermissionsConditionPublication.Prohibited && recordsWriteMessage.descriptor.published) {
152
+ throw new DwnError(
153
+ DwnErrorCode.RecordsGrantAuthorizationConditionPublicationProhibited,
154
+ 'PermissionsGrant prohibits message from being published'
155
+ );
156
+ }
157
+ }
158
+
159
+ /**
160
+ * Checks if scope has no restrictions beyond interface and method.
161
+ * Grant-holder is authorized to access any record.
162
+ */
163
+ private static isUnrestrictedScope(grantScope: RecordsPermissionScope): boolean {
164
+ return grantScope.protocol === undefined &&
165
+ grantScope.schema === undefined;
166
+ }
167
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * An interface that determines if a DID is a tenant of the DWN.
3
+ */
4
+ export interface TenantGate {
5
+ /**
6
+ * @returns `true` if the given DID is a tenant of the DWN; `false` otherwise
7
+ */
8
+ isTenant(did: string): Promise<boolean>;
9
+ }
10
+
11
+ /**
12
+ * A tenant gate that treats every DID as a tenant.
13
+ */
14
+ export class AllowAllTenantGate implements TenantGate {
15
+ public async isTenant(_did: string): Promise<boolean> {
16
+ return true;
17
+ }
18
+ }
@@ -0,0 +1,241 @@
1
+ import dnsPacket from 'dns-packet';
2
+ import { ed25519 } from '../jose/algorithms/signing/ed25519.js';
3
+ import type { PublicJwk } from '../types/jose-types.js';
4
+ import { Secp256k1 } from '../utils/secp256k1.js';
5
+ import type { DidDocument, DidMethodResolver, DidResolutionResult } from '../types/did-types.js';
6
+
7
+
8
+ /**
9
+ * did:dht Resolver.
10
+ * Resolves DIDs using the Pkarr DHT network.
11
+ *
12
+ * Helpful Resources:
13
+ * * [DID-DHT Spec](https://did-dht.com/)
14
+ */
15
+ export class DidDhtResolver implements DidMethodResolver {
16
+ private pkarrRelay: string;
17
+
18
+ constructor(pkarrRelay: string = DidDhtResolver.defaultRelayUrl()) {
19
+ this.pkarrRelay = pkarrRelay;
20
+ }
21
+
22
+ method(): string {
23
+ return 'dht';
24
+ }
25
+
26
+ async resolve(did: string): Promise<DidResolutionResult> {
27
+ const [_scheme, _method, id] = did.split(':', 3);
28
+
29
+ try {
30
+ // Fetch the DHT packet from the Pkarr relay
31
+ const response = await fetch(`${this.pkarrRelay}/${id}`);
32
+
33
+ if (!response.ok) {
34
+ // DID not found in DHT
35
+ return {
36
+ '@context' : 'https://w3id.org/did-resolution/v1',
37
+ didDocument : undefined,
38
+ didDocumentMetadata : {},
39
+ didResolutionMetadata : {
40
+ error: `DID ${did} not found in DHT`
41
+ }
42
+ };
43
+ }
44
+
45
+ // Parse the response body as the DNS packet
46
+ const packetBytes = new Uint8Array(await response.arrayBuffer());
47
+
48
+ // Convert DNS packet to DID Document
49
+ const didDocument = await this.fromDnsPacket(did, packetBytes);
50
+
51
+ return {
52
+ '@context' : 'https://w3id.org/did-resolution/v1',
53
+ didDocument,
54
+ didDocumentMetadata : {},
55
+ didResolutionMetadata : {
56
+ contentType: 'application/did+json',
57
+ }
58
+ };
59
+ } catch (error: any) {
60
+ return {
61
+ '@context' : 'https://w3id.org/did-resolution/v1',
62
+ didDocument : undefined,
63
+ didDocumentMetadata : {},
64
+ didResolutionMetadata : {
65
+ error: `Error resolving DID ${did}: ${error.message}`
66
+ }
67
+ };
68
+ }
69
+ }
70
+
71
+ /**
72
+ * Converts a signed pkarr relay payload (`sig + seq + dns-packet`) into a DID Document.
73
+ */
74
+ private async fromDnsPacket(did: string, packetBytes: Uint8Array): Promise<DidDocument> {
75
+ const rawDnsPacket = this.extractRawDnsPacket(packetBytes);
76
+ const decoded = dnsPacket.decode(Buffer.from(rawDnsPacket)) as any;
77
+ const answers = Array.isArray(decoded.answers) ? decoded.answers : [];
78
+
79
+ const didDocument: DidDocument = {
80
+ '@context': [
81
+ 'https://www.w3.org/ns/did/v1',
82
+ 'https://w3id.org/security/suites/jws-2020/v1'
83
+ ],
84
+ id : did,
85
+ verificationMethod : []
86
+ };
87
+
88
+ const keyLookup = new Map<string, string>();
89
+ let rootRecordData: string | undefined;
90
+
91
+ for (const answer of answers) {
92
+ if (answer.type !== 'TXT') {continue;}
93
+ const recordName = String(answer.name || '').toLowerCase();
94
+ const recordData = this.txtToString(answer.data);
95
+ const head = this.recordHead(recordName);
96
+ if (!recordData || !head) {continue;}
97
+
98
+ if (head.type === 'k') {
99
+ const parsed = this.parseTxtRecord(recordData);
100
+ const keyId = parsed.id;
101
+ const keyType = parsed.t;
102
+ const keyMaterial = parsed.k;
103
+ if (!keyId || !keyType || !keyMaterial) {continue;}
104
+
105
+ const publicJwk = await this.keyMaterialToJwk(keyType, keyId, keyMaterial);
106
+ didDocument.verificationMethod!.push({
107
+ id : `${did}#${keyId}`,
108
+ type : 'JsonWebKey2020',
109
+ controller : did,
110
+ publicKeyJwk : publicJwk
111
+ });
112
+
113
+ keyLookup.set(head.identifier, `#${keyId}`);
114
+ continue;
115
+ }
116
+
117
+ if (head.type === 's') {
118
+ const parsed = this.parseTxtRecord(recordData);
119
+ const serviceId = parsed.id;
120
+ const serviceType = parsed.t;
121
+ const serviceUri = parsed.uri;
122
+ if (!serviceId || !serviceType || !serviceUri) {continue;}
123
+
124
+ didDocument.service ??= [];
125
+ didDocument.service.push({
126
+ id : `${did}#${serviceId}`,
127
+ type : serviceType,
128
+ serviceEndpoint : serviceUri
129
+ });
130
+ continue;
131
+ }
132
+
133
+ if (head.type === 'did') {
134
+ rootRecordData = recordData;
135
+ }
136
+ }
137
+
138
+ if (rootRecordData) {
139
+ for (const segment of rootRecordData.split(';')) {
140
+ const [relationship, refsRaw] = segment.split('=');
141
+ if (!relationship || !refsRaw) {continue;}
142
+
143
+ const refs = refsRaw.split(',')
144
+ .map((value) => keyLookup.get(value.trim()))
145
+ .filter((value): value is string => Boolean(value));
146
+
147
+ if (!refs.length) {continue;}
148
+
149
+ switch (relationship) {
150
+ case 'auth':
151
+ didDocument.authentication = refs;
152
+ break;
153
+ case 'asm':
154
+ didDocument.assertionMethod = refs;
155
+ break;
156
+ case 'agm':
157
+ didDocument.keyAgreement = refs;
158
+ break;
159
+ case 'inv':
160
+ didDocument.capabilityInvocation = refs;
161
+ break;
162
+ case 'del':
163
+ didDocument.capabilityDelegation = refs;
164
+ break;
165
+ default:
166
+ break;
167
+ }
168
+ }
169
+ }
170
+
171
+ return didDocument;
172
+ }
173
+
174
+ private extractRawDnsPacket(packetBytes: Uint8Array): Uint8Array {
175
+ if (packetBytes.length > 72) {
176
+ return packetBytes.slice(72);
177
+ }
178
+ return packetBytes;
179
+ }
180
+
181
+ private txtToString(data: unknown): string {
182
+ if (typeof data === 'string') {return data;}
183
+ if (Array.isArray(data)) {
184
+ return data.map((chunk) => this.txtToString(chunk)).join('');
185
+ }
186
+ if (data instanceof Uint8Array) {
187
+ return Buffer.from(data).toString('utf8');
188
+ }
189
+ return '';
190
+ }
191
+
192
+ private parseTxtRecord(data: string): Record<string, string> {
193
+ return data.split(',').reduce((acc, pair) => {
194
+ const [key, value] = pair.split('=');
195
+ if (!key || value === undefined) {return acc;}
196
+ acc[key.trim()] = value.trim();
197
+ return acc;
198
+ }, {} as Record<string, string>);
199
+ }
200
+
201
+ private recordHead(recordName: string): { type: 'k' | 's' | 'did', identifier: string } | null {
202
+ const firstLabel = recordName.split('.')[0] ?? '';
203
+ if (firstLabel === '_did') {
204
+ return { type: 'did', identifier: 'did' };
205
+ }
206
+ if (firstLabel.startsWith('_k')) {
207
+ return { type: 'k', identifier: firstLabel.slice(1) };
208
+ }
209
+ if (firstLabel.startsWith('_s')) {
210
+ return { type: 's', identifier: firstLabel.slice(1) };
211
+ }
212
+ return null;
213
+ }
214
+
215
+ private async keyMaterialToJwk(keyType: string, keyId: string, keyBase64Url: string): Promise<PublicJwk> {
216
+ const keyBytes = this.base64UrlToBytes(keyBase64Url);
217
+ if (keyType === '0') {
218
+ const publicJwk = await ed25519.publicKeyToJwk(keyBytes);
219
+ publicJwk.kid = keyId;
220
+ return publicJwk;
221
+ }
222
+ if (keyType === '1') {
223
+ const publicJwk = await Secp256k1.publicKeyToJwk(keyBytes);
224
+ publicJwk.kid = keyId;
225
+ return publicJwk;
226
+ }
227
+ throw new Error(`Unsupported did:dht key type: ${keyType}`);
228
+ }
229
+
230
+ private base64UrlToBytes(value: string): Uint8Array {
231
+ const pad = value.length % 4 === 0 ? '' : '='.repeat(4 - (value.length % 4));
232
+ const base64 = value.replace(/-/g, '+').replace(/_/g, '/') + pad;
233
+ return new Uint8Array(Buffer.from(base64, 'base64'));
234
+ }
235
+
236
+ private static defaultRelayUrl(): string {
237
+ const envRelayUrl = typeof process !== 'undefined' ? process.env.DHT_RELAY_URL?.trim() : undefined;
238
+ return envRelayUrl || 'http://localhost:8085/dht';
239
+ }
240
+ }
241
+
@@ -0,0 +1,52 @@
1
+ import type { DidMethodResolver, DidResolutionResult } from '../types/did-types.js';
2
+ import { DwnError, DwnErrorCode } from '../core/dwn-error.js';
3
+
4
+ import crossFetch from 'cross-fetch';
5
+ // supports fetch in: node, browsers, and browser extensions.
6
+ // uses native fetch if available in environment or falls back to a ponyfill.
7
+ // 'cross-fetch' is a ponyfill that uses `XMLHTTPRequest` under the hood.
8
+ // `XMLHTTPRequest` cannot be used in browser extension background service workers.
9
+ // browser extensions get even more strict with `fetch` in that it cannot be referenced
10
+ // indirectly.
11
+ const defaultFetch = globalThis.fetch ?? crossFetch;
12
+
13
+ /**
14
+ * Resolver for ION DIDs.
15
+ *
16
+ * NOTE: For production use, consider using ion-sidtree in a Docker container
17
+ * to resolve ION DIDs locally instead of relying on external resolution endpoints.
18
+ * This would provide better reliability and performance.
19
+ */
20
+ export class DidIonResolver implements DidMethodResolver {
21
+ private fetchFn: typeof globalThis.fetch;
22
+
23
+ /**
24
+ * @param resolutionEndpoint optional custom URL to send DID resolution request to
25
+ * @param fetchFn optional custom fetch function for testing
26
+ */
27
+ constructor (
28
+ private resolutionEndpoint: string = 'https://discover.did.msidentity.com/1.0/identifiers/',
29
+ fetchFn?: typeof globalThis.fetch
30
+ ) {
31
+ this.fetchFn = fetchFn ?? defaultFetch;
32
+ }
33
+
34
+ method(): string {
35
+ return 'ion';
36
+ }
37
+
38
+ async resolve(did: string): Promise<DidResolutionResult> {
39
+ // using `URL` constructor to handle both existence and absence of trailing slash '/' in resolution endpoint
40
+ // appending './' to DID so 'did' in 'did:ion:abc' doesn't get interpreted as a URL scheme (e.g. like 'http') due to the colon
41
+ const resolutionUrl = new URL('./' + did, this.resolutionEndpoint).toString();
42
+ const response = await this.fetchFn(resolutionUrl);
43
+
44
+ if (response.status !== 200) {
45
+ throw new DwnError(DwnErrorCode.DidResolutionFailed, `unable to resolve ${did}, got http status ${response.status}`);
46
+ }
47
+
48
+ const didResolutionResult = await response.json();
49
+ return didResolutionResult;
50
+ }
51
+
52
+ }
@@ -0,0 +1,137 @@
1
+ import varint from 'varint';
2
+ import type { DidDocument, DidMethodResolver, DidResolutionResult } from '../types/did-types.js';
3
+
4
+ import { base58btc } from 'multiformats/bases/base58';
5
+ import { Did } from './did.js';
6
+ import { ed25519 } from '../../src/jose/algorithms/signing/ed25519.js';
7
+ import { Encoder } from '../utils/encoder.js';
8
+ import { Secp256k1 } from '../utils/secp256k1.js';
9
+ import type { KeyMaterial, PublicJwk } from '../types/jose-types.js';
10
+
11
+ /**
12
+ * did:key Resolver.
13
+ * * **NOTE**: Key support is limited to Ed25519 and SECP256k1.
14
+ * * **NOTE**: `verificationMethod` support is limited to `JsonWebKey2020`
15
+ *
16
+ * Helpful Resources:
17
+ * * [DID-Key Draft Spec](https://w3c-ccg.github.io/did-method-key/)
18
+ */
19
+ export class DidKeyResolver implements DidMethodResolver {
20
+ method(): string {
21
+ return 'key';
22
+ }
23
+
24
+ /**
25
+ * Gets the number of bytes of the multicodec header in the `did:key` DID.
26
+ * @param did - A `did:key` DID
27
+ * @returns size of the multicodec head in number of bytes
28
+ */
29
+ public static getMulticodecSize(did: Uint8Array): number {
30
+ let multicodecHeaderSize = 0;
31
+
32
+ while (true) {
33
+ const currentByte = did[multicodecHeaderSize];
34
+ multicodecHeaderSize++;
35
+
36
+ // bitwise and with binary 1000 0000
37
+ // as soon as the result byte does not lead with a leading 1, we've reached the end of the multicodec header
38
+ if ((currentByte & 0x80) !== 0x80) {
39
+ break;
40
+ }
41
+ }
42
+
43
+ return multicodecHeaderSize;
44
+ }
45
+
46
+ async resolve(did: string): Promise<DidResolutionResult> {
47
+ const [_scheme, _method, id] = did.split(':', 3);
48
+
49
+ try {
50
+ const idBytes = base58btc.decode(id);
51
+ const multicodec = varint.decode(idBytes);
52
+ const multicodecSize = DidKeyResolver.getMulticodecSize(idBytes);
53
+ const publicKeyBytes = idBytes.slice(multicodecSize);
54
+
55
+ // key specific values
56
+ const keySpecificContext: string[] = [];
57
+ let publicJwk: PublicJwk;
58
+ if (multicodec === 0xed) {
59
+ // ed25519-pub multicodec
60
+ keySpecificContext.push('https://w3id.org/security/suites/ed25519-2020/v1');
61
+ publicJwk = await ed25519.publicKeyToJwk(publicKeyBytes);
62
+ } else if (multicodec === 0xe7) {
63
+ // secp256k1-pub multicodec
64
+ publicJwk = await Secp256k1.publicKeyToJwk(publicKeyBytes);
65
+ } else {
66
+ throw Error(`key type of multicodec ${multicodec} is not supported`);
67
+ }
68
+
69
+ const keyId = `${did}#${id}`;
70
+
71
+ const didDocument: DidDocument = {
72
+ '@context': [
73
+ 'https://www.w3.org/ns/did/v1',
74
+ 'https://w3id.org/security/suites/jws-2020/v1',
75
+ ...keySpecificContext
76
+ ],
77
+ 'id' : did,
78
+ 'verificationMethod' : [{
79
+ id : keyId,
80
+ type : 'JsonWebKey2020',
81
+ controller : did,
82
+ publicKeyJwk : publicJwk
83
+ }],
84
+ 'authentication' : [keyId],
85
+ 'assertionMethod' : [keyId],
86
+ 'capabilityDelegation' : [keyId],
87
+ 'capabilityInvocation' : [keyId]
88
+ };
89
+
90
+ return {
91
+ '@context' : 'https://w3id.org/did-resolution/v1',
92
+ didDocument,
93
+ didDocumentMetadata : {},
94
+ didResolutionMetadata : {}
95
+ };
96
+ } catch {
97
+ return {
98
+ didDocument : undefined,
99
+ didDocumentMetadata : {},
100
+ didResolutionMetadata : {
101
+ error: 'invalidDid'
102
+ },
103
+ };
104
+ }
105
+ }
106
+
107
+ /**
108
+ * Generates a new ed25519 public/private key pair. Creates a DID using the private key.
109
+ * @returns DID and its key material.
110
+ */
111
+ public static async generate(): Promise<{ did: string } & KeyMaterial> {
112
+ const { publicJwk, privateJwk } = await ed25519.generateKeyPair();
113
+
114
+ // multicodec code for Ed25519 public keys
115
+ const ed25519Multicodec = varint.encode(0xed);
116
+ const publicKeyBytes = Encoder.base64UrlToBytes(publicJwk.x);
117
+ const idBytes = new Uint8Array(ed25519Multicodec.length + publicKeyBytes.byteLength);
118
+ idBytes.set(ed25519Multicodec, 0);
119
+ idBytes.set(publicKeyBytes, ed25519Multicodec.length);
120
+
121
+ const id = base58btc.encode(idBytes);
122
+ const did = `did:key:${id}`;
123
+ const keyId = DidKeyResolver.getKeyId(did);
124
+
125
+ return { did, keyId, keyPair: { publicJwk, privateJwk } };
126
+ }
127
+
128
+ /**
129
+ * Gets the fully qualified key ID of a `did:key` DID. ie. '<did>#<method-specific-id>'
130
+ */
131
+ public static getKeyId(did: string): string {
132
+ const methodSpecificId = Did.getMethodSpecificId(did);
133
+ const keyId = `${did}#${methodSpecificId}`;
134
+ return keyId;
135
+ };
136
+
137
+ }
@@ -0,0 +1,77 @@
1
+ import type { Cache } from '../types/cache.js';
2
+ import type { DidMethodResolver, DidResolutionResult } from '../types/did-types.js';
3
+
4
+ import { Did } from './did.js';
5
+ import { DidDhtResolver } from './did-dht-resolver.js';
6
+ import { DidIonResolver } from './did-ion-resolver.js';
7
+ import { DidKeyResolver } from './did-key-resolver.js';
8
+ import { MemoryCache } from '../utils/memory-cache.js';
9
+ import { DwnError, DwnErrorCode } from '../core/dwn-error.js';
10
+
11
+ /**
12
+ * A DID resolver that by default supports `did:key`, `did:ion`, and `did:dht` DIDs.
13
+ */
14
+ export class DidResolver {
15
+ private didResolvers: Map<string, DidMethodResolver>;
16
+ private cache: Cache;
17
+
18
+ constructor(resolvers?: DidMethodResolver[], cache?:Cache) {
19
+
20
+ this.cache = cache || new MemoryCache(600);
21
+
22
+ // construct default DID method resolvers if none given
23
+ if (resolvers === undefined || resolvers.length === 0) {
24
+ resolvers = [
25
+ new DidIonResolver(),
26
+ new DidKeyResolver(),
27
+ new DidDhtResolver()
28
+ ];
29
+ }
30
+
31
+ this.didResolvers = new Map();
32
+
33
+ for (const resolver of resolvers) {
34
+ this.didResolvers.set(resolver.method(), resolver);
35
+ }
36
+ }
37
+
38
+ /**
39
+ * attempt to resolve the DID provided
40
+ * @throws {Error} if DID is invalid
41
+ * @throws {Error} if DID method is not supported
42
+ * @throws {Error} if resolving DID fails
43
+ * @param did - the DID to resolve
44
+ * @returns {DidResolutionResult}
45
+ */
46
+ public async resolve(did: string): Promise<DidResolutionResult> {
47
+ // naively validate the given DID
48
+ Did.validate(did);
49
+ const splitDID = did.split(':', 3);
50
+
51
+ const didMethod = splitDID[1];
52
+ const didResolver = this.didResolvers.get(didMethod);
53
+
54
+ if (!didResolver) {
55
+ throw new DwnError(DwnErrorCode.DidMethodNotSupported, `${didMethod} DID method not supported`);
56
+ }
57
+
58
+ // use cached result if exists
59
+ const cachedResolutionResult = await this.cache.get(did);
60
+ const resolutionResult = cachedResolutionResult ?? await didResolver.resolve(did);
61
+ if (cachedResolutionResult === undefined){
62
+ await this.cache.set(did, resolutionResult);
63
+ }
64
+
65
+ const { didDocument, didResolutionMetadata } = resolutionResult;
66
+
67
+ if (!didDocument || didResolutionMetadata?.error) {
68
+ const { error } = didResolutionMetadata;
69
+ let errMsg = `Failed to resolve DID ${did}.`;
70
+ errMsg += error ? ` Error: ${error}` : '';
71
+
72
+ throw new DwnError(DwnErrorCode.DidResolutionFailed, errMsg);
73
+ }
74
+
75
+ return resolutionResult;
76
+ }
77
+ }