UNPKG

@ledgerhq/live-common

Version:
60 lines 1.95 kB
import { FeeEstimationFailed } from "@ledgerhq/errors"; import { makeLRUCache } from "@ledgerhq/live-network/cache"; import network from "@ledgerhq/live-network"; import { BigNumber } from "bignumber.js"; import invariant from "invariant"; import { blockchainBaseURL } from "@ledgerhq/coin-bitcoin/explorer"; const getEstimatedFees = makeLRUCache(async (currency) => { const baseURL = blockchainBaseURL(currency); invariant(baseURL, `Fees for ${currency.id} are not supported`); const { data, status } = await network({ method: "GET", url: `${baseURL}/fees`, }); if (data) { return data; } throw new FeeEstimationFailed(`FeeEstimationFailed ${status}`, { httpStatus: status, }); }, c => c.id); export const speeds = new Map([ [1, "fast"], [3, "medium"], [6, "slow"], ]); export const defaultBlockCount = 3; /** * Returns the current network fee rate(fast, medium, slow) from our backend for a given currency */ export const getFeeItems = async (currency) => { const all = []; const fees = await getEstimatedFees(currency); let defaultFeePerByte = new BigNumber(0); for (const key of Object.keys(fees)) { const feePerByte = new BigNumber(Math.ceil(fees[key] / 1000)); const blockCount = parseInt(key, 10); if (blockCount === defaultBlockCount) defaultFeePerByte = feePerByte; if (!Number.isNaN(blockCount) && !feePerByte.isNaN() && speeds.has(blockCount)) { all.push({ key, speed: speeds.get(blockCount), blockCount, feePerByte, }); } } const items = all .sort((a, b) => a.blockCount - b.blockCount) .map(({ key, speed, feePerByte }) => ({ key, speed, feePerByte, })); return { items, defaultFeePerByte, }; }; //# sourceMappingURL=api.js.map