@enbox/agent 0.0.1

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 (348) hide show
  1. package/dist/browser.js +2215 -0
  2. package/dist/browser.js.map +7 -0
  3. package/dist/browser.mjs +2215 -0
  4. package/dist/browser.mjs.map +7 -0
  5. package/dist/cjs/index.js +8530 -0
  6. package/dist/cjs/index.js.map +7 -0
  7. package/dist/cjs/package.json +1 -0
  8. package/dist/esm/agent-did-resolver-cache.js +87 -0
  9. package/dist/esm/agent-did-resolver-cache.js.map +1 -0
  10. package/dist/esm/bearer-identity.js +41 -0
  11. package/dist/esm/bearer-identity.js.map +1 -0
  12. package/dist/esm/connect.js +191 -0
  13. package/dist/esm/connect.js.map +1 -0
  14. package/dist/esm/crypto-api.js +346 -0
  15. package/dist/esm/crypto-api.js.map +1 -0
  16. package/dist/esm/did-api.js +278 -0
  17. package/dist/esm/did-api.js.map +1 -0
  18. package/dist/esm/dwn-api.js +336 -0
  19. package/dist/esm/dwn-api.js.map +1 -0
  20. package/dist/esm/dwn-registrar.js +120 -0
  21. package/dist/esm/dwn-registrar.js.map +1 -0
  22. package/dist/esm/hd-identity-vault.js +729 -0
  23. package/dist/esm/hd-identity-vault.js.map +1 -0
  24. package/dist/esm/identity-api.js +262 -0
  25. package/dist/esm/identity-api.js.map +1 -0
  26. package/dist/esm/index.js +23 -0
  27. package/dist/esm/index.js.map +1 -0
  28. package/dist/esm/local-key-manager.js +498 -0
  29. package/dist/esm/local-key-manager.js.map +1 -0
  30. package/dist/esm/oidc.js +507 -0
  31. package/dist/esm/oidc.js.map +1 -0
  32. package/dist/esm/permissions-api.js +322 -0
  33. package/dist/esm/permissions-api.js.map +1 -0
  34. package/dist/esm/prototyping/clients/dwn-rpc-types.js +2 -0
  35. package/dist/esm/prototyping/clients/dwn-rpc-types.js.map +1 -0
  36. package/dist/esm/prototyping/clients/dwn-server-info-cache-memory.js +74 -0
  37. package/dist/esm/prototyping/clients/dwn-server-info-cache-memory.js.map +1 -0
  38. package/dist/esm/prototyping/clients/http-dwn-rpc-client.js +105 -0
  39. package/dist/esm/prototyping/clients/http-dwn-rpc-client.js.map +1 -0
  40. package/dist/esm/prototyping/clients/json-rpc-socket.js +150 -0
  41. package/dist/esm/prototyping/clients/json-rpc-socket.js.map +1 -0
  42. package/dist/esm/prototyping/clients/json-rpc.js +58 -0
  43. package/dist/esm/prototyping/clients/json-rpc.js.map +1 -0
  44. package/dist/esm/prototyping/clients/server-info-types.js +2 -0
  45. package/dist/esm/prototyping/clients/server-info-types.js.map +1 -0
  46. package/dist/esm/prototyping/clients/web-socket-clients.js +90 -0
  47. package/dist/esm/prototyping/clients/web-socket-clients.js.map +1 -0
  48. package/dist/esm/prototyping/common/object.js +14 -0
  49. package/dist/esm/prototyping/common/object.js.map +1 -0
  50. package/dist/esm/prototyping/common/type-utils.js +2 -0
  51. package/dist/esm/prototyping/common/type-utils.js.map +1 -0
  52. package/dist/esm/prototyping/crypto/algorithms/aes-gcm.js +147 -0
  53. package/dist/esm/prototyping/crypto/algorithms/aes-gcm.js.map +1 -0
  54. package/dist/esm/prototyping/crypto/algorithms/aes-kw.js +137 -0
  55. package/dist/esm/prototyping/crypto/algorithms/aes-kw.js.map +1 -0
  56. package/dist/esm/prototyping/crypto/algorithms/ecdsa.js +307 -0
  57. package/dist/esm/prototyping/crypto/algorithms/ecdsa.js.map +1 -0
  58. package/dist/esm/prototyping/crypto/algorithms/eddsa.js +264 -0
  59. package/dist/esm/prototyping/crypto/algorithms/eddsa.js.map +1 -0
  60. package/dist/esm/prototyping/crypto/algorithms/hkdf.js +39 -0
  61. package/dist/esm/prototyping/crypto/algorithms/hkdf.js.map +1 -0
  62. package/dist/esm/prototyping/crypto/algorithms/pbkdf2.js +41 -0
  63. package/dist/esm/prototyping/crypto/algorithms/pbkdf2.js.map +1 -0
  64. package/dist/esm/prototyping/crypto/crypto-error.js +41 -0
  65. package/dist/esm/prototyping/crypto/crypto-error.js.map +1 -0
  66. package/dist/esm/prototyping/crypto/dsa.js +236 -0
  67. package/dist/esm/prototyping/crypto/dsa.js.map +1 -0
  68. package/dist/esm/prototyping/crypto/jose/jwe-compact.js +130 -0
  69. package/dist/esm/prototyping/crypto/jose/jwe-compact.js.map +1 -0
  70. package/dist/esm/prototyping/crypto/jose/jwe-flattened.js +294 -0
  71. package/dist/esm/prototyping/crypto/jose/jwe-flattened.js.map +1 -0
  72. package/dist/esm/prototyping/crypto/jose/jwe.js +308 -0
  73. package/dist/esm/prototyping/crypto/jose/jwe.js.map +1 -0
  74. package/dist/esm/prototyping/crypto/primitives/aes-gcm.js +352 -0
  75. package/dist/esm/prototyping/crypto/primitives/aes-gcm.js.map +1 -0
  76. package/dist/esm/prototyping/crypto/primitives/aes-kw.js +247 -0
  77. package/dist/esm/prototyping/crypto/primitives/aes-kw.js.map +1 -0
  78. package/dist/esm/prototyping/crypto/primitives/hkdf.js +80 -0
  79. package/dist/esm/prototyping/crypto/primitives/hkdf.js.map +1 -0
  80. package/dist/esm/prototyping/crypto/primitives/pbkdf2.js +85 -0
  81. package/dist/esm/prototyping/crypto/primitives/pbkdf2.js.map +1 -0
  82. package/dist/esm/prototyping/crypto/types/cipher.js +2 -0
  83. package/dist/esm/prototyping/crypto/types/cipher.js.map +1 -0
  84. package/dist/esm/prototyping/crypto/types/crypto-api.js +2 -0
  85. package/dist/esm/prototyping/crypto/types/crypto-api.js.map +1 -0
  86. package/dist/esm/prototyping/crypto/types/key-converter.js +2 -0
  87. package/dist/esm/prototyping/crypto/types/key-converter.js.map +1 -0
  88. package/dist/esm/prototyping/crypto/types/key-deriver.js +2 -0
  89. package/dist/esm/prototyping/crypto/types/key-deriver.js.map +1 -0
  90. package/dist/esm/prototyping/crypto/types/key-io.js +2 -0
  91. package/dist/esm/prototyping/crypto/types/key-io.js.map +1 -0
  92. package/dist/esm/prototyping/crypto/types/key-manager.js +2 -0
  93. package/dist/esm/prototyping/crypto/types/key-manager.js.map +1 -0
  94. package/dist/esm/prototyping/crypto/types/key-wrapper.js +2 -0
  95. package/dist/esm/prototyping/crypto/types/key-wrapper.js.map +1 -0
  96. package/dist/esm/prototyping/crypto/types/params-direct.js +2 -0
  97. package/dist/esm/prototyping/crypto/types/params-direct.js.map +1 -0
  98. package/dist/esm/prototyping/crypto/types/params-kms.js +2 -0
  99. package/dist/esm/prototyping/crypto/types/params-kms.js.map +1 -0
  100. package/dist/esm/prototyping/crypto/utils.js +19 -0
  101. package/dist/esm/prototyping/crypto/utils.js.map +1 -0
  102. package/dist/esm/prototyping/dids/resolver-cache-memory.js +77 -0
  103. package/dist/esm/prototyping/dids/resolver-cache-memory.js.map +1 -0
  104. package/dist/esm/prototyping/dids/utils.js +9 -0
  105. package/dist/esm/prototyping/dids/utils.js.map +1 -0
  106. package/dist/esm/rpc-client.js +123 -0
  107. package/dist/esm/rpc-client.js.map +1 -0
  108. package/dist/esm/store-data-protocols.js +38 -0
  109. package/dist/esm/store-data-protocols.js.map +1 -0
  110. package/dist/esm/store-data.js +320 -0
  111. package/dist/esm/store-data.js.map +1 -0
  112. package/dist/esm/store-did.js +136 -0
  113. package/dist/esm/store-did.js.map +1 -0
  114. package/dist/esm/store-identity.js +140 -0
  115. package/dist/esm/store-identity.js.map +1 -0
  116. package/dist/esm/store-key.js +136 -0
  117. package/dist/esm/store-key.js.map +1 -0
  118. package/dist/esm/sync-api.js +61 -0
  119. package/dist/esm/sync-api.js.map +1 -0
  120. package/dist/esm/sync-engine-level.js +618 -0
  121. package/dist/esm/sync-engine-level.js.map +1 -0
  122. package/dist/esm/test-harness.js +239 -0
  123. package/dist/esm/test-harness.js.map +1 -0
  124. package/dist/esm/types/agent.js +2 -0
  125. package/dist/esm/types/agent.js.map +1 -0
  126. package/dist/esm/types/dwn.js +31 -0
  127. package/dist/esm/types/dwn.js.map +1 -0
  128. package/dist/esm/types/identity-vault.js +2 -0
  129. package/dist/esm/types/identity-vault.js.map +1 -0
  130. package/dist/esm/types/identity.js +2 -0
  131. package/dist/esm/types/identity.js.map +1 -0
  132. package/dist/esm/types/key-manager.js +2 -0
  133. package/dist/esm/types/key-manager.js.map +1 -0
  134. package/dist/esm/types/permissions.js +2 -0
  135. package/dist/esm/types/permissions.js.map +1 -0
  136. package/dist/esm/types/sync.js +2 -0
  137. package/dist/esm/types/sync.js.map +1 -0
  138. package/dist/esm/types/vc.js +5 -0
  139. package/dist/esm/types/vc.js.map +1 -0
  140. package/dist/esm/utils-internal.js +147 -0
  141. package/dist/esm/utils-internal.js.map +1 -0
  142. package/dist/esm/utils.js +161 -0
  143. package/dist/esm/utils.js.map +1 -0
  144. package/dist/types/agent-did-resolver-cache.d.ts +30 -0
  145. package/dist/types/agent-did-resolver-cache.d.ts.map +1 -0
  146. package/dist/types/bearer-identity.d.ts +31 -0
  147. package/dist/types/bearer-identity.d.ts.map +1 -0
  148. package/dist/types/connect.d.ts +88 -0
  149. package/dist/types/connect.d.ts.map +1 -0
  150. package/dist/types/crypto-api.d.ts +286 -0
  151. package/dist/types/crypto-api.d.ts.map +1 -0
  152. package/dist/types/did-api.d.ts +119 -0
  153. package/dist/types/did-api.d.ts.map +1 -0
  154. package/dist/types/dwn-api.d.ts +66 -0
  155. package/dist/types/dwn-api.d.ts.map +1 -0
  156. package/dist/types/dwn-registrar.d.ts +29 -0
  157. package/dist/types/dwn-registrar.d.ts.map +1 -0
  158. package/dist/types/hd-identity-vault.d.ts +306 -0
  159. package/dist/types/hd-identity-vault.d.ts.map +1 -0
  160. package/dist/types/identity-api.d.ts +107 -0
  161. package/dist/types/identity-api.d.ts.map +1 -0
  162. package/dist/types/index.d.ts +30 -0
  163. package/dist/types/index.d.ts.map +1 -0
  164. package/dist/types/local-key-manager.d.ts +311 -0
  165. package/dist/types/local-key-manager.d.ts.map +1 -0
  166. package/dist/types/oidc.d.ts +247 -0
  167. package/dist/types/oidc.d.ts.map +1 -0
  168. package/dist/types/permissions-api.d.ts +35 -0
  169. package/dist/types/permissions-api.d.ts.map +1 -0
  170. package/dist/types/prototyping/clients/dwn-rpc-types.d.ts +45 -0
  171. package/dist/types/prototyping/clients/dwn-rpc-types.d.ts.map +1 -0
  172. package/dist/types/prototyping/clients/dwn-server-info-cache-memory.d.ts +57 -0
  173. package/dist/types/prototyping/clients/dwn-server-info-cache-memory.d.ts.map +1 -0
  174. package/dist/types/prototyping/clients/http-dwn-rpc-client.d.ts +13 -0
  175. package/dist/types/prototyping/clients/http-dwn-rpc-client.d.ts.map +1 -0
  176. package/dist/types/prototyping/clients/json-rpc-socket.d.ts +43 -0
  177. package/dist/types/prototyping/clients/json-rpc-socket.d.ts.map +1 -0
  178. package/dist/types/prototyping/clients/json-rpc.d.ts +49 -0
  179. package/dist/types/prototyping/clients/json-rpc.d.ts.map +1 -0
  180. package/dist/types/prototyping/clients/server-info-types.d.ts +20 -0
  181. package/dist/types/prototyping/clients/server-info-types.d.ts.map +1 -0
  182. package/dist/types/prototyping/clients/web-socket-clients.d.ts +10 -0
  183. package/dist/types/prototyping/clients/web-socket-clients.d.ts.map +1 -0
  184. package/dist/types/prototyping/common/object.d.ts +2 -0
  185. package/dist/types/prototyping/common/object.d.ts.map +1 -0
  186. package/dist/types/prototyping/common/type-utils.d.ts +7 -0
  187. package/dist/types/prototyping/common/type-utils.d.ts.map +1 -0
  188. package/dist/types/prototyping/crypto/algorithms/aes-gcm.d.ts +151 -0
  189. package/dist/types/prototyping/crypto/algorithms/aes-gcm.d.ts.map +1 -0
  190. package/dist/types/prototyping/crypto/algorithms/aes-kw.d.ts +109 -0
  191. package/dist/types/prototyping/crypto/algorithms/aes-kw.d.ts.map +1 -0
  192. package/dist/types/prototyping/crypto/algorithms/ecdsa.d.ts +160 -0
  193. package/dist/types/prototyping/crypto/algorithms/ecdsa.d.ts.map +1 -0
  194. package/dist/types/prototyping/crypto/algorithms/eddsa.d.ts +157 -0
  195. package/dist/types/prototyping/crypto/algorithms/eddsa.d.ts.map +1 -0
  196. package/dist/types/prototyping/crypto/algorithms/hkdf.d.ts +21 -0
  197. package/dist/types/prototyping/crypto/algorithms/hkdf.d.ts.map +1 -0
  198. package/dist/types/prototyping/crypto/algorithms/pbkdf2.d.ts +21 -0
  199. package/dist/types/prototyping/crypto/algorithms/pbkdf2.d.ts.map +1 -0
  200. package/dist/types/prototyping/crypto/crypto-error.d.ts +29 -0
  201. package/dist/types/prototyping/crypto/crypto-error.d.ts.map +1 -0
  202. package/dist/types/prototyping/crypto/dsa.d.ts +169 -0
  203. package/dist/types/prototyping/crypto/dsa.d.ts.map +1 -0
  204. package/dist/types/prototyping/crypto/jose/jwe-compact.d.ts +135 -0
  205. package/dist/types/prototyping/crypto/jose/jwe-compact.d.ts.map +1 -0
  206. package/dist/types/prototyping/crypto/jose/jwe-flattened.d.ts +134 -0
  207. package/dist/types/prototyping/crypto/jose/jwe-flattened.d.ts.map +1 -0
  208. package/dist/types/prototyping/crypto/jose/jwe.d.ts +378 -0
  209. package/dist/types/prototyping/crypto/jose/jwe.d.ts.map +1 -0
  210. package/dist/types/prototyping/crypto/primitives/aes-gcm.d.ts +245 -0
  211. package/dist/types/prototyping/crypto/primitives/aes-gcm.d.ts.map +1 -0
  212. package/dist/types/prototyping/crypto/primitives/aes-kw.d.ts +103 -0
  213. package/dist/types/prototyping/crypto/primitives/aes-kw.d.ts.map +1 -0
  214. package/dist/types/prototyping/crypto/primitives/hkdf.d.ts +90 -0
  215. package/dist/types/prototyping/crypto/primitives/hkdf.d.ts.map +1 -0
  216. package/dist/types/prototyping/crypto/primitives/pbkdf2.d.ts +84 -0
  217. package/dist/types/prototyping/crypto/primitives/pbkdf2.d.ts.map +1 -0
  218. package/dist/types/prototyping/crypto/types/cipher.d.ts +14 -0
  219. package/dist/types/prototyping/crypto/types/cipher.d.ts.map +1 -0
  220. package/dist/types/prototyping/crypto/types/crypto-api.d.ts +35 -0
  221. package/dist/types/prototyping/crypto/types/crypto-api.d.ts.map +1 -0
  222. package/dist/types/prototyping/crypto/types/key-converter.d.ts +49 -0
  223. package/dist/types/prototyping/crypto/types/key-converter.d.ts.map +1 -0
  224. package/dist/types/prototyping/crypto/types/key-deriver.d.ts +50 -0
  225. package/dist/types/prototyping/crypto/types/key-deriver.d.ts.map +1 -0
  226. package/dist/types/prototyping/crypto/types/key-io.d.ts +49 -0
  227. package/dist/types/prototyping/crypto/types/key-io.d.ts.map +1 -0
  228. package/dist/types/prototyping/crypto/types/key-manager.d.ts +69 -0
  229. package/dist/types/prototyping/crypto/types/key-manager.d.ts.map +1 -0
  230. package/dist/types/prototyping/crypto/types/key-wrapper.d.ts +14 -0
  231. package/dist/types/prototyping/crypto/types/key-wrapper.d.ts.map +1 -0
  232. package/dist/types/prototyping/crypto/types/params-direct.d.ts +75 -0
  233. package/dist/types/prototyping/crypto/types/params-direct.d.ts.map +1 -0
  234. package/dist/types/prototyping/crypto/types/params-kms.d.ts +63 -0
  235. package/dist/types/prototyping/crypto/types/params-kms.d.ts.map +1 -0
  236. package/dist/types/prototyping/crypto/utils.d.ts +7 -0
  237. package/dist/types/prototyping/crypto/utils.d.ts.map +1 -0
  238. package/dist/types/prototyping/dids/resolver-cache-memory.d.ts +57 -0
  239. package/dist/types/prototyping/dids/resolver-cache-memory.d.ts.map +1 -0
  240. package/dist/types/prototyping/dids/utils.d.ts +3 -0
  241. package/dist/types/prototyping/dids/utils.d.ts.map +1 -0
  242. package/dist/types/rpc-client.d.ts +51 -0
  243. package/dist/types/rpc-client.d.ts.map +1 -0
  244. package/dist/types/store-data-protocols.d.ts +4 -0
  245. package/dist/types/store-data-protocols.d.ts.map +1 -0
  246. package/dist/types/store-data.d.ts +95 -0
  247. package/dist/types/store-data.d.ts.map +1 -0
  248. package/dist/types/store-did.d.ts +33 -0
  249. package/dist/types/store-did.d.ts.map +1 -0
  250. package/dist/types/store-identity.d.ts +34 -0
  251. package/dist/types/store-identity.d.ts.map +1 -0
  252. package/dist/types/store-key.d.ts +32 -0
  253. package/dist/types/store-key.d.ts.map +1 -0
  254. package/dist/types/sync-api.d.ts +41 -0
  255. package/dist/types/sync-api.d.ts.map +1 -0
  256. package/dist/types/sync-engine-level.d.ts +85 -0
  257. package/dist/types/sync-engine-level.d.ts.map +1 -0
  258. package/dist/types/test-harness.d.ts +69 -0
  259. package/dist/types/test-harness.d.ts.map +1 -0
  260. package/dist/types/types/agent.d.ts +172 -0
  261. package/dist/types/types/agent.d.ts.map +1 -0
  262. package/dist/types/types/dwn.d.ts +178 -0
  263. package/dist/types/types/dwn.d.ts.map +1 -0
  264. package/dist/types/types/identity-vault.d.ts +129 -0
  265. package/dist/types/types/identity-vault.d.ts.map +1 -0
  266. package/dist/types/types/identity.d.ts +16 -0
  267. package/dist/types/types/identity.d.ts.map +1 -0
  268. package/dist/types/types/key-manager.d.ts +9 -0
  269. package/dist/types/types/key-manager.d.ts.map +1 -0
  270. package/dist/types/types/permissions.d.ts +98 -0
  271. package/dist/types/types/permissions.d.ts.map +1 -0
  272. package/dist/types/types/sync.d.ts +66 -0
  273. package/dist/types/types/sync.d.ts.map +1 -0
  274. package/dist/types/types/vc.d.ts +7 -0
  275. package/dist/types/types/vc.d.ts.map +1 -0
  276. package/dist/types/utils-internal.d.ts +50 -0
  277. package/dist/types/utils-internal.d.ts.map +1 -0
  278. package/dist/types/utils.d.ts +37 -0
  279. package/dist/types/utils.d.ts.map +1 -0
  280. package/package.json +112 -0
  281. package/src/agent-did-resolver-cache.ts +95 -0
  282. package/src/bearer-identity.ts +42 -0
  283. package/src/connect.ts +296 -0
  284. package/src/crypto-api.ts +593 -0
  285. package/src/did-api.ts +429 -0
  286. package/src/dwn-api.ts +462 -0
  287. package/src/dwn-registrar.ts +127 -0
  288. package/src/hd-identity-vault.ts +853 -0
  289. package/src/identity-api.ts +324 -0
  290. package/src/index.ts +30 -0
  291. package/src/local-key-manager.ts +672 -0
  292. package/src/oidc.ts +857 -0
  293. package/src/permissions-api.ts +408 -0
  294. package/src/prototyping/clients/dwn-rpc-types.ts +55 -0
  295. package/src/prototyping/clients/dwn-server-info-cache-memory.ts +79 -0
  296. package/src/prototyping/clients/http-dwn-rpc-client.ts +110 -0
  297. package/src/prototyping/clients/json-rpc-socket.ts +169 -0
  298. package/src/prototyping/clients/json-rpc.ts +113 -0
  299. package/src/prototyping/clients/server-info-types.ts +21 -0
  300. package/src/prototyping/clients/web-socket-clients.ts +100 -0
  301. package/src/prototyping/common/object.ts +15 -0
  302. package/src/prototyping/common/type-utils.ts +6 -0
  303. package/src/prototyping/crypto/algorithms/aes-gcm.ts +211 -0
  304. package/src/prototyping/crypto/algorithms/aes-kw.ts +164 -0
  305. package/src/prototyping/crypto/algorithms/ecdsa.ts +365 -0
  306. package/src/prototyping/crypto/algorithms/eddsa.ts +310 -0
  307. package/src/prototyping/crypto/algorithms/hkdf.ts +40 -0
  308. package/src/prototyping/crypto/algorithms/pbkdf2.ts +44 -0
  309. package/src/prototyping/crypto/crypto-error.ts +45 -0
  310. package/src/prototyping/crypto/dsa.ts +367 -0
  311. package/src/prototyping/crypto/jose/jwe-compact.ts +225 -0
  312. package/src/prototyping/crypto/jose/jwe-flattened.ts +459 -0
  313. package/src/prototyping/crypto/jose/jwe.ts +653 -0
  314. package/src/prototyping/crypto/primitives/aes-gcm.ts +374 -0
  315. package/src/prototyping/crypto/primitives/aes-kw.ts +271 -0
  316. package/src/prototyping/crypto/primitives/hkdf.ts +121 -0
  317. package/src/prototyping/crypto/primitives/pbkdf2.ts +116 -0
  318. package/src/prototyping/crypto/types/cipher.ts +17 -0
  319. package/src/prototyping/crypto/types/crypto-api.ts +78 -0
  320. package/src/prototyping/crypto/types/key-converter.ts +53 -0
  321. package/src/prototyping/crypto/types/key-deriver.ts +56 -0
  322. package/src/prototyping/crypto/types/key-io.ts +51 -0
  323. package/src/prototyping/crypto/types/key-manager.ts +83 -0
  324. package/src/prototyping/crypto/types/key-wrapper.ts +17 -0
  325. package/src/prototyping/crypto/types/params-direct.ts +95 -0
  326. package/src/prototyping/crypto/types/params-kms.ts +76 -0
  327. package/src/prototyping/crypto/utils.ts +41 -0
  328. package/src/prototyping/dids/resolver-cache-memory.ts +83 -0
  329. package/src/prototyping/dids/utils.ts +10 -0
  330. package/src/rpc-client.ts +162 -0
  331. package/src/store-data-protocols.ts +40 -0
  332. package/src/store-data.ts +400 -0
  333. package/src/store-did.ts +105 -0
  334. package/src/store-identity.ts +109 -0
  335. package/src/store-key.ts +104 -0
  336. package/src/sync-api.ts +71 -0
  337. package/src/sync-engine-level.ts +714 -0
  338. package/src/test-harness.ts +330 -0
  339. package/src/types/agent.ts +195 -0
  340. package/src/types/dwn.ts +278 -0
  341. package/src/types/identity-vault.ts +137 -0
  342. package/src/types/identity.ts +18 -0
  343. package/src/types/key-manager.ts +15 -0
  344. package/src/types/permissions.ts +115 -0
  345. package/src/types/sync.ts +58 -0
  346. package/src/types/vc.ts +7 -0
  347. package/src/utils-internal.ts +157 -0
  348. package/src/utils.ts +181 -0
@@ -0,0 +1,459 @@
1
+ import type { Jwk, KeyIdentifier } from '@enbox/crypto';
2
+
3
+ import { Convert } from '@enbox/common';
4
+ import { LocalKeyManager, CryptoUtils } from '@enbox/crypto';
5
+
6
+ import type { CryptoApi } from '../types/crypto-api.js';
7
+ import type { KeyManager } from '../types/key-manager.js';
8
+ import type { JweDecryptOptions, JweEncryptOptions, JweHeaderParams } from './jwe.js';
9
+
10
+ import { isCipher } from '../utils.js';
11
+ import { AgentCryptoApi } from '../../../crypto-api.js';
12
+ import { JweKeyManagement, isValidJweHeader } from './jwe.js';
13
+ import { hasDuplicateProperties } from '../../common/object.js';
14
+ import { CryptoError, CryptoErrorCode } from '../crypto-error.js';
15
+
16
+ /**
17
+ * Parameters required for decrypting a flattened JWE.
18
+ *
19
+ * @typeParam TKeyManager - The Key Manager used to manage cryptographic keys.
20
+ * @typeParam TCrypto - The Crypto API used to perform cryptographic operations.
21
+ */
22
+ export interface FlattenedJweDecryptParams<TKeyManager, TCrypto> {
23
+ /** The flattened JWE. */
24
+ jwe: FlattenedJweParams | FlattenedJwe;
25
+
26
+ /**
27
+ * The decryption key which can be a Key Identifier such as a KMS key URI, a JSON Web Key (JWK),
28
+ * or raw key material represented as a byte array.
29
+ */
30
+ key: KeyIdentifier | Jwk | Uint8Array;
31
+
32
+ /** Key Manager instanceß responsible for managing cryptographic keys. */
33
+ keyManager?: TKeyManager;
34
+
35
+ /** Crypto API instance that provides the necessary cryptographic operations. */
36
+ crypto?: TCrypto;
37
+
38
+ /** {@inheritDoc JweDecryptOptions} */
39
+ options?: JweDecryptOptions;
40
+ }
41
+
42
+ /**
43
+ * Result of decrypting a flattened JWE, containing the plaintext and related information.
44
+ */
45
+ export interface FlattenedJweDecryptResult {
46
+ /** JWE Additional Authenticated Data (AAD). */
47
+ additionalAuthenticatedData?: Uint8Array;
48
+
49
+ /** Plaintext. */
50
+ plaintext: Uint8Array;
51
+
52
+ /** JWE Protected Header. */
53
+ protectedHeader?: Partial<JweHeaderParams>;
54
+
55
+ /** JWE Shared Unprotected Header. */
56
+ sharedUnprotectedHeader?: Partial<JweHeaderParams>;
57
+
58
+ /** JWE Per-Recipient Unprotected Header. */
59
+ unprotectedHeader?: Partial<JweHeaderParams>;
60
+ }
61
+
62
+ /**
63
+ * Parameters for encrypting data into a flattened JWE format.
64
+ *
65
+ * @typeParam TKeyManager - The Key Manager used to manage cryptographic keys.
66
+ * @typeParam TCrypto - The Crypto API used to perform cryptographic operations.
67
+ */
68
+ export interface FlattenedJweEncryptParams<TKeyManager, TCrypto> extends FlattenedJweDecryptResult {
69
+ /**
70
+ * The encryption key which can be a Key Identifier such as a KMS key URI, a JSON Web Key (JWK),
71
+ * or raw key material represented as a byte array.
72
+ */
73
+ key: KeyIdentifier | Jwk | Uint8Array;
74
+
75
+ /** Key Manager instanceß responsible for managing cryptographic keys. */
76
+ keyManager?: TKeyManager;
77
+
78
+ /** Crypto API instance that provides the necessary cryptographic operations. */
79
+ crypto?: TCrypto;
80
+
81
+ /** {@inheritDoc JweEncryptOptions} */
82
+ options?: JweEncryptOptions;
83
+ }
84
+
85
+ /**
86
+ * Represents the parameters for a flattened JWE object, typically used in single-recipient
87
+ * scenarios.
88
+ */
89
+ export interface FlattenedJweParams {
90
+ /** Base64URL encoded additional authenticated data. */
91
+ aad?: string;
92
+
93
+ /** Base64URL encoded ciphertext. */
94
+ ciphertext: string;
95
+
96
+ /** Base64URL encoded encrypted key. */
97
+ encrypted_key?: string;
98
+
99
+ /** Per-Recipient Unprotected Header parameters. */
100
+ header?: Partial<JweHeaderParams>;
101
+
102
+ /** Base64URL encoded initialization vector. */
103
+ iv?: string;
104
+
105
+ /** Base64URL encoded string of the Protected Header. */
106
+ protected?: string;
107
+
108
+ /** Base64URL encoded authentication tag. */
109
+ tag?: string;
110
+
111
+ /** Shared Unprotected Header parameters. */
112
+ unprotected?: Partial<JweHeaderParams>;
113
+ }
114
+
115
+ /**
116
+ * A helper utility function used internally to decode a JWE header parameter from a Base64 URL
117
+ * encoded string to a Uint8Array. It's designed to process individual JWE header parameter values,
118
+ * ensuring they are correctly formatted and decoded.
119
+ *
120
+ * @param param - The name of the JWE header parameter being decoded; used for error messaging.
121
+ * @param value - The Base64 URL encoded string value of the header parameter to decode.
122
+ * @returns The decoded parameter as a Uint8Array, or undefined if the input value is undefined.
123
+ * @throws {@link CryptoError} if the value is not a properly encoded Base64 URL string or if it's
124
+ * not a string.
125
+ */
126
+ function decodeHeaderParam(param: string, value?: string): Uint8Array | undefined {
127
+ // If the parameter value is not present, return undefined.
128
+ if (value === undefined) return undefined;
129
+
130
+ try {
131
+ if (typeof value !== 'string') throw new Error();
132
+ return Convert.base64Url(value).toUint8Array();
133
+ } catch {
134
+ throw new CryptoError(CryptoErrorCode.InvalidJwe,
135
+ `Failed to decode the JWE Header parameter '${param}' from Base64 URL format to ` +
136
+ 'Uint8Array. Ensure the value is properly encoded in Base64 URL format without padding.'
137
+ );
138
+ }
139
+ }
140
+
141
+ /**
142
+ * The `FlattenedJwe` class handles the encryption and decryption of JSON Web Encryption (JWE)
143
+ * objects in the flattened serialization format. This format is a compact, URL-safe means of
144
+ * representing encrypted content, typically used when dealing with a single recipient or when
145
+ * bandwidth efficiency is important.
146
+ *
147
+ * This class provides methods to encrypt plaintext to a flattened JWE and decrypt a flattened JWE
148
+ * back to plaintext, utilizing a variety of supported cryptographic algorithms as specified in the
149
+ * JWE header parameters.
150
+ *
151
+ * @example
152
+ * ```ts
153
+ * // Example usage of encrypt method
154
+ * const plaintext = new TextEncoder().encode("Secret Message");
155
+ * const key = { kty: "oct", k: "your-secret-key" }; // Example symmetric key
156
+ * const protectedHeader = { alg: "dir", enc: "A256GCM" };
157
+ * const encryptedJwe = await FlattenedJwe.encrypt({
158
+ * plaintext,
159
+ * protectedHeader,
160
+ * key,
161
+ * });
162
+ * ```
163
+ *
164
+ * @example
165
+ * // Decryption example
166
+ * const { plaintext, protectedHeader } = await FlattenedJwe.decrypt({
167
+ * jwe: yourFlattenedJweObject,
168
+ * key: yourDecryptionKey,
169
+ * crypto: new YourCryptoApi(),
170
+ * });
171
+ */
172
+ export class FlattenedJwe {
173
+ /** Base64URL encoded additional authenticated data. */
174
+ public aad?: string;
175
+
176
+ /** Base64URL encoded ciphertext. */
177
+ public ciphertext: string = '';
178
+
179
+ /** Base64URL encoded encrypted key. */
180
+ public encrypted_key?: string;
181
+
182
+ /** Per-Recipient Unprotected Header parameters. */
183
+ public header?: Partial<JweHeaderParams>;
184
+
185
+ /** Base64URL encoded initialization vector. */
186
+ public iv?: string;
187
+
188
+ /** Base64URL encoded string of the Protected Header. */
189
+ public protected?: string;
190
+
191
+ /** Base64URL encoded authentication tag. */
192
+ public tag?: string;
193
+
194
+ /** Shared Unprotected Header parameters. */
195
+ public unprotected?: Partial<JweHeaderParams>;
196
+
197
+ constructor(params: FlattenedJweParams) {
198
+ Object.assign(this, params);
199
+ }
200
+
201
+ public static async decrypt<
202
+ TKeyManager extends KeyManager | undefined = KeyManager,
203
+ TCrypto extends CryptoApi | undefined = CryptoApi
204
+ >({
205
+ jwe,
206
+ key,
207
+ keyManager = new LocalKeyManager(),
208
+ crypto = new AgentCryptoApi(),
209
+ options = {}
210
+ }: FlattenedJweDecryptParams<TKeyManager, TCrypto>): Promise<FlattenedJweDecryptResult> {
211
+ // Verify that the provided Crypto API supports the decrypt operation before proceeding.
212
+ if (!isCipher(crypto)) {
213
+ throw new CryptoError(CryptoErrorCode.OperationNotSupported, 'Crypto API does not support the "encrypt" operation.');
214
+ }
215
+ // Verify that the provided Key Manager supports the decrypt operation before proceeding.
216
+ if (!isCipher(keyManager)) {
217
+ throw new CryptoError(CryptoErrorCode.OperationNotSupported, 'Key Manager does not support the "decrypt" operation.');
218
+ }
219
+
220
+ // Verify that at least one of the JOSE header objects is present.
221
+ if (!jwe.protected && !jwe.header && !jwe.unprotected) {
222
+ throw new CryptoError(CryptoErrorCode.InvalidJwe,
223
+ 'JWE is missing the required JOSE header parameters. ' +
224
+ 'Please provide at least one of the following: "protected", "header", or "unprotected"'
225
+ );
226
+ }
227
+
228
+ // Verify that the JWE Ciphertext is present.
229
+ if (typeof jwe.ciphertext !== 'string') {
230
+ throw new CryptoError(CryptoErrorCode.InvalidJwe, 'JWE Ciphertext is missing or not a string.');
231
+ }
232
+
233
+ // Parse the JWE Protected Header, if present.
234
+ let parsedProtectedHeader: Partial<JweHeaderParams> | undefined;
235
+ if (jwe.protected) {
236
+ try {
237
+ parsedProtectedHeader = Convert.base64Url(jwe.protected).toObject();
238
+ } catch {
239
+ throw new Error('JWE Protected Header is invalid');
240
+ }
241
+ }
242
+
243
+ // Per {@link https://www.rfc-editor.org/rfc/rfc7516#section-5.2 | RFC7516 Section 5.2}
244
+ // the resulting JOSE Header MUST NOT contain duplicate Header Parameter names. In other words,
245
+ // the same Header Parameter name MUST NOT occur in the `header`, `protected`, and
246
+ // `unprotected` JSON object values that together comprise the JOSE Header.
247
+ if (hasDuplicateProperties(parsedProtectedHeader, jwe.header, jwe.unprotected)){
248
+ throw new Error(
249
+ 'Duplicate properties detected. Please ensure that each parameter is defined only once ' +
250
+ 'across the JWE "header", "protected", and "unprotected" objects.'
251
+ );
252
+ }
253
+
254
+ // The JOSE Header is the union of the members of the JWE Protected Header (`protected`), the
255
+ // JWE Shared Unprotected Header (`unprotected`), and the corresponding JWE Per-Recipient
256
+ // Unprotected Header (`header`).
257
+ const joseHeader = { ...parsedProtectedHeader, ...jwe.header, ...jwe.unprotected };
258
+
259
+ if (!isValidJweHeader(joseHeader)) {
260
+ throw new Error('JWE Header is missing required "alg" (Algorithm) and/or "enc" (Encryption) Header Parameters');
261
+ }
262
+
263
+ if (Array.isArray(options.allowedAlgValues)
264
+ && !options.allowedAlgValues.includes(joseHeader.alg)) {
265
+ throw new Error(`"alg" (Algorithm) Header Parameter value not allowed: ${joseHeader.alg}`);
266
+ }
267
+
268
+ if (Array.isArray(options.allowedEncValues)
269
+ && !options.allowedEncValues.includes(joseHeader.enc)) {
270
+ throw new Error(`"enc" (Encryption Algorithm) Header Parameter value not allowed: ${joseHeader.enc}`);
271
+ }
272
+
273
+ let cek: KeyIdentifier | Jwk;
274
+ try {
275
+ const encryptedKey = jwe.encrypted_key
276
+ ? Convert.base64Url(jwe.encrypted_key).toUint8Array()
277
+ : undefined;
278
+
279
+ cek = await JweKeyManagement.decrypt({ key, encryptedKey, joseHeader, keyManager, crypto });
280
+
281
+ } catch (error: any) {
282
+ // If the error is a CryptoError with code "InvalidJwe" or "AlgorithmNotSupported", re-throw.
283
+ if (error instanceof CryptoError
284
+ && (error.code === CryptoErrorCode.InvalidJwe || error.code === CryptoErrorCode.AlgorithmNotSupported)) {
285
+ throw error;
286
+ }
287
+
288
+ // Otherwise, generate a random CEK and proceed to the next step.
289
+ // As noted in
290
+ // {@link https://datatracker.ietf.org/doc/html/rfc7516#section-11.5 | RFC 7516 Section 11.5},
291
+ // to mitigate the attacks described in
292
+ // {@link https://datatracker.ietf.org/doc/html/rfc3218 | RFC 3218}, the recipient MUST NOT
293
+ // distinguish between format, padding, and length errors of encrypted keys. It is strongly
294
+ // recommended, in the event of receiving an improperly formatted key, that the recipient
295
+ // substitute a randomly generated CEK and proceed to the next step, to mitigate timing
296
+ // attacks.
297
+ cek = typeof key === 'string'
298
+ ? await keyManager.generateKey({ algorithm: joseHeader.enc })
299
+ : await crypto.generateKey({ algorithm: joseHeader.enc });
300
+ }
301
+
302
+ // If present, decode the JWE Initialization Vector (IV) and Authentication Tag.
303
+ const iv = decodeHeaderParam('iv', jwe.iv);
304
+ const tag = decodeHeaderParam('tag', jwe.tag);
305
+
306
+ // Decode the JWE Ciphertext to a byte array, and if present, append the Authentication Tag.
307
+ const ciphertext = tag !== undefined
308
+ ? new Uint8Array([
309
+ ...Convert.base64Url(jwe.ciphertext).toUint8Array(),
310
+ ...(tag ?? [])
311
+ ])
312
+ : Convert.base64Url(jwe.ciphertext).toUint8Array();
313
+
314
+ // If the JWE Additional Authenticated Data (AAD) is present, the Additional Authenticated Data
315
+ // input to the Content Encryption Algorithm is
316
+ // ASCII(Encoded Protected Header || '.' || BASE64URL(JWE AAD)). If the JWE AAD is absent, the
317
+ // Additional Authenticated Data is ASCII(BASE64URL(UTF8(JWE Protected Header))).
318
+ const additionalData = jwe.aad !== undefined
319
+ ? new Uint8Array([
320
+ ...Convert.string(jwe.protected ?? '').toUint8Array(),
321
+ ...Convert.string('.').toUint8Array(),
322
+ ...Convert.string(jwe.aad).toUint8Array()
323
+ ])
324
+ : Convert.string(jwe.protected ?? '').toUint8Array();
325
+
326
+ // Decrypt the JWE using the Content Encryption Key (CEK) with:
327
+ // - Key Manager: If the CEK is a Key Identifier.
328
+ // - Crypto API: If the CEK is a JWK.
329
+ const plaintext = typeof cek === 'string'
330
+ ? await keyManager.decrypt({ keyUri: cek, data: ciphertext, iv, additionalData })
331
+ : await crypto.decrypt({ key: cek, data: ciphertext, iv, additionalData });
332
+
333
+ return {
334
+ plaintext,
335
+ protectedHeader : parsedProtectedHeader,
336
+ additionalAuthenticatedData : decodeHeaderParam('aad', jwe.aad),
337
+ sharedUnprotectedHeader : jwe.unprotected,
338
+ unprotectedHeader : jwe.header
339
+ };
340
+ }
341
+
342
+ public static async encrypt<
343
+ TKeyManager extends KeyManager | undefined = KeyManager,
344
+ TCrypto extends CryptoApi | undefined = CryptoApi
345
+ >({
346
+ key,
347
+ plaintext,
348
+ additionalAuthenticatedData,
349
+ protectedHeader,
350
+ sharedUnprotectedHeader,
351
+ unprotectedHeader,
352
+ keyManager = new LocalKeyManager(),
353
+ crypto = new AgentCryptoApi(),
354
+ }: FlattenedJweEncryptParams<TKeyManager, TCrypto>): Promise<FlattenedJwe> {
355
+ // Verify that the provided Crypto API supports the decrypt operation before proceeding.
356
+ if (!isCipher(crypto)) {
357
+ throw new CryptoError(CryptoErrorCode.OperationNotSupported, 'Crypto API does not support the "encrypt" operation.');
358
+ }
359
+ // Verify that the provided Key Manager supports the decrypt operation before proceeding.
360
+ if (!isCipher(keyManager)) {
361
+ throw new CryptoError(CryptoErrorCode.OperationNotSupported, 'Key Manager does not support the "decrypt" operation.');
362
+ }
363
+
364
+ // Verify that at least one of the JOSE header objects is present.
365
+ if (!protectedHeader && !sharedUnprotectedHeader && !unprotectedHeader) {
366
+ throw new CryptoError(CryptoErrorCode.InvalidJwe,
367
+ 'JWE is missing the required JOSE header parameters. ' +
368
+ 'Please provide at least one of the following: "protectedHeader", "sharedUnprotectedHeader", or "unprotectedHeader"'
369
+ );
370
+ }
371
+
372
+ // Verify that the Plaintext is present.
373
+ if (!(plaintext instanceof Uint8Array)) {
374
+ throw new CryptoError(CryptoErrorCode.InvalidJwe, 'Plaintext is missing or not a byte array.');
375
+ }
376
+
377
+ // Per {@link https://www.rfc-editor.org/rfc/rfc7516#section-5.2 | RFC7516 Section 5.2}
378
+ // the resulting JOSE Header MUST NOT contain duplicate Header Parameter names. In other words,
379
+ // the same Header Parameter name MUST NOT occur in the `header`, `protected`, and
380
+ // `unprotected` JSON object values that together comprise the JOSE Header.
381
+ if (hasDuplicateProperties(protectedHeader, sharedUnprotectedHeader, unprotectedHeader)){
382
+ throw new Error(
383
+ 'Duplicate properties detected. Please ensure that each parameter is defined only once ' +
384
+ 'across the JWE "protectedHeader", "sharedUnprotectedHeader", and "unprotectedHeader" objects.'
385
+ );
386
+ }
387
+
388
+ // The JOSE Header is the union of the members of the JWE Protected Header (`protectedHeader`),
389
+ // the JWE Shared Unprotected Header (`sharedUnprotectedHeader`), and the corresponding JWE
390
+ // Per-Recipient Unprotected Header (`unprotectedHeader`).
391
+ const joseHeader = { ...protectedHeader, ...sharedUnprotectedHeader, ...unprotectedHeader };
392
+
393
+ if (!isValidJweHeader(joseHeader)) {
394
+ throw new Error('JWE Header is missing required "alg" (Algorithm) and/or "enc" (Encryption) Header Parameters');
395
+ }
396
+
397
+ const { cek, encryptedKey } = await JweKeyManagement.encrypt({ key, joseHeader, keyManager, crypto });
398
+
399
+ // If required for the Content Encryption Algorithm, generate a random JWE Initialization
400
+ // Vector (IV) of the correct size; otherwise, let the JWE Initialization Vector be the empty
401
+ // octet sequence.
402
+ let iv: Uint8Array;
403
+ switch (joseHeader.enc) {
404
+ case 'A128GCM':
405
+ case 'A192GCM':
406
+ case 'A256GCM':
407
+ iv = CryptoUtils.randomBytes(12);
408
+ break;
409
+ default:
410
+ iv = new Uint8Array(0);
411
+ }
412
+
413
+ // Compute the Encoded Protected Header value BASE64URL(UTF8(JWE Protected Header)). If the JWE
414
+ // Protected Header is not present, let this value be the empty string.
415
+ const encodedProtectedHeader = protectedHeader
416
+ ? Convert.object(protectedHeader).toBase64Url()
417
+ : '';
418
+
419
+ // If the JWE Additional Authenticated Data (AAD) is present, the Additional Authenticated Data
420
+ // input to the Content Encryption Algorithm is
421
+ // ASCII(Encoded Protected Header || '.' || BASE64URL(JWE AAD)). If the JWE AAD is absent, the
422
+ // Additional Authenticated Data is ASCII(BASE64URL(UTF8(JWE Protected Header))).
423
+ let additionalData: Uint8Array;
424
+ let encodedAad: string | undefined;
425
+ if (additionalAuthenticatedData) {
426
+ encodedAad = Convert.uint8Array(additionalAuthenticatedData).toBase64Url();
427
+ additionalData = Convert.string(encodedProtectedHeader + '.' + encodedAad).toUint8Array();
428
+ } else {
429
+ additionalData = Convert.string(encodedProtectedHeader).toUint8Array();
430
+ }
431
+
432
+ // Encrypt the plaintext using the CEK, the JWE Initialization Vector, and the Additional
433
+ // Authenticated Data value using the specified content encryption algorithm to create the JWE
434
+ // Ciphertext value and the JWE Authentication Tag.
435
+ const ciphertextWithTag = typeof cek === 'string'
436
+ ? await keyManager.encrypt({ keyUri: cek, data: plaintext, iv, additionalData })
437
+ : await crypto.encrypt({ key: cek, data: plaintext, iv, additionalData });
438
+ const ciphertext = ciphertextWithTag.slice(0, -16);
439
+ const authenticationTag = ciphertextWithTag.slice(-16);
440
+
441
+ // Create the Flattened JWE JSON Serialization output, which is based upon the General syntax,
442
+ // but flattens it, optimizing it for the single-recipient case. It flattens it by removing the
443
+ // "recipients" member and instead placing those members defined for use in the "recipients"
444
+ // array (the "header" and "encrypted_key" members) in the top-level JSON object (at the same
445
+ // level as the "ciphertext" member).
446
+ const jwe = new FlattenedJwe({
447
+ ciphertext: Convert.uint8Array(ciphertext).toBase64Url(),
448
+ });
449
+ if (encryptedKey) jwe.encrypted_key = Convert.uint8Array(encryptedKey).toBase64Url();
450
+ if (protectedHeader) jwe.protected = encodedProtectedHeader;
451
+ if (sharedUnprotectedHeader) jwe.unprotected = sharedUnprotectedHeader;
452
+ if (unprotectedHeader) jwe.header = unprotectedHeader;
453
+ if (iv) jwe.iv = Convert.uint8Array(iv).toBase64Url();
454
+ if (encodedAad) jwe.aad = encodedAad;
455
+ if (authenticationTag) jwe.tag = Convert.uint8Array(authenticationTag).toBase64Url();
456
+
457
+ return jwe;
458
+ }
459
+ }