diff --git a/demo-openid/package.json b/demo-openid/package.json index 6993266ab9..787bf0167c 100644 --- a/demo-openid/package.json +++ b/demo-openid/package.json @@ -21,15 +21,15 @@ "inquirer": "^8.2.5" }, "devDependencies": { - "@credo-ts/openid4vc": "workspace:*", "@credo-ts/askar": "workspace:*", "@credo-ts/core": "workspace:*", "@credo-ts/node": "workspace:*", + "@credo-ts/openid4vc": "workspace:*", "@types/express": "^4.17.13", "@types/figlet": "^1.5.4", "@types/inquirer": "^8.2.6", "clear": "^0.1.0", "figlet": "^1.5.2", - "ts-node": "^10.4.0" + "ts-node": "^10.9.2" } } diff --git a/demo-openid/src/Holder.ts b/demo-openid/src/Holder.ts index 09187f59ab..6b3d5ab499 100644 --- a/demo-openid/src/Holder.ts +++ b/demo-openid/src/Holder.ts @@ -29,6 +29,12 @@ export class Holder extends BaseAgent> const holder = new Holder(3000, 'OpenId4VcHolder ' + Math.random().toString()) await holder.initializeAgent('96213c3d7fc8d4d6754c7a0fd969598e') + // Set trusted issuer certificates. Required fro verifying mdoc credentials + const trustedCertificates: string[] = [] + await holder.agent.x509.setTrustedCertificates( + trustedCertificates.length === 0 ? undefined : (trustedCertificates as [string, ...string[]]) + ) + return holder } diff --git a/demo-openid/src/Issuer.ts b/demo-openid/src/Issuer.ts index 410080e647..154a094670 100644 --- a/demo-openid/src/Issuer.ts +++ b/demo-openid/src/Issuer.ts @@ -4,6 +4,7 @@ import type { OpenId4VcCredentialHolderDidBinding, OpenId4VciCredentialRequestToCredentialMapper, OpenId4VciCredentialSupportedWithId, + OpenId4VciSignMdocCredential, OpenId4VcIssuerRecord, } from '@credo-ts/openid4vc' @@ -16,6 +17,9 @@ import { W3cCredentialSubject, W3cIssuer, w3cDate, + X509Service, + KeyType, + X509ModuleConfig, } from '@credo-ts/core' import { OpenId4VcIssuerModule, OpenId4VciCredentialFormatProfile } from '@credo-ts/openid4vc' import { ariesAskar } from '@hyperledger/aries-askar-nodejs' @@ -42,10 +46,17 @@ export const universityDegreeCredentialSdJwt = { vct: 'UniversityDegreeCredential', } satisfies OpenId4VciCredentialSupportedWithId +export const universityDegreeCredentialMdoc = { + id: 'UniversityDegreeCredential-mdoc', + format: OpenId4VciCredentialFormatProfile.MsoMdoc, + doctype: 'UniversityDegreeCredential', +} satisfies OpenId4VciCredentialSupportedWithId + export const credentialsSupported = [ universityDegreeCredential, openBadgeCredential, universityDegreeCredentialSdJwt, + universityDegreeCredentialMdoc, ] satisfies OpenId4VciCredentialSupportedWithId[] function getCredentialRequestToCredentialMapper({ @@ -53,7 +64,11 @@ function getCredentialRequestToCredentialMapper({ }: { issuerDidKey: DidKey }): OpenId4VciCredentialRequestToCredentialMapper { - return async ({ holderBinding, credentialConfigurationIds }) => { + return async ({ holderBinding, credentialConfigurationIds, agentContext }) => { + const trustedCertificates = agentContext.dependencyManager.resolve(X509ModuleConfig).trustedCertificates + if (trustedCertificates?.length !== 1) { + throw new Error(`Expected exactly one trusted certificate. Received ${trustedCertificates?.length}.`) + } const credentialConfigurationId = credentialConfigurationIds[0] if (credentialConfigurationId === universityDegreeCredential.id) { @@ -110,6 +125,21 @@ function getCredentialRequestToCredentialMapper({ } } + if (credentialConfigurationId === universityDegreeCredentialMdoc.id) { + return { + credentialSupportedId: universityDegreeCredentialMdoc.id, + format: ClaimFormat.MsoMdoc, + docType: universityDegreeCredentialMdoc.doctype, + issuerCertificate: trustedCertificates[0], + holderKey: holderBinding.key, + namespaces: { + 'Leopold-Franzens-University': { + degree: 'bachelor', + }, + }, + } satisfies OpenId4VciSignMdocCredential + } + throw new Error('Invalid request') } } @@ -147,6 +177,25 @@ export class Issuer extends BaseAgent<{ public static async build(): Promise { const issuer = new Issuer(2000, 'OpenId4VcIssuer ' + Math.random().toString()) await issuer.initializeAgent('96213c3d7fc8d4d6754c7a0fd969598f') + + const currentDate = new Date() + currentDate.setDate(currentDate.getDate() - 1) + const nextDay = new Date(currentDate) + nextDay.setDate(currentDate.getDate() + 2) + + const selfSignedCertificate = await X509Service.createSelfSignedCertificate(issuer.agent.context, { + key: await issuer.agent.context.wallet.createKey({ keyType: KeyType.P256 }), + notBefore: currentDate, + notAfter: nextDay, + extensions: [], + name: 'C=DE', + }) + + const issuerCertficicate = selfSignedCertificate.toString('pem') + await issuer.agent.x509.setTrustedCertificates([issuerCertficicate]) + console.log('Set the following certficate for the holder to verify mdoc credentials.') + console.log(issuerCertficicate) + issuer.issuerRecord = await issuer.agent.modules.openId4VcIssuer.createIssuer({ credentialsSupported, }) diff --git a/packages/core/package.json b/packages/core/package.json index 9abb5c5f1f..f53187430b 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -35,7 +35,7 @@ "@peculiar/asn1-schema": "^2.3.8", "@peculiar/asn1-x509": "^2.3.8", "@peculiar/x509": "^1.11.0", - "@protokoll/mdoc-client": "0.2.27", + "@protokoll/mdoc-client": "0.2.33", "@sd-jwt/core": "^0.7.0", "@sd-jwt/decode": "^0.7.0", "@sd-jwt/jwt-status-list": "^0.7.0", diff --git a/packages/openid4vc/package.json b/packages/openid4vc/package.json index 197a021d68..4b76a0272e 100644 --- a/packages/openid4vc/package.json +++ b/packages/openid4vc/package.json @@ -27,11 +27,11 @@ }, "dependencies": { "@credo-ts/core": "workspace:*", - "@sphereon/did-auth-siop": "0.16.1-next.66", - "@sphereon/oid4vc-common": "0.16.1-next.66", - "@sphereon/oid4vci-client": "0.16.1-next.66", - "@sphereon/oid4vci-common": "0.16.1-next.66", - "@sphereon/oid4vci-issuer": "0.16.1-next.66", + "@sphereon/did-auth-siop": "0.16.1-next.168", + "@sphereon/oid4vc-common": "0.16.1-next.168", + "@sphereon/oid4vci-client": "0.16.1-next.168", + "@sphereon/oid4vci-common": "0.16.1-next.168", + "@sphereon/oid4vci-issuer": "0.16.1-next.168", "@sphereon/ssi-types": "0.29.1-unstable.121", "class-transformer": "^0.5.1", "rxjs": "^7.8.0" diff --git a/packages/openid4vc/src/openid4vc-holder/OpenId4VciHolderService.ts b/packages/openid4vc/src/openid4vc-holder/OpenId4VciHolderService.ts index d1c5ef5f9d..6617204056 100644 --- a/packages/openid4vc/src/openid4vc-holder/OpenId4VciHolderService.ts +++ b/packages/openid4vc/src/openid4vc-holder/OpenId4VciHolderService.ts @@ -22,6 +22,7 @@ import type { AuthorizationDetails, AuthorizationDetailsJwtVcJson, AuthorizationDetailsJwtVcJsonLdAndLdpVc, + AuthorizationDetailsMsoMdoc, AuthorizationDetailsSdJwtVc, CredentialResponse, Jwt, @@ -37,6 +38,8 @@ import { Jwk, JwsService, Logger, + Mdoc, + MdocApi, SdJwtVcApi, SignatureSuiteRegistry, TypedArrayEncoder, @@ -178,6 +181,14 @@ export class OpenId4VciHolderService { vct: offeredCredential.vct, claims: offeredCredential.claims, } satisfies AuthorizationDetailsSdJwtVc + } else if (format === OpenId4VciCredentialFormatProfile.MsoMdoc) { + return { + type, + format, + locations, + claims: offeredCredential.claims, + doctype: offeredCredential.doctype, + } satisfies AuthorizationDetailsMsoMdoc } else { throw new CredoError(`Cannot create authorization_details. Unsupported credential format '${format}'.`) } @@ -662,6 +673,7 @@ export class OpenId4VciHolderService { case OpenId4VciCredentialFormatProfile.JwtVcJson: case OpenId4VciCredentialFormatProfile.JwtVcJsonLd: case OpenId4VciCredentialFormatProfile.SdJwtVc: + case OpenId4VciCredentialFormatProfile.MsoMdoc: signatureAlgorithm = options.possibleProofOfPossessionSignatureAlgorithms.find((signatureAlgorithm) => proofSigningAlgsSupported.includes(signatureAlgorithm) ) @@ -782,6 +794,24 @@ export class OpenId4VciHolderService { } return { credential, notificationMetadata } + } else if (format === OpenId4VciCredentialFormatProfile.MsoMdoc) { + if (typeof credentialResponse.successBody.credential !== 'string') + throw new CredoError( + `Received a credential of format ${ + OpenId4VciCredentialFormatProfile.MsoMdoc + }, but the credential is not a string. ${JSON.stringify(credentialResponse.successBody.credential)}` + ) + + const mdocApi = agentContext.dependencyManager.resolve(MdocApi) + const mdoc = Mdoc.fromBase64Url(credentialResponse.successBody.credential) + const verificationResult = await mdocApi.verify(mdoc, {}) + + if (!verificationResult.isValid) { + agentContext.config.logger.error('Failed to validate credential', { verificationResult }) + throw new CredoError(`Failed to validate mdoc credential. Results = ${verificationResult.error}`) + } + + return { credential: mdoc, notificationMetadata } } throw new CredoError(`Unsupported credential format ${credentialResponse.successBody.format}`) diff --git a/packages/openid4vc/src/openid4vc-holder/OpenId4VciHolderServiceOptions.ts b/packages/openid4vc/src/openid4vc-holder/OpenId4VciHolderServiceOptions.ts index 0bd7ad0e8d..bc75187add 100644 --- a/packages/openid4vc/src/openid4vc-holder/OpenId4VciHolderServiceOptions.ts +++ b/packages/openid4vc/src/openid4vc-holder/OpenId4VciHolderServiceOptions.ts @@ -21,12 +21,14 @@ export type OpenId4VciSupportedCredentialFormats = | OpenId4VciCredentialFormatProfile.JwtVcJsonLd | OpenId4VciCredentialFormatProfile.SdJwtVc | OpenId4VciCredentialFormatProfile.LdpVc + | OpenId4VciCredentialFormatProfile.MsoMdoc export const openId4VciSupportedCredentialFormats: OpenId4VciSupportedCredentialFormats[] = [ OpenId4VciCredentialFormatProfile.JwtVcJson, OpenId4VciCredentialFormatProfile.JwtVcJsonLd, OpenId4VciCredentialFormatProfile.SdJwtVc, OpenId4VciCredentialFormatProfile.LdpVc, + OpenId4VciCredentialFormatProfile.MsoMdoc, ] export interface OpenId4VciNotificationMetadata { diff --git a/packages/openid4vc/src/openid4vc-issuer/OpenId4VcIssuerService.ts b/packages/openid4vc/src/openid4vc-issuer/OpenId4VcIssuerService.ts index 0cfa754767..c9661f16e6 100644 --- a/packages/openid4vc/src/openid4vc-issuer/OpenId4VcIssuerService.ts +++ b/packages/openid4vc/src/openid4vc-issuer/OpenId4VcIssuerService.ts @@ -6,6 +6,7 @@ import type { OpenId4VcIssuerMetadata, OpenId4VciSignSdJwtCredential, OpenId4VciSignW3cCredential, + OpenId4VciSignMdocCredential, } from './OpenId4VcIssuerServiceOptions' import type { OpenId4VcIssuanceSessionRecord } from './repository' import type { @@ -14,7 +15,7 @@ import type { OpenId4VciCredentialOfferPayload, OpenId4VciCredentialRequest, } from '../shared' -import type { AgentContext, DidDocument, Query, QueryOptions } from '@credo-ts/core' +import type { AgentContext, DidDocument, Key, Query, QueryOptions } from '@credo-ts/core' import type { CredentialOfferPayloadV1_0_11, CredentialOfferPayloadV1_0_13, @@ -47,6 +48,9 @@ import { KeyType, utils, W3cCredentialService, + MdocApi, + parseDid, + DidResolverService, } from '@credo-ts/core' import { VcIssuerBuilder } from '@sphereon/oid4vci-issuer' @@ -499,6 +503,11 @@ export class OpenId4VcIssuerService { offeredCredential.format === credentialRequest.format ) { return offeredCredential.vct === credentialRequest.vct + } else if ( + credentialRequest.format === OpenId4VciCredentialFormatProfile.MsoMdoc && + offeredCredential.format === credentialRequest.format + ) { + return offeredCredential.doctype === credentialRequest.doctype } return false @@ -518,6 +527,18 @@ export class OpenId4VcIssuerService { } } + private getMsoMdocCredentialSigningCallback = ( + agentContext: AgentContext, + options: OpenId4VciSignMdocCredential + ): CredentialSignerCallback => { + return async () => { + const mdocApi = agentContext.dependencyManager.resolve(MdocApi) + + const mdoc = await mdocApi.sign(options) + return getSphereonVerifiableCredential(mdoc) + } + } + private getW3cCredentialSigningCallback = ( agentContext: AgentContext, options: OpenId4VciSignW3cCredential @@ -586,7 +607,10 @@ export class OpenId4VcIssuerService { } } - private async getHolderBindingFromRequest(credentialRequest: OpenId4VciCredentialRequest) { + private async getHolderBindingFromRequest( + agentContext: AgentContext, + credentialRequest: OpenId4VciCredentialRequest + ) { if (!credentialRequest.proof?.jwt) throw new CredoError('Received a credential request without a proof') const jwt = Jwt.fromSerializedJwt(credentialRequest.proof.jwt) @@ -600,15 +624,27 @@ export class OpenId4VcIssuerService { ) } + const parsedDid = parseDid(jwt.header.kid) + if (!parsedDid.fragment) { + throw new Error(`didUrl '${parsedDid.didUrl}' does not contain a '#'. Unable to derive key from did document.`) + } + + const didResolver = agentContext.dependencyManager.resolve(DidResolverService) + const didDocument = await didResolver.resolveDidDocument(agentContext, parsedDid.didUrl) + const key = getKeyFromVerificationMethod(didDocument.dereferenceKey(parsedDid.didUrl, ['assertionMethod'])) + return { method: 'did', didUrl: jwt.header.kid, - } satisfies OpenId4VcCredentialHolderBinding + key, + } satisfies OpenId4VcCredentialHolderBinding & { key: Key } } else if (jwt.header.jwk) { + const jwk = getJwkFromJson(jwt.header.jwk) return { method: 'jwk', - jwk: getJwkFromJson(jwt.header.jwk), - } satisfies OpenId4VcCredentialHolderBinding + jwk: jwk, + key: jwk.key, + } satisfies OpenId4VcCredentialHolderBinding & { key: Key } } else { throw new CredoError('Either kid or jwk must be present in credential request proof header') } @@ -655,7 +691,7 @@ export class OpenId4VcIssuerService { ([credentialConfigurationId]) => credentialConfigurationId ) as [string, ...string[]] - const holderBinding = await this.getHolderBindingFromRequest(credentialRequest) + const holderBinding = await this.getHolderBindingFromRequest(agentContext, credentialRequest) const signOptions = await mapper({ agentContext, issuanceSession, @@ -712,6 +748,25 @@ export class OpenId4VcIssuerService { credential: { ...signOptions.payload } as unknown as CredentialIssuanceInput, signCallback: this.getSdJwtVcCredentialSigningCallback(agentContext, signOptions), } + } else if (signOptions.format === ClaimFormat.MsoMdoc) { + if (credentialRequest.format !== OpenId4VciCredentialFormatProfile.MsoMdoc) { + throw new CredoError( + `Invalid credential format. Expected '${OpenId4VciCredentialFormatProfile.MsoMdoc}', received '${credentialRequest.format}'.` + ) + } + + if (credentialRequest.doctype !== signOptions.docType) { + throw new CredoError( + `The types of the offered credentials do not match the types of the requested credential. Offered '${signOptions.docType}' Requested '${credentialRequest.doctype}'.` + ) + } + + return { + format: credentialRequest.format, + // NOTE: we don't use the credential value here as we pass the credential directly to the singer + credential: { ...signOptions.namespaces, docType: signOptions.docType } as unknown as CredentialIssuanceInput, + signCallback: this.getMsoMdocCredentialSigningCallback(agentContext, signOptions), + } } else { throw new CredoError(`Unsupported credential format ${signOptions.format}`) } diff --git a/packages/openid4vc/src/openid4vc-issuer/OpenId4VcIssuerServiceOptions.ts b/packages/openid4vc/src/openid4vc-issuer/OpenId4VcIssuerServiceOptions.ts index 58c492abe8..ab9d47c4a3 100644 --- a/packages/openid4vc/src/openid4vc-issuer/OpenId4VcIssuerServiceOptions.ts +++ b/packages/openid4vc/src/openid4vc-issuer/OpenId4VcIssuerServiceOptions.ts @@ -20,6 +20,8 @@ import type { W3cCredential, SdJwtVcSignOptions, JwaSignatureAlgorithm, + MdocSignOptions, + Key, } from '@credo-ts/core' export interface OpenId4VciPreAuthorizedCodeFlowConfig { @@ -119,7 +121,7 @@ export type OpenId4VciCredentialRequestToCredentialMapper = (options: { * * Can either be bound to did or a JWK (in case of for ex. SD-JWT) */ - holderBinding: OpenId4VcCredentialHolderBinding + holderBinding: OpenId4VcCredentialHolderBinding & { key: Key } /** * @deprecated use credentialConfigurations instead @@ -139,13 +141,21 @@ export type OpenId4VciCredentialRequestToCredentialMapper = (options: { credentialConfigurationIds: [string, ...string[]] }) => Promise | OpenId4VciSignCredential -export type OpenId4VciSignCredential = OpenId4VciSignSdJwtCredential | OpenId4VciSignW3cCredential +export type OpenId4VciSignCredential = + | OpenId4VciSignSdJwtCredential + | OpenId4VciSignW3cCredential + | OpenId4VciSignMdocCredential export interface OpenId4VciSignSdJwtCredential extends SdJwtVcSignOptions { credentialSupportedId: string format: ClaimFormat.SdJwtVc | `${ClaimFormat.SdJwtVc}` } +export interface OpenId4VciSignMdocCredential extends MdocSignOptions { + credentialSupportedId: string + format: ClaimFormat.MsoMdoc | `${ClaimFormat.MsoMdoc}` +} + export interface OpenId4VciSignW3cCredential { credentialSupportedId: string format: ClaimFormat.JwtVc | `${ClaimFormat.JwtVc}` | ClaimFormat.LdpVc | `${ClaimFormat.LdpVc}` diff --git a/packages/openid4vc/src/openid4vc-verifier/OpenId4VcSiopVerifierService.ts b/packages/openid4vc/src/openid4vc-verifier/OpenId4VcSiopVerifierService.ts index baff7edb7f..555ad5606c 100644 --- a/packages/openid4vc/src/openid4vc-verifier/OpenId4VcSiopVerifierService.ts +++ b/packages/openid4vc/src/openid4vc-verifier/OpenId4VcSiopVerifierService.ts @@ -198,6 +198,8 @@ export class OpenId4VcSiopVerifierService { let authorizationRequestUri = (await authorizationRequest.uri()).encodedUri if (options.presentationExchange && !options.idToken) { authorizationRequestUri = authorizationRequestUri.replace('openid://', 'openid4vp://') + } else { + authorizationRequestUri = authorizationRequestUri.replace('openid4vp://', 'openid://') } const verificationSession = await verificationSessionCreatedPromise @@ -554,6 +556,9 @@ export class OpenId4VcSiopVerifierService { responseTypesSupported: [ResponseType.VP_TOKEN], subject_syntax_types_supported: supportedDidMethods.map((m) => `did:${m}`), vpFormatsSupported: { + mso_mdoc: { + alg: supportedAlgs, + }, jwt_vc: { alg: supportedAlgs, }, diff --git a/packages/openid4vc/src/shared/issuerMetadataUtils.ts b/packages/openid4vc/src/shared/issuerMetadataUtils.ts index 09622cd404..81bf5f42f8 100644 --- a/packages/openid4vc/src/shared/issuerMetadataUtils.ts +++ b/packages/openid4vc/src/shared/issuerMetadataUtils.ts @@ -39,6 +39,13 @@ export function getTypesFromCredentialSupported( ) } return credentialSupported.vct ? [credentialSupported.vct] : undefined + } else if (credentialSupported.format === 'mso_mdoc') { + if (!credentialSupported.doctype) { + throw Error( + `Unable to extract types from credentials supported for format ${credentialSupported.format}. Doctype is not defined` + ) + } + return [credentialSupported.doctype] } throw Error(`Unable to extract types from credentials supported. Unknown format ${credentialSupported.format}`) @@ -57,7 +64,14 @@ export function credentialConfigurationSupportedToCredentialSupported( order: config.order, } - if (config.format === 'jwt_vc_json' || config.format === 'jwt_vc') { + if (config.format === 'mso_mdoc') { + return { + ...baseConfig, + doctype: config.doctype, + format: config.format, + claims: config.claims, + } + } else if (config.format === 'jwt_vc_json' || config.format === 'jwt_vc') { return { ...baseConfig, format: config.format, @@ -151,6 +165,13 @@ export function credentialSupportedToCredentialConfigurationSupported( vct: credentialSupported.vct, claims: credentialSupported.claims, } + } else if (credentialSupported.format === 'mso_mdoc') { + return { + ...baseCredentialConfigurationSupported, + format: credentialSupported.format, + doctype: credentialSupported.doctype, + claims: credentialSupported.claims, + } } throw new CredoError(`Unsupported credential format ${credentialSupported.format}`) diff --git a/packages/openid4vc/src/shared/models/OpenId4VciCredentialFormatProfile.ts b/packages/openid4vc/src/shared/models/OpenId4VciCredentialFormatProfile.ts index 628e65c12e..4d74512986 100644 --- a/packages/openid4vc/src/shared/models/OpenId4VciCredentialFormatProfile.ts +++ b/packages/openid4vc/src/shared/models/OpenId4VciCredentialFormatProfile.ts @@ -3,4 +3,5 @@ export enum OpenId4VciCredentialFormatProfile { JwtVcJsonLd = 'jwt_vc_json-ld', LdpVc = 'ldp_vc', SdJwtVc = 'vc+sd-jwt', + MsoMdoc = 'mso_mdoc', } diff --git a/packages/openid4vc/src/shared/transform.ts b/packages/openid4vc/src/shared/transform.ts index d73cfa638c..a1f4ff2a94 100644 --- a/packages/openid4vc/src/shared/transform.ts +++ b/packages/openid4vc/src/shared/transform.ts @@ -20,7 +20,7 @@ import { export function getSphereonVerifiableCredential( verifiableCredential: VerifiableCredential -): SphereonW3cVerifiableCredential | SphereonCompactSdJwtVc { +): SphereonW3cVerifiableCredential | SphereonCompactSdJwtVc | string { // encoded sd-jwt or jwt if (typeof verifiableCredential === 'string') { return verifiableCredential @@ -29,7 +29,7 @@ export function getSphereonVerifiableCredential( } else if (verifiableCredential instanceof W3cJwtVerifiableCredential) { return verifiableCredential.serializedJwt } else if (verifiableCredential instanceof Mdoc) { - throw new CredoError('Mdoc verifiable credential is not yet supported.') + return verifiableCredential.base64Url } else { return verifiableCredential.compact } @@ -47,6 +47,9 @@ export function getSphereonVerifiablePresentation( return verifiablePresentation.serializedJwt } else if (verifiablePresentation instanceof MdocVerifiablePresentation) { throw new CredoError('Mdoc verifiable presentation is not yet supported.') + + // TODO: CHECK IF THIS IS WHAT IS EXPECTED + // return verifiablePresentation.deviceSignedBase64Url } else { return verifiablePresentation.compact } @@ -73,6 +76,11 @@ export function getVerifiablePresentationFromSphereonWrapped( payload: wrappedVerifiablePresentation.presentation.signedPayload, prettyClaims: wrappedVerifiablePresentation.presentation.decodedPayload, } satisfies SdJwtVc + } else if (wrappedVerifiablePresentation.format === 'mso_mdoc') { + if (typeof wrappedVerifiablePresentation.original !== 'string') { + throw new CredoError('Invalid format of original verifiable presentation. DeviceResponseCbor is not supported') + } + return new MdocVerifiablePresentation(wrappedVerifiablePresentation.original) } throw new CredoError(`Unsupported presentation format: ${wrappedVerifiablePresentation.format}`) diff --git a/packages/openid4vc/tests/openid4vc.e2e.test.ts b/packages/openid4vc/tests/openid4vc.e2e.test.ts index 1409395523..7000763bfc 100644 --- a/packages/openid4vc/tests/openid4vc.e2e.test.ts +++ b/packages/openid4vc/tests/openid4vc.e2e.test.ts @@ -1,6 +1,7 @@ import type { AgentType, TenantType } from './utils' +import type { OpenId4VciSignMdocCredential } from '../src' import type { OpenId4VciCredentialBindingResolver } from '../src/openid4vc-holder' -import type { DifPresentationExchangeDefinitionV2, SdJwtVc } from '@credo-ts/core' +import type { DifPresentationExchangeDefinitionV2, Mdoc, SdJwtVc } from '@credo-ts/core' import type { Server } from 'http' import { @@ -20,6 +21,7 @@ import { KeyType, Jwt, Jwk, + X509ModuleConfig, } from '@credo-ts/core' import express, { type Express } from 'express' @@ -43,6 +45,7 @@ import { } from './utils' import { universityDegreeCredentialConfigurationSupported, + universityDegreeCredentialConfigurationSupportedMdoc, universityDegreeCredentialSdJwt, universityDegreeCredentialSdJwt2, } from './utilsVci' @@ -114,9 +117,28 @@ describe('OpenId4Vc', () => { }, disclosureFrame: { _sd: ['university', 'degree'] }, } - } + } else if (credentialRequest.format === 'mso_mdoc') { + const trustedCertificates = + agentContext.dependencyManager.resolve(X509ModuleConfig).trustedCertificates + if (trustedCertificates?.length !== 1) { + throw new Error('Expected exactly one trusted certificate. Received 0.') + } - throw new Error('Invalid request') + return { + credentialSupportedId: '', + format: ClaimFormat.MsoMdoc, + docType: universityDegreeCredentialConfigurationSupportedMdoc.doctype, + issuerCertificate: trustedCertificates[0], + holderKey: holderBinding.key, + namespaces: { + 'Leopold-Franzens-University': { + degree: 'bachelor', + }, + }, + } satisfies OpenId4VciSignMdocCredential + } else { + throw new Error('Invalid request') + } }, }, }, @@ -1584,4 +1606,146 @@ describe('OpenId4Vc', () => { ], }) }) + + it('e2e flow with tenants, issuer endpoints requesting a mdoc', async () => { + const issuerTenant1 = await issuer.agent.modules.tenants.getTenantAgent({ tenantId: issuer1.tenantId }) + + const currentDate = new Date() + currentDate.setDate(currentDate.getDate() - 1) + const nextDay = new Date(currentDate) + nextDay.setDate(currentDate.getDate() + 2) + + const selfSignedIssuerCertificate = await issuerTenant1.x509.createSelfSignedCertificate({ + key: await issuerTenant1.wallet.createKey({ keyType: KeyType.P256 }), + notBefore: currentDate, + notAfter: nextDay, + extensions: [], + name: 'C=DE', + }) + const selfSignedIssuerCertPem = selfSignedIssuerCertificate.toString('pem') + await issuerTenant1.x509.setTrustedCertificates([selfSignedIssuerCertPem]) + + const openIdIssuerTenant1 = await issuerTenant1.modules.openId4VcIssuer.createIssuer({ + dpopSigningAlgValuesSupported: [JwaSignatureAlgorithm.ES256], + credentialConfigurationsSupported: { + universityDegree: universityDegreeCredentialConfigurationSupportedMdoc, + }, + }) + const issuer1Record = await issuerTenant1.modules.openId4VcIssuer.getIssuerByIssuerId(openIdIssuerTenant1.issuerId) + expect(issuer1Record.dpopSigningAlgValuesSupported).toEqual(['ES256']) + + expect(issuer1Record.credentialsSupported).toEqual([ + { + id: 'universityDegree', + format: 'mso_mdoc', + cryptographic_binding_methods_supported: ['did:key'], + doctype: universityDegreeCredentialConfigurationSupportedMdoc.doctype, + scope: 'UniversityDegreeCredential', + }, + ]) + expect(issuer1Record.credentialConfigurationsSupported).toEqual({ + universityDegree: { + format: 'mso_mdoc', + cryptographic_binding_methods_supported: ['did:key'], + proof_types_supported: { + jwt: { + proof_signing_alg_values_supported: ['ES256'], + }, + }, + doctype: universityDegreeCredentialConfigurationSupportedMdoc.doctype, + scope: universityDegreeCredentialConfigurationSupportedMdoc.scope, + }, + }) + + const { issuanceSession: issuanceSession1, credentialOffer: credentialOffer1 } = + await issuerTenant1.modules.openId4VcIssuer.createCredentialOffer({ + issuerId: openIdIssuerTenant1.issuerId, + offeredCredentials: ['universityDegree'], + preAuthorizedCodeFlowConfig: {}, // { txCode: { input_mode: 'numeric', length: 4 } }, // TODO: disable due to sphereon limitations + version: 'v1.draft13', + }) + + await issuerTenant1.endSession() + + await waitForCredentialIssuanceSessionRecordSubject(issuer.replaySubject, { + state: OpenId4VcIssuanceSessionState.OfferCreated, + issuanceSessionId: issuanceSession1.id, + contextCorrelationId: issuer1.tenantId, + }) + + const holderTenant1 = await holder.agent.modules.tenants.getTenantAgent({ tenantId: holder1.tenantId }) + await holderTenant1.x509.setTrustedCertificates([selfSignedIssuerCertPem]) + + const resolvedCredentialOffer1 = await holderTenant1.modules.openId4VcHolder.resolveCredentialOffer( + credentialOffer1 + ) + + expect(resolvedCredentialOffer1.metadata.credentialIssuerMetadata?.dpop_signing_alg_values_supported).toEqual([ + 'ES256', + ]) + expect(resolvedCredentialOffer1.offeredCredentials).toEqual([ + { + id: 'universityDegree', + doctype: 'UniversityDegreeCredential', + cryptographic_binding_methods_supported: ['did:key'], + format: 'mso_mdoc', + scope: universityDegreeCredentialConfigurationSupportedMdoc.scope, + }, + ]) + + expect(resolvedCredentialOffer1.credentialOfferRequestWithBaseUrl.credential_offer.credential_issuer).toEqual( + `${issuanceBaseUrl}/${openIdIssuerTenant1.issuerId}` + ) + expect(resolvedCredentialOffer1.metadata.credentialIssuerMetadata?.token_endpoint).toEqual( + `${issuanceBaseUrl}/${openIdIssuerTenant1.issuerId}/token` + ) + expect(resolvedCredentialOffer1.metadata.credentialIssuerMetadata?.credential_endpoint).toEqual( + `${issuanceBaseUrl}/${openIdIssuerTenant1.issuerId}/credential` + ) + + // Bind to JWK + const tokenResponseTenant1 = await holderTenant1.modules.openId4VcHolder.requestToken({ + resolvedCredentialOffer: resolvedCredentialOffer1, + }) + + expect(tokenResponseTenant1.accessToken).toBeDefined() + expect(tokenResponseTenant1.dpop?.jwk).toBeInstanceOf(Jwk) + const { payload } = Jwt.fromSerializedJwt(tokenResponseTenant1.accessToken) + expect(payload.additionalClaims.token_type).toEqual('DPoP') + + const credentialsTenant1 = await holderTenant1.modules.openId4VcHolder.requestCredentials({ + resolvedCredentialOffer: resolvedCredentialOffer1, + ...tokenResponseTenant1, + credentialBindingResolver, + }) + + // Wait for all events + await waitForCredentialIssuanceSessionRecordSubject(issuer.replaySubject, { + state: OpenId4VcIssuanceSessionState.AccessTokenRequested, + issuanceSessionId: issuanceSession1.id, + contextCorrelationId: issuer1.tenantId, + }) + await waitForCredentialIssuanceSessionRecordSubject(issuer.replaySubject, { + state: OpenId4VcIssuanceSessionState.AccessTokenCreated, + issuanceSessionId: issuanceSession1.id, + contextCorrelationId: issuer1.tenantId, + }) + await waitForCredentialIssuanceSessionRecordSubject(issuer.replaySubject, { + state: OpenId4VcIssuanceSessionState.CredentialRequestReceived, + issuanceSessionId: issuanceSession1.id, + contextCorrelationId: issuer1.tenantId, + }) + await waitForCredentialIssuanceSessionRecordSubject(issuer.replaySubject, { + state: OpenId4VcIssuanceSessionState.Completed, + issuanceSessionId: issuanceSession1.id, + contextCorrelationId: issuer1.tenantId, + }) + + expect(credentialsTenant1).toHaveLength(1) + const mdocBase64Url = (credentialsTenant1[0].credential as Mdoc).base64Url + const mdoc = holderTenant1.mdoc.fromBase64Url(mdocBase64Url) + expect(mdoc.docType).toEqual('UniversityDegreeCredential') + + await holderTenant1.endSession() + }) }) diff --git a/packages/openid4vc/tests/utilsVci.ts b/packages/openid4vc/tests/utilsVci.ts index f4688ba4ef..be87dd96ad 100644 --- a/packages/openid4vc/tests/utilsVci.ts +++ b/packages/openid4vc/tests/utilsVci.ts @@ -38,6 +38,16 @@ export const universityDegreeCredentialConfigurationSupported = { cryptographic_binding_methods_supported: ['did:key'], } satisfies OpenId4VciCredentialConfigurationSupported +export const universityDegreeCredentialConfigurationSupportedMdoc = { + format: OpenId4VciCredentialFormatProfile.MsoMdoc, + scope: 'UniversityDegreeCredential', + doctype: 'UniversityDegreeCredential', + proof_types_supported: { + jwt: { proof_signing_alg_values_supported: ['ES256'] }, + }, + cryptographic_binding_methods_supported: ['did:key'], +} satisfies OpenId4VciCredentialConfigurationSupported + export const universityDegreeCredentialSdJwt2 = { id: 'https://openid4vc-issuer.com/credentials/UniversityDegreeCredentialSdJwt2', format: OpenId4VciCredentialFormatProfile.SdJwtVc, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9eead0b120..8e25089ba7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -82,7 +82,7 @@ importers: version: 4.19.2 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@18.18.8)(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4)) + version: 29.7.0(@types/node@18.18.8)(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) prettier: specifier: ^2.3.1 version: 2.8.8 @@ -91,10 +91,10 @@ importers: version: 7.8.1 ts-jest: specifier: ^29.1.2 - version: 29.2.4(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@18.18.8)(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4)))(typescript@5.5.4) + version: 29.2.4(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@18.18.8)(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)))(typescript@5.5.4) ts-node: specifier: ^10.0.0 - version: 10.9.2(@types/node@18.18.8)(typescript@5.5.4) + version: 10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4) tsyringe: specifier: ^4.8.0 version: 4.8.0 @@ -152,7 +152,7 @@ importers: version: 1.7.0 ts-node: specifier: ^10.4.0 - version: 10.9.2(@types/node@18.18.8)(typescript@5.5.4) + version: 10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4) demo-openid: dependencies: @@ -200,8 +200,8 @@ importers: specifier: ^1.5.2 version: 1.7.0 ts-node: - specifier: ^10.4.0 - version: 10.9.2(@types/node@18.18.8)(typescript@5.5.4) + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4) packages/action-menu: dependencies: @@ -433,8 +433,8 @@ importers: specifier: ^1.11.0 version: 1.12.1 '@protokoll/mdoc-client': - specifier: 0.2.27 - version: 0.2.27(typescript@5.5.4) + specifier: 0.2.33 + version: 0.2.33(typescript@5.5.4) '@sd-jwt/core': specifier: ^0.7.0 version: 0.7.2 @@ -455,13 +455,13 @@ importers: version: 0.7.2 '@sphereon/pex': specifier: 5.0.0-unstable.2 - version: 5.0.0-unstable.2(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4)) + version: 5.0.0-unstable.2(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) '@sphereon/pex-models': specifier: ^2.3.1 version: 2.3.1 '@sphereon/ssi-types': specifier: 0.29.1-unstable.121 - version: 0.29.1-unstable.121(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4)) + version: 0.29.1-unstable.121(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) '@stablelib/ed25519': specifier: ^1.0.2 version: 1.0.3 @@ -693,23 +693,23 @@ importers: specifier: workspace:* version: link:../core '@sphereon/did-auth-siop': - specifier: 0.16.1-next.66 - version: 0.16.1-next.66(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4))(typescript@5.5.4) + specifier: 0.16.1-next.168 + version: 0.16.1-next.168(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4))(typescript@5.5.4) '@sphereon/oid4vc-common': - specifier: 0.16.1-next.66 - version: 0.16.1-next.66 + specifier: 0.16.1-next.168 + version: 0.16.1-next.168(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) '@sphereon/oid4vci-client': - specifier: 0.16.1-next.66 - version: 0.16.1-next.66 + specifier: 0.16.1-next.168 + version: 0.16.1-next.168(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) '@sphereon/oid4vci-common': - specifier: 0.16.1-next.66 - version: 0.16.1-next.66 + specifier: 0.16.1-next.168 + version: 0.16.1-next.168(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) '@sphereon/oid4vci-issuer': - specifier: 0.16.1-next.66 - version: 0.16.1-next.66 + specifier: 0.16.1-next.168 + version: 0.16.1-next.168(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) '@sphereon/ssi-types': specifier: 0.29.1-unstable.121 - version: 0.29.1-unstable.121(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4)) + version: 0.29.1-unstable.121(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) class-transformer: specifier: ^0.5.1 version: 0.5.1 @@ -846,7 +846,7 @@ importers: version: 8.5.12 ts-node: specifier: ^10.4.0 - version: 10.9.2(@types/node@18.18.8)(typescript@5.5.4) + version: 10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4) samples/tails: dependencies: @@ -877,7 +877,7 @@ importers: devDependencies: ts-node: specifier: ^10.4.0 - version: 10.9.2(@types/node@18.18.8)(typescript@5.5.4) + version: 10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4) packages: @@ -2332,11 +2332,11 @@ packages: '@protobufjs/utf8@1.1.0': resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} - '@protokoll/core@0.2.27': - resolution: {integrity: sha512-9+SOTmrehKxfb3UJBleplC8tZ99TBZDCqgB54L9JAsApqJqSRVhU/kTm4XWknn7pG5Sq4oUtQifo4Eo2nrmOhw==} + '@protokoll/core@0.2.33': + resolution: {integrity: sha512-cw3vpY7nwhre5t6qBSIKccyZVxdWIMimlnzpuc49PPLWDkjNi13U6mqpqVB4oIoCkGC9SFxpRo+Qu6qansK16g==} - '@protokoll/mdoc-client@0.2.27': - resolution: {integrity: sha512-1z7ZLVgsInGsFW8b+VhhLGZR0rS8emZxXfRTkcZTyePSSpQilT4IoINBTfUeNMj47ANqkMBsgHmZs9UEKNSYSQ==} + '@protokoll/mdoc-client@0.2.33': + resolution: {integrity: sha512-824esPiYei/pH7frwUsASbKHCJOQkFx+zMfabiS8mwRyRVefTnN9C5c54a/34ymP82wmLONpIcCSe2ONmH4yIA==} '@react-native-community/cli-clean@10.1.1': resolution: {integrity: sha512-iNsrjzjIRv9yb5y309SWJ8NDHdwYtnCpmxZouQDyOljUdC9MwdZ4ChbtA4rwQyAwgOVfS9F/j56ML3Cslmvrxg==} @@ -2488,34 +2488,34 @@ packages: resolution: {integrity: sha512-kQpk267uxB19X3X2T1mvNMjyvIEonpNSHrMlK5ZaBU6aZxw7wPbpgKJOjHN3+/GPVpXgAV9soVT2oyHpLkLtyw==} engines: {node: '>= 8'} - '@sphereon/did-auth-siop@0.16.1-next.66': - resolution: {integrity: sha512-B6YVuMnGppkCRJdTVJYW8tn7o6ptinGZeR5ktd4fS8+F6i2GcCE0KEnaxnSBa5+AP9e4JYXNRdiUBlwMEymbZQ==} + '@sphereon/did-auth-siop@0.16.1-next.168': + resolution: {integrity: sha512-m4kqeLErRpa0e7532x1HTfleK6ZzRp9g8ZA/J6QBUk4U/Ktp2zjDSZGFI1sGKHs0giDZiXImKRFy1QByBp1BsA==} engines: {node: '>=18'} '@sphereon/did-uni-client@0.6.3': resolution: {integrity: sha512-g7LD7ofbE36slHN7Bhr5dwUrj6t0BuZeXBYJMaVY/pOeL1vJxW1cZHbZqu0NSfOmzyBg4nsYVlgTjyi/Aua2ew==} - '@sphereon/jarm@0.16.1-next.66': - resolution: {integrity: sha512-TxFwaJ1AKp6gGQpidOMNujYUe1qvOUStwKPwzl2WGDZ00CctDYfTaeD8ySVxqvIk1V9UY33Bztdr8jdD+A/uKg==} + '@sphereon/jarm@0.16.1-next.168': + resolution: {integrity: sha512-5+qEyh4uICYZN8g9gsgWLGsMCwM4GpkIee3T6AXe8+w/DLCOTCh5oqM3YfTOAeQ3Wmg1mXutzFjfJ6Sx3QZIag==} engines: {node: '>=18'} '@sphereon/kmp-mdl-mdoc@0.2.0-SNAPSHOT.22': resolution: {integrity: sha512-uAZZExVy+ug9JLircejWa5eLtAZ7bnBP6xb7DO2+86LRsHNLh2k2jMWJYxp+iWtGHTsh6RYsZl14ScQLvjiQ/A==} - '@sphereon/oid4vc-common@0.16.1-next.66': - resolution: {integrity: sha512-PqMFDMfWHn9jiUxa5k018huQTYxHfYJJstQNyRrle/pV37gv6Lh+yjwML6LE8eUQksw05tfXeq1hk8M2Gl1HWA==} + '@sphereon/oid4vc-common@0.16.1-next.168': + resolution: {integrity: sha512-QKLna4lY3V/0vLguaYa1Qc5L6AErpQ7aD+ITGW8hiVtqU9m/2Y/+wbQqwN8Nk0LnLWDDkBli+KGeZNDJO8g9sQ==} engines: {node: '>=18'} - '@sphereon/oid4vci-client@0.16.1-next.66': - resolution: {integrity: sha512-h5GhZOdYWmWCwqESKCp9qHHuI9ZrdaciKhKTY9LYv98tpFyBjiSYftNIIv1kax4kQFiQHLkrtQlZvfARZ3/QOg==} + '@sphereon/oid4vci-client@0.16.1-next.168': + resolution: {integrity: sha512-+k4AijUOagL+qtrLJcnFLpoPa4zP9jzeu2GQ6nG3AsiKdeAuPvGKx8htiirNqkjZ4Cl2eGQY5QjuDNGQW2CQig==} engines: {node: '>=18'} - '@sphereon/oid4vci-common@0.16.1-next.66': - resolution: {integrity: sha512-Y2PXGEq3jdl/84GXFZZfPCjcxk5k7hx7gAaWQeNue6JTuRQOkiyqD4xPAj+bTOnRo22BuJmU2VAhonFDqlN0Tg==} + '@sphereon/oid4vci-common@0.16.1-next.168': + resolution: {integrity: sha512-Tc5CHp+5s+lGN5QyAA/fvy5iP+QfE4SwQ7jYW/WXLe1sXtr8fTUkEexd63mRRe/YjEXlMFWCnKtK8eHrROaJBA==} engines: {node: '>=18'} - '@sphereon/oid4vci-issuer@0.16.1-next.66': - resolution: {integrity: sha512-qu8IF6fMZbZHMYmekj+755xwgT5NUe6DUFNqHYugRKWaiGiz+e0YzJa18EAUIxNib00U3rWEr9i3SJdectRJQg==} + '@sphereon/oid4vci-issuer@0.16.1-next.168': + resolution: {integrity: sha512-DQxvUEfZo6wakrXqd+zEreQKFWkfnlVfRyQZzNQx/H2GKi3nN2dcjwbmdr+IwepFJMktE7+In5KB7KIZc8zyyA==} engines: {node: '>=18'} peerDependencies: awesome-qr: ^2.1.5-rc.0 @@ -2526,6 +2526,10 @@ packages: '@sphereon/pex-models@2.3.1': resolution: {integrity: sha512-SByU4cJ0XYA6VZQ/L6lsSiRcFtBPHbFioCeQ4GP7/W/jQ+PSBD7uK2oTnKQ9/0iEiMK/6JYqhKgLs4a9UX3UTQ==} + '@sphereon/pex@5.0.0-unstable.18': + resolution: {integrity: sha512-DOKfmfa549RbX8Bqe4yOE2rjZbCQgoRcHO+i01k+gxubgulPPQvY8k0pmFkMFMgVI5fXCjkI3b3PgQ5u/vpGGw==} + engines: {node: '>=18'} + '@sphereon/pex@5.0.0-unstable.2': resolution: {integrity: sha512-mA6lY/OBKKzsh4Jf4btm9Tj4ymVsX6xuVATn85LurD4bt3fhZwNJMkxhFy4tT/QyAtp05E4aaEq0wTVvOjVa7w==} engines: {node: '>=18'} @@ -2533,21 +2537,39 @@ packages: '@sphereon/ssi-sdk-ext.did-utils@0.24.1-unstable.112': resolution: {integrity: sha512-nc0jFPOWg0H20S8m83aQUpNym0Wx0rJCGkgpH6GdK8gBtgza8Y9DvAap1AYZug18WbqPcF6rBjvtIJqAKsSvlQ==} + '@sphereon/ssi-sdk-ext.did-utils@0.24.1-unstable.130': + resolution: {integrity: sha512-I+0VjitRjisABWm8RtTPQG57tFwfUS13Wud30OvBoADRxnaA0guUrkS82AYtV6YD0TBHdrd0D6a0RCJwK9SvDg==} + '@sphereon/ssi-sdk-ext.identifier-resolution@0.24.1-unstable.112': resolution: {integrity: sha512-VBkJjHokFNsQ0wsHUbyCysMuShTOEuK6yrvyW64uOFcB2hzq1J/wi9CewI+YRHv7mnejBlu46uYNycvOKKRcsQ==} + '@sphereon/ssi-sdk-ext.identifier-resolution@0.24.1-unstable.130': + resolution: {integrity: sha512-9mY+qgXmbZCC8aic99R7B3vKBHBakDiC6Sktgd7Q9AknR8cCmvdrmTgnOETrLng9L43uNOJnNTMG/4T6LqmtsA==} + '@sphereon/ssi-sdk-ext.jwt-service@0.24.1-unstable.112': resolution: {integrity: sha512-OrBaSg5wLSehkJ4MyuyDWKD4CRIBERnJqRT0o/y5DbaCF3k02+/lN/rWP+4qwk2w192fIEAExG4L2GwZM/5PLQ==} + '@sphereon/ssi-sdk-ext.jwt-service@0.24.1-unstable.130': + resolution: {integrity: sha512-MHLGRmJODEYJyFoXKwlKMYzf48vS5JcUkGk0W4sqmrY1wwcw+ro3l8adIprG37mNuknXBs9Mv0x/tvibE9wwCQ==} + '@sphereon/ssi-sdk-ext.key-manager@0.24.1-unstable.112': resolution: {integrity: sha512-XdXV4qj+BYTZWyGHduWQxl0mxCYt5CF0Q93p4Thbm2/hjfaAC6aJi2WAXFGTIri95QVbKW1Uscob0CjNCVkWdg==} + '@sphereon/ssi-sdk-ext.key-manager@0.24.1-unstable.130': + resolution: {integrity: sha512-O/6NlKmlYRnEyP/mAI2Diu0qptMSqZfVwqog8KAOG/G8JUmktfSQmclBW8RoJ6AD9uY65BGzNk1oAVuuMv4Dog==} + '@sphereon/ssi-sdk-ext.key-utils@0.24.1-unstable.112': resolution: {integrity: sha512-er6TwGUWxlao2lSP97r1DTFlUXcPSMsIToULOWQJp6wKbvCuvV6pN5luS0qKB/W0/TOUE5kXzFwNx086BPnPRA==} + '@sphereon/ssi-sdk-ext.key-utils@0.24.1-unstable.130': + resolution: {integrity: sha512-DCyXW18g1OAuZ+aFHzQGrbZSx793DX94LSFnrWlOTMnYeILmrizuFksUlWSb3lTqQGAqWBC48NoR3I1H6lSMEQ==} + '@sphereon/ssi-sdk-ext.x509-utils@0.24.1-unstable.112': resolution: {integrity: sha512-bbx2jFoqWhW/xYABVwg3HiUo15yztPt3s+9bJtdB8n4PCjin4Nq3+vFvaHsmu70yAGkbWfsBcBVW6Y3oFtvpAA==} + '@sphereon/ssi-sdk-ext.x509-utils@0.24.1-unstable.130': + resolution: {integrity: sha512-JDX8i0WrwONaOivZXB+OxJQGkln7vuSLS61tOYl7M1RyPGixdBYuEuACsdvWf6egYOpaWmhmXZzaAOj18eDddw==} + '@sphereon/ssi-sdk.agent-config@0.29.1-unstable.161': resolution: {integrity: sha512-ZP/TjapF/Gv/AwnNr9e1U3rjyRwdLtAj4un9j1csnKcgYe9ff2fhYbe06y9mU4tfQilH69mAW4Tz1t6N5U7XbA==} @@ -2560,8 +2582,8 @@ packages: '@sphereon/ssi-types@0.29.1-unstable.161': resolution: {integrity: sha512-ifMADjk6k0f97/isK/4Qw/PX6n4k+qS5k6mmmH47MTD3KMDddVghoXycsvNw7wObJdLUalHBX630ghr+u21oMg==} - '@sphereon/ssi-types@0.29.1-unstable.208': - resolution: {integrity: sha512-3YAFzy//BojsYN+RYoEjndWP3w5a8a3qRZi5dS0Gh6s4yMCiykqTJM1agJVeoaLce8JxFFaCWSpkzwbmJYGTaQ==} + '@sphereon/ssi-types@0.30.1': + resolution: {integrity: sha512-vbYaxQXb71sOPwDj7TRDlUGfIHKVVs8PiHfImPBgSBshrD7VpEHOrB+EwwavMm5MAQvWK/yblGmzk7FHds7SHA==} '@sphereon/ssi-types@0.9.0': resolution: {integrity: sha512-umCr/syNcmvMMbQ+i/r/mwjI1Qw2aFPp9AwBTvTo1ailAVaaJjJGPkkVz1K9/2NZATNdDiQ3A8yGzdVJoKh9pA==} @@ -2629,6 +2651,81 @@ packages: '@stablelib/xchacha20poly1305@1.0.1': resolution: {integrity: sha512-B1Abj0sMJ8h3HNmGnJ7vHBrAvxuNka6cJJoZ1ILN7iuacXp7sUYcgOVEOTLWj+rtQMpspY9tXSCRLPmN1mQNWg==} + '@swc/core-darwin-arm64@1.7.40': + resolution: {integrity: sha512-LRRrCiRJLb1kpQtxMNNsr5W82Inr0dy5Imho+4HQzVx/Ismi0qX4hQBgzJAnyOBNLK1+OBVb/912UVhKXppdfQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + + '@swc/core-darwin-x64@1.7.40': + resolution: {integrity: sha512-Lpl0XK/4fLzS5jsK48opUuGXrqJXwqJckYYPwyGbCfCXm4MsBe+7dX2hq/Kc4YMY25+NeTmzAXhla8TT4WYD/g==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + + '@swc/core-linux-arm-gnueabihf@1.7.40': + resolution: {integrity: sha512-4bEvvjptpoc5BRPr/R419h6fXTEuub+frpxxlxBOEKxgXjAF/S3xdxyPijUAakmW/xXBF0u7OC4KYI+38yQp6g==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + + '@swc/core-linux-arm64-gnu@1.7.40': + resolution: {integrity: sha512-v2fBlHJ/6Ovz0L2xFAI9TRiKyl9DTdx139PuAHD9gyzp16Utl/W0MPd4t2cYdkI6hPXE9PsJCSzMOrduh+YoDg==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-arm64-musl@1.7.40': + resolution: {integrity: sha512-uMkduQuU4LFVkW6txv8AVArT8GjJVJ5IHoWloXaUBMT447iE8NALmpePdZWhMyj6KV7j0y23CM5rzV/I2eNGLg==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-x64-gnu@1.7.40': + resolution: {integrity: sha512-4LZdY1MBSnXyTpW5fpBU/+JGAhkuHT+VnFTDNegRboN5nSPh7y0Yvn4LmIioESV+sWzjKkEXujJPGjrp+oSp5w==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-linux-x64-musl@1.7.40': + resolution: {integrity: sha512-FPjOwT3SgI6PAwH1O8bhOGBPzuvzOlzKeCtxLaCjruHJu9V8KKBrMTWOZT/FJyYC9mX5Ip1+l9j30UqUZdQxtA==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-win32-arm64-msvc@1.7.40': + resolution: {integrity: sha512-//ovXdD9GsTmhPmXJlXnIbRQkeuL6PSrYSr7uCMNcclrUdJG0YkO0GMM2afUKYbdJcunylDDWsSS8PFWn0QxmA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@swc/core-win32-ia32-msvc@1.7.40': + resolution: {integrity: sha512-iD/1auVhHGlhWAPrWmfRWL3w4AvXIWGVXZiSA109/xnRIPiHKb/HqqTp/qB94E/ZHMPRgLKkLTNwamlkueUs8g==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + + '@swc/core-win32-x64-msvc@1.7.40': + resolution: {integrity: sha512-ZlFAV1WFPhhWQ/8esiygmetkb905XIcMMtHRRG0FBGCllO+HVL5nikUaLDgTClz1onmEY9sMXUFQeoPtvliV+w==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@swc/core@1.7.40': + resolution: {integrity: sha512-0HIzM5vigVT5IvNum+pPuST9p8xFhN6mhdIKju7qYYeNuZG78lwms/2d8WgjTJJlzp6JlPguXGrMMNzjQw0qNg==} + engines: {node: '>=10'} + peerDependencies: + '@swc/helpers': '*' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + '@swc/types@0.1.13': + resolution: {integrity: sha512-JL7eeCk6zWCbiYQg2xQSdLXQJl8Qoc9rXmG2cEKvHe3CKwMHwHGpfOb8frzNLmbycOo6I51qxnLnn9ESf4I20Q==} + '@tokenizer/token@0.3.0': resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} @@ -2894,6 +2991,7 @@ packages: '@xmldom/xmldom@0.7.13': resolution: {integrity: sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==} engines: {node: '>=10.0.0'} + deprecated: this version is no longer supported, please update to at least 0.8.* '@xmldom/xmldom@0.8.10': resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} @@ -9497,7 +9595,7 @@ snapshots: jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4))': + '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 @@ -9511,7 +9609,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@18.18.8)(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4)) + jest-config: 29.7.0(@types/node@18.18.8)(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -9926,18 +10024,16 @@ snapshots: '@protobufjs/utf8@1.1.0': {} - '@protokoll/core@0.2.27(typescript@5.5.4)': + '@protokoll/core@0.2.33(typescript@5.5.4)': dependencies: - '@credo-ts/core': link:packages/core - jwt-decode: 4.0.0 valibot: 0.37.0(typescript@5.5.4) transitivePeerDependencies: - typescript - '@protokoll/mdoc-client@0.2.27(typescript@5.5.4)': + '@protokoll/mdoc-client@0.2.33(typescript@5.5.4)': dependencies: '@jfromaniello/typedmap': 1.4.0 - '@protokoll/core': 0.2.27(typescript@5.5.4) + '@protokoll/core': 0.2.33(typescript@5.5.4) cbor-x: 1.6.0 compare-versions: 6.1.1 transitivePeerDependencies: @@ -10293,16 +10389,16 @@ snapshots: '@sovpro/delimited-stream@1.1.0': {} - '@sphereon/did-auth-siop@0.16.1-next.66(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4))(typescript@5.5.4)': + '@sphereon/did-auth-siop@0.16.1-next.168(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4))(typescript@5.5.4)': dependencies: '@astronautlabs/jsonpath': 1.1.2 '@sphereon/did-uni-client': 0.6.3 - '@sphereon/jarm': 0.16.1-next.66(typescript@5.5.4) + '@sphereon/jarm': 0.16.1-next.168(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4))(typescript@5.5.4) '@sphereon/kmp-mdl-mdoc': 0.2.0-SNAPSHOT.22 - '@sphereon/oid4vc-common': 0.16.1-next.66 - '@sphereon/pex': 5.0.0-unstable.2(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4)) + '@sphereon/oid4vc-common': 0.16.1-next.168(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) + '@sphereon/pex': 5.0.0-unstable.18(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) '@sphereon/pex-models': 2.3.1 - '@sphereon/ssi-types': 0.29.1-unstable.121(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4)) + '@sphereon/ssi-types': 0.30.1(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) '@sphereon/wellknown-dids-client': 0.1.3 cross-fetch: 4.0.0 debug: 4.3.6 @@ -10341,12 +10437,30 @@ snapshots: transitivePeerDependencies: - encoding - '@sphereon/jarm@0.16.1-next.66(typescript@5.5.4)': + '@sphereon/jarm@0.16.1-next.168(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4))(typescript@5.5.4)': dependencies: - '@sphereon/oid4vc-common': 0.16.1-next.66 + '@sphereon/oid4vc-common': 0.16.1-next.168(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) valibot: 0.42.1(typescript@5.5.4) transitivePeerDependencies: + - '@google-cloud/spanner' + - '@sap/hana-client' + - better-sqlite3 + - encoding + - hdb-pool + - ioredis + - mongodb + - mssql + - mysql2 + - oracledb + - pg + - pg-native + - pg-query-stream + - redis + - sql.js + - sqlite3 - supports-color + - ts-node + - typeorm-aurora-data-api-driver - typescript '@sphereon/kmp-mdl-mdoc@0.2.0-SNAPSHOT.22': @@ -10355,60 +10469,163 @@ snapshots: '@js-joda/timezone': 2.3.0(@js-joda/core@5.6.3) format-util: 1.0.5 - '@sphereon/oid4vc-common@0.16.1-next.66': + '@sphereon/oid4vc-common@0.16.1-next.168(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4))': dependencies: - '@sphereon/ssi-types': 0.29.1-unstable.208 + '@sphereon/ssi-types': 0.30.1(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) jwt-decode: 4.0.0 sha.js: 2.4.11 uint8arrays: 3.1.1 uuid: 9.0.1 transitivePeerDependencies: + - '@google-cloud/spanner' + - '@sap/hana-client' + - better-sqlite3 + - encoding + - hdb-pool + - ioredis + - mongodb + - mssql + - mysql2 + - oracledb + - pg + - pg-native + - pg-query-stream + - redis + - sql.js + - sqlite3 - supports-color + - ts-node + - typeorm-aurora-data-api-driver - '@sphereon/oid4vci-client@0.16.1-next.66': + '@sphereon/oid4vci-client@0.16.1-next.168(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4))': dependencies: - '@sphereon/oid4vc-common': 0.16.1-next.66 - '@sphereon/oid4vci-common': 0.16.1-next.66 - '@sphereon/ssi-types': 0.29.1-unstable.208 + '@sphereon/oid4vc-common': 0.16.1-next.168(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) + '@sphereon/oid4vci-common': 0.16.1-next.168(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) + '@sphereon/ssi-types': 0.30.1(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) cross-fetch: 3.1.8 debug: 4.3.6 transitivePeerDependencies: + - '@google-cloud/spanner' + - '@sap/hana-client' + - better-sqlite3 - encoding + - hdb-pool + - ioredis + - mongodb + - mssql + - mysql2 + - oracledb + - pg + - pg-native + - pg-query-stream + - redis + - sql.js + - sqlite3 - supports-color + - ts-node + - typeorm-aurora-data-api-driver - '@sphereon/oid4vci-common@0.16.1-next.66': + '@sphereon/oid4vci-common@0.16.1-next.168(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4))': dependencies: - '@sphereon/oid4vc-common': 0.16.1-next.66 - '@sphereon/ssi-types': 0.29.1-unstable.208 + '@sphereon/oid4vc-common': 0.16.1-next.168(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) + '@sphereon/ssi-types': 0.30.1(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) cross-fetch: 3.1.8 debug: 4.3.6 jwt-decode: 4.0.0 uint8arrays: 3.1.1 uuid: 9.0.1 transitivePeerDependencies: + - '@google-cloud/spanner' + - '@sap/hana-client' + - better-sqlite3 - encoding + - hdb-pool + - ioredis + - mongodb + - mssql + - mysql2 + - oracledb + - pg + - pg-native + - pg-query-stream + - redis + - sql.js + - sqlite3 - supports-color + - ts-node + - typeorm-aurora-data-api-driver - '@sphereon/oid4vci-issuer@0.16.1-next.66': + '@sphereon/oid4vci-issuer@0.16.1-next.168(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4))': dependencies: - '@sphereon/oid4vc-common': 0.16.1-next.66 - '@sphereon/oid4vci-common': 0.16.1-next.66 - '@sphereon/ssi-types': 0.29.1-unstable.208 + '@sphereon/oid4vc-common': 0.16.1-next.168(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) + '@sphereon/oid4vci-common': 0.16.1-next.168(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) + '@sphereon/ssi-types': 0.30.1(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) uuid: 9.0.1 transitivePeerDependencies: + - '@google-cloud/spanner' + - '@sap/hana-client' + - better-sqlite3 - encoding + - hdb-pool + - ioredis + - mongodb + - mssql + - mysql2 + - oracledb + - pg + - pg-native + - pg-query-stream + - redis + - sql.js + - sqlite3 - supports-color + - ts-node + - typeorm-aurora-data-api-driver '@sphereon/pex-models@2.3.1': {} - '@sphereon/pex@5.0.0-unstable.2(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4))': + '@sphereon/pex@5.0.0-unstable.18(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4))': + dependencies: + '@astronautlabs/jsonpath': 1.1.2 + '@sd-jwt/decode': 0.7.2 + '@sd-jwt/present': 0.7.2 + '@sd-jwt/types': 0.7.2 + '@sphereon/pex-models': 2.3.1 + '@sphereon/ssi-types': 0.30.1(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + jwt-decode: 3.1.2 + nanoid: 3.3.7 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - '@google-cloud/spanner' + - '@sap/hana-client' + - better-sqlite3 + - encoding + - hdb-pool + - ioredis + - mongodb + - mssql + - mysql2 + - oracledb + - pg + - pg-native + - pg-query-stream + - redis + - sql.js + - sqlite3 + - supports-color + - ts-node + - typeorm-aurora-data-api-driver + + '@sphereon/pex@5.0.0-unstable.2(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4))': dependencies: '@astronautlabs/jsonpath': 1.1.2 '@sd-jwt/decode': 0.6.1 '@sd-jwt/present': 0.6.1 '@sd-jwt/types': 0.6.1 '@sphereon/pex-models': 2.3.1 - '@sphereon/ssi-types': 0.29.1-unstable.121(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4)) + '@sphereon/ssi-types': 0.29.1-unstable.121(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) ajv: 8.17.1 ajv-formats: 2.1.1(ajv@8.17.1) jwt-decode: 3.1.2 @@ -10436,14 +10653,14 @@ snapshots: - ts-node - typeorm-aurora-data-api-driver - '@sphereon/ssi-sdk-ext.did-utils@0.24.1-unstable.112(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4))': + '@sphereon/ssi-sdk-ext.did-utils@0.24.1-unstable.112(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4))': dependencies: '@ethersproject/networks': 5.7.1 '@ethersproject/transactions': 5.7.0 '@sphereon/did-uni-client': 0.6.3 '@sphereon/ssi-sdk-ext.key-utils': 0.24.1-unstable.112 '@sphereon/ssi-sdk-ext.x509-utils': 0.24.1-unstable.112 - '@sphereon/ssi-sdk.agent-config': 0.29.1-unstable.161(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4)) + '@sphereon/ssi-sdk.agent-config': 0.29.1-unstable.161(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) '@sphereon/ssi-sdk.core': 0.29.1-unstable.161 '@sphereon/ssi-types': 0.29.1-unstable.161 '@stablelib/ed25519': 1.0.3 @@ -10474,12 +10691,83 @@ snapshots: - ts-node - typeorm-aurora-data-api-driver - '@sphereon/ssi-sdk-ext.identifier-resolution@0.24.1-unstable.112(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4))': + '@sphereon/ssi-sdk-ext.did-utils@0.24.1-unstable.130(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4))': dependencies: - '@sphereon/ssi-sdk-ext.did-utils': 0.24.1-unstable.112(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4)) + '@ethersproject/networks': 5.7.1 + '@ethersproject/transactions': 5.7.0 + '@sphereon/did-uni-client': 0.6.3 + '@sphereon/ssi-sdk-ext.key-utils': 0.24.1-unstable.130 + '@sphereon/ssi-sdk-ext.x509-utils': 0.24.1-unstable.130 + '@sphereon/ssi-sdk.agent-config': 0.29.1-unstable.161(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) + '@sphereon/ssi-sdk.core': 0.29.1-unstable.161 + '@sphereon/ssi-types': 0.29.1-unstable.161 + '@stablelib/ed25519': 1.0.3 + '@veramo/core': 4.2.0 + '@veramo/utils': 4.2.0 + did-jwt: 6.11.6 + did-resolver: 4.1.0 + elliptic: 6.5.7 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - '@google-cloud/spanner' + - '@sap/hana-client' + - better-sqlite3 + - encoding + - hdb-pool + - ioredis + - mongodb + - mssql + - mysql2 + - oracledb + - pg + - pg-native + - pg-query-stream + - redis + - sql.js + - sqlite3 + - supports-color + - ts-node + - typeorm-aurora-data-api-driver + + '@sphereon/ssi-sdk-ext.identifier-resolution@0.24.1-unstable.112(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4))': + dependencies: + '@sphereon/ssi-sdk-ext.did-utils': 0.24.1-unstable.112(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) '@sphereon/ssi-sdk-ext.key-utils': 0.24.1-unstable.112 '@sphereon/ssi-sdk-ext.x509-utils': 0.24.1-unstable.112 - '@sphereon/ssi-sdk.agent-config': 0.29.1-unstable.161(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4)) + '@sphereon/ssi-sdk.agent-config': 0.29.1-unstable.161(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) + '@sphereon/ssi-types': 0.29.1-unstable.161 + '@veramo/core': 4.2.0 + '@veramo/utils': 4.2.0 + debug: 4.3.6 + pkijs: 3.2.4 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - '@google-cloud/spanner' + - '@sap/hana-client' + - better-sqlite3 + - encoding + - hdb-pool + - ioredis + - mongodb + - mssql + - mysql2 + - oracledb + - pg + - pg-native + - pg-query-stream + - redis + - sql.js + - sqlite3 + - supports-color + - ts-node + - typeorm-aurora-data-api-driver + + '@sphereon/ssi-sdk-ext.identifier-resolution@0.24.1-unstable.130(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4))': + dependencies: + '@sphereon/ssi-sdk-ext.did-utils': 0.24.1-unstable.130(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) + '@sphereon/ssi-sdk-ext.key-utils': 0.24.1-unstable.130 + '@sphereon/ssi-sdk-ext.x509-utils': 0.24.1-unstable.130 + '@sphereon/ssi-sdk.agent-config': 0.29.1-unstable.161(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) '@sphereon/ssi-types': 0.29.1-unstable.161 '@veramo/core': 4.2.0 '@veramo/utils': 4.2.0 @@ -10507,14 +10795,49 @@ snapshots: - ts-node - typeorm-aurora-data-api-driver - '@sphereon/ssi-sdk-ext.jwt-service@0.24.1-unstable.112(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4))': + '@sphereon/ssi-sdk-ext.jwt-service@0.24.1-unstable.112(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4))': dependencies: - '@sphereon/ssi-sdk-ext.did-utils': 0.24.1-unstable.112(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4)) - '@sphereon/ssi-sdk-ext.identifier-resolution': 0.24.1-unstable.112(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4)) + '@sphereon/ssi-sdk-ext.did-utils': 0.24.1-unstable.112(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) + '@sphereon/ssi-sdk-ext.identifier-resolution': 0.24.1-unstable.112(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) '@sphereon/ssi-sdk-ext.key-manager': 0.24.1-unstable.112 '@sphereon/ssi-sdk-ext.key-utils': 0.24.1-unstable.112 '@sphereon/ssi-sdk-ext.x509-utils': 0.24.1-unstable.112 - '@sphereon/ssi-sdk.agent-config': 0.29.1-unstable.161(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4)) + '@sphereon/ssi-sdk.agent-config': 0.29.1-unstable.161(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) + '@sphereon/ssi-types': 0.29.1-unstable.161 + '@veramo/core': 4.2.0 + '@veramo/utils': 4.2.0 + debug: 4.3.6 + jwt-decode: 4.0.0 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - '@google-cloud/spanner' + - '@sap/hana-client' + - better-sqlite3 + - encoding + - hdb-pool + - ioredis + - mongodb + - mssql + - mysql2 + - oracledb + - pg + - pg-native + - pg-query-stream + - redis + - sql.js + - sqlite3 + - supports-color + - ts-node + - typeorm-aurora-data-api-driver + + '@sphereon/ssi-sdk-ext.jwt-service@0.24.1-unstable.130(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4))': + dependencies: + '@sphereon/ssi-sdk-ext.did-utils': 0.24.1-unstable.130(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) + '@sphereon/ssi-sdk-ext.identifier-resolution': 0.24.1-unstable.130(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) + '@sphereon/ssi-sdk-ext.key-manager': 0.24.1-unstable.130 + '@sphereon/ssi-sdk-ext.key-utils': 0.24.1-unstable.130 + '@sphereon/ssi-sdk-ext.x509-utils': 0.24.1-unstable.130 + '@sphereon/ssi-sdk.agent-config': 0.29.1-unstable.161(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) '@sphereon/ssi-types': 0.29.1-unstable.161 '@veramo/core': 4.2.0 '@veramo/utils': 4.2.0 @@ -10550,6 +10873,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@sphereon/ssi-sdk-ext.key-manager@0.24.1-unstable.130': + dependencies: + '@veramo/core': 4.2.0 + '@veramo/key-manager': 4.2.0 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - supports-color + '@sphereon/ssi-sdk-ext.key-utils@0.24.1-unstable.112': dependencies: '@ethersproject/random': 5.7.0 @@ -10572,6 +10903,28 @@ snapshots: transitivePeerDependencies: - supports-color + '@sphereon/ssi-sdk-ext.key-utils@0.24.1-unstable.130': + dependencies: + '@ethersproject/random': 5.7.0 + '@sphereon/ssi-sdk-ext.x509-utils': 0.24.1-unstable.130 + '@sphereon/ssi-types': 0.29.1-unstable.161 + '@stablelib/ed25519': 1.0.3 + '@stablelib/sha256': 1.0.1 + '@stablelib/sha512': 1.0.1 + '@trust/keyto': 1.0.1 + '@veramo/core': 4.2.0 + base64url: 3.0.1 + debug: 4.3.6 + did-resolver: 4.1.0 + elliptic: 6.5.7 + lodash.isplainobject: 4.0.6 + multiformats: 9.9.0 + uint8arrays: 3.1.1 + varint: 6.0.0 + web-encoding: 1.1.5 + transitivePeerDependencies: + - supports-color + '@sphereon/ssi-sdk-ext.x509-utils@0.24.1-unstable.112': dependencies: '@trust/keyto': 1.0.1 @@ -10582,12 +10935,22 @@ snapshots: transitivePeerDependencies: - supports-color - '@sphereon/ssi-sdk.agent-config@0.29.1-unstable.161(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4))': + '@sphereon/ssi-sdk-ext.x509-utils@0.24.1-unstable.130': + dependencies: + '@trust/keyto': 1.0.1 + debug: 4.3.6 + js-x509-utils: 1.0.7 + pkijs: 3.2.4 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@sphereon/ssi-sdk.agent-config@0.29.1-unstable.161(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4))': dependencies: '@veramo/core': 4.2.0 debug: 4.3.6 jsonpointer: 5.0.1 - typeorm: 0.3.20(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4)) + typeorm: 0.3.20(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) url-parse: 1.5.10 yaml: 2.5.0 transitivePeerDependencies: @@ -10622,11 +10985,11 @@ snapshots: - encoding - supports-color - '@sphereon/ssi-types@0.29.1-unstable.121(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4))': + '@sphereon/ssi-types@0.29.1-unstable.121(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4))': dependencies: '@sd-jwt/decode': 0.6.1 '@sphereon/kmp-mdl-mdoc': 0.2.0-SNAPSHOT.22 - '@sphereon/ssi-sdk-ext.jwt-service': 0.24.1-unstable.112(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4)) + '@sphereon/ssi-sdk-ext.jwt-service': 0.24.1-unstable.112(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) debug: 4.3.6 events: 3.3.0 jwt-decode: 3.1.2 @@ -10660,15 +11023,34 @@ snapshots: transitivePeerDependencies: - supports-color - '@sphereon/ssi-types@0.29.1-unstable.208': + '@sphereon/ssi-types@0.30.1(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4))': dependencies: - '@sd-jwt/decode': 0.6.1 + '@sd-jwt/decode': 0.7.2 '@sphereon/kmp-mdl-mdoc': 0.2.0-SNAPSHOT.22 + '@sphereon/ssi-sdk-ext.jwt-service': 0.24.1-unstable.130(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) debug: 4.3.6 events: 3.3.0 jwt-decode: 3.1.2 transitivePeerDependencies: + - '@google-cloud/spanner' + - '@sap/hana-client' + - better-sqlite3 + - encoding + - hdb-pool + - ioredis + - mongodb + - mssql + - mysql2 + - oracledb + - pg + - pg-native + - pg-query-stream + - redis + - sql.js + - sqlite3 - supports-color + - ts-node + - typeorm-aurora-data-api-driver '@sphereon/ssi-types@0.9.0': dependencies: @@ -10771,6 +11153,61 @@ snapshots: '@stablelib/wipe': 1.0.1 '@stablelib/xchacha20': 1.0.1 + '@swc/core-darwin-arm64@1.7.40': + optional: true + + '@swc/core-darwin-x64@1.7.40': + optional: true + + '@swc/core-linux-arm-gnueabihf@1.7.40': + optional: true + + '@swc/core-linux-arm64-gnu@1.7.40': + optional: true + + '@swc/core-linux-arm64-musl@1.7.40': + optional: true + + '@swc/core-linux-x64-gnu@1.7.40': + optional: true + + '@swc/core-linux-x64-musl@1.7.40': + optional: true + + '@swc/core-win32-arm64-msvc@1.7.40': + optional: true + + '@swc/core-win32-ia32-msvc@1.7.40': + optional: true + + '@swc/core-win32-x64-msvc@1.7.40': + optional: true + + '@swc/core@1.7.40': + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.13 + optionalDependencies: + '@swc/core-darwin-arm64': 1.7.40 + '@swc/core-darwin-x64': 1.7.40 + '@swc/core-linux-arm-gnueabihf': 1.7.40 + '@swc/core-linux-arm64-gnu': 1.7.40 + '@swc/core-linux-arm64-musl': 1.7.40 + '@swc/core-linux-x64-gnu': 1.7.40 + '@swc/core-linux-x64-musl': 1.7.40 + '@swc/core-win32-arm64-msvc': 1.7.40 + '@swc/core-win32-ia32-msvc': 1.7.40 + '@swc/core-win32-x64-msvc': 1.7.40 + optional: true + + '@swc/counter@0.1.3': + optional: true + + '@swc/types@0.1.13': + dependencies: + '@swc/counter': 0.1.3 + optional: true + '@tokenizer/token@0.3.0': {} '@trust/keyto@1.0.1': @@ -11973,13 +12410,13 @@ snapshots: long: 4.0.0 protobufjs: 6.11.4 - create-jest@29.7.0(@types/node@18.18.8)(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4)): + create-jest@29.7.0(@types/node@18.18.8)(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@18.18.8)(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4)) + jest-config: 29.7.0(@types/node@18.18.8)(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -12429,7 +12866,7 @@ snapshots: debug: 4.3.6 enhanced-resolve: 5.17.1 eslint: 8.57.0 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) fast-glob: 3.3.2 get-tsconfig: 4.7.6 @@ -12441,7 +12878,7 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + eslint-module-utils@2.8.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0): dependencies: debug: 3.2.7 optionalDependencies: @@ -12462,7 +12899,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.15.0 is-glob: 4.0.3 @@ -13578,16 +14015,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@18.18.8)(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4)): + jest-cli@29.7.0(@types/node@18.18.8)(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4)) + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@18.18.8)(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4)) + create-jest: 29.7.0(@types/node@18.18.8)(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@18.18.8)(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4)) + jest-config: 29.7.0(@types/node@18.18.8)(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -13597,7 +14034,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@18.18.8)(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4)): + jest-config@29.7.0(@types/node@18.18.8)(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)): dependencies: '@babel/core': 7.25.2 '@jest/test-sequencer': 29.7.0 @@ -13623,7 +14060,7 @@ snapshots: strip-json-comments: 3.1.1 optionalDependencies: '@types/node': 18.18.8 - ts-node: 10.9.2(@types/node@18.18.8)(typescript@5.5.4) + ts-node: 10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -13876,12 +14313,12 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@18.18.8)(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4)): + jest@29.7.0(@types/node@18.18.8)(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4)) + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@18.18.8)(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4)) + jest-cli: 29.7.0(@types/node@18.18.8)(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -16011,12 +16448,12 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-jest@29.2.4(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@18.18.8)(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4)))(typescript@5.5.4): + ts-jest@29.2.4(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@18.18.8)(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)))(typescript@5.5.4): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@18.18.8)(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4)) + jest: 29.7.0(@types/node@18.18.8)(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -16030,7 +16467,7 @@ snapshots: '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.25.2) - ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4): + ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -16047,6 +16484,8 @@ snapshots: typescript: 5.5.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.7.40 ts-typed-json@0.3.2: optional: true @@ -16140,7 +16579,7 @@ snapshots: typedarray@0.0.6: {} - typeorm@0.3.20(ts-node@10.9.2(@types/node@18.18.8)(typescript@5.5.4)): + typeorm@0.3.20(ts-node@10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4)): dependencies: '@sqltools/formatter': 1.2.5 app-root-path: 3.1.0 @@ -16158,7 +16597,7 @@ snapshots: uuid: 9.0.1 yargs: 17.7.2 optionalDependencies: - ts-node: 10.9.2(@types/node@18.18.8)(typescript@5.5.4) + ts-node: 10.9.2(@swc/core@1.7.40)(@types/node@18.18.8)(typescript@5.5.4) transitivePeerDependencies: - supports-color