UNPKG

@sphereon/pex

Version:

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

743 lines 51.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PresentationDefinitionSchema = void 0; class PresentationDefinitionSchema { //TODO: pass it with a config file static getPresentationDefinitionSchemaV1() { return { $schema: 'http://json-schema.org/draft-07/schema#', title: 'Presentation Definition', definitions: { schema: { type: 'object', properties: { uri: { type: 'string', }, required: { type: 'boolean', }, }, required: ['uri'], additionalProperties: false, }, issuance: { type: 'object', properties: { manifest: { type: 'string', }, }, additionalProperties: true, }, filter: { type: 'object', properties: { type: { type: 'string', }, format: { type: 'string', }, pattern: { type: 'string', }, minimum: { type: ['number', 'string'], }, minLength: { type: 'integer', }, maxLength: { type: 'integer', }, exclusiveMinimum: { type: ['number', 'string'], }, exclusiveMaximum: { type: ['number', 'string'], }, maximum: { type: ['number', 'string'], }, const: { type: ['number', 'string', 'boolean'], }, enum: { type: 'array', items: { type: ['number', 'string'], }, }, not: { type: 'object', minProperties: 1, }, }, required: ['type'], additionalProperties: false, }, format: { type: 'object', properties: { 'vc+sd-jwt': { type: 'object', properties: { 'sd-jwt_alg_values': { type: 'array', description: 'A JSON array containing identifiers of cryptographic algorithms the verifier supports for protection of a SD-JWT. If present, the alg JOSE header (as defined in [RFC7515]) of the presented SD-JWT MUST match one of the array values.', minItems: 1, items: { type: 'string', }, }, 'kb-jwt_alg_values': { type: 'array', description: 'A JSON array containing identifiers of cryptographic algorithms the verifier supports for protection of a KB-JWT. If present, the alg JOSE header (as defined in [RFC7515]) of the presented KB-JWT MUST match one of the array values.', minItems: 1, items: { type: 'string', }, }, }, required: [], additionalProperties: false, }, }, patternProperties: { '^jwt$|^jwt_vc$|^jwt_vc_json$|^jwt_vp$|^jwt_vp_json$': { type: 'object', properties: { alg: { type: 'array', minItems: 1, items: { type: 'string', }, }, }, required: ['alg'], additionalProperties: false, }, '^ldp_vc$|^ldp_vp$|^ldp$': { type: 'object', properties: { proof_type: { type: 'array', minItems: 1, items: { type: 'string', }, }, }, required: ['proof_type'], additionalProperties: false, }, '^di_vc$|^di_vp$|^di$': { type: 'object', properties: { proof_type: { type: 'array', minItems: 1, items: { type: 'string', }, }, cryptosuite: { type: 'array', minItems: 1, items: { type: 'string', }, }, }, required: ['proof_type', 'cryptosuite'], additionalProperties: false, }, additionalProperties: false, }, additionalProperties: false, }, submission_requirements: { type: 'object', oneOf: [ { properties: { name: { type: 'string', }, purpose: { type: 'string', }, rule: { type: 'string', enum: ['all', 'pick'], }, count: { type: 'integer', minimum: 1, }, min: { type: 'integer', minimum: 0, }, max: { type: 'integer', minimum: 0, }, from: { type: 'string', }, }, required: ['rule', 'from'], additionalProperties: false, }, { properties: { name: { type: 'string', }, purpose: { type: 'string', }, rule: { type: 'string', enum: ['all', 'pick'], }, count: { type: 'integer', minimum: 1, }, min: { type: 'integer', minimum: 0, }, max: { type: 'integer', minimum: 0, }, from_nested: { type: 'array', minItems: 1, items: { $ref: '#/definitions/submission_requirements', }, }, }, required: ['rule', 'from_nested'], additionalProperties: false, }, ], }, input_descriptors: { type: 'object', properties: { id: { type: 'string', }, name: { type: 'string', }, purpose: { type: 'string', }, group: { type: 'array', items: { type: 'string', }, }, schema: { type: 'array', items: { $ref: '#/definitions/schema', }, }, issuance: { type: 'array', items: { $ref: '#/definitions/issuance', }, }, constraints: { type: 'object', properties: { limit_disclosure: { type: 'string', enum: ['required', 'preferred'], }, statuses: { type: 'object', properties: { active: { type: 'object', properties: { directive: { type: 'string', enum: ['required', 'allowed', 'disallowed'], }, }, }, suspended: { type: 'object', properties: { directive: { type: 'string', enum: ['required', 'allowed', 'disallowed'], }, }, }, revoked: { type: 'object', properties: { directive: { type: 'string', enum: ['required', 'allowed', 'disallowed'], }, }, }, }, }, fields: { type: 'array', items: { $ref: '#/definitions/field', }, }, subject_is_issuer: { type: 'string', enum: ['required', 'preferred'], }, is_holder: { type: 'array', items: { type: 'object', properties: { field_id: { type: 'array', items: { type: 'string', }, }, directive: { type: 'string', enum: ['required', 'preferred'], }, }, required: ['field_id', 'directive'], additionalProperties: false, }, }, same_subject: { type: 'array', items: { type: 'object', properties: { field_id: { type: 'array', items: { type: 'string', }, }, directive: { type: 'string', enum: ['required', 'preferred'], }, }, required: ['field_id', 'directive'], additionalProperties: false, }, }, }, additionalProperties: false, }, }, required: ['id', 'schema'], additionalProperties: false, }, field: { type: 'object', oneOf: [ { properties: { id: { type: 'string', }, path: { type: 'array', items: { type: 'string', }, }, purpose: { type: 'string', }, filter: { $ref: '#/definitions/filter', }, }, required: ['path'], additionalProperties: false, }, { properties: { id: { type: 'string', }, path: { type: 'array', items: { type: 'string', }, }, purpose: { type: 'string', }, filter: { $ref: '#/definitions/filter', }, predicate: { type: 'string', enum: ['required', 'preferred'], }, }, required: ['path', 'filter', 'predicate'], additionalProperties: false, }, ], }, }, type: 'object', properties: { presentation_definition: { type: 'object', properties: { id: { type: 'string', }, name: { type: 'string', }, purpose: { type: 'string', }, format: { $ref: '#/definitions/format', }, submission_requirements: { type: 'array', items: { $ref: '#/definitions/submission_requirements', }, }, input_descriptors: { type: 'array', items: { $ref: '#/definitions/input_descriptors', }, }, }, required: ['id', 'input_descriptors'], additionalProperties: false, }, }, }; } static getPresentationDefinitionSchemaV2() { return { $schema: 'http://json-schema.org/draft-07/schema#', title: 'Presentation Definition', definitions: { issuance: { type: 'object', properties: { manifest: { type: 'string', }, }, additionalProperties: true, }, format: { type: 'object', properties: { 'vc+sd-jwt': { type: 'object', // No properties for vc+sd-jwt format properties: {}, required: [], additionalProperties: false, }, }, patternProperties: { '^jwt$|^jwt_vc$|^jwt_vc_json$|^jwt_vp$|^mso_mdoc$': { type: 'object', properties: { alg: { type: 'array', minItems: 1, items: { type: 'string' }, }, }, required: ['alg'], additionalProperties: false, }, '^ldp_vc$|^ldp_vp$|^ldp$': { type: 'object', properties: { proof_type: { type: 'array', minItems: 1, items: { type: 'string' }, }, }, required: ['proof_type'], additionalProperties: false, }, '^di_vc$|^di_vp$|^di$': { type: 'object', properties: { proof_type: { type: 'array', minItems: 1, items: { type: 'string', }, }, cryptosuite: { type: 'array', minItems: 1, items: { type: 'string', }, }, }, required: ['proof_type', 'cryptosuite'], additionalProperties: false, }, additionalProperties: false, }, additionalProperties: false, }, submission_requirements: { type: 'object', oneOf: [ { properties: { name: { type: 'string' }, purpose: { type: 'string' }, rule: { type: 'string', enum: ['all', 'pick'], }, count: { type: 'integer', minimum: 1 }, min: { type: 'integer', minimum: 0 }, max: { type: 'integer', minimum: 0 }, from: { type: 'string' }, }, required: ['rule', 'from'], additionalProperties: false, }, { properties: { name: { type: 'string' }, purpose: { type: 'string' }, rule: { type: 'string', enum: ['all', 'pick'], }, count: { type: 'integer', minimum: 1 }, min: { type: 'integer', minimum: 0 }, max: { type: 'integer', minimum: 0 }, from_nested: { type: 'array', minItems: 1, items: { $ref: '#/definitions/submission_requirements', }, }, }, required: ['rule', 'from_nested'], additionalProperties: false, }, ], }, input_descriptors: { type: 'object', properties: { id: { type: 'string' }, name: { type: 'string' }, purpose: { type: 'string' }, issuance: { type: 'array', items: { $ref: '#/definitions/issuance', }, }, group: { type: 'array', items: { type: 'string' }, }, format: { $ref: '#/definitions/format' }, constraints: { type: 'object', properties: { limit_disclosure: { type: 'string', enum: ['required', 'preferred'], }, statuses: { type: 'object', properties: { active: { type: 'object', properties: { directive: { type: 'string', enum: ['required', 'allowed', 'disallowed'], }, }, }, suspended: { type: 'object', properties: { directive: { type: 'string', enum: ['required', 'allowed', 'disallowed'], }, }, }, revoked: { type: 'object', properties: { directive: { type: 'string', enum: ['required', 'allowed', 'disallowed'], }, }, }, }, }, fields: { type: 'array', items: { $ref: '#/definitions/field' }, }, subject_is_issuer: { type: 'string', enum: ['required', 'preferred'], }, is_holder: { type: 'array', items: { type: 'object', properties: { field_id: { type: 'array', items: { type: 'string' }, }, directive: { type: 'string', enum: ['required', 'preferred'], }, }, required: ['field_id', 'directive'], additionalProperties: false, }, }, same_subject: { type: 'array', items: { type: 'object', properties: { field_id: { type: 'array', items: { type: 'string' }, }, directive: { type: 'string', enum: ['required', 'preferred'], }, }, required: ['field_id', 'directive'], additionalProperties: false, }, }, }, additionalProperties: false, }, }, required: ['id'], additionalProperties: false, }, field: { type: 'object', oneOf: [ { properties: { id: { type: 'string' }, path: { type: 'array', items: { type: 'string' }, }, purpose: { type: 'string' }, intent_to_retain: { type: 'boolean' }, optional: { type: 'boolean' }, filter: { $ref: 'http://json-schema.org/schema#' }, }, required: ['path'], additionalProperties: false, }, { properties: { id: { type: 'string' }, path: { type: 'array', items: { type: 'string' }, }, purpose: { type: 'string' }, intent_to_retain: { type: 'boolean' }, optional: { type: 'boolean' }, filter: { $ref: 'http://json-schema.org/schema#' }, predicate: { type: 'string', enum: ['required', 'preferred'], }, }, required: ['path', 'filter', 'predicate'], additionalProperties: false, }, ], }, }, type: 'object', properties: { presentation_definition: { type: 'object', properties: { id: { type: 'string' }, name: { type: 'string' }, purpose: { type: 'string' }, format: { $ref: '#/definitions/format' }, frame: { type: 'object', additionalProperties: true, }, submission_requirements: { type: 'array', items: { $ref: '#/definitions/submission_requirements', }, }, input_descriptors: { type: 'array', items: { $ref: '#/definitions/input_descriptors' }, }, }, required: ['id', 'input_descriptors'], additionalProperties: false, }, }, }; } } exports.PresentationDefinitionSchema = PresentationDefinitionSchema; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlc2VudGF0aW9uRGVmaW5pdGlvblNjaGVtYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi92YWxpZGF0aW9uL2NvcmUvcHJlc2VudGF0aW9uRGVmaW5pdGlvblNjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxNQUFhLDRCQUE0QjtJQUN2QyxrQ0FBa0M7SUFDM0IsTUFBTSxDQUFDLGlDQUFpQztRQUM3QyxPQUFPO1lBQ0wsT0FBTyxFQUFFLHlDQUF5QztZQUNsRCxLQUFLLEVBQUUseUJBQXlCO1lBQ2hDLFdBQVcsRUFBRTtnQkFDWCxNQUFNLEVBQUU7b0JBQ04sSUFBSSxFQUFFLFFBQVE7b0JBQ2QsVUFBVSxFQUFFO3dCQUNWLEdBQUcsRUFBRTs0QkFDSCxJQUFJLEVBQUUsUUFBUTt5QkFDZjt3QkFDRCxRQUFRLEVBQUU7NEJBQ1IsSUFBSSxFQUFFLFNBQVM7eUJBQ2hCO3FCQUNGO29CQUNELFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQztvQkFDakIsb0JBQW9CLEVBQUUsS0FBSztpQkFDNUI7Z0JBQ0QsUUFBUSxFQUFFO29CQUNSLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRTt3QkFDVixRQUFRLEVBQUU7NEJBQ1IsSUFBSSxFQUFFLFFBQVE7eUJBQ2Y7cUJBQ0Y7b0JBQ0Qsb0JBQW9CLEVBQUUsSUFBSTtpQkFDM0I7Z0JBQ0QsTUFBTSxFQUFFO29CQUNOLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRTt3QkFDVixJQUFJLEVBQUU7NEJBQ0osSUFBSSxFQUFFLFFBQVE7eUJBQ2Y7d0JBQ0QsTUFBTSxFQUFFOzRCQUNOLElBQUksRUFBRSxRQUFRO3lCQUNmO3dCQUNELE9BQU8sRUFBRTs0QkFDUCxJQUFJLEVBQUUsUUFBUTt5QkFDZjt3QkFDRCxPQUFPLEVBQUU7NEJBQ1AsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQzt5QkFDM0I7d0JBQ0QsU0FBUyxF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