UNPKG

@tangle-js/ld-proofs

Version:

Linked Data Proofs on the Tangle. Powered by IOTA Identity & IOTA Streams

77 lines 5.6 kB
/* eslint-disable jsdoc/require-jsdoc */ import { IotaAnchoringChannel, ProtocolHelper } from "@tangle-js/anchors"; import { LinkedDataProofTypes } from "./models/linkedDataProofTypes.mjs"; export class IotaLdProofGenerator { constructor(anchoringChannel, signer) { this.anchoringChannel = anchoringChannel; this.signer = signer; } /** * Creates a new instance of LD Proof Generator. * * @param anchoringChannel The anchoring channel to be used. * @param signer The signer to be used. * @returns The LD Proof generator. */ static create(anchoringChannel, signer) { return new IotaLdProofGenerator(anchoringChannel, signer); } /** * Generates a Linked Data Proof for a JSON(-LD) document by anchoring it to the anchorage provided. * * @param doc Document. * @param options Containing the parameters to be used to generate the proof. * @returns Linked Data Proof. */ async generate(doc, options) { const linkedDataSignature = await this.signer.signJson(doc, options); // Now we take the Linked Data Signature and anchor it to Tangle through the Channel const anchoringResult = await this.anchoringChannel.anchor(Buffer.from(JSON.stringify(linkedDataSignature)), options.anchorageID); return this.buildLdProof(anchoringResult); } /** * Generates a chain of Linked Data Proofs for the JSON(-LD) documents passed as parameter. * * @param docs The chain of documents. * @param options The Parameters to be used when generating the chain of proofs. * @returns The list of Linked Data Proof. */ async generateChain(docs, options) { const result = []; const proofOptions = { ...options }; for (const doc of docs) { const ldProof = await this.generate(doc, proofOptions); result.push(ldProof); // The next anchorage is the proof Message ID proofOptions.anchorageID = ldProof.proofValue.msgID; } return result; } async buildLdProof(anchoringResult) { let msgIDL1 = ""; try { msgIDL1 = await ProtocolHelper.getMsgIdL1(this.anchoringChannel, anchoringResult.msgID); } catch (e) { // eslint-disable-next-line no-console console.error(e.message); } const linkedDataProof = { type: LinkedDataProofTypes.IOTA_LD_PROOF_2021, // This has to be made more accurate pointing to the public key used to send data to the channel verificationMethod: this.signer.did, proofPurpose: "dataVerification", proofValue: { channelID: this.anchoringChannel.channelID, anchorageID: anchoringResult.anchorageID, msgID: anchoringResult.msgID, msgIDL1 }, created: new Date().toISOString() }; return linkedDataProof; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW90YUxkUHJvb2ZHZW5lcmF0b3IubWpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2lvdGFMZFByb29mR2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHdDQUF3QztBQUV4QyxPQUFPLEVBQXlCLG9CQUFvQixFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBTWpHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXJFLE1BQU0sT0FBTyxvQkFBb0I7SUFPN0IsWUFBb0IsZ0JBQXNDLEVBQUUsTUFBa0I7UUFDMUUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsTUFBTSxDQUFDLGdCQUFzQyxFQUFFLE1BQWtCO1FBQzNFLE9BQU8sSUFBSSxvQkFBb0IsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUEyQixFQUFFLE9BQXdCO1FBQ3ZFLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFckUsb0ZBQW9GO1FBQ3BGLE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FDdEQsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUMsRUFDaEQsT0FBTyxDQUFDLFdBQVcsQ0FDdEIsQ0FBQztRQUVGLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFnQyxFQUN2RCxPQUF3QjtRQUN4QixNQUFNLE1BQU0sR0FBMkIsRUFBRSxDQUFDO1FBRTFDLE1BQU0sWUFBWSxHQUFvQjtZQUNsQyxHQUFHLE9BQU87U0FDYixDQUFDO1FBRUYsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7WUFDcEIsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUN2RCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JCLDZDQUE2QztZQUM3QyxZQUFZLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO1NBQ3ZEO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVPLEtBQUssQ0FBQyxZQUFZLENBQUMsZUFBaUM7UUFDeEQsSUFBSSxPQUFPLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLElBQUk7WUFDQSxPQUFPLEdBQUcsTUFBTSxjQUFjLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0Y7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNSLHNDQUFzQztZQUN0QyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM1QjtRQUVELE1BQU0sZUFBZSxHQUF5QjtZQUMxQyxJQUFJLEVBQUUsb0JBQW9CLENBQUMsa0JBQWtCO1lBQzdDLGdHQUFnRztZQUNoRyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUc7WUFDbkMsWUFBWSxFQUFFLGtCQUFrQjtZQUNoQyxVQUFVLEVBQUU7Z0JBQ1IsU0FBUyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTO2dCQUMxQyxXQUFXLEVBQUUsZUFBZSxDQUFDLFdBQVc7Z0JBQ3hDLEtBQUssRUFBRSxlQUFlLENBQUMsS0FBSztnQkFDNUIsT0FBTzthQUNWO1lBQ0QsT0FBTyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1NBQ3BDLENBQUM7UUFFRixPQUFPLGVBQWUsQ0FBQztJQUMzQixDQUFDO0NBQ0oifQ==