@sphereon/oid4vci-common 0.10.4-unstable.39 → 0.10.4-unstable.41
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/functions/IssuerMetadataUtils.d.ts.map +1 -1
- package/dist/functions/IssuerMetadataUtils.js +3 -4
- package/dist/functions/IssuerMetadataUtils.js.map +1 -1
- package/lib/__tests__/CredentialOfferUtil.spec.ts +104 -104
- package/lib/__tests__/Encoding.spec.ts +15 -15
- package/lib/__tests__/IssuerMetadataUtils.spec.ts +38 -0
- package/lib/__tests__/randomBytes.spec.ts +15 -15
- package/lib/functions/AuthorizationResponseUtil.ts +18 -18
- package/lib/functions/CredentialOfferUtil.ts +485 -485
- package/lib/functions/CredentialRequestUtil.ts +53 -53
- package/lib/functions/CredentialResponseUtil.ts +90 -90
- package/lib/functions/Encoding.ts +165 -165
- package/lib/functions/FormatUtils.ts +52 -52
- package/lib/functions/HttpUtils.ts +186 -186
- package/lib/functions/IssuerMetadataUtils.ts +153 -152
- package/lib/functions/RandomUtils.ts +43 -43
- package/lib/functions/index.ts +12 -12
- package/lib/functions/randomBytes.js +61 -61
- package/lib/types/Authorization.types.ts +328 -328
- package/lib/types/CredentialIssuance.types.ts +208 -208
- package/lib/types/Generic.types.ts +369 -369
- package/lib/types/OpenID4VCIErrors.ts +40 -40
- package/lib/types/OpenID4VCIVersions.types.ts +13 -13
- package/lib/types/ServerMetadata.ts +70 -70
- package/lib/types/StateManager.types.ts +68 -68
- package/lib/types/index.ts +13 -13
- package/lib/types/v1_0_08.types.ts +49 -49
- package/lib/types/v1_0_09.types.ts +36 -36
- package/lib/types/v1_0_11.types.ts +109 -109
- package/lib/types/v1_0_12.types.ts +42 -42
- package/lib/types/v1_0_13.types.ts +141 -141
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IssuerMetadataUtils.d.ts","sourceRoot":"","sources":["../../lib/functions/IssuerMetadataUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,gCAAgC,EAChC,uCAAuC,EACvC,wBAAwB,EACxB,8BAA8B,EAC9B,0BAA0B,EAC1B,cAAc,EACd,eAAe,EACf,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAElB,wBAAgB,uBAAuB,CAAC,OAAO,CAAC,EAAE;IAChD,cAAc,CAAC,EAAE,wBAAwB,GAAG,cAAc,CAAC;IAC3D,OAAO,EAAE,iBAAiB,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,uBAAuB,GAAG,MAAM,GAAG,CAAC,uBAAuB,GAAG,MAAM,CAAC,EAAE,CAAC;CAClF,GAAG,MAAM,CAAC,MAAM,EAAE,uCAAuC,CAAC,CAgB1D;AAED,wBAAgB,sBAAsB,CAAC,IAAI,CAAC,EAAE;IAC5C,cAAc,CAAC,EAAE,wBAAwB,GAAG,cAAc,CAAC;IAC3D,OAAO,EAAE,iBAAiB,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,uBAAuB,GAAG,MAAM,GAAG,CAAC,uBAAuB,GAAG,MAAM,CAAC,EAAE,CAAC;CAClF,GAAG,MAAM,CAAC,MAAM,EAAE,uCAAuC,CAAC,
|
|
1
|
+
{"version":3,"file":"IssuerMetadataUtils.d.ts","sourceRoot":"","sources":["../../lib/functions/IssuerMetadataUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,gCAAgC,EAChC,uCAAuC,EACvC,wBAAwB,EACxB,8BAA8B,EAC9B,0BAA0B,EAC1B,cAAc,EACd,eAAe,EACf,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAElB,wBAAgB,uBAAuB,CAAC,OAAO,CAAC,EAAE;IAChD,cAAc,CAAC,EAAE,wBAAwB,GAAG,cAAc,CAAC;IAC3D,OAAO,EAAE,iBAAiB,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,uBAAuB,GAAG,MAAM,GAAG,CAAC,uBAAuB,GAAG,MAAM,CAAC,EAAE,CAAC;CAClF,GAAG,MAAM,CAAC,MAAM,EAAE,uCAAuC,CAAC,CAgB1D;AAED,wBAAgB,sBAAsB,CAAC,IAAI,CAAC,EAAE;IAC5C,cAAc,CAAC,EAAE,wBAAwB,GAAG,cAAc,CAAC;IAC3D,OAAO,EAAE,iBAAiB,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,uBAAuB,GAAG,MAAM,GAAG,CAAC,uBAAuB,GAAG,MAAM,CAAC,EAAE,CAAC;CAClF,GAAG,MAAM,CAAC,MAAM,EAAE,uCAAuC,CAAC,CAyB1D;AAED,wBAAgB,+BAA+B,CAC7C,mBAAmB,EAAE,gCAAgC,EACrD,IAAI,CAAC,EAAE;IAAE,0BAA0B,EAAE,OAAO,CAAA;CAAE,YA2B/C;AAED,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,8BAA8B,GAAG,MAAM,CAAC,MAAM,EAAE,gCAAgC,CAAC,CAQzI;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,0BAA0B,GAAG,MAAM,CAAC,MAAM,EAAE,gCAAgC,CAAC,CAiBjJ;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,wBAAwB,GAAG,cAAc,EAAE,IAAI,CAAC,EAAE;IAAE,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,eAAe,EAAE,CAM1I;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,wBAAwB,CAAC,EAAE,OAAO,CAAC,2BAA2B,CAAC,GAAG,CAAC,wBAAwB,GAAG,cAAc,CAAC,GAC5G,MAAM,CAUR"}
|
|
@@ -20,12 +20,11 @@ function getSupportedCredential(opts) {
|
|
|
20
20
|
if (!issuerMetadata || !issuerMetadata.credential_configurations_supported) {
|
|
21
21
|
return {};
|
|
22
22
|
}
|
|
23
|
-
const
|
|
23
|
+
const credentialConfigurations = issuerMetadata.credential_configurations_supported;
|
|
24
24
|
const normalizedTypes = Array.isArray(types) ? types : types ? [types] : [];
|
|
25
25
|
const normalizedFormats = Array.isArray(format) ? format : format ? [format] : [];
|
|
26
|
-
return
|
|
27
|
-
const
|
|
28
|
-
const isTypeMatch = normalizedTypes.length === 0 || normalizedTypes.includes(id);
|
|
26
|
+
return Object.entries(credentialConfigurations).reduce((filteredConfigs, [id, config]) => {
|
|
27
|
+
const isTypeMatch = normalizedTypes.length === 0 || normalizedTypes.some((type) => config.credential_definition.type.includes(type));
|
|
29
28
|
const isFormatMatch = normalizedFormats.length === 0 || normalizedFormats.includes(config.format);
|
|
30
29
|
if (isTypeMatch && isFormatMatch) {
|
|
31
30
|
filteredConfigs[id] = config;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IssuerMetadataUtils.js","sourceRoot":"","sources":["../../lib/functions/IssuerMetadataUtils.ts"],"names":[],"mappings":";;;AAaA,SAAgB,uBAAuB,CAAC,OAKvC;IACC,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,KAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACnD,OAAO,OAAO,CAAC,KAAK;aACjB,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YACf,OAAO,sBAAsB,iCAAM,OAAO,KAAE,KAAK,EAAE,OAAO,IAAG,CAAC;QAChE,CAAC,CAAC;aACD,MAAM,CACL,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;YACd,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC3B,OAAO,GAAG,CAAC;QACb,CAAC,EACD,EAA6D,CAC9D,CAAC;IACN,CAAC;IAED,OAAO,sBAAsB,CAAC,OAAO,CAAC,CAAC,iCAAM,OAAO,KAAE,KAAK,EAAE,SAAS,IAAG,CAAC,CAAC,SAAS,CAAC,CAAC;AACxF,CAAC;AArBD,0DAqBC;AAED,SAAgB,sBAAsB,CAAC,IAKtC;IACC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAAC;IAErD,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,CAAC,mCAAmC,EAAE,CAAC;QAC3E,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,
|
|
1
|
+
{"version":3,"file":"IssuerMetadataUtils.js","sourceRoot":"","sources":["../../lib/functions/IssuerMetadataUtils.ts"],"names":[],"mappings":";;;AAaA,SAAgB,uBAAuB,CAAC,OAKvC;IACC,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,KAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACnD,OAAO,OAAO,CAAC,KAAK;aACjB,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YACf,OAAO,sBAAsB,iCAAM,OAAO,KAAE,KAAK,EAAE,OAAO,IAAG,CAAC;QAChE,CAAC,CAAC;aACD,MAAM,CACL,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;YACd,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC3B,OAAO,GAAG,CAAC;QACb,CAAC,EACD,EAA6D,CAC9D,CAAC;IACN,CAAC;IAED,OAAO,sBAAsB,CAAC,OAAO,CAAC,CAAC,iCAAM,OAAO,KAAE,KAAK,EAAE,SAAS,IAAG,CAAC,CAAC,SAAS,CAAC,CAAC;AACxF,CAAC;AArBD,0DAqBC;AAED,SAAgB,sBAAsB,CAAC,IAKtC;IACC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAAC;IAErD,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,CAAC,mCAAmC,EAAE,CAAC;QAC3E,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,wBAAwB,GAC5B,cAAc,CAAC,mCAA8F,CAAC;IAChH,MAAM,eAAe,GAAa,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtF,MAAM,iBAAiB,GAAa,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5F,OAAO,MAAM,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,MAAM,CACpD,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE;QAChC,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,KAAK,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACrI,MAAM,aAAa,GAAG,iBAAiB,CAAC,MAAM,KAAK,CAAC,IAAI,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAElG,IAAI,WAAW,IAAI,aAAa,EAAE,CAAC;YACjC,eAAe,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;QAC/B,CAAC;QAED,OAAO,eAAe,CAAC;IACzB,CAAC,EACD,EAA6D,CAC9D,CAAC;AACJ,CAAC;AA9BD,wDA8BC;AAED,SAAgB,+BAA+B,CAC7C,mBAAqD,EACrD,IAA8C;IAE9C,IAAI,KAAK,GAAa,EAAE,CAAC;IACzB,IACE,mBAAmB,CAAC,MAAM,KAAK,aAAa;QAC5C,mBAAmB,CAAC,MAAM,KAAK,QAAQ;QACvC,mBAAmB,CAAC,MAAM,KAAK,gBAAgB;QAC/C,mBAAmB,CAAC,MAAM,KAAK,QAAQ,EACvC,CAAC;QACD,KAAK,GAAG,mBAAmB,CAAC,KAAK;YAC/B,CAAC,CAAE,mBAAmB,CAAC,KAAkB;YACzC,CAAC,CAAC,uBAAuB,IAAI,mBAAmB;gBAC9C,CAAC,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,IAAI;gBAChD,CAAC,CAAC,EAAE,CAAC;IACX,CAAC;SAAM,IAAI,mBAAmB,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QACtD,6DAA6D;QAC7D,aAAa;QACb,KAAK,GAAG,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,KAAK,CAAC,kDAAkD,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,0BAA0B,EAAE,CAAC;QACrC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,sBAAsB,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AA7BD,0EA6BC;AAED,SAAgB,2BAA2B,CAAC,WAA2C;IACrF,MAAM,0BAA0B,GAAqD,EAAE,CAAC;IACxF,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,0BAA0B,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;IACH,OAAO,0BAA0B,CAAC;AACpC,CAAC;AARD,kEAQC;AAED,SAAgB,0BAA0B,CAAC,GAAW,EAAE,WAAuC;IAC7F,MAAM,0BAA0B,GAAqD,EAAE,CAAC;IACxF,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAChD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,sBAAsB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACxC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,MAAM,KAAK,CAAC,2BAA2B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,yBAAyB,iCAC7B,MAAM,EAAE,MAAiC,EACzC,OAAO,EAAE,WAAW,CAAC,OAAO,IACzB,sBAAsB,KACzB,iBAAiB,EAAE,WAAW,CAAC,MAAM,GACtC,CAAC;QACF,0BAA0B,CAAC,GAAG,CAAC,GAAG,yBAA6D,CAAC;IAClG,CAAC,CAAC,CAAC;IACH,OAAO,0BAA0B,CAAC;AACpC,CAAC;AAjBD,gEAiBC;AAED,SAAgB,iBAAiB,CAAC,QAAmD,EAAE,IAAgC;;IACrH,MAAM,eAAe,GACnB,MAAA,MAAA,QAAQ,CAAC,OAAO,0CAAE,MAAM,CACtB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,CAAA,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CACzI,mCAAI,EAAE,CAAC;IACV,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,WAAC,OAAA,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,mCAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA,EAAA,CAAC,CAAC;AACxH,CAAC;AAND,8CAMC;AAED;;GAEG;AACH,SAAgB,aAAa,CAC3B,GAAW,EACX,wBAA6G;IAE7G,IAAI,wBAAwB,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAA2B,wBAAwB,CAAC,CAAC,CAAC,iBAAiB,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrH,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,OAAO,CAAC,IAAI,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAbD,sCAaC"}
|
|
@@ -1,104 +1,104 @@
|
|
|
1
|
-
import { determineSpecVersionFromURI, getClientIdFromCredentialOfferPayload } from '../functions';
|
|
2
|
-
import { CredentialOfferPayload, CredentialOfferPayloadV1_0_11, OpenId4VCIVersion } from '../types';
|
|
3
|
-
|
|
4
|
-
export const UNIT_TEST_TIMEOUT = 30000;
|
|
5
|
-
|
|
6
|
-
describe('CredentialOfferUtil should', () => {
|
|
7
|
-
const INITIATE_QR_V8 =
|
|
8
|
-
'openid-initiate-issuance://?' +
|
|
9
|
-
'issuer=https%3A%2F%2Fissuer.research.identiproof.io&' +
|
|
10
|
-
'credential_type=OpenBadgeCredentialUrl&' +
|
|
11
|
-
'pre-authorized_code=4jLs9xZHEfqcoow0kHE7d1a8hUk6Sy-5bVSV2MqBUGUgiFFQi-ImL62T-FmLIo8hKA1UdMPH0lM1xAgcFkJfxIw9L-lI3mVs0hRT8YVwsEM1ma6N3wzuCdwtMU4bcwKp&' +
|
|
12
|
-
'user_pin_required=true';
|
|
13
|
-
|
|
14
|
-
const INITIATE_QR_DATA_MIXED_V9 =
|
|
15
|
-
'openid-initiate-issuance://?' +
|
|
16
|
-
'credential_offer=%7B%22credential_issuer%22:%22https://credential-issuer.example.com%22,%22credentials%22:%5B%7B%22format%22:%22jwt_vc_json%22,%22types%22:%5B%22VerifiableCredential%22,%22UniversityDegreeCredential%22%5D%7D%5D,%22issuer_state%22:%22eyJhbGciOiJSU0Et...FYUaBy%22%7D';
|
|
17
|
-
|
|
18
|
-
const CREDENTIAL_OFFER_QR_V11 =
|
|
19
|
-
'openid-credential-offer://?' +
|
|
20
|
-
'credential_offer=%7B%22credential_issuer%22:%22https://credential-issuer.example.com%22,%22credentials%22:%5B%7B%22format%22:%22jwt_vc_json%22,%22types%22:%5B%22VerifiableCredential%22,%22UniversityDegreeCredential%22%5D%7D%5D,%22issuer_state%22:%22eyJhbGciOiJSU0Et...FYUaBy%22%7D';
|
|
21
|
-
|
|
22
|
-
it(
|
|
23
|
-
'get version 8 with sample URL',
|
|
24
|
-
async () => {
|
|
25
|
-
expect(determineSpecVersionFromURI(INITIATE_QR_V8)).toEqual(OpenId4VCIVersion.VER_1_0_08);
|
|
26
|
-
},
|
|
27
|
-
UNIT_TEST_TIMEOUT,
|
|
28
|
-
);
|
|
29
|
-
|
|
30
|
-
it(
|
|
31
|
-
'get version 11 with sample URL',
|
|
32
|
-
async () => {
|
|
33
|
-
expect(determineSpecVersionFromURI(CREDENTIAL_OFFER_QR_V11)).toEqual(OpenId4VCIVersion.VER_1_0_11);
|
|
34
|
-
},
|
|
35
|
-
UNIT_TEST_TIMEOUT,
|
|
36
|
-
);
|
|
37
|
-
|
|
38
|
-
it(
|
|
39
|
-
'get exception for mixed attributes in URL',
|
|
40
|
-
async () => {
|
|
41
|
-
expect(() => determineSpecVersionFromURI(INITIATE_QR_DATA_MIXED_V9)).toThrow(
|
|
42
|
-
Error("Invalid param. Some keys have been used from version: 1008 version while 'credentials' is used from version: 1011"),
|
|
43
|
-
);
|
|
44
|
-
},
|
|
45
|
-
UNIT_TEST_TIMEOUT,
|
|
46
|
-
);
|
|
47
|
-
|
|
48
|
-
it(
|
|
49
|
-
'get version 11 as default value',
|
|
50
|
-
async () => {
|
|
51
|
-
expect(determineSpecVersionFromURI('test://uri')).toEqual(OpenId4VCIVersion.VER_1_0_13);
|
|
52
|
-
},
|
|
53
|
-
UNIT_TEST_TIMEOUT,
|
|
54
|
-
);
|
|
55
|
-
|
|
56
|
-
it('get client_id from JWT pre-auth code offer', () => {
|
|
57
|
-
const offer: CredentialOfferPayload = {
|
|
58
|
-
credential_issuer: 'https://conformance-test.ebsi.eu/conformance/v3/issuer-mock',
|
|
59
|
-
credentials: [
|
|
60
|
-
{
|
|
61
|
-
format: 'jwt_vc',
|
|
62
|
-
types: ['VerifiableCredential', 'VerifiableAttestation', 'CTWalletCrossPreAuthorisedInTime'],
|
|
63
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
64
|
-
// @ts-ignore
|
|
65
|
-
trust_framework: { name: 'ebsi', type: 'Accreditation', uri: 'TIR link towards accreditation' },
|
|
66
|
-
},
|
|
67
|
-
],
|
|
68
|
-
grants: {
|
|
69
|
-
'urn:ietf:params:oauth:grant-type:pre-authorized_code': {
|
|
70
|
-
'pre-authorized_code':
|
|
71
|
-
'eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiIsImtpZCI6IkJFTmRqRGZhdGxLai11UW92WUpsT184U2pPY1ZIdmk2SHJYS0xLRUI3UG8ifQ.eyJjbGllbnRfaWQiOiJkaWQ6a2V5OnoyZG16RDgxY2dQeDhWa2k3SmJ1dU1tRllyV1BnWW95dHlrVVozZXlxaHQxajlLYnFTWlpGakc0dFZnS2hFd0twcm9qcUxCM0MyWXBqNEg3M1N0Z2pNa1NYZzJtUXh1V0xmenVSMTJRc052Z1FXenJ6S1NmN1lSQk5yUlhLNzF2ZnExMkJieXhUTEZFWkJXZm5IcWV6QlZHUWlOTGZxZXV5d1pIZ3N0TUNjUzQ0VFhmYjIiLCJhdXRob3JpemF0aW9uX2RldGFpbHMiOlt7InR5cGUiOiJvcGVuaWRfY3JlZGVudGlhbCIsImZvcm1hdCI6Imp3dF92YyIsImxvY2F0aW9ucyI6WyJodHRwczovL2NvbmZvcm1hbmNlLXRlc3QuZWJzaS5ldS9jb25mb3JtYW5jZS92My9pc3N1ZXItbW9jayJdLCJ0eXBlcyI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIlZlcmlmaWFibGVBdHRlc3RhdGlvbiIsIkNUV2FsbGV0Q3Jvc3NQcmVBdXRob3Jpc2VkSW5UaW1lIl19XSwiaWF0IjoxNzA2MTI2NDI5LCJleHAiOjE3MDYxMjY3MjksImlzcyI6Imh0dHBzOi8vY29uZm9ybWFuY2UtdGVzdC5lYnNpLmV1L2NvbmZvcm1hbmNlL3YzL2lzc3Vlci1tb2NrIiwiYXVkIjoiaHR0cHM6Ly9jb25mb3JtYW5jZS10ZXN0LmVic2kuZXUvY29uZm9ybWFuY2UvdjMvYXV0aC1tb2NrIiwic3ViIjoiZGlkOmtleTp6MmRtekQ4MWNnUHg4VmtpN0pidXVNbUZZcldQZ1lveXR5a1VaM2V5cWh0MWo5S2JxU1paRmpHNHRWZ0toRXdLcHJvanFMQjNDMllwajRINzNTdGdqTWtTWGcybVF4dVdMZnp1UjEyUXNOdmdRV3pyektTZjdZUkJOclJYSzcxdmZxMTJCYnl4VExGRVpCV2ZuSHFlekJWR1FpTkxmcWV1eXdaSGdzdE1DY1M0NFRYZmIyIn0.Zq2o33CU4wlRNtWOIITI5qbJcuNc2c9hLwIio7OlsHBa5ZAyQR8UUU_r5EufSChe4ji15Ihrr20m5-oUiZW80A',
|
|
72
|
-
user_pin_required: true,
|
|
73
|
-
},
|
|
74
|
-
},
|
|
75
|
-
} as CredentialOfferPayloadV1_0_11;
|
|
76
|
-
expect(getClientIdFromCredentialOfferPayload(offer)).toEqual(
|
|
77
|
-
'did:key:z2dmzD81cgPx8Vki7JbuuMmFYrWPgYoytykUZ3eyqht1j9KbqSZZFjG4tVgKhEwKprojqLB3C2Ypj4H73StgjMkSXg2mQxuWLfzuR12QsNvgQWzrzKSf7YRBNrRXK71vfq12BbyxTLFEZBWfnHqezBVGQiNLfqeuywZHgstMCcS44TXfb2',
|
|
78
|
-
);
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
it('get client_id from JWT authorization code offer', () => {
|
|
82
|
-
const offer: CredentialOfferPayload = {
|
|
83
|
-
credential_issuer: 'https://conformance-test.ebsi.eu/conformance/v3/issuer-mock',
|
|
84
|
-
credentials: [
|
|
85
|
-
{
|
|
86
|
-
format: 'jwt_vc',
|
|
87
|
-
types: ['VerifiableCredential', 'VerifiableAttestation', 'CTWalletCrossAuthorisedInTime'],
|
|
88
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
89
|
-
// @ts-ignore
|
|
90
|
-
trust_framework: { name: 'ebsi', type: 'Accreditation', uri: 'TIR link towards accreditation' },
|
|
91
|
-
},
|
|
92
|
-
],
|
|
93
|
-
grants: {
|
|
94
|
-
authorization_code: {
|
|
95
|
-
issuer_state:
|
|
96
|
-
'eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiIsImtpZCI6IkJFTmRqRGZhdGxLai11UW92WUpsT184U2pPY1ZIdmk2SHJYS0xLRUI3UG8ifQ.eyJjbGllbnRfaWQiOiJkaWQ6a2V5OnoyZG16RDgxY2dQeDhWa2k3SmJ1dU1tRllyV1BnWW95dHlrVVozZXlxaHQxajlLYnFTWlpGakc0dFZnS2hFd0twcm9qcUxCM0MyWXBqNEg3M1N0Z2pNa1NYZzJtUXh1V0xmenVSMTJRc052Z1FXenJ6S1NmN1lSQk5yUlhLNzF2ZnExMkJieXhUTEZFWkJXZm5IcWV6QlZHUWlOTGZxZXV5d1pIZ3N0TUNjUzQ0VFhmYjIiLCJjcmVkZW50aWFsX3R5cGVzIjpbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwiVmVyaWZpYWJsZUF0dGVzdGF0aW9uIiwiQ1RXYWxsZXRDcm9zc0F1dGhvcmlzZWRJblRpbWUiXSwiaWF0IjoxNzA2MTI1ODUwLCJleHAiOjE3MDYxMjYxNTAsImlzcyI6Imh0dHBzOi8vY29uZm9ybWFuY2UtdGVzdC5lYnNpLmV1L2NvbmZvcm1hbmNlL3YzL2lzc3Vlci1tb2NrIiwiYXVkIjoiaHR0cHM6Ly9jb25mb3JtYW5jZS10ZXN0LmVic2kuZXUvY29uZm9ybWFuY2UvdjMvYXV0aC1tb2NrIiwic3ViIjoiZGlkOmtleTp6MmRtekQ4MWNnUHg4VmtpN0pidXVNbUZZcldQZ1lveXR5a1VaM2V5cWh0MWo5S2JxU1paRmpHNHRWZ0toRXdLcHJvanFMQjNDMllwajRINzNTdGdqTWtTWGcybVF4dVdMZnp1UjEyUXNOdmdRV3pyektTZjdZUkJOclJYSzcxdmZxMTJCYnl4VExGRVpCV2ZuSHFlekJWR1FpTkxmcWV1eXdaSGdzdE1DY1M0NFRYZmIyIn0.jxzbE6OdqnJfLzSfwYcgRZQURI5UcAtuYU9gPOZYyUwjWMDtVo1k4PCYH4mnjok7pfj47ik8FnaHWE7d99u-_w',
|
|
97
|
-
},
|
|
98
|
-
},
|
|
99
|
-
} as CredentialOfferPayloadV1_0_11;
|
|
100
|
-
expect(getClientIdFromCredentialOfferPayload(offer)).toEqual(
|
|
101
|
-
'did:key:z2dmzD81cgPx8Vki7JbuuMmFYrWPgYoytykUZ3eyqht1j9KbqSZZFjG4tVgKhEwKprojqLB3C2Ypj4H73StgjMkSXg2mQxuWLfzuR12QsNvgQWzrzKSf7YRBNrRXK71vfq12BbyxTLFEZBWfnHqezBVGQiNLfqeuywZHgstMCcS44TXfb2',
|
|
102
|
-
);
|
|
103
|
-
});
|
|
104
|
-
});
|
|
1
|
+
import { determineSpecVersionFromURI, getClientIdFromCredentialOfferPayload } from '../functions';
|
|
2
|
+
import { CredentialOfferPayload, CredentialOfferPayloadV1_0_11, OpenId4VCIVersion } from '../types';
|
|
3
|
+
|
|
4
|
+
export const UNIT_TEST_TIMEOUT = 30000;
|
|
5
|
+
|
|
6
|
+
describe('CredentialOfferUtil should', () => {
|
|
7
|
+
const INITIATE_QR_V8 =
|
|
8
|
+
'openid-initiate-issuance://?' +
|
|
9
|
+
'issuer=https%3A%2F%2Fissuer.research.identiproof.io&' +
|
|
10
|
+
'credential_type=OpenBadgeCredentialUrl&' +
|
|
11
|
+
'pre-authorized_code=4jLs9xZHEfqcoow0kHE7d1a8hUk6Sy-5bVSV2MqBUGUgiFFQi-ImL62T-FmLIo8hKA1UdMPH0lM1xAgcFkJfxIw9L-lI3mVs0hRT8YVwsEM1ma6N3wzuCdwtMU4bcwKp&' +
|
|
12
|
+
'user_pin_required=true';
|
|
13
|
+
|
|
14
|
+
const INITIATE_QR_DATA_MIXED_V9 =
|
|
15
|
+
'openid-initiate-issuance://?' +
|
|
16
|
+
'credential_offer=%7B%22credential_issuer%22:%22https://credential-issuer.example.com%22,%22credentials%22:%5B%7B%22format%22:%22jwt_vc_json%22,%22types%22:%5B%22VerifiableCredential%22,%22UniversityDegreeCredential%22%5D%7D%5D,%22issuer_state%22:%22eyJhbGciOiJSU0Et...FYUaBy%22%7D';
|
|
17
|
+
|
|
18
|
+
const CREDENTIAL_OFFER_QR_V11 =
|
|
19
|
+
'openid-credential-offer://?' +
|
|
20
|
+
'credential_offer=%7B%22credential_issuer%22:%22https://credential-issuer.example.com%22,%22credentials%22:%5B%7B%22format%22:%22jwt_vc_json%22,%22types%22:%5B%22VerifiableCredential%22,%22UniversityDegreeCredential%22%5D%7D%5D,%22issuer_state%22:%22eyJhbGciOiJSU0Et...FYUaBy%22%7D';
|
|
21
|
+
|
|
22
|
+
it(
|
|
23
|
+
'get version 8 with sample URL',
|
|
24
|
+
async () => {
|
|
25
|
+
expect(determineSpecVersionFromURI(INITIATE_QR_V8)).toEqual(OpenId4VCIVersion.VER_1_0_08);
|
|
26
|
+
},
|
|
27
|
+
UNIT_TEST_TIMEOUT,
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
it(
|
|
31
|
+
'get version 11 with sample URL',
|
|
32
|
+
async () => {
|
|
33
|
+
expect(determineSpecVersionFromURI(CREDENTIAL_OFFER_QR_V11)).toEqual(OpenId4VCIVersion.VER_1_0_11);
|
|
34
|
+
},
|
|
35
|
+
UNIT_TEST_TIMEOUT,
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
it(
|
|
39
|
+
'get exception for mixed attributes in URL',
|
|
40
|
+
async () => {
|
|
41
|
+
expect(() => determineSpecVersionFromURI(INITIATE_QR_DATA_MIXED_V9)).toThrow(
|
|
42
|
+
Error("Invalid param. Some keys have been used from version: 1008 version while 'credentials' is used from version: 1011"),
|
|
43
|
+
);
|
|
44
|
+
},
|
|
45
|
+
UNIT_TEST_TIMEOUT,
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
it(
|
|
49
|
+
'get version 11 as default value',
|
|
50
|
+
async () => {
|
|
51
|
+
expect(determineSpecVersionFromURI('test://uri')).toEqual(OpenId4VCIVersion.VER_1_0_13);
|
|
52
|
+
},
|
|
53
|
+
UNIT_TEST_TIMEOUT,
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
it('get client_id from JWT pre-auth code offer', () => {
|
|
57
|
+
const offer: CredentialOfferPayload = {
|
|
58
|
+
credential_issuer: 'https://conformance-test.ebsi.eu/conformance/v3/issuer-mock',
|
|
59
|
+
credentials: [
|
|
60
|
+
{
|
|
61
|
+
format: 'jwt_vc',
|
|
62
|
+
types: ['VerifiableCredential', 'VerifiableAttestation', 'CTWalletCrossPreAuthorisedInTime'],
|
|
63
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
64
|
+
// @ts-ignore
|
|
65
|
+
trust_framework: { name: 'ebsi', type: 'Accreditation', uri: 'TIR link towards accreditation' },
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
grants: {
|
|
69
|
+
'urn:ietf:params:oauth:grant-type:pre-authorized_code': {
|
|
70
|
+
'pre-authorized_code':
|
|
71
|
+
'eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiIsImtpZCI6IkJFTmRqRGZhdGxLai11UW92WUpsT184U2pPY1ZIdmk2SHJYS0xLRUI3UG8ifQ.eyJjbGllbnRfaWQiOiJkaWQ6a2V5OnoyZG16RDgxY2dQeDhWa2k3SmJ1dU1tRllyV1BnWW95dHlrVVozZXlxaHQxajlLYnFTWlpGakc0dFZnS2hFd0twcm9qcUxCM0MyWXBqNEg3M1N0Z2pNa1NYZzJtUXh1V0xmenVSMTJRc052Z1FXenJ6S1NmN1lSQk5yUlhLNzF2ZnExMkJieXhUTEZFWkJXZm5IcWV6QlZHUWlOTGZxZXV5d1pIZ3N0TUNjUzQ0VFhmYjIiLCJhdXRob3JpemF0aW9uX2RldGFpbHMiOlt7InR5cGUiOiJvcGVuaWRfY3JlZGVudGlhbCIsImZvcm1hdCI6Imp3dF92YyIsImxvY2F0aW9ucyI6WyJodHRwczovL2NvbmZvcm1hbmNlLXRlc3QuZWJzaS5ldS9jb25mb3JtYW5jZS92My9pc3N1ZXItbW9jayJdLCJ0eXBlcyI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIlZlcmlmaWFibGVBdHRlc3RhdGlvbiIsIkNUV2FsbGV0Q3Jvc3NQcmVBdXRob3Jpc2VkSW5UaW1lIl19XSwiaWF0IjoxNzA2MTI2NDI5LCJleHAiOjE3MDYxMjY3MjksImlzcyI6Imh0dHBzOi8vY29uZm9ybWFuY2UtdGVzdC5lYnNpLmV1L2NvbmZvcm1hbmNlL3YzL2lzc3Vlci1tb2NrIiwiYXVkIjoiaHR0cHM6Ly9jb25mb3JtYW5jZS10ZXN0LmVic2kuZXUvY29uZm9ybWFuY2UvdjMvYXV0aC1tb2NrIiwic3ViIjoiZGlkOmtleTp6MmRtekQ4MWNnUHg4VmtpN0pidXVNbUZZcldQZ1lveXR5a1VaM2V5cWh0MWo5S2JxU1paRmpHNHRWZ0toRXdLcHJvanFMQjNDMllwajRINzNTdGdqTWtTWGcybVF4dVdMZnp1UjEyUXNOdmdRV3pyektTZjdZUkJOclJYSzcxdmZxMTJCYnl4VExGRVpCV2ZuSHFlekJWR1FpTkxmcWV1eXdaSGdzdE1DY1M0NFRYZmIyIn0.Zq2o33CU4wlRNtWOIITI5qbJcuNc2c9hLwIio7OlsHBa5ZAyQR8UUU_r5EufSChe4ji15Ihrr20m5-oUiZW80A',
|
|
72
|
+
user_pin_required: true,
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
} as CredentialOfferPayloadV1_0_11;
|
|
76
|
+
expect(getClientIdFromCredentialOfferPayload(offer)).toEqual(
|
|
77
|
+
'did:key:z2dmzD81cgPx8Vki7JbuuMmFYrWPgYoytykUZ3eyqht1j9KbqSZZFjG4tVgKhEwKprojqLB3C2Ypj4H73StgjMkSXg2mQxuWLfzuR12QsNvgQWzrzKSf7YRBNrRXK71vfq12BbyxTLFEZBWfnHqezBVGQiNLfqeuywZHgstMCcS44TXfb2',
|
|
78
|
+
);
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
it('get client_id from JWT authorization code offer', () => {
|
|
82
|
+
const offer: CredentialOfferPayload = {
|
|
83
|
+
credential_issuer: 'https://conformance-test.ebsi.eu/conformance/v3/issuer-mock',
|
|
84
|
+
credentials: [
|
|
85
|
+
{
|
|
86
|
+
format: 'jwt_vc',
|
|
87
|
+
types: ['VerifiableCredential', 'VerifiableAttestation', 'CTWalletCrossAuthorisedInTime'],
|
|
88
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
89
|
+
// @ts-ignore
|
|
90
|
+
trust_framework: { name: 'ebsi', type: 'Accreditation', uri: 'TIR link towards accreditation' },
|
|
91
|
+
},
|
|
92
|
+
],
|
|
93
|
+
grants: {
|
|
94
|
+
authorization_code: {
|
|
95
|
+
issuer_state:
|
|
96
|
+
'eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiIsImtpZCI6IkJFTmRqRGZhdGxLai11UW92WUpsT184U2pPY1ZIdmk2SHJYS0xLRUI3UG8ifQ.eyJjbGllbnRfaWQiOiJkaWQ6a2V5OnoyZG16RDgxY2dQeDhWa2k3SmJ1dU1tRllyV1BnWW95dHlrVVozZXlxaHQxajlLYnFTWlpGakc0dFZnS2hFd0twcm9qcUxCM0MyWXBqNEg3M1N0Z2pNa1NYZzJtUXh1V0xmenVSMTJRc052Z1FXenJ6S1NmN1lSQk5yUlhLNzF2ZnExMkJieXhUTEZFWkJXZm5IcWV6QlZHUWlOTGZxZXV5d1pIZ3N0TUNjUzQ0VFhmYjIiLCJjcmVkZW50aWFsX3R5cGVzIjpbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwiVmVyaWZpYWJsZUF0dGVzdGF0aW9uIiwiQ1RXYWxsZXRDcm9zc0F1dGhvcmlzZWRJblRpbWUiXSwiaWF0IjoxNzA2MTI1ODUwLCJleHAiOjE3MDYxMjYxNTAsImlzcyI6Imh0dHBzOi8vY29uZm9ybWFuY2UtdGVzdC5lYnNpLmV1L2NvbmZvcm1hbmNlL3YzL2lzc3Vlci1tb2NrIiwiYXVkIjoiaHR0cHM6Ly9jb25mb3JtYW5jZS10ZXN0LmVic2kuZXUvY29uZm9ybWFuY2UvdjMvYXV0aC1tb2NrIiwic3ViIjoiZGlkOmtleTp6MmRtekQ4MWNnUHg4VmtpN0pidXVNbUZZcldQZ1lveXR5a1VaM2V5cWh0MWo5S2JxU1paRmpHNHRWZ0toRXdLcHJvanFMQjNDMllwajRINzNTdGdqTWtTWGcybVF4dVdMZnp1UjEyUXNOdmdRV3pyektTZjdZUkJOclJYSzcxdmZxMTJCYnl4VExGRVpCV2ZuSHFlekJWR1FpTkxmcWV1eXdaSGdzdE1DY1M0NFRYZmIyIn0.jxzbE6OdqnJfLzSfwYcgRZQURI5UcAtuYU9gPOZYyUwjWMDtVo1k4PCYH4mnjok7pfj47ik8FnaHWE7d99u-_w',
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
} as CredentialOfferPayloadV1_0_11;
|
|
100
|
+
expect(getClientIdFromCredentialOfferPayload(offer)).toEqual(
|
|
101
|
+
'did:key:z2dmzD81cgPx8Vki7JbuuMmFYrWPgYoytykUZ3eyqht1j9KbqSZZFjG4tVgKhEwKprojqLB3C2Ypj4H73StgjMkSXg2mQxuWLfzuR12QsNvgQWzrzKSf7YRBNrRXK71vfq12BbyxTLFEZBWfnHqezBVGQiNLfqeuywZHgstMCcS44TXfb2',
|
|
102
|
+
);
|
|
103
|
+
});
|
|
104
|
+
});
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { convertURIToJsonObject } from '../functions';
|
|
2
|
-
|
|
3
|
-
import { UNIT_TEST_TIMEOUT } from './CredentialOfferUtil.spec';
|
|
4
|
-
|
|
5
|
-
describe('URI to json enconding', () => {
|
|
6
|
-
const CREDENTIAL_OFFER_CODE = 'openid-credential-offer://code=1234-1234-1234';
|
|
7
|
-
|
|
8
|
-
it(
|
|
9
|
-
'should get code from auth-code redirect URI',
|
|
10
|
-
async () => {
|
|
11
|
-
expect(convertURIToJsonObject(CREDENTIAL_OFFER_CODE)).toEqual({ code: '1234-1234-1234' });
|
|
12
|
-
},
|
|
13
|
-
UNIT_TEST_TIMEOUT,
|
|
14
|
-
);
|
|
15
|
-
});
|
|
1
|
+
import { convertURIToJsonObject } from '../functions';
|
|
2
|
+
|
|
3
|
+
import { UNIT_TEST_TIMEOUT } from './CredentialOfferUtil.spec';
|
|
4
|
+
|
|
5
|
+
describe('URI to json enconding', () => {
|
|
6
|
+
const CREDENTIAL_OFFER_CODE = 'openid-credential-offer://code=1234-1234-1234';
|
|
7
|
+
|
|
8
|
+
it(
|
|
9
|
+
'should get code from auth-code redirect URI',
|
|
10
|
+
async () => {
|
|
11
|
+
expect(convertURIToJsonObject(CREDENTIAL_OFFER_CODE)).toEqual({ code: '1234-1234-1234' });
|
|
12
|
+
},
|
|
13
|
+
UNIT_TEST_TIMEOUT,
|
|
14
|
+
);
|
|
15
|
+
});
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { getTypesFromCredentialSupported } from '../functions';
|
|
2
|
+
import { CredentialConfigurationSupportedV1_0_13 } from '../types';
|
|
3
|
+
|
|
4
|
+
describe('IssuerMetadataUtils should', () => {
|
|
5
|
+
it('return the types from a credential supported with jwt_vc_json format', () => {
|
|
6
|
+
const credentialSupported: CredentialConfigurationSupportedV1_0_13 = {
|
|
7
|
+
format: 'jwt_vc_json',
|
|
8
|
+
credential_definition: {
|
|
9
|
+
type: ['VerifiableCredential', 'BevoegdheidUittreksel'],
|
|
10
|
+
},
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
const result: string[] = getTypesFromCredentialSupported(credentialSupported);
|
|
14
|
+
expect(result).toEqual(['VerifiableCredential', 'BevoegdheidUittreksel']);
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it('filter out "VerifiableCredential" type if filterVerifiableCredential option is true', () => {
|
|
18
|
+
const credentialSupported: CredentialConfigurationSupportedV1_0_13 = {
|
|
19
|
+
format: 'jwt_vc_json',
|
|
20
|
+
credential_definition: {
|
|
21
|
+
type: ['VerifiableCredential', 'BevoegdheidUittreksel'],
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const result: string[] = getTypesFromCredentialSupported(credentialSupported, { filterVerifiableCredential: true });
|
|
26
|
+
expect(result).toEqual(['BevoegdheidUittreksel']);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it('throw an error if types cannot be deduced', () => {
|
|
30
|
+
const credentialSupported: CredentialConfigurationSupportedV1_0_13 = {
|
|
31
|
+
format: 'unknown_format',
|
|
32
|
+
} as unknown as CredentialConfigurationSupportedV1_0_13;
|
|
33
|
+
|
|
34
|
+
expect(() => {
|
|
35
|
+
getTypesFromCredentialSupported(credentialSupported);
|
|
36
|
+
}).toThrow('Could not deduce types from credential supported');
|
|
37
|
+
});
|
|
38
|
+
});
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { randomBytes } from '../functions';
|
|
2
|
-
|
|
3
|
-
import { UNIT_TEST_TIMEOUT } from './CredentialOfferUtil.spec';
|
|
4
|
-
|
|
5
|
-
describe('randomBytes should', () => {
|
|
6
|
-
it(
|
|
7
|
-
'generate random bytes of length 32',
|
|
8
|
-
() => {
|
|
9
|
-
const bytes = randomBytes(32);
|
|
10
|
-
expect(bytes).toBeDefined();
|
|
11
|
-
expect(bytes.length).toEqual(32);
|
|
12
|
-
},
|
|
13
|
-
UNIT_TEST_TIMEOUT,
|
|
14
|
-
);
|
|
15
|
-
});
|
|
1
|
+
import { randomBytes } from '../functions';
|
|
2
|
+
|
|
3
|
+
import { UNIT_TEST_TIMEOUT } from './CredentialOfferUtil.spec';
|
|
4
|
+
|
|
5
|
+
describe('randomBytes should', () => {
|
|
6
|
+
it(
|
|
7
|
+
'generate random bytes of length 32',
|
|
8
|
+
() => {
|
|
9
|
+
const bytes = randomBytes(32);
|
|
10
|
+
expect(bytes).toBeDefined();
|
|
11
|
+
expect(bytes.length).toEqual(32);
|
|
12
|
+
},
|
|
13
|
+
UNIT_TEST_TIMEOUT,
|
|
14
|
+
);
|
|
15
|
+
});
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { AuthorizationResponse } from '../types';
|
|
2
|
-
|
|
3
|
-
import { convertURIToJsonObject } from './Encoding';
|
|
4
|
-
|
|
5
|
-
export const toAuthorizationResponsePayload = (input: AuthorizationResponse | string): AuthorizationResponse => {
|
|
6
|
-
let response = input;
|
|
7
|
-
if (typeof input === 'string') {
|
|
8
|
-
if (input.trim().startsWith('{') && input.trim().endsWith('}')) {
|
|
9
|
-
response = JSON.parse(input);
|
|
10
|
-
} else if (input.includes('?') && input.includes('code')) {
|
|
11
|
-
response = convertURIToJsonObject(input) as AuthorizationResponse;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
if (response && typeof response !== 'string') {
|
|
15
|
-
return response;
|
|
16
|
-
}
|
|
17
|
-
throw Error(`Could not create authorization response from the input ${input}`);
|
|
18
|
-
};
|
|
1
|
+
import { AuthorizationResponse } from '../types';
|
|
2
|
+
|
|
3
|
+
import { convertURIToJsonObject } from './Encoding';
|
|
4
|
+
|
|
5
|
+
export const toAuthorizationResponsePayload = (input: AuthorizationResponse | string): AuthorizationResponse => {
|
|
6
|
+
let response = input;
|
|
7
|
+
if (typeof input === 'string') {
|
|
8
|
+
if (input.trim().startsWith('{') && input.trim().endsWith('}')) {
|
|
9
|
+
response = JSON.parse(input);
|
|
10
|
+
} else if (input.includes('?') && input.includes('code')) {
|
|
11
|
+
response = convertURIToJsonObject(input) as AuthorizationResponse;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
if (response && typeof response !== 'string') {
|
|
15
|
+
return response;
|
|
16
|
+
}
|
|
17
|
+
throw Error(`Could not create authorization response from the input ${input}`);
|
|
18
|
+
};
|