@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
105 lines (104 loc) • 6.63 kB
JavaScript
import { CredoError } from "../../../../error/CredoError.mjs";
import "../../../../error/index.mjs";
import { mapSingleOrArray } from "../../../../utils/array.mjs";
import { JsonTransformer } from "../../../../utils/JsonTransformer.mjs";
import { IsInstanceOrArrayOfInstances, IsNever, IsUri } from "../../../../utils/validators.mjs";
import "../../../../utils/index.mjs";
import __decorateMetadata from "../../../../_virtual/_@oxc-project_runtime@0.151.0/helpers/esm/decorateMetadata.mjs";
import __decorate from "../../../../_virtual/_@oxc-project_runtime@0.151.0/helpers/esm/decorate.mjs";
import { CREDENTIALS_CONTEXT_V2_URL, VERIFIABLE_PRESENTATION_TYPE } from "../../constants.mjs";
import { IsCredentialJsonLdContext, IsVerifiablePresentationType } from "../../validators.mjs";
import { W3cV2DataIntegrityVerifiableCredential } from "../../data-integrity/W3cV2DataIntegrityVerifiableCredential.mjs";
import { W3cV2DataIntegrityVerifiablePresentation } from "../../data-integrity/W3cV2DataIntegrityVerifiablePresentation.mjs";
import { W3cV2EnvelopedVerifiableCredential, isEnvelopedVerifiableCredentialEntry } from "../credential/W3cV2EnvelopedVerifiableCredential.mjs";
import { W3cV2EnvelopedVerifiablePresentation, isEnvelopedVerifiablePresentationEntry } from "./W3cV2EnvelopedVerifiablePresentation.mjs";
import { IsW3cV2Holder, W3cV2Holder, W3cV2HolderTransformer } from "./W3cV2Holder.mjs";
import { Expose, Transform, TransformationType, instanceToPlain } from "class-transformer";
import { IsOptional, ValidateNested } from "class-validator";
//#region src/modules/vc/models/presentation/W3cV2Presentation.ts
var W3cV2Presentation = class {
constructor(options) {
if (options) {
this.id = options.id;
this.context = options.context ?? ["https://www.w3.org/ns/credentials/v2"];
this.type = options.type ?? ["VerifiablePresentation"];
if (options.verifiableCredential) this.verifiableCredential = mapSingleOrArray(options.verifiableCredential, (entry) => {
if (entry instanceof W3cV2EnvelopedVerifiablePresentation || entry instanceof W3cV2DataIntegrityVerifiablePresentation || isEnvelopedVerifiablePresentationEntry(entry) || isEmbeddedDataIntegrityPresentationEntry(entry)) throw new CredoError("Nested verifiable presentation entries are not supported in VC 2.0 presentations.");
if (entry instanceof W3cV2EnvelopedVerifiableCredential || entry instanceof W3cV2DataIntegrityVerifiableCredential) return entry;
if (isEmbeddedDataIntegrityCredential(entry)) return new W3cV2DataIntegrityVerifiableCredential({ securedCredential: entry });
if (isEnvelopedVerifiableCredentialEntry(entry)) return new W3cV2EnvelopedVerifiableCredential(entry);
throw new CredoError("Unsupported verifiableCredential entry shape in W3cV2Presentation.");
});
if (options.holder) this.holder = typeof options.holder === "string" ? options.holder : new W3cV2Holder(options.holder);
}
}
get holderId() {
if (!this.holder) return void 0;
return this.holder instanceof W3cV2Holder ? this.holder.id : this.holder;
}
toJSON() {
return JsonTransformer.toJSON(this);
}
};
__decorate([
Expose({ name: "@context" }),
IsCredentialJsonLdContext({ credentialContext: CREDENTIALS_CONTEXT_V2_URL }),
__decorateMetadata("design:type", typeof Array === "undefined" ? Object : Array)
], W3cV2Presentation.prototype, "context", void 0);
__decorate([
IsOptional(),
IsUri(),
__decorateMetadata("design:type", String)
], W3cV2Presentation.prototype, "id", void 0);
__decorate([IsVerifiablePresentationType(), __decorateMetadata("design:type", Object)], W3cV2Presentation.prototype, "type", void 0);
__decorate([
W3cV2HolderTransformer(),
IsW3cV2Holder(),
IsOptional(),
__decorateMetadata("design:type", Object)
], W3cV2Presentation.prototype, "holder", void 0);
__decorate([
W3cV2PresentationCredentialEntryTransformer(),
IsOptional(),
IsInstanceOrArrayOfInstances({ classType: [W3cV2EnvelopedVerifiableCredential, W3cV2DataIntegrityVerifiableCredential] }),
ValidateNested({ each: true }),
__decorateMetadata("design:type", Object)
], W3cV2Presentation.prototype, "verifiableCredential", void 0);
__decorate([IsNever(), __decorateMetadata("design:type", void 0)], W3cV2Presentation.prototype, "vc", void 0);
__decorate([IsNever(), __decorateMetadata("design:type", void 0)], W3cV2Presentation.prototype, "vp", void 0);
function isEmbeddedDataIntegrityPresentationEntry(value) {
if (!value || typeof value !== "object" || Array.isArray(value)) return false;
if (!("proof" in value) || !("type" in value)) return false;
const candidate = value;
if (Array.isArray(candidate.type)) return candidate.type.includes(VERIFIABLE_PRESENTATION_TYPE);
return candidate.type === VERIFIABLE_PRESENTATION_TYPE;
}
function isEmbeddedDataIntegrityCredential(value) {
if (!value || typeof value !== "object" || Array.isArray(value)) return false;
return "proof" in value;
}
function jsonToCredentialEntry(value) {
if (value instanceof W3cV2EnvelopedVerifiablePresentation || value instanceof W3cV2DataIntegrityVerifiablePresentation || isEnvelopedVerifiablePresentationEntry(value) || isEmbeddedDataIntegrityPresentationEntry(value)) throw new CredoError("Nested verifiable presentation entries are not supported in VC 2.0 presentations.");
if (value instanceof W3cV2EnvelopedVerifiableCredential || value instanceof W3cV2DataIntegrityVerifiableCredential) return value;
if (isEmbeddedDataIntegrityCredential(value)) return new W3cV2DataIntegrityVerifiableCredential({ securedCredential: value });
if (isEnvelopedVerifiableCredentialEntry(value)) return JsonTransformer.fromJSON(value, W3cV2EnvelopedVerifiableCredential);
throw new CredoError("Unsupported verifiableCredential entry shape in W3cV2Presentation.");
}
function credentialEntryToJson(value) {
if (value instanceof W3cV2DataIntegrityVerifiableCredential) return value.securedCredential;
if (value instanceof W3cV2DataIntegrityVerifiablePresentation) return value.securedPresentation;
return instanceToPlain(value);
}
function W3cV2PresentationCredentialEntryTransformer() {
return Transform(({ value, type }) => {
if (type === TransformationType.PLAIN_TO_CLASS) return Array.isArray(value) ? value.map(jsonToCredentialEntry) : jsonToCredentialEntry(value);
if (type === TransformationType.CLASS_TO_PLAIN) {
if (Array.isArray(value)) return value.map(credentialEntryToJson);
return credentialEntryToJson(value);
}
return value;
});
}
//#endregion
export { W3cV2Presentation, W3cV2PresentationCredentialEntryTransformer, isEmbeddedDataIntegrityPresentationEntry };
//# sourceMappingURL=W3cV2Presentation.mjs.map