Skip to content

Commit bf593f4

Browse files
committed
chore: fixed CredentialOfferClientV1_0_13.ts
1 parent c91aad8 commit bf593f4

4 files changed

Lines changed: 26 additions & 12 deletions

File tree

packages/client/lib/CredentialOfferClient.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,21 @@ import {
66
CredentialOfferPayloadV1_0_09,
77
CredentialOfferRequestWithBaseUrl,
88
CredentialOfferV1_0_11,
9-
CredentialOfferV1_0_13, decodeJsonProperties,
9+
CredentialOfferV1_0_13,
10+
decodeJsonProperties,
1011
determineSpecVersionFromURI,
11-
getClientIdFromCredentialOfferPayload, getURIComponentsAsArray,
12+
getClientIdFromCredentialOfferPayload,
13+
getURIComponentsAsArray,
1214
OpenId4VCIVersion,
1315
PRE_AUTH_CODE_LITERAL,
1416
PRE_AUTH_GRANT_LITERAL,
1517
toUniformCredentialOfferRequest
1618
} from '@sphereon/oid4vci-common'
17-
import Debug from 'debug';
19+
import Debug from 'debug'
1820

19-
import { LOG } from './types';
21+
import { LOG } from './types'
2022
import { fetch } from 'cross-fetch'
23+
import { isUrlEncoded } from './functions'
2124

2225
const debug = Debug('sphereon:oid4vci:offer');
2326

@@ -47,7 +50,7 @@ export class CredentialOfferClient {
4750
if (uri.includes('credential_offer_uri')) {
4851
const uriObj = getURIComponentsAsArray(uri) as unknown as Record<string, string> // FIXME
4952
const credentialOfferUri = decodeURIComponent(uriObj['credential_offer_uri'])
50-
const decodedUri = decodeURIComponent(credentialOfferUri); // It is double URI encoded
53+
const decodedUri = isUrlEncoded(credentialOfferUri) ? decodeURIComponent(credentialOfferUri) : credentialOfferUri
5154
const response = await fetch(decodedUri)
5255
if (!(response && response.status >= 200 && response.status < 400)) {
5356
return Promise.reject(`the credential offer URI endpoint call was not successful. http code ${response.status} - reason ${response.statusText}`)

packages/client/lib/CredentialOfferClientV1_0_13.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
11
import {
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'
1418
import { fetch } from 'cross-fetch'
19+
import { isUrlEncoded } from './functions'
1520

1621
const 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}`)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
2+
export function isUrlEncoded(str: string): boolean {
3+
const pattern = /%[0-9A-F]{2}/i
4+
return pattern.test(str)
5+
}

packages/client/lib/functions/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ export * from './AuthorizationUtil';
22
export * from './notifications';
33
export * from './OpenIDUtils';
44
export * from './AccessTokenUtil';
5+
export * from './UrlUtil';

0 commit comments

Comments
 (0)