@sphereon/oid4vci-client 0.15.1 → 0.15.2-next.3
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/AuthorizationCodeClient.d.ts.map +1 -1
- package/dist/AuthorizationCodeClient.js +11 -14
- package/dist/AuthorizationCodeClient.js.map +1 -1
- package/lib/AuthorizationCodeClient.ts +11 -12
- package/lib/__tests__/OpenID4VCIClient.spec.ts +2 -23
- package/lib/__tests__/OpenID4VCIClientV1_0_13.spec.ts +2 -23
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthorizationCodeClient.d.ts","sourceRoot":"","sources":["../lib/AuthorizationCodeClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,wBAAwB,EAIxB,uCAAuC,EAIvC,iCAAiC,EAEjC,6BAA6B,EAK7B,iBAAiB,EAEjB,QAAQ,EAER,iBAAiB,EAElB,MAAM,0BAA0B,CAAC;AAOlC,wBAAsB,iCAAiC,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,iBAAiB,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,iBAqCrI;AAeD,eAAO,MAAM,6BAA6B,4HAQvC;IACD,IAAI,EAAE,QAAQ,CAAC;IACf,gBAAgB,EAAE,6BAA6B,CAAC;IAChD,oBAAoB,EAAE,wBAAwB,CAAC;IAC/C,eAAe,CAAC,EAAE,iCAAiC,CAAC;IACpD,gCAAgC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,uCAAuC,CAAC,CAAC;IAC3F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B,KAAG,OAAO,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"AuthorizationCodeClient.d.ts","sourceRoot":"","sources":["../lib/AuthorizationCodeClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,wBAAwB,EAIxB,uCAAuC,EAIvC,iCAAiC,EAEjC,6BAA6B,EAK7B,iBAAiB,EAEjB,QAAQ,EAER,iBAAiB,EAElB,MAAM,0BAA0B,CAAC;AAOlC,wBAAsB,iCAAiC,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,iBAAiB,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,iBAqCrI;AAeD,eAAO,MAAM,6BAA6B,4HAQvC;IACD,IAAI,EAAE,QAAQ,CAAC;IACf,gBAAgB,EAAE,6BAA6B,CAAC;IAChD,oBAAoB,EAAE,wBAAwB,CAAC;IAC/C,eAAe,CAAC,EAAE,iCAAiC,CAAC;IACpD,gCAAgC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,uCAAuC,CAAC,CAAC;IAC3F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B,KAAG,OAAO,CAAC,MAAM,CAuIjB,CAAC"}
|
|
@@ -71,7 +71,7 @@ function filterSupportedCredentials(credentialOffer, credentialsSupported) {
|
|
|
71
71
|
});
|
|
72
72
|
}
|
|
73
73
|
const createAuthorizationRequestUrl = (_a) => __awaiter(void 0, [_a], void 0, function* ({ pkce, endpointMetadata, authorizationRequest, credentialOffer, credentialConfigurationSupported, clientId, version, }) {
|
|
74
|
-
var _b, _c, _d, _e
|
|
74
|
+
var _b, _c, _d, _e;
|
|
75
75
|
function removeDisplayAndValueTypes(obj) {
|
|
76
76
|
const newObj = Object.assign({}, obj);
|
|
77
77
|
for (const prop in newObj) {
|
|
@@ -86,13 +86,15 @@ const createAuthorizationRequestUrl = (_a) => __awaiter(void 0, [_a], void 0, fu
|
|
|
86
86
|
}
|
|
87
87
|
const { redirectUri, requestObjectOpts = { requestObjectMode: oid4vci_common_1.CreateRequestObjectMode.NONE } } = authorizationRequest;
|
|
88
88
|
const client_id = clientId !== null && clientId !== void 0 ? clientId : authorizationRequest.clientId;
|
|
89
|
-
|
|
90
|
-
const
|
|
89
|
+
// Authorization server metadata takes precedence
|
|
90
|
+
const authorizationMetadata = (_b = endpointMetadata.authorizationServerMetadata) !== null && _b !== void 0 ? _b : endpointMetadata.credentialIssuerMetadata;
|
|
91
|
+
let { authorizationDetails } = authorizationRequest;
|
|
92
|
+
const parMode = (authorizationMetadata === null || authorizationMetadata === void 0 ? void 0 : authorizationMetadata.require_pushed_authorization_requests)
|
|
91
93
|
? oid4vci_common_1.PARMode.REQUIRE
|
|
92
|
-
: (_c = authorizationRequest.parMode) !== null && _c !== void 0 ? _c : (client_id ? oid4vci_common_1.PARMode.AUTO : oid4vci_common_1.PARMode.NEVER);
|
|
94
|
+
: ((_c = authorizationRequest.parMode) !== null && _c !== void 0 ? _c : (client_id ? oid4vci_common_1.PARMode.AUTO : oid4vci_common_1.PARMode.NEVER));
|
|
93
95
|
// Scope and authorization_details can be used in the same authorization request
|
|
94
96
|
// https://datatracker.ietf.org/doc/html/draft-ietf-oauth-rar-23#name-relationship-to-scope-param
|
|
95
|
-
if (!scope && !authorizationDetails) {
|
|
97
|
+
if (!authorizationRequest.scope && !authorizationDetails) {
|
|
96
98
|
if (!credentialOffer) {
|
|
97
99
|
throw Error('Please provide a scope or authorization_details if no credential offer is present');
|
|
98
100
|
}
|
|
@@ -133,15 +135,11 @@ const createAuthorizationRequestUrl = (_a) => __awaiter(void 0, [_a], void 0, fu
|
|
|
133
135
|
if (!(endpointMetadata === null || endpointMetadata === void 0 ? void 0 : endpointMetadata.authorization_endpoint)) {
|
|
134
136
|
throw Error('Server metadata does not contain authorization endpoint');
|
|
135
137
|
}
|
|
136
|
-
const parEndpoint =
|
|
137
|
-
// add 'openid' scope if not present
|
|
138
|
-
if (!(scope === null || scope === void 0 ? void 0 : scope.includes('openid'))) {
|
|
139
|
-
scope = ['openid', scope].filter((s) => !!s).join(' ');
|
|
140
|
-
}
|
|
138
|
+
const parEndpoint = authorizationMetadata === null || authorizationMetadata === void 0 ? void 0 : authorizationMetadata.pushed_authorization_request_endpoint;
|
|
141
139
|
let queryObj = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ response_type: oid4vci_common_1.ResponseType.AUTH_CODE }, (!pkce.disabled && {
|
|
142
|
-
code_challenge_method: (
|
|
140
|
+
code_challenge_method: (_e = pkce.codeChallengeMethod) !== null && _e !== void 0 ? _e : oid4vci_common_1.CodeChallengeMethod.S256,
|
|
143
141
|
code_challenge: pkce.codeChallenge,
|
|
144
|
-
})), { authorization_details: JSON.stringify(handleAuthorizationDetails(endpointMetadata, authorizationDetails)) }), (redirectUri && { redirect_uri: redirectUri })), (client_id && { client_id })), ((credentialOffer === null || credentialOffer === void 0 ? void 0 : credentialOffer.issuerState) && { issuer_state: credentialOffer.issuerState })), { scope });
|
|
142
|
+
})), { authorization_details: JSON.stringify(handleAuthorizationDetails(endpointMetadata, authorizationDetails)) }), (redirectUri && { redirect_uri: redirectUri })), (client_id && { client_id })), ((credentialOffer === null || credentialOffer === void 0 ? void 0 : credentialOffer.issuerState) && { issuer_state: credentialOffer.issuerState })), { scope: authorizationRequest.scope });
|
|
145
143
|
if (!parEndpoint && parMode === oid4vci_common_1.PARMode.REQUIRE) {
|
|
146
144
|
throw Error(`PAR mode is set to required by Authorization Server does not support PAR!`);
|
|
147
145
|
}
|
|
@@ -152,11 +150,10 @@ const createAuthorizationRequestUrl = (_a) => __awaiter(void 0, [_a], void 0, fu
|
|
|
152
150
|
uriTypeProperties: ['client_id', 'request_uri', 'redirect_uri', 'scope', 'authorization_details', 'issuer_state'],
|
|
153
151
|
}), { contentType: 'application/x-www-form-urlencoded', accept: 'application/json' });
|
|
154
152
|
if (parResponse.errorBody || !parResponse.successBody) {
|
|
155
|
-
console.log(JSON.stringify(parResponse.errorBody));
|
|
156
|
-
console.log('Falling back to regular request URI, since PAR failed');
|
|
157
153
|
if (parMode === oid4vci_common_1.PARMode.REQUIRE) {
|
|
158
154
|
throw Error(`PAR error: ${parResponse.origResponse.statusText}`);
|
|
159
155
|
}
|
|
156
|
+
debug('Falling back to regular request URI, since PAR failed', JSON.stringify(parResponse.errorBody));
|
|
160
157
|
}
|
|
161
158
|
else {
|
|
162
159
|
debug(`PAR response: ${JSON.stringify(parResponse.successBody, null, 2)}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthorizationCodeClient.js","sourceRoot":"","sources":["../lib/AuthorizationCodeClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AA8BA,8EAqCC;AAnED,6DAuBkC;AAClC,kDAA0B;AAE1B,yEAAsE;AAEtE,MAAM,KAAK,GAAG,IAAA,eAAK,EAAC,kBAAkB,CAAC,CAAC;AAExC,SAAsB,iCAAiC,CAAC,aAAkC,EAAE,IAA0C;;;QACpI,IAAI,IAAI,CAAC,iBAAiB,KAAK,wCAAuB,CAAC,WAAW,EAAE,CAAC;YACnE,MAAM,KAAK,CAAC,uBAAuB,IAAI,CAAC,iBAAiB,uBAAuB,CAAC,CAAC;QACpF,CAAC;aAAM,IAAI,IAAI,CAAC,iBAAiB,KAAK,wCAAuB,CAAC,cAAc,EAAE,CAAC;YAC7E,IAAI,OAAO,CAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,YAAY,CAAA,KAAK,UAAU,EAAE,CAAC;gBAC3D,MAAM,KAAK,CAAC,gFAAgF,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;YACxH,CAAC;iBAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACrB,MAAM,KAAK,CAAC,uDAAuD,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;YAC/F,CAAC;YACD,IAAI,eAAoB,CAAC;YACzB,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACxC,eAAe,GAAG,MAAA,IAAI,CAAC,cAAc,mCAAI,EAAE,CAAC;gBAC5C,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,eAAe,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;gBAC7C,CAAC;YACH,CAAC;YACD,IAAI,qBAAqB,GAAG,aAAa,CAAC,uBAAuB,CAAC,CAAC;YACnE,IAAI,OAAO,qBAAqB,KAAK,QAAQ,EAAE,CAAC;gBAC9C,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;YAC1E,CAAC;YACD,IAAI,CAAC,aAAa,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;gBACnC,aAAa,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;YAC/B,CAAC;YACD,MAAM,GAAG,GAAG,MAAA,MAAA,aAAa,CAAC,GAAG,mCAAI,IAAI,CAAC,GAAG,mCAAI,aAAa,CAAC,SAAS,CAAC;YAErE,MAAM,GAAG,GAAQ;gBACf,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE;gBACnD,OAAO,gDAAO,aAAa,KAAE,GAAG,EAAE,qBAAqB,KAAK,CAAC,eAAe,IAAI,EAAE,eAAe,EAAE,CAAC,CAAE;aACvG,CAAC;YACF,MAAM,GAAG,GAAG,MAAM,mDAAwB,CAAC,OAAO,CAAC;gBACjD,GAAG;gBACH,SAAS,EAAE,IAAI,CAAC,aAAa;gBAC7B,OAAO,EAAE,kCAAiB,CAAC,UAAU;gBACrC,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC,KAAK,EAAE,CAAC;YACX,aAAa,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;QACrC,CAAC;IACH,CAAC;CAAA;AACD,SAAS,0BAA0B,CACjC,eAA8C,EAC9C,oBAA8E;IAE9E,IAAI,CAAC,eAAe,CAAC,4BAA4B,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC3E,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC;SACxC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,WAAC,OAAA,MAAA,eAAe,CAAC,4BAA4B,0CAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA,EAAA,CAAC;SACnF,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,uCAAY,KAAK,CAAC,CAAC,CAAC,KAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC,CAAC,IAAG;IACrD,CAAC,CAAC,CAAC;AACP,CAAC;AAEM,MAAM,6BAA6B,GAAG,KAgBzB,EAAE,4CAhB8B,EAClD,IAAI,EACJ,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,gCAAgC,EAChC,QAAQ,EACR,OAAO,GASR;;IACC,SAAS,0BAA0B,CAAC,GAAQ;QAC1C,MAAM,MAAM,qBAAQ,GAAG,CAAE,CAAC;QAC1B,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC1B,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7C,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;iBAAM,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC5C,MAAM,CAAC,IAAI,CAAC,GAAG,0BAA0B,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,EAAE,WAAW,EAAE,iBAAiB,GAAG,EAAE,iBAAiB,EAAE,wCAAuB,CAAC,IAAI,EAAE,EAAE,GAAG,oBAAoB,CAAC;IACtH,MAAM,SAAS,GAAG,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,oBAAoB,CAAC,QAAQ,CAAC;IAE5D,
|
|
1
|
+
{"version":3,"file":"AuthorizationCodeClient.js","sourceRoot":"","sources":["../lib/AuthorizationCodeClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -113,13 +113,16 @@ export const createAuthorizationRequestUrl = async ({
|
|
|
113
113
|
const { redirectUri, requestObjectOpts = { requestObjectMode: CreateRequestObjectMode.NONE } } = authorizationRequest;
|
|
114
114
|
const client_id = clientId ?? authorizationRequest.clientId;
|
|
115
115
|
|
|
116
|
-
|
|
117
|
-
const
|
|
116
|
+
// Authorization server metadata takes precedence
|
|
117
|
+
const authorizationMetadata = endpointMetadata.authorizationServerMetadata ?? endpointMetadata.credentialIssuerMetadata
|
|
118
|
+
|
|
119
|
+
let { authorizationDetails } = authorizationRequest;
|
|
120
|
+
const parMode = authorizationMetadata?.require_pushed_authorization_requests
|
|
118
121
|
? PARMode.REQUIRE
|
|
119
|
-
: authorizationRequest.parMode ?? (client_id ? PARMode.AUTO : PARMode.NEVER);
|
|
122
|
+
: (authorizationRequest.parMode ?? (client_id ? PARMode.AUTO : PARMode.NEVER));
|
|
120
123
|
// Scope and authorization_details can be used in the same authorization request
|
|
121
124
|
// https://datatracker.ietf.org/doc/html/draft-ietf-oauth-rar-23#name-relationship-to-scope-param
|
|
122
|
-
if (!scope && !authorizationDetails) {
|
|
125
|
+
if (!authorizationRequest.scope && !authorizationDetails) {
|
|
123
126
|
if (!credentialOffer) {
|
|
124
127
|
throw Error('Please provide a scope or authorization_details if no credential offer is present');
|
|
125
128
|
}
|
|
@@ -177,12 +180,8 @@ export const createAuthorizationRequestUrl = async ({
|
|
|
177
180
|
if (!endpointMetadata?.authorization_endpoint) {
|
|
178
181
|
throw Error('Server metadata does not contain authorization endpoint');
|
|
179
182
|
}
|
|
180
|
-
const parEndpoint =
|
|
183
|
+
const parEndpoint = authorizationMetadata?.pushed_authorization_request_endpoint;
|
|
181
184
|
|
|
182
|
-
// add 'openid' scope if not present
|
|
183
|
-
if (!scope?.includes('openid')) {
|
|
184
|
-
scope = ['openid', scope].filter((s) => !!s).join(' ');
|
|
185
|
-
}
|
|
186
185
|
|
|
187
186
|
let queryObj: Record<string, any> | PushedAuthorizationResponse = {
|
|
188
187
|
response_type: ResponseType.AUTH_CODE,
|
|
@@ -194,7 +193,7 @@ export const createAuthorizationRequestUrl = async ({
|
|
|
194
193
|
...(redirectUri && { redirect_uri: redirectUri }),
|
|
195
194
|
...(client_id && { client_id }),
|
|
196
195
|
...(credentialOffer?.issuerState && { issuer_state: credentialOffer.issuerState }),
|
|
197
|
-
scope,
|
|
196
|
+
scope: authorizationRequest.scope,
|
|
198
197
|
};
|
|
199
198
|
|
|
200
199
|
if (!parEndpoint && parMode === PARMode.REQUIRE) {
|
|
@@ -210,11 +209,11 @@ export const createAuthorizationRequestUrl = async ({
|
|
|
210
209
|
{ contentType: 'application/x-www-form-urlencoded', accept: 'application/json' },
|
|
211
210
|
);
|
|
212
211
|
if (parResponse.errorBody || !parResponse.successBody) {
|
|
213
|
-
console.log(JSON.stringify(parResponse.errorBody));
|
|
214
|
-
console.log('Falling back to regular request URI, since PAR failed');
|
|
215
212
|
if (parMode === PARMode.REQUIRE) {
|
|
216
213
|
throw Error(`PAR error: ${parResponse.origResponse.statusText}`);
|
|
217
214
|
}
|
|
215
|
+
|
|
216
|
+
debug('Falling back to regular request URI, since PAR failed', JSON.stringify(parResponse.errorBody));
|
|
218
217
|
} else {
|
|
219
218
|
debug(`PAR response: ${JSON.stringify(parResponse.successBody, null, 2)}`);
|
|
220
219
|
queryObj = { /*response_type: ResponseType.AUTH_CODE,*/ client_id, request_uri: parResponse.successBody.request_uri };
|
|
@@ -59,27 +59,6 @@ describe('OpenID4VCIClient should', () => {
|
|
|
59
59
|
}),
|
|
60
60
|
).rejects.toThrow(Error('Server metadata does not contain authorization endpoint'));
|
|
61
61
|
});
|
|
62
|
-
it("injects 'openid' as the first scope if not provided", async () => {
|
|
63
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
64
|
-
// @ts-ignore
|
|
65
|
-
client._state.endpointMetadata?.credentialIssuerMetadata.authorization_endpoint = `${MOCK_URL}v1/auth/authorize`;
|
|
66
|
-
|
|
67
|
-
const url = await client.createAuthorizationRequestUrl({
|
|
68
|
-
pkce: {
|
|
69
|
-
codeChallengeMethod: CodeChallengeMethod.S256,
|
|
70
|
-
codeChallenge: 'mE2kPHmIprOqtkaYmESWj35yz-PB5vzdiSu0tAZ8sqs',
|
|
71
|
-
},
|
|
72
|
-
authorizationRequest: {
|
|
73
|
-
scope: 'TestCredential',
|
|
74
|
-
redirectUri: 'http://localhost:8881/cb',
|
|
75
|
-
},
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
const urlSearchParams = new URLSearchParams(url.split('?')[1]);
|
|
79
|
-
const scope = urlSearchParams.get('scope')?.split(' ');
|
|
80
|
-
|
|
81
|
-
expect(scope?.[0]).toBe('openid');
|
|
82
|
-
});
|
|
83
62
|
it('throw an error if no scope and no authorization_details is provided', async () => {
|
|
84
63
|
nock(MOCK_URL).get(/.*/).reply(200, {});
|
|
85
64
|
nock(MOCK_URL).get(WellKnownEndpoints.OAUTH_AS).reply(200, {});
|
|
@@ -149,7 +128,7 @@ describe('OpenID4VCIClient should', () => {
|
|
|
149
128
|
},
|
|
150
129
|
}),
|
|
151
130
|
).resolves.toEqual(
|
|
152
|
-
'https://server.example.com/v1/auth/authorize?response_type=code&code_challenge_method=S256&code_challenge=mE2kPHmIprOqtkaYmESWj35yz-PB5vzdiSu0tAZ8sqs&authorization_details=%5B%7B%22type%22%3A%22openid_credential%22%2C%22format%22%3A%22ldp_vc%22%2C%22credential_definition%22%3A%7B%22%40context%22%3A%5B%22https%3A%2F%2Fwww%2Ew3%2Eorg%2F2018%2Fcredentials%2Fv1%22%2C%22https%3A%2F%2Fwww%2Ew3%2Eorg%2F2018%2Fcredentials%2Fexamples%2Fv1%22%5D%2C%22types%22%3A%5B%22VerifiableCredential%22%2C%22UniversityDegreeCredential%22%5D%7D%2C%22locations%22%3A%5B%22https%3A%2F%2Fserver%2Eexample%2Ecom%22%5D%7D%2C%7B%22type%22%3A%22openid_credential%22%2C%22format%22%3A%22mso_mdoc%22%2C%22doctype%22%3A%22org%2Eiso%2E18013%2E5%2E1%2EmDL%22%2C%22locations%22%3A%5B%22https%3A%2F%2Fserver%2Eexample%2Ecom%22%5D%7D%5D&redirect_uri=http%3A%2F%2Flocalhost%3A8881%2Fcb&client_id=test-client
|
|
131
|
+
'https://server.example.com/v1/auth/authorize?response_type=code&code_challenge_method=S256&code_challenge=mE2kPHmIprOqtkaYmESWj35yz-PB5vzdiSu0tAZ8sqs&authorization_details=%5B%7B%22type%22%3A%22openid_credential%22%2C%22format%22%3A%22ldp_vc%22%2C%22credential_definition%22%3A%7B%22%40context%22%3A%5B%22https%3A%2F%2Fwww%2Ew3%2Eorg%2F2018%2Fcredentials%2Fv1%22%2C%22https%3A%2F%2Fwww%2Ew3%2Eorg%2F2018%2Fcredentials%2Fexamples%2Fv1%22%5D%2C%22types%22%3A%5B%22VerifiableCredential%22%2C%22UniversityDegreeCredential%22%5D%7D%2C%22locations%22%3A%5B%22https%3A%2F%2Fserver%2Eexample%2Ecom%22%5D%7D%2C%7B%22type%22%3A%22openid_credential%22%2C%22format%22%3A%22mso_mdoc%22%2C%22doctype%22%3A%22org%2Eiso%2E18013%2E5%2E1%2EmDL%22%2C%22locations%22%3A%5B%22https%3A%2F%2Fserver%2Eexample%2Ecom%22%5D%7D%5D&redirect_uri=http%3A%2F%2Flocalhost%3A8881%2Fcb&client_id=test-client',
|
|
153
132
|
);
|
|
154
133
|
});
|
|
155
134
|
it('create an authorization request url with authorization_details object property', async () => {
|
|
@@ -176,7 +155,7 @@ describe('OpenID4VCIClient should', () => {
|
|
|
176
155
|
},
|
|
177
156
|
}),
|
|
178
157
|
).resolves.toEqual(
|
|
179
|
-
'https://server.example.com/v1/auth/authorize?response_type=code&code_challenge_method=S256&code_challenge=mE2kPHmIprOqtkaYmESWj35yz-PB5vzdiSu0tAZ8sqs&authorization_details=%7B%22type%22%3A%22openid_credential%22%2C%22format%22%3A%22ldp_vc%22%2C%22credential_definition%22%3A%7B%22%40context%22%3A%5B%22https%3A%2F%2Fwww%2Ew3%2Eorg%2F2018%2Fcredentials%2Fv1%22%2C%22https%3A%2F%2Fwww%2Ew3%2Eorg%2F2018%2Fcredentials%2Fexamples%2Fv1%22%5D%2C%22types%22%3A%5B%22VerifiableCredential%22%2C%22UniversityDegreeCredential%22%5D%7D%2C%22locations%22%3A%5B%22https%3A%2F%2Fserver%2Eexample%2Ecom%22%5D%7D&redirect_uri=http%3A%2F%2Flocalhost%3A8881%2Fcb&client_id=test-client
|
|
158
|
+
'https://server.example.com/v1/auth/authorize?response_type=code&code_challenge_method=S256&code_challenge=mE2kPHmIprOqtkaYmESWj35yz-PB5vzdiSu0tAZ8sqs&authorization_details=%7B%22type%22%3A%22openid_credential%22%2C%22format%22%3A%22ldp_vc%22%2C%22credential_definition%22%3A%7B%22%40context%22%3A%5B%22https%3A%2F%2Fwww%2Ew3%2Eorg%2F2018%2Fcredentials%2Fv1%22%2C%22https%3A%2F%2Fwww%2Ew3%2Eorg%2F2018%2Fcredentials%2Fexamples%2Fv1%22%5D%2C%22types%22%3A%5B%22VerifiableCredential%22%2C%22UniversityDegreeCredential%22%5D%7D%2C%22locations%22%3A%5B%22https%3A%2F%2Fserver%2Eexample%2Ecom%22%5D%7D&redirect_uri=http%3A%2F%2Flocalhost%3A8881%2Fcb&client_id=test-client',
|
|
180
159
|
);
|
|
181
160
|
});
|
|
182
161
|
|
|
@@ -51,27 +51,6 @@ describe('OpenID4VCIClientV1_0_13 should', () => {
|
|
|
51
51
|
}),
|
|
52
52
|
).rejects.toThrow(Error('Server metadata does not contain authorization endpoint'));
|
|
53
53
|
});
|
|
54
|
-
it("injects 'openid' as the first scope if not provided", async () => {
|
|
55
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
56
|
-
// @ts-ignore
|
|
57
|
-
client._state.endpointMetadata?.credentialIssuerMetadata.authorization_endpoint = `${MOCK_URL}v1/auth/authorize`;
|
|
58
|
-
|
|
59
|
-
const url = await client.createAuthorizationRequestUrl({
|
|
60
|
-
pkce: {
|
|
61
|
-
codeChallengeMethod: CodeChallengeMethod.S256,
|
|
62
|
-
codeChallenge: 'mE2kPHmIprOqtkaYmESWj35yz-PB5vzdiSu0tAZ8sqs',
|
|
63
|
-
},
|
|
64
|
-
authorizationRequest: {
|
|
65
|
-
scope: 'TestCredential',
|
|
66
|
-
redirectUri: 'http://localhost:8881/cb',
|
|
67
|
-
},
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
const urlSearchParams = new URLSearchParams(url.split('?')[1]);
|
|
71
|
-
const scope = urlSearchParams.get('scope')?.split(' ');
|
|
72
|
-
|
|
73
|
-
expect(scope?.[0]).toBe('openid');
|
|
74
|
-
});
|
|
75
54
|
it('throw an error if no scope and no authorization_details is provided', async () => {
|
|
76
55
|
nock(MOCK_URL).get(/.*/).reply(200, {});
|
|
77
56
|
nock(MOCK_URL).get(WellKnownEndpoints.OAUTH_AS).reply(200, {});
|
|
@@ -141,7 +120,7 @@ describe('OpenID4VCIClientV1_0_13 should', () => {
|
|
|
141
120
|
},
|
|
142
121
|
}),
|
|
143
122
|
).resolves.toEqual(
|
|
144
|
-
'https://server.example.com/v1/auth/authorize?response_type=code&code_challenge_method=S256&code_challenge=mE2kPHmIprOqtkaYmESWj35yz-PB5vzdiSu0tAZ8sqs&authorization_details=%5B%7B%22type%22%3A%22openid_credential%22%2C%22format%22%3A%22ldp_vc%22%2C%22credential_definition%22%3A%7B%22%40context%22%3A%5B%22https%3A%2F%2Fwww%2Ew3%2Eorg%2F2018%2Fcredentials%2Fv1%22%2C%22https%3A%2F%2Fwww%2Ew3%2Eorg%2F2018%2Fcredentials%2Fexamples%2Fv1%22%5D%2C%22types%22%3A%5B%22VerifiableCredential%22%2C%22UniversityDegreeCredential%22%5D%7D%2C%22locations%22%3A%5B%22https%3A%2F%2Fserver%2Eexample%2Ecom%22%5D%7D%2C%7B%22type%22%3A%22openid_credential%22%2C%22format%22%3A%22mso_mdoc%22%2C%22doctype%22%3A%22org%2Eiso%2E18013%2E5%2E1%2EmDL%22%2C%22locations%22%3A%5B%22https%3A%2F%2Fserver%2Eexample%2Ecom%22%5D%7D%5D&redirect_uri=http%3A%2F%2Flocalhost%3A8881%2Fcb&client_id=test-client
|
|
123
|
+
'https://server.example.com/v1/auth/authorize?response_type=code&code_challenge_method=S256&code_challenge=mE2kPHmIprOqtkaYmESWj35yz-PB5vzdiSu0tAZ8sqs&authorization_details=%5B%7B%22type%22%3A%22openid_credential%22%2C%22format%22%3A%22ldp_vc%22%2C%22credential_definition%22%3A%7B%22%40context%22%3A%5B%22https%3A%2F%2Fwww%2Ew3%2Eorg%2F2018%2Fcredentials%2Fv1%22%2C%22https%3A%2F%2Fwww%2Ew3%2Eorg%2F2018%2Fcredentials%2Fexamples%2Fv1%22%5D%2C%22types%22%3A%5B%22VerifiableCredential%22%2C%22UniversityDegreeCredential%22%5D%7D%2C%22locations%22%3A%5B%22https%3A%2F%2Fserver%2Eexample%2Ecom%22%5D%7D%2C%7B%22type%22%3A%22openid_credential%22%2C%22format%22%3A%22mso_mdoc%22%2C%22doctype%22%3A%22org%2Eiso%2E18013%2E5%2E1%2EmDL%22%2C%22locations%22%3A%5B%22https%3A%2F%2Fserver%2Eexample%2Ecom%22%5D%7D%5D&redirect_uri=http%3A%2F%2Flocalhost%3A8881%2Fcb&client_id=test-client',
|
|
145
124
|
);
|
|
146
125
|
});
|
|
147
126
|
it('create an authorization request url with authorization_details object property', async () => {
|
|
@@ -168,7 +147,7 @@ describe('OpenID4VCIClientV1_0_13 should', () => {
|
|
|
168
147
|
},
|
|
169
148
|
}),
|
|
170
149
|
).resolves.toEqual(
|
|
171
|
-
'https://server.example.com/v1/auth/authorize?response_type=code&code_challenge_method=S256&code_challenge=mE2kPHmIprOqtkaYmESWj35yz-PB5vzdiSu0tAZ8sqs&authorization_details=%7B%22type%22%3A%22openid_credential%22%2C%22format%22%3A%22ldp_vc%22%2C%22credential_definition%22%3A%7B%22%40context%22%3A%5B%22https%3A%2F%2Fwww%2Ew3%2Eorg%2F2018%2Fcredentials%2Fv1%22%2C%22https%3A%2F%2Fwww%2Ew3%2Eorg%2F2018%2Fcredentials%2Fexamples%2Fv1%22%5D%2C%22types%22%3A%5B%22VerifiableCredential%22%2C%22UniversityDegreeCredential%22%5D%7D%2C%22locations%22%3A%5B%22https%3A%2F%2Fserver%2Eexample%2Ecom%22%5D%7D&redirect_uri=http%3A%2F%2Flocalhost%3A8881%2Fcb&client_id=test-client
|
|
150
|
+
'https://server.example.com/v1/auth/authorize?response_type=code&code_challenge_method=S256&code_challenge=mE2kPHmIprOqtkaYmESWj35yz-PB5vzdiSu0tAZ8sqs&authorization_details=%7B%22type%22%3A%22openid_credential%22%2C%22format%22%3A%22ldp_vc%22%2C%22credential_definition%22%3A%7B%22%40context%22%3A%5B%22https%3A%2F%2Fwww%2Ew3%2Eorg%2F2018%2Fcredentials%2Fv1%22%2C%22https%3A%2F%2Fwww%2Ew3%2Eorg%2F2018%2Fcredentials%2Fexamples%2Fv1%22%5D%2C%22types%22%3A%5B%22VerifiableCredential%22%2C%22UniversityDegreeCredential%22%5D%7D%2C%22locations%22%3A%5B%22https%3A%2F%2Fserver%2Eexample%2Ecom%22%5D%7D&redirect_uri=http%3A%2F%2Flocalhost%3A8881%2Fcb&client_id=test-client',
|
|
172
151
|
);
|
|
173
152
|
});
|
|
174
153
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sphereon/oid4vci-client",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.2-next.3+105fc37",
|
|
4
4
|
"description": "OpenID for Verifiable Credential Issuance (OpenID4VCI) client",
|
|
5
5
|
"source": "lib/index.ts",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"build": "tsc"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@sphereon/oid4vci-common": "0.15.
|
|
18
|
+
"@sphereon/oid4vci-common": "0.15.2-next.3+105fc37",
|
|
19
19
|
"@sphereon/ssi-types": "0.28.0",
|
|
20
20
|
"cross-fetch": "^3.1.8",
|
|
21
21
|
"debug": "^4.3.5"
|
|
@@ -69,5 +69,5 @@
|
|
|
69
69
|
"OIDC4VCI",
|
|
70
70
|
"OID4VCI"
|
|
71
71
|
],
|
|
72
|
-
"gitHead": "
|
|
72
|
+
"gitHead": "105fc375619ca333b51de090c5799e7c09ee1270"
|
|
73
73
|
}
|