UNPKG

@animo-id/pex

Version:

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

739 lines 51.5 kB
export 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, }, }, }; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlc2VudGF0aW9uRGVmaW5pdGlvblNjaGVtYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi92YWxpZGF0aW9uL2NvcmUvcHJlc2VudGF0aW9uRGVmaW5pdGlvblNjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sNEJBQTRCO0lBQ3ZDLGtDQUFrQztJQUMzQixNQUFNLENBQUMsaUNBQWlDO1FBQzdDLE9BQU87WUFDTCxPQUFPLEVBQUUseUNBQXlDO1lBQ2xELEtBQUssRUFBRSx5QkFBeUI7WUFDaEMsV0FBVyxFQUFFO2dCQUNYLE1BQU0sRUFBRTtvQkFDTixJQUFJLEVBQUUsUUFBUTtvQkFDZCxVQUFVLEVBQUU7d0JBQ1YsR0FBRyxFQUFFOzRCQUNILElBQUksRUFBRSxRQUFRO3lCQUNmO3dCQUNELFFBQVEsRUFBRTs0QkFDUixJQUFJLEVBQUUsU0FBUzt5QkFDaEI7cUJBQ0Y7b0JBQ0QsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDO29CQUNqQixvQkFBb0IsRUFBRSxLQUFLO2lCQUM1QjtnQkFDRCxRQUFRLEVBQUU7b0JBQ1IsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsVUFBVSxFQUFFO3dCQUNWLFFBQVEsRUFBRTs0QkFDUixJQUFJLEVBQUUsUUFBUTt5QkFDZjtxQkFDRjtvQkFDRCxvQkFBb0IsRUFBRSxJQUFJO2lCQUMzQjtnQkFDRCxNQUFNLEVBQUU7b0JBQ04sSUFBSSxFQUFFLFFBQVE7b0JBQ2QsVUFBVSxFQUFFO3dCQUNWLElBQUksRUFBRTs0QkFDSixJQUFJLEVBQUUsUUFBUTt5QkFDZjt3QkFDRCxNQUFNLEVBQUU7NEJBQ04sSUFBSSxFQUFFLFFBQVE7eUJBQ2Y7d0JBQ0QsT0FBTyxFQUFFOzRCQUNQLElBQUksRUFBRSxRQUFRO3lCQUNmO3dCQUNELE9BQU8sRUFBRTs0QkFDUCxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDO3lCQUMzQjt3QkFDRCxTQUFT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