@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
JavaScript
"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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