{"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"}