import { DecodedVerifiableCredentialDto } from '../../shared/dto/decodedVerifiableCredential.dto.js'; import { CredentialValidationResult, CredentialValidator, } from './credentialValidator.interface.js'; import { CredentialValidationTypes } from '../presentation/verifiablePresentationValidationReport.js'; export class ExpirationValidator implements CredentialValidator { private result: CredentialValidationResult; constructor() { this.result = { valid: true, }; } validate( credential: DecodedVerifiableCredentialDto, ): Promise { const currentDate = new Date(); if (credential.exp) { this.checkExpirationDate( new Date((credential.exp as number) * 1000), currentDate, credential.vc.id, ); } if (credential.vc?.validUntil) { this.checkExpirationDate( new Date(credential.vc.validUntil), currentDate, credential.vc.id, ); } if (credential.vc?.expirationDate) { this.checkExpirationDate( new Date(credential.vc.expirationDate), currentDate, credential.vc.id, ); } return Promise.resolve(this.result); } private checkExpirationDate( expirationDate: Date, currentDate: Date, credentialId: string, ) { if (expirationDate <= currentDate) { this.result = { valid: false, message: `${credentialId} is expired`, }; } } public getValidationType(): CredentialValidationTypes { return CredentialValidationTypes.Expiration; } }