{"version":3,"file":"W3cV2Presentation.mjs","names":[],"sources":["../../../../../src/modules/vc/models/presentation/W3cV2Presentation.ts"],"sourcesContent":["import { Expose } from 'class-transformer'\nimport { IsOptional, ValidateNested } from 'class-validator'\nimport type { JsonObject, SingleOrArray } from '../../../../types'\nimport { JsonTransformer, mapSingleOrArray } from '../../../../utils'\nimport { IsInstanceOrArrayOfInstances, IsNever, IsUri } from '../../../../utils/validators'\nimport { CREDENTIALS_CONTEXT_V2_URL, VERIFIABLE_PRESENTATION_TYPE } from '../../constants'\nimport { IsCredentialJsonLdContext, IsVerifiablePresentationType } from '../../validators'\nimport {\n  W3cV2EnvelopedVerifiableCredential,\n  type W3cV2EnvelopedVerifiableCredentialOptions,\n  W3cV2EnvelopedVerifiableCredentialTransformer,\n} from '../credential/W3cV2EnvelopedVerifiableCredential'\nimport { IsW3cV2Holder, W3cV2Holder, type W3cV2HolderOptions, W3cV2HolderTransformer } from './W3cV2Holder'\nimport type { W3cV2JsonPresentation } from './W3cV2JsonPresentation'\n\nexport interface W3cV2PresentationOptions {\n  id?: string\n  context?: Array<string | JsonObject>\n  type?: SingleOrArray<string>\n  // TODO: eventually add support for Verifiable Credentials with embedded proofs.\n  verifiableCredential: SingleOrArray<W3cV2EnvelopedVerifiableCredentialOptions>\n  holder?: string | W3cV2HolderOptions\n}\n\nexport class W3cV2Presentation {\n  public constructor(options: W3cV2PresentationOptions) {\n    if (options) {\n      this.id = options.id\n      this.context = options.context ?? [CREDENTIALS_CONTEXT_V2_URL]\n      this.type = options.type ?? [VERIFIABLE_PRESENTATION_TYPE]\n      this.verifiableCredential = mapSingleOrArray(\n        options.verifiableCredential,\n        (options) => new W3cV2EnvelopedVerifiableCredential(options)\n      )\n\n      if (options.holder) {\n        this.holder = typeof options.holder === 'string' ? options.holder : new W3cV2Holder(options.holder)\n      }\n    }\n  }\n\n  @Expose({ name: '@context' })\n  @IsCredentialJsonLdContext({ credentialContext: CREDENTIALS_CONTEXT_V2_URL })\n  public context!: Array<string | JsonObject>\n\n  @IsOptional()\n  @IsUri()\n  public id?: string\n\n  @IsVerifiablePresentationType()\n  public type!: SingleOrArray<string>\n\n  @W3cV2HolderTransformer()\n  @IsW3cV2Holder()\n  @IsOptional()\n  public holder?: string | W3cV2Holder\n\n  @W3cV2EnvelopedVerifiableCredentialTransformer()\n  @IsInstanceOrArrayOfInstances({ classType: W3cV2EnvelopedVerifiableCredential })\n  @ValidateNested({ each: true })\n  public verifiableCredential!: SingleOrArray<W3cV2EnvelopedVerifiableCredential>\n\n  @IsNever()\n  public vc?: never\n\n  @IsNever()\n  public vp?: never\n\n  public get holderId(): string | undefined {\n    if (!this.holder) return undefined\n\n    return this.holder instanceof W3cV2Holder ? this.holder.id : this.holder\n  }\n\n  public toJSON() {\n    return JsonTransformer.toJSON(this) as W3cV2JsonPresentation\n  }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAwBA,IAAa,oBAAb,MAA+B;CAC7B,AAAO,YAAY,SAAmC;AACpD,MAAI,SAAS;AACX,QAAK,KAAK,QAAQ;AAClB,QAAK,UAAU,QAAQ,WAAW,CAAC,2BAA2B;AAC9D,QAAK,OAAO,QAAQ,QAAQ,CAAC,6BAA6B;AAC1D,QAAK,uBAAuB,iBAC1B,QAAQ,uBACP,YAAY,IAAI,mCAAmC,QAAQ,CAC7D;AAED,OAAI,QAAQ,OACV,MAAK,SAAS,OAAO,QAAQ,WAAW,WAAW,QAAQ,SAAS,IAAI,YAAY,QAAQ,OAAO;;;CAgCzG,IAAW,WAA+B;AACxC,MAAI,CAAC,KAAK,OAAQ,QAAO;AAEzB,SAAO,KAAK,kBAAkB,cAAc,KAAK,OAAO,KAAK,KAAK;;CAGpE,AAAO,SAAS;AACd,SAAO,gBAAgB,OAAO,KAAK;;;;CAlCpC,OAAO,EAAE,MAAM,YAAY,CAAC;CAC5B,0BAA0B,EAAE,mBAAmB,4BAA4B,CAAC;;;;CAG5E,YAAY;CACZ,OAAO;;;YAGP,8BAA8B;;CAG9B,wBAAwB;CACxB,eAAe;CACf,YAAY;;;;CAGZ,+CAA+C;CAC/C,6BAA6B,EAAE,WAAW,oCAAoC,CAAC;CAC/E,eAAe,EAAE,MAAM,MAAM,CAAC;;;YAG9B,SAAS;YAGT,SAAS"}