{"version":3,"file":"W3cDataIntegrityError.mjs","names":[],"sources":["../../../src/modules/w3c-di/W3cDataIntegrityError.ts"],"sourcesContent":["import { CredoError } from '../../error'\nimport { isObject } from '../../utils/object'\nimport type { W3cDataIntegrityCryptosuiteProof, W3cDataIntegrityUnsecuredDocument } from './W3cDataIntegrityProof'\n\n// ─── Processing Error Taxonomy ───────────────────────────────────────────────\n\nexport enum W3cDataIntegrityProcessingErrorCode {\n  ParsingError = 'https://www.w3.org/ns/credentials#PARSING_ERROR',\n  ProofGenerationError = 'https://w3id.org/security#PROOF_GENERATION_ERROR',\n  ProofVerificationError = 'https://w3id.org/security#PROOF_VERIFICATION_ERROR',\n  ProofTransformationError = 'https://w3id.org/security#PROOF_TRANSFORMATION_ERROR',\n  InvalidDomainError = 'https://w3id.org/security#INVALID_DOMAIN_ERROR',\n  InvalidChallengeError = 'https://w3id.org/security#INVALID_CHALLENGE_ERROR',\n}\n\n// ─── Public Issue Types ─────────────────────────────────────────────────────\n\nexport interface W3cDataIntegrityProcessingIssue {\n  type: W3cDataIntegrityProcessingErrorCode\n  title: string\n  detail?: string\n}\n\nexport type W3cDataIntegrityIssueList = [W3cDataIntegrityProcessingIssue, ...W3cDataIntegrityProcessingIssue[]]\n\n// ─── Public Result Types ────────────────────────────────────────────────────\n\nexport class W3cDataIntegrityProcessingError extends CredoError {\n  public readonly issue: W3cDataIntegrityProcessingIssue\n\n  public constructor(code: W3cDataIntegrityProcessingErrorCode, title: string, detail?: string) {\n    super(title)\n    this.issue = createIssue(code, title, detail)\n  }\n}\n\nexport interface W3cDataIntegrityCreateSuccess {\n  created: true\n  proof: W3cDataIntegrityCryptosuiteProof\n}\n\nexport interface W3cDataIntegrityCreateFailure {\n  created: false\n  proof: null\n  errors: W3cDataIntegrityIssueList\n}\n\nexport type W3cDataIntegrityCreateResult = W3cDataIntegrityCreateSuccess | W3cDataIntegrityCreateFailure\n\nexport type W3cDataIntegrityVerifySuccess = {\n  verified: true\n  verifiedDocument: W3cDataIntegrityUnsecuredDocument\n  mediaType: string | null\n}\n\nexport type W3cDataIntegrityVerifyFailure = {\n  verified: false\n  verifiedDocument: null\n  mediaType: null\n  errors: W3cDataIntegrityIssueList\n}\n\nexport type W3cDataIntegrityVerifyResult = W3cDataIntegrityVerifySuccess | W3cDataIntegrityVerifyFailure\n\n// ─── Issue Constructors ─────────────────────────────────────────────────────\n\nexport function createIssue(\n  code: W3cDataIntegrityProcessingErrorCode,\n  title: string,\n  detail?: string\n): W3cDataIntegrityProcessingIssue {\n  return { type: code, title, detail }\n}\n\nexport function createProofVerificationIssue(title: string, detail?: string): W3cDataIntegrityProcessingIssue {\n  return createIssue(W3cDataIntegrityProcessingErrorCode.ProofVerificationError, title, detail)\n}\n\n// ─── Type Guards ────────────────────────────────────────────────────────────\n\nexport function isW3cDataIntegrityProblemType(type: string): type is W3cDataIntegrityProcessingErrorCode {\n  return Object.values(W3cDataIntegrityProcessingErrorCode).includes(type as W3cDataIntegrityProcessingErrorCode)\n}\n\nexport function isW3cDataIntegrityProcessingIssue(issue: unknown): issue is W3cDataIntegrityProcessingIssue {\n  if (!isObject(issue)) return false\n\n  const candidate = issue as Record<string, unknown>\n  return typeof candidate.type === 'string' && typeof candidate.title === 'string'\n}\n\n// ─── Verification Result Builder ────────────────────────────────────────────\n\nexport function createInvalidResult(\n  issue: W3cDataIntegrityProcessingIssue,\n  additionalIssues: W3cDataIntegrityProcessingIssue[] = []\n): W3cDataIntegrityVerifyFailure {\n  return {\n    verified: false,\n    verifiedDocument: null,\n    mediaType: null,\n    errors: [issue, ...additionalIssues],\n  }\n}\n\n// ─── Issue Formatting ───────────────────────────────────────────────────────\n\nconst DEFAULT_VERIFICATION_FAILURE_MESSAGE = 'Data Integrity proof verification failed'\n\nfunction formatIssueSummary(error: W3cDataIntegrityProcessingIssue) {\n  return `[${error.type}] ${error.title}`\n}\n\nfunction formatIssueDetail(error: W3cDataIntegrityProcessingIssue) {\n  return error.detail ? `${formatIssueSummary(error)}: ${error.detail}` : formatIssueSummary(error)\n}\n\nexport function formatW3cDataIntegrityIssueSummary(errors: W3cDataIntegrityProcessingIssue[]): string {\n  return errors.map(formatIssueSummary).join('\\n')\n}\n\nexport function formatW3cDataIntegrityIssueDetail(errors: W3cDataIntegrityProcessingIssue[]): string {\n  const detail = errors.map(formatIssueDetail).join('\\n')\n  return detail || DEFAULT_VERIFICATION_FAILURE_MESSAGE\n}\n\n// ─── CredoError Conversion ──────────────────────────────────────────────────\n\nexport function createW3cDataIntegrityCredoError(errors: W3cDataIntegrityIssueList): CredoError {\n  const message = formatW3cDataIntegrityIssueDetail(errors)\n\n  // Keep defensive runtime handling for malformed or force-cast empty issue lists.\n  if (errors.length === 0) {\n    return new CredoError(message)\n  }\n\n  const cause = new CredoError(`Data Integrity processing issues: ${formatW3cDataIntegrityIssueSummary(errors)}`)\n  return new CredoError(message, { cause })\n}\n\n// ─── Fail-Fast Assertions ────────────────────────────────────────────────────\nexport function assertCreated(result: W3cDataIntegrityCreateResult): asserts result is W3cDataIntegrityCreateSuccess {\n  if (!result.created) {\n    throw createW3cDataIntegrityCredoError(result.errors)\n  }\n}\n\nexport function assertVerified(result: W3cDataIntegrityVerifyResult): asserts result is W3cDataIntegrityVerifySuccess {\n  if (!result.verified) {\n    throw createW3cDataIntegrityCredoError(result.errors)\n  }\n}\n"],"mappings":";;;AAMA,IAAY,sCAAL,yBAAA,qCAAA;CACL,oCAAA,kBAAA;CACA,oCAAA,0BAAA;CACA,oCAAA,4BAAA;CACA,oCAAA,8BAAA;CACA,oCAAA,wBAAA;CACA,oCAAA,2BAAA;;AACF,EAAA,CAAA,CAAA;AAcA,IAAa,kCAAb,cAAqD,WAAW;CAG9D,YAAmB,MAA2C,OAAe,QAAiB;EAC5F,MAAM,KAAK;EACX,KAAK,QAAQ,YAAY,MAAM,OAAO,MAAM;CAC9C;AACF;AAgCA,SAAgB,YACd,MACA,OACA,QACiC;CACjC,OAAO;EAAE,MAAM;EAAM;EAAO;CAAO;AACrC;AAEA,SAAgB,6BAA6B,OAAe,QAAkD;CAC5G,OAAO,YAAA,sDAAwE,OAAO,MAAM;AAC9F;AAiBA,SAAgB,oBACd,OACA,mBAAsD,CAAC,GACxB;CAC/B,OAAO;EACL,UAAU;EACV,kBAAkB;EAClB,WAAW;EACX,QAAQ,CAAC,OAAO,GAAG,gBAAgB;CACrC;AACF;AAIA,MAAM,uCAAuC;AAE7C,SAAS,mBAAmB,OAAwC;CAClE,OAAO,IAAI,MAAM,KAAK,IAAI,MAAM;AAClC;AAEA,SAAS,kBAAkB,OAAwC;CACjE,OAAO,MAAM,SAAS,GAAG,mBAAmB,KAAK,EAAE,IAAI,MAAM,WAAW,mBAAmB,KAAK;AAClG;AAEA,SAAgB,mCAAmC,QAAmD;CACpG,OAAO,OAAO,IAAI,kBAAkB,CAAC,CAAC,KAAK,IAAI;AACjD;AAEA,SAAgB,kCAAkC,QAAmD;CAEnG,OADe,OAAO,IAAI,iBAAiB,CAAC,CAAC,KAAK,IACtC,KAAK;AACnB;AAIA,SAAgB,iCAAiC,QAA+C;CAC9F,MAAM,UAAU,kCAAkC,MAAM;CAGxD,IAAI,OAAO,WAAW,GACpB,OAAO,IAAI,WAAW,OAAO;CAG/B,MAAM,QAAQ,IAAI,WAAW,qCAAqC,mCAAmC,MAAM,GAAG;CAC9G,OAAO,IAAI,WAAW,SAAS,EAAE,MAAM,CAAC;AAC1C;AAGA,SAAgB,cAAc,QAAuF;CACnH,IAAI,CAAC,OAAO,SACV,MAAM,iCAAiC,OAAO,MAAM;AAExD;AAEA,SAAgB,eAAe,QAAuF;CACpH,IAAI,CAAC,OAAO,UACV,MAAM,iCAAiC,OAAO,MAAM;AAExD"}