@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 • 4.14 kB
Source Map (JSON)
{"version":3,"file":"parsing.mjs","names":[],"sources":["../../../../src/modules/w3c-di/proof-processing/parsing.ts"],"sourcesContent":["import { TypedArrayEncoder } from '../../../utils'\nimport { isObject } from '../../../utils/object'\nimport type { W3cDataIntegrityVerifyFailure } from '../W3cDataIntegrityError'\nimport { createInvalidResult, createIssue, W3cDataIntegrityProcessingErrorCode } from '../W3cDataIntegrityError'\nimport type { W3cDataIntegritySecuredDocument } from '../W3cDataIntegrityProof'\nimport type {\n W3cDataIntegrityVerifyProofDocumentOptions,\n W3cDataIntegrityVerifyProofOptions,\n} from '../W3cDataIntegrityProofService'\n\nexport interface ParsedW3cDataIntegrityProofDocument {\n normalizedMediaType: string\n securedDocument: W3cDataIntegritySecuredDocument\n verifyOptions: W3cDataIntegrityVerifyProofOptions\n}\n\nexport type ParseW3cDataIntegrityProofDocumentResult =\n | { ok: true; value: ParsedW3cDataIntegrityProofDocument }\n | { ok: false; result: W3cDataIntegrityVerifyFailure }\n\n/**\n * Implements VC Data Integrity v1.0 §4.4 steps 1-2 document parsing preflight.\n *\n * Validates media type support, parses document bytes as JSON, and ensures\n * a proof container is present before verification dispatch.\n */\nexport function parseW3cDataIntegrityProofDocument(\n options: W3cDataIntegrityVerifyProofDocumentOptions,\n supportedMediaTypes: string[]\n): ParseW3cDataIntegrityProofDocumentResult {\n const normalizedMediaType = options.mediaType.split(';')[0]?.trim().toLowerCase()\n if (!normalizedMediaType || !supportedMediaTypes.includes(normalizedMediaType)) {\n return {\n ok: false,\n result: createInvalidResult(\n createIssue(\n W3cDataIntegrityProcessingErrorCode.ParsingError,\n 'Unsupported media type for Data Integrity verification',\n `Received media type '${options.mediaType}'. Supported media types: ${supportedMediaTypes.join(', ')}`\n )\n ),\n }\n }\n\n let parsedDocument: unknown\n try {\n parsedDocument = JSON.parse(TypedArrayEncoder.toUtf8String(options.documentBytes))\n } catch (error) {\n return {\n ok: false,\n result: createInvalidResult(\n createIssue(\n W3cDataIntegrityProcessingErrorCode.ParsingError,\n 'Document bytes could not be parsed as JSON',\n error instanceof Error ? error.message : String(error)\n )\n ),\n }\n }\n\n if (!isObject(parsedDocument)) {\n return {\n ok: false,\n result: createInvalidResult(\n createIssue(\n W3cDataIntegrityProcessingErrorCode.ParsingError,\n 'Parsed Data Integrity document must be a JSON object'\n )\n ),\n }\n }\n\n const securedDocument = parsedDocument as W3cDataIntegritySecuredDocument\n if (!('proof' in securedDocument)) {\n return {\n ok: false,\n result: createInvalidResult(\n createIssue(W3cDataIntegrityProcessingErrorCode.ParsingError, 'Parsed Data Integrity document has no proof')\n ),\n }\n }\n\n return {\n ok: true,\n value: {\n normalizedMediaType,\n securedDocument,\n verifyOptions: {\n expectedProofPurpose: options.expectedProofPurpose,\n domain: options.domain,\n challenge: options.challenge,\n },\n },\n }\n}\n"],"mappings":";;;;;;;;;;;AA0BA,SAAgB,mCACd,SACA,qBAC0C;CAC1C,MAAM,sBAAsB,QAAQ,UAAU,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,YAAY;CAChF,IAAI,CAAC,uBAAuB,CAAC,oBAAoB,SAAS,mBAAmB,GAC3E,OAAO;EACL,IAAI;EACJ,QAAQ,oBACN,YAAA,mDAEE,0DACA,wBAAwB,QAAQ,UAAU,4BAA4B,oBAAoB,KAAK,IAAI,GACrG,CACF;CACF;CAGF,IAAI;CACJ,IAAI;EACF,iBAAiB,KAAK,MAAM,kBAAkB,aAAa,QAAQ,aAAa,CAAC;CACnF,SAAS,OAAO;EACd,OAAO;GACL,IAAI;GACJ,QAAQ,oBACN,YAAA,mDAEE,8CACA,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CACvD,CACF;EACF;CACF;CAEA,IAAI,CAAC,SAAS,cAAc,GAC1B,OAAO;EACL,IAAI;EACJ,QAAQ,oBACN,YAAA,mDAEE,sDACF,CACF;CACF;CAGF,MAAM,kBAAkB;CACxB,IAAI,EAAE,WAAW,kBACf,OAAO;EACL,IAAI;EACJ,QAAQ,oBACN,YAAA,mDAA8D,6CAA6C,CAC7G;CACF;CAGF,OAAO;EACL,IAAI;EACJ,OAAO;GACL;GACA;GACA,eAAe;IACb,sBAAsB,QAAQ;IAC9B,QAAQ,QAAQ;IAChB,WAAW,QAAQ;GACrB;EACF;CACF;AACF"}