Skip to content

Commit 6896c11

Browse files
authored
Merge pull request #120 from Sphereon-Opensource/develop
New release
2 parents a76c382 + 641449e commit 6896c11

38 files changed

Lines changed: 4348 additions & 3244 deletions

packages/callback-example/lib/__tests__/issuerCallback.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { KeyObject } from 'crypto'
22

3-
import { CredentialRequestClient, CredentialRequestClientBuilder, ProofOfPossessionBuilder } from '@sphereon/oid4vci-client'
3+
import { CredentialRequestClientBuilder, ProofOfPossessionBuilder } from '@sphereon/oid4vci-client'
44
import {
55
Alg,
66
CNonceState,
@@ -252,7 +252,7 @@ describe('issuerCallback', () => {
252252
.withKid(kid)
253253
.build()
254254

255-
const credentialRequestClient = new CredentialRequestClient(credReqClient)
255+
const credentialRequestClient = credReqClient.build()
256256
const credentialRequest: CredentialRequest = await credentialRequestClient.createCredentialRequest({
257257
credentialIdentifier: 'VerifiableCredential',
258258
// format: 'jwt_vc_json',

packages/callback-example/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"@sphereon/oid4vci-client": "workspace:*",
1919
"@sphereon/oid4vci-common": "workspace:*",
2020
"@sphereon/oid4vci-issuer": "workspace:*",
21-
"@sphereon/ssi-types": "^0.18.1",
21+
"@sphereon/ssi-types": "0.26.1-next.6",
2222
"jose": "^4.10.0"
2323
},
2424
"devDependencies": {

packages/client/lib/AccessTokenClient.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import {
2222
import { ObjectUtils } from '@sphereon/ssi-types';
2323

2424
import { MetadataClientV1_0_13 } from './MetadataClientV1_0_13';
25+
import { createJwtBearerClientAssertion } from './functions';
2526
import { LOG } from './types';
2627

2728
export class AccessTokenClient {
@@ -48,6 +49,9 @@ export class AccessTokenClient {
4849
code,
4950
redirectUri,
5051
pin,
52+
credentialIssuer: issuer,
53+
metadata,
54+
additionalParams: opts.additionalParams,
5155
pinMetadata,
5256
}),
5357
pinMetadata,
@@ -90,11 +94,12 @@ export class AccessTokenClient {
9094
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
9195
// @ts-ignore
9296
const credentialOfferRequest = opts.credentialOffer ? await toUniformCredentialOfferRequest(opts.credentialOffer) : undefined;
93-
const request: Partial<AccessTokenRequest> = {};
94-
95-
if (asOpts?.clientId) {
96-
request.client_id = asOpts.clientId;
97+
const request: Partial<AccessTokenRequest> = { ...opts.additionalParams };
98+
if (asOpts?.clientOpts?.clientId) {
99+
request.client_id = asOpts.clientOpts.clientId;
97100
}
101+
const credentialIssuer = opts.credentialIssuer ?? credentialOfferRequest?.credential_offer?.credential_issuer ?? opts.metadata?.issuer;
102+
await createJwtBearerClientAssertion(request, { ...opts, credentialIssuer });
98103

99104
if (credentialOfferRequest?.supportedFlows.includes(AuthzFlowType.PRE_AUTHORIZED_CODE_FLOW)) {
100105
this.assertAlphanumericPin(opts.pinMetadata, pin);

packages/client/lib/AccessTokenClientV1_0_11.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
GrantTypes,
1515
IssuerOpts,
1616
JsonURIMode,
17+
OpenId4VCIVersion,
1718
OpenIDResponse,
1819
PRE_AUTH_CODE_LITERAL,
1920
TokenErrorResponse,
@@ -24,6 +25,7 @@ import { ObjectUtils } from '@sphereon/ssi-types';
2425
import Debug from 'debug';
2526

2627
import { MetadataClientV1_0_13 } from './MetadataClientV1_0_13';
28+
import { createJwtBearerClientAssertion } from './functions';
2729

2830
const debug = Debug('sphereon:oid4vci:token');
2931

@@ -51,6 +53,10 @@ export class AccessTokenClientV1_0_11 {
5153
code,
5254
redirectUri,
5355
pin,
56+
credentialIssuer: issuer,
57+
metadata,
58+
additionalParams: opts.additionalParams,
59+
pinMetadata: opts.pinMetadata,
5460
}),
5561
isPinRequired,
5662
metadata,
@@ -92,11 +98,13 @@ export class AccessTokenClientV1_0_11 {
9298
const credentialOfferRequest = opts.credentialOffer
9399
? await toUniformCredentialOfferRequest(opts.credentialOffer as CredentialOfferV1_0_11 | CredentialOfferV1_0_13)
94100
: undefined;
95-
const request: Partial<AccessTokenRequest> = {};
101+
const request: Partial<AccessTokenRequest> = { ...opts.additionalParams };
102+
const credentialIssuer = opts.credentialIssuer ?? credentialOfferRequest?.credential_offer?.credential_issuer ?? opts.metadata?.issuer;
96103

97-
if (asOpts?.clientId) {
98-
request.client_id = asOpts.clientId;
104+
if (asOpts?.clientOpts?.clientId) {
105+
request.client_id = asOpts.clientOpts.clientId;
99106
}
107+
await createJwtBearerClientAssertion(request, { ...opts, version: OpenId4VCIVersion.VER_1_0_11, credentialIssuer });
100108

101109
if (credentialOfferRequest?.supportedFlows.includes(AuthzFlowType.PRE_AUTHORIZED_CODE_FLOW)) {
102110
this.assertNumericPin(this.isPinRequiredValue(credentialOfferRequest.credential_offer), pin);

packages/client/lib/AuthorizationCodeClient.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,28 +35,31 @@ export async function createSignedAuthRequestWhenNeeded(requestObject: Record<st
3535
} else if (!opts.kid) {
3636
throw Error(`No kid found, whilst request object mode was set to ${opts.requestObjectMode}`);
3737
}
38-
let client_metadata: any
38+
let client_metadata: any;
3939
if (opts.clientMetadata || opts.jwksUri) {
4040
client_metadata = opts.clientMetadata ?? {};
4141
if (opts.jwksUri) {
4242
client_metadata['jwks_uri'] = opts.jwksUri;
4343
}
4444
}
45-
let authorization_details = requestObject['authorization_details']
45+
let authorization_details = requestObject['authorization_details'];
4646
if (typeof authorization_details === 'string') {
4747
authorization_details = JSON.parse(requestObject.authorization_details);
4848
}
4949
if (!requestObject.aud && opts.aud) {
5050
requestObject.aud = opts.aud;
5151
}
52-
const iss = requestObject.iss ?? opts.iss ?? requestObject.client_id
52+
const iss = requestObject.iss ?? opts.iss ?? requestObject.client_id;
5353

54-
const jwt: Jwt = { header: { alg: 'ES256', kid: opts.kid, typ: 'jwt' }, payload: {...requestObject, iss, authorization_details, ...(client_metadata && {client_metadata})} };
54+
const jwt: Jwt = {
55+
header: { alg: 'ES256', kid: opts.kid, typ: 'JWT' },
56+
payload: { ...requestObject, iss, authorization_details, ...(client_metadata && { client_metadata }) },
57+
};
5558
const pop = await ProofOfPossessionBuilder.fromJwt({
5659
jwt,
5760
callbacks: opts.signCallbacks,
5861
version: OpenId4VCIVersion.VER_1_0_11,
59-
mode: 'jwt',
62+
mode: 'JWT',
6063
}).build();
6164
requestObject['request'] = pop.jwt;
6265
}

packages/client/lib/CredentialRequestClient.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ import { ExperimentalSubjectIssuance } from '@sphereon/oid4vci-common/dist/exper
1919
import { CredentialFormat } from '@sphereon/ssi-types';
2020
import Debug from 'debug';
2121

22-
import { CredentialRequestClientBuilder } from './CredentialRequestClientBuilder';
22+
import { CredentialRequestClientBuilderV1_0_11 } from './CredentialRequestClientBuilderV1_0_11';
23+
import { CredentialRequestClientBuilderV1_0_13 } from './CredentialRequestClientBuilderV1_0_13';
2324
import { ProofOfPossessionBuilder } from './ProofOfPossessionBuilder';
2425

2526
const debug = Debug('sphereon:oid4vci:credential');
@@ -78,7 +79,7 @@ export class CredentialRequestClient {
7879
return this.credentialRequestOpts.deferredCredentialEndpoint;
7980
}
8081

81-
public constructor(builder: CredentialRequestClientBuilder) {
82+
public constructor(builder: CredentialRequestClientBuilderV1_0_13 | CredentialRequestClientBuilderV1_0_11) {
8283
this._credentialRequestOpts = { ...builder };
8384
}
8485

0 commit comments

Comments
 (0)