@filfox/fnsjs
Version:
Library For FNS
128 lines (127 loc) • 4.8 kB
JavaScript
;
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
};