UNPKG

@credo-ts/core

Version:

<p align="center"> <br /> <img alt="Credo Logo" src="https://github.com/openwallet-foundation/credo-ts/blob/c7886cb8377ceb8ee4efe8d264211e561a75072d/images/credo-logo.png" height="250px" /> </p> <h1 align="center"><b>Credo - Core</b></h1

1 lines • 8.12 kB
{"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"}