UNPKG

@animo-id/pex

Version:

A Typescript implementation of the v1 and v2 DIF Presentation Exchange specification

136 lines 11.7 kB
import { IProofType } from '@sphereon/ssi-types'; import { Status } from '../ConstraintUtils'; import PexMessages from '../types/Messages'; import { filterToRestrictedDIDs, uniformDIDMethods } from '../utils'; import { DIDRestrictionEvaluationHandler, FormatRestrictionEvaluationHandler, InputDescriptorFilterEvaluationHandler, LimitDisclosureEvaluationHandler, MarkForSubmissionEvaluationHandler, PredicateRelatedFieldEvaluationHandler, SameSubjectEvaluationHandler, SubjectIsHolderEvaluationHandler, SubjectIsIssuerEvaluationHandler, UriEvaluationHandler, } from './handlers'; const DEFAULT_LIMIT_DISCLOSURE_TYPES = [ IProofType.BbsBlsSignatureProof2020, 'DataIntegrityProof.anoncredsvc-2023', 'DataIntegrityProof.anoncreds-2023', ]; export class EvaluationClient { constructor() { this._results = []; this._wrappedVcs = []; this._presentationSubmission = {}; this._dids = []; this._limitDisclosureSignatureSuites = DEFAULT_LIMIT_DISCLOSURE_TYPES; this._restrictToDIDMethods = []; this._generatePresentationSubmission = true; } failed_catched = { tag: 'root', status: Status.ERROR, message: PexMessages.UNKNOWN_EXCEPTION, stacktrace: '', }; _results; _wrappedVcs; _presentationSubmission; // private _requirePresentationSubmission: boolean; _dids; _limitDisclosureSignatureSuites; _restrictToFormats; _restrictToDIDMethods; _generatePresentationSubmission; evaluate(pd, wvcs, opts) { this._restrictToDIDMethods = opts?.restrictToDIDMethods ? uniformDIDMethods(opts?.restrictToDIDMethods) : []; this._dids = opts?.holderDIDs ? filterToRestrictedDIDs(opts.holderDIDs, this._restrictToDIDMethods) : []; this._limitDisclosureSignatureSuites = opts?.limitDisclosureSignatureSuites; this._restrictToFormats = opts?.restrictToFormats; this._generatePresentationSubmission = opts?.generatePresentationSubmission !== undefined ? opts.generatePresentationSubmission : true; if (opts?.presentationSubmission) { this._presentationSubmission = opts.presentationSubmission; } let currentHandler = this.initEvaluationHandlers(); currentHandler?.handle(pd, wvcs); while (currentHandler?.hasNext()) { currentHandler = currentHandler.getNext(); try { currentHandler?.handle(pd, wvcs); } catch (e) { this.failed_catched.message += e.message; this.failed_catched.stacktrace = e; throw this.failed_catched; } } // filter the presentation submission this.presentationSubmission = { ...this.presentationSubmission, descriptor_map: this.presentationSubmission.descriptor_map.filter((d) => d), }; } get results() { return this._results; } get dids() { return this._dids; } set dids(dids) { this._dids = dids; } assertPresentationSubmission() { if (typeof this._presentationSubmission === 'string') { console.log('Presentation submission present, but as string not object. External calls did not follow contract. Correcting'); this._presentationSubmission = JSON.parse(this._presentationSubmission); } if (!this.generatePresentationSubmission && (!this.presentationSubmission || Object.keys(this.presentationSubmission).length === 0)) { throw Error('No presentation submission present, but required option was set'); } } get generatePresentationSubmission() { return this._generatePresentationSubmission; } set generatePresentationSubmission(value) { this._generatePresentationSubmission = value; } get presentationSubmission() { return this._presentationSubmission; } set presentationSubmission(presentationSubmission) { this._presentationSubmission = presentationSubmission; } get wrappedVcs() { return this._wrappedVcs; } set wrappedVcs(wrappedVcs) { this._wrappedVcs = wrappedVcs; } get limitDisclosureSignatureSuites() { return this._limitDisclosureSignatureSuites || DEFAULT_LIMIT_DISCLOSURE_TYPES; } set limitDisclosureSignatureSuites(limitDisclosureSignatureSuites) { this._limitDisclosureSignatureSuites = limitDisclosureSignatureSuites; } get restrictToDIDMethods() { return this._restrictToDIDMethods; } set restrictToDIDMethods(value) { this._restrictToDIDMethods = uniformDIDMethods(value); } hasRestrictToDIDMethods() { return this.restrictToDIDMethods && this.restrictToDIDMethods.length > 0; } get restrictToFormats() { return this._restrictToFormats; } set restrictToFormats(value) { this._restrictToFormats = value; } initEvaluationHandlers() { const uriEvaluation = new UriEvaluationHandler(this); uriEvaluation .setNext(new DIDRestrictionEvaluationHandler(this)) .setNext(new FormatRestrictionEvaluationHandler(this)) .setNext(new InputDescriptorFilterEvaluationHandler(this)) .setNext(new PredicateRelatedFieldEvaluationHandler(this)) .setNext(new LimitDisclosureEvaluationHandler(this)) .setNext(new SubjectIsIssuerEvaluationHandler(this)) .setNext(new SubjectIsHolderEvaluationHandler(this)) .setNext(new SameSubjectEvaluationHandler(this)) .setNext(new MarkForSubmissionEvaluationHandler(this)); return uriEvaluation; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdGlvbkNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9ldmFsdWF0aW9uL2V2YWx1YXRpb25DbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWpELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QyxPQUFPLFdBQVcsTUFBTSxtQkFBbUIsQ0FBQztBQUU1QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHckUsT0FBTyxFQUNMLCtCQUErQixFQUUvQixrQ0FBa0MsRUFDbEMsc0NBQXNDLEVBQ3RDLGdDQUFnQyxFQUNoQyxrQ0FBa0MsRUFDbEMsc0NBQXNDLEVBQ3RDLDRCQUE0QixFQUM1QixnQ0FBZ0MsRUFDaEMsZ0NBQWdDLEVBQ2hDLG9CQUFvQixHQUNyQixNQUFNLFlBQVksQ0FBQztBQUVwQixNQUFNLDhCQUE4QixHQUFHO0lBQ3JDLFVBQVUsQ0FBQyx3QkFBd0I7SUFDbkMscUNBQXFDO0lBQ3JDLG1DQUFtQztDQUNwQyxDQUFDO0FBRUYsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQjtRQUNFLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLCtCQUErQixHQUFHLDhCQUE4QixDQUFDO1FBQ3RFLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLCtCQUErQixHQUFHLElBQUksQ0FBQztJQUM5QyxDQUFDO0lBRU8sY0FBYyxHQUFHO1FBQ3ZCLEdBQUcsRUFBRSxNQUFNO1FBQ1gsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLO1FBQ3BCLE9BQU8sRUFBRSxXQUFXLENBQUMsaUJBQTJCO1FBQ2hELFVBQVUsRUFBRSxFQUFFO0tBQ2YsQ0FBQztJQUVNLFFBQVEsQ0FBdUI7SUFDL0IsV0FBVyxDQUF5QztJQUNwRCx1QkFBdUIsQ0FBa0M7SUFDakUsbURBQW1EO0lBQzNDLEtBQUssQ0FBVztJQUNoQiwrQkFBK0IsQ0FBdUI7SUFDdEQsa0JBQWtCLENBQXFCO0lBQ3ZDLHFCQUFxQixDQUFXO0lBRWhDLCtCQUErQixDQUFVO0lBRTFDLFFBQVEsQ0FDYixFQUFtQyxFQUNuQyxJQUFtQyxFQUNuQyxJQU9DO1FBRUQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM3RyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN6RyxJQUFJLENBQUMsK0JBQStCLEdBQUcsSUFBSSxFQUFFLDhCQUE4QixDQUFDO1FBQzVFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLEVBQUUsaUJBQWlCLENBQUM7UUFDbEQsSUFBSSxDQUFDLCtCQUErQixHQUFHLElBQUksRUFBRSw4QkFBOEIsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3ZJLElBQUksSUFBSSxFQUFFLHNCQUFzQixFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsSUFBSSxjQUFjLEdBQWtDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ2xGLGNBQWMsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sY0FBYyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDakMsY0FBYyxHQUFHLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUM7Z0JBQ0gsY0FBYyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbkMsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLElBQUssQ0FBVyxDQUFDLE9BQU8sQ0FBQztnQkFDcEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEdBQUcsQ0FBVyxDQUFDO2dCQUM3QyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUM7UUFFRCxxQ0FBcUM7UUFDckMsSUFBSSxDQUFDLHNCQUFzQixHQUFHO1lBQzVCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQjtZQUM5QixjQUFjLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUM1RSxDQUFDO0lBQ0osQ0FBQztJQUVELElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQVcsSUFBSTtRQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBVyxJQUFJLENBQUMsSUFBYztRQUM1QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztJQUNwQixDQUFDO0lBRU0sNEJBQTRCO1FBQ2pDLElBQUksT0FBTyxJQUFJLENBQUMsdUJBQXVCLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDckQsT0FBTyxDQUFDLEdBQUcsQ0FBQywrR0FBK0csQ0FBQyxDQUFDO1lBQzdILElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzFFLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLDhCQUE4QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNwSSxNQUFNLEtBQUssQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDO1FBQ2pGLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSw4QkFBOEI7UUFDaEMsT0FBTyxJQUFJLENBQUMsK0JBQStCLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQUksOEJBQThCLENBQUMsS0FBYztRQUMvQyxJQUFJLENBQUMsK0JBQStCLEdBQUcsS0FBSyxDQUFDO0lBQy9DLENBQUM7SUFFRCxJQUFXLHNCQUFzQjtRQUMvQixPQUFPLElBQUksQ0FBQyx1QkFBaUQsQ0FBQztJQUNoRSxDQUFDO0lBRUQsSUFBVyxzQkFBc0IsQ0FBQyxzQkFBdUQ7UUFDdkYsSUFBSSxDQUFDLHVCQUF1QixHQUFHLHNCQUFzQixDQUFDO0lBQ3hELENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBNEMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsSUFBVyxVQUFVLENBQUMsVUFBeUM7UUFDN0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQVcsOEJBQThCO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLCtCQUErQixJQUFJLDhCQUE4QixDQUFDO0lBQ2hGLENBQUM7SUFFRCxJQUFXLDhCQUE4QixDQUFDLDhCQUF3QztRQUNoRixJQUFJLENBQUMsK0JBQStCLEdBQUcsOEJBQThCLENBQUM7SUFDeEUsQ0FBQztJQUVELElBQUksb0JBQW9CO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDO0lBQ3BDLENBQUM7SUFFRCxJQUFJLG9CQUFvQixDQUFDLEtBQWU7UUFDdEMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFTSx1QkFBdUI7UUFDNUIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFJLGlCQUFpQixDQUFDLEtBQXlCO1FBQzdDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7SUFDbEMsQ0FBQztJQUNPLHNCQUFzQjtRQUM1QixNQUFNLGFBQWEsR0FBRyxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JELGFBQWE7YUFDVixPQUFPLENBQUMsSUFBSSwrQkFBK0IsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNsRCxPQUFPLENBQUMsSUFBSSxrQ0FBa0MsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNyRCxPQUFPLENBQUMsSUFBSSxzQ0FBc0MsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN6RCxPQUFPLENBQUMsSUFBSSxzQ0FBc0MsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN6RCxPQUFPLENBQUMsSUFBSSxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNuRCxPQUFPLENBQUMsSUFBSSxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNuRCxPQUFPLENBQUMsSUFBSSxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNuRCxPQUFPLENBQUMsSUFBSSw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMvQyxPQUFPLENBQUMsSUFBSSxrQ0FBa0MsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRXpELE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7Q0FDRiJ9