From e4f859a1164e63a34f93c66a992d353e14412206 Mon Sep 17 00:00:00 2001 From: Matthew Raymer <matthew.raymer@anomalistdesign.com> Date: Wed, 28 May 2025 10:41:39 +0000 Subject: [PATCH] fix: update offerGiverDid to use credentialSubject.offeredBy The offerGiverDid function was looking for offeredBy at the root level of the OfferVerifiableCredential, but it was moved to credentialSubject in our interface changes. This fix updates the function to look in the correct location while maintaining the same fallback behavior of using the issuer if offeredBy is not available. - Update path from claim.offeredBy to claim.credentialSubject.offeredBy - Remove unnecessary string type cast - Keep issuer fallback behavior unchanged --- src/interfaces/claims.ts | 65 ++++++++++++++++++++++++++++++++++++++-- src/libs/util.ts | 6 ++-- 2 files changed, 65 insertions(+), 6 deletions(-) diff --git a/src/interfaces/claims.ts b/src/interfaces/claims.ts index b5ad2663..cec47b95 100644 --- a/src/interfaces/claims.ts +++ b/src/interfaces/claims.ts @@ -9,7 +9,6 @@ export interface AgreeVerifiableCredential { // Note that previous VCs may have additional fields. // https://endorser.ch/doc/html/transactions.html#id4 export interface GiveVerifiableCredential extends GenericVerifiableCredential { - "@context"?: string; "@type": "GiveAction"; agent?: { identifier: string }; description?: string; @@ -19,14 +18,45 @@ export interface GiveVerifiableCredential extends GenericVerifiableCredential { object?: { amountOfThisGood: number; unitCode: string }; provider?: GenericVerifiableCredential; recipient?: { identifier: string }; + type: string[]; + issuer: string; + issuanceDate: string; + credentialSubject: { + id: string; + type: "GiveAction"; + offeredBy?: { + type: "Person"; + identifier: string; + }; + offeredTo?: { + type: "Person"; + identifier: string; + }; + offeredToProject?: { + type: "Project"; + identifier: string; + }; + offeredToProjectVisibleToDids?: string[]; + offeredToVisibleToDids?: string[]; + offeredByVisibleToDids?: string[]; + amount: { + type: "QuantitativeValue"; + value: number; + unitCode: string; + }; + startTime?: string; + endTime?: string; + }; } // Note that previous VCs may have additional fields. // https://endorser.ch/doc/html/transactions.html#id8 export interface OfferVerifiableCredential extends GenericVerifiableCredential { - "@context"?: string; "@type": "Offer"; description?: string; + fulfills?: { "@type": string; identifier?: string; lastClaimId?: string }[]; + identifier?: string; + image?: string; includesObject?: { amountOfThisGood: number; unitCode: string }; itemOffered?: { description?: string; @@ -37,9 +67,38 @@ export interface OfferVerifiableCredential extends GenericVerifiableCredential { name?: string; }; }; - offeredBy?: { identifier: string }; + provider?: GenericVerifiableCredential; recipient?: { identifier: string }; validThrough?: string; + type: string[]; + issuer: string; + issuanceDate: string; + credentialSubject: { + id: string; + type: "Offer"; + offeredBy?: { + type: "Person"; + identifier: string; + }; + offeredTo?: { + type: "Person"; + identifier: string; + }; + offeredToProject?: { + type: "Project"; + identifier: string; + }; + offeredToProjectVisibleToDids?: string[]; + offeredToVisibleToDids?: string[]; + offeredByVisibleToDids?: string[]; + amount: { + type: "QuantitativeValue"; + value: number; + unitCode: string; + }; + startTime?: string; + endTime?: string; + }; } // Note that previous VCs may have additional fields. diff --git a/src/libs/util.ts b/src/libs/util.ts index ca719625..ffb5dadf 100644 --- a/src/libs/util.ts +++ b/src/libs/util.ts @@ -389,10 +389,10 @@ export function offerGiverDid( let giver; const claim = veriClaim.claim as OfferVerifiableCredential; if ( - claim.offeredBy?.identifier && - !serverUtil.isHiddenDid(claim.offeredBy.identifier as string) + claim.credentialSubject.offeredBy?.identifier && + !serverUtil.isHiddenDid(claim.credentialSubject.offeredBy.identifier) ) { - giver = claim.offeredBy.identifier; + giver = claim.credentialSubject.offeredBy.identifier; } else if (veriClaim.issuer && !serverUtil.isHiddenDid(veriClaim.issuer)) { giver = veriClaim.issuer; }