UNPKG

dpayjs

Version:

dPay.js the JavaScript API for dPay blockchain

181 lines (151 loc) 7.26 kB
"use strict"; var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); var _get = require("lodash/get"); var _get2 = _interopRequireDefault(_get); var _ecc = require("./auth/ecc"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } module.exports = function (dpayApi) { function numberWithCommas(x) { return x.replace(/\B(?=(\d{3})+(?!\d))/g, ","); } function vestingDPay(account, gprops) { var vests = parseFloat(account.vesting_shares.split(" ")[0]); var total_vests = parseFloat(gprops.total_vesting_shares.split(" ")[0]); var total_vest_dpay = parseFloat(gprops.total_vesting_fund_dpay.split(" ")[0]); var vesting_dpayf = total_vest_dpay * (vests / total_vests); return vesting_dpayf; } function processOrders(open_orders, assetPrecision) { var bbdOrders = !open_orders ? 0 : open_orders.reduce(function (o, order) { if (order.sell_price.base.indexOf("BBD") !== -1) { o += order.for_sale; } return o; }, 0) / assetPrecision; var dpayOrders = !open_orders ? 0 : open_orders.reduce(function (o, order) { if (order.sell_price.base.indexOf("BEX") !== -1) { o += order.for_sale; } return o; }, 0) / assetPrecision; return { dpayOrders: dpayOrders, bbdOrders: bbdOrders }; } function calculateSaving(savings_withdraws) { var savings_pending = 0; var savings_bbd_pending = 0; savings_withdraws.forEach(function (withdraw) { var _withdraw$amount$spli = withdraw.amount.split(" "), _withdraw$amount$spli2 = _slicedToArray(_withdraw$amount$spli, 2), amount = _withdraw$amount$spli2[0], asset = _withdraw$amount$spli2[1]; if (asset === "BEX") savings_pending += parseFloat(amount);else { if (asset === "BBD") savings_bbd_pending += parseFloat(amount); } }); return { savings_pending: savings_pending, savings_bbd_pending: savings_bbd_pending }; } function estimateAccountValue(account) { var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, gprops = _ref.gprops, feed_price = _ref.feed_price, open_orders = _ref.open_orders, savings_withdraws = _ref.savings_withdraws, vesting_dpay = _ref.vesting_dpay; var promises = []; var username = account.name; var assetPrecision = 1000; var orders = void 0, savings = void 0; if (!vesting_dpay || !feed_price) { if (!gprops || !feed_price) { promises.push(dpayApi.getStateAsync("/@{username}").then(function (data) { gprops = data.props; feed_price = data.feed_price; vesting_dpay = vestingDPay(account, gprops); })); } else { vesting_dpay = vestingDPay(account, gprops); } } if (!open_orders) { promises.push(dpayApi.getOpenOrdersAsync(username).then(function (open_orders) { orders = processOrders(open_orders, assetPrecision); })); } else { orders = processOrders(open_orders, assetPrecision); } if (!savings_withdraws) { promises.push(dpayApi.getSavingsWithdrawFromAsync(username).then(function (savings_withdraws) { savings = calculateSaving(savings_withdraws); })); } else { savings = calculateSaving(savings_withdraws); } return Promise.all(promises).then(function () { var price_per_dpay = undefined; var _feed_price = feed_price, base = _feed_price.base, quote = _feed_price.quote; if (/ BBD$/.test(base) && / BEX/.test(quote)) price_per_dpay = parseFloat(base.split(" ")[0]); var savings_balance = account.savings_balance; var savings_bbd_balance = account.savings_bbd_balance; var balance_dpay = parseFloat(account.balance.split(" ")[0]); var saving_balance_dpay = parseFloat(savings_balance.split(" ")[0]); var bbd_balance = parseFloat(account.bbd_balance); var bbd_balance_savings = parseFloat(savings_bbd_balance.split(" ")[0]); var conversionValue = 0; var currentTime = new Date().getTime(); (account.other_history || []).reduce(function (out, item) { if ((0, _get2.default)(item, [1, "op", 0], "") !== "convert") return out; var timestamp = new Date((0, _get2.default)(item, [1, "timestamp"])).getTime(); var finishTime = timestamp + 86400000 * 3.5; // add 3.5day conversion delay if (finishTime < currentTime) return out; var amount = parseFloat((0, _get2.default)(item, [1, "op", 1, "amount"]).replace(" SBD", "")); conversionValue += amount; }, []); var total_bbd = bbd_balance + bbd_balance_savings + savings.savings_bbd_pending + orders.bbdOrders + conversionValue; var total_dpay = vesting_dpay + balance_dpay + saving_balance_dpay + savings.savings_pending + orders.dpayOrders; return (total_dpay * price_per_dpay + total_bbd).toFixed(2); }); } function createSuggestedPassword() { var PASSWORD_LENGTH = 32; var privateKey = _ecc.key_utils.get_random_key(); return privateKey.toWif().substring(3, 3 + PASSWORD_LENGTH); } return { reputation: function reputation(_reputation) { if (_reputation == null) return _reputation; _reputation = parseInt(_reputation); var rep = String(_reputation); var neg = rep.charAt(0) === "-"; rep = neg ? rep.substring(1) : rep; var str = rep; var leadingDigits = parseInt(str.substring(0, 4)); var log = Math.log(leadingDigits) / Math.log(10); var n = str.length - 1; var out = n + (log - parseInt(log)); if (isNaN(out)) out = 0; out = Math.max(out - 9, 0); out = (neg ? -1 : 1) * out; out = out * 9 + 25; out = parseInt(out); return out; }, vestToDPay: function vestToDPay(vestingShares, totalVestingShares, totalVestingFundDPay) { return parseFloat(totalVestingFundDPay) * (parseFloat(vestingShares) / parseFloat(totalVestingShares)); }, commentPermlink: function commentPermlink(parentAuthor, parentPermlink) { var timeStr = new Date().toISOString().replace(/[^a-zA-Z0-9]+/g, "").toLowerCase(); parentPermlink = parentPermlink.replace(/(-\d{8}t\d{9}z)/g, ""); return "re-" + parentAuthor + "-" + parentPermlink + "-" + timeStr; }, amount: function amount(_amount, asset) { return _amount.toFixed(3) + " " + asset; }, numberWithCommas: numberWithCommas, vestingDPay: vestingDPay, estimateAccountValue: estimateAccountValue, createSuggestedPassword: createSuggestedPassword }; };