11import {
22 convertJsonToURI ,
3- convertURIToJsonObject , CredentialOffer ,
4- CredentialOfferRequestWithBaseUrl , CredentialOfferV1_0_11 ,
5- CredentialOfferV1_0_13 , decodeJsonProperties ,
3+ convertURIToJsonObject ,
4+ CredentialOffer ,
5+ CredentialOfferRequestWithBaseUrl ,
6+ CredentialOfferV1_0_11 ,
7+ CredentialOfferV1_0_13 ,
8+ decodeJsonProperties ,
69 determineSpecVersionFromURI ,
7- getClientIdFromCredentialOfferPayload , getURIComponentsAsArray ,
10+ getClientIdFromCredentialOfferPayload ,
11+ getURIComponentsAsArray ,
812 OpenId4VCIVersion ,
913 PRE_AUTH_CODE_LITERAL ,
1014 PRE_AUTH_GRANT_LITERAL ,
1115 toUniformCredentialOfferRequest
1216} from '@sphereon/oid4vci-common'
13- import Debug from 'debug' ;
17+ import Debug from 'debug'
1418import { fetch } from 'cross-fetch'
19+ import { isUrlEncoded } from './functions'
1520
1621const debug = Debug ( 'sphereon:oid4vci:offer' ) ;
1722
@@ -28,8 +33,8 @@ export class CredentialOfferClientV1_0_13 {
2833 let credentialOffer : CredentialOffer
2934 if ( uri . includes ( 'credential_offer_uri' ) ) { // FIXME deduplicate
3035 const uriObj = getURIComponentsAsArray ( uri ) as unknown as Record < string , string > // FIXME
31- const credentialOfferUri = decodeURIComponent ( uriObj [ 'credential_offer_uri' ] ) // It is double URI encoded
32- const decodedUri = decodeURIComponent ( credentialOfferUri ) ;
36+ const credentialOfferUri = decodeURIComponent ( uriObj [ 'credential_offer_uri' ] )
37+ const decodedUri = isUrlEncoded ( credentialOfferUri ) ? decodeURIComponent ( credentialOfferUri ) : credentialOfferUri
3338 const response = await fetch ( decodedUri )
3439 if ( ! ( response && response . status >= 200 && response . status < 400 ) ) {
3540 return Promise . reject ( `the credential offer URI endpoint call was not successful. http code ${ response . status } - reason ${ response . statusText } ` )
0 commit comments