@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
JavaScript
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