hive-js-dev
Version:
Steem.js the JavaScript API for Steem blockchain
189 lines (157 loc) • 7.47 kB
JavaScript
;
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 (steemAPI) {
function numberWithCommas(x) {
return x.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
function vestingSteem(account, gprops) {
var vests = parseFloat(account.vesting_shares.split(" ")[0]);
var total_vests = parseFloat(gprops.total_vesting_shares.split(" ")[0]);
var total_vest_steem = parseFloat(gprops.total_vesting_fund_steem.split(" ")[0]);
var vesting_steemf = total_vest_steem * (vests / total_vests);
return vesting_steemf;
}
function processOrders(open_orders, assetPrecision) {
var sbdOrders = !open_orders ? 0 : open_orders.reduce(function (o, order) {
if (order.sell_price.base.indexOf("SBD") !== -1) {
o += order.for_sale;
}
return o;
}, 0) / assetPrecision;
var steemOrders = !open_orders ? 0 : open_orders.reduce(function (o, order) {
if (order.sell_price.base.indexOf("STEEM") !== -1) {
o += order.for_sale;
}
return o;
}, 0) / assetPrecision;
return { steemOrders: steemOrders, sbdOrders: sbdOrders };
}
function calculateSaving(savings_withdraws) {
var savings_pending = 0;
var savings_sbd_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 === "STEEM") savings_pending += parseFloat(amount);else {
if (asset === "SBD") savings_sbd_pending += parseFloat(amount);
}
});
return { savings_pending: savings_pending, savings_sbd_pending: savings_sbd_pending };
}
function pricePerSteem(feed_price) {
var price_per_steem = undefined;
var base = feed_price.base,
quote = feed_price.quote;
if (/ SBD$/.test(base) && / STEEM$/.test(quote)) {
price_per_steem = parseFloat(base.split(" ")[0]) / parseFloat(quote.split(" ")[0]);
}
return price_per_steem;
}
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_steem = _ref.vesting_steem;
var promises = [];
var username = account.name;
var assetPrecision = 1000;
var orders = void 0,
savings = void 0;
if (!vesting_steem || !feed_price) {
if (!gprops || !feed_price) {
promises.push(steemAPI.getStateAsync("/@" + username).then(function (data) {
gprops = data.props;
feed_price = data.feed_price;
vesting_steem = vestingSteem(account, gprops);
}));
} else {
vesting_steem = vestingSteem(account, gprops);
}
}
if (!open_orders) {
promises.push(steemAPI.getOpenOrdersAsync(username).then(function (open_orders) {
orders = processOrders(open_orders, assetPrecision);
}));
} else {
orders = processOrders(open_orders, assetPrecision);
}
if (!savings_withdraws) {
promises.push(steemAPI.getSavingsWithdrawFromAsync(username).then(function (savings_withdraws) {
savings = calculateSaving(savings_withdraws);
}));
} else {
savings = calculateSaving(savings_withdraws);
}
return Promise.all(promises).then(function () {
var price_per_steem = pricePerSteem(feed_price);
var savings_balance = account.savings_balance;
var savings_sbd_balance = account.savings_sbd_balance;
var balance_steem = parseFloat(account.balance.split(" ")[0]);
var saving_balance_steem = parseFloat(savings_balance.split(" ")[0]);
var sbd_balance = parseFloat(account.sbd_balance);
var sbd_balance_savings = parseFloat(savings_sbd_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_sbd = sbd_balance + sbd_balance_savings + savings.savings_sbd_pending + orders.sbdOrders + conversionValue;
var total_steem = vesting_steem + balance_steem + saving_balance_steem + savings.savings_pending + orders.steemOrders;
return (total_steem * price_per_steem + total_sbd).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;
},
vestToSteem: function vestToSteem(vestingShares, totalVestingShares, totalVestingFundSteem) {
return parseFloat(totalVestingFundSteem) * (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,
vestingSteem: vestingSteem,
estimateAccountValue: estimateAccountValue,
createSuggestedPassword: createSuggestedPassword,
pricePerSteem: pricePerSteem
};
};