@tangle-js/anchors
Version:
Anchoring messages to the Tangle. Powered by IOTA Streams
51 lines • 3.69 kB
JavaScript
import { Address, ChannelAddress, MsgId, Subscriber } from "@tangle.js/streams-wasm/node/streams.js";
export class ChannelHelper {
/**
* Converts an address representing as a two component string (channel addr: message Id)
* into an Address object
*
* @param addressStr the address string
* @returns the Address object
*/
static parseAddress(addressStr) {
const [channelAddr, msgId] = addressStr.split(":");
return new Address(ChannelAddress.parse(channelAddr).copy(), MsgId.parse(msgId));
}
/**
* Finds an anchorage message on the channel by going through the messages
*
* @param subs Subscriber
* @param anchorageID The anchorage identifier
* @returns whether it has been found and the link to the anchorage on the Channel
*/
static async findAnchorage(subs, anchorageID) {
let found = false;
let anchorageLink;
let response;
try {
// First we try to read such message
const candidateLink = new Address(ChannelAddress.parse(subs.clone().channel_address()), MsgId.parse(anchorageID));
response = await subs.clone().receive_signed_packet(candidateLink);
}
catch {
// The message has not been found
}
if (response) {
anchorageLink = response.link.copy();
found = true;
}
while (!found) {
// Iteratively retrieve messages until We find the one to anchor to
const message = await subs.clone().fetchNextMsg();
if (!message) {
break;
}
anchorageLink = message.link.copy();
if (anchorageLink.msgId.toString() === anchorageID) {
found = true;
}
}
return { found, anchorageLink };
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbm5lbEhlbHBlci5tanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaGVscGVycy9jaGFubmVsSGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUVyRyxNQUFNLE9BQU8sYUFBYTtJQUN0Qjs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsWUFBWSxDQUFDLFVBQWtCO1FBQ3pDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRCxPQUFPLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFnQixFQUFFLFdBQW1CO1FBRW5FLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNsQixJQUFJLGFBQXNCLENBQUM7UUFFM0IsSUFBSSxRQUFRLENBQUM7UUFFYixJQUFJO1lBQ0Esb0NBQW9DO1lBQ3BDLE1BQU0sYUFBYSxHQUFHLElBQUksT0FBTyxDQUM3QixjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxFQUNwRCxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUMzQixDQUFDO1lBQ0YsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3RFO1FBQUMsTUFBTTtZQUNKLGlDQUFpQztTQUNwQztRQUVELElBQUksUUFBUSxFQUFFO1lBQ1YsYUFBYSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckMsS0FBSyxHQUFHLElBQUksQ0FBQztTQUNoQjtRQUVELE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDWCxtRUFBbUU7WUFDbkUsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDVixNQUFNO2FBQ1Q7WUFFRCxhQUFhLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUVwQyxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssV0FBVyxFQUFFO2dCQUNoRCxLQUFLLEdBQUcsSUFBSSxDQUFDO2FBQ2hCO1NBQ0o7UUFFRCxPQUFPLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxDQUFDO0lBQ3BDLENBQUM7Q0FDSiJ9