@credo-ts/core
Version:
<p align="center"> <br /> <img alt="Credo Logo" src="https://github.com/openwallet-foundation/credo-ts/blob/c7886cb8377ceb8ee4efe8d264211e561a75072d/images/credo-logo.png" height="250px" /> </p> <h1 align="center"><b>Credo - Core</b></h1
1 lines • 3.47 kB
Source Map (JSON)
{"version":3,"file":"presentationTransformer.mjs","names":[],"sources":["../../../../src/modules/vc/jwt-vc/presentationTransformer.ts"],"sourcesContent":["import type { JwtPayloadOptions } from '../../../crypto/jose/jwt'\nimport { JwtPayload } from '../../../crypto/jose/jwt'\nimport { CredoError } from '../../../error'\nimport { isJsonObject } from '../../../types'\nimport { JsonTransformer } from '../../../utils'\nimport type { W3cJsonPresentation } from '../models/presentation/W3cJsonPresentation'\nimport { W3cPresentation } from '../models/presentation/W3cPresentation'\n\nexport function getJwtPayloadFromPresentation(presentation: W3cPresentation) {\n const vp = JsonTransformer.toJSON(presentation) as Partial<W3cJsonPresentation>\n\n const payloadOptions: JwtPayloadOptions = {\n additionalClaims: {\n vp,\n },\n }\n\n // Extract `iss` and remove holder id from vp\n if (presentation.holderId) {\n payloadOptions.iss = presentation.holderId\n\n if (typeof vp.holder === 'string') {\n // biome-ignore lint/performance/noDelete: no explanation\n delete vp.holder\n } else if (typeof vp.holder === 'object') {\n // biome-ignore lint/performance/noDelete: no explanation\n delete vp.holder.id\n if (Object.keys(vp.holder).length === 0) {\n // biome-ignore lint/performance/noDelete: no explanation\n delete vp.holder\n }\n }\n }\n\n // Extract `jti` and remove id from vp\n if (presentation.id) {\n payloadOptions.jti = presentation.id\n // biome-ignore lint/performance/noDelete: no explanation\n delete vp.id\n }\n\n return new JwtPayload(payloadOptions)\n}\n\nexport function getPresentationFromJwtPayload(jwtPayload: JwtPayload) {\n if (!('vp' in jwtPayload.additionalClaims) || !isJsonObject(jwtPayload.additionalClaims.vp)) {\n throw new CredoError(\"JWT does not contain a valid 'vp' claim\")\n }\n\n const jwtVp = jwtPayload.additionalClaims.vp\n\n // Validate vp.id and jti\n if (jwtVp.id && jwtPayload.jti !== jwtVp.id) {\n throw new CredoError('JWT jti and vp.id do not match')\n }\n\n // Validate vp.holder and iss\n if (\n (typeof jwtVp.holder === 'string' && jwtPayload.iss !== jwtVp.holder) ||\n (isJsonObject(jwtVp.holder) && jwtVp.holder.id && jwtPayload.iss !== jwtVp.holder.id)\n ) {\n throw new CredoError('JWT iss and vp.holder(.id) do not match')\n }\n\n const dataModelVp = {\n ...jwtVp,\n id: jwtPayload.jti,\n holder: jwtPayload.iss,\n }\n\n const vpInstance = JsonTransformer.fromJSON(dataModelVp, W3cPresentation)\n\n return vpInstance\n}\n"],"mappings":";;;;;;;;;AAQA,SAAgB,8BAA8B,cAA+B;CAC3E,MAAM,KAAK,gBAAgB,OAAO,YAAY;CAE9C,MAAM,iBAAoC,EACxC,kBAAkB,EAChB,GACF,EACF;CAGA,IAAI,aAAa,UAAU;EACzB,eAAe,MAAM,aAAa;EAElC,IAAI,OAAO,GAAG,WAAW,UAEvB,OAAO,GAAG;OACL,IAAI,OAAO,GAAG,WAAW,UAAU;GAExC,OAAO,GAAG,OAAO;GACjB,IAAI,OAAO,KAAK,GAAG,MAAM,CAAC,CAAC,WAAW,GAEpC,OAAO,GAAG;EAEd;CACF;CAGA,IAAI,aAAa,IAAI;EACnB,eAAe,MAAM,aAAa;EAElC,OAAO,GAAG;CACZ;CAEA,OAAO,IAAI,WAAW,cAAc;AACtC;AAEA,SAAgB,8BAA8B,YAAwB;CACpE,IAAI,EAAE,QAAQ,WAAW,qBAAqB,CAAC,aAAa,WAAW,iBAAiB,EAAE,GACxF,MAAM,IAAI,WAAW,yCAAyC;CAGhE,MAAM,QAAQ,WAAW,iBAAiB;CAG1C,IAAI,MAAM,MAAM,WAAW,QAAQ,MAAM,IACvC,MAAM,IAAI,WAAW,gCAAgC;CAIvD,IACG,OAAO,MAAM,WAAW,YAAY,WAAW,QAAQ,MAAM,UAC7D,aAAa,MAAM,MAAM,KAAK,MAAM,OAAO,MAAM,WAAW,QAAQ,MAAM,OAAO,IAElF,MAAM,IAAI,WAAW,yCAAyC;CAGhE,MAAM,cAAc;EAClB,GAAG;EACH,IAAI,WAAW;EACf,QAAQ,WAAW;CACrB;CAIA,OAFmB,gBAAgB,SAAS,aAAa,eAEzC;AAClB"}