@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
120 lines (119 loc) • 6.37 kB
JavaScript
import { CredoError } from "../../error/CredoError.mjs";
import "../../error/index.mjs";
import { injectable } from "../../plugins/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_V1_URL } from "./constants.mjs";
import "./models/ClaimFormat.mjs";
import { W3cJsonLdVerifiableCredential } from "./linked-data-proofs/models/W3cJsonLdVerifiableCredential.mjs";
import { W3cJwtVerifiableCredential } from "./jwt-vc/W3cJwtVerifiableCredential.mjs";
import { W3cPresentation } from "./models/presentation/W3cPresentation.mjs";
import { W3cJwtVerifiablePresentation } from "./jwt-vc/W3cJwtVerifiablePresentation.mjs";
import { W3cJwtCredentialService } from "./jwt-vc/W3cJwtCredentialService.mjs";
import "./jwt-vc/index.mjs";
import "./models/index.mjs";
import { W3cCredentialRepository } from "./repository/W3cCredentialRepository.mjs";
import "./repository/index.mjs";
import { W3cJsonLdVerifiablePresentation } from "./linked-data-proofs/models/W3cJsonLdVerifiablePresentation.mjs";
import { W3cJsonLdCredentialService } from "./linked-data-proofs/W3cJsonLdCredentialService.mjs";
import "./linked-data-proofs/index.mjs";
//#region src/modules/vc/W3cCredentialService.ts
let W3cCredentialService = class W3cCredentialService {
constructor(w3cCredentialRepository, w3cJsonLdCredentialService, w3cJwtCredentialService) {
this.w3cCredentialRepository = w3cCredentialRepository;
this.w3cJsonLdCredentialService = w3cJsonLdCredentialService;
this.w3cJwtCredentialService = w3cJwtCredentialService;
}
/**
* Signs a credential
*
* @param credential the credential to be signed
* @returns the signed credential
*/
async signCredential(agentContext, options) {
if (options.format === "jwt_vc") return await this.w3cJwtCredentialService.signCredential(agentContext, options);
if (options.format === "ldp_vc") return await this.w3cJsonLdCredentialService.signCredential(agentContext, options);
throw new CredoError(`Unsupported format in options. Format must be either 'jwt_vc' or 'ldp_vc'`);
}
/**
* Verifies the signature(s) of a credential
*/
async verifyCredential(agentContext, options) {
if (options.credential instanceof W3cJsonLdVerifiableCredential) return this.w3cJsonLdCredentialService.verifyCredential(agentContext, options);
if (options.credential instanceof W3cJwtVerifiableCredential || typeof options.credential === "string") return this.w3cJwtCredentialService.verifyCredential(agentContext, options);
throw new CredoError("Unsupported credential type in options. Credential must be either a W3cJsonLdVerifiableCredential or a W3cJwtVerifiableCredential");
}
/**
* Utility method that creates a {@link W3cPresentation} from one or more {@link W3cJsonLdVerifiableCredential}s.
*
* **NOTE: the presentation that is returned is unsigned.**
*
* @returns An instance of {@link W3cPresentation}
*/
async createPresentation(options) {
return new W3cPresentation({
context: [CREDENTIALS_CONTEXT_V1_URL],
type: ["VerifiablePresentation"],
verifiableCredential: options.credentials,
holder: options.holder,
id: options.id
});
}
/**
* Signs a presentation including the credentials it includes
*
* @param presentation the presentation to be signed
* @returns the signed presentation
*/
async signPresentation(agentContext, options) {
if (options.format === "jwt_vp") return await this.w3cJwtCredentialService.signPresentation(agentContext, options);
if (options.format === "ldp_vp") return await this.w3cJsonLdCredentialService.signPresentation(agentContext, options);
throw new CredoError(`Unsupported format in options. Format must be either 'jwt_vp' or 'ldp_vp'`);
}
/**
* Verifies a presentation including the credentials it includes
*
* @param presentation the presentation to be verified
* @returns the verification result
*/
async verifyPresentation(agentContext, options) {
if (options.presentation instanceof W3cJsonLdVerifiablePresentation) return this.w3cJsonLdCredentialService.verifyPresentation(agentContext, options);
if (options.presentation instanceof W3cJwtVerifiablePresentation || typeof options.presentation === "string") return this.w3cJwtCredentialService.verifyPresentation(agentContext, options);
throw new CredoError("Unsupported credential type in options. Presentation must be either a W3cJsonLdVerifiablePresentation or a W3cJwtVerifiablePresentation");
}
/**
* Writes a credential to storage
*
* @param record the credential to be stored
* @returns the credential record that was written to storage
*/
async storeCredential(agentContext, options) {
const credential = options.record.firstCredential;
if (credential instanceof W3cJsonLdVerifiableCredential && !options.record.getTag("expandedTypes")) options.record.setTag("expandedTypes", await this.w3cJsonLdCredentialService.getExpandedTypesForCredential(agentContext, credential));
await this.w3cCredentialRepository.save(agentContext, options.record);
return options.record;
}
async removeCredentialRecord(agentContext, id) {
await this.w3cCredentialRepository.deleteById(agentContext, id);
}
async getAllCredentialRecords(agentContext) {
return await this.w3cCredentialRepository.getAll(agentContext);
}
async getCredentialRecordById(agentContext, id) {
return await this.w3cCredentialRepository.getById(agentContext, id);
}
async findCredentialsByQuery(agentContext, query, queryOptions) {
return (await this.w3cCredentialRepository.findByQuery(agentContext, query, queryOptions)).map((record) => record.firstCredential);
}
async findCredentialRecordByQuery(agentContext, query) {
return (await this.w3cCredentialRepository.findSingleByQuery(agentContext, query))?.firstCredential;
}
};
W3cCredentialService = __decorate([injectable(), __decorateMetadata("design:paramtypes", [
typeof W3cCredentialRepository === "undefined" ? Object : W3cCredentialRepository,
typeof W3cJsonLdCredentialService === "undefined" ? Object : W3cJsonLdCredentialService,
typeof W3cJwtCredentialService === "undefined" ? Object : W3cJwtCredentialService
])], W3cCredentialService);
//#endregion
export { W3cCredentialService };
//# sourceMappingURL=W3cCredentialService.mjs.map