@sphereon/oid4vci-common 0.10.3 → 0.10.4-next.119
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/dist/events/index.d.ts +17 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +21 -0
- package/dist/events/index.js.map +1 -0
- package/dist/experimental/holder-vci.d.ts +13 -0
- package/dist/experimental/holder-vci.d.ts.map +1 -0
- package/dist/experimental/holder-vci.js +9 -0
- package/dist/experimental/holder-vci.js.map +1 -0
- package/dist/functions/CredentialOfferUtil.d.ts +3 -3
- package/dist/functions/CredentialOfferUtil.d.ts.map +1 -1
- package/dist/functions/CredentialOfferUtil.js +71 -28
- package/dist/functions/CredentialOfferUtil.js.map +1 -1
- package/dist/functions/CredentialRequestUtil.d.ts +3 -3
- package/dist/functions/CredentialRequestUtil.d.ts.map +1 -1
- package/dist/functions/CredentialRequestUtil.js +13 -4
- package/dist/functions/CredentialRequestUtil.js.map +1 -1
- package/dist/functions/CredentialResponseUtil.d.ts +3 -1
- package/dist/functions/CredentialResponseUtil.d.ts.map +1 -1
- package/dist/functions/CredentialResponseUtil.js +1 -1
- package/dist/functions/CredentialResponseUtil.js.map +1 -1
- package/dist/functions/Encoding.d.ts +7 -6
- package/dist/functions/Encoding.d.ts.map +1 -1
- package/dist/functions/Encoding.js +9 -8
- package/dist/functions/Encoding.js.map +1 -1
- package/dist/functions/IssuerMetadataUtils.d.ts +19 -12
- package/dist/functions/IssuerMetadataUtils.d.ts.map +1 -1
- package/dist/functions/IssuerMetadataUtils.js +155 -88
- package/dist/functions/IssuerMetadataUtils.js.map +1 -1
- package/dist/functions/ProofUtil.d.ts +38 -0
- package/dist/functions/ProofUtil.d.ts.map +1 -0
- package/dist/functions/ProofUtil.js +141 -0
- package/dist/functions/ProofUtil.js.map +1 -0
- package/dist/functions/index.d.ts +1 -0
- package/dist/functions/index.d.ts.map +1 -1
- package/dist/functions/index.js +1 -0
- package/dist/functions/index.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/types/Authorization.types.d.ts +26 -4
- package/dist/types/Authorization.types.d.ts.map +1 -1
- package/dist/types/Authorization.types.js +7 -1
- package/dist/types/Authorization.types.js.map +1 -1
- package/dist/types/CredentialIssuance.types.d.ts +17 -10
- package/dist/types/CredentialIssuance.types.d.ts.map +1 -1
- package/dist/types/CredentialIssuance.types.js.map +1 -1
- package/dist/types/Generic.types.d.ts +104 -17
- package/dist/types/Generic.types.d.ts.map +1 -1
- package/dist/types/Generic.types.js.map +1 -1
- package/dist/types/OpenID4VCIErrors.d.ts +1 -0
- package/dist/types/OpenID4VCIErrors.d.ts.map +1 -1
- package/dist/types/OpenID4VCIErrors.js +2 -1
- package/dist/types/OpenID4VCIErrors.js.map +1 -1
- package/dist/types/OpenID4VCIVersions.types.d.ts +1 -0
- package/dist/types/OpenID4VCIVersions.types.d.ts.map +1 -1
- package/dist/types/OpenID4VCIVersions.types.js +1 -0
- package/dist/types/OpenID4VCIVersions.types.js.map +1 -1
- package/dist/types/ServerMetadata.d.ts +0 -7
- package/dist/types/ServerMetadata.d.ts.map +1 -1
- package/dist/types/ServerMetadata.js.map +1 -1
- package/dist/types/StateManager.types.d.ts +1 -0
- package/dist/types/StateManager.types.d.ts.map +1 -1
- package/dist/types/StateManager.types.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/v1_0_11.types.d.ts +35 -5
- package/dist/types/v1_0_11.types.d.ts.map +1 -1
- package/dist/types/v1_0_11.types.js.map +1 -1
- package/dist/types/v1_0_12.types.d.ts +30 -1
- package/dist/types/v1_0_12.types.d.ts.map +1 -1
- package/dist/types/v1_0_13.types.d.ts +120 -0
- package/dist/types/v1_0_13.types.d.ts.map +1 -0
- package/dist/types/v1_0_13.types.js +3 -0
- package/dist/types/v1_0_13.types.js.map +1 -0
- package/lib/__tests__/CredentialOfferUtil.spec.ts +25 -9
- package/lib/__tests__/IssuerMetadataUtils.spec.ts +38 -0
- package/lib/events/index.ts +20 -0
- package/lib/experimental/holder-vci.ts +19 -0
- package/lib/functions/CredentialOfferUtil.ts +78 -26
- package/lib/functions/CredentialRequestUtil.ts +23 -8
- package/lib/functions/CredentialResponseUtil.ts +4 -4
- package/lib/functions/Encoding.ts +10 -8
- package/lib/functions/IssuerMetadataUtils.ts +164 -93
- package/lib/functions/ProofUtil.ts +185 -0
- package/lib/functions/index.ts +1 -0
- package/lib/index.ts +7 -0
- package/lib/types/Authorization.types.ts +31 -4
- package/lib/types/CredentialIssuance.types.ts +26 -10
- package/lib/types/Generic.types.ts +150 -27
- package/lib/types/OpenID4VCIErrors.ts +1 -0
- package/lib/types/OpenID4VCIVersions.types.ts +1 -0
- package/lib/types/ServerMetadata.ts +0 -10
- package/lib/types/StateManager.types.ts +1 -0
- package/lib/types/index.ts +1 -0
- package/lib/types/v1_0_11.types.ts +41 -4
- package/lib/types/v1_0_12.types.ts +39 -1
- package/lib/types/v1_0_13.types.ts +158 -0
- package/package.json +3 -11
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import Debug from 'debug';
|
|
2
2
|
import jwtDecode, { JwtPayload } from 'jwt-decode';
|
|
3
3
|
|
|
4
|
+
import { VCI_LOG_COMMON } from '../index';
|
|
4
5
|
import {
|
|
5
6
|
AssertedUniformCredentialOffer,
|
|
6
7
|
AuthzFlowType,
|
|
@@ -9,6 +10,7 @@ import {
|
|
|
9
10
|
CredentialOfferPayloadV1_0_08,
|
|
10
11
|
CredentialOfferPayloadV1_0_09,
|
|
11
12
|
CredentialOfferPayloadV1_0_11,
|
|
13
|
+
CredentialOfferPayloadV1_0_13,
|
|
12
14
|
DefaultURISchemes,
|
|
13
15
|
Grant,
|
|
14
16
|
GrantTypes,
|
|
@@ -24,22 +26,22 @@ import { getJson } from './HttpUtils';
|
|
|
24
26
|
const debug = Debug('sphereon:oid4vci:offer');
|
|
25
27
|
|
|
26
28
|
export function determineSpecVersionFromURI(uri: string): OpenId4VCIVersion {
|
|
27
|
-
let version
|
|
28
|
-
|
|
29
|
-
version =
|
|
30
|
-
version = getVersionFromURIParam(uri, version, OpenId4VCIVersion.VER_1_0_08, '
|
|
31
|
-
version = getVersionFromURIParam(uri, version, OpenId4VCIVersion.VER_1_0_08, 'credential_type');
|
|
32
|
-
version = getVersionFromURIParam(uri, version, OpenId4VCIVersion.VER_1_0_08, 'op_state');
|
|
29
|
+
let version = determineSpecVersionFromScheme(uri, OpenId4VCIVersion.VER_UNKNOWN) ?? OpenId4VCIVersion.VER_UNKNOWN;
|
|
30
|
+
version = getVersionFromURIParam(uri, version, [OpenId4VCIVersion.VER_1_0_08], 'initiate_issuance');
|
|
31
|
+
version = getVersionFromURIParam(uri, version, [OpenId4VCIVersion.VER_1_0_08], 'credential_type');
|
|
32
|
+
version = getVersionFromURIParam(uri, version, [OpenId4VCIVersion.VER_1_0_08], 'op_state');
|
|
33
33
|
|
|
34
34
|
// version = getVersionFromURIParam(uri, version, OpenId4VCIVersion.VER_1_0_09, 'credentials');
|
|
35
35
|
// version = getVersionFromURIParam(uri, version, OpenId4VCIVersion.VER_1_0_09, 'initiate_issuance_uri')
|
|
36
36
|
|
|
37
|
-
version = getVersionFromURIParam(uri, version, OpenId4VCIVersion.VER_1_0_11, '
|
|
38
|
-
version = getVersionFromURIParam(uri, version, OpenId4VCIVersion.VER_1_0_11, '
|
|
39
|
-
version = getVersionFromURIParam(uri, version, OpenId4VCIVersion.VER_1_0_11, 'grants');
|
|
37
|
+
// version = getVersionFromURIParam(uri, version, OpenId4VCIVersion.VER_1_0_11, 'credential_offer=');
|
|
38
|
+
version = getVersionFromURIParam(uri, version, [OpenId4VCIVersion.VER_1_0_11], 'credentials');
|
|
39
|
+
version = getVersionFromURIParam(uri, version, [OpenId4VCIVersion.VER_1_0_11], 'grants.user_pin_required');
|
|
40
40
|
|
|
41
|
+
version = getVersionFromURIParam(uri, version, [OpenId4VCIVersion.VER_1_0_13], 'credential_configuration_ids');
|
|
42
|
+
version = getVersionFromURIParam(uri, version, [OpenId4VCIVersion.VER_1_0_13], 'tx_code');
|
|
41
43
|
if (version === OpenId4VCIVersion.VER_UNKNOWN) {
|
|
42
|
-
version = OpenId4VCIVersion.
|
|
44
|
+
version = OpenId4VCIVersion.VER_1_0_13;
|
|
43
45
|
}
|
|
44
46
|
return version;
|
|
45
47
|
}
|
|
@@ -47,11 +49,19 @@ export function determineSpecVersionFromURI(uri: string): OpenId4VCIVersion {
|
|
|
47
49
|
export function determineSpecVersionFromScheme(credentialOfferURI: string, openId4VCIVersion: OpenId4VCIVersion) {
|
|
48
50
|
const scheme = getScheme(credentialOfferURI);
|
|
49
51
|
if (credentialOfferURI.includes(DefaultURISchemes.INITIATE_ISSUANCE)) {
|
|
50
|
-
return recordVersion(openId4VCIVersion, OpenId4VCIVersion.VER_1_0_08, scheme);
|
|
51
|
-
}
|
|
52
|
-
|
|
52
|
+
return recordVersion(openId4VCIVersion, [OpenId4VCIVersion.VER_1_0_08], scheme);
|
|
53
|
+
}
|
|
54
|
+
if (credentialOfferURI.includes('credential_offer_uri')) {
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
// todo: drop support for v1_0_8. version 11 and version 13 have the same scheme 'openid-credential-offer'
|
|
58
|
+
else if (credentialOfferURI.includes(DefaultURISchemes.CREDENTIAL_OFFER)) {
|
|
59
|
+
if (credentialOfferURI.includes('credentials:') || credentialOfferURI.includes('credentials%22')) {
|
|
60
|
+
return recordVersion(openId4VCIVersion, [OpenId4VCIVersion.VER_1_0_11], scheme);
|
|
61
|
+
}
|
|
62
|
+
return recordVersion(openId4VCIVersion, [OpenId4VCIVersion.VER_1_0_13], scheme);
|
|
53
63
|
} else {
|
|
54
|
-
return recordVersion(openId4VCIVersion, OpenId4VCIVersion.VER_UNKNOWN, scheme);
|
|
64
|
+
return recordVersion(openId4VCIVersion, [OpenId4VCIVersion.VER_UNKNOWN], scheme);
|
|
55
65
|
}
|
|
56
66
|
}
|
|
57
67
|
|
|
@@ -113,8 +123,11 @@ export const getStateFromCredentialOfferPayload = (credentialOffer: CredentialOf
|
|
|
113
123
|
};
|
|
114
124
|
|
|
115
125
|
export function determineSpecVersionFromOffer(offer: CredentialOfferPayload | CredentialOffer): OpenId4VCIVersion {
|
|
116
|
-
if (
|
|
117
|
-
return OpenId4VCIVersion.
|
|
126
|
+
if (isCredentialOfferV1_0_13(offer)) {
|
|
127
|
+
return OpenId4VCIVersion.VER_1_0_13;
|
|
128
|
+
// We don't have full support for V12, so let's skip for now
|
|
129
|
+
/*} else if (isCredentialOfferV1_0_12(offer)) {
|
|
130
|
+
return OpenId4VCIVersion.VER_1_0_12;*/
|
|
118
131
|
} else if (isCredentialOfferV1_0_11(offer)) {
|
|
119
132
|
return OpenId4VCIVersion.VER_1_0_11;
|
|
120
133
|
} else if (isCredentialOfferV1_0_09(offer)) {
|
|
@@ -185,6 +198,7 @@ function isCredentialOfferV1_0_11(offer: CredentialOfferPayload | CredentialOffe
|
|
|
185
198
|
return 'credential_offer_uri' in offer;
|
|
186
199
|
}
|
|
187
200
|
|
|
201
|
+
/*
|
|
188
202
|
function isCredentialOfferV1_0_12(offer: CredentialOfferPayload | CredentialOffer): boolean {
|
|
189
203
|
if (!offer) {
|
|
190
204
|
return false;
|
|
@@ -199,6 +213,24 @@ function isCredentialOfferV1_0_12(offer: CredentialOfferPayload | CredentialOffe
|
|
|
199
213
|
}
|
|
200
214
|
return 'credential_offer_uri' in offer;
|
|
201
215
|
}
|
|
216
|
+
*/
|
|
217
|
+
|
|
218
|
+
function isCredentialOfferV1_0_13(offer: CredentialOfferPayload | CredentialOffer): boolean {
|
|
219
|
+
if (!offer) {
|
|
220
|
+
return false;
|
|
221
|
+
} else if (typeof offer === 'string' && (offer as string).startsWith('{')) {
|
|
222
|
+
offer = JSON.parse(offer);
|
|
223
|
+
}
|
|
224
|
+
if ('credential_issuer' in offer && 'credential_configuration_ids' in offer) {
|
|
225
|
+
// payload
|
|
226
|
+
return true;
|
|
227
|
+
}
|
|
228
|
+
if ('credential_offer' in offer && offer['credential_offer']) {
|
|
229
|
+
// offer, so check payload
|
|
230
|
+
return isCredentialOfferV1_0_13(offer['credential_offer']);
|
|
231
|
+
}
|
|
232
|
+
return 'credential_offer_uri' in offer;
|
|
233
|
+
}
|
|
202
234
|
|
|
203
235
|
export async function toUniformCredentialOfferRequest(
|
|
204
236
|
offer: CredentialOffer,
|
|
@@ -207,21 +239,29 @@ export async function toUniformCredentialOfferRequest(
|
|
|
207
239
|
version?: OpenId4VCIVersion;
|
|
208
240
|
},
|
|
209
241
|
): Promise<UniformCredentialOfferRequest> {
|
|
210
|
-
|
|
242
|
+
let version = opts?.version ?? determineSpecVersionFromOffer(offer);
|
|
211
243
|
let originalCredentialOffer = offer.credential_offer;
|
|
212
244
|
let credentialOfferURI: string | undefined;
|
|
213
245
|
if ('credential_offer_uri' in offer && offer?.credential_offer_uri !== undefined) {
|
|
214
246
|
credentialOfferURI = offer.credential_offer_uri;
|
|
247
|
+
|
|
215
248
|
if (opts?.resolve || opts?.resolve === undefined) {
|
|
216
|
-
|
|
249
|
+
VCI_LOG_COMMON.log(`Credential offer contained a URI. Will use that to get the credential offer payload: ${credentialOfferURI}`);
|
|
250
|
+
originalCredentialOffer = (await resolveCredentialOfferURI(credentialOfferURI)) as
|
|
251
|
+
| CredentialOfferPayloadV1_0_09
|
|
252
|
+
| CredentialOfferPayloadV1_0_11
|
|
253
|
+
| CredentialOfferPayloadV1_0_13;
|
|
217
254
|
} else if (!originalCredentialOffer) {
|
|
218
255
|
throw Error(`Credential offer uri (${credentialOfferURI}) found, but resolution was explicitly disabled and credential_offer was supplied`);
|
|
219
256
|
}
|
|
257
|
+
// We need to redetermine the version of the offer, as we only had the offer_uri until now
|
|
258
|
+
version = determineSpecVersionFromOffer(originalCredentialOffer);
|
|
259
|
+
VCI_LOG_COMMON.log(`Offer URI payload determined to be of version ${version}`);
|
|
220
260
|
}
|
|
221
261
|
if (!originalCredentialOffer) {
|
|
222
262
|
throw Error('No credential offer available');
|
|
223
263
|
}
|
|
224
|
-
const payload = toUniformCredentialOfferPayload(originalCredentialOffer, opts);
|
|
264
|
+
const payload = toUniformCredentialOfferPayload(originalCredentialOffer, { ...opts, version });
|
|
225
265
|
const supportedFlows = determineFlowType(payload, version);
|
|
226
266
|
return {
|
|
227
267
|
credential_offer: payload,
|
|
@@ -385,24 +425,36 @@ export function determineGrantTypes(
|
|
|
385
425
|
return types;
|
|
386
426
|
}
|
|
387
427
|
|
|
388
|
-
function getVersionFromURIParam(
|
|
428
|
+
function getVersionFromURIParam(
|
|
429
|
+
credentialOfferURI: string,
|
|
430
|
+
currentVersion: OpenId4VCIVersion,
|
|
431
|
+
matchingVersion: OpenId4VCIVersion[],
|
|
432
|
+
param: string,
|
|
433
|
+
allowUpgrade = true,
|
|
434
|
+
) {
|
|
389
435
|
if (credentialOfferURI.includes(param)) {
|
|
390
|
-
return recordVersion(currentVersion, matchingVersion, param);
|
|
436
|
+
return recordVersion(currentVersion, matchingVersion, param, allowUpgrade);
|
|
391
437
|
}
|
|
392
438
|
return currentVersion;
|
|
393
439
|
}
|
|
394
440
|
|
|
395
|
-
function recordVersion(currentVersion: OpenId4VCIVersion, matchingVersion: OpenId4VCIVersion, key: string) {
|
|
396
|
-
|
|
397
|
-
|
|
441
|
+
function recordVersion(currentVersion: OpenId4VCIVersion, matchingVersion: OpenId4VCIVersion[], key: string, allowUpgrade = true) {
|
|
442
|
+
matchingVersion = matchingVersion.sort().reverse();
|
|
443
|
+
if (currentVersion === OpenId4VCIVersion.VER_UNKNOWN) {
|
|
444
|
+
return matchingVersion[0];
|
|
445
|
+
} else if (matchingVersion.includes(currentVersion)) {
|
|
446
|
+
if (!allowUpgrade) {
|
|
447
|
+
return currentVersion;
|
|
448
|
+
}
|
|
449
|
+
return matchingVersion[0];
|
|
398
450
|
}
|
|
399
451
|
|
|
400
452
|
throw new Error(
|
|
401
|
-
`Invalid param. Some keys have been used from version: ${currentVersion} version while '${key}' is used from version: ${matchingVersion}`,
|
|
453
|
+
`Invalid param. Some keys have been used from version: ${currentVersion} version while '${key}' is used from version: ${JSON.stringify(matchingVersion)}`,
|
|
402
454
|
);
|
|
403
455
|
}
|
|
404
456
|
|
|
405
|
-
export function
|
|
457
|
+
export function getTypesFromOfferV1_0_11(credentialOffer: CredentialOfferPayloadV1_0_11, opts?: { filterVerifiableCredential: boolean }) {
|
|
406
458
|
const types = credentialOffer.credentials.reduce<string[]>((prev, curr) => {
|
|
407
459
|
// FIXME returning the string value is wrong (as it's an id), but just matching the current behavior of this library
|
|
408
460
|
// The credential_type (from draft 8) and the actual 'type' value in a VC (from draft 11) are mixed up
|
|
@@ -1,20 +1,31 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
CredentialRequest,
|
|
3
|
+
CredentialRequestV1_0_08,
|
|
4
|
+
CredentialRequestV1_0_11,
|
|
5
|
+
CredentialRequestV1_0_13,
|
|
6
|
+
OpenId4VCIVersion,
|
|
7
|
+
UniformCredentialRequest,
|
|
8
|
+
} from '../types';
|
|
2
9
|
|
|
3
10
|
import { getFormatForVersion } from './FormatUtils';
|
|
4
11
|
|
|
5
|
-
export function getTypesFromRequest(credentialRequest:
|
|
12
|
+
export function getTypesFromRequest(credentialRequest: CredentialRequest, opts?: { filterVerifiableCredential: boolean }) {
|
|
6
13
|
let types: string[] = [];
|
|
7
|
-
if (
|
|
8
|
-
types
|
|
14
|
+
if ('credential_identifier' in credentialRequest && credentialRequest.credential_identifier) {
|
|
15
|
+
throw Error(`Cannot get types from request when it contains a credential_identifier`);
|
|
16
|
+
} else if (credentialRequest.format === 'jwt_vc_json' || credentialRequest.format === 'jwt_vc') {
|
|
17
|
+
types = 'types' in credentialRequest ? credentialRequest.types : [];
|
|
9
18
|
} else if (credentialRequest.format === 'jwt_vc_json-ld' || credentialRequest.format === 'ldp_vc') {
|
|
10
19
|
types =
|
|
11
20
|
'credential_definition' in credentialRequest && credentialRequest.credential_definition
|
|
12
21
|
? credentialRequest.credential_definition.types
|
|
13
22
|
: // eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
14
23
|
// @ts-ignore
|
|
15
|
-
credentialRequest.types
|
|
24
|
+
'types' in credentialRequest.types
|
|
25
|
+
? (credentialRequest['types' as keyof CredentialRequest] as unknown as string[])
|
|
26
|
+
: [];
|
|
16
27
|
} else if (credentialRequest.format === 'vc+sd-jwt') {
|
|
17
|
-
types = [credentialRequest.vct];
|
|
28
|
+
types = 'vct' in credentialRequest ? [credentialRequest.vct as string] : [];
|
|
18
29
|
}
|
|
19
30
|
|
|
20
31
|
if (!types || types.length === 0) {
|
|
@@ -29,11 +40,15 @@ export function getTypesFromRequest(credentialRequest: UniformCredentialRequest,
|
|
|
29
40
|
export function getCredentialRequestForVersion(
|
|
30
41
|
credentialRequest: UniformCredentialRequest,
|
|
31
42
|
version: OpenId4VCIVersion,
|
|
32
|
-
): UniformCredentialRequest | CredentialRequestV1_0_08 | CredentialRequestV1_0_11 {
|
|
43
|
+
): UniformCredentialRequest | CredentialRequestV1_0_08 | CredentialRequestV1_0_11 | CredentialRequestV1_0_13 {
|
|
33
44
|
if (version === OpenId4VCIVersion.VER_1_0_08) {
|
|
34
|
-
|
|
45
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
46
|
+
const draft8Format = getFormatForVersion(credentialRequest.format!, version);
|
|
35
47
|
const types = getTypesFromRequest(credentialRequest, { filterVerifiableCredential: true });
|
|
36
48
|
|
|
49
|
+
if (credentialRequest.credential_subject_issuance) {
|
|
50
|
+
throw Error('Experimental subject issuance is not supported for older versions of the spec');
|
|
51
|
+
}
|
|
37
52
|
return {
|
|
38
53
|
format: draft8Format,
|
|
39
54
|
proof: credentialRequest.proof,
|
|
@@ -47,8 +47,8 @@ export async function acquireDeferredCredential({
|
|
|
47
47
|
deferredCredentialIntervalInMS?: number;
|
|
48
48
|
deferredCredentialAwait?: boolean;
|
|
49
49
|
deferredCredentialEndpoint: string;
|
|
50
|
-
}): Promise<OpenIDResponse<CredentialResponse
|
|
51
|
-
let credentialResponse: OpenIDResponse<CredentialResponse> = await acquireDeferredCredentialImpl({
|
|
50
|
+
}): Promise<OpenIDResponse<CredentialResponse> & { access_token: string }> {
|
|
51
|
+
let credentialResponse: OpenIDResponse<CredentialResponse> & { access_token: string } = await acquireDeferredCredentialImpl({
|
|
52
52
|
bearerToken,
|
|
53
53
|
transactionId,
|
|
54
54
|
deferredCredentialEndpoint,
|
|
@@ -77,7 +77,7 @@ async function acquireDeferredCredentialImpl({
|
|
|
77
77
|
bearerToken: string;
|
|
78
78
|
transactionId?: string;
|
|
79
79
|
deferredCredentialEndpoint: string;
|
|
80
|
-
}): Promise<OpenIDResponse<CredentialResponse
|
|
80
|
+
}): Promise<OpenIDResponse<CredentialResponse> & { access_token: string }> {
|
|
81
81
|
const response: OpenIDResponse<CredentialResponse> = await post(
|
|
82
82
|
deferredCredentialEndpoint,
|
|
83
83
|
JSON.stringify(transactionId ? { transaction_id: transactionId } : ''),
|
|
@@ -86,5 +86,5 @@ async function acquireDeferredCredentialImpl({
|
|
|
86
86
|
console.log(JSON.stringify(response, null, 2));
|
|
87
87
|
assertNonFatalError(response);
|
|
88
88
|
|
|
89
|
-
return response;
|
|
89
|
+
return { ...response, access_token: bearerToken };
|
|
90
90
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { BAD_PARAMS, DecodeURIAsJsonOpts, EncodeJsonAsURIOpts, JsonURIMode, OpenId4VCIVersion, SearchValue } from '../types';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* @
|
|
5
|
-
* @param
|
|
6
|
-
* @param opts
|
|
4
|
+
* @type {(json: {[s:string]: never} | ArrayLike<never> | string | object, opts?: EncodeJsonAsURIOpts)} encodes a Json object into a URI
|
|
5
|
+
* @param { {[s:string]: never} | ArrayLike<never> | string | object } json
|
|
6
|
+
* @param {EncodeJsonAsURIOpts} [opts] Option to encode json as uri
|
|
7
7
|
* - urlTypeProperties: a list of properties of which the value is a URL
|
|
8
8
|
* - arrayTypeProperties: a list of properties which are an array
|
|
9
9
|
*/
|
|
@@ -81,16 +81,18 @@ export function convertJsonToURI(
|
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
/**
|
|
84
|
-
* @
|
|
85
|
-
* @param uri
|
|
86
|
-
* @param opts
|
|
84
|
+
* @type {(uri: string, opts?: DecodeURIAsJsonOpts): unknown} convertURIToJsonObject converts an URI into a Json object decoding its properties
|
|
85
|
+
* @param {string} uri
|
|
86
|
+
* @param {DecodeURIAsJsonOpts} [opts]
|
|
87
87
|
* - requiredProperties: the required properties
|
|
88
88
|
* - arrayTypeProperties: properties that can show up more that once
|
|
89
|
+
* @returns JSON object
|
|
89
90
|
*/
|
|
90
91
|
export function convertURIToJsonObject(uri: string, opts?: DecodeURIAsJsonOpts): unknown {
|
|
91
92
|
if (!uri || (opts?.requiredProperties && !opts.requiredProperties?.every((p) => uri.includes(p)))) {
|
|
92
93
|
throw new Error(BAD_PARAMS);
|
|
93
94
|
}
|
|
95
|
+
|
|
94
96
|
const uriComponents = getURIComponentsAsArray(uri, opts?.arrayTypeProperties);
|
|
95
97
|
return decodeJsonProperties(uriComponents);
|
|
96
98
|
}
|
|
@@ -128,8 +130,8 @@ function decodeJsonProperties(parts: string[] | string[][]): unknown {
|
|
|
128
130
|
|
|
129
131
|
/**
|
|
130
132
|
* @function get URI Components as Array
|
|
131
|
-
* @param uri
|
|
132
|
-
* @param arrayTypes array of string containing array like keys
|
|
133
|
+
* @param {string} uri uri
|
|
134
|
+
* @param {string[]} [arrayTypes] array of string containing array like keys
|
|
133
135
|
*/
|
|
134
136
|
function getURIComponentsAsArray(uri: string, arrayTypes?: string[]): string[] | string[][] {
|
|
135
137
|
const parts = uri.includes('?') ? uri.split('?')[1] : uri.includes('://') ? uri.split('://')[1] : uri;
|