@sphereon/ssi-sdk.oid4vci-holder 0.34.1-feat.SSISDK.35.63 → 0.34.1-feat.SSISDK.55.243

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sphereon/ssi-sdk.oid4vci-holder",
3
- "version": "0.34.1-feat.SSISDK.35.63+2245b8dc",
3
+ "version": "0.34.1-feat.SSISDK.55.243+668150e4",
4
4
  "source": "src/index.ts",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -26,27 +26,27 @@
26
26
  "build": "tsup --config ../../tsup.config.ts --tsconfig ../../tsconfig.tsup.json"
27
27
  },
28
28
  "dependencies": {
29
- "@sphereon/did-auth-siop": "0.19.1-feature.SSISDK.13.32",
29
+ "@sphereon/did-auth-siop": "0.19.1-feature.DIIPv4.175",
30
30
  "@sphereon/kmp-mdoc-core": "0.2.0-SNAPSHOT.26",
31
- "@sphereon/oid4vci-client": "0.19.1-feature.SSISDK.13.32",
32
- "@sphereon/oid4vci-common": "0.19.1-feature.SSISDK.13.32",
33
- "@sphereon/ssi-sdk-ext.did-utils": "0.34.1-feat.SSISDK.35.63+2245b8dc",
34
- "@sphereon/ssi-sdk-ext.identifier-resolution": "0.34.1-feat.SSISDK.35.63+2245b8dc",
35
- "@sphereon/ssi-sdk-ext.jwt-service": "0.34.1-feat.SSISDK.35.63+2245b8dc",
36
- "@sphereon/ssi-sdk-ext.key-utils": "0.34.1-feat.SSISDK.35.63+2245b8dc",
37
- "@sphereon/ssi-sdk.contact-manager": "0.34.1-feat.SSISDK.35.63+2245b8dc",
38
- "@sphereon/ssi-sdk.core": "0.34.1-feat.SSISDK.35.63+2245b8dc",
39
- "@sphereon/ssi-sdk.credential-store": "0.34.1-feat.SSISDK.35.63+2245b8dc",
40
- "@sphereon/ssi-sdk.credential-validation": "0.34.1-feat.SSISDK.35.63+2245b8dc",
41
- "@sphereon/ssi-sdk.data-store": "0.34.1-feat.SSISDK.35.63+2245b8dc",
42
- "@sphereon/ssi-sdk.issuance-branding": "0.34.1-feat.SSISDK.35.63+2245b8dc",
43
- "@sphereon/ssi-sdk.mdl-mdoc": "0.34.1-feat.SSISDK.35.63+2245b8dc",
44
- "@sphereon/ssi-sdk.oidf-client": "0.34.1-feat.SSISDK.35.63+2245b8dc",
45
- "@sphereon/ssi-sdk.sd-jwt": "0.34.1-feat.SSISDK.35.63+2245b8dc",
46
- "@sphereon/ssi-sdk.siopv2-oid4vp-common": "0.34.1-feat.SSISDK.35.63+2245b8dc",
47
- "@sphereon/ssi-sdk.siopv2-oid4vp-op-auth": "0.34.1-feat.SSISDK.35.63+2245b8dc",
48
- "@sphereon/ssi-sdk.xstate-machine-persistence": "0.34.1-feat.SSISDK.35.63+2245b8dc",
49
- "@sphereon/ssi-types": "0.34.1-feat.SSISDK.35.63+2245b8dc",
31
+ "@sphereon/oid4vci-client": "0.19.1-feature.DIIPv4.175",
32
+ "@sphereon/oid4vci-common": "0.19.1-feature.DIIPv4.175",
33
+ "@sphereon/ssi-sdk-ext.did-utils": "0.34.1-feat.SSISDK.55.243+668150e4",
34
+ "@sphereon/ssi-sdk-ext.identifier-resolution": "0.34.1-feat.SSISDK.55.243+668150e4",
35
+ "@sphereon/ssi-sdk-ext.jwt-service": "0.34.1-feat.SSISDK.55.243+668150e4",
36
+ "@sphereon/ssi-sdk-ext.key-utils": "0.34.1-feat.SSISDK.55.243+668150e4",
37
+ "@sphereon/ssi-sdk.contact-manager": "0.34.1-feat.SSISDK.55.243+668150e4",
38
+ "@sphereon/ssi-sdk.core": "0.34.1-feat.SSISDK.55.243+668150e4",
39
+ "@sphereon/ssi-sdk.credential-store": "0.34.1-feat.SSISDK.55.243+668150e4",
40
+ "@sphereon/ssi-sdk.credential-validation": "0.34.1-feat.SSISDK.55.243+668150e4",
41
+ "@sphereon/ssi-sdk.data-store-types": "0.34.1-feat.SSISDK.55.243+668150e4",
42
+ "@sphereon/ssi-sdk.issuance-branding": "0.34.1-feat.SSISDK.55.243+668150e4",
43
+ "@sphereon/ssi-sdk.mdl-mdoc": "0.34.1-feat.SSISDK.55.243+668150e4",
44
+ "@sphereon/ssi-sdk.oidf-client": "0.34.1-feat.SSISDK.55.243+668150e4",
45
+ "@sphereon/ssi-sdk.sd-jwt": "0.34.1-feat.SSISDK.55.243+668150e4",
46
+ "@sphereon/ssi-sdk.siopv2-oid4vp-common": "0.34.1-feat.SSISDK.55.243+668150e4",
47
+ "@sphereon/ssi-sdk.siopv2-oid4vp-op-auth": "0.34.1-feat.SSISDK.55.243+668150e4",
48
+ "@sphereon/ssi-sdk.xstate-machine-persistence": "0.34.1-feat.SSISDK.55.243+668150e4",
49
+ "@sphereon/ssi-types": "0.34.1-feat.SSISDK.55.243+668150e4",
50
50
  "@veramo/core": "4.2.0",
51
51
  "@veramo/data-store": "4.2.0",
52
52
  "@veramo/utils": "4.2.0",
@@ -59,8 +59,8 @@
59
59
  "xstate": "^4.38.3"
60
60
  },
61
61
  "devDependencies": {
62
- "@sphereon/oid4vc-common": "0.19.1-feature.SSISDK.13.32",
63
- "@sphereon/ssi-sdk-ext.did-resolver-jwk": "0.34.1-feat.SSISDK.35.63+2245b8dc",
62
+ "@sphereon/oid4vc-common": "0.19.1-feature.DIIPv4.175",
63
+ "@sphereon/ssi-sdk-ext.did-resolver-jwk": "0.34.1-feat.SSISDK.55.243+668150e4",
64
64
  "@sphereon/ssi-sdk.siopv2-oid4vp-common": "workspace:*",
65
65
  "@types/i18n-js": "^3.8.9",
66
66
  "@types/lodash.memoize": "^4.1.9",
@@ -90,5 +90,5 @@
90
90
  "OID4VCI",
91
91
  "State Machine"
92
92
  ],
93
- "gitHead": "2245b8dcad9012c87106493be9d8db2f5c04bdbf"
93
+ "gitHead": "668150e41a23897fd89a05a1971eaeb345f71737"
94
94
  }
@@ -9,8 +9,6 @@ import {
9
9
  CredentialOfferRequestWithBaseUrl,
10
10
  DefaultURISchemes,
11
11
  EndpointMetadataResult,
12
- getTypesFromAuthorizationDetails,
13
- getTypesFromCredentialOffer,
14
12
  getTypesFromObject,
15
13
  Jwt,
16
14
  NotificationRequest,
@@ -31,12 +29,11 @@ import {
31
29
  import { IJwtService, JwsHeader } from '@sphereon/ssi-sdk-ext.jwt-service'
32
30
  import { signatureAlgorithmFromKey } from '@sphereon/ssi-sdk-ext.key-utils'
33
31
  import { defaultHasher } from '@sphereon/ssi-sdk.core'
32
+ import { ensureRawDocument } from '@sphereon/ssi-sdk.data-store-types'
34
33
  import {
35
34
  ConnectionType,
36
35
  CorrelationIdentifierType,
37
36
  CredentialCorrelationType,
38
- CredentialRole,
39
- ensureRawDocument,
40
37
  FindPartyArgs,
41
38
  IBasicCredentialLocaleBranding,
42
39
  IBasicIssuerLocaleBranding,
@@ -45,17 +42,17 @@ import {
45
42
  IIssuerLocaleBranding,
46
43
  NonPersistedIdentity,
47
44
  Party,
48
- } from '@sphereon/ssi-sdk.data-store'
45
+ } from '@sphereon/ssi-sdk.data-store-types'
49
46
  import {
50
47
  CredentialMapper,
51
48
  type CredentialProofFormat,
49
+ CredentialRole,
52
50
  HasherSync,
53
51
  IVerifiableCredential,
54
52
  JoseSignatureAlgorithm,
55
53
  JoseSignatureAlgorithmString,
56
54
  JwtDecodedVerifiableCredential,
57
55
  Loggers,
58
- OriginalVerifiableCredential,
59
56
  parseDid,
60
57
  SdJwtDecodedVerifiableCredentialPayload,
61
58
  WrappedW3CVerifiableCredential,
@@ -71,10 +68,12 @@ import {
71
68
  W3CVerifiableCredential,
72
69
  } from '@veramo/core'
73
70
  import { asArray, computeEntryHash } from '@veramo/utils'
71
+ import fetch from 'cross-fetch'
74
72
  import { decodeJWT } from 'did-jwt'
75
73
  import { v4 as uuidv4 } from 'uuid'
76
74
  import { OID4VCIMachine } from '../machines/oid4vciMachine'
77
75
  import {
76
+ extractCredentialFromResponse,
78
77
  getBasicIssuerLocaleBranding,
79
78
  getCredentialBranding,
80
79
  getCredentialConfigsSupportedMerged,
@@ -85,7 +84,6 @@ import {
85
84
  startFirstPartApplicationMachine,
86
85
  verifyCredentialToAccept,
87
86
  } from '../services/OID4VCIHolderService'
88
- import 'cross-fetch/polyfill'
89
87
  import {
90
88
  AddContactIdentityArgs,
91
89
  AssertValidCredentialsArgs,
@@ -229,7 +227,7 @@ export class OID4VCIHolder implements IAgentPlugin {
229
227
  oid4vciHolderStoreIssuerBranding: this.oid4vciHolderStoreIssuerBranding.bind(this),
230
228
  }
231
229
 
232
- private readonly vcFormatPreferences: Array<string> = ['dc+sd-jwt', 'vc+sd-jwt', 'mso_mdoc', 'jwt_vc_json', 'jwt_vc', 'ldp_vc']
230
+ private readonly vcFormatPreferences: Array<string> = ['dc+sd-jwt', 'vc+sd-jwt', 'mso_mdoc', 'jwt_vc_json', 'jwt_vc', 'ldp_vc'] // TODO see SSISDK-52 concerning vc+sd-jwt
233
231
  private readonly jsonldCryptographicSuitePreferences: Array<string> = [
234
232
  'Ed25519Signature2018',
235
233
  'EcdsaSecp256k1Signature2019',
@@ -400,7 +398,6 @@ export class OID4VCIHolder implements IAgentPlugin {
400
398
  formats = Array.from(new Set(authFormats))
401
399
  }
402
400
  let oid4vciClient: OpenID4VCIClient
403
- let types: string[][] | undefined = undefined
404
401
  let offer: CredentialOfferRequestWithBaseUrl | undefined
405
402
  if (requestData.existingClientState) {
406
403
  oid4vciClient = await OpenID4VCIClient.fromState({ state: requestData.existingClientState })
@@ -442,20 +439,23 @@ export class OID4VCIHolder implements IAgentPlugin {
442
439
  }
443
440
  }
444
441
 
442
+ let configurationIds: Array<string> = []
445
443
  if (offer) {
446
- types = getTypesFromCredentialOffer(offer.original_credential_offer)
444
+ configurationIds = offer.original_credential_offer.credential_configuration_ids
447
445
  } else {
448
- types = asArray(authorizationRequestOpts.authorizationDetails)
449
- .map((authReqOpts) => getTypesFromAuthorizationDetails(authReqOpts) ?? [])
450
- .filter((inner) => inner.length > 0)
446
+ configurationIds = asArray(authorizationRequestOpts.authorizationDetails)
447
+ .filter((authDetails): authDetails is Exclude<AuthorizationDetails, string> => typeof authDetails !== 'string')
448
+ .map((authReqOpts) => authReqOpts.credential_configuration_id)
449
+ .filter((id): id is string => !!id)
451
450
  }
452
451
 
453
- const serverMetadata = await oid4vciClient.retrieveServerMetadata()
454
452
  const credentialsSupported = await getCredentialConfigsSupportedMerged({
455
453
  client: oid4vciClient,
456
454
  vcFormatPreferences: formats,
457
- types,
455
+ configurationIds,
458
456
  })
457
+
458
+ const serverMetadata = await oid4vciClient.retrieveServerMetadata()
459
459
  const credentialBranding = await getCredentialBranding({ credentialsSupported, context })
460
460
  const authorizationCodeURL = oid4vciClient.authorizationURL
461
461
  if (authorizationCodeURL) {
@@ -939,21 +939,8 @@ export class OID4VCIHolder implements IAgentPlugin {
939
939
  ? 'credential_accepted_holder_signed'
940
940
  : 'credential_deleted_holder_signed'
941
941
  logger.log(`Subject issuance/signing will be used, with event`, event)
942
- const credentialResponse = mappedCredentialToAccept.credentialToAccept.credentialResponse
943
- let issuerVC
944
- if ('credential' in credentialResponse) {
945
- issuerVC = credentialResponse.credential as OriginalVerifiableCredential
946
- } else if (
947
- 'credentials' in credentialResponse &&
948
- credentialResponse.credentials &&
949
- Array.isArray(credentialResponse.credentials) &&
950
- credentialResponse.credentials.length > 0
951
- ) {
952
- issuerVC = credentialResponse.credentials[0].credential as OriginalVerifiableCredential // FIXME SSISDK-13
953
- }
954
- if (!issuerVC) {
955
- return Promise.reject(Error('No credential found in credential response'))
956
- }
942
+
943
+ const issuerVC = extractCredentialFromResponse(mappedCredentialToAccept.credentialToAccept.credentialResponse)
957
944
  const wrappedIssuerVC = CredentialMapper.toWrappedVerifiableCredential(issuerVC, { hasher: this.hasher ?? defaultHasher })
958
945
  console.log(`Wrapped VC: ${wrappedIssuerVC.type}, ${wrappedIssuerVC.format}`)
959
946
  // We will use the subject of the VCI Issuer (the holder, as the issuer of the new credential, so the below is not a mistake!)
@@ -1,6 +1,6 @@
1
1
  import { assign, createMachine, DoneInvokeEvent, interpret } from 'xstate'
2
2
  import { AuthorizationChallengeCodeResponse, AuthorizationChallengeError, AuthorizationChallengeErrorResponse } from '@sphereon/oid4vci-common'
3
- import { DidAuthConfig } from '@sphereon/ssi-sdk.data-store'
3
+ import { DidAuthConfig } from '@sphereon/ssi-sdk.data-store-types'
4
4
  import { CreateConfigResult } from '@sphereon/ssi-sdk.siopv2-oid4vp-op-auth'
5
5
  import { createConfig, getSiopRequest, sendAuthorizationChallengeRequest, sendAuthorizationResponse } from '../services/FirstPartyMachineServices'
6
6
  import { translate } from '../localization/Localization'
@@ -1,5 +1,5 @@
1
1
  import { AuthorizationChallengeCodeResponse, AuthzFlowType, toAuthorizationResponsePayload } from '@sphereon/oid4vci-common'
2
- import { IBasicIssuerLocaleBranding, Identity, IIssuerLocaleBranding, Party } from '@sphereon/ssi-sdk.data-store'
2
+ import { IBasicIssuerLocaleBranding, Identity, IIssuerLocaleBranding, Party } from '@sphereon/ssi-sdk.data-store-types'
3
3
  import { assign, createMachine, DoneInvokeEvent, interpret } from 'xstate'
4
4
  import { translate } from '../localization/Localization'
5
5
  import {
@@ -1,5 +1,5 @@
1
1
  import { CredentialsSupportedDisplay, NameAndLocale } from '@sphereon/oid4vci-common'
2
- import { IBasicCredentialClaim, IBasicCredentialLocaleBranding, IBasicIssuerLocaleBranding } from '@sphereon/ssi-sdk.data-store'
2
+ import { IBasicCredentialClaim, IBasicCredentialLocaleBranding, IBasicIssuerLocaleBranding } from '@sphereon/ssi-sdk.data-store-types'
3
3
  import { SdJwtClaimDisplayMetadata, SdJwtClaimMetadata, SdJwtClaimPath, SdJwtTypeDisplayMetadata } from '@sphereon/ssi-types'
4
4
  import {
5
5
  IssuerLocaleBrandingFromArgs,
@@ -1,16 +1,15 @@
1
1
  import { LOG } from '@sphereon/oid4vci-client'
2
2
  import {
3
+ AuthorizationChallengeCodeResponse,
3
4
  CredentialConfigurationSupported,
4
- CredentialSupportedSdJwtVc,
5
5
  CredentialConfigurationSupportedSdJwtVcV1_0_15,
6
- CredentialOfferFormatV1_0_11,
7
6
  CredentialResponse,
7
+ CredentialResponseV1_0_15,
8
+ CredentialSupportedSdJwtVc,
8
9
  getSupportedCredentials,
9
10
  getTypesFromCredentialSupported,
10
11
  getTypesFromObject,
11
12
  MetadataDisplay,
12
- OpenId4VCIVersion,
13
- AuthorizationChallengeCodeResponse,
14
13
  } from '@sphereon/oid4vci-common'
15
14
  import { KeyUse } from '@sphereon/ssi-sdk-ext.did-resolver-jwk'
16
15
  import { getOrCreatePrimaryIdentifier, SupportedDidMethodEnum } from '@sphereon/ssi-sdk-ext.did-utils'
@@ -23,7 +22,8 @@ import {
23
22
  managedIdentifierToJwk,
24
23
  } from '@sphereon/ssi-sdk-ext.identifier-resolution'
25
24
  import { keyTypeFromCryptographicSuite } from '@sphereon/ssi-sdk-ext.key-utils'
26
- import { IBasicCredentialLocaleBranding, IBasicIssuerLocaleBranding } from '@sphereon/ssi-sdk.data-store'
25
+ import { defaultHasher } from '@sphereon/ssi-sdk.core'
26
+ import { IBasicCredentialLocaleBranding, IBasicIssuerLocaleBranding } from '@sphereon/ssi-sdk.data-store-types'
27
27
  import {
28
28
  CredentialMapper,
29
29
  Hasher,
@@ -40,8 +40,12 @@ import {
40
40
  } from '@sphereon/ssi-types'
41
41
  import { asArray } from '@veramo/utils'
42
42
  import { translate } from '../localization/Localization'
43
+ import { FirstPartyMachine } from '../machines/firstPartyMachine'
44
+ import { issuerLocaleBrandingFrom, oid4vciGetCredentialBrandingFrom, sdJwtGetCredentialBrandingFrom } from '../mappers/OIDC4VCIBrandingMapper'
45
+ import { FirstPartyMachineState, FirstPartyMachineStateTypes } from '../types/FirstPartyMachine'
43
46
  import {
44
47
  DidAgents,
48
+ GetBasicIssuerLocaleBrandingArgs,
45
49
  GetCredentialBrandingArgs,
46
50
  GetCredentialConfigsSupportedArgs,
47
51
  GetCredentialConfigsSupportedBySingleTypeOrIdArgs,
@@ -49,22 +53,17 @@ import {
49
53
  GetIssuanceCryptoSuiteArgs,
50
54
  GetIssuanceDidMethodArgs,
51
55
  GetIssuanceOptsArgs,
52
- GetBasicIssuerLocaleBrandingArgs,
53
56
  GetPreferredCredentialFormatsArgs,
54
57
  IssuanceOpts,
55
58
  MapCredentialToAcceptArgs,
56
59
  MappedCredentialToAccept,
57
60
  OID4VCIHolderEvent,
61
+ RequiredContext,
58
62
  SelectAppLocaleBrandingArgs,
63
+ StartFirstPartApplicationMachine,
59
64
  VerificationResult,
60
65
  VerifyCredentialToAcceptArgs,
61
- StartFirstPartApplicationMachine,
62
- RequiredContext,
63
66
  } from '../types/IOID4VCIHolder'
64
- import { oid4vciGetCredentialBrandingFrom, sdJwtGetCredentialBrandingFrom, issuerLocaleBrandingFrom } from '../mappers/OIDC4VCIBrandingMapper'
65
- import { FirstPartyMachine } from '../machines/firstPartyMachine'
66
- import { FirstPartyMachineState, FirstPartyMachineStateTypes } from '../types/FirstPartyMachine'
67
- import { defaultHasher } from '@sphereon/ssi-sdk.core'
68
67
 
69
68
  export const getCredentialBranding = async (args: GetCredentialBrandingArgs): Promise<Record<string, Array<IBasicCredentialLocaleBranding>>> => {
70
69
  const { credentialsSupported, context } = args
@@ -153,21 +152,7 @@ export const selectCredentialLocaleBranding = async (
153
152
  export const verifyCredentialToAccept = async (args: VerifyCredentialToAcceptArgs): Promise<VerificationResult> => {
154
153
  const { mappedCredential, hasher, onVerifyEBSICredentialIssuer, schemaValidation, context } = args
155
154
 
156
- const credentialResponse = mappedCredential.credentialToAccept.credentialResponse
157
- let credential
158
- if ('credential' in credentialResponse) {
159
- credential = credentialResponse.credential as OriginalVerifiableCredential
160
- } else if (
161
- 'credentials' in credentialResponse &&
162
- credentialResponse.credentials &&
163
- Array.isArray(credentialResponse.credentials) &&
164
- credentialResponse.credentials.length > 0
165
- ) {
166
- credential = credentialResponse.credentials[0].credential as OriginalVerifiableCredential // FIXME SSISDK-13 (no multi-credential support yet)
167
- }
168
- if (!credential) {
169
- return Promise.reject(Error('No credential found in credential response'))
170
- }
155
+ const credential = extractCredentialFromResponse(mappedCredential.credentialToAccept.credentialResponse)
171
156
 
172
157
  const wrappedVC = CredentialMapper.toWrappedVerifiableCredential(credential, { hasher: hasher ?? defaultHasher })
173
158
  if (
@@ -216,21 +201,7 @@ export const verifyCredentialToAccept = async (args: VerifyCredentialToAcceptArg
216
201
  export const mapCredentialToAccept = async (args: MapCredentialToAcceptArgs): Promise<MappedCredentialToAccept> => {
217
202
  const { credentialToAccept, hasher } = args
218
203
 
219
- const credentialResponse: CredentialResponse = credentialToAccept.credentialResponse
220
- let verifiableCredential: W3CVerifiableCredential | undefined
221
- if ('credential' in credentialResponse) {
222
- verifiableCredential = credentialResponse.credential
223
- } else if (
224
- 'credentials' in credentialResponse &&
225
- credentialResponse.credentials &&
226
- Array.isArray(credentialResponse.credentials) &&
227
- credentialResponse.credentials.length > 0
228
- ) {
229
- verifiableCredential = credentialResponse.credentials[0].credential // FIXME SSISDK-13 (no multi-credential support yet)
230
- }
231
- if (!verifiableCredential) {
232
- return Promise.reject(Error('No credential found in credential response'))
233
- }
204
+ const verifiableCredential = extractCredentialFromResponse(credentialToAccept.credentialResponse) as W3CVerifiableCredential
234
205
 
235
206
  const wrappedVerifiableCredential: WrappedVerifiableCredential = CredentialMapper.toWrappedVerifiableCredential(
236
207
  verifiableCredential as OriginalVerifiableCredential,
@@ -261,6 +232,7 @@ export const mapCredentialToAccept = async (args: MapCredentialToAcceptArgs): Pr
261
232
  ? uniformVerifiableCredential.decodedPayload.iss
262
233
  : uniformVerifiableCredential.issuer.id
263
234
 
235
+ const credentialResponse = credentialToAccept.credentialResponse as CredentialResponseV1_0_15
264
236
  return {
265
237
  correlationId,
266
238
  credentialToAccept,
@@ -271,6 +243,27 @@ export const mapCredentialToAccept = async (args: MapCredentialToAcceptArgs): Pr
271
243
  }
272
244
  }
273
245
 
246
+ export const extractCredentialFromResponse = (credentialResponse: CredentialResponse): OriginalVerifiableCredential => {
247
+ let credential: OriginalVerifiableCredential | undefined
248
+
249
+ if ('credential' in credentialResponse) {
250
+ credential = credentialResponse.credential as OriginalVerifiableCredential
251
+ } else if (
252
+ 'credentials' in credentialResponse &&
253
+ credentialResponse.credentials &&
254
+ Array.isArray(credentialResponse.credentials) &&
255
+ credentialResponse.credentials.length > 0
256
+ ) {
257
+ credential = credentialResponse.credentials[0].credential as OriginalVerifiableCredential // FIXME SSISDK-13 (no multi-credential support yet)
258
+ }
259
+
260
+ if (!credential) {
261
+ throw new Error('No credential found in credential response')
262
+ }
263
+
264
+ return credential
265
+ }
266
+
274
267
  export const getIdentifierOpts = async (args: GetIdentifierArgs): Promise<ManagedIdentifierResult> => {
275
268
  const { issuanceOpt, context } = args
276
269
  const { identifier: identifierArg } = issuanceOpt
@@ -391,7 +384,7 @@ export const getCredentialConfigsSupportedBySingleTypeOrId = async (
391
384
  }
392
385
 
393
386
  if (configurationId) {
394
- const allSupported = client.getCredentialsSupported(false)
387
+ const allSupported = client.getCredentialsSupported(format)
395
388
  return Object.fromEntries(
396
389
  Object.entries(allSupported).filter(
397
390
  ([id, supported]) => id === configurationId || supported.id === configurationId || createIdFromTypes(supported) === configurationId,
@@ -399,29 +392,15 @@ export const getCredentialConfigsSupportedBySingleTypeOrId = async (
399
392
  )
400
393
  }
401
394
 
402
- if (!types && !client.credentialOffer) {
403
- return Promise.reject(Error('openID4VCIClient has no credentialOffer and no types where provided'))
404
- /*} else if (!format && !client.credentialOffer) {
405
- return Promise.reject(Error('openID4VCIClient has no credentialOffer and no formats where provided'))*/
395
+ if (!client.credentialOffer) {
396
+ return Promise.reject(Error('openID4VCIClient has no credentialOffer'))
406
397
  }
407
- // We should always have a credential offer at this point given the above
408
- if (!Array.isArray(format) && client.credentialOffer) {
409
- if (
410
- client.version() > OpenId4VCIVersion.VER_1_0_09 &&
411
- typeof client.credentialOffer.credential_offer === 'object' &&
412
- 'credentials' in client.credentialOffer.credential_offer
413
- ) {
414
- format = client.credentialOffer.credential_offer.credentials
415
- .filter((cred: CredentialOfferFormatV1_0_11 | string) => typeof cred !== 'string')
416
- .map((cred: CredentialOfferFormatV1_0_11 | string) => (cred as CredentialOfferFormatV1_0_11).format)
417
- if (format?.length === 0) {
418
- format = undefined // Otherwise we would match nothing
419
- }
420
- }
398
+ if (!types) {
399
+ return Promise.reject(Error('openID4VCIClient has no types'))
421
400
  }
422
401
 
423
402
  const offerSupported = getSupportedCredentials({
424
- types: types ? [types] : client.getCredentialOfferTypes(),
403
+ types: [types],
425
404
  format,
426
405
  version: client.version(),
427
406
  issuerMetadata: client.endpointMetadata.credentialIssuerMetadata,
@@ -601,7 +580,7 @@ export const getIssuanceCryptoSuite = async (opts: GetIssuanceCryptoSuiteArgs):
601
580
  case 'jwt':
602
581
  case 'jwt_vc_json':
603
582
  case 'jwt_vc':
604
- case 'vc+sd-jwt':
583
+ //case 'vc+sd-jwt': // TODO see SSISDK-52 concerning vc+sd-jwt
605
584
  case 'dc+sd-jwt':
606
585
  case 'mso_mdoc': {
607
586
  const supportedPreferences: Array<JoseSignatureAlgorithm | JoseSignatureAlgorithmString> = jwtCryptographicSuitePreferences.filter(
@@ -1,12 +1,12 @@
1
- import { BaseActionObject, Interpreter, ResolveTypegenMeta, ServiceMap, State, StateMachine, StatesConfig, TypegenDisabled } from 'xstate'
1
+ import { RPRegistrationMetadataPayload } from '@sphereon/did-auth-siop'
2
2
  import { OpenID4VCIClientState } from '@sphereon/oid4vci-client'
3
- import { DidAuthConfig, Party } from '@sphereon/ssi-sdk.data-store'
4
- import { PresentationDefinitionWithLocation, RPRegistrationMetadataPayload } from '@sphereon/did-auth-siop'
5
- import { UniqueDigitalCredential } from '@sphereon/ssi-sdk.credential-store'
6
3
  import { AuthorizationChallengeCodeResponse } from '@sphereon/oid4vci-common'
4
+ import { UniqueDigitalCredential } from '@sphereon/ssi-sdk.credential-store'
5
+ import { DidAuthConfig, Party } from '@sphereon/ssi-sdk.data-store-types'
7
6
  import { IIdentifier } from '@veramo/core'
8
- import { ErrorDetails, RequiredContext } from './IOID4VCIHolder'
9
7
  import { DcqlQuery } from 'dcql'
8
+ import { BaseActionObject, Interpreter, ResolveTypegenMeta, ServiceMap, State, StateMachine, StatesConfig, TypegenDisabled } from 'xstate'
9
+ import { ErrorDetails, RequiredContext } from './IOID4VCIHolder'
10
10
 
11
11
  export enum FirstPartyMachineStateTypes {
12
12
  sendAuthorizationChallengeRequest = 'sendAuthorizationChallengeRequest',
@@ -150,7 +150,6 @@ export type SiopV2AuthorizationRequestData = {
150
150
  clientIdScheme?: string
151
151
  clientId?: string
152
152
  entityId?: string
153
- presentationDefinitions?: PresentationDefinitionWithLocation[]
154
153
  dcqlQuery: DcqlQuery
155
154
  }
156
155
 
@@ -34,7 +34,7 @@ import {
34
34
  Identity,
35
35
  IIssuerLocaleBranding,
36
36
  Party,
37
- } from '@sphereon/ssi-sdk.data-store'
37
+ } from '@sphereon/ssi-sdk.data-store-types'
38
38
  import { IIssuanceBranding } from '@sphereon/ssi-sdk.issuance-branding'
39
39
  import { ImDLMdoc } from '@sphereon/ssi-sdk.mdl-mdoc'
40
40
  import { ISDJwtPlugin } from '@sphereon/ssi-sdk.sd-jwt'
@@ -503,7 +503,7 @@ export type CredentialToAccept = {
503
503
  id?: string
504
504
  types: string[]
505
505
  issuanceOpt: IssuanceOpts
506
- credentialResponse: CredentialResponseV1_0_15 | CredentialResponse // FIXME SSISDK-13
506
+ credentialResponse: CredentialResponseV1_0_15 | CredentialResponse
507
507
  }
508
508
 
509
509
  export type GetCredentialConfigsSupportedArgs = {