dpayjs
Version:
dPay.js the JavaScript API for dPay blockchain
181 lines (151 loc) • 7.26 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 (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
};
};