@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.
- package/build/OpenId4VcApi.d.mts +24 -0
- package/build/OpenId4VcApi.d.mts.map +1 -0
- package/build/OpenId4VcApi.mjs +35 -0
- package/build/OpenId4VcApi.mjs.map +1 -0
- package/build/OpenId4VcModule.d.mts +30 -0
- package/build/OpenId4VcModule.d.mts.map +1 -0
- package/build/OpenId4VcModule.mjs +42 -0
- package/build/OpenId4VcModule.mjs.map +1 -0
- package/build/OpenId4VcModuleConfig.d.mts +44 -0
- package/build/OpenId4VcModuleConfig.d.mts.map +1 -0
- package/build/OpenId4VcModuleConfig.mjs +24 -0
- package/build/OpenId4VcModuleConfig.mjs.map +1 -0
- package/build/_virtual/_@oxc-project_runtime@0.99.0/helpers/decorate.mjs +10 -0
- package/build/_virtual/_@oxc-project_runtime@0.99.0/helpers/decorateMetadata.mjs +7 -0
- package/build/_virtual/_@oxc-project_runtime@0.99.0/helpers/decorateParam.mjs +9 -0
- package/build/index.d.mts +42 -0
- package/build/index.mjs +37 -0
- package/build/openid4vc-holder/OpenId4VcHolderApi.d.mts +238 -0
- package/build/openid4vc-holder/OpenId4VcHolderApi.d.mts.map +1 -0
- package/build/openid4vc-holder/OpenId4VcHolderApi.mjs +174 -0
- package/build/openid4vc-holder/OpenId4VcHolderApi.mjs.map +1 -0
- package/build/openid4vc-holder/OpenId4VcHolderModule.d.mts +17 -0
- package/build/openid4vc-holder/OpenId4VcHolderModule.d.mts.map +1 -0
- package/build/openid4vc-holder/OpenId4VcHolderModule.mjs +23 -0
- package/build/openid4vc-holder/OpenId4VcHolderModule.mjs.map +1 -0
- package/build/openid4vc-holder/OpenId4VciHolderService.d.mts +69 -0
- package/build/openid4vc-holder/OpenId4VciHolderService.d.mts.map +1 -0
- package/build/openid4vc-holder/OpenId4VciHolderService.mjs +751 -0
- package/build/openid4vc-holder/OpenId4VciHolderService.mjs.map +1 -0
- package/build/openid4vc-holder/OpenId4VciHolderServiceOptions.d.mts +398 -0
- package/build/openid4vc-holder/OpenId4VciHolderServiceOptions.d.mts.map +1 -0
- package/build/openid4vc-holder/OpenId4VciHolderServiceOptions.mjs +16 -0
- package/build/openid4vc-holder/OpenId4VciHolderServiceOptions.mjs.map +1 -0
- package/build/openid4vc-holder/OpenId4vpHolderService.d.mts +130 -0
- package/build/openid4vc-holder/OpenId4vpHolderService.d.mts.map +1 -0
- package/build/openid4vc-holder/OpenId4vpHolderService.mjs +278 -0
- package/build/openid4vc-holder/OpenId4vpHolderService.mjs.map +1 -0
- package/build/openid4vc-holder/OpenId4vpHolderServiceOptions.d.mts +112 -0
- package/build/openid4vc-holder/OpenId4vpHolderServiceOptions.d.mts.map +1 -0
- package/build/openid4vc-holder/index.d.mts +6 -0
- package/build/openid4vc-holder/index.mjs +5 -0
- package/build/openid4vc-issuer/OpenId4VcIssuanceSessionState.d.mts +16 -0
- package/build/openid4vc-issuer/OpenId4VcIssuanceSessionState.d.mts.map +1 -0
- package/build/openid4vc-issuer/OpenId4VcIssuanceSessionState.mjs +18 -0
- package/build/openid4vc-issuer/OpenId4VcIssuanceSessionState.mjs.map +1 -0
- package/build/openid4vc-issuer/OpenId4VcIssuerApi.d.mts +137 -0
- package/build/openid4vc-issuer/OpenId4VcIssuerApi.d.mts.map +1 -0
- package/build/openid4vc-issuer/OpenId4VcIssuerApi.mjs +108 -0
- package/build/openid4vc-issuer/OpenId4VcIssuerApi.mjs.map +1 -0
- package/build/openid4vc-issuer/OpenId4VcIssuerEvents.d.mts +19 -0
- package/build/openid4vc-issuer/OpenId4VcIssuerEvents.d.mts.map +1 -0
- package/build/openid4vc-issuer/OpenId4VcIssuerEvents.mjs +9 -0
- package/build/openid4vc-issuer/OpenId4VcIssuerEvents.mjs.map +1 -0
- package/build/openid4vc-issuer/OpenId4VcIssuerModule.d.mts +27 -0
- package/build/openid4vc-issuer/OpenId4VcIssuerModule.d.mts.map +1 -0
- package/build/openid4vc-issuer/OpenId4VcIssuerModule.mjs +150 -0
- package/build/openid4vc-issuer/OpenId4VcIssuerModule.mjs.map +1 -0
- package/build/openid4vc-issuer/OpenId4VcIssuerModuleConfig.d.mts +279 -0
- package/build/openid4vc-issuer/OpenId4VcIssuerModuleConfig.d.mts.map +1 -0
- package/build/openid4vc-issuer/OpenId4VcIssuerModuleConfig.mjs +179 -0
- package/build/openid4vc-issuer/OpenId4VcIssuerModuleConfig.mjs.map +1 -0
- package/build/openid4vc-issuer/OpenId4VcIssuerService.d.mts +182 -0
- package/build/openid4vc-issuer/OpenId4VcIssuerService.d.mts.map +1 -0
- package/build/openid4vc-issuer/OpenId4VcIssuerService.mjs +881 -0
- package/build/openid4vc-issuer/OpenId4VcIssuerService.mjs.map +1 -0
- package/build/openid4vc-issuer/OpenId4VcIssuerServiceOptions.d.mts +340 -0
- package/build/openid4vc-issuer/OpenId4VcIssuerServiceOptions.d.mts.map +1 -0
- package/build/openid4vc-issuer/OpenId4VcIssuerServiceOptions.mjs +1 -0
- package/build/openid4vc-issuer/index.d.mts +11 -0
- package/build/openid4vc-issuer/index.mjs +11 -0
- package/build/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRecord.d.mts +300 -0
- package/build/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRecord.d.mts.map +1 -0
- package/build/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRecord.mjs +102 -0
- package/build/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRecord.mjs.map +1 -0
- package/build/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRepository.d.mts +10 -0
- package/build/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRepository.d.mts.map +1 -0
- package/build/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRepository.mjs +22 -0
- package/build/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRepository.mjs.map +1 -0
- package/build/openid4vc-issuer/repository/OpenId4VcIssuerRecord.d.mts +84 -0
- package/build/openid4vc-issuer/repository/OpenId4VcIssuerRecord.d.mts.map +1 -0
- package/build/openid4vc-issuer/repository/OpenId4VcIssuerRecord.mjs +89 -0
- package/build/openid4vc-issuer/repository/OpenId4VcIssuerRecord.mjs.map +1 -0
- package/build/openid4vc-issuer/repository/OpenId4VcIssuerRepository.d.mts +12 -0
- package/build/openid4vc-issuer/repository/OpenId4VcIssuerRepository.d.mts.map +1 -0
- package/build/openid4vc-issuer/repository/OpenId4VcIssuerRepository.mjs +28 -0
- package/build/openid4vc-issuer/repository/OpenId4VcIssuerRepository.mjs.map +1 -0
- package/build/openid4vc-issuer/repository/index.d.mts +4 -0
- package/build/openid4vc-issuer/repository/index.mjs +4 -0
- package/build/openid4vc-issuer/router/accessTokenEndpoint.mjs +199 -0
- package/build/openid4vc-issuer/router/accessTokenEndpoint.mjs.map +1 -0
- package/build/openid4vc-issuer/router/authorizationChallengeEndpoint.mjs +241 -0
- package/build/openid4vc-issuer/router/authorizationChallengeEndpoint.mjs.map +1 -0
- package/build/openid4vc-issuer/router/authorizationEndpoint.mjs +51 -0
- package/build/openid4vc-issuer/router/authorizationEndpoint.mjs.map +1 -0
- package/build/openid4vc-issuer/router/authorizationServerMetadataEndpoint.mjs +25 -0
- package/build/openid4vc-issuer/router/authorizationServerMetadataEndpoint.mjs.map +1 -0
- package/build/openid4vc-issuer/router/credentialEndpoint.mjs +142 -0
- package/build/openid4vc-issuer/router/credentialEndpoint.mjs.map +1 -0
- package/build/openid4vc-issuer/router/credentialOfferEndpoint.mjs +38 -0
- package/build/openid4vc-issuer/router/credentialOfferEndpoint.mjs.map +1 -0
- package/build/openid4vc-issuer/router/deferredCredentialEndpoint.mjs +84 -0
- package/build/openid4vc-issuer/router/deferredCredentialEndpoint.mjs.map +1 -0
- package/build/openid4vc-issuer/router/index.mjs +12 -0
- package/build/openid4vc-issuer/router/issuerMetadataEndpoint.mjs +43 -0
- package/build/openid4vc-issuer/router/issuerMetadataEndpoint.mjs.map +1 -0
- package/build/openid4vc-issuer/router/jwksEndpoint.mjs +18 -0
- package/build/openid4vc-issuer/router/jwksEndpoint.mjs.map +1 -0
- package/build/openid4vc-issuer/router/nonceEndpoint.mjs +29 -0
- package/build/openid4vc-issuer/router/nonceEndpoint.mjs.map +1 -0
- package/build/openid4vc-issuer/router/pushedAuthorizationRequestEndpoint.mjs +164 -0
- package/build/openid4vc-issuer/router/pushedAuthorizationRequestEndpoint.mjs.map +1 -0
- package/build/openid4vc-issuer/router/redirectEndpoint.mjs +124 -0
- package/build/openid4vc-issuer/router/redirectEndpoint.mjs.map +1 -0
- package/build/openid4vc-issuer/util/txCode.mjs +18 -0
- package/build/openid4vc-issuer/util/txCode.mjs.map +1 -0
- package/build/openid4vc-verifier/OpenId4VcVerificationSessionState.d.mts +10 -0
- package/build/openid4vc-verifier/OpenId4VcVerificationSessionState.d.mts.map +1 -0
- package/build/openid4vc-verifier/OpenId4VcVerificationSessionState.mjs +12 -0
- package/build/openid4vc-verifier/OpenId4VcVerificationSessionState.mjs.map +1 -0
- package/build/openid4vc-verifier/OpenId4VcVerifierApi.d.mts +60 -0
- package/build/openid4vc-verifier/OpenId4VcVerifierApi.d.mts.map +1 -0
- package/build/openid4vc-verifier/OpenId4VcVerifierApi.mjs +83 -0
- package/build/openid4vc-verifier/OpenId4VcVerifierApi.mjs.map +1 -0
- package/build/openid4vc-verifier/OpenId4VcVerifierEvents.d.mts +19 -0
- package/build/openid4vc-verifier/OpenId4VcVerifierEvents.d.mts.map +1 -0
- package/build/openid4vc-verifier/OpenId4VcVerifierEvents.mjs +9 -0
- package/build/openid4vc-verifier/OpenId4VcVerifierEvents.mjs.map +1 -0
- package/build/openid4vc-verifier/OpenId4VcVerifierModule.d.mts +25 -0
- package/build/openid4vc-verifier/OpenId4VcVerifierModule.d.mts.map +1 -0
- package/build/openid4vc-verifier/OpenId4VcVerifierModule.mjs +91 -0
- package/build/openid4vc-verifier/OpenId4VcVerifierModule.mjs.map +1 -0
- package/build/openid4vc-verifier/OpenId4VcVerifierModuleConfig.d.mts +55 -0
- package/build/openid4vc-verifier/OpenId4VcVerifierModuleConfig.d.mts.map +1 -0
- package/build/openid4vc-verifier/OpenId4VcVerifierModuleConfig.mjs +36 -0
- package/build/openid4vc-verifier/OpenId4VcVerifierModuleConfig.mjs.map +1 -0
- package/build/openid4vc-verifier/OpenId4VpVerifierService.d.mts +60 -0
- package/build/openid4vc-verifier/OpenId4VpVerifierService.d.mts.map +1 -0
- package/build/openid4vc-verifier/OpenId4VpVerifierService.mjs +714 -0
- package/build/openid4vc-verifier/OpenId4VpVerifierService.mjs.map +1 -0
- package/build/openid4vc-verifier/OpenId4VpVerifierServiceOptions.d.mts +194 -0
- package/build/openid4vc-verifier/OpenId4VpVerifierServiceOptions.d.mts.map +1 -0
- package/build/openid4vc-verifier/index.d.mts +12 -0
- package/build/openid4vc-verifier/index.mjs +11 -0
- package/build/openid4vc-verifier/repository/OpenId4VcVerificationSessionRecord.d.mts +129 -0
- package/build/openid4vc-verifier/repository/OpenId4VcVerificationSessionRecord.d.mts.map +1 -0
- package/build/openid4vc-verifier/repository/OpenId4VcVerificationSessionRecord.mjs +64 -0
- package/build/openid4vc-verifier/repository/OpenId4VcVerificationSessionRecord.mjs.map +1 -0
- package/build/openid4vc-verifier/repository/OpenId4VcVerificationSessionRepository.d.mts +10 -0
- package/build/openid4vc-verifier/repository/OpenId4VcVerificationSessionRepository.d.mts.map +1 -0
- package/build/openid4vc-verifier/repository/OpenId4VcVerificationSessionRepository.mjs +22 -0
- package/build/openid4vc-verifier/repository/OpenId4VcVerificationSessionRepository.mjs.map +1 -0
- package/build/openid4vc-verifier/repository/OpenId4VcVerifierRecord.d.mts +33 -0
- package/build/openid4vc-verifier/repository/OpenId4VcVerifierRecord.d.mts.map +1 -0
- package/build/openid4vc-verifier/repository/OpenId4VcVerifierRecord.mjs +32 -0
- package/build/openid4vc-verifier/repository/OpenId4VcVerifierRecord.mjs.map +1 -0
- package/build/openid4vc-verifier/repository/OpenId4VcVerifierRepository.d.mts +12 -0
- package/build/openid4vc-verifier/repository/OpenId4VcVerifierRepository.d.mts.map +1 -0
- package/build/openid4vc-verifier/repository/OpenId4VcVerifierRepository.mjs +28 -0
- package/build/openid4vc-verifier/repository/OpenId4VcVerifierRepository.mjs.map +1 -0
- package/build/openid4vc-verifier/repository/index.d.mts +4 -0
- package/build/openid4vc-verifier/repository/index.mjs +4 -0
- package/build/openid4vc-verifier/router/authorizationEndpoint.mjs +117 -0
- package/build/openid4vc-verifier/router/authorizationEndpoint.mjs.map +1 -0
- package/build/openid4vc-verifier/router/authorizationRequestEndpoint.mjs +39 -0
- package/build/openid4vc-verifier/router/authorizationRequestEndpoint.mjs.map +1 -0
- package/build/openid4vc-verifier/router/index.mjs +1 -0
- package/build/shared/callbacks.d.mts +47 -0
- package/build/shared/callbacks.d.mts.map +1 -0
- package/build/shared/callbacks.mjs +279 -0
- package/build/shared/callbacks.mjs.map +1 -0
- package/build/shared/index.d.mts +7 -0
- package/build/shared/index.mjs +4 -0
- package/build/shared/issuerMetadataUtils.d.mts +22 -0
- package/build/shared/issuerMetadataUtils.d.mts.map +1 -0
- package/build/shared/issuerMetadataUtils.mjs +30 -0
- package/build/shared/issuerMetadataUtils.mjs.map +1 -0
- package/build/shared/models/CredentialHolderBinding.d.mts +71 -0
- package/build/shared/models/CredentialHolderBinding.d.mts.map +1 -0
- package/build/shared/models/CredentialHolderBinding.mjs +1 -0
- package/build/shared/models/OpenId4VcJwtIssuer.d.mts +46 -0
- package/build/shared/models/OpenId4VcJwtIssuer.d.mts.map +1 -0
- package/build/shared/models/OpenId4VcJwtIssuer.mjs +1 -0
- package/build/shared/models/OpenId4VciAuthorizationServerConfig.d.mts +71 -0
- package/build/shared/models/OpenId4VciAuthorizationServerConfig.d.mts.map +1 -0
- package/build/shared/models/OpenId4VciCredentialFormatProfile.d.mts +12 -0
- package/build/shared/models/OpenId4VciCredentialFormatProfile.d.mts.map +1 -0
- package/build/shared/models/OpenId4VciCredentialFormatProfile.mjs +14 -0
- package/build/shared/models/OpenId4VciCredentialFormatProfile.mjs.map +1 -0
- package/build/shared/models/index.d.mts +30 -0
- package/build/shared/models/index.d.mts.map +1 -0
- package/build/shared/models/index.mjs +6 -0
- package/build/shared/router/context.mjs +52 -0
- package/build/shared/router/context.mjs.map +1 -0
- package/build/shared/router/express.browser.d.mts +5 -0
- package/build/shared/router/express.browser.d.mts.map +1 -0
- package/build/shared/router/express.browser.mjs +8 -0
- package/build/shared/router/express.browser.mjs.map +1 -0
- package/build/shared/router/express.mjs +10 -0
- package/build/shared/router/express.mjs.map +1 -0
- package/build/shared/router/express.native.d.mts +5 -0
- package/build/shared/router/express.native.d.mts.map +1 -0
- package/build/shared/router/express.native.mjs +8 -0
- package/build/shared/router/express.native.mjs.map +1 -0
- package/build/shared/router/index.mjs +3 -0
- package/build/shared/router/tenants.mjs +36 -0
- package/build/shared/router/tenants.mjs.map +1 -0
- package/build/shared/transactionData.mjs +19 -0
- package/build/shared/transactionData.mjs.map +1 -0
- package/build/shared/utils.mjs +90 -0
- package/build/shared/utils.mjs.map +1 -0
- package/package.json +30 -23
- package/build/index.d.ts +0 -4
- package/build/index.js +0 -21
- package/build/index.js.map +0 -1
- package/build/openid4vc-holder/OpenId4VcHolderApi.d.ts +0 -124
- package/build/openid4vc-holder/OpenId4VcHolderApi.js +0 -155
- package/build/openid4vc-holder/OpenId4VcHolderApi.js.map +0 -1
- package/build/openid4vc-holder/OpenId4VcHolderModule.d.ts +0 -13
- package/build/openid4vc-holder/OpenId4VcHolderModule.js +0 -35
- package/build/openid4vc-holder/OpenId4VcHolderModule.js.map +0 -1
- package/build/openid4vc-holder/OpenId4VciHolderService.d.ts +0 -72
- package/build/openid4vc-holder/OpenId4VciHolderService.js +0 -569
- package/build/openid4vc-holder/OpenId4VciHolderService.js.map +0 -1
- package/build/openid4vc-holder/OpenId4VciHolderServiceOptions.d.ts +0 -238
- package/build/openid4vc-holder/OpenId4VciHolderServiceOptions.js +0 -14
- package/build/openid4vc-holder/OpenId4VciHolderServiceOptions.js.map +0 -1
- package/build/openid4vc-holder/OpenId4vcSiopHolderService.d.ts +0 -32
- package/build/openid4vc-holder/OpenId4vcSiopHolderService.js +0 -302
- package/build/openid4vc-holder/OpenId4vcSiopHolderService.js.map +0 -1
- package/build/openid4vc-holder/OpenId4vcSiopHolderServiceOptions.d.ts +0 -38
- package/build/openid4vc-holder/OpenId4vcSiopHolderServiceOptions.js +0 -3
- package/build/openid4vc-holder/OpenId4vcSiopHolderServiceOptions.js.map +0 -1
- package/build/openid4vc-holder/index.d.ts +0 -6
- package/build/openid4vc-holder/index.js +0 -23
- package/build/openid4vc-holder/index.js.map +0 -1
- package/build/openid4vc-issuer/OpenId4VcIssuanceSessionState.d.ts +0 -12
- package/build/openid4vc-issuer/OpenId4VcIssuanceSessionState.js +0 -19
- package/build/openid4vc-issuer/OpenId4VcIssuanceSessionState.js.map +0 -1
- package/build/openid4vc-issuer/OpenId4VcIssuerApi.d.ts +0 -101
- package/build/openid4vc-issuer/OpenId4VcIssuerApi.js +0 -110
- package/build/openid4vc-issuer/OpenId4VcIssuerApi.js.map +0 -1
- package/build/openid4vc-issuer/OpenId4VcIssuerEvents.d.ts +0 -13
- package/build/openid4vc-issuer/OpenId4VcIssuerEvents.js +0 -8
- package/build/openid4vc-issuer/OpenId4VcIssuerEvents.js.map +0 -1
- package/build/openid4vc-issuer/OpenId4VcIssuerModule.d.ts +0 -21
- package/build/openid4vc-issuer/OpenId4VcIssuerModule.js +0 -121
- package/build/openid4vc-issuer/OpenId4VcIssuerModule.js.map +0 -1
- package/build/openid4vc-issuer/OpenId4VcIssuerModuleConfig.d.ts +0 -190
- package/build/openid4vc-issuer/OpenId4VcIssuerModuleConfig.js +0 -141
- package/build/openid4vc-issuer/OpenId4VcIssuerModuleConfig.js.map +0 -1
- package/build/openid4vc-issuer/OpenId4VcIssuerService.d.ts +0 -116
- package/build/openid4vc-issuer/OpenId4VcIssuerService.js +0 -698
- package/build/openid4vc-issuer/OpenId4VcIssuerService.js.map +0 -1
- package/build/openid4vc-issuer/OpenId4VcIssuerServiceOptions.d.ts +0 -229
- package/build/openid4vc-issuer/OpenId4VcIssuerServiceOptions.js +0 -3
- package/build/openid4vc-issuer/OpenId4VcIssuerServiceOptions.js.map +0 -1
- package/build/openid4vc-issuer/index.d.ts +0 -8
- package/build/openid4vc-issuer/index.js +0 -27
- package/build/openid4vc-issuer/index.js.map +0 -1
- package/build/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRecord.d.ts +0 -160
- package/build/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRecord.js +0 -88
- package/build/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRecord.js.map +0 -1
- package/build/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRepository.d.ts +0 -5
- package/build/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRepository.js +0 -29
- package/build/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRepository.js.map +0 -1
- package/build/openid4vc-issuer/repository/OpenId4VcIssuerRecord.d.ts +0 -56
- package/build/openid4vc-issuer/repository/OpenId4VcIssuerRecord.js +0 -83
- package/build/openid4vc-issuer/repository/OpenId4VcIssuerRecord.js.map +0 -1
- package/build/openid4vc-issuer/repository/OpenId4VcIssuerRepository.d.ts +0 -8
- package/build/openid4vc-issuer/repository/OpenId4VcIssuerRepository.js +0 -35
- package/build/openid4vc-issuer/repository/OpenId4VcIssuerRepository.js.map +0 -1
- package/build/openid4vc-issuer/repository/index.d.ts +0 -4
- package/build/openid4vc-issuer/repository/index.js +0 -21
- package/build/openid4vc-issuer/repository/index.js.map +0 -1
- package/build/openid4vc-issuer/router/accessTokenEndpoint.d.ts +0 -5
- package/build/openid4vc-issuer/router/accessTokenEndpoint.js +0 -164
- package/build/openid4vc-issuer/router/accessTokenEndpoint.js.map +0 -1
- package/build/openid4vc-issuer/router/authorizationChallengeEndpoint.d.ts +0 -3
- package/build/openid4vc-issuer/router/authorizationChallengeEndpoint.js +0 -213
- package/build/openid4vc-issuer/router/authorizationChallengeEndpoint.js.map +0 -1
- package/build/openid4vc-issuer/router/authorizationServerMetadataEndpoint.d.ts +0 -6
- package/build/openid4vc-issuer/router/authorizationServerMetadataEndpoint.js +0 -25
- package/build/openid4vc-issuer/router/authorizationServerMetadataEndpoint.js.map +0 -1
- package/build/openid4vc-issuer/router/credentialEndpoint.d.ts +0 -3
- package/build/openid4vc-issuer/router/credentialEndpoint.js +0 -176
- package/build/openid4vc-issuer/router/credentialEndpoint.js.map +0 -1
- package/build/openid4vc-issuer/router/credentialOfferEndpoint.d.ts +0 -3
- package/build/openid4vc-issuer/router/credentialOfferEndpoint.js +0 -45
- package/build/openid4vc-issuer/router/credentialOfferEndpoint.js.map +0 -1
- package/build/openid4vc-issuer/router/index.d.ts +0 -9
- package/build/openid4vc-issuer/router/index.js +0 -20
- package/build/openid4vc-issuer/router/index.js.map +0 -1
- package/build/openid4vc-issuer/router/issuerMetadataEndpoint.d.ts +0 -2
- package/build/openid4vc-issuer/router/issuerMetadataEndpoint.js +0 -26
- package/build/openid4vc-issuer/router/issuerMetadataEndpoint.js.map +0 -1
- package/build/openid4vc-issuer/router/jwksEndpoint.d.ts +0 -3
- package/build/openid4vc-issuer/router/jwksEndpoint.js +0 -20
- package/build/openid4vc-issuer/router/jwksEndpoint.js.map +0 -1
- package/build/openid4vc-issuer/router/nonceEndpoint.d.ts +0 -3
- package/build/openid4vc-issuer/router/nonceEndpoint.js +0 -26
- package/build/openid4vc-issuer/router/nonceEndpoint.js.map +0 -1
- package/build/openid4vc-issuer/router/requestContext.d.ts +0 -5
- package/build/openid4vc-issuer/router/requestContext.js +0 -3
- package/build/openid4vc-issuer/router/requestContext.js.map +0 -1
- package/build/openid4vc-issuer/util/txCode.d.ts +0 -3
- package/build/openid4vc-issuer/util/txCode.js +0 -18
- package/build/openid4vc-issuer/util/txCode.js.map +0 -1
- package/build/openid4vc-verifier/OpenId4VcSiopVerifierService.d.ts +0 -55
- package/build/openid4vc-verifier/OpenId4VcSiopVerifierService.js +0 -498
- package/build/openid4vc-verifier/OpenId4VcSiopVerifierService.js.map +0 -1
- package/build/openid4vc-verifier/OpenId4VcSiopVerifierServiceOptions.d.ts +0 -77
- package/build/openid4vc-verifier/OpenId4VcSiopVerifierServiceOptions.js +0 -3
- package/build/openid4vc-verifier/OpenId4VcSiopVerifierServiceOptions.js.map +0 -1
- package/build/openid4vc-verifier/OpenId4VcVerificationSessionState.d.ts +0 -6
- package/build/openid4vc-verifier/OpenId4VcVerificationSessionState.js +0 -11
- package/build/openid4vc-verifier/OpenId4VcVerificationSessionState.js.map +0 -1
- package/build/openid4vc-verifier/OpenId4VcVerifierApi.d.ts +0 -61
- package/build/openid4vc-verifier/OpenId4VcVerifierApi.js +0 -108
- package/build/openid4vc-verifier/OpenId4VcVerifierApi.js.map +0 -1
- package/build/openid4vc-verifier/OpenId4VcVerifierEvents.d.ts +0 -13
- package/build/openid4vc-verifier/OpenId4VcVerifierEvents.js +0 -8
- package/build/openid4vc-verifier/OpenId4VcVerifierEvents.js.map +0 -1
- package/build/openid4vc-verifier/OpenId4VcVerifierModule.d.ts +0 -21
- package/build/openid4vc-verifier/OpenId4VcVerifierModule.js +0 -109
- package/build/openid4vc-verifier/OpenId4VcVerifierModule.js.map +0 -1
- package/build/openid4vc-verifier/OpenId4VcVerifierModuleConfig.d.ts +0 -31
- package/build/openid4vc-verifier/OpenId4VcVerifierModuleConfig.js +0 -28
- package/build/openid4vc-verifier/OpenId4VcVerifierModuleConfig.js.map +0 -1
- package/build/openid4vc-verifier/index.d.ts +0 -8
- package/build/openid4vc-verifier/index.js +0 -25
- package/build/openid4vc-verifier/index.js.map +0 -1
- package/build/openid4vc-verifier/repository/OpenId4VcRelyingPartyEventEmitter.d.ts +0 -49
- package/build/openid4vc-verifier/repository/OpenId4VcRelyingPartyEventEmitter.js +0 -234
- package/build/openid4vc-verifier/repository/OpenId4VcRelyingPartyEventEmitter.js.map +0 -1
- package/build/openid4vc-verifier/repository/OpenId4VcRelyingPartySessionManager.d.ts +0 -19
- package/build/openid4vc-verifier/repository/OpenId4VcRelyingPartySessionManager.js +0 -146
- package/build/openid4vc-verifier/repository/OpenId4VcRelyingPartySessionManager.js.map +0 -1
- package/build/openid4vc-verifier/repository/OpenId4VcVerificationSessionRecord.d.ts +0 -71
- package/build/openid4vc-verifier/repository/OpenId4VcVerificationSessionRecord.js +0 -46
- package/build/openid4vc-verifier/repository/OpenId4VcVerificationSessionRecord.js.map +0 -1
- package/build/openid4vc-verifier/repository/OpenId4VcVerificationSessionRepository.d.ts +0 -5
- package/build/openid4vc-verifier/repository/OpenId4VcVerificationSessionRepository.js +0 -29
- package/build/openid4vc-verifier/repository/OpenId4VcVerificationSessionRepository.js.map +0 -1
- package/build/openid4vc-verifier/repository/OpenId4VcVerifierRecord.d.ts +0 -29
- package/build/openid4vc-verifier/repository/OpenId4VcVerifierRecord.js +0 -29
- package/build/openid4vc-verifier/repository/OpenId4VcVerifierRecord.js.map +0 -1
- package/build/openid4vc-verifier/repository/OpenId4VcVerifierRepository.d.ts +0 -8
- package/build/openid4vc-verifier/repository/OpenId4VcVerifierRepository.js +0 -35
- package/build/openid4vc-verifier/repository/OpenId4VcVerifierRepository.js.map +0 -1
- package/build/openid4vc-verifier/repository/index.d.ts +0 -4
- package/build/openid4vc-verifier/repository/index.js +0 -21
- package/build/openid4vc-verifier/repository/index.js.map +0 -1
- package/build/openid4vc-verifier/router/authorizationEndpoint.d.ts +0 -11
- package/build/openid4vc-verifier/router/authorizationEndpoint.js +0 -102
- package/build/openid4vc-verifier/router/authorizationEndpoint.js.map +0 -1
- package/build/openid4vc-verifier/router/authorizationRequestEndpoint.d.ts +0 -11
- package/build/openid4vc-verifier/router/authorizationRequestEndpoint.js +0 -63
- package/build/openid4vc-verifier/router/authorizationRequestEndpoint.js.map +0 -1
- package/build/openid4vc-verifier/router/index.d.ts +0 -2
- package/build/openid4vc-verifier/router/index.js +0 -6
- package/build/openid4vc-verifier/router/index.js.map +0 -1
- package/build/openid4vc-verifier/router/requestContext.d.ts +0 -5
- package/build/openid4vc-verifier/router/requestContext.js +0 -3
- package/build/openid4vc-verifier/router/requestContext.js.map +0 -1
- package/build/shared/callbacks.d.ts +0 -18
- package/build/shared/callbacks.js +0 -81
- package/build/shared/callbacks.js.map +0 -1
- package/build/shared/index.d.ts +0 -2
- package/build/shared/index.js +0 -19
- package/build/shared/index.js.map +0 -1
- package/build/shared/issuerMetadataUtils.d.ts +0 -158
- package/build/shared/issuerMetadataUtils.js +0 -38
- package/build/shared/issuerMetadataUtils.js.map +0 -1
- package/build/shared/models/CredentialHolderBinding.d.ts +0 -13
- package/build/shared/models/CredentialHolderBinding.js +0 -3
- package/build/shared/models/CredentialHolderBinding.js.map +0 -1
- package/build/shared/models/OpenId4VcJwtIssuer.d.ts +0 -28
- package/build/shared/models/OpenId4VcJwtIssuer.js +0 -3
- package/build/shared/models/OpenId4VcJwtIssuer.js.map +0 -1
- package/build/shared/models/OpenId4VciAuthorizationServerConfig.d.ts +0 -10
- package/build/shared/models/OpenId4VciAuthorizationServerConfig.js +0 -3
- package/build/shared/models/OpenId4VciAuthorizationServerConfig.js.map +0 -1
- package/build/shared/models/OpenId4VciCredentialFormatProfile.d.ts +0 -7
- package/build/shared/models/OpenId4VciCredentialFormatProfile.js +0 -12
- package/build/shared/models/OpenId4VciCredentialFormatProfile.js.map +0 -1
- package/build/shared/models/index.d.ts +0 -24
- package/build/shared/models/index.js +0 -25
- package/build/shared/models/index.js.map +0 -1
- package/build/shared/router/context.d.ts +0 -17
- package/build/shared/router/context.js +0 -76
- package/build/shared/router/context.js.map +0 -1
- package/build/shared/router/express.d.ts +0 -2
- package/build/shared/router/express.js +0 -15
- package/build/shared/router/express.js.map +0 -1
- package/build/shared/router/express.native.d.ts +0 -1
- package/build/shared/router/express.native.js +0 -7
- package/build/shared/router/express.native.js.map +0 -1
- package/build/shared/router/index.d.ts +0 -3
- package/build/shared/router/index.js +0 -20
- package/build/shared/router/index.js.map +0 -1
- package/build/shared/router/tenants.d.ts +0 -13
- package/build/shared/router/tenants.js +0 -49
- package/build/shared/router/tenants.js.map +0 -1
- package/build/shared/transform.d.ts +0 -5
- package/build/shared/transform.js +0 -73
- package/build/shared/transform.js.map +0 -1
- package/build/shared/utils.d.ts +0 -22
- package/build/shared/utils.js +0 -154
- package/build/shared/utils.js.map +0 -1
|
@@ -0,0 +1,714 @@
|
|
|
1
|
+
import { OpenId4VcVerifierModuleConfig } from "./OpenId4VcVerifierModuleConfig.mjs";
|
|
2
|
+
import { storeActorIdForContextCorrelationId } from "../shared/router/tenants.mjs";
|
|
3
|
+
import "../shared/router/index.mjs";
|
|
4
|
+
import { credoJwtIssuerToOpenId4VcJwtIssuer, dcqlCredentialQueryToPresentationFormat, getSupportedJwaSignatureAlgorithms } from "../shared/utils.mjs";
|
|
5
|
+
import { getOid4vcCallbacks } from "../shared/callbacks.mjs";
|
|
6
|
+
import { __decorateMetadata } from "../_virtual/_@oxc-project_runtime@0.99.0/helpers/decorateMetadata.mjs";
|
|
7
|
+
import { __decorateParam } from "../_virtual/_@oxc-project_runtime@0.99.0/helpers/decorateParam.mjs";
|
|
8
|
+
import { __decorate } from "../_virtual/_@oxc-project_runtime@0.99.0/helpers/decorate.mjs";
|
|
9
|
+
import { OpenId4VcVerificationSessionState } from "./OpenId4VcVerificationSessionState.mjs";
|
|
10
|
+
import { getSdJwtVcTransactionDataHashes } from "../shared/transactionData.mjs";
|
|
11
|
+
import { OpenId4VcVerifierEvents } from "./OpenId4VcVerifierEvents.mjs";
|
|
12
|
+
import { OpenId4VcVerificationSessionRecord } from "./repository/OpenId4VcVerificationSessionRecord.mjs";
|
|
13
|
+
import { OpenId4VcVerificationSessionRepository } from "./repository/OpenId4VcVerificationSessionRepository.mjs";
|
|
14
|
+
import { OpenId4VcVerifierRecord } from "./repository/OpenId4VcVerifierRecord.mjs";
|
|
15
|
+
import { OpenId4VcVerifierRepository } from "./repository/OpenId4VcVerifierRepository.mjs";
|
|
16
|
+
import "./repository/index.mjs";
|
|
17
|
+
import { AgentContext, ClaimFormat, CredoError, DcqlService, DifPresentationExchangeService, EventEmitter, Hasher, InjectionSymbols, JsonEncoder, JsonTransformer, Jwt, Kms, MdocDeviceResponse, SdJwtVcApi, SignatureSuiteRegistry, TypedArrayEncoder, W3cCredentialService, W3cJsonLdVerifiablePresentation, W3cJwtVerifiablePresentation, W3cV2CredentialService, W3cV2SdJwtVerifiablePresentation, X509Certificate, X509ModuleConfig, X509Service, extractPresentationsWithDescriptorsFromSubmission, extractX509CertificatesFromJwt, getDomainFromUrl, inject, injectable, isMdocSupportedSignatureAlgorithm, joinUriParts, mapNonEmptyArray, utils } from "@credo-ts/core";
|
|
18
|
+
import { Oauth2ErrorCodes, Oauth2ServerErrorResponseError } from "@openid4vc/oauth2";
|
|
19
|
+
import { JarmMode, Openid4vpVerifier, calculateX509HashClientIdPrefixValue, getOpenid4vpClientId, isJarmResponseMode, isOpenid4vpAuthorizationRequestDcApi, zOpenid4vpAuthorizationResponse } from "@openid4vc/openid4vp";
|
|
20
|
+
|
|
21
|
+
//#region src/openid4vc-verifier/OpenId4VpVerifierService.ts
|
|
22
|
+
var _ref, _ref2, _ref3, _ref4, _ref5;
|
|
23
|
+
let OpenId4VpVerifierService = class OpenId4VpVerifierService$1 {
|
|
24
|
+
constructor(logger, w3cCredentialService, w3cV2CredentialService, openId4VcVerifierRepository, config, openId4VcVerificationSessionRepository) {
|
|
25
|
+
this.logger = logger;
|
|
26
|
+
this.w3cCredentialService = w3cCredentialService;
|
|
27
|
+
this.w3cV2CredentialService = w3cV2CredentialService;
|
|
28
|
+
this.openId4VcVerifierRepository = openId4VcVerifierRepository;
|
|
29
|
+
this.config = config;
|
|
30
|
+
this.openId4VcVerificationSessionRepository = openId4VcVerificationSessionRepository;
|
|
31
|
+
}
|
|
32
|
+
getOpenid4vpVerifier(agentContext) {
|
|
33
|
+
return new Openid4vpVerifier({ callbacks: getOid4vcCallbacks(agentContext) });
|
|
34
|
+
}
|
|
35
|
+
async createAuthorizationRequest(agentContext, options) {
|
|
36
|
+
const kms = agentContext.resolve(Kms.KeyManagementApi);
|
|
37
|
+
const nonce = TypedArrayEncoder.toBase64URL(kms.randomBytes({ length: 32 }));
|
|
38
|
+
const state = TypedArrayEncoder.toBase64URL(kms.randomBytes({ length: 32 }));
|
|
39
|
+
const responseMode = options.responseMode ?? "direct_post.jwt";
|
|
40
|
+
const isDcApiRequest = responseMode === "dc_api" || responseMode === "dc_api.jwt";
|
|
41
|
+
const version = options.version ?? "v1";
|
|
42
|
+
if (version === "v1.draft21" && isDcApiRequest) throw new CredoError(`OpenID4VP version '${version}' cannot be used with responseMode '${options.responseMode}'. Use version 'v1' or 'v1.draft24' instead.`);
|
|
43
|
+
if (version === "v1.draft21" && options.transactionData) throw new CredoError(`OpenID4VP version '${version}' cannot be used with transactionData. Use version 'v1' or 'v1.draft24' instead.`);
|
|
44
|
+
if (version === "v1.draft21" && options.dcql) throw new CredoError(`OpenID4VP version '${version}' cannot be used with dcql. Use version 'v1' or 'v1.draft24' instead.`);
|
|
45
|
+
if (version !== "v1" && options.verifierInfo) throw new CredoError(`OpenID4VP version '${version}' cannot be used with verifierInfo. Use version 'v1' instead.`);
|
|
46
|
+
if (version === "v1" && options.presentationExchange) throw new CredoError(`OpenID4VP version '${version}' cannot be used with presentationExchange. Use dcql instead (recommended), or use older versions 'v1.draft24' and 'v1.draft21'.`);
|
|
47
|
+
if (options.dcql?.query.credentials.some((c) => c.require_cryptographic_holder_binding === false)) throw new CredoError(`Setting 'require_cryptographic_holder_binding' to false in DCQL Query is not supported by Credo at the moment. Only presentations with cryptographic holder binding are supported.`);
|
|
48
|
+
if (isDcApiRequest && options.authorizationResponseRedirectUri) throw new CredoError("'authorizationResponseRedirectUri' cannot be be used with response mode 'dc_api' and 'dc_api.jwt'.");
|
|
49
|
+
const hasMdocRequest = options.presentationExchange?.definition.input_descriptors.some((i) => i.format?.mso_mdoc) || options.dcql?.query.credentials.some((c) => c.format === "mso_mdoc");
|
|
50
|
+
if ((version === "v1.draft21" || version === "v1.draft24") && responseMode === "direct_post" && hasMdocRequest) throw new CredoError("Unable to create authorization request with response mode 'direct_post' containing mDOC credentials. ISO 18013-7 requires the usage of response mode 'direct_post.jwt', and needs parameters from the encrypted response header to verify the mDOC sigature. Either use version 'v1', or update the response mode to 'direct_post.jwt'");
|
|
51
|
+
if (options.verifierInfo) {
|
|
52
|
+
const queryIds = options?.dcql?.query.credentials.map(({ id }) => id) ?? options?.presentationExchange?.definition.input_descriptors.map(({ id }) => id) ?? [];
|
|
53
|
+
if (!options.verifierInfo.every((vi) => !vi.credential_ids || vi.credential_ids.every((credentialId) => queryIds.includes(credentialId)))) throw new CredoError("Verifier info (attestations) were provided, but the verifier info used credential ids that are not present in the query");
|
|
54
|
+
}
|
|
55
|
+
const authorizationRequestId = utils.uuid();
|
|
56
|
+
const authorizationResponseUrl = `${joinUriParts(this.config.baseUrl, [options.verifier.verifierId, this.config.authorizationEndpoint])}?session=${authorizationRequestId}`;
|
|
57
|
+
const jwtIssuer = options.requestSigner.method !== "none" ? await credoJwtIssuerToOpenId4VcJwtIssuer(agentContext, options.requestSigner) : void 0;
|
|
58
|
+
let clientIdPrefix;
|
|
59
|
+
let clientId;
|
|
60
|
+
if (!jwtIssuer) if (isDcApiRequest) {
|
|
61
|
+
clientIdPrefix = version === "v1" ? "origin" : "web-origin";
|
|
62
|
+
clientId = void 0;
|
|
63
|
+
} else {
|
|
64
|
+
clientIdPrefix = "redirect_uri";
|
|
65
|
+
clientId = authorizationResponseUrl;
|
|
66
|
+
}
|
|
67
|
+
else if (jwtIssuer?.method === "x5c") {
|
|
68
|
+
const leafCertificate = X509Service.getLeafCertificate(agentContext, { certificateChain: jwtIssuer.x5c });
|
|
69
|
+
if (!authorizationResponseUrl.startsWith("https://") && !(authorizationResponseUrl.startsWith("http://") && agentContext.config.allowInsecureHttpUrls)) throw new CredoError("The X509 certificate issuer must be a HTTPS URI.");
|
|
70
|
+
if (options.requestSigner.method === "x5c" && options.requestSigner.clientIdPrefix === "x509_hash") {
|
|
71
|
+
clientIdPrefix = "x509_hash";
|
|
72
|
+
clientId = await calculateX509HashClientIdPrefixValue({
|
|
73
|
+
x509Certificate: leafCertificate.rawCertificate,
|
|
74
|
+
hash: Hasher.hash
|
|
75
|
+
});
|
|
76
|
+
} else {
|
|
77
|
+
if (!leafCertificate.sanDnsNames.includes(getDomainFromUrl(authorizationResponseUrl))) {
|
|
78
|
+
const sanDnsMessage = leafCertificate.sanDnsNames.length > 0 ? `SAN-DNS names are ${leafCertificate.sanDnsNames.join(", ")}` : "there are no SAN-DNS names";
|
|
79
|
+
throw new CredoError(`The domain of the OpenID4VCI issuer does not match a SAN DNS name in the x5c certificate. The OpenID4VCI domain is '${getDomainFromUrl(authorizationResponseUrl)}', $${sanDnsMessage}`);
|
|
80
|
+
}
|
|
81
|
+
clientIdPrefix = "x509_san_dns";
|
|
82
|
+
clientId = getDomainFromUrl(authorizationResponseUrl);
|
|
83
|
+
}
|
|
84
|
+
} else if (jwtIssuer?.method === "did") {
|
|
85
|
+
clientId = jwtIssuer.didUrl.split("#")[0];
|
|
86
|
+
clientIdPrefix = version === "v1" ? "decentralized_identifier" : "did";
|
|
87
|
+
} else throw new CredoError(`Unsupported jwt issuer method '${options.requestSigner.method}'. Only 'did' and 'x5c' are supported.`);
|
|
88
|
+
const hostedAuthorizationRequestUri = !isDcApiRequest && jwtIssuer ? joinUriParts(this.config.baseUrl, [
|
|
89
|
+
options.verifier.verifierId,
|
|
90
|
+
this.config.authorizationRequestEndpoint,
|
|
91
|
+
authorizationRequestId
|
|
92
|
+
]) : void 0;
|
|
93
|
+
const client_id = clientIdPrefix === "did" || clientIdPrefix === "https" || version === "v1.draft21" ? clientId : `${clientIdPrefix}:${clientId}`;
|
|
94
|
+
const legacyClientIdScheme = version === "v1.draft21" && clientIdPrefix !== "web-origin" && clientIdPrefix !== "origin" && clientIdPrefix !== "decentralized_identifier" ? clientIdPrefix : void 0;
|
|
95
|
+
const client_metadata = await this.getClientMetadata(agentContext, {
|
|
96
|
+
responseMode,
|
|
97
|
+
verifier: options.verifier,
|
|
98
|
+
authorizationResponseUrl,
|
|
99
|
+
version,
|
|
100
|
+
dcqlQuery: options.dcql?.query
|
|
101
|
+
});
|
|
102
|
+
const requestParamsBase = {
|
|
103
|
+
nonce,
|
|
104
|
+
presentation_definition: options.presentationExchange?.definition,
|
|
105
|
+
dcql_query: options.dcql?.query,
|
|
106
|
+
transaction_data: options.transactionData?.map((entry) => JsonEncoder.toBase64URL(entry)),
|
|
107
|
+
response_mode: responseMode,
|
|
108
|
+
response_type: "vp_token",
|
|
109
|
+
client_metadata,
|
|
110
|
+
verifier_info: options.verifierInfo
|
|
111
|
+
};
|
|
112
|
+
const authorizationRequest = await this.getOpenid4vpVerifier(agentContext).createOpenId4vpAuthorizationRequest({
|
|
113
|
+
jar: jwtIssuer ? {
|
|
114
|
+
jwtSigner: jwtIssuer,
|
|
115
|
+
requestUri: hostedAuthorizationRequestUri,
|
|
116
|
+
expiresInSeconds: this.config.authorizationRequestExpiresInSeconds
|
|
117
|
+
} : void 0,
|
|
118
|
+
authorizationRequestPayload: requestParamsBase.response_mode === "dc_api.jwt" || requestParamsBase.response_mode === "dc_api" ? {
|
|
119
|
+
...requestParamsBase,
|
|
120
|
+
client_id: jwtIssuer ? client_id : void 0,
|
|
121
|
+
response_mode: requestParamsBase.response_mode,
|
|
122
|
+
expected_origins: options.expectedOrigins
|
|
123
|
+
} : {
|
|
124
|
+
...requestParamsBase,
|
|
125
|
+
response_mode: requestParamsBase.response_mode,
|
|
126
|
+
client_id,
|
|
127
|
+
state,
|
|
128
|
+
response_uri: authorizationResponseUrl,
|
|
129
|
+
client_id_scheme: legacyClientIdScheme
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
const verificationSession = new OpenId4VcVerificationSessionRecord({
|
|
133
|
+
authorizationResponseRedirectUri: options.authorizationResponseRedirectUri,
|
|
134
|
+
authorizationRequestPayload: authorizationRequest.jar ? void 0 : authorizationRequest.authorizationRequestPayload,
|
|
135
|
+
authorizationRequestJwt: authorizationRequest.jar?.authorizationRequestJwt,
|
|
136
|
+
authorizationRequestUri: hostedAuthorizationRequestUri,
|
|
137
|
+
authorizationRequestId,
|
|
138
|
+
state: OpenId4VcVerificationSessionState.RequestCreated,
|
|
139
|
+
verifierId: options.verifier.verifierId,
|
|
140
|
+
expiresAt: utils.addSecondsToDate(/* @__PURE__ */ new Date(), this.config.authorizationRequestExpiresInSeconds),
|
|
141
|
+
openId4VpVersion: version
|
|
142
|
+
});
|
|
143
|
+
await this.openId4VcVerificationSessionRepository.save(agentContext, verificationSession);
|
|
144
|
+
this.emitStateChangedEvent(agentContext, verificationSession, null);
|
|
145
|
+
return {
|
|
146
|
+
authorizationRequest: authorizationRequest.authorizationRequest,
|
|
147
|
+
verificationSession,
|
|
148
|
+
authorizationRequestObject: authorizationRequest.authorizationRequestObject
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
async getDcqlVerifiedResponse(agentContext, _dcqlQuery, presentations) {
|
|
152
|
+
const dcqlService = agentContext.dependencyManager.resolve(DcqlService);
|
|
153
|
+
const dcqlQuery = dcqlService.validateDcqlQuery(_dcqlQuery);
|
|
154
|
+
const dcqlPresentationEntries = Object.entries(presentations);
|
|
155
|
+
const dcqlPresentation = Object.fromEntries(dcqlPresentationEntries.map(([credentialId, presentations$1]) => {
|
|
156
|
+
const queryCredential = dcqlQuery.credentials.find((c) => c.id === credentialId);
|
|
157
|
+
if (!queryCredential) throw new CredoError(`vp_token contains presentation for credential query id '${credentialId}', but this credential is not present in the dcql query.`);
|
|
158
|
+
return [credentialId, mapNonEmptyArray(presentations$1, (presentation) => this.decodePresentation(agentContext, {
|
|
159
|
+
presentation,
|
|
160
|
+
format: dcqlCredentialQueryToPresentationFormat(queryCredential)
|
|
161
|
+
}))];
|
|
162
|
+
}));
|
|
163
|
+
return {
|
|
164
|
+
query: dcqlQuery,
|
|
165
|
+
presentations: dcqlPresentation,
|
|
166
|
+
presentationResult: await dcqlService.assertValidDcqlPresentation(agentContext, dcqlPresentation, dcqlQuery)
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
async parseAuthorizationResponse(agentContext, options) {
|
|
170
|
+
const openid4vpVerifier = this.getOpenid4vpVerifier(agentContext);
|
|
171
|
+
const { authorizationResponse, verificationSession, origin } = options;
|
|
172
|
+
let parsedAuthorizationResponse;
|
|
173
|
+
try {
|
|
174
|
+
parsedAuthorizationResponse = await openid4vpVerifier.parseOpenid4vpAuthorizationResponse({
|
|
175
|
+
authorizationResponse,
|
|
176
|
+
origin,
|
|
177
|
+
authorizationRequestPayload: verificationSession.requestPayload,
|
|
178
|
+
callbacks: getOid4vcCallbacks(agentContext)
|
|
179
|
+
});
|
|
180
|
+
if (parsedAuthorizationResponse.jarm && parsedAuthorizationResponse.jarm.type !== JarmMode.Encrypted) throw new Oauth2ServerErrorResponseError({
|
|
181
|
+
error: Oauth2ErrorCodes.InvalidRequest,
|
|
182
|
+
error_description: `Only encrypted JARM responses are supported, received '${parsedAuthorizationResponse.jarm.type}'.`
|
|
183
|
+
});
|
|
184
|
+
return {
|
|
185
|
+
...parsedAuthorizationResponse,
|
|
186
|
+
verificationSession
|
|
187
|
+
};
|
|
188
|
+
} catch (error) {
|
|
189
|
+
if (verificationSession?.state === OpenId4VcVerificationSessionState.RequestUriRetrieved || verificationSession?.state === OpenId4VcVerificationSessionState.RequestCreated) {
|
|
190
|
+
const parsed = zOpenid4vpAuthorizationResponse.safeParse(parsedAuthorizationResponse?.authorizationResponsePayload);
|
|
191
|
+
verificationSession.authorizationResponsePayload = parsed.success ? parsed.data : void 0;
|
|
192
|
+
verificationSession.errorMessage = error.message;
|
|
193
|
+
await this.updateState(agentContext, verificationSession, OpenId4VcVerificationSessionState.Error);
|
|
194
|
+
}
|
|
195
|
+
throw error;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
async verifyAuthorizationResponse(agentContext, options) {
|
|
199
|
+
const { verificationSession, authorizationResponse, origin } = options;
|
|
200
|
+
const authorizationRequest = verificationSession.requestPayload;
|
|
201
|
+
const openid4vpVersion = verificationSession.openId4VpVersion ?? (authorizationRequest.client_id_scheme !== void 0 ? "v1.draft21" : "v1.draft24");
|
|
202
|
+
if (verificationSession.state !== OpenId4VcVerificationSessionState.RequestUriRetrieved && verificationSession.state !== OpenId4VcVerificationSessionState.RequestCreated) throw new Oauth2ServerErrorResponseError({
|
|
203
|
+
error: Oauth2ErrorCodes.InvalidRequest,
|
|
204
|
+
error_description: "Invalid session"
|
|
205
|
+
});
|
|
206
|
+
if (verificationSession.expiresAt && Date.now() > verificationSession.expiresAt.getTime()) {
|
|
207
|
+
verificationSession.errorMessage = "session expired";
|
|
208
|
+
await this.updateState(agentContext, verificationSession, OpenId4VcVerificationSessionState.Error);
|
|
209
|
+
throw new Oauth2ServerErrorResponseError({
|
|
210
|
+
error: Oauth2ErrorCodes.InvalidRequest,
|
|
211
|
+
error_description: "session expired"
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
const result = await this.parseAuthorizationResponse(agentContext, {
|
|
215
|
+
verificationSession,
|
|
216
|
+
authorizationResponse,
|
|
217
|
+
origin
|
|
218
|
+
});
|
|
219
|
+
const encryptionJwk = authorizationRequest.client_metadata?.jwks?.keys.find((key) => key.use === "enc");
|
|
220
|
+
const encryptionPublicJwk = encryptionJwk ? Kms.PublicJwk.fromUnknown(encryptionJwk) : void 0;
|
|
221
|
+
let dcqlResponse;
|
|
222
|
+
let pexResponse;
|
|
223
|
+
let transactionData;
|
|
224
|
+
try {
|
|
225
|
+
const clientId = getOpenid4vpClientId({
|
|
226
|
+
responseMode: authorizationRequest.response_mode,
|
|
227
|
+
clientId: authorizationRequest.client_id,
|
|
228
|
+
legacyClientIdScheme: authorizationRequest.client_id_scheme,
|
|
229
|
+
origin: options.origin,
|
|
230
|
+
version: openid4vpVersion === "v1" ? 100 : openid4vpVersion === "v1.draft24" ? 24 : 21
|
|
231
|
+
}).effectiveClientId;
|
|
232
|
+
const isDcApiRequest = isOpenid4vpAuthorizationRequestDcApi(authorizationRequest);
|
|
233
|
+
const audience = openid4vpVersion === "v1" && isDcApiRequest ? `origin:${options.origin}` : clientId;
|
|
234
|
+
const responseUri = isOpenid4vpAuthorizationRequestDcApi(authorizationRequest) ? void 0 : authorizationRequest.response_uri;
|
|
235
|
+
const mdocGeneratedNonce = result.jarm?.jarmHeader.apu ? TypedArrayEncoder.toUtf8String(TypedArrayEncoder.fromBase64(result.jarm?.jarmHeader.apu)) : void 0;
|
|
236
|
+
if (result.type === "dcql") {
|
|
237
|
+
const dcqlPresentationEntries = Object.entries(result.dcql.presentations);
|
|
238
|
+
if (!authorizationRequest.dcql_query) throw new Oauth2ServerErrorResponseError({
|
|
239
|
+
error: Oauth2ErrorCodes.InvalidRequest,
|
|
240
|
+
error_description: "DCQL response provided but no dcql_query found in the authorization request."
|
|
241
|
+
});
|
|
242
|
+
const dcql = agentContext.dependencyManager.resolve(DcqlService);
|
|
243
|
+
const dcqlQuery = dcql.validateDcqlQuery(authorizationRequest.dcql_query);
|
|
244
|
+
const presentationVerificationResults = await Promise.all(dcqlPresentationEntries.map(async ([credentialId, presentations$1]) => {
|
|
245
|
+
const queryCredential = dcqlQuery.credentials.find((c) => c.id === credentialId);
|
|
246
|
+
if (!queryCredential) throw new Oauth2ServerErrorResponseError({
|
|
247
|
+
error: Oauth2ErrorCodes.InvalidRequest,
|
|
248
|
+
error_description: `vp_token contains presentation for credential query id '${credentialId}', but this credential is not present in the dcql query.`
|
|
249
|
+
});
|
|
250
|
+
return [credentialId, await Promise.all(mapNonEmptyArray(presentations$1, (presentation) => this.verifyPresentation(agentContext, {
|
|
251
|
+
format: dcqlCredentialQueryToPresentationFormat(queryCredential),
|
|
252
|
+
nonce: authorizationRequest.nonce,
|
|
253
|
+
audience,
|
|
254
|
+
version: openid4vpVersion,
|
|
255
|
+
clientId,
|
|
256
|
+
encryptionJwk: encryptionPublicJwk,
|
|
257
|
+
origin: options.origin,
|
|
258
|
+
responseUri,
|
|
259
|
+
mdocGeneratedNonce,
|
|
260
|
+
verificationSessionId: result.verificationSession.id,
|
|
261
|
+
presentation
|
|
262
|
+
})))];
|
|
263
|
+
}));
|
|
264
|
+
const errorMessages = presentationVerificationResults.flatMap(([credentialId, presentations$1], index) => presentations$1.map((result$1) => !result$1.verified ? `\t- ${credentialId}[${index}]: ${result$1.reason}` : void 0)).filter((i) => i !== void 0);
|
|
265
|
+
if (errorMessages.length > 0) throw new Oauth2ServerErrorResponseError({
|
|
266
|
+
error: Oauth2ErrorCodes.InvalidRequest,
|
|
267
|
+
error_description: "One or more presentations failed verification."
|
|
268
|
+
}, { internalMessage: errorMessages.join("\n") });
|
|
269
|
+
const presentations = Object.fromEntries(presentationVerificationResults.map(([credentialId, presentations$1]) => [credentialId, presentations$1.map((p) => p.verified ? p.presentation : void 0).filter((p) => p !== void 0)]));
|
|
270
|
+
try {
|
|
271
|
+
dcqlResponse = {
|
|
272
|
+
presentations,
|
|
273
|
+
presentationResult: await dcql.assertValidDcqlPresentation(agentContext, presentations, dcqlQuery),
|
|
274
|
+
query: dcqlQuery
|
|
275
|
+
};
|
|
276
|
+
} catch (error) {
|
|
277
|
+
throw new Oauth2ServerErrorResponseError({
|
|
278
|
+
error: Oauth2ErrorCodes.InvalidRequest,
|
|
279
|
+
error_description: "Presentation submission does not satisfy presentation request."
|
|
280
|
+
}, { cause: error });
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
if (result.type === "pex") {
|
|
284
|
+
const pex = agentContext.dependencyManager.resolve(DifPresentationExchangeService);
|
|
285
|
+
const encodedPresentations = result.pex.presentations;
|
|
286
|
+
const submission = result.pex.presentationSubmission;
|
|
287
|
+
const definition = result.pex.presentationDefinition;
|
|
288
|
+
pex.validatePresentationDefinition(definition);
|
|
289
|
+
try {
|
|
290
|
+
pex.validatePresentationSubmission(submission);
|
|
291
|
+
} catch (error) {
|
|
292
|
+
throw new Oauth2ServerErrorResponseError({
|
|
293
|
+
error: Oauth2ErrorCodes.InvalidRequest,
|
|
294
|
+
error_description: "Invalid presentation submission."
|
|
295
|
+
}, { cause: error });
|
|
296
|
+
}
|
|
297
|
+
const presentationsArray = Array.isArray(encodedPresentations) ? encodedPresentations : [encodedPresentations];
|
|
298
|
+
const presentationVerificationResults = await Promise.all(presentationsArray.map((presentation) => {
|
|
299
|
+
return this.verifyPresentation(agentContext, {
|
|
300
|
+
nonce: authorizationRequest.nonce,
|
|
301
|
+
audience,
|
|
302
|
+
clientId,
|
|
303
|
+
version: openid4vpVersion,
|
|
304
|
+
encryptionJwk: encryptionPublicJwk,
|
|
305
|
+
responseUri,
|
|
306
|
+
mdocGeneratedNonce,
|
|
307
|
+
verificationSessionId: result.verificationSession.id,
|
|
308
|
+
presentation,
|
|
309
|
+
format: this.claimFormatFromEncodedPresentation(presentation),
|
|
310
|
+
origin: options.origin
|
|
311
|
+
});
|
|
312
|
+
}));
|
|
313
|
+
const errorMessages = presentationVerificationResults.map((result$1, index) => !result$1.verified ? `\t- [${index}]: ${result$1.reason}` : void 0).filter((i) => i !== void 0);
|
|
314
|
+
if (errorMessages.length > 0) throw new Oauth2ServerErrorResponseError({
|
|
315
|
+
error: Oauth2ErrorCodes.InvalidRequest,
|
|
316
|
+
error_description: "One or more presentations failed verification."
|
|
317
|
+
}, { internalMessage: errorMessages.join("\n") });
|
|
318
|
+
const verifiablePresentations = presentationVerificationResults.map((p) => p.verified ? p.presentation : void 0).filter((p) => p !== void 0);
|
|
319
|
+
try {
|
|
320
|
+
pex.validatePresentation(definition, verifiablePresentations.length === 1 ? verifiablePresentations[0] : verifiablePresentations, submission);
|
|
321
|
+
} catch (error) {
|
|
322
|
+
throw new Oauth2ServerErrorResponseError({
|
|
323
|
+
error: Oauth2ErrorCodes.InvalidRequest,
|
|
324
|
+
error_description: "Presentation submission does not satisfy presentation request."
|
|
325
|
+
}, { cause: error });
|
|
326
|
+
}
|
|
327
|
+
pexResponse = {
|
|
328
|
+
definition,
|
|
329
|
+
descriptors: extractPresentationsWithDescriptorsFromSubmission(verifiablePresentations.length === 1 ? verifiablePresentations[0] : verifiablePresentations, submission, definition),
|
|
330
|
+
presentations: verifiablePresentations,
|
|
331
|
+
submission
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
transactionData = await this.getVerifiedTransactionData(agentContext, {
|
|
335
|
+
authorizationRequest,
|
|
336
|
+
dcql: dcqlResponse,
|
|
337
|
+
presentationExchange: pexResponse
|
|
338
|
+
});
|
|
339
|
+
} catch (error) {
|
|
340
|
+
result.verificationSession.errorMessage = error.message;
|
|
341
|
+
await this.updateState(agentContext, result.verificationSession, OpenId4VcVerificationSessionState.Error);
|
|
342
|
+
throw error;
|
|
343
|
+
}
|
|
344
|
+
result.verificationSession.authorizationResponsePayload = result.authorizationResponsePayload;
|
|
345
|
+
await this.updateState(agentContext, result.verificationSession, OpenId4VcVerificationSessionState.ResponseVerified);
|
|
346
|
+
return {
|
|
347
|
+
presentationExchange: pexResponse,
|
|
348
|
+
dcql: dcqlResponse,
|
|
349
|
+
transactionData,
|
|
350
|
+
verificationSession: result.verificationSession
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Get the format based on an encoded presentation. This is mostly leveraged for
|
|
355
|
+
* PEX where it's not known based on the request which format to expect
|
|
356
|
+
*/
|
|
357
|
+
claimFormatFromEncodedPresentation(presentation) {
|
|
358
|
+
if (typeof presentation === "object") return ClaimFormat.LdpVp;
|
|
359
|
+
if (presentation.includes("~")) return ClaimFormat.SdJwtDc;
|
|
360
|
+
if (Jwt.format.test(presentation)) return ClaimFormat.JwtVp;
|
|
361
|
+
return ClaimFormat.MsoMdoc;
|
|
362
|
+
}
|
|
363
|
+
async getVerifiedAuthorizationResponse(agentContext, verificationSession) {
|
|
364
|
+
verificationSession.assertState(OpenId4VcVerificationSessionState.ResponseVerified);
|
|
365
|
+
if (!verificationSession.authorizationResponsePayload) throw new CredoError("No authorization response payload found in the verification session.");
|
|
366
|
+
const authorizationRequestPayload = verificationSession.requestPayload;
|
|
367
|
+
const openid4vpAuthorizationResponsePayload = verificationSession.authorizationResponsePayload;
|
|
368
|
+
const result = this.getOpenid4vpVerifier(agentContext).validateOpenid4vpAuthorizationResponsePayload({
|
|
369
|
+
authorizationRequestPayload: verificationSession.requestPayload,
|
|
370
|
+
authorizationResponsePayload: openid4vpAuthorizationResponsePayload
|
|
371
|
+
});
|
|
372
|
+
let presentationExchange;
|
|
373
|
+
const dcql = result.type === "dcql" ? await this.getDcqlVerifiedResponse(agentContext, authorizationRequestPayload.dcql_query, result.dcql.presentations) : void 0;
|
|
374
|
+
if (result.type === "pex") {
|
|
375
|
+
const presentationDefinition = authorizationRequestPayload.presentation_definition;
|
|
376
|
+
const submission = openid4vpAuthorizationResponsePayload.presentation_submission;
|
|
377
|
+
if (!submission) throw new CredoError("Unable to extract submission from the response.");
|
|
378
|
+
const verifiablePresentations = result.pex.presentations.map((presentation) => this.decodePresentation(agentContext, {
|
|
379
|
+
presentation,
|
|
380
|
+
format: this.claimFormatFromEncodedPresentation(presentation)
|
|
381
|
+
}));
|
|
382
|
+
presentationExchange = {
|
|
383
|
+
definition: presentationDefinition,
|
|
384
|
+
submission,
|
|
385
|
+
presentations: verifiablePresentations,
|
|
386
|
+
descriptors: extractPresentationsWithDescriptorsFromSubmission(verifiablePresentations.length === 1 ? verifiablePresentations[0] : verifiablePresentations, submission, presentationDefinition)
|
|
387
|
+
};
|
|
388
|
+
}
|
|
389
|
+
if (!presentationExchange && !dcql) throw new CredoError("No presentationExchange or dcql found in the response.");
|
|
390
|
+
const transactionData = await this.getVerifiedTransactionData(agentContext, {
|
|
391
|
+
authorizationRequest: authorizationRequestPayload,
|
|
392
|
+
dcql,
|
|
393
|
+
presentationExchange
|
|
394
|
+
});
|
|
395
|
+
return {
|
|
396
|
+
presentationExchange,
|
|
397
|
+
dcql,
|
|
398
|
+
transactionData,
|
|
399
|
+
verificationSession
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
async getVerifiedTransactionData(agentContext, { authorizationRequest, presentationExchange, dcql }) {
|
|
403
|
+
if (!authorizationRequest.transaction_data) return void 0;
|
|
404
|
+
const openid4vpVerifier = this.getOpenid4vpVerifier(agentContext);
|
|
405
|
+
const transactionDataHashesCredentials = {};
|
|
406
|
+
const idToCredential = dcql ? Object.entries(dcql.presentations) : presentationExchange?.descriptors.map((descriptor) => [descriptor.descriptor.id, [descriptor.presentation]]) ?? [];
|
|
407
|
+
for (const [credentialId, presentations] of idToCredential) {
|
|
408
|
+
const transactionDataHashes = presentations.map((presentation) => presentation.claimFormat === ClaimFormat.SdJwtDc ? getSdJwtVcTransactionDataHashes(presentation) : void 0);
|
|
409
|
+
const firstHasHash = transactionDataHashes[0] !== void 0;
|
|
410
|
+
if (!transactionDataHashes.every((hash) => firstHasHash ? hash !== void 0 : hash === void 0)) throw new Oauth2ServerErrorResponseError({
|
|
411
|
+
error: Oauth2ErrorCodes.InvalidTransactionData,
|
|
412
|
+
error_description: `Multipe presentations were submitted for credential query ${credentialId} but not all presentations includes a transaction data hash. Either all or none of the presentations for a credential query id should include a transaction data hash.`
|
|
413
|
+
});
|
|
414
|
+
if (!firstHasHash) continue;
|
|
415
|
+
transactionDataHashesCredentials[credentialId] = transactionDataHashes;
|
|
416
|
+
}
|
|
417
|
+
return (await openid4vpVerifier.verifyTransactionData({
|
|
418
|
+
credentials: transactionDataHashesCredentials,
|
|
419
|
+
transactionData: authorizationRequest.transaction_data
|
|
420
|
+
})).map(({ credentialId, transactionDataEntry, presentations }) => ({
|
|
421
|
+
credentialId,
|
|
422
|
+
encoded: transactionDataEntry.encoded,
|
|
423
|
+
decoded: transactionDataEntry.transactionData,
|
|
424
|
+
transactionDataIndex: transactionDataEntry.transactionDataIndex,
|
|
425
|
+
presentations: presentations.map((presentation) => ({
|
|
426
|
+
presentationHashIndex: presentation.credentialHashIndex,
|
|
427
|
+
hash: presentation.hash,
|
|
428
|
+
hashAlg: presentation.hashAlg
|
|
429
|
+
}))
|
|
430
|
+
}));
|
|
431
|
+
}
|
|
432
|
+
async getAllVerifiers(agentContext) {
|
|
433
|
+
return this.openId4VcVerifierRepository.getAll(agentContext);
|
|
434
|
+
}
|
|
435
|
+
async getVerifierByVerifierId(agentContext, verifierId) {
|
|
436
|
+
return this.openId4VcVerifierRepository.getByVerifierId(agentContext, verifierId);
|
|
437
|
+
}
|
|
438
|
+
async updateVerifier(agentContext, verifier) {
|
|
439
|
+
return this.openId4VcVerifierRepository.update(agentContext, verifier);
|
|
440
|
+
}
|
|
441
|
+
async createVerifier(agentContext, options) {
|
|
442
|
+
const openId4VcVerifier = new OpenId4VcVerifierRecord({
|
|
443
|
+
verifierId: options?.verifierId ?? utils.uuid(),
|
|
444
|
+
clientMetadata: options?.clientMetadata
|
|
445
|
+
});
|
|
446
|
+
await this.openId4VcVerifierRepository.save(agentContext, openId4VcVerifier);
|
|
447
|
+
await storeActorIdForContextCorrelationId(agentContext, openId4VcVerifier.verifierId);
|
|
448
|
+
return openId4VcVerifier;
|
|
449
|
+
}
|
|
450
|
+
async findVerificationSessionsByQuery(agentContext, query, queryOptions) {
|
|
451
|
+
return this.openId4VcVerificationSessionRepository.findByQuery(agentContext, query, queryOptions);
|
|
452
|
+
}
|
|
453
|
+
async getVerificationSessionById(agentContext, verificationSessionId) {
|
|
454
|
+
return this.openId4VcVerificationSessionRepository.getById(agentContext, verificationSessionId);
|
|
455
|
+
}
|
|
456
|
+
async getClientMetadata(agentContext, options) {
|
|
457
|
+
const { responseMode, verifier } = options;
|
|
458
|
+
const signatureSuiteRegistry = agentContext.resolve(SignatureSuiteRegistry);
|
|
459
|
+
const kms = agentContext.resolve(Kms.KeyManagementApi);
|
|
460
|
+
const supportedAlgs = getSupportedJwaSignatureAlgorithms(agentContext);
|
|
461
|
+
const supportedMdocAlgs = supportedAlgs.filter(isMdocSupportedSignatureAlgorithm);
|
|
462
|
+
const supportedProofTypes = signatureSuiteRegistry.supportedProofTypes;
|
|
463
|
+
let jarmEncryptionJwk;
|
|
464
|
+
if (isJarmResponseMode(responseMode)) jarmEncryptionJwk = {
|
|
465
|
+
...(await kms.createKey({ type: {
|
|
466
|
+
crv: "P-256",
|
|
467
|
+
kty: "EC"
|
|
468
|
+
} })).publicJwk,
|
|
469
|
+
use: "enc"
|
|
470
|
+
};
|
|
471
|
+
const jarmClientMetadata = jarmEncryptionJwk ? {
|
|
472
|
+
jwks: { keys: [jarmEncryptionJwk] },
|
|
473
|
+
...options.version === "v1" ? { encrypted_response_enc_values_supported: [
|
|
474
|
+
"A128GCM",
|
|
475
|
+
"A256GCM",
|
|
476
|
+
"A128CBC-HS256"
|
|
477
|
+
] } : {
|
|
478
|
+
authorization_encrypted_response_alg: "ECDH-ES",
|
|
479
|
+
authorization_encrypted_response_enc: options.version === "v1.draft24" ? "A128GCM" : "A256GCM"
|
|
480
|
+
}
|
|
481
|
+
} : void 0;
|
|
482
|
+
const dclqQueryFormats = new Set(options.dcqlQuery?.credentials.map((c) => c.format));
|
|
483
|
+
return {
|
|
484
|
+
...jarmClientMetadata,
|
|
485
|
+
...verifier.clientMetadata,
|
|
486
|
+
response_types_supported: ["vp_token"],
|
|
487
|
+
...options.version === "v1" ? { vp_formats_supported: {
|
|
488
|
+
...dclqQueryFormats.has("dc+sd-jwt") ? { "dc+sd-jwt": {
|
|
489
|
+
"kb-jwt_alg_values": supportedAlgs,
|
|
490
|
+
"sd-jwt_alg_values": supportedAlgs
|
|
491
|
+
} } : {},
|
|
492
|
+
...dclqQueryFormats.has("mso_mdoc") ? { mso_mdoc: {
|
|
493
|
+
deviceauth_alg_values: [
|
|
494
|
+
-9,
|
|
495
|
+
-51,
|
|
496
|
+
-19
|
|
497
|
+
],
|
|
498
|
+
issuerauth_alg_values: [
|
|
499
|
+
-9,
|
|
500
|
+
-51,
|
|
501
|
+
-19
|
|
502
|
+
]
|
|
503
|
+
} } : {},
|
|
504
|
+
...dclqQueryFormats.has("jwt_vc_json") ? { jwt_vc_json: { alg_values: supportedAlgs } } : {},
|
|
505
|
+
...dclqQueryFormats.has("ldp_vc") ? { ldp_vc: { proof_type_values: supportedProofTypes } } : {}
|
|
506
|
+
} } : { vp_formats: {
|
|
507
|
+
mso_mdoc: { alg: supportedMdocAlgs },
|
|
508
|
+
jwt_vc: { alg: supportedAlgs },
|
|
509
|
+
jwt_vc_json: { alg: supportedAlgs },
|
|
510
|
+
jwt_vp_json: { alg: supportedAlgs },
|
|
511
|
+
jwt_vp: { alg: supportedAlgs },
|
|
512
|
+
ldp_vc: { proof_type: supportedProofTypes },
|
|
513
|
+
ldp_vp: { proof_type: supportedProofTypes },
|
|
514
|
+
"vc+sd-jwt": {
|
|
515
|
+
"kb-jwt_alg_values": supportedAlgs,
|
|
516
|
+
"sd-jwt_alg_values": supportedAlgs
|
|
517
|
+
},
|
|
518
|
+
"dc+sd-jwt": {
|
|
519
|
+
"kb-jwt_alg_values": supportedAlgs,
|
|
520
|
+
"sd-jwt_alg_values": supportedAlgs
|
|
521
|
+
}
|
|
522
|
+
} }
|
|
523
|
+
};
|
|
524
|
+
}
|
|
525
|
+
decodePresentation(agentContext, options) {
|
|
526
|
+
const { presentation, format } = options;
|
|
527
|
+
if (format === ClaimFormat.SdJwtDc) {
|
|
528
|
+
if (typeof presentation !== "string") throw new CredoError(`Expected vp_token entry for format ${format} to be of type string`);
|
|
529
|
+
return agentContext.dependencyManager.resolve(SdJwtVcApi).fromCompact(presentation);
|
|
530
|
+
}
|
|
531
|
+
if (format === ClaimFormat.MsoMdoc) {
|
|
532
|
+
if (typeof presentation !== "string") throw new CredoError(`Expected vp_token entry for format ${format} to be of type string`);
|
|
533
|
+
return MdocDeviceResponse.fromBase64Url(presentation);
|
|
534
|
+
}
|
|
535
|
+
if (format === ClaimFormat.JwtVp) {
|
|
536
|
+
if (typeof presentation !== "string") throw new CredoError(`Expected vp_token entry for format ${format} to be of type string`);
|
|
537
|
+
return W3cJwtVerifiablePresentation.fromSerializedJwt(presentation);
|
|
538
|
+
}
|
|
539
|
+
if (format === ClaimFormat.SdJwtW3cVp) {
|
|
540
|
+
if (typeof presentation !== "string") throw new CredoError(`Expected vp_token entry for format ${format} to be of type string`);
|
|
541
|
+
return W3cV2SdJwtVerifiablePresentation.fromCompact(presentation);
|
|
542
|
+
}
|
|
543
|
+
return JsonTransformer.fromJSON(presentation, W3cJsonLdVerifiablePresentation);
|
|
544
|
+
}
|
|
545
|
+
async verifyPresentation(agentContext, options) {
|
|
546
|
+
const x509Config = agentContext.dependencyManager.resolve(X509ModuleConfig);
|
|
547
|
+
const sdJwtVcApi = agentContext.dependencyManager.resolve(SdJwtVcApi);
|
|
548
|
+
const { presentation, format } = options;
|
|
549
|
+
try {
|
|
550
|
+
this.logger.trace("Presentation response", JsonTransformer.toJSON(presentation));
|
|
551
|
+
let isValid;
|
|
552
|
+
let cause;
|
|
553
|
+
let verifiablePresentation;
|
|
554
|
+
if (format === ClaimFormat.SdJwtDc) {
|
|
555
|
+
if (typeof presentation !== "string") throw new CredoError(`Expected vp_token entry for format ${format} to be of type string`);
|
|
556
|
+
const sdJwtVc = sdJwtVcApi.fromCompact(presentation);
|
|
557
|
+
const certificateChain = extractX509CertificatesFromJwt(Jwt.fromSerializedJwt(presentation.split("~")[0]));
|
|
558
|
+
let trustedCertificates;
|
|
559
|
+
if (certificateChain && x509Config.getTrustedCertificatesForVerification) trustedCertificates = await x509Config.getTrustedCertificatesForVerification(agentContext, {
|
|
560
|
+
certificateChain,
|
|
561
|
+
verification: {
|
|
562
|
+
type: "credential",
|
|
563
|
+
credential: sdJwtVc,
|
|
564
|
+
openId4VcVerificationSessionId: options.verificationSessionId
|
|
565
|
+
}
|
|
566
|
+
});
|
|
567
|
+
if (!trustedCertificates) trustedCertificates = x509Config.trustedCertificates ?? [];
|
|
568
|
+
const verificationResult = await sdJwtVcApi.verify({
|
|
569
|
+
compactSdJwtVc: presentation,
|
|
570
|
+
keyBinding: {
|
|
571
|
+
audience: options.audience,
|
|
572
|
+
nonce: options.nonce
|
|
573
|
+
},
|
|
574
|
+
trustedCertificates
|
|
575
|
+
});
|
|
576
|
+
isValid = verificationResult.isValid;
|
|
577
|
+
cause = verificationResult.isValid ? void 0 : verificationResult.error;
|
|
578
|
+
verifiablePresentation = sdJwtVc;
|
|
579
|
+
} else if (format === ClaimFormat.MsoMdoc) {
|
|
580
|
+
if (typeof presentation !== "string") throw new CredoError("Expected vp_token entry for format mso_mdoc to be of type string");
|
|
581
|
+
const mdocDeviceResponse = MdocDeviceResponse.fromBase64Url(presentation);
|
|
582
|
+
if (mdocDeviceResponse.documents.length === 0) throw new CredoError("mdoc device response does not contain any mdocs");
|
|
583
|
+
const deviceResponses = mdocDeviceResponse.splitIntoSingleDocumentResponses();
|
|
584
|
+
for (const deviceResponseIndex of deviceResponses.keys()) {
|
|
585
|
+
const mdocDeviceResponse$1 = deviceResponses[deviceResponseIndex];
|
|
586
|
+
const document = mdocDeviceResponse$1.documents[0];
|
|
587
|
+
const certificateChain = document.issuerSignedCertificateChain.map((cert) => X509Certificate.fromRawCertificate(cert));
|
|
588
|
+
const trustedCertificates = await x509Config.getTrustedCertificatesForVerification?.(agentContext, {
|
|
589
|
+
certificateChain,
|
|
590
|
+
verification: {
|
|
591
|
+
type: "credential",
|
|
592
|
+
credential: document,
|
|
593
|
+
openId4VcVerificationSessionId: options.verificationSessionId
|
|
594
|
+
}
|
|
595
|
+
});
|
|
596
|
+
let sessionTranscriptOptions;
|
|
597
|
+
if (options.origin && options.version === "v1") sessionTranscriptOptions = {
|
|
598
|
+
type: "openId4VpDcApi",
|
|
599
|
+
verifierGeneratedNonce: options.nonce,
|
|
600
|
+
origin: options.origin,
|
|
601
|
+
encryptionJwk: options.encryptionJwk
|
|
602
|
+
};
|
|
603
|
+
else if (options.origin) sessionTranscriptOptions = {
|
|
604
|
+
type: "openId4VpDcApiDraft24",
|
|
605
|
+
clientId: options.clientId,
|
|
606
|
+
verifierGeneratedNonce: options.nonce,
|
|
607
|
+
origin: options.origin
|
|
608
|
+
};
|
|
609
|
+
else if (options.version === "v1") {
|
|
610
|
+
if (!options.responseUri) throw new CredoError("responseUri is required for mdoc openid4vp session transcript calculation");
|
|
611
|
+
sessionTranscriptOptions = {
|
|
612
|
+
type: "openId4Vp",
|
|
613
|
+
clientId: options.clientId,
|
|
614
|
+
responseUri: options.responseUri,
|
|
615
|
+
verifierGeneratedNonce: options.nonce,
|
|
616
|
+
encryptionJwk: options.encryptionJwk
|
|
617
|
+
};
|
|
618
|
+
} else {
|
|
619
|
+
if (!options.mdocGeneratedNonce || !options.responseUri) throw new CredoError("mdocGeneratedNonce and responseUri are required for mdoc openid4vp session transcript calculation");
|
|
620
|
+
sessionTranscriptOptions = {
|
|
621
|
+
type: "openId4VpDraft18",
|
|
622
|
+
clientId: options.clientId,
|
|
623
|
+
mdocGeneratedNonce: options.mdocGeneratedNonce,
|
|
624
|
+
responseUri: options.responseUri,
|
|
625
|
+
verifierGeneratedNonce: options.nonce
|
|
626
|
+
};
|
|
627
|
+
}
|
|
628
|
+
await mdocDeviceResponse$1.verify(agentContext, {
|
|
629
|
+
sessionTranscriptOptions,
|
|
630
|
+
trustedCertificates
|
|
631
|
+
});
|
|
632
|
+
}
|
|
633
|
+
isValid = true;
|
|
634
|
+
verifiablePresentation = mdocDeviceResponse;
|
|
635
|
+
} else if (format === ClaimFormat.JwtVp) {
|
|
636
|
+
if (typeof presentation !== "string") throw new CredoError(`Expected vp_token entry for format ${format} to be of type string`);
|
|
637
|
+
verifiablePresentation = W3cJwtVerifiablePresentation.fromSerializedJwt(presentation);
|
|
638
|
+
const verificationResult = await this.w3cCredentialService.verifyPresentation(agentContext, {
|
|
639
|
+
presentation,
|
|
640
|
+
challenge: options.nonce,
|
|
641
|
+
domain: options.audience
|
|
642
|
+
});
|
|
643
|
+
isValid = verificationResult.isValid;
|
|
644
|
+
cause = verificationResult.error;
|
|
645
|
+
} else if (format === ClaimFormat.SdJwtW3cVp) {
|
|
646
|
+
if (typeof presentation !== "string") throw new CredoError(`Expected vp_token entry for format ${format} to be of type string`);
|
|
647
|
+
verifiablePresentation = W3cV2SdJwtVerifiablePresentation.fromCompact(presentation);
|
|
648
|
+
const verificationResult = await this.w3cV2CredentialService.verifyPresentation(agentContext, {
|
|
649
|
+
presentation: verifiablePresentation,
|
|
650
|
+
challenge: options.nonce,
|
|
651
|
+
domain: options.audience
|
|
652
|
+
});
|
|
653
|
+
isValid = verificationResult.isValid;
|
|
654
|
+
cause = verificationResult.error;
|
|
655
|
+
} else {
|
|
656
|
+
verifiablePresentation = JsonTransformer.fromJSON(presentation, W3cJsonLdVerifiablePresentation);
|
|
657
|
+
const verificationResult = await this.w3cCredentialService.verifyPresentation(agentContext, {
|
|
658
|
+
presentation: verifiablePresentation,
|
|
659
|
+
challenge: options.nonce,
|
|
660
|
+
domain: options.audience
|
|
661
|
+
});
|
|
662
|
+
isValid = verificationResult.isValid;
|
|
663
|
+
cause = verificationResult.error;
|
|
664
|
+
}
|
|
665
|
+
if (!isValid) throw new CredoError(`Error occured during verification of presentation.${cause ? ` ${cause.message}` : ""}`, { cause });
|
|
666
|
+
return {
|
|
667
|
+
verified: true,
|
|
668
|
+
presentation: verifiablePresentation
|
|
669
|
+
};
|
|
670
|
+
} catch (error) {
|
|
671
|
+
agentContext.config.logger.warn("Error occurred during verification of presentation", { error });
|
|
672
|
+
return {
|
|
673
|
+
verified: false,
|
|
674
|
+
reason: error.message
|
|
675
|
+
};
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
/**
|
|
679
|
+
* Update the record to a new state and emit an state changed event. Also updates the record
|
|
680
|
+
* in storage.
|
|
681
|
+
*/
|
|
682
|
+
async updateState(agentContext, verificationSession, newState) {
|
|
683
|
+
agentContext.config.logger.debug(`Updating openid4vc verification session record ${verificationSession.id} to state ${newState} (previous=${verificationSession.state})`);
|
|
684
|
+
const previousState = verificationSession.state;
|
|
685
|
+
verificationSession.state = newState;
|
|
686
|
+
await this.openId4VcVerificationSessionRepository.update(agentContext, verificationSession);
|
|
687
|
+
this.emitStateChangedEvent(agentContext, verificationSession, previousState);
|
|
688
|
+
}
|
|
689
|
+
emitStateChangedEvent(agentContext, verificationSession, previousState) {
|
|
690
|
+
agentContext.dependencyManager.resolve(EventEmitter).emit(agentContext, {
|
|
691
|
+
type: OpenId4VcVerifierEvents.VerificationSessionStateChanged,
|
|
692
|
+
payload: {
|
|
693
|
+
verificationSession: verificationSession.clone(),
|
|
694
|
+
previousState
|
|
695
|
+
}
|
|
696
|
+
});
|
|
697
|
+
}
|
|
698
|
+
};
|
|
699
|
+
OpenId4VpVerifierService = __decorate([
|
|
700
|
+
injectable(),
|
|
701
|
+
__decorateParam(0, inject(InjectionSymbols.Logger)),
|
|
702
|
+
__decorateMetadata("design:paramtypes", [
|
|
703
|
+
Object,
|
|
704
|
+
typeof (_ref = typeof W3cCredentialService !== "undefined" && W3cCredentialService) === "function" ? _ref : Object,
|
|
705
|
+
typeof (_ref2 = typeof W3cV2CredentialService !== "undefined" && W3cV2CredentialService) === "function" ? _ref2 : Object,
|
|
706
|
+
typeof (_ref3 = typeof OpenId4VcVerifierRepository !== "undefined" && OpenId4VcVerifierRepository) === "function" ? _ref3 : Object,
|
|
707
|
+
typeof (_ref4 = typeof OpenId4VcVerifierModuleConfig !== "undefined" && OpenId4VcVerifierModuleConfig) === "function" ? _ref4 : Object,
|
|
708
|
+
typeof (_ref5 = typeof OpenId4VcVerificationSessionRepository !== "undefined" && OpenId4VcVerificationSessionRepository) === "function" ? _ref5 : Object
|
|
709
|
+
])
|
|
710
|
+
], OpenId4VpVerifierService);
|
|
711
|
+
|
|
712
|
+
//#endregion
|
|
713
|
+
export { OpenId4VpVerifierService };
|
|
714
|
+
//# sourceMappingURL=OpenId4VpVerifierService.mjs.map
|