UNPKG

@animo-id/pex

Version:

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

166 lines 15.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ConstraintsVB = void 0; const pex_models_1 = require("@sphereon/pex-models"); const fieldsVB_1 = require("./fieldsVB"); const validationBundler_1 = require("./validationBundler"); class ConstraintsVB extends validationBundler_1.ValidationBundler { constructor(parentTag) { super(parentTag, 'constraints'); this.disclosureLimitShouldHaveKnownValueMsg = 'limit_disclosure should have known value'; this.statusShouldHaveKnownValueMsg = 'Unknown status property'; this.statusDirectiveShouldHaveKnownValueMsg = 'status directive should have known value'; this.subjectIsIssuerShouldBeKnownValueMsg = 'subject_is_issuer should be known value'; this.fieldIdIsMandatoryMsg = 'field_id property is mandatory'; this.fieldIdMustBeArrayOfStringsMsg = 'field_id property must be an array of strings'; this.fieldIdMustCorrespondToFieldIdMsg = 'field_id must correspond to a present field object id property'; this.directivePropertyIsMandatoryMsg = 'directive property is mandatory'; this.oneOfTheKnownDirectivePropertiesMandatoryMsg = 'directive property must be one of [required, preferred]'; } getValidations(constraints) { let validations = []; if (constraints) { validations = [ { tag: this.getTag(), target: constraints, predicate: (constraints) => ConstraintsVB.disclosureLimitShouldHaveKnownValue(constraints.limit_disclosure), message: this.disclosureLimitShouldHaveKnownValueMsg, }, { tag: this.getTag(), target: constraints, predicate: (constraints) => ConstraintsVB.statusShouldHaveKnownValue(constraints.statuses), message: this.statusShouldHaveKnownValueMsg, }, { tag: this.getTag(), target: constraints, predicate: ConstraintsVB.statusDirectiveShouldHaveKnownValue(), message: this.statusDirectiveShouldHaveKnownValueMsg, }, { tag: this.getTag(), target: constraints, predicate: (constraints) => ConstraintsVB.shouldBeKnownOption(constraints.is_holder), message: this.subjectIsIssuerShouldBeKnownValueMsg, }, { tag: this.getTag(), target: constraints, predicate: (constraints) => this.fieldIdInSubjectMustCorrespondToFieldId(constraints, constraints.is_holder), message: this.fieldIdMustCorrespondToFieldIdMsg, }, { tag: this.getTag(), target: constraints, predicate: (constraints) => this.fieldIdInSubjectMustCorrespondToFieldId(constraints, constraints.same_subject), message: this.fieldIdMustCorrespondToFieldIdMsg, }, ...this.getSubjectsValidations(constraints === null || constraints === void 0 ? void 0 : constraints.is_holder), ...this.getSubjectsValidations(constraints === null || constraints === void 0 ? void 0 : constraints.same_subject), ...this.getFieldsValidations(constraints), ]; } return validations; } getFieldsValidations(constraints) { var _a; if ((_a = constraints === null || constraints === void 0 ? void 0 : constraints.fields) === null || _a === void 0 ? void 0 : _a.length) { return new fieldsVB_1.FieldsVB(this.getTag()).getValidations(constraints.fields); } return []; } static disclosureLimitShouldHaveKnownValue(limit_disclosure) { return !limit_disclosure || limit_disclosure === pex_models_1.Optionality.Preferred || limit_disclosure === pex_models_1.Optionality.Required; } static statusShouldHaveKnownValue(statuses) { return statuses == null || statuses.active != null || statuses.revoked != null || statuses.suspended != null; } static statusDirectiveShouldHaveKnownValue() { return (constraints) => { var _a, _b, _c; return this.pdStatusShouldBeKnown((_a = constraints === null || constraints === void 0 ? void 0 : constraints.statuses) === null || _a === void 0 ? void 0 : _a.active) && this.pdStatusShouldBeKnown((_b = constraints === null || constraints === void 0 ? void 0 : constraints.statuses) === null || _b === void 0 ? void 0 : _b.revoked) && this.pdStatusShouldBeKnown((_c = constraints === null || constraints === void 0 ? void 0 : constraints.statuses) === null || _c === void 0 ? void 0 : _c.suspended); }; } static pdStatusShouldBeKnown(pdStatus) { return (!pdStatus || pdStatus.directive === pex_models_1.Directives.Allowed || pdStatus.directive === pex_models_1.Directives.Disallowed || pdStatus.directive === pex_models_1.Directives.Required); } static shouldBeKnownOption(subjects) { if (subjects) { return (subjects.filter((subject) => subject.directive !== pex_models_1.Optionality.Preferred && subject.directive !== pex_models_1.Optionality.Required) .length === 0); } return true; } getSubjectsValidations(holderSubjects) { if (holderSubjects) { let validations = []; for (let subjectInd = 0; subjectInd < holderSubjects.length; subjectInd++) { validations = [ { tag: this.getMyTag(subjectInd), target: holderSubjects[subjectInd], predicate: (subject) => Array.isArray(subject.field_id), message: this.fieldIdMustBeArrayOfStringsMsg, }, { tag: this.getMyTag(subjectInd), target: holderSubjects[subjectInd], predicate: (subject) => !!subject.field_id, message: this.fieldIdIsMandatoryMsg, }, { tag: this.getMyTag(subjectInd), target: holderSubjects[subjectInd], predicate: (subject) => subject.field_id.length === subject.field_id.filter((id) => typeof id === 'string').length, message: this.fieldIdMustBeArrayOfStringsMsg, }, { tag: this.getMyTag(subjectInd), target: holderSubjects[subjectInd], predicate: (subject) => subject.directive !== undefined, message: this.directivePropertyIsMandatoryMsg, }, { tag: this.getMyTag(subjectInd), target: holderSubjects[subjectInd], predicate: (subject) => subject.directive === pex_models_1.Optionality.Preferred || subject.directive === pex_models_1.Optionality.Required, message: this.oneOfTheKnownDirectivePropertiesMandatoryMsg, }, ]; } return validations; } return []; } getMyTag(srInd) { // TODO extract to make it generic return this.parentTag + '.' + this.myTag + '[' + srInd + ']'; } fieldIdInSubjectMustCorrespondToFieldId(constraints, subjects) { if (subjects) { for (const subject of subjects) { for (const fieldId of subject.field_id) { if (!ConstraintsVB.isValidFieldId(constraints, fieldId)) { return false; } } } } return true; } static isValidFieldId(constraints, fieldId) { if (constraints === null || constraints === void 0 ? void 0 : constraints.fields) { return constraints.fields.map((field) => field.id).includes(fieldId); } return false; } } exports.ConstraintsVB = ConstraintsVB; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RyYWludHNWQi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi92YWxpZGF0aW9uL2J1bmRsZXJzL2NvbnN0cmFpbnRzVkIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQWtKO0FBSWxKLHlDQUFzQztBQUN0QywyREFBd0Q7QUFFeEQsTUFBYSxhQUFjLFNBQVEscUNBQW9GO0lBV3JILFlBQVksU0FBaUI7UUFDM0IsS0FBSyxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQVhqQiwyQ0FBc0MsR0FBRywwQ0FBMEMsQ0FBQztRQUNwRixrQ0FBNkIsR0FBRyx5QkFBeUIsQ0FBQztRQUMxRCwyQ0FBc0MsR0FBRywwQ0FBMEMsQ0FBQztRQUNwRix5Q0FBb0MsR0FBRyx5Q0FBeUMsQ0FBQztRQUNqRiwwQkFBcUIsR0FBRyxnQ0FBZ0MsQ0FBQztRQUN6RCxtQ0FBOEIsR0FBRywrQ0FBK0MsQ0FBQztRQUNqRixzQ0FBaUMsR0FBRyxnRUFBZ0UsQ0FBQztRQUNyRyxvQ0FBK0IsR0FBRyxpQ0FBaUMsQ0FBQztRQUNwRSxpREFBNEMsR0FBRyx5REFBeUQsQ0FBQztJQUkxSCxDQUFDO0lBRU0sY0FBYyxDQUNuQixXQUEwQztRQUUxQyxJQUFJLFdBQVcsR0FNVCxFQUFFLENBQUM7UUFDVCxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLFdBQVcsR0FBRztnQkFDWjtvQkFDRSxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDbEIsTUFBTSxFQUFFLFdBQVc7b0JBQ25CLFNBQVMsRUFBRSxDQUFDLFdBQTBDLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxtQ0FBbUMsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUM7b0JBQzFJLE9BQU8sRUFBRSxJQUFJLENBQUMsc0NBQXNDO2lCQUNyRDtnQkFDRDtvQkFDRSxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDbEIsTUFBTSxFQUFF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