UNPKG

airgap-coin-lib

Version:

The airgap-coin-lib is a protocol agnostic library to prepare, sign and broadcast cryptocurrency transactions.

361 lines 19 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 __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (_) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; Object.defineProperty(exports, "__esModule", { value: true }); var index_1 = require("../../dependencies/src/axios-0.19.0/index"); var bignumber_1 = require("../../dependencies/src/bignumber.js-9.0.0/bignumber"); var CosmosNodeClient = /** @class */ (function () { function CosmosNodeClient(baseURL, useCORSProxy) { if (useCORSProxy === void 0) { useCORSProxy = true; } this.baseURL = baseURL; this.useCORSProxy = useCORSProxy; } CosmosNodeClient.prototype.fetchBalance = function (address, totalBalance) { return __awaiter(this, void 0, void 0, function () { var response, data, availableBalance, totalBalance_1; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, index_1.default.get(this.url("/bank/balances/" + address))]; case 1: response = _a.sent(); data = response.data.result; if (!(data.length > 0)) return [3 /*break*/, 5]; availableBalance = data[0].amount; if (!totalBalance) return [3 /*break*/, 3]; return [4 /*yield*/, Promise.all([ this.fetchTotalReward(address), this.fetchTotalUnbondingAmount(address), this.fetchTotalDelegatedAmount(address) ])]; case 2: totalBalance_1 = (_a.sent()).reduce(function (current, next) { return current.plus(next); }, new bignumber_1.default(availableBalance)); return [2 /*return*/, totalBalance_1.decimalPlaces(0, bignumber_1.default.ROUND_FLOOR)]; case 3: return [2 /*return*/, new bignumber_1.default(availableBalance).decimalPlaces(0, bignumber_1.default.ROUND_FLOOR)]; case 4: return [3 /*break*/, 6]; case 5: return [2 /*return*/, new bignumber_1.default(0)]; case 6: return [2 /*return*/]; } }); }); }; CosmosNodeClient.prototype.fetchNodeInfo = function () { return __awaiter(this, void 0, void 0, function () { var response, nodeInfo; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, index_1.default.get(this.url("/node_info"))]; case 1: response = _a.sent(); nodeInfo = response.data.node_info; return [2 /*return*/, nodeInfo]; } }); }); }; CosmosNodeClient.prototype.broadcastSignedTransaction = function (transaction) { return __awaiter(this, void 0, void 0, function () { var response; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, index_1.default.post(this.url("/txs"), transaction, { headers: { 'Content-type': 'application/json' } })]; case 1: response = _a.sent(); return [2 /*return*/, response.data.txhash]; } }); }); }; CosmosNodeClient.prototype.fetchAccount = function (address) { return __awaiter(this, void 0, void 0, function () { var response, account; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, index_1.default.get(this.url("/auth/accounts/" + address))]; case 1: response = _a.sent(); account = response.data.result; return [2 /*return*/, account]; } }); }); }; CosmosNodeClient.prototype.fetchDelegations = function (address, filterEmpty) { if (filterEmpty === void 0) { filterEmpty = true; } return __awaiter(this, void 0, void 0, function () { var response, delegations; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, index_1.default.get(this.url("/staking/delegators/" + address + "/delegations"))]; case 1: response = _a.sent(); if (response.data === null) { return [2 /*return*/, []]; } delegations = response.data.result; return [2 /*return*/, filterEmpty ? delegations.filter(function (delegation) { return new bignumber_1.default(delegation.balance).gt(0); }) : delegations]; } }); }); }; CosmosNodeClient.prototype.fetchTotalDelegatedAmount = function (address) { return __awaiter(this, void 0, void 0, function () { var delegations; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, this.fetchDelegations(address)]; case 1: delegations = _a.sent(); return [2 /*return*/, delegations .reduce(function (current, next) { return current.plus(new bignumber_1.default(next.balance)); }, new bignumber_1.default(0)) .decimalPlaces(0, bignumber_1.default.ROUND_FLOOR)]; } }); }); }; CosmosNodeClient.prototype.fetchValidator = function (address) { return __awaiter(this, void 0, void 0, function () { var response, validator; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, index_1.default.get(this.url("/staking/validators/" + address))]; case 1: response = _a.sent(); validator = response.data.result; return [2 /*return*/, validator]; } }); }); }; CosmosNodeClient.prototype.fetchValidators = function () { return __awaiter(this, void 0, void 0, function () { var response, validators; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, index_1.default.get(this.url('/staking/validators'))]; case 1: response = _a.sent(); validators = response.data.result; return [2 /*return*/, validators]; } }); }); }; CosmosNodeClient.prototype.fetchSelfDelegation = function (validatorAddress) { return __awaiter(this, void 0, void 0, function () { var validatorInfo, operatorAddress, response, delegation; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, index_1.default.get(this.url("/distribution/validators/" + validatorAddress))]; case 1: validatorInfo = _a.sent(); operatorAddress = validatorInfo.data.result.operator_address; return [4 /*yield*/, index_1.default.get(this.url("/staking/delegators/" + operatorAddress + "/delegations/" + validatorAddress))]; case 2: response = _a.sent(); delegation = response.data.result; return [2 /*return*/, delegation]; } }); }); }; CosmosNodeClient.prototype.fetchUnbondingDelegations = function (delegatorAddress) { return __awaiter(this, void 0, void 0, function () { var response, unbondingDelegations; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, index_1.default.get(this.url("/staking/delegators/" + delegatorAddress + "/unbonding_delegations"))]; case 1: response = _a.sent(); unbondingDelegations = response.data.result; return [2 /*return*/, unbondingDelegations]; } }); }); }; CosmosNodeClient.prototype.fetchTotalUnbondingAmount = function (address) { return __awaiter(this, void 0, void 0, function () { var unbondingDelegations, unbondings; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, this.fetchUnbondingDelegations(address)]; case 1: unbondingDelegations = _a.sent(); if (unbondingDelegations) { unbondings = unbondingDelegations.map(function (delegation) { return delegation.entries; }).reduce(function (current, next) { return current.concat(next); }, []); return [2 /*return*/, unbondings .reduce(function (current, next) { return current.plus(new bignumber_1.default(next.balance)); }, new bignumber_1.default(0)) .decimalPlaces(0, bignumber_1.default.ROUND_FLOOR)]; } return [2 /*return*/, new bignumber_1.default(0)]; } }); }); }; CosmosNodeClient.prototype.fetchRewardDetails = function (delegatorAddress) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, index_1.default.get(this.url("/distribution/delegators/" + delegatorAddress + "/rewards")) .then(function (response) { var _a; return (_a = response.data.result.rewards, (_a !== null && _a !== void 0 ? _a : [])); }) .catch(function () { return []; })]; }); }); }; CosmosNodeClient.prototype.fetchTotalReward = function (delegatorAddress) { return __awaiter(this, void 0, void 0, function () { var totalRewards; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, index_1.default.get(this.url("/distribution/delegators/" + delegatorAddress + "/rewards")) .then(function (response) { return response.data.result.total; }) .catch(function () { return []; })]; case 1: totalRewards = _a.sent(); if (totalRewards.length > 0) { return [2 /*return*/, new bignumber_1.default(totalRewards[0].amount).decimalPlaces(0, bignumber_1.default.ROUND_FLOOR)]; } return [2 /*return*/, new bignumber_1.default(0)]; } }); }); }; CosmosNodeClient.prototype.fetchRewardForDelegation = function (delegatorAddress, validatorAddress) { return __awaiter(this, void 0, void 0, function () { var totalRewards; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, index_1.default.get(this.url("/distribution/delegators/" + delegatorAddress + "/rewards/" + validatorAddress)) .then(function (response) { return response.data.result; }) .catch(function () { return []; })]; case 1: totalRewards = _a.sent(); if (totalRewards.length > 0) { return [2 /*return*/, new bignumber_1.default(totalRewards[0].amount).decimalPlaces(0, bignumber_1.default.ROUND_FLOOR)]; } return [2 /*return*/, new bignumber_1.default(0)]; } }); }); }; CosmosNodeClient.prototype.withdrawAllDelegationRewards = function (delegatorAddress, chainID, accountNumber, sequence, gas, fee, memo, simulate) { if (simulate === void 0) { simulate = false; } return __awaiter(this, void 0, void 0, function () { var body, response; return __generator(this, function (_a) { switch (_a.label) { case 0: body = { base_req: { from: delegatorAddress, memo: memo, chain_id: chainID, account_number: accountNumber, sequence: sequence, gas: gas.toFixed(), gas_adjustment: '1.2', fees: [ { denom: 'uatom', amount: fee.toFixed() } ], simulate: simulate } }; return [4 /*yield*/, index_1.default.post(this.url("/distribution/delegators/" + delegatorAddress + "/rewards"), JSON.stringify(body), { headers: { 'Content-type': 'application/json' } })]; case 1: response = _a.sent(); return [2 /*return*/, response.data.hash]; } }); }); }; CosmosNodeClient.prototype.withdrawDelegationRewards = function (delegatorAddress, validatorAdress, chainID, accountNumber, sequence, gas, fee, memo, simulate) { if (simulate === void 0) { simulate = false; } return __awaiter(this, void 0, void 0, function () { var body, response; return __generator(this, function (_a) { switch (_a.label) { case 0: body = { base_req: { from: delegatorAddress, memo: memo, chain_id: chainID, account_number: accountNumber, sequence: sequence, gas: gas.toFixed(), gas_adjustment: '1.2', fees: [ { denom: 'uatom', amount: fee.toFixed() } ], simulate: simulate } }; return [4 /*yield*/, index_1.default.post(this.url("/distribution/delegators/" + delegatorAddress + "/rewards/" + validatorAdress), JSON.stringify(body), { headers: { 'Content-type': 'application/json' } })]; case 1: response = _a.sent(); return [2 /*return*/, response.data.hash]; } }); }); }; CosmosNodeClient.prototype.url = function (path) { var result = "" + this.baseURL + path; if (this.useCORSProxy) { result = "https://cors-proxy.airgap.prod.gke.papers.tech/proxy?url=" + encodeURI(result); } return result; }; return CosmosNodeClient; }()); exports.CosmosNodeClient = CosmosNodeClient; //# sourceMappingURL=CosmosNodeClient.js.map