@animo-id/pex
Version:
A Typescript implementation of the v1 and v2 DIF Presentation Exchange specification
136 lines • 11.7 kB
JavaScript
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdGlvbkNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9ldmFsdWF0aW9uL2V2YWx1YXRpb25DbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWpELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QyxPQUFPLFdBQVcsTUFBTSxtQkFBbUIsQ0FBQztBQUU1QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHckUsT0FBTyxFQUNMLCtCQUErQixFQUUvQixrQ0FBa0MsRUFDbEMsc0NBQXNDLEVBQ3RDLGdDQUFnQyxFQUNoQyxrQ0FBa0MsRUFDbEMsc0NBQXNDLEVBQ3RDLDRCQUE0QixFQUM1QixnQ0FBZ0MsRUFDaEMsZ0NBQWdDLEVBQ2hDLG9CQUFvQixHQUNyQixNQUFNLFlBQVksQ0FBQztBQUVwQixNQUFNLDhCQUE4QixHQUFHO0lBQ3JDLFVBQVUsQ0FBQyx3QkFBd0I7SUFDbkMscUNBQXFDO0lBQ3JDLG1DQUFtQztDQUNwQyxDQUFDO0FBRUYsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQjtRQUNFLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLCtCQUErQixHQUFHLDhCQUE4QixDQUFDO1FBQ3RFLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLCtCQUErQixHQUFHLElBQUksQ0FBQztJQUM5QyxDQUFDO0lBRU8sY0FBYyxHQUFHO1FBQ3ZCLEdBQUcsRUFBRSxNQUFNO1FBQ1gs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