@sphereon/ssi-sdk.oid4vci-holder 0.34.1-feature.SSISDK.82.linkedVP.328 → 0.34.1-feature.SSISDK.82.linkedVP.341

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-feature.SSISDK.82.linkedVP.328+20af9c29",
3
+ "version": "0.34.1-feature.SSISDK.82.linkedVP.341+483672e1",
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-next.226",
29
+ "@sphereon/did-auth-siop": "0.19.1-next.234",
30
30
  "@sphereon/kmp-mdoc-core": "0.2.0-SNAPSHOT.26",
31
- "@sphereon/oid4vci-client": "0.19.1-next.226",
32
- "@sphereon/oid4vci-common": "0.19.1-next.226",
33
- "@sphereon/ssi-sdk-ext.did-utils": "0.34.1-feature.SSISDK.82.linkedVP.328+20af9c29",
34
- "@sphereon/ssi-sdk-ext.identifier-resolution": "0.34.1-feature.SSISDK.82.linkedVP.328+20af9c29",
35
- "@sphereon/ssi-sdk-ext.jwt-service": "0.34.1-feature.SSISDK.82.linkedVP.328+20af9c29",
36
- "@sphereon/ssi-sdk-ext.key-utils": "0.34.1-feature.SSISDK.82.linkedVP.328+20af9c29",
37
- "@sphereon/ssi-sdk.contact-manager": "0.34.1-feature.SSISDK.82.linkedVP.328+20af9c29",
38
- "@sphereon/ssi-sdk.core": "0.34.1-feature.SSISDK.82.linkedVP.328+20af9c29",
39
- "@sphereon/ssi-sdk.credential-store": "0.34.1-feature.SSISDK.82.linkedVP.328+20af9c29",
40
- "@sphereon/ssi-sdk.credential-validation": "0.34.1-feature.SSISDK.82.linkedVP.328+20af9c29",
41
- "@sphereon/ssi-sdk.data-store-types": "0.34.1-feature.SSISDK.82.linkedVP.328+20af9c29",
42
- "@sphereon/ssi-sdk.issuance-branding": "0.34.1-feature.SSISDK.82.linkedVP.328+20af9c29",
43
- "@sphereon/ssi-sdk.mdl-mdoc": "0.34.1-feature.SSISDK.82.linkedVP.328+20af9c29",
44
- "@sphereon/ssi-sdk.oidf-client": "0.34.1-feature.SSISDK.82.linkedVP.328+20af9c29",
45
- "@sphereon/ssi-sdk.sd-jwt": "0.34.1-feature.SSISDK.82.linkedVP.328+20af9c29",
46
- "@sphereon/ssi-sdk.siopv2-oid4vp-common": "0.34.1-feature.SSISDK.82.linkedVP.328+20af9c29",
47
- "@sphereon/ssi-sdk.siopv2-oid4vp-op-auth": "0.34.1-feature.SSISDK.82.linkedVP.328+20af9c29",
48
- "@sphereon/ssi-sdk.xstate-machine-persistence": "0.34.1-feature.SSISDK.82.linkedVP.328+20af9c29",
49
- "@sphereon/ssi-types": "0.34.1-feature.SSISDK.82.linkedVP.328+20af9c29",
31
+ "@sphereon/oid4vci-client": "0.19.1-next.234",
32
+ "@sphereon/oid4vci-common": "0.19.1-next.234",
33
+ "@sphereon/ssi-sdk-ext.did-utils": "0.34.1-feature.SSISDK.82.linkedVP.341+483672e1",
34
+ "@sphereon/ssi-sdk-ext.identifier-resolution": "0.34.1-feature.SSISDK.82.linkedVP.341+483672e1",
35
+ "@sphereon/ssi-sdk-ext.jwt-service": "0.34.1-feature.SSISDK.82.linkedVP.341+483672e1",
36
+ "@sphereon/ssi-sdk-ext.key-utils": "0.34.1-feature.SSISDK.82.linkedVP.341+483672e1",
37
+ "@sphereon/ssi-sdk.contact-manager": "0.34.1-feature.SSISDK.82.linkedVP.341+483672e1",
38
+ "@sphereon/ssi-sdk.core": "0.34.1-feature.SSISDK.82.linkedVP.341+483672e1",
39
+ "@sphereon/ssi-sdk.credential-store": "0.34.1-feature.SSISDK.82.linkedVP.341+483672e1",
40
+ "@sphereon/ssi-sdk.credential-validation": "0.34.1-feature.SSISDK.82.linkedVP.341+483672e1",
41
+ "@sphereon/ssi-sdk.data-store-types": "0.34.1-feature.SSISDK.82.linkedVP.341+483672e1",
42
+ "@sphereon/ssi-sdk.issuance-branding": "0.34.1-feature.SSISDK.82.linkedVP.341+483672e1",
43
+ "@sphereon/ssi-sdk.mdl-mdoc": "0.34.1-feature.SSISDK.82.linkedVP.341+483672e1",
44
+ "@sphereon/ssi-sdk.oidf-client": "0.34.1-feature.SSISDK.82.linkedVP.341+483672e1",
45
+ "@sphereon/ssi-sdk.sd-jwt": "0.34.1-feature.SSISDK.82.linkedVP.341+483672e1",
46
+ "@sphereon/ssi-sdk.siopv2-oid4vp-common": "0.34.1-feature.SSISDK.82.linkedVP.341+483672e1",
47
+ "@sphereon/ssi-sdk.siopv2-oid4vp-op-auth": "0.34.1-feature.SSISDK.82.linkedVP.341+483672e1",
48
+ "@sphereon/ssi-sdk.xstate-machine-persistence": "0.34.1-feature.SSISDK.82.linkedVP.341+483672e1",
49
+ "@sphereon/ssi-types": "0.34.1-feature.SSISDK.82.linkedVP.341+483672e1",
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-next.226",
63
- "@sphereon/ssi-sdk-ext.did-resolver-jwk": "0.34.1-feature.SSISDK.82.linkedVP.328+20af9c29",
62
+ "@sphereon/oid4vc-common": "0.19.1-next.234",
63
+ "@sphereon/ssi-sdk-ext.did-resolver-jwk": "0.34.1-feature.SSISDK.82.linkedVP.341+483672e1",
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": "20af9c298b5d6764da6c804d1c6d8a758b710513"
93
+ "gitHead": "483672e1d9b2891a346216a0ebea64745561d6ed"
94
94
  }
@@ -1,6 +1,6 @@
1
1
  import { CredentialOfferClient, MetadataClient, OpenID4VCIClient, OpenID4VCIClientV1_0_15 } from '@sphereon/oid4vci-client'
2
2
  import {
3
- AuthorizationDetails,
3
+ AuthorizationDetailsV1_0_15,
4
4
  AuthorizationRequestOpts,
5
5
  AuthorizationServerClientOpts,
6
6
  AuthorizationServerOpts,
@@ -123,6 +123,7 @@ import {
123
123
  VerificationResult,
124
124
  VerifyEBSICredentialIssuerArgs,
125
125
  VerifyEBSICredentialIssuerResult,
126
+ WalletType,
126
127
  } from '../types/IOID4VCIHolder'
127
128
 
128
129
  /**
@@ -378,11 +379,9 @@ export class OID4VCIHolder implements IAgentPlugin {
378
379
  }
379
380
 
380
381
  const authorizationRequestOpts = { ...this.defaultAuthorizationRequestOpts, ...args.authorizationRequestOpts } satisfies AuthorizationRequestOpts
381
- // We filter the details first against our vcformat prefs
382
+ // TODO: Previously we filtered the details first against our vcformat prefs. However auth details does not have the notion of formats anymore
382
383
  authorizationRequestOpts.authorizationDetails = authorizationRequestOpts?.authorizationDetails
383
- ? asArray(authorizationRequestOpts.authorizationDetails).filter(
384
- (detail) => typeof detail === 'string' || this.vcFormatPreferences.includes(detail.format),
385
- )
384
+ ? asArray(authorizationRequestOpts.authorizationDetails)
386
385
  : undefined
387
386
 
388
387
  if (!authorizationRequestOpts.redirectUri) {
@@ -394,9 +393,10 @@ export class OID4VCIHolder implements IAgentPlugin {
394
393
  authorizationRequestOpts.clientId = authorizationRequestOpts.redirectUri
395
394
  }
396
395
 
396
+ // TODO: This entire filter and formats population should not work anymore, as the auth details no longer have the format property.
397
397
  let formats: string[] = this.vcFormatPreferences
398
398
  const authFormats = authorizationRequestOpts?.authorizationDetails
399
- ?.map((detail: AuthorizationDetails) => (typeof detail === 'object' && 'format' in detail && detail.format ? detail.format : undefined))
399
+ ?.map((detail: AuthorizationDetailsV1_0_15) => (typeof detail === 'object' && 'format' in detail && detail.format ? detail.format : undefined))
400
400
  .filter((format) => !!format)
401
401
  .map((format) => format as string)
402
402
  if (authFormats && authFormats.length > 0) {
@@ -449,7 +449,7 @@ export class OID4VCIHolder implements IAgentPlugin {
449
449
  configurationIds = offer.original_credential_offer.credential_configuration_ids
450
450
  } else {
451
451
  configurationIds = asArray(authorizationRequestOpts.authorizationDetails)
452
- .filter((authDetails): authDetails is Exclude<AuthorizationDetails, string> => typeof authDetails !== 'string')
452
+ // .filter((authDetails): authDetails is Exclude<AuthorizationDetailsV1_0_15, string> => typeof authDetails !== 'string')
453
453
  .map((authReqOpts) => authReqOpts.credential_configuration_id)
454
454
  .filter((id): id is string => !!id)
455
455
  }
@@ -616,7 +616,7 @@ export class OID4VCIHolder implements IAgentPlugin {
616
616
  }
617
617
 
618
618
  private async oid4vciHolderGetCredentials(args: GetCredentialsArgs, context: RequiredContext): Promise<Array<MappedCredentialToAccept>> {
619
- const { verificationCode, openID4VCIClientState, didMethodPreferences = this.didMethodPreferences, issuanceOpt, accessTokenOpts } = args
619
+ const { verificationCode, openID4VCIClientState, didMethodPreferences, issuanceOpt, accessTokenOpts, walletType } = args
620
620
  logger.debug(`Getting credentials`, issuanceOpt, accessTokenOpts)
621
621
 
622
622
  if (!openID4VCIClientState) {
@@ -635,7 +635,7 @@ export class OID4VCIHolder implements IAgentPlugin {
635
635
  credentialsSupported,
636
636
  serverMetadata,
637
637
  context,
638
- didMethodPreferences: Array.isArray(didMethodPreferences) && didMethodPreferences.length > 0 ? didMethodPreferences : this.didMethodPreferences,
638
+ didMethodPreferences: this.selectDidMethodPreferences(didMethodPreferences, walletType),
639
639
  jwtCryptographicSuitePreferences: this.jwtCryptographicSuitePreferences,
640
640
  jsonldCryptographicSuitePreferences: this.jsonldCryptographicSuitePreferences,
641
641
  ...(issuanceOpt && { forceIssuanceOpt: issuanceOpt }),
@@ -660,6 +660,15 @@ export class OID4VCIHolder implements IAgentPlugin {
660
660
  return allCredentials
661
661
  }
662
662
 
663
+ private selectDidMethodPreferences(didMethodPreferences: Array<SupportedDidMethodEnum> | undefined, walletType: WalletType) {
664
+ const supportedDidMethodEnums =
665
+ Array.isArray(didMethodPreferences) && didMethodPreferences.length > 0 ? didMethodPreferences : this.didMethodPreferences
666
+ if (walletType === 'ORGANIZATIONAL') {
667
+ return [SupportedDidMethodEnum.DID_WEB, ...supportedDidMethodEnums]
668
+ }
669
+ return supportedDidMethodEnums
670
+ }
671
+
663
672
  private async oid4vciHolderGetCredential(args: GetCredentialArgs, context: RequiredContext): Promise<MappedCredentialToAccept> {
664
673
  const { issuanceOpt, pin, client, accessTokenOpts } = args
665
674
  logger.info(`Getting credential`, issuanceOpt)
@@ -3,7 +3,7 @@ import { AuthorizationRequestOpts, AuthorizationServerClientOpts, AuthzFlowType,
3
3
  import { DefaultLinkPriorities, LinkHandlerAdapter } from '@sphereon/ssi-sdk.core'
4
4
  import { IMachineStatePersistence, interpreterStartOrResume, SerializableState } from '@sphereon/ssi-sdk.xstate-machine-persistence'
5
5
  import { IAgentContext } from '@veramo/core'
6
- import { GetMachineArgs, IOID4VCIHolder, OID4VCIMachineEvents, OID4VCIMachineStateNavigationListener } from '../types/IOID4VCIHolder'
6
+ import { GetMachineArgs, IOID4VCIHolder, OID4VCIMachineEvents, OID4VCIMachineStateNavigationListener, WalletType } from '../types/IOID4VCIHolder'
7
7
  import { FirstPartyMachineStateNavigationListener } from '../types/FirstPartyMachine'
8
8
 
9
9
  /**
@@ -14,6 +14,7 @@ export class OID4VCIHolderLinkHandler extends LinkHandlerAdapter {
14
14
  private readonly stateNavigationListener?: OID4VCIMachineStateNavigationListener
15
15
  private readonly firstPartyStateNavigationListener?: FirstPartyMachineStateNavigationListener
16
16
  private readonly noStateMachinePersistence: boolean
17
+ private readonly walletType: WalletType
17
18
  private readonly authorizationRequestOpts?: AuthorizationRequestOpts
18
19
  private readonly clientOpts?: AuthorizationServerClientOpts
19
20
  private readonly trustAnchors?: Array<string>
@@ -21,7 +22,7 @@ export class OID4VCIHolderLinkHandler extends LinkHandlerAdapter {
21
22
  constructor(
22
23
  args: Pick<
23
24
  GetMachineArgs,
24
- 'stateNavigationListener' | 'authorizationRequestOpts' | 'clientOpts' | 'trustAnchors' | 'firstPartyStateNavigationListener'
25
+ 'stateNavigationListener' | 'authorizationRequestOpts' | 'clientOpts' | 'trustAnchors' | 'firstPartyStateNavigationListener' | 'walletType'
25
26
  > & {
26
27
  priority?: number | DefaultLinkPriorities
27
28
  protocols?: Array<string | RegExp>
@@ -33,6 +34,7 @@ export class OID4VCIHolderLinkHandler extends LinkHandlerAdapter {
33
34
  this.authorizationRequestOpts = args.authorizationRequestOpts
34
35
  this.clientOpts = args.clientOpts
35
36
  this.context = args.context
37
+ this.walletType = args.walletType ?? 'NATURAL_PERSON'
36
38
  this.noStateMachinePersistence = args.noStateMachinePersistence === true
37
39
  this.stateNavigationListener = args.stateNavigationListener
38
40
  this.firstPartyStateNavigationListener = args.firstPartyStateNavigationListener
@@ -68,6 +70,7 @@ export class OID4VCIHolderLinkHandler extends LinkHandlerAdapter {
68
70
  ...((clientOpts.clientId || clientOpts.clientAssertionType) && { clientOpts: clientOpts as AuthorizationServerClientOpts }),
69
71
  stateNavigationListener: this.stateNavigationListener,
70
72
  firstPartyStateNavigationListener: this.firstPartyStateNavigationListener,
73
+ walletType: this.walletType,
71
74
  })
72
75
 
73
76
  const interpreter = oid4vciMachine.interpreter
@@ -126,6 +126,7 @@ const createOID4VCIMachine = (opts?: CreateOID4VCIMachineOpts): OID4VCIStateMach
126
126
  // TODO WAL-671 we need to store the data from OpenIdProvider here in the context and make sure we can restart the machine with it and init the OpenIdProvider
127
127
  accessTokenOpts: opts?.accessTokenOpts,
128
128
  requestData: opts?.requestData,
129
+ walletType: opts?.walletType ?? 'NATURAL_PERSON',
129
130
  trustAnchors: opts?.trustAnchors ?? [],
130
131
  issuanceOpt: opts?.issuanceOpt,
131
132
  didMethodPreferences: opts?.didMethodPreferences,
@@ -136,6 +136,7 @@ export type OnIdentifierCreatedArgs = {
136
136
 
137
137
  export type GetMachineArgs = {
138
138
  requestData: RequestData
139
+ walletType: WalletType
139
140
  trustAnchors?: Array<string>
140
141
  authorizationRequestOpts?: AuthorizationRequestOpts
141
142
  clientOpts?: AuthorizationServerClientOpts
@@ -157,7 +158,7 @@ export type CreateCredentialsToSelectFromArgs = Pick<
157
158
  export type GetContactArgs = Pick<OID4VCIMachineContext, 'serverMetadata'>
158
159
  export type GetCredentialsArgs = Pick<
159
160
  OID4VCIMachineContext,
160
- 'verificationCode' | 'openID4VCIClientState' | 'selectedCredentials' | 'didMethodPreferences' | 'issuanceOpt' | 'accessTokenOpts'
161
+ 'verificationCode' | 'openID4VCIClientState' | 'selectedCredentials' | 'didMethodPreferences' | 'issuanceOpt' | 'accessTokenOpts' | 'walletType'
161
162
  >
162
163
  export type AddContactIdentityArgs = Pick<OID4VCIMachineContext, 'credentialsToAccept' | 'contact'>
163
164
  export type GetIssuerBrandingArgs = Pick<OID4VCIMachineContext, 'serverMetadata' | 'contact'>
@@ -233,6 +234,7 @@ export type OID4VCIMachineContext = {
233
234
  openID4VCIClientState?: OpenID4VCIClientState
234
235
  credentialToSelectFrom: Array<CredentialToSelectFromResult>
235
236
  contactAlias: string
237
+ walletType: WalletType
236
238
  contact?: Party
237
239
  selectedCredentials: Array<string>
238
240
  credentialsToAccept: Array<MappedCredentialToAccept>
@@ -316,6 +318,7 @@ export type OID4VCIStateMachine = StateMachine<
316
318
 
317
319
  export type CreateOID4VCIMachineOpts = {
318
320
  requestData: RequestData
321
+ walletType: WalletType
319
322
  machineName?: string
320
323
  locale?: string
321
324
  trustAnchors?: Array<string>
@@ -728,6 +731,8 @@ export type DynamicRegistrationClientMetadataDisplay = Pick<
728
731
  'client_name' | 'client_uri' | 'contacts' | 'tos_uri' | 'policy_uri' | 'logo_uri'
729
732
  >
730
733
 
734
+ export type WalletType = 'NATURAL_PERSON' | 'ORGANIZATIONAL'
735
+
731
736
  export type DidAgents = TAgent<IResolver & IDIDManager>
732
737
 
733
738
  export type RequiredContext = IAgentContext<