@animo-id/pex
Version:
A Typescript implementation of the v1 and v2 DIF Presentation Exchange specification
121 lines • 12.4 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.PredicateRelatedFieldEvaluationHandler = void 0;
const pex_models_1 = require("@sphereon/pex-models");
const ConstraintUtils_1 = require("../../ConstraintUtils");
const Messages_1 = __importDefault(require("../../types/Messages"));
const abstractEvaluationHandler_1 = require("./abstractEvaluationHandler");
class PredicateRelatedFieldEvaluationHandler extends abstractEvaluationHandler_1.AbstractEvaluationHandler {
constructor(client) {
super(client);
}
getName() {
return 'PredicateRelatedFieldEvaluation';
}
handle(pd) {
// PresentationDefinitionV2 is the common denominator
pd.input_descriptors.forEach((inDesc, index) => {
if (inDesc.constraints) {
this.examinePredicateRelatedField(index, inDesc.constraints);
}
});
this.updatePresentationSubmission(pd);
}
examinePredicateRelatedField(input_descriptor_idx, constraints) {
if (constraints === null || constraints === void 0 ? void 0 : constraints.fields) {
for (let i = 0; i < constraints.fields.length; i++) {
for (let j = 0; j < this.getResults().length; j++) {
this.examinePredicateForFilterEvaluationResult(this.getResults(), j, input_descriptor_idx, constraints, i);
}
}
}
}
examinePredicateForFilterEvaluationResult(results, resultIdx, input_descriptor_idx, constraints, fieldIdx) {
var _a, _b, _c;
const resultInputDescriptorIdx = this.retrieveResultInputDescriptorIdx(results[resultIdx].input_descriptor_path);
if (results[resultIdx].payload &&
results[resultIdx].payload.result &&
results[resultIdx].payload.result.path &&
results[resultIdx].evaluator === 'FilterEvaluation' &&
input_descriptor_idx === resultInputDescriptorIdx &&
constraints &&
constraints.fields &&
constraints.fields[fieldIdx] &&
constraints.fields[fieldIdx].predicate &&
constraints.fields[fieldIdx].path &&
((_a = constraints.fields[fieldIdx].path) === null || _a === void 0 ? void 0 : _a.includes(this.concatenatePath(results[resultIdx].payload.result.path)))) {
const field = constraints.fields[fieldIdx];
const evaluationResult = Object.assign({}, results[resultIdx].payload.result);
// We only support number with minimum/maximum for predicate type
if ((((_b = field.filter) === null || _b === void 0 ? void 0 : _b.type) !== 'number' && ((_c = field.filter) === null || _c === void 0 ? void 0 : _c.type) !== 'integer') ||
(!field.filter.minimum && !field.filter.exclusiveMinimum && !field.filter.maximum && !field.filter.exclusiveMaximum)) {
results.push(this.createErrorResultObject(input_descriptor_idx, resultIdx, evaluationResult, results, "Only 'number' and 'integer' predicate with 'minimum', 'exclusiveMinimum', 'maximum', or 'exclusiveMaximum' supported."));
return;
}
if (evaluationResult.value === true) {
const resultObject = this.createResultObject(input_descriptor_idx, resultIdx, evaluationResult, results);
results.push(resultObject);
}
else if (field.predicate === pex_models_1.Optionality.Required) {
const resultObject = this.createWarnResultObject(input_descriptor_idx, resultIdx, evaluationResult, results, 'Predicate is required but not applied');
results.push(resultObject);
}
}
}
retrieveResultInputDescriptorIdx(input_descriptor_path) {
const inputDescriptorText = '$.input_descriptors[';
const startIdx = input_descriptor_path.indexOf(inputDescriptorText);
const startWithIdx = input_descriptor_path.substring(startIdx + inputDescriptorText.length);
const endIdx = startWithIdx.indexOf(']');
const idx = startWithIdx.substring(0, endIdx);
return parseInt(idx);
}
concatenatePath(path) {
let completePath = '';
for (let i = 0; i < path.length; i++) {
if (typeof path[i] === 'number') {
completePath = completePath.substring(0, completePath.length - 1);
completePath += '[*].';
}
else {
completePath += path[i] + '.';
}
}
return completePath.substring(0, completePath.length - 1);
}
createResultObject(input_descriptor_idx, resultIdx, evaluationResult, results) {
return {
input_descriptor_path: `$.input_descriptors[${input_descriptor_idx}]`,
verifiable_credential_path: results[resultIdx].verifiable_credential_path,
evaluator: this.getName(),
status: ConstraintUtils_1.Status.INFO,
message: Messages_1.default.INPUT_CANDIDATE_IS_ELIGIBLE_FOR_PRESENTATION_SUBMISSION,
payload: evaluationResult,
};
}
createWarnResultObject(input_descriptor_idx, resultIdx, evaluationResult, results, message) {
return {
input_descriptor_path: `$.input_descriptors[${input_descriptor_idx}]`,
verifiable_credential_path: results[resultIdx].verifiable_credential_path,
evaluator: this.getName(),
status: ConstraintUtils_1.Status.WARN,
message,
payload: evaluationResult,
};
}
createErrorResultObject(input_descriptor_idx, resultIdx, evaluationResult, results, message) {
return {
input_descriptor_path: `$.input_descriptors[${input_descriptor_idx}]`,
verifiable_credential_path: results[resultIdx].verifiable_credential_path,
evaluator: this.getName(),
status: ConstraintUtils_1.Status.ERROR,
message,
payload: evaluationResult,
};
}
}
exports.PredicateRelatedFieldEvaluationHandler = PredicateRelatedFieldEvaluationHandler;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlZGljYXRlUmVsYXRlZEZpZWxkRXZhbHVhdGlvbkhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvZXZhbHVhdGlvbi9oYW5kbGVycy9wcmVkaWNhdGVSZWxhdGVkRmllbGRFdmFsdWF0aW9uSGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxxREFBb0c7QUFFcEcsMkRBQStDO0FBRS9DLG9FQUErQztBQUkvQywyRUFBd0U7QUFFeEUsTUFBYSxzQ0FBdUMsU0FBUSxxREFBeUI7SUFDbkYsWUFBWSxNQUF3QjtRQUNsQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVNLE9BQU87UUFDWixPQUFPLGlDQUFpQyxDQUFDO0lBQzNDLENBQUM7SUFFTSxNQUFNLENBQUMsRUFBbUM7UUFDL0MscURBQXFEO1FBQ3BELEVBQXVDLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBeUIsRUFBRSxLQUFhLEVBQUUsRUFBRTtZQUM5RyxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDL0QsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTyw0QkFBNEIsQ0FBQyxvQkFBNEIsRUFBRSxXQUEwQztRQUMzRyxJQUFJLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxNQUFNLEVBQUUsQ0FBQztZQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDbkQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUs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