@credo-ts/openid4vc 0.6.1-pr-2091-20241119140918 → 0.6.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 (409) hide show
  1. package/build/OpenId4VcApi.d.mts +24 -0
  2. package/build/OpenId4VcApi.d.mts.map +1 -0
  3. package/build/OpenId4VcApi.mjs +35 -0
  4. package/build/OpenId4VcApi.mjs.map +1 -0
  5. package/build/OpenId4VcModule.d.mts +30 -0
  6. package/build/OpenId4VcModule.d.mts.map +1 -0
  7. package/build/OpenId4VcModule.mjs +42 -0
  8. package/build/OpenId4VcModule.mjs.map +1 -0
  9. package/build/OpenId4VcModuleConfig.d.mts +44 -0
  10. package/build/OpenId4VcModuleConfig.d.mts.map +1 -0
  11. package/build/OpenId4VcModuleConfig.mjs +24 -0
  12. package/build/OpenId4VcModuleConfig.mjs.map +1 -0
  13. package/build/_virtual/_@oxc-project_runtime@0.99.0/helpers/decorate.mjs +10 -0
  14. package/build/_virtual/_@oxc-project_runtime@0.99.0/helpers/decorateMetadata.mjs +7 -0
  15. package/build/_virtual/_@oxc-project_runtime@0.99.0/helpers/decorateParam.mjs +9 -0
  16. package/build/index.d.mts +42 -0
  17. package/build/index.mjs +37 -0
  18. package/build/openid4vc-holder/OpenId4VcHolderApi.d.mts +238 -0
  19. package/build/openid4vc-holder/OpenId4VcHolderApi.d.mts.map +1 -0
  20. package/build/openid4vc-holder/OpenId4VcHolderApi.mjs +174 -0
  21. package/build/openid4vc-holder/OpenId4VcHolderApi.mjs.map +1 -0
  22. package/build/openid4vc-holder/OpenId4VcHolderModule.d.mts +17 -0
  23. package/build/openid4vc-holder/OpenId4VcHolderModule.d.mts.map +1 -0
  24. package/build/openid4vc-holder/OpenId4VcHolderModule.mjs +23 -0
  25. package/build/openid4vc-holder/OpenId4VcHolderModule.mjs.map +1 -0
  26. package/build/openid4vc-holder/OpenId4VciHolderService.d.mts +69 -0
  27. package/build/openid4vc-holder/OpenId4VciHolderService.d.mts.map +1 -0
  28. package/build/openid4vc-holder/OpenId4VciHolderService.mjs +751 -0
  29. package/build/openid4vc-holder/OpenId4VciHolderService.mjs.map +1 -0
  30. package/build/openid4vc-holder/OpenId4VciHolderServiceOptions.d.mts +398 -0
  31. package/build/openid4vc-holder/OpenId4VciHolderServiceOptions.d.mts.map +1 -0
  32. package/build/openid4vc-holder/OpenId4VciHolderServiceOptions.mjs +16 -0
  33. package/build/openid4vc-holder/OpenId4VciHolderServiceOptions.mjs.map +1 -0
  34. package/build/openid4vc-holder/OpenId4vpHolderService.d.mts +130 -0
  35. package/build/openid4vc-holder/OpenId4vpHolderService.d.mts.map +1 -0
  36. package/build/openid4vc-holder/OpenId4vpHolderService.mjs +278 -0
  37. package/build/openid4vc-holder/OpenId4vpHolderService.mjs.map +1 -0
  38. package/build/openid4vc-holder/OpenId4vpHolderServiceOptions.d.mts +112 -0
  39. package/build/openid4vc-holder/OpenId4vpHolderServiceOptions.d.mts.map +1 -0
  40. package/build/openid4vc-holder/index.d.mts +6 -0
  41. package/build/openid4vc-holder/index.mjs +5 -0
  42. package/build/openid4vc-issuer/OpenId4VcIssuanceSessionState.d.mts +16 -0
  43. package/build/openid4vc-issuer/OpenId4VcIssuanceSessionState.d.mts.map +1 -0
  44. package/build/openid4vc-issuer/OpenId4VcIssuanceSessionState.mjs +18 -0
  45. package/build/openid4vc-issuer/OpenId4VcIssuanceSessionState.mjs.map +1 -0
  46. package/build/openid4vc-issuer/OpenId4VcIssuerApi.d.mts +137 -0
  47. package/build/openid4vc-issuer/OpenId4VcIssuerApi.d.mts.map +1 -0
  48. package/build/openid4vc-issuer/OpenId4VcIssuerApi.mjs +108 -0
  49. package/build/openid4vc-issuer/OpenId4VcIssuerApi.mjs.map +1 -0
  50. package/build/openid4vc-issuer/OpenId4VcIssuerEvents.d.mts +19 -0
  51. package/build/openid4vc-issuer/OpenId4VcIssuerEvents.d.mts.map +1 -0
  52. package/build/openid4vc-issuer/OpenId4VcIssuerEvents.mjs +9 -0
  53. package/build/openid4vc-issuer/OpenId4VcIssuerEvents.mjs.map +1 -0
  54. package/build/openid4vc-issuer/OpenId4VcIssuerModule.d.mts +27 -0
  55. package/build/openid4vc-issuer/OpenId4VcIssuerModule.d.mts.map +1 -0
  56. package/build/openid4vc-issuer/OpenId4VcIssuerModule.mjs +150 -0
  57. package/build/openid4vc-issuer/OpenId4VcIssuerModule.mjs.map +1 -0
  58. package/build/openid4vc-issuer/OpenId4VcIssuerModuleConfig.d.mts +279 -0
  59. package/build/openid4vc-issuer/OpenId4VcIssuerModuleConfig.d.mts.map +1 -0
  60. package/build/openid4vc-issuer/OpenId4VcIssuerModuleConfig.mjs +179 -0
  61. package/build/openid4vc-issuer/OpenId4VcIssuerModuleConfig.mjs.map +1 -0
  62. package/build/openid4vc-issuer/OpenId4VcIssuerService.d.mts +182 -0
  63. package/build/openid4vc-issuer/OpenId4VcIssuerService.d.mts.map +1 -0
  64. package/build/openid4vc-issuer/OpenId4VcIssuerService.mjs +881 -0
  65. package/build/openid4vc-issuer/OpenId4VcIssuerService.mjs.map +1 -0
  66. package/build/openid4vc-issuer/OpenId4VcIssuerServiceOptions.d.mts +340 -0
  67. package/build/openid4vc-issuer/OpenId4VcIssuerServiceOptions.d.mts.map +1 -0
  68. package/build/openid4vc-issuer/OpenId4VcIssuerServiceOptions.mjs +1 -0
  69. package/build/openid4vc-issuer/index.d.mts +11 -0
  70. package/build/openid4vc-issuer/index.mjs +11 -0
  71. package/build/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRecord.d.mts +300 -0
  72. package/build/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRecord.d.mts.map +1 -0
  73. package/build/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRecord.mjs +102 -0
  74. package/build/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRecord.mjs.map +1 -0
  75. package/build/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRepository.d.mts +10 -0
  76. package/build/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRepository.d.mts.map +1 -0
  77. package/build/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRepository.mjs +22 -0
  78. package/build/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRepository.mjs.map +1 -0
  79. package/build/openid4vc-issuer/repository/OpenId4VcIssuerRecord.d.mts +84 -0
  80. package/build/openid4vc-issuer/repository/OpenId4VcIssuerRecord.d.mts.map +1 -0
  81. package/build/openid4vc-issuer/repository/OpenId4VcIssuerRecord.mjs +89 -0
  82. package/build/openid4vc-issuer/repository/OpenId4VcIssuerRecord.mjs.map +1 -0
  83. package/build/openid4vc-issuer/repository/OpenId4VcIssuerRepository.d.mts +12 -0
  84. package/build/openid4vc-issuer/repository/OpenId4VcIssuerRepository.d.mts.map +1 -0
  85. package/build/openid4vc-issuer/repository/OpenId4VcIssuerRepository.mjs +28 -0
  86. package/build/openid4vc-issuer/repository/OpenId4VcIssuerRepository.mjs.map +1 -0
  87. package/build/openid4vc-issuer/repository/index.d.mts +4 -0
  88. package/build/openid4vc-issuer/repository/index.mjs +4 -0
  89. package/build/openid4vc-issuer/router/accessTokenEndpoint.mjs +199 -0
  90. package/build/openid4vc-issuer/router/accessTokenEndpoint.mjs.map +1 -0
  91. package/build/openid4vc-issuer/router/authorizationChallengeEndpoint.mjs +241 -0
  92. package/build/openid4vc-issuer/router/authorizationChallengeEndpoint.mjs.map +1 -0
  93. package/build/openid4vc-issuer/router/authorizationEndpoint.mjs +51 -0
  94. package/build/openid4vc-issuer/router/authorizationEndpoint.mjs.map +1 -0
  95. package/build/openid4vc-issuer/router/authorizationServerMetadataEndpoint.mjs +25 -0
  96. package/build/openid4vc-issuer/router/authorizationServerMetadataEndpoint.mjs.map +1 -0
  97. package/build/openid4vc-issuer/router/credentialEndpoint.mjs +142 -0
  98. package/build/openid4vc-issuer/router/credentialEndpoint.mjs.map +1 -0
  99. package/build/openid4vc-issuer/router/credentialOfferEndpoint.mjs +38 -0
  100. package/build/openid4vc-issuer/router/credentialOfferEndpoint.mjs.map +1 -0
  101. package/build/openid4vc-issuer/router/deferredCredentialEndpoint.mjs +84 -0
  102. package/build/openid4vc-issuer/router/deferredCredentialEndpoint.mjs.map +1 -0
  103. package/build/openid4vc-issuer/router/index.mjs +12 -0
  104. package/build/openid4vc-issuer/router/issuerMetadataEndpoint.mjs +43 -0
  105. package/build/openid4vc-issuer/router/issuerMetadataEndpoint.mjs.map +1 -0
  106. package/build/openid4vc-issuer/router/jwksEndpoint.mjs +18 -0
  107. package/build/openid4vc-issuer/router/jwksEndpoint.mjs.map +1 -0
  108. package/build/openid4vc-issuer/router/nonceEndpoint.mjs +29 -0
  109. package/build/openid4vc-issuer/router/nonceEndpoint.mjs.map +1 -0
  110. package/build/openid4vc-issuer/router/pushedAuthorizationRequestEndpoint.mjs +164 -0
  111. package/build/openid4vc-issuer/router/pushedAuthorizationRequestEndpoint.mjs.map +1 -0
  112. package/build/openid4vc-issuer/router/redirectEndpoint.mjs +124 -0
  113. package/build/openid4vc-issuer/router/redirectEndpoint.mjs.map +1 -0
  114. package/build/openid4vc-issuer/util/txCode.mjs +18 -0
  115. package/build/openid4vc-issuer/util/txCode.mjs.map +1 -0
  116. package/build/openid4vc-verifier/OpenId4VcVerificationSessionState.d.mts +10 -0
  117. package/build/openid4vc-verifier/OpenId4VcVerificationSessionState.d.mts.map +1 -0
  118. package/build/openid4vc-verifier/OpenId4VcVerificationSessionState.mjs +12 -0
  119. package/build/openid4vc-verifier/OpenId4VcVerificationSessionState.mjs.map +1 -0
  120. package/build/openid4vc-verifier/OpenId4VcVerifierApi.d.mts +60 -0
  121. package/build/openid4vc-verifier/OpenId4VcVerifierApi.d.mts.map +1 -0
  122. package/build/openid4vc-verifier/OpenId4VcVerifierApi.mjs +83 -0
  123. package/build/openid4vc-verifier/OpenId4VcVerifierApi.mjs.map +1 -0
  124. package/build/openid4vc-verifier/OpenId4VcVerifierEvents.d.mts +19 -0
  125. package/build/openid4vc-verifier/OpenId4VcVerifierEvents.d.mts.map +1 -0
  126. package/build/openid4vc-verifier/OpenId4VcVerifierEvents.mjs +9 -0
  127. package/build/openid4vc-verifier/OpenId4VcVerifierEvents.mjs.map +1 -0
  128. package/build/openid4vc-verifier/OpenId4VcVerifierModule.d.mts +25 -0
  129. package/build/openid4vc-verifier/OpenId4VcVerifierModule.d.mts.map +1 -0
  130. package/build/openid4vc-verifier/OpenId4VcVerifierModule.mjs +91 -0
  131. package/build/openid4vc-verifier/OpenId4VcVerifierModule.mjs.map +1 -0
  132. package/build/openid4vc-verifier/OpenId4VcVerifierModuleConfig.d.mts +55 -0
  133. package/build/openid4vc-verifier/OpenId4VcVerifierModuleConfig.d.mts.map +1 -0
  134. package/build/openid4vc-verifier/OpenId4VcVerifierModuleConfig.mjs +36 -0
  135. package/build/openid4vc-verifier/OpenId4VcVerifierModuleConfig.mjs.map +1 -0
  136. package/build/openid4vc-verifier/OpenId4VpVerifierService.d.mts +60 -0
  137. package/build/openid4vc-verifier/OpenId4VpVerifierService.d.mts.map +1 -0
  138. package/build/openid4vc-verifier/OpenId4VpVerifierService.mjs +714 -0
  139. package/build/openid4vc-verifier/OpenId4VpVerifierService.mjs.map +1 -0
  140. package/build/openid4vc-verifier/OpenId4VpVerifierServiceOptions.d.mts +194 -0
  141. package/build/openid4vc-verifier/OpenId4VpVerifierServiceOptions.d.mts.map +1 -0
  142. package/build/openid4vc-verifier/index.d.mts +12 -0
  143. package/build/openid4vc-verifier/index.mjs +11 -0
  144. package/build/openid4vc-verifier/repository/OpenId4VcVerificationSessionRecord.d.mts +129 -0
  145. package/build/openid4vc-verifier/repository/OpenId4VcVerificationSessionRecord.d.mts.map +1 -0
  146. package/build/openid4vc-verifier/repository/OpenId4VcVerificationSessionRecord.mjs +64 -0
  147. package/build/openid4vc-verifier/repository/OpenId4VcVerificationSessionRecord.mjs.map +1 -0
  148. package/build/openid4vc-verifier/repository/OpenId4VcVerificationSessionRepository.d.mts +10 -0
  149. package/build/openid4vc-verifier/repository/OpenId4VcVerificationSessionRepository.d.mts.map +1 -0
  150. package/build/openid4vc-verifier/repository/OpenId4VcVerificationSessionRepository.mjs +22 -0
  151. package/build/openid4vc-verifier/repository/OpenId4VcVerificationSessionRepository.mjs.map +1 -0
  152. package/build/openid4vc-verifier/repository/OpenId4VcVerifierRecord.d.mts +33 -0
  153. package/build/openid4vc-verifier/repository/OpenId4VcVerifierRecord.d.mts.map +1 -0
  154. package/build/openid4vc-verifier/repository/OpenId4VcVerifierRecord.mjs +32 -0
  155. package/build/openid4vc-verifier/repository/OpenId4VcVerifierRecord.mjs.map +1 -0
  156. package/build/openid4vc-verifier/repository/OpenId4VcVerifierRepository.d.mts +12 -0
  157. package/build/openid4vc-verifier/repository/OpenId4VcVerifierRepository.d.mts.map +1 -0
  158. package/build/openid4vc-verifier/repository/OpenId4VcVerifierRepository.mjs +28 -0
  159. package/build/openid4vc-verifier/repository/OpenId4VcVerifierRepository.mjs.map +1 -0
  160. package/build/openid4vc-verifier/repository/index.d.mts +4 -0
  161. package/build/openid4vc-verifier/repository/index.mjs +4 -0
  162. package/build/openid4vc-verifier/router/authorizationEndpoint.mjs +117 -0
  163. package/build/openid4vc-verifier/router/authorizationEndpoint.mjs.map +1 -0
  164. package/build/openid4vc-verifier/router/authorizationRequestEndpoint.mjs +39 -0
  165. package/build/openid4vc-verifier/router/authorizationRequestEndpoint.mjs.map +1 -0
  166. package/build/openid4vc-verifier/router/index.mjs +1 -0
  167. package/build/shared/callbacks.d.mts +47 -0
  168. package/build/shared/callbacks.d.mts.map +1 -0
  169. package/build/shared/callbacks.mjs +279 -0
  170. package/build/shared/callbacks.mjs.map +1 -0
  171. package/build/shared/index.d.mts +7 -0
  172. package/build/shared/index.mjs +4 -0
  173. package/build/shared/issuerMetadataUtils.d.mts +22 -0
  174. package/build/shared/issuerMetadataUtils.d.mts.map +1 -0
  175. package/build/shared/issuerMetadataUtils.mjs +30 -0
  176. package/build/shared/issuerMetadataUtils.mjs.map +1 -0
  177. package/build/shared/models/CredentialHolderBinding.d.mts +71 -0
  178. package/build/shared/models/CredentialHolderBinding.d.mts.map +1 -0
  179. package/build/shared/models/CredentialHolderBinding.mjs +1 -0
  180. package/build/shared/models/OpenId4VcJwtIssuer.d.mts +46 -0
  181. package/build/shared/models/OpenId4VcJwtIssuer.d.mts.map +1 -0
  182. package/build/shared/models/OpenId4VcJwtIssuer.mjs +1 -0
  183. package/build/shared/models/OpenId4VciAuthorizationServerConfig.d.mts +71 -0
  184. package/build/shared/models/OpenId4VciAuthorizationServerConfig.d.mts.map +1 -0
  185. package/build/shared/models/OpenId4VciCredentialFormatProfile.d.mts +12 -0
  186. package/build/shared/models/OpenId4VciCredentialFormatProfile.d.mts.map +1 -0
  187. package/build/shared/models/OpenId4VciCredentialFormatProfile.mjs +14 -0
  188. package/build/shared/models/OpenId4VciCredentialFormatProfile.mjs.map +1 -0
  189. package/build/shared/models/index.d.mts +30 -0
  190. package/build/shared/models/index.d.mts.map +1 -0
  191. package/build/shared/models/index.mjs +6 -0
  192. package/build/shared/router/context.mjs +52 -0
  193. package/build/shared/router/context.mjs.map +1 -0
  194. package/build/shared/router/express.browser.d.mts +5 -0
  195. package/build/shared/router/express.browser.d.mts.map +1 -0
  196. package/build/shared/router/express.browser.mjs +8 -0
  197. package/build/shared/router/express.browser.mjs.map +1 -0
  198. package/build/shared/router/express.mjs +10 -0
  199. package/build/shared/router/express.mjs.map +1 -0
  200. package/build/shared/router/express.native.d.mts +5 -0
  201. package/build/shared/router/express.native.d.mts.map +1 -0
  202. package/build/shared/router/express.native.mjs +8 -0
  203. package/build/shared/router/express.native.mjs.map +1 -0
  204. package/build/shared/router/index.mjs +3 -0
  205. package/build/shared/router/tenants.mjs +36 -0
  206. package/build/shared/router/tenants.mjs.map +1 -0
  207. package/build/shared/transactionData.mjs +19 -0
  208. package/build/shared/transactionData.mjs.map +1 -0
  209. package/build/shared/utils.mjs +90 -0
  210. package/build/shared/utils.mjs.map +1 -0
  211. package/package.json +30 -23
  212. package/build/index.d.ts +0 -4
  213. package/build/index.js +0 -21
  214. package/build/index.js.map +0 -1
  215. package/build/openid4vc-holder/OpenId4VcHolderApi.d.ts +0 -124
  216. package/build/openid4vc-holder/OpenId4VcHolderApi.js +0 -155
  217. package/build/openid4vc-holder/OpenId4VcHolderApi.js.map +0 -1
  218. package/build/openid4vc-holder/OpenId4VcHolderModule.d.ts +0 -13
  219. package/build/openid4vc-holder/OpenId4VcHolderModule.js +0 -35
  220. package/build/openid4vc-holder/OpenId4VcHolderModule.js.map +0 -1
  221. package/build/openid4vc-holder/OpenId4VciHolderService.d.ts +0 -72
  222. package/build/openid4vc-holder/OpenId4VciHolderService.js +0 -569
  223. package/build/openid4vc-holder/OpenId4VciHolderService.js.map +0 -1
  224. package/build/openid4vc-holder/OpenId4VciHolderServiceOptions.d.ts +0 -238
  225. package/build/openid4vc-holder/OpenId4VciHolderServiceOptions.js +0 -14
  226. package/build/openid4vc-holder/OpenId4VciHolderServiceOptions.js.map +0 -1
  227. package/build/openid4vc-holder/OpenId4vcSiopHolderService.d.ts +0 -32
  228. package/build/openid4vc-holder/OpenId4vcSiopHolderService.js +0 -302
  229. package/build/openid4vc-holder/OpenId4vcSiopHolderService.js.map +0 -1
  230. package/build/openid4vc-holder/OpenId4vcSiopHolderServiceOptions.d.ts +0 -38
  231. package/build/openid4vc-holder/OpenId4vcSiopHolderServiceOptions.js +0 -3
  232. package/build/openid4vc-holder/OpenId4vcSiopHolderServiceOptions.js.map +0 -1
  233. package/build/openid4vc-holder/index.d.ts +0 -6
  234. package/build/openid4vc-holder/index.js +0 -23
  235. package/build/openid4vc-holder/index.js.map +0 -1
  236. package/build/openid4vc-issuer/OpenId4VcIssuanceSessionState.d.ts +0 -12
  237. package/build/openid4vc-issuer/OpenId4VcIssuanceSessionState.js +0 -19
  238. package/build/openid4vc-issuer/OpenId4VcIssuanceSessionState.js.map +0 -1
  239. package/build/openid4vc-issuer/OpenId4VcIssuerApi.d.ts +0 -101
  240. package/build/openid4vc-issuer/OpenId4VcIssuerApi.js +0 -110
  241. package/build/openid4vc-issuer/OpenId4VcIssuerApi.js.map +0 -1
  242. package/build/openid4vc-issuer/OpenId4VcIssuerEvents.d.ts +0 -13
  243. package/build/openid4vc-issuer/OpenId4VcIssuerEvents.js +0 -8
  244. package/build/openid4vc-issuer/OpenId4VcIssuerEvents.js.map +0 -1
  245. package/build/openid4vc-issuer/OpenId4VcIssuerModule.d.ts +0 -21
  246. package/build/openid4vc-issuer/OpenId4VcIssuerModule.js +0 -121
  247. package/build/openid4vc-issuer/OpenId4VcIssuerModule.js.map +0 -1
  248. package/build/openid4vc-issuer/OpenId4VcIssuerModuleConfig.d.ts +0 -190
  249. package/build/openid4vc-issuer/OpenId4VcIssuerModuleConfig.js +0 -141
  250. package/build/openid4vc-issuer/OpenId4VcIssuerModuleConfig.js.map +0 -1
  251. package/build/openid4vc-issuer/OpenId4VcIssuerService.d.ts +0 -116
  252. package/build/openid4vc-issuer/OpenId4VcIssuerService.js +0 -698
  253. package/build/openid4vc-issuer/OpenId4VcIssuerService.js.map +0 -1
  254. package/build/openid4vc-issuer/OpenId4VcIssuerServiceOptions.d.ts +0 -229
  255. package/build/openid4vc-issuer/OpenId4VcIssuerServiceOptions.js +0 -3
  256. package/build/openid4vc-issuer/OpenId4VcIssuerServiceOptions.js.map +0 -1
  257. package/build/openid4vc-issuer/index.d.ts +0 -8
  258. package/build/openid4vc-issuer/index.js +0 -27
  259. package/build/openid4vc-issuer/index.js.map +0 -1
  260. package/build/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRecord.d.ts +0 -160
  261. package/build/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRecord.js +0 -88
  262. package/build/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRecord.js.map +0 -1
  263. package/build/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRepository.d.ts +0 -5
  264. package/build/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRepository.js +0 -29
  265. package/build/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRepository.js.map +0 -1
  266. package/build/openid4vc-issuer/repository/OpenId4VcIssuerRecord.d.ts +0 -56
  267. package/build/openid4vc-issuer/repository/OpenId4VcIssuerRecord.js +0 -83
  268. package/build/openid4vc-issuer/repository/OpenId4VcIssuerRecord.js.map +0 -1
  269. package/build/openid4vc-issuer/repository/OpenId4VcIssuerRepository.d.ts +0 -8
  270. package/build/openid4vc-issuer/repository/OpenId4VcIssuerRepository.js +0 -35
  271. package/build/openid4vc-issuer/repository/OpenId4VcIssuerRepository.js.map +0 -1
  272. package/build/openid4vc-issuer/repository/index.d.ts +0 -4
  273. package/build/openid4vc-issuer/repository/index.js +0 -21
  274. package/build/openid4vc-issuer/repository/index.js.map +0 -1
  275. package/build/openid4vc-issuer/router/accessTokenEndpoint.d.ts +0 -5
  276. package/build/openid4vc-issuer/router/accessTokenEndpoint.js +0 -164
  277. package/build/openid4vc-issuer/router/accessTokenEndpoint.js.map +0 -1
  278. package/build/openid4vc-issuer/router/authorizationChallengeEndpoint.d.ts +0 -3
  279. package/build/openid4vc-issuer/router/authorizationChallengeEndpoint.js +0 -213
  280. package/build/openid4vc-issuer/router/authorizationChallengeEndpoint.js.map +0 -1
  281. package/build/openid4vc-issuer/router/authorizationServerMetadataEndpoint.d.ts +0 -6
  282. package/build/openid4vc-issuer/router/authorizationServerMetadataEndpoint.js +0 -25
  283. package/build/openid4vc-issuer/router/authorizationServerMetadataEndpoint.js.map +0 -1
  284. package/build/openid4vc-issuer/router/credentialEndpoint.d.ts +0 -3
  285. package/build/openid4vc-issuer/router/credentialEndpoint.js +0 -176
  286. package/build/openid4vc-issuer/router/credentialEndpoint.js.map +0 -1
  287. package/build/openid4vc-issuer/router/credentialOfferEndpoint.d.ts +0 -3
  288. package/build/openid4vc-issuer/router/credentialOfferEndpoint.js +0 -45
  289. package/build/openid4vc-issuer/router/credentialOfferEndpoint.js.map +0 -1
  290. package/build/openid4vc-issuer/router/index.d.ts +0 -9
  291. package/build/openid4vc-issuer/router/index.js +0 -20
  292. package/build/openid4vc-issuer/router/index.js.map +0 -1
  293. package/build/openid4vc-issuer/router/issuerMetadataEndpoint.d.ts +0 -2
  294. package/build/openid4vc-issuer/router/issuerMetadataEndpoint.js +0 -26
  295. package/build/openid4vc-issuer/router/issuerMetadataEndpoint.js.map +0 -1
  296. package/build/openid4vc-issuer/router/jwksEndpoint.d.ts +0 -3
  297. package/build/openid4vc-issuer/router/jwksEndpoint.js +0 -20
  298. package/build/openid4vc-issuer/router/jwksEndpoint.js.map +0 -1
  299. package/build/openid4vc-issuer/router/nonceEndpoint.d.ts +0 -3
  300. package/build/openid4vc-issuer/router/nonceEndpoint.js +0 -26
  301. package/build/openid4vc-issuer/router/nonceEndpoint.js.map +0 -1
  302. package/build/openid4vc-issuer/router/requestContext.d.ts +0 -5
  303. package/build/openid4vc-issuer/router/requestContext.js +0 -3
  304. package/build/openid4vc-issuer/router/requestContext.js.map +0 -1
  305. package/build/openid4vc-issuer/util/txCode.d.ts +0 -3
  306. package/build/openid4vc-issuer/util/txCode.js +0 -18
  307. package/build/openid4vc-issuer/util/txCode.js.map +0 -1
  308. package/build/openid4vc-verifier/OpenId4VcSiopVerifierService.d.ts +0 -55
  309. package/build/openid4vc-verifier/OpenId4VcSiopVerifierService.js +0 -498
  310. package/build/openid4vc-verifier/OpenId4VcSiopVerifierService.js.map +0 -1
  311. package/build/openid4vc-verifier/OpenId4VcSiopVerifierServiceOptions.d.ts +0 -77
  312. package/build/openid4vc-verifier/OpenId4VcSiopVerifierServiceOptions.js +0 -3
  313. package/build/openid4vc-verifier/OpenId4VcSiopVerifierServiceOptions.js.map +0 -1
  314. package/build/openid4vc-verifier/OpenId4VcVerificationSessionState.d.ts +0 -6
  315. package/build/openid4vc-verifier/OpenId4VcVerificationSessionState.js +0 -11
  316. package/build/openid4vc-verifier/OpenId4VcVerificationSessionState.js.map +0 -1
  317. package/build/openid4vc-verifier/OpenId4VcVerifierApi.d.ts +0 -61
  318. package/build/openid4vc-verifier/OpenId4VcVerifierApi.js +0 -108
  319. package/build/openid4vc-verifier/OpenId4VcVerifierApi.js.map +0 -1
  320. package/build/openid4vc-verifier/OpenId4VcVerifierEvents.d.ts +0 -13
  321. package/build/openid4vc-verifier/OpenId4VcVerifierEvents.js +0 -8
  322. package/build/openid4vc-verifier/OpenId4VcVerifierEvents.js.map +0 -1
  323. package/build/openid4vc-verifier/OpenId4VcVerifierModule.d.ts +0 -21
  324. package/build/openid4vc-verifier/OpenId4VcVerifierModule.js +0 -109
  325. package/build/openid4vc-verifier/OpenId4VcVerifierModule.js.map +0 -1
  326. package/build/openid4vc-verifier/OpenId4VcVerifierModuleConfig.d.ts +0 -31
  327. package/build/openid4vc-verifier/OpenId4VcVerifierModuleConfig.js +0 -28
  328. package/build/openid4vc-verifier/OpenId4VcVerifierModuleConfig.js.map +0 -1
  329. package/build/openid4vc-verifier/index.d.ts +0 -8
  330. package/build/openid4vc-verifier/index.js +0 -25
  331. package/build/openid4vc-verifier/index.js.map +0 -1
  332. package/build/openid4vc-verifier/repository/OpenId4VcRelyingPartyEventEmitter.d.ts +0 -49
  333. package/build/openid4vc-verifier/repository/OpenId4VcRelyingPartyEventEmitter.js +0 -234
  334. package/build/openid4vc-verifier/repository/OpenId4VcRelyingPartyEventEmitter.js.map +0 -1
  335. package/build/openid4vc-verifier/repository/OpenId4VcRelyingPartySessionManager.d.ts +0 -19
  336. package/build/openid4vc-verifier/repository/OpenId4VcRelyingPartySessionManager.js +0 -146
  337. package/build/openid4vc-verifier/repository/OpenId4VcRelyingPartySessionManager.js.map +0 -1
  338. package/build/openid4vc-verifier/repository/OpenId4VcVerificationSessionRecord.d.ts +0 -71
  339. package/build/openid4vc-verifier/repository/OpenId4VcVerificationSessionRecord.js +0 -46
  340. package/build/openid4vc-verifier/repository/OpenId4VcVerificationSessionRecord.js.map +0 -1
  341. package/build/openid4vc-verifier/repository/OpenId4VcVerificationSessionRepository.d.ts +0 -5
  342. package/build/openid4vc-verifier/repository/OpenId4VcVerificationSessionRepository.js +0 -29
  343. package/build/openid4vc-verifier/repository/OpenId4VcVerificationSessionRepository.js.map +0 -1
  344. package/build/openid4vc-verifier/repository/OpenId4VcVerifierRecord.d.ts +0 -29
  345. package/build/openid4vc-verifier/repository/OpenId4VcVerifierRecord.js +0 -29
  346. package/build/openid4vc-verifier/repository/OpenId4VcVerifierRecord.js.map +0 -1
  347. package/build/openid4vc-verifier/repository/OpenId4VcVerifierRepository.d.ts +0 -8
  348. package/build/openid4vc-verifier/repository/OpenId4VcVerifierRepository.js +0 -35
  349. package/build/openid4vc-verifier/repository/OpenId4VcVerifierRepository.js.map +0 -1
  350. package/build/openid4vc-verifier/repository/index.d.ts +0 -4
  351. package/build/openid4vc-verifier/repository/index.js +0 -21
  352. package/build/openid4vc-verifier/repository/index.js.map +0 -1
  353. package/build/openid4vc-verifier/router/authorizationEndpoint.d.ts +0 -11
  354. package/build/openid4vc-verifier/router/authorizationEndpoint.js +0 -102
  355. package/build/openid4vc-verifier/router/authorizationEndpoint.js.map +0 -1
  356. package/build/openid4vc-verifier/router/authorizationRequestEndpoint.d.ts +0 -11
  357. package/build/openid4vc-verifier/router/authorizationRequestEndpoint.js +0 -63
  358. package/build/openid4vc-verifier/router/authorizationRequestEndpoint.js.map +0 -1
  359. package/build/openid4vc-verifier/router/index.d.ts +0 -2
  360. package/build/openid4vc-verifier/router/index.js +0 -6
  361. package/build/openid4vc-verifier/router/index.js.map +0 -1
  362. package/build/openid4vc-verifier/router/requestContext.d.ts +0 -5
  363. package/build/openid4vc-verifier/router/requestContext.js +0 -3
  364. package/build/openid4vc-verifier/router/requestContext.js.map +0 -1
  365. package/build/shared/callbacks.d.ts +0 -18
  366. package/build/shared/callbacks.js +0 -81
  367. package/build/shared/callbacks.js.map +0 -1
  368. package/build/shared/index.d.ts +0 -2
  369. package/build/shared/index.js +0 -19
  370. package/build/shared/index.js.map +0 -1
  371. package/build/shared/issuerMetadataUtils.d.ts +0 -158
  372. package/build/shared/issuerMetadataUtils.js +0 -38
  373. package/build/shared/issuerMetadataUtils.js.map +0 -1
  374. package/build/shared/models/CredentialHolderBinding.d.ts +0 -13
  375. package/build/shared/models/CredentialHolderBinding.js +0 -3
  376. package/build/shared/models/CredentialHolderBinding.js.map +0 -1
  377. package/build/shared/models/OpenId4VcJwtIssuer.d.ts +0 -28
  378. package/build/shared/models/OpenId4VcJwtIssuer.js +0 -3
  379. package/build/shared/models/OpenId4VcJwtIssuer.js.map +0 -1
  380. package/build/shared/models/OpenId4VciAuthorizationServerConfig.d.ts +0 -10
  381. package/build/shared/models/OpenId4VciAuthorizationServerConfig.js +0 -3
  382. package/build/shared/models/OpenId4VciAuthorizationServerConfig.js.map +0 -1
  383. package/build/shared/models/OpenId4VciCredentialFormatProfile.d.ts +0 -7
  384. package/build/shared/models/OpenId4VciCredentialFormatProfile.js +0 -12
  385. package/build/shared/models/OpenId4VciCredentialFormatProfile.js.map +0 -1
  386. package/build/shared/models/index.d.ts +0 -24
  387. package/build/shared/models/index.js +0 -25
  388. package/build/shared/models/index.js.map +0 -1
  389. package/build/shared/router/context.d.ts +0 -17
  390. package/build/shared/router/context.js +0 -76
  391. package/build/shared/router/context.js.map +0 -1
  392. package/build/shared/router/express.d.ts +0 -2
  393. package/build/shared/router/express.js +0 -15
  394. package/build/shared/router/express.js.map +0 -1
  395. package/build/shared/router/express.native.d.ts +0 -1
  396. package/build/shared/router/express.native.js +0 -7
  397. package/build/shared/router/express.native.js.map +0 -1
  398. package/build/shared/router/index.d.ts +0 -3
  399. package/build/shared/router/index.js +0 -20
  400. package/build/shared/router/index.js.map +0 -1
  401. package/build/shared/router/tenants.d.ts +0 -13
  402. package/build/shared/router/tenants.js +0 -49
  403. package/build/shared/router/tenants.js.map +0 -1
  404. package/build/shared/transform.d.ts +0 -5
  405. package/build/shared/transform.js +0 -73
  406. package/build/shared/transform.js.map +0 -1
  407. package/build/shared/utils.d.ts +0 -22
  408. package/build/shared/utils.js +0 -154
  409. package/build/shared/utils.js.map +0 -1
@@ -0,0 +1,751 @@
1
+ import { getSupportedJwaSignatureAlgorithms } from "../shared/utils.mjs";
2
+ import { getOid4vcCallbacks } from "../shared/callbacks.mjs";
3
+ import { getOfferedCredentials, getScopesFromCredentialConfigurationsSupported } from "../shared/issuerMetadataUtils.mjs";
4
+ import { OpenId4VciCredentialFormatProfile } from "../shared/models/OpenId4VciCredentialFormatProfile.mjs";
5
+ import "../shared/index.mjs";
6
+ import { openId4VciSupportedCredentialFormats } from "./OpenId4VciHolderServiceOptions.mjs";
7
+ import { __decorateMetadata } from "../_virtual/_@oxc-project_runtime@0.99.0/helpers/decorateMetadata.mjs";
8
+ import { __decorateParam } from "../_virtual/_@oxc-project_runtime@0.99.0/helpers/decorateParam.mjs";
9
+ import { __decorate } from "../_virtual/_@oxc-project_runtime@0.99.0/helpers/decorate.mjs";
10
+ import { AgentContext, CredoError, DidsApi, InjectionSymbols, Kms, Mdoc, MdocApi, MdocRecord, SdJwtVcApi, SdJwtVcRecord, SignatureSuiteRegistry, TypedArrayEncoder, W3cCredentialRecord, W3cCredentialService, W3cJsonLdCredentialService, W3cJsonLdVerifiableCredential, W3cJwtVerifiableCredential, W3cV2CredentialRecord, W3cV2CredentialService, W3cV2SdJwtVerifiableCredential, inject, injectable, parseDid, replaceError } from "@credo-ts/core";
11
+ import { Oauth2Client, authorizationCodeGrantIdentifier, clientAuthenticationAnonymous, clientAuthenticationClientAttestationJwt, clientAuthenticationNone, getAuthorizationServerMetadataFromList, preAuthorizedCodeGrantIdentifier, refreshTokenGrantIdentifier } from "@openid4vc/oauth2";
12
+ import { AuthorizationFlow, Openid4vciClient, Openid4vciDraftVersion, Openid4vciRetrieveCredentialsError, determineAuthorizationServerForCredentialOffer, parseKeyAttestationJwt } from "@openid4vc/openid4vci";
13
+
14
+ //#region src/openid4vc-holder/OpenId4VciHolderService.ts
15
+ var _ref, _ref2;
16
+ let OpenId4VciHolderService = class OpenId4VciHolderService$1 {
17
+ constructor(logger, w3cCredentialService, w3cV2CredentialService) {
18
+ this.w3cCredentialService = w3cCredentialService;
19
+ this.w3cV2CredentialService = w3cV2CredentialService;
20
+ this.logger = logger;
21
+ }
22
+ async resolveIssuerMetadata(agentContext, credentialIssuer) {
23
+ const metadata = await this.getClient(agentContext).resolveIssuerMetadata(credentialIssuer);
24
+ this.logger.debug("fetched credential issuer metadata", { metadata });
25
+ return metadata;
26
+ }
27
+ async resolveCredentialOffer(agentContext, credentialOffer) {
28
+ const client = this.getClient(agentContext);
29
+ const credentialOfferObject = await client.resolveCredentialOffer(credentialOffer);
30
+ const metadata = await client.resolveIssuerMetadata(credentialOfferObject.credential_issuer);
31
+ this.logger.debug("fetched credential offer and issuer metadata", {
32
+ metadata,
33
+ credentialOfferObject
34
+ });
35
+ return {
36
+ metadata,
37
+ offeredCredentialConfigurations: getOfferedCredentials(credentialOfferObject.credential_configuration_ids, metadata.knownCredentialConfigurations, { ignoreNotFoundIds: true }),
38
+ credentialOfferPayload: credentialOfferObject
39
+ };
40
+ }
41
+ async resolveAuthorizationRequest(agentContext, resolvedCredentialOffer, authCodeFlowOptions) {
42
+ const { clientId, redirectUri } = authCodeFlowOptions;
43
+ const { metadata, credentialOfferPayload, offeredCredentialConfigurations } = resolvedCredentialOffer;
44
+ const oauth2Client = this.getOauth2Client(agentContext);
45
+ const client = this.getClient(agentContext, {
46
+ clientId: authCodeFlowOptions.clientId,
47
+ clientAttestation: authCodeFlowOptions.walletAttestationJwt
48
+ });
49
+ const scope = authCodeFlowOptions.scope ?? getScopesFromCredentialConfigurationsSupported(offeredCredentialConfigurations);
50
+ if (!credentialOfferPayload.grants?.[authorizationCodeGrantIdentifier]) throw new CredoError(`Provided credential offer does not include the 'authorization_code' grant.`);
51
+ const authorizationCodeGrant = credentialOfferPayload.grants[authorizationCodeGrantIdentifier];
52
+ const authorizationServer = determineAuthorizationServerForCredentialOffer({
53
+ issuerMetadata: metadata,
54
+ grantAuthorizationServer: authorizationCodeGrant.authorization_server
55
+ });
56
+ const authorizationServerMetadata = getAuthorizationServerMetadataFromList(metadata.authorizationServers, authorizationServer);
57
+ const isDpopSupported = oauth2Client.isDpopSupported({ authorizationServerMetadata });
58
+ const dpop = isDpopSupported.supported ? await this.getDpopOptions(agentContext, { dpopSigningAlgValuesSupported: isDpopSupported.dpopSigningAlgValuesSupported }) : void 0;
59
+ const authorizationResult = await client.initiateAuthorization({
60
+ clientId,
61
+ issuerMetadata: metadata,
62
+ credentialOffer: credentialOfferPayload,
63
+ scope: scope.join(" "),
64
+ redirectUri,
65
+ dpop
66
+ });
67
+ if (authorizationResult.authorizationFlow === AuthorizationFlow.PresentationDuringIssuance) return {
68
+ authorizationFlow: AuthorizationFlow.PresentationDuringIssuance,
69
+ openid4vpRequestUrl: authorizationResult.openid4vpRequestUrl,
70
+ authSession: authorizationResult.authSession,
71
+ dpop: dpop ? {
72
+ alg: dpop.signer.alg,
73
+ jwk: Kms.PublicJwk.fromUnknown(dpop.signer.publicJwk)
74
+ } : void 0
75
+ };
76
+ return {
77
+ authorizationFlow: AuthorizationFlow.Oauth2Redirect,
78
+ codeVerifier: authorizationResult.pkce?.codeVerifier,
79
+ authorizationRequestUrl: authorizationResult.authorizationRequestUrl,
80
+ dpop: dpop ? {
81
+ alg: dpop.signer.alg,
82
+ jwk: Kms.PublicJwk.fromUnknown(dpop.signer.publicJwk)
83
+ } : void 0
84
+ };
85
+ }
86
+ async sendNotification(agentContext, options) {
87
+ await this.getClient(agentContext).sendNotification({
88
+ accessToken: options.accessToken,
89
+ dpop: options.dpop ? await this.getDpopOptions(agentContext, {
90
+ ...options.dpop,
91
+ dpopSigningAlgValuesSupported: [options.dpop.alg]
92
+ }) : void 0,
93
+ issuerMetadata: options.metadata,
94
+ notification: {
95
+ event: options.notificationEvent,
96
+ notificationId: options.notificationId
97
+ }
98
+ });
99
+ }
100
+ async getDpopOptions(agentContext, { jwk, dpopSigningAlgValuesSupported, nonce }) {
101
+ const kms = agentContext.resolve(Kms.KeyManagementApi);
102
+ if (jwk) {
103
+ const alg$1 = dpopSigningAlgValuesSupported.find((alg$2) => jwk.supportedSignatureAlgorithms.includes(alg$2));
104
+ if (!alg$1) throw new CredoError(`No supported dpop signature algorithms found in dpop_signing_alg_values_supported '${dpopSigningAlgValuesSupported.join(", ")}' matching jwk ${jwk.jwkTypeHumanDescription}`);
105
+ return {
106
+ signer: {
107
+ method: "jwk",
108
+ alg: alg$1,
109
+ publicJwk: jwk.toJson()
110
+ },
111
+ nonce
112
+ };
113
+ }
114
+ const alg = dpopSigningAlgValuesSupported.find((algorithm) => {
115
+ try {
116
+ Kms.PublicJwk.supportedPublicJwkClassForSignatureAlgorithm(algorithm);
117
+ return kms.supportedBackendsForOperation({
118
+ operation: "sign",
119
+ algorithm
120
+ }).length > 0;
121
+ } catch {
122
+ return false;
123
+ }
124
+ });
125
+ if (!alg) throw new CredoError(`No supported dpop signature algorithms found in dpop_signing_alg_values_supported '${dpopSigningAlgValuesSupported.join(", ")}'`);
126
+ return {
127
+ signer: {
128
+ method: "jwk",
129
+ alg,
130
+ publicJwk: (await kms.createKeyForSignatureAlgorithm({ algorithm: alg })).publicJwk
131
+ },
132
+ nonce
133
+ };
134
+ }
135
+ async retrieveAuthorizationCodeUsingPresentation(agentContext, options) {
136
+ const client = this.getClient(agentContext, { clientAttestation: options.walletAttestationJwt });
137
+ const dpop = options.dpop ? await this.getDpopOptions(agentContext, {
138
+ ...options.dpop,
139
+ dpopSigningAlgValuesSupported: [options.dpop.alg]
140
+ }) : void 0;
141
+ const { authorizationChallengeResponse, dpop: dpopResult } = await client.retrieveAuthorizationCodeUsingPresentation({
142
+ authSession: options.authSession,
143
+ presentationDuringIssuanceSession: options.presentationDuringIssuanceSession,
144
+ credentialOffer: options.resolvedCredentialOffer.credentialOfferPayload,
145
+ issuerMetadata: options.resolvedCredentialOffer.metadata,
146
+ dpop
147
+ });
148
+ return {
149
+ authorizationCode: authorizationChallengeResponse.authorization_code,
150
+ dpop: dpop ? {
151
+ ...dpopResult,
152
+ alg: dpop.signer.alg,
153
+ jwk: Kms.PublicJwk.fromUnknown(dpop.signer.publicJwk)
154
+ } : void 0
155
+ };
156
+ }
157
+ async requestAccessToken(agentContext, options) {
158
+ const { metadata, credentialOfferPayload } = options.resolvedCredentialOffer;
159
+ const client = this.getClient(agentContext, {
160
+ clientAttestation: options.walletAttestationJwt,
161
+ clientId: "clientId" in options ? options.clientId : void 0
162
+ });
163
+ const oauth2Client = this.getOauth2Client(agentContext);
164
+ const authorizationServer = options.code ? credentialOfferPayload.grants?.authorization_code?.authorization_server : credentialOfferPayload.grants?.[preAuthorizedCodeGrantIdentifier]?.authorization_server;
165
+ const authorizationServerMetadata = getAuthorizationServerMetadataFromList(metadata.authorizationServers, authorizationServer ?? metadata.authorizationServers[0].issuer);
166
+ const isDpopSupported = oauth2Client.isDpopSupported({ authorizationServerMetadata });
167
+ const dpop = options.dpop ? await this.getDpopOptions(agentContext, {
168
+ ...options.dpop,
169
+ dpopSigningAlgValuesSupported: [options.dpop.alg]
170
+ }) : isDpopSupported.supported ? await this.getDpopOptions(agentContext, { dpopSigningAlgValuesSupported: isDpopSupported.dpopSigningAlgValuesSupported }) : void 0;
171
+ const result = options.code ? await client.retrieveAuthorizationCodeAccessTokenFromOffer({
172
+ issuerMetadata: metadata,
173
+ credentialOffer: credentialOfferPayload,
174
+ authorizationCode: options.code,
175
+ dpop,
176
+ pkceCodeVerifier: options.codeVerifier,
177
+ redirectUri: options.redirectUri
178
+ }) : await client.retrievePreAuthorizedCodeAccessTokenFromOffer({
179
+ credentialOffer: credentialOfferPayload,
180
+ issuerMetadata: metadata,
181
+ dpop,
182
+ txCode: options.txCode
183
+ });
184
+ return {
185
+ ...result,
186
+ dpop: dpop ? {
187
+ ...result.dpop,
188
+ alg: dpop.signer.alg,
189
+ jwk: Kms.PublicJwk.fromUnknown(dpop.signer.publicJwk)
190
+ } : void 0
191
+ };
192
+ }
193
+ async refreshAccessToken(agentContext, options) {
194
+ const oauth2Client = this.getOauth2Client(agentContext, {
195
+ clientAttestation: options.walletAttestationJwt,
196
+ clientId: options.clientId
197
+ });
198
+ const dpop = options.dpop ? await this.getDpopOptions(agentContext, {
199
+ ...options.dpop,
200
+ dpopSigningAlgValuesSupported: [options.dpop.alg]
201
+ }) : void 0;
202
+ const authorizationServerMetadata = getAuthorizationServerMetadataFromList(options.issuerMetadata.authorizationServers, options.authorizationServer ?? options.issuerMetadata.authorizationServers[0].issuer);
203
+ const result = await oauth2Client.retrieveRefreshTokenAccessToken({
204
+ authorizationServerMetadata,
205
+ refreshToken: options.refreshToken,
206
+ dpop,
207
+ resource: options.issuerMetadata.credentialIssuer.credential_issuer
208
+ });
209
+ return {
210
+ ...result,
211
+ dpop: dpop ? {
212
+ ...result.dpop,
213
+ alg: dpop.signer.alg,
214
+ jwk: Kms.PublicJwk.fromUnknown(dpop.signer.publicJwk)
215
+ } : void 0
216
+ };
217
+ }
218
+ async acceptCredentialOffer(agentContext, options) {
219
+ const { resolvedCredentialOffer, acceptCredentialOfferOptions } = options;
220
+ const { metadata, offeredCredentialConfigurations } = resolvedCredentialOffer;
221
+ const { credentialConfigurationIds, credentialBindingResolver, verifyCredentialStatus, allowedProofOfPossessionSignatureAlgorithms } = acceptCredentialOfferOptions;
222
+ const client = this.getClient(agentContext);
223
+ if (credentialConfigurationIds?.length === 0) throw new CredoError(`'credentialConfigurationIds' may not be empty`);
224
+ const receivedCredentials = [];
225
+ const deferredCredentials = [];
226
+ let cNonce = options.cNonce;
227
+ let dpopNonce = options.dpop?.nonce;
228
+ const credentialConfigurationsToRequest = credentialConfigurationIds?.map((id) => {
229
+ if (!offeredCredentialConfigurations[id]) throw new CredoError(`Credential to request '${id}' is not present in offered credentials. Offered credentials are ${Object.keys(offeredCredentialConfigurations).join(", ")}`);
230
+ return [id, offeredCredentialConfigurations[id]];
231
+ }) ?? Object.entries(offeredCredentialConfigurations);
232
+ if (!cNonce) if (metadata.credentialIssuer.nonce_endpoint) cNonce = (await client.requestNonce({ issuerMetadata: metadata })).c_nonce;
233
+ else await client.retrieveCredentials({
234
+ issuerMetadata: metadata,
235
+ accessToken: options.accessToken,
236
+ credentialConfigurationId: credentialConfigurationsToRequest[0][0],
237
+ dpop: options.dpop ? await this.getDpopOptions(agentContext, {
238
+ ...options.dpop,
239
+ nonce: dpopNonce,
240
+ dpopSigningAlgValuesSupported: [options.dpop.alg]
241
+ }) : void 0
242
+ }).catch((e) => {
243
+ if (e instanceof Openid4vciRetrieveCredentialsError && e.response.credentialErrorResponseResult?.success) cNonce = e.response.credentialErrorResponseResult.data.c_nonce;
244
+ });
245
+ if (!cNonce) throw new CredoError("No cNonce provided and unable to acquire cNonce from the credential issuer");
246
+ for (const [offeredCredentialId, offeredCredentialConfiguration] of credentialConfigurationsToRequest) {
247
+ const { proofs, jwkThumbprintKmsKeyIdMapping } = await this.getCredentialRequestOptions(agentContext, {
248
+ allowedProofOfPossessionAlgorithms: allowedProofOfPossessionSignatureAlgorithms ?? getSupportedJwaSignatureAlgorithms(agentContext),
249
+ metadata,
250
+ offeredCredential: {
251
+ id: offeredCredentialId,
252
+ configuration: offeredCredentialConfiguration
253
+ },
254
+ clientId: options.clientId,
255
+ cNonce,
256
+ credentialBindingResolver
257
+ });
258
+ this.logger.debug("Generated credential request proof of possession", { proofs });
259
+ const proof = (metadata.originalDraftVersion === Openid4vciDraftVersion.Draft11 || metadata.originalDraftVersion === Openid4vciDraftVersion.Draft14 && metadata.credentialIssuer.batch_credential_issuance === void 0) && proofs.jwt?.length === 1 ? {
260
+ proof_type: "jwt",
261
+ jwt: proofs.jwt[0]
262
+ } : void 0;
263
+ const { credentialResponse, dpop } = await client.retrieveCredentials({
264
+ issuerMetadata: metadata,
265
+ accessToken: options.accessToken,
266
+ credentialConfigurationId: offeredCredentialId,
267
+ dpop: options.dpop ? await this.getDpopOptions(agentContext, {
268
+ ...options.dpop,
269
+ nonce: dpopNonce,
270
+ dpopSigningAlgValuesSupported: [options.dpop.alg]
271
+ }) : void 0,
272
+ proofs: !proof ? proofs : void 0,
273
+ proof
274
+ });
275
+ cNonce = credentialResponse.c_nonce;
276
+ dpopNonce = dpop?.nonce;
277
+ if (credentialResponse.transaction_id) {
278
+ const deferredCredential = {
279
+ credentialConfigurationId: offeredCredentialId,
280
+ credentialConfiguration: offeredCredentialConfiguration,
281
+ transactionId: credentialResponse.transaction_id,
282
+ interval: credentialResponse.interval,
283
+ notificationId: credentialResponse.notification_id,
284
+ jwkThumbprintKmsKeyIdMapping
285
+ };
286
+ this.logger.debug("received deferred credential", deferredCredential);
287
+ deferredCredentials.push(deferredCredential);
288
+ } else {
289
+ const credential = await this.handleCredentialResponse(agentContext, credentialResponse, {
290
+ verifyCredentialStatus: verifyCredentialStatus ?? false,
291
+ format: offeredCredentialConfiguration.format,
292
+ credentialConfigurationId: offeredCredentialId,
293
+ credentialConfiguration: offeredCredentialConfiguration,
294
+ jwkThumbprintKmsKeyIdMapping
295
+ });
296
+ const firstCredential = credential.record.firstCredential;
297
+ this.logger.debug("received credential response", {
298
+ firstCredential: firstCredential instanceof Mdoc ? {
299
+ issuerSignedNamespaces: firstCredential.issuerSignedNamespaces,
300
+ base64Url: firstCredential.base64Url
301
+ } : firstCredential,
302
+ totalNumberOfCredentials: credential.record.credentialInstances.length
303
+ });
304
+ receivedCredentials.push(credential);
305
+ }
306
+ }
307
+ return {
308
+ credentials: receivedCredentials,
309
+ deferredCredentials,
310
+ dpop: options.dpop ? {
311
+ ...options.dpop,
312
+ nonce: dpopNonce
313
+ } : void 0,
314
+ cNonce
315
+ };
316
+ }
317
+ async retrieveDeferredCredentials(agentContext, options) {
318
+ const { issuerMetadata, transactionId, credentialConfigurationId, credentialConfiguration, verifyCredentialStatus, accessToken, jwkThumbprintKmsKeyIdMapping } = options;
319
+ const client = this.getClient(agentContext);
320
+ const receivedCredentials = [];
321
+ const deferredCredentials = [];
322
+ let dpopNonce = options.dpop?.nonce;
323
+ const { deferredCredentialResponse, dpop } = await client.retrieveDeferredCredentials({
324
+ issuerMetadata,
325
+ accessToken,
326
+ transactionId,
327
+ dpop: options.dpop ? await this.getDpopOptions(agentContext, {
328
+ ...options.dpop,
329
+ nonce: dpopNonce,
330
+ dpopSigningAlgValuesSupported: [options.dpop.alg]
331
+ }) : void 0
332
+ });
333
+ dpopNonce = dpop?.nonce;
334
+ if (deferredCredentialResponse.interval) {
335
+ const deferredCredential = {
336
+ credentialConfigurationId,
337
+ credentialConfiguration,
338
+ transactionId,
339
+ interval: deferredCredentialResponse.interval,
340
+ notificationId: deferredCredentialResponse.notification_id
341
+ };
342
+ this.logger.debug("received deferred credential", deferredCredential);
343
+ deferredCredentials.push(deferredCredential);
344
+ } else {
345
+ const credential = await this.handleCredentialResponse(agentContext, deferredCredentialResponse, {
346
+ verifyCredentialStatus: verifyCredentialStatus ?? false,
347
+ format: credentialConfiguration.format,
348
+ credentialConfigurationId,
349
+ credentialConfiguration,
350
+ jwkThumbprintKmsKeyIdMapping
351
+ });
352
+ const firstCredential = credential.record.firstCredential;
353
+ this.logger.debug("received credential response", {
354
+ firstCredential: firstCredential instanceof Mdoc ? {
355
+ issuerSignedNamespaces: firstCredential.issuerSignedNamespaces,
356
+ base64Url: firstCredential.base64Url
357
+ } : firstCredential,
358
+ totalNumberOfCredentials: credential.record.credentialInstances.length
359
+ });
360
+ receivedCredentials.push(credential);
361
+ }
362
+ return {
363
+ credentials: receivedCredentials,
364
+ deferredCredentials,
365
+ dpop: options.dpop ? {
366
+ ...options.dpop,
367
+ nonce: dpopNonce
368
+ } : void 0
369
+ };
370
+ }
371
+ /**
372
+ * Get the options for the credential request. Internally this will resolve the proof of possession
373
+ * requirements, and based on that it will call the proofOfPossessionVerificationMethodResolver to
374
+ * allow the caller to select the correct verification method based on the requirements for the proof
375
+ * of possession.
376
+ */
377
+ async getCredentialRequestOptions(agentContext, options) {
378
+ const dids = agentContext.resolve(DidsApi);
379
+ const { allowedProofOfPossessionAlgorithms, offeredCredential } = options;
380
+ const { configuration, id: configurationId } = offeredCredential;
381
+ const supportedJwaSignatureAlgorithms = getSupportedJwaSignatureAlgorithms(agentContext);
382
+ const possibleProofOfPossessionSignatureAlgorithms = allowedProofOfPossessionAlgorithms ? allowedProofOfPossessionAlgorithms.filter((algorithm) => supportedJwaSignatureAlgorithms.includes(algorithm)) : supportedJwaSignatureAlgorithms;
383
+ if (possibleProofOfPossessionSignatureAlgorithms.length === 0) throw new CredoError([
384
+ "No possible proof of possession signature algorithm found.",
385
+ `Signature algorithms supported by the Agent '${supportedJwaSignatureAlgorithms.join(", ")}'`,
386
+ `Allowed Signature algorithms '${allowedProofOfPossessionAlgorithms?.join(", ")}'`
387
+ ].join("\n"));
388
+ const { proofTypes, supportedDidMethods, supportsAllDidMethods, supportsJwk } = this.getProofOfPossessionRequirements(agentContext, {
389
+ credentialToRequest: options.offeredCredential,
390
+ metadata: options.metadata,
391
+ possibleProofOfPossessionSignatureAlgorithms
392
+ });
393
+ const format = configuration.format;
394
+ const supportsAnyMethod = supportedDidMethods !== void 0 || supportsAllDidMethods || supportsJwk;
395
+ const issuerMaxBatchSize = options.metadata.credentialIssuer.batch_credential_issuance?.batch_size ?? 1;
396
+ const credentialBinding = await options.credentialBindingResolver({
397
+ agentContext,
398
+ credentialFormat: format,
399
+ credentialConfigurationId: configurationId,
400
+ credentialConfiguration: configuration,
401
+ metadata: options.metadata,
402
+ issuerMaxBatchSize,
403
+ proofTypes,
404
+ supportsAllDidMethods,
405
+ supportedDidMethods,
406
+ supportsJwk,
407
+ cNonce: options.cNonce
408
+ });
409
+ const client = this.getClient(agentContext);
410
+ if (credentialBinding.method === "did") {
411
+ if (!proofTypes.jwt) throw new CredoError(`JWT proof type is not supported for configuration '${configurationId}', which is required for did based credential binding.`);
412
+ if (proofTypes.jwt.keyAttestationsRequired) throw new CredoError(`Credential binding returned list of DID urls, but credential configuration '${configurationId}' requires key attestations. Key attestations and DIDs are not compatible.`);
413
+ if (credentialBinding.didUrls.length > issuerMaxBatchSize) throw new CredoError(`Issuer supports issuing a batch of maximum ${issuerMaxBatchSize} credential(s). Binding resolver returned ${credentialBinding.didUrls.length} DID urls. Make sure the returned value does not exceed the max batch issuance.`);
414
+ if (credentialBinding.didUrls.length === 0) throw new CredoError("Credential binding with method did returned empty didUrls list");
415
+ const firstDid = parseDid(credentialBinding.didUrls[0]);
416
+ if (!credentialBinding.didUrls.every((didUrl) => parseDid(didUrl).method === firstDid.method)) throw new CredoError("Expected all did urls for binding method did to use the same did method");
417
+ if (!supportsAllDidMethods && supportedDidMethods !== void 0 && !supportedDidMethods.find((supportedDidMethod) => firstDid.did.startsWith(supportedDidMethod) && supportsAnyMethod)) {
418
+ const supportedDidMethodsString = supportedDidMethods.join(", ");
419
+ throw new CredoError(`Resolved credential binding for proof of possession uses did method '${firstDid.method}', but issuer only supports '${supportedDidMethodsString}'`);
420
+ }
421
+ if (configuration.format === "mso_mdoc") throw new CredoError("Using a did for credential binding is not supported for the 'mso_mdoc' format.");
422
+ const { publicJwk: firstKey } = await dids.resolveVerificationMethodFromCreatedDidRecord(firstDid.didUrl);
423
+ const algorithm = proofTypes.jwt.supportedSignatureAlgorithms.find((algorithm$1) => firstKey.supportedSignatureAlgorithms.includes(algorithm$1));
424
+ if (!algorithm) throw new CredoError(`Credential binding returned did url that points to key '${firstKey.jwkTypeHumanDescription}' that supports signature algorithms ${firstKey.supportedSignatureAlgorithms.join(", ")}, but one of '${proofTypes.jwt.supportedSignatureAlgorithms.join(", ")}' was expected`);
425
+ const keys = await Promise.all(credentialBinding.didUrls.map(async (didUrl, index) => index === 0 ? {
426
+ jwk: firstKey,
427
+ didUrl: firstDid.didUrl
428
+ } : {
429
+ jwk: (await dids.resolveVerificationMethodFromCreatedDidRecord(didUrl)).publicJwk,
430
+ didUrl
431
+ }));
432
+ if (!keys.every((key) => Kms.assymetricJwkKeyTypeMatches(key.jwk.toJson(), firstKey.toJson()))) throw new CredoError("Expected all did urls to point to the same key type");
433
+ return { proofs: { jwt: await Promise.all(keys.map((key) => client.createCredentialRequestJwtProof({
434
+ credentialConfigurationId: configurationId,
435
+ issuerMetadata: options.metadata,
436
+ signer: {
437
+ method: "did",
438
+ didUrl: key.didUrl,
439
+ alg: algorithm,
440
+ kid: key.jwk.keyId
441
+ },
442
+ nonce: options.cNonce,
443
+ clientId: options.clientId
444
+ }).then(({ jwt }) => jwt))) } };
445
+ }
446
+ if (credentialBinding.method === "jwk") {
447
+ if (!supportsJwk && supportsAnyMethod) throw new CredoError(`Resolved credential binding for proof of possession uses jwk, but openid issuer does not support 'jwk' or 'cose_key' cryptographic binding method`);
448
+ if (configuration.format === "jwt_vc_json" || configuration.format === "jwt_vc_json-ld" || configuration.format === "ldp_vc" || configuration.format === "vc+sd-jwt" && !configuration.vct) throw new CredoError(`Using a JWK for credential binding is not supported for the '${configuration.format}' format.`);
449
+ if (!proofTypes.jwt) throw new CredoError(`JWT proof type is not supported for configuration '${configurationId}', which is required for jwk based credential binding.`);
450
+ if (proofTypes.jwt.keyAttestationsRequired) throw new CredoError(`Credential binding returned list of JWK keys, but credential configuration '${configurationId}' requires key attestations. Return a key attestation with binding method 'attestation'.`);
451
+ if (credentialBinding.keys.length > issuerMaxBatchSize) throw new CredoError(`Issuer supports issuing a batch of maximum ${issuerMaxBatchSize} credential(s). Binding resolver returned ${credentialBinding.keys.length} keys. Make sure the returned value does not exceed the max batch issuance.`);
452
+ if (credentialBinding.keys.length === 0) throw new CredoError("Credential binding with method jwk returned empty keys list");
453
+ const firstJwk = credentialBinding.keys[0];
454
+ if (!credentialBinding.keys.every((key) => Kms.assymetricJwkKeyTypeMatches(key.toJson(), firstJwk.toJson()))) throw new CredoError("Expected all keys for binding method jwk to use the same key type");
455
+ const algorithm = proofTypes.jwt.supportedSignatureAlgorithms.find((algorithm$1) => firstJwk.supportedSignatureAlgorithms.includes(algorithm$1));
456
+ if (!algorithm) throw new CredoError(`Credential binding returned jwk that points to key '${firstJwk.jwkTypeHumanDescription}' that supports signature algorithms ${firstJwk.supportedSignatureAlgorithms.join(", ")}, but one of '${proofTypes.jwt.supportedSignatureAlgorithms.join(", ")}' was expected`);
457
+ return {
458
+ jwkThumbprintKmsKeyIdMapping: Object.fromEntries(credentialBinding.keys.map((jwk) => [TypedArrayEncoder.toBase64(jwk.getJwkThumbprint()), jwk.keyId])),
459
+ proofs: { jwt: await Promise.all(credentialBinding.keys.map((jwk) => client.createCredentialRequestJwtProof({
460
+ credentialConfigurationId: configurationId,
461
+ issuerMetadata: options.metadata,
462
+ signer: {
463
+ method: "jwk",
464
+ publicJwk: jwk.toJson(),
465
+ alg: algorithm
466
+ },
467
+ nonce: options.cNonce,
468
+ clientId: options.clientId
469
+ }).then(({ jwt }) => jwt))) }
470
+ };
471
+ }
472
+ if (credentialBinding.method === "attestation") {
473
+ const { payload } = parseKeyAttestationJwt({ keyAttestationJwt: credentialBinding.keyAttestationJwt });
474
+ if (payload.attested_keys.length > issuerMaxBatchSize) throw new CredoError(`Issuer supports issuing a batch of maximum ${issuerMaxBatchSize} credential(s). Binding resolver returned key attestation with ${payload.attested_keys.length} attested keys. Make sure the returned value does not exceed the max batch issuance.`);
475
+ const jwkThumbprintKmsKeyIdMapping = Object.fromEntries(payload.attested_keys.map((jwk) => {
476
+ const jwkInstance = Kms.PublicJwk.fromUnknown(jwk);
477
+ return [TypedArrayEncoder.toBase64(jwkInstance.getJwkThumbprint()), jwkInstance.keyId];
478
+ }));
479
+ if (proofTypes.attestation && payload.nonce) return {
480
+ proofs: { attestation: [credentialBinding.keyAttestationJwt] },
481
+ jwkThumbprintKmsKeyIdMapping
482
+ };
483
+ if (proofTypes.jwt) {
484
+ const nonce = payload.nonce ?? options.cNonce;
485
+ const jwk = Kms.PublicJwk.fromUnknown(payload.attested_keys[0]);
486
+ return {
487
+ jwkThumbprintKmsKeyIdMapping,
488
+ proofs: { jwt: [await client.createCredentialRequestJwtProof({
489
+ credentialConfigurationId: configurationId,
490
+ issuerMetadata: options.metadata,
491
+ signer: {
492
+ method: "jwk",
493
+ publicJwk: payload.attested_keys[0],
494
+ alg: jwk.supportedSignatureAlgorithms[0]
495
+ },
496
+ keyAttestationJwt: credentialBinding.keyAttestationJwt,
497
+ nonce,
498
+ clientId: options.clientId
499
+ }).then(({ jwt }) => jwt)] }
500
+ };
501
+ }
502
+ throw new CredoError(`Unable to create credential request proofs. Configuration supports 'attestation' proof type, but attestation did not contain a 'nonce' value`);
503
+ }
504
+ throw new CredoError(`Unsupported credential binding method ${credentialBinding.method}`);
505
+ }
506
+ /**
507
+ * Get the requirements for creating the proof of possession. Based on the allowed
508
+ * credential formats, the allowed proof of possession signature algorithms, and the
509
+ * credential type, this method will select the best credential format and signature
510
+ * algorithm to use, based on the order of preference.
511
+ */
512
+ getProofOfPossessionRequirements(agentContext, options) {
513
+ const { credentialToRequest, possibleProofOfPossessionSignatureAlgorithms, metadata } = options;
514
+ const { configuration, id: configurationId } = credentialToRequest;
515
+ if (!openId4VciSupportedCredentialFormats.includes(configuration.format)) throw new CredoError([
516
+ `Requested credential with format '${credentialToRequest.configuration.format}',`,
517
+ `for the credential with id '${credentialToRequest.id},`,
518
+ `but the wallet only supports the following formats '${openId4VciSupportedCredentialFormats.join(", ")}'`
519
+ ].join("\n"));
520
+ const signatureSuiteRegistry = agentContext.dependencyManager.resolve(SignatureSuiteRegistry);
521
+ let proofTypesSupported = configuration.proof_types_supported;
522
+ if (!proofTypesSupported) {
523
+ if (metadata.originalDraftVersion !== Openid4vciDraftVersion.Draft11) throw new CredoError(`Credential configuration '${configurationId}' does not specifcy proof_types_supported. Credentials not bound to keys are not supported at the moment`);
524
+ proofTypesSupported = { jwt: { proof_signing_alg_values_supported: possibleProofOfPossessionSignatureAlgorithms } };
525
+ }
526
+ const proofTypes = {
527
+ jwt: void 0,
528
+ attestation: void 0
529
+ };
530
+ for (const [proofType, proofTypeConfig] of Object.entries(proofTypesSupported)) {
531
+ if (proofType !== "jwt" && proofType !== "attestation") continue;
532
+ let signatureAlgorithms = [];
533
+ const proofSigningAlgsSupported = proofTypeConfig?.proof_signing_alg_values_supported;
534
+ if (proofSigningAlgsSupported === void 0) signatureAlgorithms = options.possibleProofOfPossessionSignatureAlgorithms;
535
+ else switch (credentialToRequest.configuration.format) {
536
+ case OpenId4VciCredentialFormatProfile.JwtVcJson:
537
+ case OpenId4VciCredentialFormatProfile.JwtVcJsonLd:
538
+ case OpenId4VciCredentialFormatProfile.SdJwtVc:
539
+ case OpenId4VciCredentialFormatProfile.SdJwtDc:
540
+ case OpenId4VciCredentialFormatProfile.MsoMdoc:
541
+ signatureAlgorithms = options.possibleProofOfPossessionSignatureAlgorithms.filter((signatureAlgorithm) => proofSigningAlgsSupported.includes(signatureAlgorithm));
542
+ break;
543
+ case OpenId4VciCredentialFormatProfile.LdpVc:
544
+ signatureAlgorithms = options.possibleProofOfPossessionSignatureAlgorithms.filter((signatureAlgorithm) => {
545
+ try {
546
+ const jwkClass = Kms.PublicJwk.supportedPublicJwkClassForSignatureAlgorithm(signatureAlgorithm);
547
+ const matchingSuites = signatureSuiteRegistry.getAllByPublicJwkType(jwkClass);
548
+ if (matchingSuites.length === 0) return false;
549
+ return proofSigningAlgsSupported.includes(matchingSuites[0].proofType);
550
+ } catch {
551
+ return false;
552
+ }
553
+ });
554
+ break;
555
+ default: throw new CredoError("Unsupported credential format.");
556
+ }
557
+ proofTypes[proofType] = {
558
+ supportedSignatureAlgorithms: signatureAlgorithms,
559
+ keyAttestationsRequired: proofTypeConfig.key_attestations_required ? {
560
+ keyStorage: proofTypeConfig.key_attestations_required.key_storage,
561
+ userAuthentication: proofTypeConfig.key_attestations_required.user_authentication
562
+ } : void 0
563
+ };
564
+ }
565
+ const { jwt, attestation } = proofTypes;
566
+ if (!jwt && !attestation) throw new CredoError(`Unsupported proof type(s) ${Object.keys(proofTypesSupported).join(", ")}. Supported proof type(s) are: jwt, attestation`);
567
+ const issuerSupportedBindingMethods = credentialToRequest.configuration.cryptographic_binding_methods_supported;
568
+ const supportsAllDidMethods = issuerSupportedBindingMethods?.includes("did") ?? false;
569
+ const supportedDidMethods = issuerSupportedBindingMethods?.filter((method) => method.startsWith("did:"));
570
+ const supportsCoseKey = issuerSupportedBindingMethods?.includes("cose_key") ?? false;
571
+ return {
572
+ proofTypes,
573
+ supportedDidMethods,
574
+ supportsAllDidMethods,
575
+ supportsJwk: issuerSupportedBindingMethods?.includes("jwk") || supportsCoseKey
576
+ };
577
+ }
578
+ async handleCredentialResponse(agentContext, credentialResponse, options) {
579
+ const { verifyCredentialStatus, credentialConfigurationId, credentialConfiguration } = options;
580
+ this.logger.debug("Credential response", credentialResponse);
581
+ const credentials = credentialResponse.credentials ? credentialResponse.credentials.every((c) => typeof c === "object" && c !== null && "credential" in c) ? credentialResponse.credentials.map((c) => c.credential) : credentialResponse.credentials : credentialResponse.credential ? [credentialResponse.credential] : void 0;
582
+ if (!credentials) throw new CredoError(`Credential response returned neither 'credentials' nor 'credential' parameter.`);
583
+ const notificationId = credentialResponse.notification_id;
584
+ const format = options.format;
585
+ if (format === OpenId4VciCredentialFormatProfile.SdJwtVc || format === OpenId4VciCredentialFormatProfile.SdJwtDc) {
586
+ if (!credentials.every((c) => typeof c === "string")) throw new CredoError(`Received credential(s) of format ${format}, but not all credential(s) are a string. ${JSON.stringify(credentials)}`);
587
+ if (format === OpenId4VciCredentialFormatProfile.SdJwtDc || credentialConfiguration.vct) {
588
+ const sdJwtVcApi = agentContext.dependencyManager.resolve(SdJwtVcApi);
589
+ const verificationResults = await Promise.all(credentials.map((compactSdJwtVc, index) => sdJwtVcApi.verify({
590
+ compactSdJwtVc,
591
+ fetchTypeMetadata: index === 0
592
+ })));
593
+ if (!verificationResults.every((result$1) => result$1.isValid)) {
594
+ agentContext.config.logger.error("Failed to validate credential(s)", { verificationResults });
595
+ throw new CredoError(`Failed to validate sd-jwt-vc credentials. Results = ${JSON.stringify(verificationResults, replaceError)}`);
596
+ }
597
+ return {
598
+ record: new SdJwtVcRecord({
599
+ credentialInstances: verificationResults.map((r) => ({
600
+ compactSdJwtVc: r.sdJwtVc.compact,
601
+ kmsKeyId: r.sdJwtVc.kmsKeyId
602
+ })),
603
+ typeMetadata: verificationResults[0].sdJwtVc.typeMetadata
604
+ }),
605
+ notificationId,
606
+ credentialConfigurationId,
607
+ credentialConfiguration
608
+ };
609
+ }
610
+ const result = await Promise.all(credentials.map(async (c) => {
611
+ const credential = W3cV2SdJwtVerifiableCredential.fromCompact(c);
612
+ return {
613
+ credential,
614
+ result: await this.w3cV2CredentialService.verifyCredential(agentContext, { credential })
615
+ };
616
+ }));
617
+ if (!result.every((c) => c.result.isValid)) {
618
+ agentContext.config.logger.error("Failed to validate credentials", { result });
619
+ throw new CredoError(`Failed to validate credential, error = ${result.map((e) => e.result.error?.message).filter(Boolean).join(", ")}`);
620
+ }
621
+ return {
622
+ record: new W3cV2CredentialRecord({ credentialInstances: result.map((r) => ({ credential: r.credential.encoded })) }),
623
+ notificationId,
624
+ credentialConfigurationId,
625
+ credentialConfiguration
626
+ };
627
+ }
628
+ if (options.format === OpenId4VciCredentialFormatProfile.JwtVcJson || options.format === OpenId4VciCredentialFormatProfile.JwtVcJsonLd) {
629
+ if (!credentials.every((c) => typeof c === "string")) throw new CredoError(`Received credential(s) of format ${format}, but not all credential(s) are a string. ${JSON.stringify(credentials)}`);
630
+ const result = await Promise.all(credentials.map(async (c) => {
631
+ const credential = W3cJwtVerifiableCredential.fromSerializedJwt(c);
632
+ return {
633
+ credential,
634
+ result: await this.w3cCredentialService.verifyCredential(agentContext, {
635
+ credential,
636
+ verifyCredentialStatus
637
+ })
638
+ };
639
+ }));
640
+ if (!result.every((c) => c.result.isValid)) {
641
+ agentContext.config.logger.error("Failed to validate credentials", { result });
642
+ throw new CredoError(`Failed to validate credential, error = ${result.map((e) => e.result.error?.message).filter(Boolean).join(", ")}`);
643
+ }
644
+ return {
645
+ record: new W3cCredentialRecord({
646
+ credentialInstances: result.map((r) => ({ credential: r.credential.encoded })),
647
+ tags: {}
648
+ }),
649
+ notificationId,
650
+ credentialConfigurationId,
651
+ credentialConfiguration
652
+ };
653
+ }
654
+ if (format === OpenId4VciCredentialFormatProfile.LdpVc) {
655
+ if (!credentials.every((c) => typeof c === "object" && c !== null)) throw new CredoError(`Received credential(s) of format ${format}, but not all credential(s) are an object. ${JSON.stringify(credentials)}`);
656
+ const result = await Promise.all(credentials.map(async (c) => {
657
+ const credential = W3cJsonLdVerifiableCredential.fromJson(c);
658
+ return {
659
+ credential,
660
+ result: await this.w3cCredentialService.verifyCredential(agentContext, {
661
+ credential,
662
+ verifyCredentialStatus
663
+ })
664
+ };
665
+ }));
666
+ if (!result.every((c) => c.result.isValid)) {
667
+ agentContext.config.logger.error("Failed to validate credentials", { result });
668
+ throw new CredoError(`Failed to validate credential, error = ${result.map((e) => e.result.error?.message).filter(Boolean).join(", ")}`);
669
+ }
670
+ const w3cJsonLdCredentialService = agentContext.resolve(W3cJsonLdCredentialService);
671
+ return {
672
+ record: new W3cCredentialRecord({
673
+ credentialInstances: result.map((r) => ({ credential: r.credential.encoded })),
674
+ tags: { expandedTypes: await w3cJsonLdCredentialService.getExpandedTypesForCredential(agentContext, result[0].credential) }
675
+ }),
676
+ notificationId,
677
+ credentialConfigurationId,
678
+ credentialConfiguration
679
+ };
680
+ }
681
+ if (format === OpenId4VciCredentialFormatProfile.MsoMdoc) {
682
+ if (!credentials.every((c) => typeof c === "string")) throw new CredoError(`Received credential(s) of format ${format}, but not all credential(s) are a string. ${JSON.stringify(credentials)}`);
683
+ const mdocApi = agentContext.dependencyManager.resolve(MdocApi);
684
+ const result = await Promise.all(credentials.map(async (credential) => {
685
+ const mdoc = Mdoc.fromBase64Url(credential);
686
+ const result$1 = await mdocApi.verify(mdoc, {});
687
+ const jwkThumbprint = TypedArrayEncoder.toBase64(mdoc.deviceKey.getJwkThumbprint());
688
+ const kmsKeyId = options.jwkThumbprintKmsKeyIdMapping?.[jwkThumbprint];
689
+ if (!kmsKeyId) throw new CredoError(`Missing kmsKeyId for jwk with thumbprint ${jwkThumbprint}. A credential was issued for a key that was not in the credential request.`);
690
+ return {
691
+ result: result$1,
692
+ mdoc,
693
+ kmsKeyId
694
+ };
695
+ }));
696
+ if (!result.every((r) => r.result.isValid)) {
697
+ agentContext.config.logger.error("Failed to validate credentials", { result });
698
+ throw new CredoError(`Failed to validate mdoc credential(s). \n - ${result.map((r, i) => r.result.isValid ? void 0 : `(${i}) ${r.result.error}`).filter(Boolean).join("\n - ")}`);
699
+ }
700
+ return {
701
+ record: new MdocRecord({ credentialInstances: result.map((c) => ({
702
+ issuerSignedBase64Url: c.mdoc.base64Url,
703
+ kmsKeyId: c.kmsKeyId
704
+ })) }),
705
+ notificationId,
706
+ credentialConfigurationId,
707
+ credentialConfiguration
708
+ };
709
+ }
710
+ throw new CredoError(`Unsupported credential format ${options.format}`);
711
+ }
712
+ getCallbacks(agentContext, { clientAttestation, clientId } = {}) {
713
+ const callbacks = getOid4vcCallbacks(agentContext);
714
+ return {
715
+ ...callbacks,
716
+ clientAuthentication: (options) => {
717
+ const { authorizationServerMetadata, url, body } = options;
718
+ const clientAttestationSupported = this.getOauth2Client(agentContext).isClientAttestationSupported({ authorizationServerMetadata });
719
+ if (clientAttestation && clientAttestationSupported) return clientAuthenticationClientAttestationJwt({
720
+ clientAttestationJwt: clientAttestation,
721
+ callbacks
722
+ })(options);
723
+ if (url === authorizationServerMetadata.token_endpoint && authorizationServerMetadata["pre-authorized_grant_anonymous_access_supported"] && body.grant_type === preAuthorizedCodeGrantIdentifier) return clientAuthenticationAnonymous()(options);
724
+ if (clientId) return clientAuthenticationNone({ clientId })(options);
725
+ if (url === authorizationServerMetadata.token_endpoint && body.grant_type === preAuthorizedCodeGrantIdentifier) return clientAuthenticationAnonymous()(options);
726
+ if (body.grant_type === refreshTokenGrantIdentifier) return clientAuthenticationAnonymous()(options);
727
+ if (url === authorizationServerMetadata.authorization_challenge_endpoint && body.auth_session) return clientAuthenticationAnonymous()(options);
728
+ throw new CredoError("Unable to perform client authentication.");
729
+ }
730
+ };
731
+ }
732
+ getClient(agentContext, options = {}) {
733
+ return new Openid4vciClient({ callbacks: this.getCallbacks(agentContext, options) });
734
+ }
735
+ getOauth2Client(agentContext, options) {
736
+ return new Oauth2Client({ callbacks: options ? this.getCallbacks(agentContext, options) : getOid4vcCallbacks(agentContext) });
737
+ }
738
+ };
739
+ OpenId4VciHolderService = __decorate([
740
+ injectable(),
741
+ __decorateParam(0, inject(InjectionSymbols.Logger)),
742
+ __decorateMetadata("design:paramtypes", [
743
+ Object,
744
+ typeof (_ref = typeof W3cCredentialService !== "undefined" && W3cCredentialService) === "function" ? _ref : Object,
745
+ typeof (_ref2 = typeof W3cV2CredentialService !== "undefined" && W3cV2CredentialService) === "function" ? _ref2 : Object
746
+ ])
747
+ ], OpenId4VciHolderService);
748
+
749
+ //#endregion
750
+ export { OpenId4VciHolderService };
751
+ //# sourceMappingURL=OpenId4VciHolderService.mjs.map