@sphereon/ssi-sdk.oid4vci-holder 0.34.1-next.7 → 0.34.1-next.85

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-next.7+abc1dfeb",
3
+ "version": "0.34.1-next.85+019802c5",
4
4
  "source": "src/index.ts",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -26,40 +26,41 @@
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-next.2",
29
+ "@sphereon/did-auth-siop": "0.19.1-feature.SSISDK.45.86",
30
30
  "@sphereon/kmp-mdoc-core": "0.2.0-SNAPSHOT.26",
31
- "@sphereon/oid4vci-client": "0.19.1-next.2",
32
- "@sphereon/oid4vci-common": "0.19.1-next.2",
33
- "@sphereon/ssi-sdk-ext.did-utils": "0.29.1-next.3",
34
- "@sphereon/ssi-sdk-ext.identifier-resolution": "0.29.1-next.3",
35
- "@sphereon/ssi-sdk-ext.jwt-service": "0.29.1-next.3",
36
- "@sphereon/ssi-sdk-ext.key-utils": "0.29.1-next.3",
37
- "@sphereon/ssi-sdk.contact-manager": "0.34.1-next.7+abc1dfeb",
38
- "@sphereon/ssi-sdk.core": "0.34.1-next.7+abc1dfeb",
39
- "@sphereon/ssi-sdk.credential-store": "0.34.1-next.7+abc1dfeb",
40
- "@sphereon/ssi-sdk.credential-validation": "0.34.1-next.7+abc1dfeb",
41
- "@sphereon/ssi-sdk.data-store": "0.34.1-next.7+abc1dfeb",
42
- "@sphereon/ssi-sdk.issuance-branding": "0.34.1-next.7+abc1dfeb",
43
- "@sphereon/ssi-sdk.mdl-mdoc": "0.34.1-next.7+abc1dfeb",
44
- "@sphereon/ssi-sdk.oidf-client": "0.34.1-next.7+abc1dfeb",
45
- "@sphereon/ssi-sdk.sd-jwt": "0.34.1-next.7+abc1dfeb",
46
- "@sphereon/ssi-sdk.siopv2-oid4vp-common": "0.34.1-next.7+abc1dfeb",
47
- "@sphereon/ssi-sdk.siopv2-oid4vp-op-auth": "0.34.1-next.7+abc1dfeb",
48
- "@sphereon/ssi-sdk.xstate-machine-persistence": "0.34.1-next.7+abc1dfeb",
49
- "@sphereon/ssi-types": "0.34.1-next.7+abc1dfeb",
31
+ "@sphereon/oid4vci-client": "0.19.1-feature.SSISDK.45.86",
32
+ "@sphereon/oid4vci-common": "0.19.1-feature.SSISDK.45.86",
33
+ "@sphereon/ssi-sdk-ext.did-utils": "0.34.1-next.85+019802c5",
34
+ "@sphereon/ssi-sdk-ext.identifier-resolution": "0.34.1-next.85+019802c5",
35
+ "@sphereon/ssi-sdk-ext.jwt-service": "0.34.1-next.85+019802c5",
36
+ "@sphereon/ssi-sdk-ext.key-utils": "0.34.1-next.85+019802c5",
37
+ "@sphereon/ssi-sdk.contact-manager": "0.34.1-next.85+019802c5",
38
+ "@sphereon/ssi-sdk.core": "0.34.1-next.85+019802c5",
39
+ "@sphereon/ssi-sdk.credential-store": "0.34.1-next.85+019802c5",
40
+ "@sphereon/ssi-sdk.credential-validation": "0.34.1-next.85+019802c5",
41
+ "@sphereon/ssi-sdk.data-store": "0.34.1-next.85+019802c5",
42
+ "@sphereon/ssi-sdk.issuance-branding": "0.34.1-next.85+019802c5",
43
+ "@sphereon/ssi-sdk.mdl-mdoc": "0.34.1-next.85+019802c5",
44
+ "@sphereon/ssi-sdk.oidf-client": "0.34.1-next.85+019802c5",
45
+ "@sphereon/ssi-sdk.sd-jwt": "0.34.1-next.85+019802c5",
46
+ "@sphereon/ssi-sdk.siopv2-oid4vp-common": "0.34.1-next.85+019802c5",
47
+ "@sphereon/ssi-sdk.siopv2-oid4vp-op-auth": "0.34.1-next.85+019802c5",
48
+ "@sphereon/ssi-sdk.xstate-machine-persistence": "0.34.1-next.85+019802c5",
49
+ "@sphereon/ssi-types": "0.34.1-next.85+019802c5",
50
50
  "@veramo/core": "4.2.0",
51
51
  "@veramo/data-store": "4.2.0",
52
52
  "@veramo/utils": "4.2.0",
53
53
  "ajv": "^8.17.1",
54
54
  "ajv-formats": "^3.0.1",
55
+ "dcql": "1.0.1",
55
56
  "i18n-js": "^3.9.2",
56
57
  "lodash.memoize": "^4.1.2",
57
58
  "uuid": "^9.0.1",
58
59
  "xstate": "^4.38.3"
59
60
  },
60
61
  "devDependencies": {
61
- "@sphereon/oid4vc-common": "0.19.1-next.2",
62
- "@sphereon/ssi-sdk-ext.did-resolver-jwk": "0.29.1-next.3",
62
+ "@sphereon/oid4vc-common": "0.19.1-feature.SSISDK.45.86",
63
+ "@sphereon/ssi-sdk-ext.did-resolver-jwk": "0.34.1-next.85+019802c5",
63
64
  "@sphereon/ssi-sdk.siopv2-oid4vp-common": "workspace:*",
64
65
  "@types/i18n-js": "^3.8.9",
65
66
  "@types/lodash.memoize": "^4.1.9",
@@ -89,5 +90,5 @@
89
90
  "OID4VCI",
90
91
  "State Machine"
91
92
  ],
92
- "gitHead": "abc1dfebd9a53c49235573ad0a337abb248bf2f3"
93
+ "gitHead": "019802c57e9c1f9e3df4ecbb1d6a17f49e8fdbeb"
93
94
  }
@@ -4,8 +4,8 @@ import {
4
4
  AuthorizationRequestOpts,
5
5
  AuthorizationServerClientOpts,
6
6
  AuthorizationServerOpts,
7
- CredentialConfigurationSupportedJwtVcJsonLdAndLdpVcV1_0_13,
8
- CredentialDefinitionJwtVcJsonLdAndLdpVcV1_0_13,
7
+ CredentialConfigurationSupportedJwtVcJsonLdAndLdpVcV1_0_15,
8
+ CredentialDefinitionJwtVcJsonLdAndLdpVcV1_0_15,
9
9
  CredentialOfferRequestWithBaseUrl,
10
10
  DefaultURISchemes,
11
11
  EndpointMetadataResult,
@@ -30,6 +30,7 @@ import {
30
30
  } from '@sphereon/ssi-sdk-ext.identifier-resolution'
31
31
  import { IJwtService, JwsHeader } from '@sphereon/ssi-sdk-ext.jwt-service'
32
32
  import { signatureAlgorithmFromKey } from '@sphereon/ssi-sdk-ext.key-utils'
33
+ import { defaultHasher } from '@sphereon/ssi-sdk.core'
33
34
  import {
34
35
  ConnectionType,
35
36
  CorrelationIdentifierType,
@@ -73,6 +74,18 @@ import { asArray, computeEntryHash } from '@veramo/utils'
73
74
  import { decodeJWT } from 'did-jwt'
74
75
  import { v4 as uuidv4 } from 'uuid'
75
76
  import { OID4VCIMachine } from '../machines/oid4vciMachine'
77
+ import {
78
+ getBasicIssuerLocaleBranding,
79
+ getCredentialBranding,
80
+ getCredentialConfigsSupportedMerged,
81
+ getIdentifierOpts,
82
+ getIssuanceOpts,
83
+ mapCredentialToAccept,
84
+ selectCredentialLocaleBranding,
85
+ startFirstPartApplicationMachine,
86
+ verifyCredentialToAccept,
87
+ } from '../services/OID4VCIHolderService'
88
+ import 'cross-fetch/polyfill'
76
89
  import {
77
90
  AddContactIdentityArgs,
78
91
  AssertValidCredentialsArgs,
@@ -111,19 +124,6 @@ import {
111
124
  VerifyEBSICredentialIssuerArgs,
112
125
  VerifyEBSICredentialIssuerResult,
113
126
  } from '../types/IOID4VCIHolder'
114
- import {
115
- getBasicIssuerLocaleBranding,
116
- getCredentialBranding,
117
- getCredentialConfigsSupportedMerged,
118
- getIdentifierOpts,
119
- getIssuanceOpts,
120
- mapCredentialToAccept,
121
- selectCredentialLocaleBranding,
122
- startFirstPartApplicationMachine,
123
- verifyCredentialToAccept,
124
- } from '../services/OID4VCIHolderService'
125
- import 'cross-fetch/polyfill'
126
- import { defaultHasher } from '@sphereon/ssi-sdk.core'
127
127
 
128
128
  /**
129
129
  * {@inheritDoc IOID4VCIHolder}
@@ -151,7 +151,7 @@ export function signCallback(
151
151
  context: IAgentContext<IKeyManager & IDIDManager & IResolver & IIdentifierResolution & IJwtService>,
152
152
  nonce?: string,
153
153
  ) {
154
- return async (jwt: Jwt, kid?: string) => {
154
+ return async (jwt: Jwt, kid?: string, noIssPayloadUpdate?: boolean) => {
155
155
  let resolution = await context.agent.identifierManagedGet(identifier)
156
156
  const jwk = jwt.header.jwk ?? (resolution.method === 'jwk' ? resolution.jwk : undefined)
157
157
  if (!resolution.issuer && !jwt.payload.iss) {
@@ -170,7 +170,7 @@ export function signCallback(
170
170
  }
171
171
  return (
172
172
  await context.agent.jwtCreateJwsCompactSignature({
173
- issuer: { ...resolution, noIssPayloadUpdate: false },
173
+ issuer: { ...resolution, noIssPayloadUpdate: noIssPayloadUpdate ?? false },
174
174
  protectedHeader: header,
175
175
  payload,
176
176
  })
@@ -229,7 +229,7 @@ export class OID4VCIHolder implements IAgentPlugin {
229
229
  oid4vciHolderStoreIssuerBranding: this.oid4vciHolderStoreIssuerBranding.bind(this),
230
230
  }
231
231
 
232
- private readonly vcFormatPreferences: Array<string> = ['vc+sd-jwt', 'mso_mdoc', 'jwt_vc_json', 'jwt_vc', 'ldp_vc']
232
+ private readonly vcFormatPreferences: Array<string> = ['dc+sd-jwt', 'vc+sd-jwt', 'mso_mdoc', 'jwt_vc_json', 'jwt_vc', 'ldp_vc']
233
233
  private readonly jsonldCryptographicSuitePreferences: Array<string> = [
234
234
  'Ed25519Signature2018',
235
235
  'EcdsaSecp256k1Signature2019',
@@ -939,7 +939,21 @@ 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 issuerVC = mappedCredentialToAccept.credentialToAccept.credentialResponse.credential as OriginalVerifiableCredential
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 (no multi-credential support yet)
953
+ }
954
+ if (!issuerVC) {
955
+ return Promise.reject(Error('No credential found in credential response'))
956
+ }
943
957
  const wrappedIssuerVC = CredentialMapper.toWrappedVerifiableCredential(issuerVC, { hasher: this.hasher ?? defaultHasher })
944
958
  console.log(`Wrapped VC: ${wrappedIssuerVC.type}, ${wrappedIssuerVC.format}`)
945
959
  // 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!)
@@ -1169,9 +1183,9 @@ export class OID4VCIHolder implements IAgentPlugin {
1169
1183
  return undefined
1170
1184
  }
1171
1185
 
1172
- private getCredentialDefinition(issuanceOpt: IssuanceOpts): CredentialDefinitionJwtVcJsonLdAndLdpVcV1_0_13 | undefined {
1186
+ private getCredentialDefinition(issuanceOpt: IssuanceOpts): CredentialDefinitionJwtVcJsonLdAndLdpVcV1_0_15 | undefined {
1173
1187
  if (issuanceOpt.format == 'ldp_vc' || issuanceOpt.format == 'jwt_vc_json-ld') {
1174
- return (issuanceOpt as CredentialConfigurationSupportedJwtVcJsonLdAndLdpVcV1_0_13).credential_definition
1188
+ return (issuanceOpt as CredentialConfigurationSupportedJwtVcJsonLdAndLdpVcV1_0_15).credential_definition
1175
1189
  }
1176
1190
  return undefined
1177
1191
  }
@@ -2,7 +2,7 @@ import { LOG } from '@sphereon/oid4vci-client'
2
2
  import {
3
3
  CredentialConfigurationSupported,
4
4
  CredentialSupportedSdJwtVc,
5
- CredentialConfigurationSupportedSdJwtVcV1_0_13,
5
+ CredentialConfigurationSupportedSdJwtVcV1_0_15,
6
6
  CredentialOfferFormatV1_0_11,
7
7
  CredentialResponse,
8
8
  getSupportedCredentials,
@@ -72,8 +72,8 @@ export const getCredentialBranding = async (args: GetCredentialBrandingArgs): Pr
72
72
  await Promise.all(
73
73
  Object.entries(credentialsSupported).map(async ([configId, credentialsConfigSupported]): Promise<void> => {
74
74
  let sdJwtTypeMetadata: SdJwtTypeMetadata | undefined
75
- if (credentialsConfigSupported.format === 'vc+sd-jwt') {
76
- const vct = (<CredentialSupportedSdJwtVc | CredentialConfigurationSupportedSdJwtVcV1_0_13>credentialsConfigSupported).vct
75
+ if (credentialsConfigSupported.format === 'dc+sd-jwt') {
76
+ const vct = (<CredentialSupportedSdJwtVc | CredentialConfigurationSupportedSdJwtVcV1_0_15>credentialsConfigSupported).vct
77
77
  if (vct.startsWith('http')) {
78
78
  try {
79
79
  sdJwtTypeMetadata = await context.agent.fetchSdJwtTypeMetadataFromVctUrl({ vct })
@@ -153,7 +153,18 @@ export const selectCredentialLocaleBranding = async (
153
153
  export const verifyCredentialToAccept = async (args: VerifyCredentialToAcceptArgs): Promise<VerificationResult> => {
154
154
  const { mappedCredential, hasher, onVerifyEBSICredentialIssuer, schemaValidation, context } = args
155
155
 
156
- const credential = mappedCredential.credentialToAccept.credentialResponse.credential as OriginalVerifiableCredential
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
+ }
157
168
  if (!credential) {
158
169
  return Promise.reject(Error('No credential found in credential response'))
159
170
  }
@@ -206,7 +217,17 @@ export const mapCredentialToAccept = async (args: MapCredentialToAcceptArgs): Pr
206
217
  const { credentialToAccept, hasher } = args
207
218
 
208
219
  const credentialResponse: CredentialResponse = credentialToAccept.credentialResponse
209
- const verifiableCredential: W3CVerifiableCredential | undefined = credentialResponse.credential
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
+ }
210
231
  if (!verifiableCredential) {
211
232
  return Promise.reject(Error('No credential found in credential response'))
212
233
  }
@@ -580,7 +601,8 @@ export const getIssuanceCryptoSuite = async (opts: GetIssuanceCryptoSuiteArgs):
580
601
  case 'jwt':
581
602
  case 'jwt_vc_json':
582
603
  case 'jwt_vc':
583
- case 'vc+sd-jwt':
604
+ case 'dc+sd-jwt':
605
+ case 'dc+sd-jwt':
584
606
  case 'mso_mdoc': {
585
607
  const supportedPreferences: Array<JoseSignatureAlgorithm | JoseSignatureAlgorithmString> = jwtCryptographicSuitePreferences.filter(
586
608
  (suite: JoseSignatureAlgorithm | JoseSignatureAlgorithmString) => signing_algs_supported.includes(suite),
@@ -1,11 +1,12 @@
1
1
  import { BaseActionObject, Interpreter, ResolveTypegenMeta, ServiceMap, State, StateMachine, StatesConfig, TypegenDisabled } from 'xstate'
2
2
  import { OpenID4VCIClientState } from '@sphereon/oid4vci-client'
3
3
  import { DidAuthConfig, Party } from '@sphereon/ssi-sdk.data-store'
4
- import { PresentationDefinitionWithLocation, RPRegistrationMetadataPayload } from '@sphereon/did-auth-siop'
4
+ import { RPRegistrationMetadataPayload } from '@sphereon/did-auth-siop'
5
5
  import { UniqueDigitalCredential } from '@sphereon/ssi-sdk.credential-store'
6
6
  import { AuthorizationChallengeCodeResponse } from '@sphereon/oid4vci-common'
7
7
  import { IIdentifier } from '@veramo/core'
8
8
  import { ErrorDetails, RequiredContext } from './IOID4VCIHolder'
9
+ import { DcqlQuery } from 'dcql'
9
10
 
10
11
  export enum FirstPartyMachineStateTypes {
11
12
  sendAuthorizationChallengeRequest = 'sendAuthorizationChallengeRequest',
@@ -149,7 +150,7 @@ export type SiopV2AuthorizationRequestData = {
149
150
  clientIdScheme?: string
150
151
  clientId?: string
151
152
  entityId?: string
152
- presentationDefinitions?: PresentationDefinitionWithLocation[]
153
+ dcqlQuery: DcqlQuery
153
154
  }
154
155
 
155
156
  export type FirstPartyMachineNavigationArgs = {
@@ -7,6 +7,7 @@ import {
7
7
  CredentialConfigurationSupported,
8
8
  CredentialOfferRequestWithBaseUrl,
9
9
  CredentialResponse,
10
+ CredentialResponseV1_0_15,
10
11
  CredentialsSupportedDisplay,
11
12
  EndpointMetadataResult,
12
13
  ExperimentalSubjectIssuance,
@@ -377,6 +378,7 @@ export enum OID4VCIMachineGuards {
377
378
  requirePinGuard = 'oid4vciRequirePinGuard',
378
379
  requireAuthorizationGuard = 'oid4vciRequireAuthorizationGuard',
379
380
  noAuthorizationGuard = 'oid4vciNoAuthorizationGuard',
381
+ hasNonceEndpointGuard = 'oid4vciHasNonceEndpointGuard ',
380
382
  hasAuthorizationResponse = 'oid4vciHasAuthorizationResponse',
381
383
  hasNoContactIdentityGuard = 'oid4vciHasNoContactIdentityGuard',
382
384
  verificationCodeGuard = 'oid4vciVerificationCodeGuard',
@@ -501,7 +503,7 @@ export type CredentialToAccept = {
501
503
  id?: string
502
504
  types: string[]
503
505
  issuanceOpt: IssuanceOpts
504
- credentialResponse: CredentialResponse
506
+ credentialResponse: CredentialResponseV1_0_15 | CredentialResponse
505
507
  }
506
508
 
507
509
  export type GetCredentialConfigsSupportedArgs = {