{"version":3,"file":"W3cV2VerifiableCredential.mjs","names":[],"sources":["../../../../../src/modules/vc/models/credential/W3cV2VerifiableCredential.ts"],"sourcesContent":["import { Transform, TransformationType } from 'class-transformer'\nimport { ValidationError } from 'class-validator'\nimport { ClassValidationError, CredoError } from '../../../../error'\nimport type { SingleOrArray } from '../../../../types'\nimport { W3cV2JwtVerifiableCredential, type W3cV2JwtVerifiableCredentialOptions } from '../../jwt-vc'\nimport { W3cV2SdJwtVerifiableCredential, type W3cV2SdJwtVerifiableCredentialOptions } from '../../sd-jwt-vc'\nimport { ClaimFormat } from '../ClaimFormat'\n\nconst decodeCredential = (v: unknown) => {\n  try {\n    if (typeof v !== 'string') {\n      throw new CredoError('Expected a plain string encoding')\n    }\n\n    if (v.includes('~')) {\n      return W3cV2SdJwtVerifiableCredential.fromCompact(v)\n    }\n\n    return W3cV2JwtVerifiableCredential.fromCompact(v)\n  } catch (error) {\n    if (error instanceof ValidationError || error instanceof ClassValidationError) {\n      throw error\n    }\n\n    throw new CredoError(`Value '${v}' is not a valid W3cV2VerifiableCredential. ${error.message}`)\n  }\n}\n\nconst encodeCredential = (v: unknown) => {\n  if (v instanceof W3cV2JwtVerifiableCredential) {\n    return v.encoded\n  }\n\n  if (v instanceof W3cV2SdJwtVerifiableCredential) {\n    return v.encoded\n  }\n\n  throw new CredoError(`Value '${v}' is not a valid W3cV2VerifiableCredential`)\n}\n\nexport function W3cV2VerifiableCredentialTransformer() {\n  return Transform(({ value, type }: { value: SingleOrArray<unknown>; type: TransformationType }) => {\n    if (type === TransformationType.PLAIN_TO_CLASS) {\n      return Array.isArray(value) ? value.map(decodeCredential) : decodeCredential(value)\n    }\n\n    if (type === TransformationType.CLASS_TO_PLAIN) {\n      if (Array.isArray(value)) return value.map(encodeCredential)\n      return encodeCredential(value)\n    }\n\n    // PLAIN_TO_PLAIN\n    return value\n  })\n}\n\n/**\n * A Secured W3C Verifiable Credential (VC) as defined in the W3C VC Data Model 2.0\n * and secured according to the VC-JOSE-COSE specification.\n *\n * It can be one of:\n * - A verifiable credential encoded as a JWT.\n * - A verifiable credential encoded as a SD-JWT.\n *\n * @see https://www.w3.org/TR/vc-data-model-2.0/\n * @see https://www.w3.org/TR/vc-jose-cose/\n *\n * TODO: add support for embedded proof mechanisms (Verifiable Credential Data Integrity 1.0)\n */\nexport type W3cV2VerifiableCredential<\n  Format extends ClaimFormat.JwtW3cVc | ClaimFormat.SdJwtW3cVc | unknown = unknown,\n> = Format extends ClaimFormat.JwtVc\n  ? W3cV2JwtVerifiableCredential\n  : Format extends ClaimFormat.SdJwtW3cVc\n    ? W3cV2SdJwtVerifiableCredential\n    : W3cV2JwtVerifiableCredential | W3cV2SdJwtVerifiableCredential\n\nexport type W3cV2VerifiableCredentialOptions<\n  Format extends ClaimFormat.JwtW3cVc | ClaimFormat.SdJwtW3cVc | unknown = unknown,\n> = Format extends ClaimFormat.JwtVc\n  ? W3cV2JwtVerifiableCredentialOptions\n  : Format extends ClaimFormat.SdJwtW3cVc\n    ? W3cV2SdJwtVerifiableCredentialOptions\n    : W3cV2JwtVerifiableCredentialOptions | W3cV2SdJwtVerifiableCredentialOptions\n"],"mappings":";;;;;;;;;;;;;AAQA,MAAM,oBAAoB,MAAe;AACvC,KAAI;AACF,MAAI,OAAO,MAAM,SACf,OAAM,IAAI,WAAW,mCAAmC;AAG1D,MAAI,EAAE,SAAS,IAAI,CACjB,QAAO,+BAA+B,YAAY,EAAE;AAGtD,SAAO,6BAA6B,YAAY,EAAE;UAC3C,OAAO;AACd,MAAI,iBAAiB,mBAAmB,iBAAiB,qBACvD,OAAM;AAGR,QAAM,IAAI,WAAW,UAAU,EAAE,8CAA8C,MAAM,UAAU;;;AAInG,MAAM,oBAAoB,MAAe;AACvC,KAAI,aAAa,6BACf,QAAO,EAAE;AAGX,KAAI,aAAa,+BACf,QAAO,EAAE;AAGX,OAAM,IAAI,WAAW,UAAU,EAAE,4CAA4C;;AAG/E,SAAgB,uCAAuC;AACrD,QAAO,WAAW,EAAE,OAAO,WAAwE;AACjG,MAAI,SAAS,mBAAmB,eAC9B,QAAO,MAAM,QAAQ,MAAM,GAAG,MAAM,IAAI,iBAAiB,GAAG,iBAAiB,MAAM;AAGrF,MAAI,SAAS,mBAAmB,gBAAgB;AAC9C,OAAI,MAAM,QAAQ,MAAM,CAAE,QAAO,MAAM,IAAI,iBAAiB;AAC5D,UAAO,iBAAiB,MAAM;;AAIhC,SAAO;GACP"}