UNPKG

@tangle-js/anchors

Version:

Anchoring messages to the Tangle. Powered by IOTA Streams

94 lines 8.34 kB
import { AnchoringChannelError } from "../errors/anchoringChannelError.mjs"; import { AnchoringChannelErrorNames } from "../errors/anchoringChannelErrorNames.mjs"; import { ChannelHelper } from "../helpers/channelHelper.mjs"; export default class FetchMsgService { static async fetch(request) { const subs = request.subscriber; const components = request.channelID.split(":"); let targetMsgID = components[1]; // If it is encrypted the first anchorage is the keyLoad if (request.isPrivate) { targetMsgID = components[2]; } const anchorageID = request.anchorageID; let found = true; if (anchorageID !== targetMsgID) { ({ found } = await ChannelHelper.findAnchorage(subs, anchorageID)); } if (!found) { throw new AnchoringChannelError(AnchoringChannelErrorNames.ANCHORAGE_NOT_FOUND, `The anchorage point ${anchorageID} has not been found on the channel`); } const msgID = request.msgID; let response; // If the messageID is passed we retrieve it if (msgID) { try { const msgLink = ChannelHelper.parseAddress(`${subs.clone().channel_address()}:${msgID}`); response = await subs.clone().receive_signed_packet(msgLink); } catch { throw new AnchoringChannelError(AnchoringChannelErrorNames.MSG_NOT_FOUND, `The message ${msgID} has not been found on the Channel`); } } else { // Otherwise we just fetch the next message response = await subs.clone().fetchNextMsg(); if (!response) { throw new AnchoringChannelError(AnchoringChannelErrorNames.MSG_NOT_FOUND, `There is no message anchored to ${anchorageID}`); } } let messageContent = Buffer.from(response.message.get_public_payload()); if (request.encrypted) { messageContent = Buffer.from(response.message.get_masked_payload()); } const receivedMsgID = response.link.copy().msgId.toString(); if (msgID && receivedMsgID !== msgID) { throw new Error("Requested message ID and fetched message ID are not equal"); } const pk = response.message.get_identifier(); return { message: messageContent, msgID: receivedMsgID, pk }; } static async receive(request) { const subs = request.subscriber; const msgID = request.msgID; let response; const msgLink = ChannelHelper.parseAddress(`${subs.clone().channel_address()}:${msgID}`); try { response = await subs.clone().receive_signed_packet(msgLink); } catch { throw new AnchoringChannelError(AnchoringChannelErrorNames.MSG_NOT_FOUND, `The message ${msgID} has not been found on the Channel`); } // In the future we would need to check that the anchorageID is the expected one let messageContent = Buffer.from(response.message.get_public_payload()); if (request.encrypted) { messageContent = Buffer.from(response.message.get_masked_payload()); } const pk = response.message.get_identifier(); return { message: messageContent, msgID, pk }; } static async fetchNext(subscriber, encrypted) { const msg = await subscriber.clone().fetchNextMsg(); if (!msg) { return; } const result = { msgID: msg.link.copy().msgId.toString(), pk: msg.message.get_identifier(), message: Buffer.from(msg.message.get_public_payload()) }; if (encrypted) { result.message = Buffer.from(msg.message.get_masked_payload()); } return result; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmV0Y2hNc2dTZXJ2aWNlLm1qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9mZXRjaE1zZ1NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBSXpELE1BQU0sQ0FBQyxPQUFPLE9BQU8sZUFBZTtJQUMzQixNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFzQjtRQUM5QyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBRWhDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hELElBQUksV0FBVyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQyx3REFBd0Q7UUFDeEQsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQ3JCLFdBQVcsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDN0I7UUFFRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBRXhDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztRQUVqQixJQUFJLFdBQVcsS0FBSyxXQUFXLEVBQUU7WUFDL0IsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sYUFBYSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztTQUNwRTtRQUVELElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixNQUFNLElBQUkscUJBQXFCLENBQUMsMEJBQTBCLENBQUMsbUJBQW1CLEVBQzVFLHVCQUF1QixXQUFXLG9DQUFvQyxDQUFDLENBQUM7U0FDM0U7UUFFRCxNQUFN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