UNPKG

@filfox/fnsjs

Version:

Library For FNS

128 lines (127 loc) 4.8 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 __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getFilMarketPrice = exports.formatAssetValue = exports.formatUnits = exports.toFixed = exports.convertToEthAddr = exports.isTimeBefore = exports.formatTime = exports.labelhash = exports.trimSuffix = void 0; const utils_1 = require("ethers/lib/utils"); const bignumber_js_1 = __importDefault(require("bignumber.js")); const ethers_1 = require("ethers"); const moment_1 = __importDefault(require("moment")); const axios_1 = __importDefault(require("axios")); const filecoin_address_1 = require("@glif/filecoin-address"); function trimSuffix(name) { return name.replace(/\.fil$/g, ''); } exports.trimSuffix = trimSuffix; function labelhash(label) { return (0, utils_1.keccak256)((0, utils_1.toUtf8Bytes)(label)); } exports.labelhash = labelhash; function formatTime(timestamp, format = 'YYYY-MM-DD HH:mm') { return moment_1.default.unix(timestamp).utc().format(format); } exports.formatTime = formatTime; function isTimeBefore(t1, t2) { return moment_1.default.unix(t1).isBefore(moment_1.default.unix(t2)); } exports.isTimeBefore = isTimeBefore; function convertToEthAddr(addr) { if (!addr) return ''; const isEthAddr = ethers_1.utils.isAddress(addr); if (isEthAddr) return addr.toLowerCase(); const isFilAddr = (0, filecoin_address_1.validateAddressString)(addr); const isF4Addr = isFilAddr && /^[fFtT]4/.test(addr); if (isF4Addr) { const ethAddr = (0, filecoin_address_1.ethAddressFromDelegated)(addr); return ethAddr.toLowerCase(); } throw new TypeError('Invalid eth or f4 address'); } exports.convertToEthAddr = convertToEthAddr; function toFixed(value, digits = 0) { if (value < 1 && value > 0) { return new bignumber_js_1.default(value) .toFixed() .replace(new RegExp(`^(0.0*[1-9][0-9]{${digits - 1}}).*`), '$1') .replace(/0+$/, ''); } return new bignumber_js_1.default(value) .times(Math.pow(10, digits)) .dp(0, bignumber_js_1.default.ROUND_DOWN) .div(Math.pow(10, digits)) .toFixed(); } exports.toFixed = toFixed; function formatUnits(value, decimals = 18, digits = decimals, simple = false) { // check for ethers' BigNumber if (ethers_1.BigNumber.isBigNumber(value)) { value = value.toString(); } value = new bignumber_js_1.default(value); // is 0 ? if (value.eq(0)) { return '0'; } const units = toFixed(value.div(Math.pow(10, decimals)), digits); if (digits < decimals && Number(units) < 1 / Math.pow(10, digits) && simple) { return '<' + `0.${'1'.padStart(digits, '0')}`; } return units; } exports.formatUnits = formatUnits; function formatAssetValue(balance, price, decimals = 18, digits = decimals) { if (balance === undefined) { return '0'; } if (ethers_1.BigNumber.isBigNumber(balance)) { balance = balance.toString(); } return new bignumber_js_1.default(balance) .div(Math.pow(10, decimals)) .times(price) .times(Math.pow(10, digits)) .dp(0) .div(Math.pow(10, digits)) .toFixed(digits); } exports.formatAssetValue = formatAssetValue; function getFilMarketPrice() { return __awaiter(this, void 0, void 0, function* () { let price = 0; try { const { data } = yield axios_1.default.get('https://api.coingecko.com/api/v3/simple/price', { params: { ids: 'filecoin', vs_currencies: 'usd' } }); price = data.filecoin.usd; } catch (error) { throw new Error('Get fil market price error'); } finally { return price; } }); } exports.getFilMarketPrice = getFilMarketPrice; exports.default = { trimSuffix, labelhash, formatTime, isTimeBefore, toFixed, formatUnits, formatAssetValue, getFilMarketPrice };