All files / src/inspectors/did retrieveVerificationMethodPublicKey.ts

100% Statements 8/8
100% Branches 2/2
100% Functions 1/1
100% Lines 8/8

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36                            5x   5x   90x 90x 90x   117x         3x       87x        
import { VerifierError } from '../../models';
import domain from '../../domain';
import { baseError } from './index';
import type { IDidDocument } from '../../models/DidDocument';
import type { IDidDocumentPublicKey } from '@decentralized-identity/did-common-typescript';
import type { Issuer } from '../../models/Issuer';
 
export default function retrieveVerificationMethodPublicKey (
  issuerDocument: Issuer | IDidDocument,
  proofVerificationMethod: string
): IDidDocumentPublicKey {
  if (!issuerDocument.verificationMethod) {
    // backwards compatibility with Blockcerts' issuer profile who don't include verification method
    // is this ideal? probably not and we should likely require v3 profiles to include verificationMethod
    console.warn('No verification method found in the issuer document. ' +
      'This will likely become a requirement in the near future');
    return;
  }
  const verificationMethodId = proofVerificationMethod.split('#')[1];
  const verificationMethodFromDocument = issuerDocument.verificationMethod;
  const verificationMethodPublicKey = verificationMethodFromDocument
    .find(verificationMethod =>
      verificationMethod.id === `#${verificationMethodId}` ||
      verificationMethod.id === proofVerificationMethod // if the id is the combination of did + key id
    );
 
  if (!verificationMethodPublicKey) {
    throw new VerifierError(
      'retrieveVerificationMethodPublicKey',
      `${baseError} - ${domain.i18n.getText('errors', 'retrieveVerificationMethodPublicKey')}`);
  }
  return {
    ...verificationMethodPublicKey
  };
}