{"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,aAAa;CAE/C,MAAM,iBAAoC,EACxC,kBAAkB,EAChB,IACD,EACF;AAGD,KAAI,aAAa,UAAU;AACzB,iBAAe,MAAM,aAAa;AAElC,MAAI,OAAO,GAAG,WAAW,SAEvB,QAAO,GAAG;WACD,OAAO,GAAG,WAAW,UAAU;AAExC,UAAO,GAAG,OAAO;AACjB,OAAI,OAAO,KAAK,GAAG,OAAO,CAAC,WAAW,EAEpC,QAAO,GAAG;;;AAMhB,KAAI,aAAa,IAAI;AACnB,iBAAe,MAAM,aAAa;AAElC,SAAO,GAAG;;AAGZ,QAAO,IAAI,WAAW,eAAe;;AAGvC,SAAgB,8BAA8B,YAAwB;AACpE,KAAI,EAAE,QAAQ,WAAW,qBAAqB,CAAC,aAAa,WAAW,iBAAiB,GAAG,CACzF,OAAM,IAAI,WAAW,0CAA0C;CAGjE,MAAM,QAAQ,WAAW,iBAAiB;AAG1C,KAAI,MAAM,MAAM,WAAW,QAAQ,MAAM,GACvC,OAAM,IAAI,WAAW,iCAAiC;AAIxD,KACG,OAAO,MAAM,WAAW,YAAY,WAAW,QAAQ,MAAM,UAC7D,aAAa,MAAM,OAAO,IAAI,MAAM,OAAO,MAAM,WAAW,QAAQ,MAAM,OAAO,GAElF,OAAM,IAAI,WAAW,0CAA0C;CAGjE,MAAM,cAAc;EAClB,GAAG;EACH,IAAI,WAAW;EACf,QAAQ,WAAW;EACpB;AAID,QAFmB,gBAAgB,SAAS,aAAa,gBAAgB"}