UNPKG

@digitalbits-blockchain/xdb-digitalbits-sdk

Version:

@digitalbits-blockchain/xdb-digitalbits-sdk is a library for working with the DigitalBits Frontier server.

139 lines 6.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FederationServer = exports.FEDERATION_RESPONSE_MAX_SIZE = void 0; var tslib_1 = require("tslib"); var axios_1 = tslib_1.__importDefault(require("axios")); var xdb_digitalbits_base_1 = require("@digitalbits-blockchain/xdb-digitalbits-base"); var urijs_1 = tslib_1.__importDefault(require("urijs")); var config_1 = require("./config"); var errors_1 = require("./errors"); var digitalbits_toml_resolver_1 = require("./digitalbits_toml_resolver"); exports.FEDERATION_RESPONSE_MAX_SIZE = 100 * 1024; var FederationServer = (function () { function FederationServer(serverURL, domain, opts) { if (opts === void 0) { opts = {}; } this.serverURL = urijs_1.default(serverURL); this.domain = domain; var allowHttp = typeof opts.allowHttp === "undefined" ? config_1.Config.isAllowHttp() : opts.allowHttp; this.timeout = typeof opts.timeout === "undefined" ? config_1.Config.getTimeout() : opts.timeout; if (this.serverURL.protocol() !== "https" && !allowHttp) { throw new Error("Cannot connect to insecure federation server"); } } FederationServer.resolve = function (value, opts) { if (opts === void 0) { opts = {}; } return tslib_1.__awaiter(this, void 0, void 0, function () { var addressParts, domain, federationServer; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: if (value.indexOf("*") < 0) { if (!xdb_digitalbits_base_1.StrKey.isValidEd25519PublicKey(value)) { return [2, Promise.reject(new Error("Invalid Account ID"))]; } return [2, Promise.resolve({ account_id: value })]; } addressParts = value.split("*"); domain = addressParts[1]; if (addressParts.length !== 2 || !domain) { return [2, Promise.reject(new Error("Invalid DigitalBits address"))]; } return [4, FederationServer.createForDomain(domain, opts)]; case 1: federationServer = _a.sent(); return [2, federationServer.resolveAddress(value)]; } }); }); }; FederationServer.createForDomain = function (domain, opts) { if (opts === void 0) { opts = {}; } return tslib_1.__awaiter(this, void 0, void 0, function () { var tomlObject; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4, digitalbits_toml_resolver_1.DigitalBitsTomlResolver.resolve(domain, opts)]; case 1: tomlObject = _a.sent(); if (!tomlObject.FEDERATION_SERVER) { return [2, Promise.reject(new Error("digitalbits.toml does not contain FEDERATION_SERVER field"))]; } return [2, new FederationServer(tomlObject.FEDERATION_SERVER, domain, opts)]; } }); }); }; FederationServer.prototype.resolveAddress = function (address) { return tslib_1.__awaiter(this, void 0, void 0, function () { var digitalbitsAddress, url; return tslib_1.__generator(this, function (_a) { digitalbitsAddress = address; if (address.indexOf("*") < 0) { if (!this.domain) { return [2, Promise.reject(new Error("Unknown domain. Make sure `address` contains a domain (ex. `bob*digitalbits.io`) or pass `domain` parameter when instantiating the server object."))]; } digitalbitsAddress = address + "*" + this.domain; } url = this.serverURL.query({ type: "name", q: digitalbitsAddress }); return [2, this._sendRequest(url)]; }); }); }; FederationServer.prototype.resolveAccountId = function (accountId) { return tslib_1.__awaiter(this, void 0, void 0, function () { var url; return tslib_1.__generator(this, function (_a) { url = this.serverURL.query({ type: "id", q: accountId }); return [2, this._sendRequest(url)]; }); }); }; FederationServer.prototype.resolveTransactionId = function (transactionId) { return tslib_1.__awaiter(this, void 0, void 0, function () { var url; return tslib_1.__generator(this, function (_a) { url = this.serverURL.query({ type: "txid", q: transactionId }); return [2, this._sendRequest(url)]; }); }); }; FederationServer.prototype._sendRequest = function (url) { return tslib_1.__awaiter(this, void 0, void 0, function () { var timeout; return tslib_1.__generator(this, function (_a) { timeout = this.timeout; return [2, axios_1.default .get(url.toString(), { maxContentLength: exports.FEDERATION_RESPONSE_MAX_SIZE, timeout: timeout, }) .then(function (response) { if (typeof response.data.memo !== "undefined" && typeof response.data.memo !== "string") { throw new Error("memo value should be of type string"); } return response.data; }) .catch(function (response) { if (response instanceof Error) { if (response.message.match(/^maxContentLength size/)) { throw new Error("federation response exceeds allowed size of " + exports.FEDERATION_RESPONSE_MAX_SIZE); } else { return Promise.reject(response); } } else { return Promise.reject(new errors_1.BadResponseError("Server query failed. Server responded: " + response.status + " " + response.statusText, response.data)); } })]; }); }); }; return FederationServer; }()); exports.FederationServer = FederationServer; //# sourceMappingURL=federation_server.js.map