UNPKG

@sphereon/pex

Version:

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

72 lines 8.13 kB
import { CredentialMapper } from '@sphereon/ssi-types'; import { PEVersion } from '../types'; import validatePDv1 from '../validation/validatePDv1.js'; import validatePDv2 from '../validation/validatePDv2.js'; import { ObjectUtils } from './ObjectUtils'; import { JsonPathUtils } from './jsonPathUtils'; export function getSubjectIdsAsString(vc) { if (CredentialMapper.isSdJwtDecodedCredential(vc)) { // TODO: should we also handle `cnf` claim? return vc.signedPayload.sub ? [vc.signedPayload.sub] : []; } const subjects = Array.isArray(vc.credentialSubject) ? vc.credentialSubject : [vc.credentialSubject]; return subjects.filter((s) => !!s.id).map((value) => value.id); } export function getIssuerString(vc) { if (CredentialMapper.isSdJwtDecodedCredential(vc)) { return vc.signedPayload.iss; } return ObjectUtils.isString(vc.issuer) ? vc.issuer : vc.issuer.id; } export function definitionVersionDiscovery(presentationDefinition) { const presentationDefinitionCopy = JSON.parse(JSON.stringify(presentationDefinition)); JsonPathUtils.changePropertyNameRecursively(presentationDefinitionCopy, '_const', 'const'); JsonPathUtils.changePropertyNameRecursively(presentationDefinitionCopy, '_enum', 'enum'); const data = { presentation_definition: presentationDefinitionCopy }; if (validatePDv2(data)) { return { version: PEVersion.v2 }; } const v2Errors = validatePDv2.errors ?? undefined; if (validatePDv1(data)) { return { version: PEVersion.v1 }; } const v1Errors = validatePDv1.errors ?? undefined; return { error: 'This is not a valid PresentationDefinition', v1Errors, v2Errors, }; } export function formatValidationError(error) { return `${error.instancePath || '/'}: ${error.message}${error.params.additionalProperty ? ` (${error.params.additionalProperty})` : ''}`; } export function formatValidationErrors(errors) { if (!errors?.length) { return undefined; } return errors.map(formatValidationError).join('\n '); } export function uniformDIDMethods(dids, opts) { let result = dids?.map((did) => did.toLowerCase()).map((did) => (did.startsWith('did:') ? did : `did:${did}`)) ?? []; if (opts?.removePrefix) { const length = opts.removePrefix.endsWith(':') ? opts.removePrefix.length : opts.removePrefix.length + 1; result = result.map((did) => (did.startsWith(opts.removePrefix) ? did.substring(length) : did)); } if (result.includes('did')) { // The string did denotes every DID method, hence we return an empty array, indicating all methods are supported return []; } return result; } export function isRestrictedDID(DID, restrictToDIDMethods) { const methods = uniformDIDMethods(restrictToDIDMethods); return methods.length === 0 || methods.some((method) => DID.toLowerCase().startsWith(method)); } export function filterToRestrictedDIDs(DIDs, restrictToDIDMethods) { const methods = uniformDIDMethods(restrictToDIDMethods); if (methods.length === 0) { return DIDs; } return methods.flatMap((method) => DIDs.filter((DID) => DID.toLowerCase().startsWith(method))); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVkNVdGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi91dGlscy9WQ1V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0IsZ0JBQWdCLEVBQThFLE1BQU0scUJBQXFCLENBQUM7QUFFckosT0FBTyxFQUE4QyxTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDakYsT0FBTyxZQUFZLE1BQU0sK0JBQStCLENBQUM7QUFDekQsT0FBTyxZQUFZLE1BQU0sK0JBQStCLENBQUM7QUFHekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsTUFBTSxVQUFVLHFCQUFxQixDQUFDLEVBQWtEO0lBQ3RGLElBQUksZ0JBQWdCLENBQUMsd0JBQXdCLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNsRCwyQ0FBMkM7UUFDM0MsT0FBTyxFQUFFLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDNUQsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUE4QyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDaEosT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBYSxDQUFDO0FBQzdFLENBQUM7QUFFRCxNQUFNLFVBQVUs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