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

55 lines (54 loc) • 3.04 kB
import { CredoError } from "../../../../error/CredoError.mjs"; import { ClassValidationError } from "../../../../error/ClassValidationError.mjs"; import "../../../../error/index.mjs"; import { Jwt } from "../../../../crypto/jose/jwt/Jwt.mjs"; import { W3cV2JwtVerifiableCredential } from "../../jwt-vc/W3cV2JwtVerifiableCredential.mjs"; import { W3cV2DataIntegrityVerifiableCredential } from "../../data-integrity/W3cV2DataIntegrityVerifiableCredential.mjs"; import { W3cV2SdJwtVerifiableCredential } from "../../sd-jwt-vc/W3cV2SdJwtVerifiableCredential.mjs"; import "../../jwt-vc/index.mjs"; import "../../data-integrity/index.mjs"; import "../../sd-jwt-vc/index.mjs"; import { Transform, TransformationType } from "class-transformer"; import { ValidationError } from "class-validator"; //#region src/modules/vc/models/credential/W3cV2VerifiableCredential.ts const decodeW3cV2VerifiableCredential = (v) => { try { if (typeof v !== "string") throw new CredoError("Expected a plain string encoding"); const trimmedValue = v.trim(); try { const parsedJson = JSON.parse(trimmedValue); if (parsedJson && typeof parsedJson === "object" && !Array.isArray(parsedJson)) return new W3cV2DataIntegrityVerifiableCredential({ securedCredential: parsedJson }); } catch {} const issuerSignedCompact = trimmedValue.split("~")[0]; if (issuerSignedCompact !== trimmedValue && Jwt.format.test(issuerSignedCompact)) try { const typ = Jwt.fromSerializedJwt(issuerSignedCompact).header.typ; if (typ === "vp+sd-jwt") throw new CredoError("Value is a W3C SD-JWT VP, but a W3C SD-JWT VC was expected"); if (!typ || typ === "vc+sd-jwt" || typ === "dc+sd-jwt") return W3cV2SdJwtVerifiableCredential.fromCompact(trimmedValue); } catch (error) { if (error instanceof CredoError && error.message.includes("W3C SD-JWT VP")) throw error; } return W3cV2JwtVerifiableCredential.fromCompact(trimmedValue); } catch (error) { if (error instanceof ValidationError || error instanceof ClassValidationError) throw error; throw new CredoError(`Value '${v}' is not a valid W3cV2VerifiableCredential. ${error.message}`); } }; const encodeCredential = (v) => { if (v instanceof W3cV2JwtVerifiableCredential) return v.encoded; if (v instanceof W3cV2SdJwtVerifiableCredential) return v.encoded; if (v instanceof W3cV2DataIntegrityVerifiableCredential) return v.encoded; throw new CredoError(`Value '${v}' is not a valid W3cV2VerifiableCredential`); }; function W3cV2VerifiableCredentialTransformer() { return Transform(({ value, type }) => { if (type === TransformationType.PLAIN_TO_CLASS) return Array.isArray(value) ? value.map(decodeW3cV2VerifiableCredential) : decodeW3cV2VerifiableCredential(value); if (type === TransformationType.CLASS_TO_PLAIN) { if (Array.isArray(value)) return value.map(encodeCredential); return encodeCredential(value); } return value; }); } //#endregion export { W3cV2VerifiableCredentialTransformer, decodeW3cV2VerifiableCredential }; //# sourceMappingURL=W3cV2VerifiableCredential.mjs.map