{"version":3,"file":"proofPurposeValidation.mjs","names":[],"sources":["../../../../src/modules/w3c-di/proof-processing/proofPurposeValidation.ts"],"sourcesContent":["import type { AgentContext } from '../../../agent/context'\nimport { type DidPurpose, DidsApi } from '../../dids'\nimport {\n  createInvalidResult,\n  createProofVerificationIssue,\n  type W3cDataIntegrityVerifyFailure,\n} from '../W3cDataIntegrityError'\nimport type { W3cDataIntegrityCryptosuiteProof } from '../W3cDataIntegrityProof'\n\nconst DID_PROOF_PURPOSES: DidPurpose[] = [\n  'assertionMethod',\n  'authentication',\n  'keyAgreement',\n  'capabilityInvocation',\n  'capabilityDelegation',\n]\n\nfunction asDidPurpose(proofPurpose: string): DidPurpose | undefined {\n  return (DID_PROOF_PURPOSES as string[]).includes(proofPurpose) ? (proofPurpose as DidPurpose) : undefined\n}\n\n/**\n * Validates that the verificationMethod used in a proof is authorized for\n * the proofPurpose verification relationship in the controller document.\n */\nexport async function validateProofPurposeVerificationRelationship(\n  agentContext: AgentContext,\n  proof: W3cDataIntegrityCryptosuiteProof\n): Promise<W3cDataIntegrityVerifyFailure | undefined> {\n  if (typeof proof.verificationMethod !== 'string') {\n    return createInvalidResult(\n      createProofVerificationIssue(\n        'Proof verificationMethod is required for proof purpose validation',\n        `Received '${typeof proof.verificationMethod}'`\n      )\n    )\n  }\n\n  const verificationRelationship = asDidPurpose(proof.proofPurpose)\n\n  if (!verificationRelationship) {\n    return createInvalidResult(\n      createProofVerificationIssue(\n        'Unsupported proof purpose for verification relationship validation',\n        `Proof purpose '${proof.proofPurpose}' is not one of ${DID_PROOF_PURPOSES.join(', ')}`\n      )\n    )\n  }\n\n  const didApi = agentContext.dependencyManager.resolve(DidsApi)\n\n  try {\n    const didDocument = await didApi.resolveDidDocument(proof.verificationMethod)\n    didDocument.dereferenceKey(proof.verificationMethod, [verificationRelationship])\n  } catch (error) {\n    return createInvalidResult(\n      createProofVerificationIssue(\n        'Verification method is not authorized for proof purpose',\n        error instanceof Error\n          ? error.message\n          : `Verification method '${proof.verificationMethod}' is not authorized for proof purpose '${proof.proofPurpose}'`\n      )\n    )\n  }\n\n  return undefined\n}\n"],"mappings":";;;;AASA,MAAM,qBAAmC;CACvC;CACA;CACA;CACA;CACA;AACF;AAEA,SAAS,aAAa,cAA8C;CAClE,OAAQ,mBAAgC,SAAS,YAAY,IAAK,eAA8B,KAAA;AAClG;;;;;AAMA,eAAsB,6CACpB,cACA,OACoD;CACpD,IAAI,OAAO,MAAM,uBAAuB,UACtC,OAAO,oBACL,6BACE,qEACA,aAAa,OAAO,MAAM,mBAAmB,EAC/C,CACF;CAGF,MAAM,2BAA2B,aAAa,MAAM,YAAY;CAEhE,IAAI,CAAC,0BACH,OAAO,oBACL,6BACE,sEACA,kBAAkB,MAAM,aAAa,kBAAkB,mBAAmB,KAAK,IAAI,GACrF,CACF;CAGF,MAAM,SAAS,aAAa,kBAAkB,QAAQ,OAAO;CAE7D,IAAI;EAEF,CAAA,MAD0B,OAAO,mBAAmB,MAAM,kBAAkB,EAAA,CAChE,eAAe,MAAM,oBAAoB,CAAC,wBAAwB,CAAC;CACjF,SAAS,OAAO;EACd,OAAO,oBACL,6BACE,2DACA,iBAAiB,QACb,MAAM,UACN,wBAAwB,MAAM,mBAAmB,yCAAyC,MAAM,aAAa,EACnH,CACF;CACF;AAGF"}