@tangle-js/anchors
Version:
Anchoring messages to the Tangle. Powered by IOTA Streams
94 lines • 8.34 kB
JavaScript
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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