@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
77 lines (73 loc) • 3.08 kB
JavaScript
import { CredoError } from "../../../error/CredoError.mjs";
import "../../../error/index.mjs";
import { SECURITY_CONTEXT_URL } from "../constants.mjs";
import jsonld_default from "./libraries/jsonld.mjs";
import { W3cJsonLdVerifiableCredential } from "./models/W3cJsonLdVerifiableCredential.mjs";
//#region src/modules/vc/data-integrity/jsonldUtil.ts
const _includesContext = (options) => {
const context = options.document["@context"];
return context === options.contextUrl || Array.isArray(context) && context.includes(options.contextUrl);
};
function assertOnlyW3cJsonLdVerifiableCredentials(credentials) {
if (credentials.some((c) => !(c instanceof W3cJsonLdVerifiableCredential))) throw new CredoError("JSON-LD VPs can only contain JSON-LD VCs");
}
/**
* The property identifying the linked data proof
* Note - this will not work for legacy systems that
* relying on `signature`
*/
const PROOF_PROPERTY = "proof";
/**
* Gets a supported linked data proof from a JSON-LD Document
* Note - unless instructed not to the document will be compacted
* against the security v2 context @see https://w3id.org/security/v2
*
* @param options Options for extracting the proof from the document
*
* @returns {GetProofsResult} An object containing the matched proofs and the JSON-LD document
*/
const getProofs = async (options) => {
const { proofType, skipProofCompaction, documentLoader } = options;
let { document } = options;
let proofs;
if (!skipProofCompaction) document = await jsonld_default.compact(document, SECURITY_CONTEXT_URL, {
documentLoader,
compactToRelative: false
});
proofs = jsonld_default.getValues(document, PROOF_PROPERTY);
delete document[PROOF_PROPERTY];
if (typeof proofType === "string") proofs = proofs.filter((_) => _.type === proofType);
if (Array.isArray(proofType)) proofs = proofs.filter((_) => proofType.includes(_.type));
proofs = proofs.map((matchedProof) => ({
"@context": SECURITY_CONTEXT_URL,
...matchedProof
}));
return {
proofs,
document
};
};
/**
* Gets the JSON-LD type information for a document
* @param document {any} JSON-LD document to extract the type information from
* @param options {GetTypeInfoOptions} Options for extracting the JSON-LD document
*
* @returns {object} Type info for the JSON-LD document
*/
const getTypeInfo = async (document, options) => {
const { documentLoader } = options;
const context = jsonld_default.getValues(document, "@context");
const compacted = await jsonld_default.compact({ "@type": "_:b0" }, context, { documentLoader });
delete compacted["@context"];
const alias = Object.keys(compacted)[0];
const toExpand = { "@context": context };
toExpand["@type"] = jsonld_default.getValues(document, "@type").concat(jsonld_default.getValues(document, alias));
const expanded = (await jsonld_default.expand(toExpand, { documentLoader }))[0] || {};
return {
types: jsonld_default.getValues(expanded, "@type"),
alias
};
};
//#endregion
export { _includesContext, assertOnlyW3cJsonLdVerifiableCredentials, getProofs, getTypeInfo };
//# sourceMappingURL=jsonldUtil.mjs.map