From fed56d64236ca377eb24308ae2b376145cbb6b4f Mon Sep 17 00:00:00 2001 From: Milena-Czierlinski Date: Thu, 12 Mar 2026 09:47:51 +0100 Subject: [PATCH 1/3] chore: npm audit fix --- package-lock.json | 28 +++------------------------- 1 file changed, 3 insertions(+), 25 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7e88977f8..639fd4f65 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2296,17 +2296,6 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/config-array/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/@eslint/config-array/node_modules/minimatch": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", @@ -2370,17 +2359,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", @@ -14672,9 +14650,9 @@ } }, "node_modules/tar": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.10.tgz", - "integrity": "sha512-8mOPs1//5q/rlkNSPcCegA6hiHJYDmSLEI8aMH/CdSQJNWztHC9WHNam5zdQlfpTwB9Xp7IBEsHfV5LKMJGVAw==", + "version": "7.5.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.11.tgz", + "integrity": "sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { From e5b24a524de5e583e92963bdb7d496d8d989c686 Mon Sep 17 00:00:00 2001 From: Milena-Czierlinski Date: Thu, 12 Mar 2026 09:49:17 +0100 Subject: [PATCH 2/3] test: displayInformation is transferred in PresentationToken --- .../test/consumption/openid4vc.test.ts | 34 ++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/packages/runtime/test/consumption/openid4vc.test.ts b/packages/runtime/test/consumption/openid4vc.test.ts index efc94f675..a98624603 100644 --- a/packages/runtime/test/consumption/openid4vc.test.ts +++ b/packages/runtime/test/consumption/openid4vc.test.ts @@ -1,7 +1,7 @@ import { SdJwtVcRecord } from "@credo-ts/core"; import { EudiploClient } from "@eudiplo/sdk-core"; import { AcceptProposeAttributeRequestItemParametersWithNewAttributeJSON, AcceptShareAuthorizationRequestRequestItemParametersJSON, decodeRecord } from "@nmshd/consumption"; -import { RequestJSON, ShareAuthorizationRequestRequestItemJSON, VerifiableCredentialJSON } from "@nmshd/content"; +import { RequestJSON, ShareAuthorizationRequestRequestItemJSON, VerifiableCredentialJSON, VerifiablePresentation } from "@nmshd/content"; import axios, { AxiosInstance } from "axios"; import * as client from "openid-client"; import path from "path"; @@ -252,6 +252,38 @@ describe("EUDIPLO", () => { const sessionStatus = (await eudiploClient.getSession(sessionId)).status; expect(sessionStatus).toBe("completed"); // in case of failed presentation: Status remains "active" }); + + test("create presentation token", async () => { + const credentialOfferUrl = ( + await eudiploClient.createIssuanceOffer({ + responseType: "uri", + credentialConfigurationIds: [eudiploCredentialConfigurationId], + flow: "pre_authorized_code" + }) + ).uri; + + const resolveCredentialOfferResult = await runtimeServices1.consumption.openId4Vc.resolveCredentialOffer({ credentialOfferUrl }); + const credentialResponsesResult = await runtimeServices1.consumption.openId4Vc.requestCredentials({ + credentialOffer: resolveCredentialOfferResult.value.credentialOffer, + credentialConfigurationIds: [eudiploCredentialConfigurationId] + }); + const storedCredential = ( + await runtimeServices1.consumption.openId4Vc.storeCredentials({ + credentialResponses: credentialResponsesResult.value.credentialResponses + }) + ).value; + expect((storedCredential.content.value as VerifiableCredentialJSON).displayInformation?.[0].name).toBe("test"); + + const presentationTokenResult = await runtimeServices1.consumption.openId4Vc.createPresentationToken({ attributeId: storedCredential.id }); + expect(presentationTokenResult).toBeSuccessful(); + + const presentationTokenContent = presentationTokenResult.value.content; + expect(presentationTokenContent).toBeDefined(); + expect(presentationTokenContent["@type"]).toBe("VerifiablePresentation"); + expect((presentationTokenContent as VerifiablePresentation).value).toBeDefined(); + expect((presentationTokenContent as VerifiablePresentation).displayInformation).toBeDefined(); + expect((presentationTokenContent as VerifiablePresentation).displayInformation![0].name).toBe("test"); + }); }); async function startOid4VcComposeStack() { From 6186d7e4f0a0d62e54e417e0136a98a92baf22a6 Mon Sep 17 00:00:00 2001 From: Milena-Czierlinski Date: Thu, 12 Mar 2026 09:53:21 +0100 Subject: [PATCH 3/3] fix: explicitly hand over type and displayInformation when creating VerifiablePresentation --- packages/consumption/src/modules/openid4vc/local/Holder.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/consumption/src/modules/openid4vc/local/Holder.ts b/packages/consumption/src/modules/openid4vc/local/Holder.ts index 555f8c68b..06e7f9ef7 100644 --- a/packages/consumption/src/modules/openid4vc/local/Holder.ts +++ b/packages/consumption/src/modules/openid4vc/local/Holder.ts @@ -218,8 +218,9 @@ export class Holder extends BaseAgent> }); return VerifiablePresentation.from({ - ...credential, - value: presentation + value: presentation, + type: credential.type, + displayInformation: credential.displayInformation }); }