@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,311 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { expect } from 'chai';
11
+ import sinon from 'sinon';
12
+ import { DataStoreLevel } from '../../src/store/data-store-level.js';
13
+ import { DidKeyResolver } from '../../src/did/did-key-resolver.js';
14
+ import { DidResolver } from '../../src/did/did-resolver.js';
15
+ import { Dwn } from '../../src/dwn.js';
16
+ import { DwnErrorCode } from '../../src/core/dwn-error.js';
17
+ import { EventLogLevel } from '../../src/event-log/event-log-level.js';
18
+ import { Message } from '../../src/core/message.js';
19
+ import { MessageStoreLevel } from '../../src/store/message-store-level.js';
20
+ import { PermissionsRevoke } from '../../src/interfaces/permissions-revoke.js';
21
+ import { TestDataGenerator } from '../utils/test-data-generator.js';
22
+ import { Time } from '../../src/utils/time.js';
23
+ describe('PermissionsRevokeHandler.handle()', () => {
24
+ if (process.env.TESTSOFF === 'true') {
25
+ return;
26
+ }
27
+ let didResolver;
28
+ let messageStore;
29
+ let dataStore;
30
+ let eventLog;
31
+ let dwn;
32
+ describe('functional tests', () => {
33
+ before(() => __awaiter(void 0, void 0, void 0, function* () {
34
+ didResolver = new DidResolver([new DidKeyResolver()]);
35
+ // important to follow this pattern to initialize and clean the message and data store in tests
36
+ // so that different suites can reuse the same block store and index location for testing
37
+ messageStore = new MessageStoreLevel({
38
+ blockstoreLocation: 'tests/data/TEST-MESSAGESTORE',
39
+ indexLocation: 'tests/data/TEST-INDEX'
40
+ });
41
+ dataStore = new DataStoreLevel({
42
+ blockstoreLocation: 'tests/data/TEST-DATASTORE'
43
+ });
44
+ eventLog = new EventLogLevel({
45
+ location: 'tests/data/TEST-EVENTLOG'
46
+ });
47
+ dwn = yield Dwn.create({ didResolver, messageStore, dataStore, eventLog });
48
+ }));
49
+ beforeEach(() => __awaiter(void 0, void 0, void 0, function* () {
50
+ sinon.restore(); // wipe all previous stubs/spies/mocks/fakes
51
+ // clean up before each test rather than after so that a test does not depend on other tests to do the clean up
52
+ yield messageStore.clear();
53
+ yield dataStore.clear();
54
+ yield eventLog.clear();
55
+ }));
56
+ after(() => __awaiter(void 0, void 0, void 0, function* () {
57
+ yield dwn.close();
58
+ }));
59
+ it('should accept a PermissionsRevoke that revokes an existing grant', () => __awaiter(void 0, void 0, void 0, function* () {
60
+ // scenario: Alice issues a grant to Bob, then she revokes the grant.
61
+ const alice = yield DidKeyResolver.generate();
62
+ const bob = yield DidKeyResolver.generate();
63
+ // Alice issues a grant
64
+ const { permissionsGrant } = yield TestDataGenerator.generatePermissionsGrant({
65
+ author: alice,
66
+ grantedBy: alice.did,
67
+ grantedTo: bob.did,
68
+ grantedFor: alice.did,
69
+ });
70
+ const permissionsGrantReply = yield dwn.processMessage(alice.did, permissionsGrant.message);
71
+ expect(permissionsGrantReply.status.code).to.eq(202);
72
+ // Alice revokes the grant
73
+ const { permissionsRevoke } = yield TestDataGenerator.generatePermissionsRevoke({
74
+ author: alice,
75
+ permissionsGrantId: yield Message.getCid(permissionsGrant.message)
76
+ });
77
+ const permissionsRevokeReply = yield dwn.processMessage(alice.did, permissionsRevoke.message);
78
+ expect(permissionsRevokeReply.status.code).to.eq(202);
79
+ }));
80
+ it('should return 401 if authentication fails', () => __awaiter(void 0, void 0, void 0, function* () {
81
+ const alice = yield DidKeyResolver.generate();
82
+ alice.keyId = 'wrongValue'; // to fail authentication
83
+ const { message } = yield TestDataGenerator.generatePermissionsRevoke({
84
+ author: alice,
85
+ });
86
+ const reply = yield dwn.processMessage(alice.did, message);
87
+ expect(reply.status.code).to.equal(401);
88
+ expect(reply.status.detail).to.contain('not a valid DID');
89
+ }));
90
+ it('should reject with 400 if failure parsing the message', () => __awaiter(void 0, void 0, void 0, function* () {
91
+ const alice = yield DidKeyResolver.generate();
92
+ const { message } = yield TestDataGenerator.generatePermissionsRevoke();
93
+ // stub the `parse()` function to throw an error
94
+ sinon.stub(PermissionsRevoke, 'parse').throws('anyError');
95
+ const reply = yield dwn.processMessage(alice.did, message);
96
+ expect(reply.status.code).to.equal(400);
97
+ }));
98
+ it('should reject with 400 if the associated grant cannot be found', () => __awaiter(void 0, void 0, void 0, function* () {
99
+ const alice = yield DidKeyResolver.generate();
100
+ const { permissionsRevoke } = yield TestDataGenerator.generatePermissionsRevoke({
101
+ author: alice,
102
+ permissionsGrantId: yield TestDataGenerator.randomCborSha256Cid()
103
+ });
104
+ const permissionsRevokeReply = yield dwn.processMessage(alice.did, permissionsRevoke.message);
105
+ expect(permissionsRevokeReply.status.code).to.eq(400);
106
+ expect(permissionsRevokeReply.status.detail).to.contain('Could not find PermissionsGrant');
107
+ }));
108
+ it('should reject with 400 if the associated grant was issued after the revoke was created', () => __awaiter(void 0, void 0, void 0, function* () {
109
+ const alice = yield DidKeyResolver.generate();
110
+ const preGrantTimeStamp = Time.getCurrentTimestamp();
111
+ yield Time.sleep(10);
112
+ // Create grant
113
+ const { permissionsGrant } = yield TestDataGenerator.generatePermissionsGrant({
114
+ author: alice,
115
+ grantedBy: alice.did,
116
+ grantedFor: alice.did,
117
+ });
118
+ const permissionsGrantReply = yield dwn.processMessage(alice.did, permissionsGrant.message);
119
+ expect(permissionsGrantReply.status.code).to.eq(202);
120
+ // Create revoke with timestamp before grant
121
+ const { permissionsRevoke } = yield TestDataGenerator.generatePermissionsRevoke({
122
+ author: alice,
123
+ permissionsGrantId: yield Message.getCid(permissionsGrant.message),
124
+ dateCreated: preGrantTimeStamp
125
+ });
126
+ const permissionsRevokeReply = yield dwn.processMessage(alice.did, permissionsRevoke.message);
127
+ expect(permissionsRevokeReply.status.code).to.eq(400);
128
+ expect(permissionsRevokeReply.status.detail).to.contain('PermissionsRevoke has earlier date than associated PermissionsGrant');
129
+ }));
130
+ it('should reject with 401 if the revoke was not authored by the DID in the `grantedFor` of the grant', () => __awaiter(void 0, void 0, void 0, function* () {
131
+ // scenario: Alice issues a grant. Bob tries and failes to revoke the grant.
132
+ const alice = yield DidKeyResolver.generate();
133
+ const bob = yield DidKeyResolver.generate();
134
+ const { permissionsGrant } = yield TestDataGenerator.generatePermissionsGrant({
135
+ author: alice,
136
+ grantedBy: alice.did,
137
+ grantedFor: alice.did,
138
+ });
139
+ const permissionsGrantReply = yield dwn.processMessage(alice.did, permissionsGrant.message);
140
+ expect(permissionsGrantReply.status.code).to.eq(202);
141
+ const { permissionsRevoke } = yield TestDataGenerator.generatePermissionsRevoke({
142
+ author: bob,
143
+ permissionsGrantId: yield Message.getCid(permissionsGrant.message),
144
+ });
145
+ const permissionsRevokeReply = yield dwn.processMessage(alice.did, permissionsRevoke.message);
146
+ expect(permissionsRevokeReply.status.code).to.eq(401);
147
+ expect(permissionsRevokeReply.status.detail).to.contain(DwnErrorCode.PermissionsRevokeUnauthorizedRevoke);
148
+ }));
149
+ it('should reject with 409 if older PermissionsRevoke messages exist for the same grant', () => __awaiter(void 0, void 0, void 0, function* () {
150
+ const alice = yield DidKeyResolver.generate();
151
+ // Create a grant
152
+ const { permissionsGrant } = yield TestDataGenerator.generatePermissionsGrant({
153
+ author: alice,
154
+ grantedBy: alice.did,
155
+ grantedFor: alice.did,
156
+ });
157
+ const permissionsGrantReply = yield dwn.processMessage(alice.did, permissionsGrant.message);
158
+ expect(permissionsGrantReply.status.code).to.eq(202);
159
+ // Revoke the grant
160
+ const { permissionsRevoke: permissionsRevoke1 } = yield TestDataGenerator.generatePermissionsRevoke({
161
+ author: alice,
162
+ permissionsGrantId: yield Message.getCid(permissionsGrant.message),
163
+ });
164
+ const permissionsRevokeReply1 = yield dwn.processMessage(alice.did, permissionsRevoke1.message);
165
+ expect(permissionsRevokeReply1.status.code).to.eq(202);
166
+ // Try to revoke the grant again, and receive 409 because we already revoked it.
167
+ const { permissionsRevoke: permissionsRevoke2 } = yield TestDataGenerator.generatePermissionsRevoke({
168
+ author: alice,
169
+ permissionsGrantId: yield Message.getCid(permissionsGrant.message),
170
+ });
171
+ const permissionsRevokeReply2 = yield dwn.processMessage(alice.did, permissionsRevoke2.message);
172
+ expect(permissionsRevokeReply2.status.code).to.eq(409);
173
+ }));
174
+ it('should reject with 409 if a PermissionsRevoke message exists for same grant, same revocation time, and lower lexicographic CID', () => __awaiter(void 0, void 0, void 0, function* () {
175
+ const alice = yield DidKeyResolver.generate();
176
+ // Create a grant
177
+ const { permissionsGrant } = yield TestDataGenerator.generatePermissionsGrant({
178
+ author: alice,
179
+ grantedBy: alice.did,
180
+ grantedFor: alice.did,
181
+ });
182
+ const permissionsGrantReply = yield dwn.processMessage(alice.did, permissionsGrant.message);
183
+ expect(permissionsGrantReply.status.code).to.eq(202);
184
+ // Create two revokes with same timestamp
185
+ const revokeTimestamp = Time.getCurrentTimestamp();
186
+ const { permissionsRevoke: revoke1 } = yield TestDataGenerator.generatePermissionsRevoke({
187
+ author: alice,
188
+ permissionsGrantId: yield Message.getCid(permissionsGrant.message),
189
+ dateCreated: revokeTimestamp,
190
+ });
191
+ const { permissionsRevoke: revoke2 } = yield TestDataGenerator.generatePermissionsRevoke({
192
+ author: alice,
193
+ permissionsGrantId: yield Message.getCid(permissionsGrant.message),
194
+ dateCreated: revokeTimestamp,
195
+ });
196
+ // Sort revokes by message CID
197
+ let revokeWithHigherLexicographic;
198
+ let revokeWithLowerLexicographic;
199
+ if ((yield Message.getCid(revoke1.message)) > (yield Message.getCid(revoke2.message))) {
200
+ revokeWithHigherLexicographic = revoke1;
201
+ revokeWithLowerLexicographic = revoke2;
202
+ }
203
+ else {
204
+ revokeWithHigherLexicographic = revoke2;
205
+ revokeWithLowerLexicographic = revoke1;
206
+ }
207
+ // Process revoke with lower lexicographic value
208
+ const permissionsRevokeReply1 = yield dwn.processMessage(alice.did, revokeWithLowerLexicographic.message);
209
+ expect(permissionsRevokeReply1.status.code).to.eq(202);
210
+ // Process revoke with same timestamp but lower lexicographic value, receive 409
211
+ const permissionsRevokeReply2 = yield dwn.processMessage(alice.did, revokeWithHigherLexicographic.message);
212
+ expect(permissionsRevokeReply2.status.code).to.eq(409);
213
+ }));
214
+ it('should accept revokes that are older than the oldest existing revoke', () => __awaiter(void 0, void 0, void 0, function* () {
215
+ const alice = yield DidKeyResolver.generate();
216
+ // Create a grant
217
+ const { permissionsGrant } = yield TestDataGenerator.generatePermissionsGrant({
218
+ author: alice,
219
+ grantedBy: alice.did,
220
+ grantedFor: alice.did,
221
+ });
222
+ const permissionsGrantReply = yield dwn.processMessage(alice.did, permissionsGrant.message);
223
+ expect(permissionsGrantReply.status.code).to.eq(202);
224
+ // Pre-create a Revoke message with earlier timestamp, to be processed later
225
+ const { permissionsRevoke: permissionsRevoke1 } = yield TestDataGenerator.generatePermissionsRevoke({
226
+ author: alice,
227
+ permissionsGrantId: yield Message.getCid(permissionsGrant.message),
228
+ });
229
+ yield Time.minimalSleep();
230
+ // Revoke the grant using a later timestamp than the pre-created revoke
231
+ const { permissionsRevoke: permissionsRevoke2 } = yield TestDataGenerator.generatePermissionsRevoke({
232
+ author: alice,
233
+ permissionsGrantId: yield Message.getCid(permissionsGrant.message),
234
+ });
235
+ const permissionsRevokeReply2 = yield dwn.processMessage(alice.did, permissionsRevoke2.message);
236
+ expect(permissionsRevokeReply2.status.code).to.eq(202);
237
+ // Process the pre-created Revoke
238
+ const permissionsRevokeReply1 = yield dwn.processMessage(alice.did, permissionsRevoke1.message);
239
+ expect(permissionsRevokeReply1.status.code).to.eq(202);
240
+ }));
241
+ describe('event log', () => {
242
+ it('should add event for PermissionsRevoke', () => __awaiter(void 0, void 0, void 0, function* () {
243
+ const alice = yield DidKeyResolver.generate();
244
+ // Create a grant, adding one event
245
+ const { permissionsGrant } = yield TestDataGenerator.generatePermissionsGrant({
246
+ author: alice,
247
+ grantedBy: alice.did,
248
+ grantedFor: alice.did,
249
+ });
250
+ const permissionsGrantReply = yield dwn.processMessage(alice.did, permissionsGrant.message);
251
+ expect(permissionsGrantReply.status.code).to.eq(202);
252
+ let events = yield eventLog.getEvents(alice.did);
253
+ expect(events.length).to.equal(1);
254
+ // Revoke the grant, adding a second event
255
+ const { permissionsRevoke } = yield TestDataGenerator.generatePermissionsRevoke({
256
+ author: alice,
257
+ permissionsGrantId: yield Message.getCid(permissionsGrant.message),
258
+ });
259
+ const reply = yield dwn.processMessage(alice.did, permissionsRevoke.message);
260
+ expect(reply.status.code).to.equal(202);
261
+ events = yield eventLog.getEvents(alice.did);
262
+ expect(events.length).to.equal(2);
263
+ // The revoke should be the second event
264
+ const messageCid = yield Message.getCid(permissionsRevoke.message);
265
+ expect(events[1].messageCid).to.equal(messageCid);
266
+ }));
267
+ it('should remove events for existing PermissionsRevoke messages with timestamp after the incoming message', () => __awaiter(void 0, void 0, void 0, function* () {
268
+ // scenario: A grant is issued, adding one event. Then the grant is revoked, adding another event.
269
+ // Then, a slightly earlier revoke is processed, causing the existing revoke to be purged.
270
+ const alice = yield DidKeyResolver.generate();
271
+ // Create a grant, adding one event
272
+ const { permissionsGrant } = yield TestDataGenerator.generatePermissionsGrant({
273
+ author: alice,
274
+ grantedBy: alice.did,
275
+ grantedFor: alice.did,
276
+ });
277
+ const permissionsGrantReply = yield dwn.processMessage(alice.did, permissionsGrant.message);
278
+ expect(permissionsGrantReply.status.code).to.eq(202);
279
+ let events = yield eventLog.getEvents(alice.did);
280
+ expect(events.length).to.equal(1);
281
+ // Pre-create a Revoke message with earlier timestamp, to be processed later
282
+ const { permissionsRevoke: permissionsRevoke1 } = yield TestDataGenerator.generatePermissionsRevoke({
283
+ author: alice,
284
+ permissionsGrantId: yield Message.getCid(permissionsGrant.message),
285
+ });
286
+ yield Time.sleep(10);
287
+ // Revoke the grant using a later timestamp than the pre-created revoke
288
+ const { permissionsRevoke: permissionsRevoke2 } = yield TestDataGenerator.generatePermissionsRevoke({
289
+ author: alice,
290
+ permissionsGrantId: yield Message.getCid(permissionsGrant.message),
291
+ });
292
+ const permissionsRevokeReply2 = yield dwn.processMessage(alice.did, permissionsRevoke2.message);
293
+ expect(permissionsRevokeReply2.status.code).to.eq(202);
294
+ // An event is added for the revoke
295
+ const permissionsRevokeCid2 = yield Message.getCid(permissionsRevoke2.message);
296
+ events = yield eventLog.getEvents(alice.did);
297
+ expect(events.length).to.equal(2);
298
+ expect(events[1].messageCid).to.equal(permissionsRevokeCid2);
299
+ // Process the pre-created Revoke
300
+ const permissionsRevokeReply1 = yield dwn.processMessage(alice.did, permissionsRevoke1.message);
301
+ expect(permissionsRevokeReply1.status.code).to.eq(202);
302
+ // The existing Revoke event is purged from the eventLog. The pre-created Revoke is added to the eventLog
303
+ const permissionsRevokeCid1 = yield Message.getCid(permissionsRevoke1.message);
304
+ events = yield eventLog.getEvents(alice.did);
305
+ expect(events.length).to.equal(2);
306
+ expect(events[1].messageCid).to.equal(permissionsRevokeCid1);
307
+ }));
308
+ });
309
+ });
310
+ });
311
+ //# sourceMappingURL=permissions-revoke.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions-revoke.spec.js","sourceRoot":"","sources":["../../../../tests/handlers/permissions-revoke.spec.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAE/C,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;IACjD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QACpC,OAAO;IACT,CAAC;IAED,IAAI,WAAwB,CAAC;IAC7B,IAAI,YAA+B,CAAC;IACpC,IAAI,SAAyB,CAAC;IAC9B,IAAI,QAAuB,CAAC;IAC5B,IAAI,GAAQ,CAAC;IAEb,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,MAAM,CAAC,GAAS,EAAE;YAChB,WAAW,GAAG,IAAI,WAAW,CAAC,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC,CAAC;YAEtD,+FAA+F;YAC/F,yFAAyF;YACzF,YAAY,GAAG,IAAI,iBAAiB,CAAC;gBACnC,kBAAkB,EAAG,8BAA8B;gBACnD,aAAa,EAAQ,uBAAuB;aAC7C,CAAC,CAAC;YAEH,SAAS,GAAG,IAAI,cAAc,CAAC;gBAC7B,kBAAkB,EAAE,2BAA2B;aAChD,CAAC,CAAC;YAEH,QAAQ,GAAG,IAAI,aAAa,CAAC;gBAC3B,QAAQ,EAAE,0BAA0B;aACrC,CAAC,CAAC;YAEH,GAAG,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC7E,CAAC,CAAA,CAAC,CAAC;QAEH,UAAU,CAAC,GAAS,EAAE;YACpB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,4CAA4C;YAE7D,+GAA+G;YAC/G,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC;YAC3B,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;YACxB,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;QACzB,CAAC,CAAA,CAAC,CAAC;QAEH,KAAK,CAAC,GAAS,EAAE;YACf,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC,CAAA,CAAC,CAAC;QAEH,EAAE,CAAC,kEAAkE,EAAE,GAAS,EAAE;YAChF,qEAAqE;YACrE,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,CAAC;YAC9C,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,CAAC;YAG5C,uBAAuB;YACvB,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,iBAAiB,CAAC,wBAAwB,CAAC;gBAC5E,MAAM,EAAO,KAAK;gBAClB,SAAS,EAAI,KAAK,CAAC,GAAG;gBACtB,SAAS,EAAI,GAAG,CAAC,GAAG;gBACpB,UAAU,EAAG,KAAK,CAAC,GAAG;aACvB,CAAC,CAAC;YACH,MAAM,qBAAqB,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC5F,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YAErD,0BAA0B;YAC1B,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,iBAAiB,CAAC,yBAAyB,CAAC;gBAC9E,MAAM,EAAe,KAAK;gBAC1B,kBAAkB,EAAG,MAAM,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC;aACpE,CAAC,CAAC;YACH,MAAM,sBAAsB,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC9F,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACxD,CAAC,CAAA,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAS,EAAE;YACzD,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,CAAC;YAC9C,KAAK,CAAC,KAAK,GAAG,YAAY,CAAC,CAAC,yBAAyB;YACrD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,iBAAiB,CAAC,yBAAyB,CAAC;gBACpE,MAAM,EAAE,KAAK;aACd,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC3D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACxC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAC5D,CAAC,CAAA,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,GAAS,EAAE;YACrE,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,CAAC;YAC9C,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,iBAAiB,CAAC,yBAAyB,EAAE,CAAC;YAExE,gDAAgD;YAChD,KAAK,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC1D,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAE3D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1C,CAAC,CAAA,CAAC,CAAC;QAEH,EAAE,CAAC,gEAAgE,EAAE,GAAS,EAAE;YAC9E,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,CAAC;YAE9C,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,iBAAiB,CAAC,yBAAyB,CAAC;gBAC9E,MAAM,EAAe,KAAK;gBAC1B,kBAAkB,EAAG,MAAM,iBAAiB,CAAC,mBAAmB,EAAE;aACnE,CAAC,CAAC;YACH,MAAM,sBAAsB,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC9F,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YACtD,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;QAC7F,CAAC,CAAA,CAAC,CAAC;QAEH,EAAE,CAAC,wFAAwF,EAAE,GAAS,EAAE;YACtG,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,CAAC;YAE9C,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACrD,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAErB,eAAe;YACf,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,iBAAiB,CAAC,wBAAwB,CAAC;gBAC5E,MAAM,EAAO,KAAK;gBAClB,SAAS,EAAI,KAAK,CAAC,GAAG;gBACtB,UAAU,EAAG,KAAK,CAAC,GAAG;aACvB,CAAC,CAAC;YACH,MAAM,qBAAqB,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC5F,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YAErD,4CAA4C;YAC5C,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,iBAAiB,CAAC,yBAAyB,CAAC;gBAC9E,MAAM,EAAe,KAAK;gBAC1B,kBAAkB,EAAG,MAAM,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC;gBACnE,WAAW,EAAU,iBAAiB;aACvC,CAAC,CAAC;YACH,MAAM,sBAAsB,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC9F,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YACtD,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,qEAAqE,CAAC,CAAC;QACjI,CAAC,CAAA,CAAC,CAAC;QAEH,EAAE,CAAC,mGAAmG,EAAE,GAAS,EAAE;YACjH,4EAA4E;YAC5E,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,CAAC;YAC9C,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,CAAC;YAE5C,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,iBAAiB,CAAC,wBAAwB,CAAC;gBAC5E,MAAM,EAAO,KAAK;gBAClB,SAAS,EAAI,KAAK,CAAC,GAAG;gBACtB,UAAU,EAAG,KAAK,CAAC,GAAG;aACvB,CAAC,CAAC;YACH,MAAM,qBAAqB,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC5F,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YAErD,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,iBAAiB,CAAC,yBAAyB,CAAC;gBAC9E,MAAM,EAAe,GAAG;gBACxB,kBAAkB,EAAG,MAAM,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC;aACpE,CAAC,CAAC;YACH,MAAM,sBAAsB,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC9F,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YACtD,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,mCAAmC,CAAC,CAAC;QAC5G,CAAC,CAAA,CAAC,CAAC;QAEH,EAAE,CAAC,qFAAqF,EAAE,GAAS,EAAE;YACnG,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,CAAC;YAE9C,iBAAiB;YACjB,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,iBAAiB,CAAC,wBAAwB,CAAC;gBAC5E,MAAM,EAAO,KAAK;gBAClB,SAAS,EAAI,KAAK,CAAC,GAAG;gBACtB,UAAU,EAAG,KAAK,CAAC,GAAG;aACvB,CAAC,CAAC;YACH,MAAM,qBAAqB,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC5F,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YAErD,mBAAmB;YACnB,MAAM,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,GAAG,MAAM,iBAAiB,CAAC,yBAAyB,CAAC;gBAClG,MAAM,EAAe,KAAK;gBAC1B,kBAAkB,EAAG,MAAM,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC;aACpE,CAAC,CAAC;YACH,MAAM,uBAAuB,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAChG,MAAM,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YAEvD,gFAAgF;YAChF,MAAM,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,GAAG,MAAM,iBAAiB,CAAC,yBAAyB,CAAC;gBAClG,MAAM,EAAe,KAAK;gBAC1B,kBAAkB,EAAG,MAAM,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC;aACpE,CAAC,CAAC;YACH,MAAM,uBAAuB,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAChG,MAAM,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACzD,CAAC,CAAA,CAAC,CAAC;QAEH,EAAE,CAAC,gIAAgI,EAAE,GAAS,EAAE;YAC9I,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,CAAC;YAE9C,iBAAiB;YACjB,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,iBAAiB,CAAC,wBAAwB,CAAC;gBAC5E,MAAM,EAAO,KAAK;gBAClB,SAAS,EAAI,KAAK,CAAC,GAAG;gBACtB,UAAU,EAAG,KAAK,CAAC,GAAG;aACvB,CAAC,CAAC;YACH,MAAM,qBAAqB,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC5F,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YAErD,yCAAyC;YACzC,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACnD,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,GAAG,MAAM,iBAAiB,CAAC,yBAAyB,CAAC;gBACvF,MAAM,EAAe,KAAK;gBAC1B,kBAAkB,EAAG,MAAM,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC;gBACnE,WAAW,EAAU,eAAe;aACrC,CAAC,CAAC;YACH,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,GAAG,MAAM,iBAAiB,CAAC,yBAAyB,CAAC;gBACvF,MAAM,EAAe,KAAK;gBAC1B,kBAAkB,EAAG,MAAM,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC;gBACnE,WAAW,EAAU,eAAe;aACrC,CAAC,CAAC;YAEH,8BAA8B;YAC9B,IAAI,6BAAgD,CAAC;YACrD,IAAI,4BAA+C,CAAC;YACpD,IAAI,CAAA,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAG,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA,EAAE,CAAC;gBAClF,6BAA6B,GAAG,OAAO,CAAC;gBACxC,4BAA4B,GAAG,OAAO,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,6BAA6B,GAAG,OAAO,CAAC;gBACxC,4BAA4B,GAAG,OAAO,CAAC;YACzC,CAAC;YAED,gDAAgD;YAChD,MAAM,uBAAuB,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,4BAA4B,CAAC,OAAO,CAAC,CAAC;YAC1G,MAAM,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YAEvD,gFAAgF;YAChF,MAAM,uBAAuB,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,6BAA6B,CAAC,OAAO,CAAC,CAAC;YAC3G,MAAM,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACzD,CAAC,CAAA,CAAC,CAAC;QAEH,EAAE,CAAC,sEAAsE,EAAE,GAAS,EAAE;YACpF,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,CAAC;YAE9C,iBAAiB;YACjB,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,iBAAiB,CAAC,wBAAwB,CAAC;gBAC5E,MAAM,EAAO,KAAK;gBAClB,SAAS,EAAI,KAAK,CAAC,GAAG;gBACtB,UAAU,EAAG,KAAK,CAAC,GAAG;aACvB,CAAC,CAAC;YACH,MAAM,qBAAqB,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC5F,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YAErD,4EAA4E;YAC5E,MAAM,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,GAAG,MAAM,iBAAiB,CAAC,yBAAyB,CAAC;gBAClG,MAAM,EAAe,KAAK;gBAC1B,kBAAkB,EAAG,MAAM,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC;aACpE,CAAC,CAAC;YAEH,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YAE1B,uEAAuE;YACvE,MAAM,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,GAAG,MAAM,iBAAiB,CAAC,yBAAyB,CAAC;gBAClG,MAAM,EAAe,KAAK;gBAC1B,kBAAkB,EAAG,MAAM,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC;aACpE,CAAC,CAAC;YACH,MAAM,uBAAuB,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAChG,MAAM,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YAEvD,iCAAiC;YACjC,MAAM,uBAAuB,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAChG,MAAM,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACzD,CAAC,CAAA,CAAC,CAAC;QAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;YACzB,EAAE,CAAC,wCAAwC,EAAE,GAAS,EAAE;gBACtD,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,CAAC;gBAE9C,mCAAmC;gBACnC,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,iBAAiB,CAAC,wBAAwB,CAAC;oBAC5E,MAAM,EAAO,KAAK;oBAClB,SAAS,EAAI,KAAK,CAAC,GAAG;oBACtB,UAAU,EAAG,KAAK,CAAC,GAAG;iBACvB,CAAC,CAAC;gBACH,MAAM,qBAAqB,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBAC5F,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACrD,IAAI,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACjD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAElC,0CAA0C;gBAC1C,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,iBAAiB,CAAC,yBAAyB,CAAC;oBAC9E,MAAM,EAAe,KAAK;oBAC1B,kBAAkB,EAAG,MAAM,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC;iBACpE,CAAC,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;gBAC7E,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAExC,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC7C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAElC,wCAAwC;gBACxC,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;gBACnE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACpD,CAAC,CAAA,CAAC,CAAC;YAEH,EAAE,CAAC,wGAAwG,EAAE,GAAS,EAAE;gBACtH,kGAAkG;gBAClG,oGAAoG;gBACpG,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,CAAC;gBAE9C,mCAAmC;gBACnC,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,iBAAiB,CAAC,wBAAwB,CAAC;oBAC5E,MAAM,EAAO,KAAK;oBAClB,SAAS,EAAI,KAAK,CAAC,GAAG;oBACtB,UAAU,EAAG,KAAK,CAAC,GAAG;iBACvB,CAAC,CAAC;gBACH,MAAM,qBAAqB,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBAC5F,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACrD,IAAI,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACjD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAElC,4EAA4E;gBAC5E,MAAM,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,GAAG,MAAM,iBAAiB,CAAC,yBAAyB,CAAC;oBAClG,MAAM,EAAe,KAAK;oBAC1B,kBAAkB,EAAG,MAAM,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC;iBACpE,CAAC,CAAC;gBAEH,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAErB,uEAAuE;gBACvE,MAAM,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,GAAG,MAAM,iBAAiB,CAAC,yBAAyB,CAAC;oBAClG,MAAM,EAAe,KAAK;oBAC1B,kBAAkB,EAAG,MAAM,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC;iBACpE,CAAC,CAAC;gBACH,MAAM,uBAAuB,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBAChG,MAAM,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBAEvD,mCAAmC;gBACnC,MAAM,qBAAqB,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBAC/E,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC7C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAClC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;gBAE7D,iCAAiC;gBACjC,MAAM,uBAAuB,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBAChG,MAAM,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBAEvD,yGAAyG;gBACzG,MAAM,qBAAqB,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBAC/E,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC7C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAClC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAC/D,CAAC,CAAA,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,254 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import chaiAsPromised from 'chai-as-promised';
11
+ import sinon from 'sinon';
12
+ import chai, { expect } from 'chai';
13
+ import dexProtocolDefinition from '../vectors/protocol-definitions/dex.json' with { type: 'json' };
14
+ import minimalProtocolDefinition from '../vectors/protocol-definitions/minimal.json' with { type: 'json' };
15
+ import { DidKeyResolver } from '../../src/did/did-key-resolver.js';
16
+ import { GeneralJwsBuilder } from '../../src/jose/jws/general/builder.js';
17
+ import { lexicographicalCompare } from '../../src/utils/string.js';
18
+ import { Message } from '../../src/core/message.js';
19
+ import { TestDataGenerator } from '../utils/test-data-generator.js';
20
+ import { TestStores } from '../test-stores.js';
21
+ import { TestStubGenerator } from '../utils/test-stub-generator.js';
22
+ import { Time } from '../../src/utils/time.js';
23
+ import { DidResolver, Dwn, DwnErrorCode, Encoder, Jws } from '../../src/index.js';
24
+ chai.use(chaiAsPromised);
25
+ export function testProtocolsConfigureHandler() {
26
+ describe('ProtocolsConfigureHandler.handle()', () => {
27
+ if (process.env.TESTSOFF === 'true') {
28
+ return;
29
+ }
30
+ if (process.env.TESTSOFF === 'true') {
31
+ return;
32
+ }
33
+ let didResolver;
34
+ let messageStore;
35
+ let dataStore;
36
+ let eventLog;
37
+ let dwn;
38
+ describe('functional tests', () => {
39
+ // important to follow the `before` and `after` pattern to initialize and clean the stores in tests
40
+ // so that different test suites can reuse the same backend store for testing
41
+ before(() => __awaiter(this, void 0, void 0, function* () {
42
+ didResolver = new DidResolver([new DidKeyResolver()]);
43
+ const stores = TestStores.get();
44
+ messageStore = stores.messageStore;
45
+ dataStore = stores.dataStore;
46
+ eventLog = stores.eventLog;
47
+ dwn = yield Dwn.create({ didResolver, messageStore, dataStore, eventLog });
48
+ }));
49
+ beforeEach(() => __awaiter(this, void 0, void 0, function* () {
50
+ sinon.restore(); // wipe all previous stubs/spies/mocks/fakes
51
+ // clean up before each test rather than after so that a test does not depend on other tests to do the clean up
52
+ yield messageStore.clear();
53
+ yield dataStore.clear();
54
+ yield eventLog.clear();
55
+ }));
56
+ after(() => __awaiter(this, void 0, void 0, function* () {
57
+ yield dwn.close();
58
+ }));
59
+ it('should allow a protocol definition with schema or dataFormat omitted', () => __awaiter(this, void 0, void 0, function* () {
60
+ const alice = yield DidKeyResolver.generate();
61
+ const protocolDefinition = minimalProtocolDefinition;
62
+ const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
63
+ author: alice,
64
+ protocolDefinition,
65
+ });
66
+ const reply = yield dwn.processMessage(alice.did, protocolsConfig.message);
67
+ expect(reply.status.code).to.equal(202);
68
+ }));
69
+ it('should return 400 if more than 1 signature is provided in `authorization`', () => __awaiter(this, void 0, void 0, function* () {
70
+ const { author, message, protocolsConfigure } = yield TestDataGenerator.generateProtocolsConfigure();
71
+ const tenant = author.did;
72
+ // intentionally create more than one signature, which is not allowed
73
+ const extraRandomPersona = yield TestDataGenerator.generatePersona();
74
+ const signer1 = Jws.createSigner(author);
75
+ const signer2 = Jws.createSigner(extraRandomPersona);
76
+ const signaturePayloadBytes = Encoder.objectToBytes(protocolsConfigure.signaturePayload);
77
+ const jwsBuilder = yield GeneralJwsBuilder.create(signaturePayloadBytes, [signer1, signer2]);
78
+ message.authorization = { signature: jwsBuilder.getJws() };
79
+ TestStubGenerator.stubDidResolver(didResolver, [author]);
80
+ const reply = yield dwn.processMessage(tenant, message);
81
+ expect(reply.status.code).to.equal(400);
82
+ expect(reply.status.detail).to.contain('expected no more than 1 signature');
83
+ }));
84
+ it('should return 401 if auth fails', () => __awaiter(this, void 0, void 0, function* () {
85
+ const alice = yield DidKeyResolver.generate();
86
+ alice.keyId = 'wrongValue'; // to fail authentication
87
+ const { message } = yield TestDataGenerator.generateProtocolsConfigure({ author: alice });
88
+ const reply = yield dwn.processMessage(alice.did, message);
89
+ expect(reply.status.code).to.equal(401);
90
+ expect(reply.status.detail).to.contain('not a valid DID');
91
+ }));
92
+ it('should be able to overwrite existing protocol if timestamp is newer', () => __awaiter(this, void 0, void 0, function* () {
93
+ var _a;
94
+ const alice = yield DidKeyResolver.generate();
95
+ const protocolDefinition = minimalProtocolDefinition;
96
+ const oldProtocolsConfigure = yield TestDataGenerator.generateProtocolsConfigure({
97
+ author: alice,
98
+ protocolDefinition,
99
+ });
100
+ yield Time.minimalSleep();
101
+ const middleProtocolsConfigure = yield TestDataGenerator.generateProtocolsConfigure({
102
+ author: alice,
103
+ protocolDefinition,
104
+ });
105
+ // first ProtocolsConfigure
106
+ const reply1 = yield dwn.processMessage(alice.did, middleProtocolsConfigure.message);
107
+ expect(reply1.status.code).to.equal(202);
108
+ // older messages will not overwrite the existing
109
+ const reply2 = yield dwn.processMessage(alice.did, oldProtocolsConfigure.message);
110
+ expect(reply2.status.code).to.equal(409);
111
+ // newer message can overwrite the existing message
112
+ const newProtocolsConfigure = yield TestDataGenerator.generateProtocolsConfigure({
113
+ author: alice,
114
+ protocolDefinition,
115
+ });
116
+ const reply3 = yield dwn.processMessage(alice.did, newProtocolsConfigure.message);
117
+ expect(reply3.status.code).to.equal(202);
118
+ // only the newest protocol should remain
119
+ const queryMessageData = yield TestDataGenerator.generateProtocolsQuery({
120
+ author: alice,
121
+ filter: { protocol: protocolDefinition.protocol }
122
+ });
123
+ const queryReply = yield dwn.processMessage(alice.did, queryMessageData.message);
124
+ expect(queryReply.status.code).to.equal(200);
125
+ expect((_a = queryReply.entries) === null || _a === void 0 ? void 0 : _a.length).to.equal(1);
126
+ }));
127
+ it('should only be able to overwrite existing protocol if new protocol is lexicographically larger and timestamps are identical', () => __awaiter(this, void 0, void 0, function* () {
128
+ var _a;
129
+ const alice = yield DidKeyResolver.generate();
130
+ // Alter each protocol slightly to create lexicographic difference between them
131
+ const protocolDefinition1 = Object.assign(Object.assign({}, minimalProtocolDefinition), { types: Object.assign(Object.assign({}, minimalProtocolDefinition.types), { foo1: { dataFormats: ['bar1'] } }) });
132
+ const protocolDefinition2 = Object.assign(Object.assign({}, minimalProtocolDefinition), { types: Object.assign(Object.assign({}, minimalProtocolDefinition.types), { foo2: { dataFormats: ['bar2'] } }) });
133
+ const protocolDefinition3 = Object.assign(Object.assign({}, minimalProtocolDefinition), { types: Object.assign(Object.assign({}, minimalProtocolDefinition.types), { foo3: { dataFormats: ['bar3'] } }) });
134
+ // Create three `ProtocolsConfigure` with identical timestamp
135
+ const messageData1 = yield TestDataGenerator.generateProtocolsConfigure({
136
+ author: alice,
137
+ protocolDefinition: protocolDefinition1
138
+ });
139
+ const messageData2 = yield TestDataGenerator.generateProtocolsConfigure({
140
+ author: alice,
141
+ protocolDefinition: protocolDefinition2,
142
+ messageTimestamp: messageData1.message.descriptor.messageTimestamp
143
+ });
144
+ const messageData3 = yield TestDataGenerator.generateProtocolsConfigure({
145
+ author: alice,
146
+ protocolDefinition: protocolDefinition3,
147
+ messageTimestamp: messageData1.message.descriptor.messageTimestamp
148
+ });
149
+ const messageDataWithCid = [];
150
+ for (const messageData of [messageData1, messageData2, messageData3]) {
151
+ const cid = yield Message.getCid(messageData.message);
152
+ messageDataWithCid.push(Object.assign({ cid }, messageData));
153
+ }
154
+ // sort the message in lexicographic order
155
+ const [lowestProtocolsConfigure, middleProtocolsConfigure, highestProtocolsConfigure] = messageDataWithCid.sort((messageDataA, messageDataB) => { return lexicographicalCompare(messageDataA.cid, messageDataB.cid); });
156
+ // write the protocol with the middle lexicographic value
157
+ const reply1 = yield dwn.processMessage(alice.did, middleProtocolsConfigure.message);
158
+ expect(reply1.status.code).to.equal(202);
159
+ // test that the protocol with the smallest lexicographic value cannot be written
160
+ const reply2 = yield dwn.processMessage(alice.did, lowestProtocolsConfigure.message);
161
+ expect(reply2.status.code).to.equal(409);
162
+ // test that the protocol with the largest lexicographic value can be written
163
+ const reply3 = yield dwn.processMessage(alice.did, highestProtocolsConfigure.message);
164
+ expect(reply3.status.code).to.equal(202);
165
+ // test that lower lexicographic protocol message is removed from DB and only the newer protocol message remains
166
+ const queryMessageData = yield TestDataGenerator.generateProtocolsQuery({
167
+ author: alice,
168
+ filter: { protocol: protocolDefinition1.protocol }
169
+ });
170
+ const queryReply = yield dwn.processMessage(alice.did, queryMessageData.message);
171
+ expect(queryReply.status.code).to.equal(200);
172
+ expect((_a = queryReply.entries) === null || _a === void 0 ? void 0 : _a.length).to.equal(1);
173
+ }));
174
+ it('should return 400 if protocol is not normalized', () => __awaiter(this, void 0, void 0, function* () {
175
+ const alice = yield DidKeyResolver.generate();
176
+ // query for non-normalized protocol
177
+ const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
178
+ author: alice,
179
+ protocolDefinition: minimalProtocolDefinition
180
+ });
181
+ // overwrite protocol because #create auto-normalizes protocol
182
+ protocolsConfig.message.descriptor.definition.protocol = 'example.com/';
183
+ // Re-create auth because we altered the descriptor after signing
184
+ protocolsConfig.message.authorization = yield Message.createAuthorization({
185
+ descriptor: protocolsConfig.message.descriptor,
186
+ signer: Jws.createSigner(alice)
187
+ });
188
+ // Send records write message
189
+ const reply = yield dwn.processMessage(alice.did, protocolsConfig.message);
190
+ expect(reply.status.code).to.equal(400);
191
+ expect(reply.status.detail).to.contain(DwnErrorCode.UrlProtocolNotNormalized);
192
+ }));
193
+ it('should return 400 if schema is not normalized', () => __awaiter(this, void 0, void 0, function* () {
194
+ const alice = yield DidKeyResolver.generate();
195
+ const protocolDefinition = dexProtocolDefinition;
196
+ const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
197
+ author: alice,
198
+ protocolDefinition,
199
+ });
200
+ // overwrite schema because #create auto-normalizes schema
201
+ protocolsConfig.message.descriptor.definition.types.ask.schema = 'ask';
202
+ // Re-create auth because we altered the descriptor after signing
203
+ protocolsConfig.message.authorization = yield Message.createAuthorization({
204
+ descriptor: protocolsConfig.message.descriptor,
205
+ signer: Jws.createSigner(alice)
206
+ });
207
+ // Send records write message
208
+ const reply = yield dwn.processMessage(alice.did, protocolsConfig.message);
209
+ expect(reply.status.code).to.equal(400);
210
+ expect(reply.status.detail).to.contain(DwnErrorCode.UrlSchemaNotNormalized);
211
+ }));
212
+ it('rejects non-tenant non-granted ProtocolsConfigures with 401', () => __awaiter(this, void 0, void 0, function* () {
213
+ // Bob tries to ProtocolsConfigure to Alice's DWN without a PermissionsGrant
214
+ const alice = yield DidKeyResolver.generate();
215
+ const bob = yield DidKeyResolver.generate();
216
+ const protocolDefinition = dexProtocolDefinition;
217
+ const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
218
+ author: bob,
219
+ protocolDefinition,
220
+ });
221
+ const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
222
+ expect(protocolsConfigureReply.status.code).to.equal(401);
223
+ expect(protocolsConfigureReply.status.detail).to.contain('message failed authorization');
224
+ }));
225
+ describe('event log', () => {
226
+ it('should add event for ProtocolsConfigure', () => __awaiter(this, void 0, void 0, function* () {
227
+ const alice = yield DidKeyResolver.generate();
228
+ const { message } = yield TestDataGenerator.generateProtocolsConfigure({ author: alice });
229
+ const reply = yield dwn.processMessage(alice.did, message);
230
+ expect(reply.status.code).to.equal(202);
231
+ const events = yield eventLog.getEvents(alice.did);
232
+ expect(events.length).to.equal(1);
233
+ const messageCid = yield Message.getCid(message);
234
+ expect(events[0].messageCid).to.equal(messageCid);
235
+ }));
236
+ it('should delete older ProtocolsConfigure events when one is overwritten', () => __awaiter(this, void 0, void 0, function* () {
237
+ const alice = yield DidKeyResolver.generate();
238
+ const oldestWrite = yield TestDataGenerator.generateProtocolsConfigure({ author: alice, protocolDefinition: minimalProtocolDefinition });
239
+ yield Time.minimalSleep();
240
+ const newestWrite = yield TestDataGenerator.generateProtocolsConfigure({ author: alice, protocolDefinition: minimalProtocolDefinition });
241
+ let reply = yield dwn.processMessage(alice.did, oldestWrite.message);
242
+ expect(reply.status.code).to.equal(202);
243
+ reply = yield dwn.processMessage(alice.did, newestWrite.message);
244
+ expect(reply.status.code).to.equal(202);
245
+ const events = yield eventLog.getEvents(alice.did);
246
+ expect(events.length).to.equal(1);
247
+ const newestMessageCid = yield Message.getCid(newestWrite.message);
248
+ expect(events[0].messageCid).to.equal(newestMessageCid);
249
+ }));
250
+ });
251
+ });
252
+ });
253
+ }
254
+ //# sourceMappingURL=protocols-configure.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocols-configure.spec.js","sourceRoot":"","sources":["../../../../tests/handlers/protocols-configure.spec.ts"],"names":[],"mappings":"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"}