UNPKG

@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.96 kB
{"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"}