@sphereon/ssi-sdk.oid4vci-holder 0.34.1-feat.SSISDK.35.64 → 0.34.1-feat.SSISDK.55.244
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/index.cjs +427 -444
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +409 -426
- package/dist/index.js.map +1 -1
- package/package.json +24 -24
- package/src/agent/OID4VCIHolder.ts +17 -30
- package/src/machines/firstPartyMachine.ts +1 -1
- package/src/machines/oid4vciMachine.ts +1 -1
- package/src/mappers/OIDC4VCIBrandingMapper.ts +1 -1
- package/src/services/OID4VCIHolderService.ts +42 -63
- package/src/types/FirstPartyMachine.ts +5 -6
- package/src/types/IOID4VCIHolder.ts +2 -2
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.
|
|
3
|
+
"version": "0.34.1-feat.SSISDK.55.244+a0c4548e",
|
|
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.
|
|
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.
|
|
32
|
-
"@sphereon/oid4vci-common": "0.19.1-feature.
|
|
33
|
-
"@sphereon/ssi-sdk-ext.did-utils": "0.34.1-feat.SSISDK.
|
|
34
|
-
"@sphereon/ssi-sdk-ext.identifier-resolution": "0.34.1-feat.SSISDK.
|
|
35
|
-
"@sphereon/ssi-sdk-ext.jwt-service": "0.34.1-feat.SSISDK.
|
|
36
|
-
"@sphereon/ssi-sdk-ext.key-utils": "0.34.1-feat.SSISDK.
|
|
37
|
-
"@sphereon/ssi-sdk.contact-manager": "0.34.1-feat.SSISDK.
|
|
38
|
-
"@sphereon/ssi-sdk.core": "0.34.1-feat.SSISDK.
|
|
39
|
-
"@sphereon/ssi-sdk.credential-store": "0.34.1-feat.SSISDK.
|
|
40
|
-
"@sphereon/ssi-sdk.credential-validation": "0.34.1-feat.SSISDK.
|
|
41
|
-
"@sphereon/ssi-sdk.data-store": "0.34.1-feat.SSISDK.
|
|
42
|
-
"@sphereon/ssi-sdk.issuance-branding": "0.34.1-feat.SSISDK.
|
|
43
|
-
"@sphereon/ssi-sdk.mdl-mdoc": "0.34.1-feat.SSISDK.
|
|
44
|
-
"@sphereon/ssi-sdk.oidf-client": "0.34.1-feat.SSISDK.
|
|
45
|
-
"@sphereon/ssi-sdk.sd-jwt": "0.34.1-feat.SSISDK.
|
|
46
|
-
"@sphereon/ssi-sdk.siopv2-oid4vp-common": "0.34.1-feat.SSISDK.
|
|
47
|
-
"@sphereon/ssi-sdk.siopv2-oid4vp-op-auth": "0.34.1-feat.SSISDK.
|
|
48
|
-
"@sphereon/ssi-sdk.xstate-machine-persistence": "0.34.1-feat.SSISDK.
|
|
49
|
-
"@sphereon/ssi-types": "0.34.1-feat.SSISDK.
|
|
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.244+a0c4548e",
|
|
34
|
+
"@sphereon/ssi-sdk-ext.identifier-resolution": "0.34.1-feat.SSISDK.55.244+a0c4548e",
|
|
35
|
+
"@sphereon/ssi-sdk-ext.jwt-service": "0.34.1-feat.SSISDK.55.244+a0c4548e",
|
|
36
|
+
"@sphereon/ssi-sdk-ext.key-utils": "0.34.1-feat.SSISDK.55.244+a0c4548e",
|
|
37
|
+
"@sphereon/ssi-sdk.contact-manager": "0.34.1-feat.SSISDK.55.244+a0c4548e",
|
|
38
|
+
"@sphereon/ssi-sdk.core": "0.34.1-feat.SSISDK.55.244+a0c4548e",
|
|
39
|
+
"@sphereon/ssi-sdk.credential-store": "0.34.1-feat.SSISDK.55.244+a0c4548e",
|
|
40
|
+
"@sphereon/ssi-sdk.credential-validation": "0.34.1-feat.SSISDK.55.244+a0c4548e",
|
|
41
|
+
"@sphereon/ssi-sdk.data-store-types": "0.34.1-feat.SSISDK.55.244+a0c4548e",
|
|
42
|
+
"@sphereon/ssi-sdk.issuance-branding": "0.34.1-feat.SSISDK.55.244+a0c4548e",
|
|
43
|
+
"@sphereon/ssi-sdk.mdl-mdoc": "0.34.1-feat.SSISDK.55.244+a0c4548e",
|
|
44
|
+
"@sphereon/ssi-sdk.oidf-client": "0.34.1-feat.SSISDK.55.244+a0c4548e",
|
|
45
|
+
"@sphereon/ssi-sdk.sd-jwt": "0.34.1-feat.SSISDK.55.244+a0c4548e",
|
|
46
|
+
"@sphereon/ssi-sdk.siopv2-oid4vp-common": "0.34.1-feat.SSISDK.55.244+a0c4548e",
|
|
47
|
+
"@sphereon/ssi-sdk.siopv2-oid4vp-op-auth": "0.34.1-feat.SSISDK.55.244+a0c4548e",
|
|
48
|
+
"@sphereon/ssi-sdk.xstate-machine-persistence": "0.34.1-feat.SSISDK.55.244+a0c4548e",
|
|
49
|
+
"@sphereon/ssi-types": "0.34.1-feat.SSISDK.55.244+a0c4548e",
|
|
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.
|
|
63
|
-
"@sphereon/ssi-sdk-ext.did-resolver-jwk": "0.34.1-feat.SSISDK.
|
|
62
|
+
"@sphereon/oid4vc-common": "0.19.1-feature.DIIPv4.175",
|
|
63
|
+
"@sphereon/ssi-sdk-ext.did-resolver-jwk": "0.34.1-feat.SSISDK.55.244+a0c4548e",
|
|
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": "
|
|
93
|
+
"gitHead": "a0c4548eff5e9952aab290c8cee60fe4b9dfbc72"
|
|
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
|
-
|
|
444
|
+
configurationIds = offer.original_credential_offer.credential_configuration_ids
|
|
447
445
|
} else {
|
|
448
|
-
|
|
449
|
-
.
|
|
450
|
-
.
|
|
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
|
-
|
|
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
|
-
|
|
943
|
-
|
|
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 {
|
|
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
|
|
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
|
|
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(
|
|
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 (!
|
|
403
|
-
return Promise.reject(Error('openID4VCIClient has no credentialOffer
|
|
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
|
-
|
|
408
|
-
|
|
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:
|
|
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 {
|
|
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
|
|
506
|
+
credentialResponse: CredentialResponseV1_0_15 | CredentialResponse
|
|
507
507
|
}
|
|
508
508
|
|
|
509
509
|
export type GetCredentialConfigsSupportedArgs = {
|