UNPKG

@jmcanterafonseca-iota/anchoring-channels

Version:

Powered by IOTA Streams, Anchor Channels is an easy to be used library that allows to anchor messages to the Tangle.

180 lines 10.5 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.IotaAnchoringChannel = void 0; const anchoringChannelError_1 = __importDefault(require("./errors/anchoringChannelError")); const anchoringChannelErrorNames_1 = __importDefault(require("./errors/anchoringChannelErrorNames")); const channelHelper_1 = require("./helpers/channelHelper"); const initializationHelper_1 = __importDefault(require("./helpers/initializationHelper")); const validationHelper_1 = __importDefault(require("./helpers/validationHelper")); const anchorMsgService_1 = __importDefault(require("./services/anchorMsgService")); const channelService_1 = __importDefault(require("./services/channelService")); const fetchMsgService_1 = __importDefault(require("./services/fetchMsgService")); // Needed for the Streams WASM bindings initializationHelper_1.default(); class IotaAnchoringChannel { constructor(node, seed) { this._node = node; this._seed = seed; if (!seed) { this._seed = channelHelper_1.ChannelHelper.generateSeed(); } } /** * Creates a new Anchoring Channel * * @param node The node * @param seed The seed * * @returns The anchoring channel */ static create(node, seed) { if (!validationHelper_1.default.url(node)) { throw new anchoringChannelError_1.default(anchoringChannelErrorNames_1.default.INVALID_NODE, "The node has to be a URL"); } return new IotaAnchoringChannel(node, seed); } /** * Binds to an existing channel or creates a new binding * * @param channelID in the form of 'channel_address:announce_msg_id' * * @returns reference to the channel * */ bind(channelID) { return __awaiter(this, void 0, void 0, function* () { if (this._subscriber) { throw new anchoringChannelError_1.default(anchoringChannelErrorNames_1.default.CHANNEL_ALREADY_BOUND, `Channel already bound to ${this._channelID}`); } if (!channelID) { const { channelAddress, announceMsgID } = yield channelService_1.default.createChannel(this._node, this._seed); this._channelAddress = channelAddress; this._announceMsgID = announceMsgID; this._channelID = `${channelAddress}:${announceMsgID}`; } else { const components = channelID.split(":"); if (Array.isArray(components) && components.length === 2) { this._channelID = channelID; this._channelAddress = components[0]; this._announceMsgID = components[1]; } else { throw new anchoringChannelError_1.default(anchoringChannelErrorNames_1.default.CHANNEL_BINDING_ERROR, `Invalid channel identifier: ${channelID}`); } } const bindRequest = { node: this._node, seed: this._seed, channelID: this._channelID }; this._subscriber = yield channelService_1.default.bindToChannel(bindRequest); return this; }); } /** * Returns the channelID ('channelAddress:announce_msg_id') * * @returns channel ID * */ get channelID() { return this._channelID; } /** * Returns the channel's address * * @returns channel address * */ get channelAddr() { return this._channelAddress; } /** * Returns the channel's first anchorage ID * * @returns anchorageID * */ get firstAnchorageID() { return this._announceMsgID; } /** * Returns the channel's node * * @returns node * */ get node() { return this._node; } /** * Returns the channel's seed * * @returns seed * */ get seed() { return this._seed; } /** * Anchors a message to the anchoring channel * * @param anchorageID The anchorage * @param message Message to be anchored * * @returns The result of the operation * */ anchor(anchorageID, message) { return __awaiter(this, void 0, void 0, function* () { if (!this._channelAddress) { throw new anchoringChannelError_1.default(anchoringChannelErrorNames_1.default.CHANNEL_NOT_BOUND, "Unbound anchoring channel. Please call bind first"); } const request = { channelID: this._channelID, subscriber: this._subscriber, message, anchorageID }; const result = yield anchorMsgService_1.default.anchor(request); return result; }); } /** * Fetches a previously anchored message * * @param anchorageID The anchorage point * @param messageID The ID of the message * * @returns The fetch result */ fetch(anchorageID, messageID) { return __awaiter(this, void 0, void 0, function* () { if (!this._channelAddress) { throw new anchoringChannelError_1.default(anchoringChannelErrorNames_1.default.CHANNEL_NOT_BOUND, "Unbound anchoring channel. Please call bind first"); } const request = { channelID: this._channelID, subscriber: this._subscriber, msgID: messageID, anchorageID }; return fetchMsgService_1.default.fetch(request); }); } } exports.IotaAnchoringChannel = IotaAnchoringChannel; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW90YUFuY2hvcmluZ0NoYW5uZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW90YUFuY2hvcmluZ0NoYW5uZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsMkZBQW1FO0FBQ25FLHFHQUE2RTtBQUM3RSwyREFBd0Q7QUFDeEQsMEZBQXdEO0FBQ3hELGtGQUEwRDtBQU0xRCxtRkFBMkQ7QUFDM0QsK0VBQXVEO0FBQ3ZELGlGQUF5RDtBQUV6RCx1Q0FBdUM7QUFDdkMsOEJBQVUsRUFBRSxDQUFDO0FBRWIsTUFBYSxvQkFBb0I7SUFhN0IsWUFBb0IsSUFBWSxFQUFFLElBQWE7UUFDM0MsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFFbEIsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNQLElBQUksQ0FBQyxLQUFLLEdBQUcsNkJBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUM3QztJQUNMLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFZLEVBQUUsSUFBYTtRQUM1QyxJQUFJLENBQUMsMEJBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzdCLE1BQU0sSUFBSSwrQkFBcUIsQ0FBQyxvQ0FBMEIsQ0FBQyxZQUFZLEVBQ25FLDBCQUEwQixDQUFDLENBQUM7U0FDbkM7UUFFRCxPQUFPLElBQUksb0JBQW9CLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ1UsSUFBSSxDQUFDLFNBQWtCOztZQUNoQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ2xCLE1BQU0sSUFBSSwrQkFBcUIsQ0FBQyxvQ0FBMEIsQ0FBQyxxQkFBcUIsRUFDNUUsNEJBQTRCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO2FB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