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

52 lines (51 loc) • 2.19 kB
import { TypedArrayEncoder } from "../../../utils/TypedArrayEncoder.mjs"; import "../../../utils/index.mjs"; import { isObject } from "../../../utils/object.mjs"; import { createInvalidResult, createIssue } from "../W3cDataIntegrityError.mjs"; //#region src/modules/w3c-di/proof-processing/parsing.ts /** * Implements VC Data Integrity v1.0 §4.4 steps 1-2 document parsing preflight. * * Validates media type support, parses document bytes as JSON, and ensures * a proof container is present before verification dispatch. */ function parseW3cDataIntegrityProofDocument(options, supportedMediaTypes) { const normalizedMediaType = options.mediaType.split(";")[0]?.trim().toLowerCase(); if (!normalizedMediaType || !supportedMediaTypes.includes(normalizedMediaType)) return { ok: false, result: createInvalidResult(createIssue("https://www.w3.org/ns/credentials#PARSING_ERROR", "Unsupported media type for Data Integrity verification", `Received media type '${options.mediaType}'. Supported media types: ${supportedMediaTypes.join(", ")}`)) }; let parsedDocument; try { parsedDocument = JSON.parse(TypedArrayEncoder.toUtf8String(options.documentBytes)); } catch (error) { return { ok: false, result: createInvalidResult(createIssue("https://www.w3.org/ns/credentials#PARSING_ERROR", "Document bytes could not be parsed as JSON", error instanceof Error ? error.message : String(error))) }; } if (!isObject(parsedDocument)) return { ok: false, result: createInvalidResult(createIssue("https://www.w3.org/ns/credentials#PARSING_ERROR", "Parsed Data Integrity document must be a JSON object")) }; const securedDocument = parsedDocument; if (!("proof" in securedDocument)) return { ok: false, result: createInvalidResult(createIssue("https://www.w3.org/ns/credentials#PARSING_ERROR", "Parsed Data Integrity document has no proof")) }; return { ok: true, value: { normalizedMediaType, securedDocument, verifyOptions: { expectedProofPurpose: options.expectedProofPurpose, domain: options.domain, challenge: options.challenge } } }; } //#endregion export { parseW3cDataIntegrityProofDocument }; //# sourceMappingURL=parsing.mjs.map