@ew-did-registry/credentials-interface
Version:
The package provides interfaces for credentials.
82 lines (69 loc) • 2.21 kB
text/typescript
import { isObject, hasRequiredProperties, hasOwnProperty } from './utils';
import { Credential, VerifiableCredential } from './credentials.types';
import { Presentation } from './presentation.types';
function hasValidProof(proof: unknown): boolean {
const requiredProofProperties = [
'verificationMethod',
'proofPurpose',
'created',
'type',
];
if (!isObject(proof)) return false;
if (!hasRequiredProperties(proof, requiredProofProperties)) return false;
if (!hasOwnProperty(proof, 'jws') && !hasOwnProperty(proof, 'proofValue')) {
return false;
}
return true;
}
export function isCredential(
credential: unknown
): credential is Credential<Record<string, unknown>> {
const requiredProperties = [
'credentialSubject',
'@context',
'id',
'issuanceDate',
'issuer',
'type',
];
if (!isObject(credential)) return false;
if (!hasRequiredProperties(credential, requiredProperties)) return false;
return true;
}
export function isVerifiableCredential(
credential: unknown
): credential is VerifiableCredential<Record<string, unknown>> {
if (!isCredential(credential)) return false;
if (!hasOwnProperty(credential, 'proof')) return false;
if (!hasValidProof(credential.proof)) return false;
return true;
}
export function isPresentation(
presentation: unknown
): presentation is Presentation {
const requiredProperties = [
'verifiableCredential',
'@context',
'id',
'type',
'holder',
];
if (!isObject(presentation)) return false;
if (!hasRequiredProperties(presentation, requiredProperties)) return false;
if (!hasOwnProperty(presentation, 'verifiableCredential')) return false;
if (!Array.isArray(presentation.verifiableCredential)) return false;
if (
!presentation.verifiableCredential.every((vc) => isVerifiableCredential(vc))
) {
return false;
}
return true;
}
export function isVerifiablePresentation(
presentation: unknown
): presentation is VerifiableCredential<Record<string, unknown>> {
if (!isPresentation(presentation)) return false;
if (!hasOwnProperty(presentation, 'proof')) return false;
if (!hasValidProof(presentation.proof)) return false;
return true;
}