UNPKG

bitcore-node

Version:

A blockchain indexing node with extended capabilities using bitcore

72 lines 2.93 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const express_1 = __importDefault(require("express")); const config_1 = __importDefault(require("../../config")); const logger_1 = __importDefault(require("../../logger")); const chain_state_1 = require("../../providers/chain-state"); const middleware_1 = require("../middleware"); const middleware_2 = require("../middleware"); const router = express_1.default.Router({ mergeParams: true }); const feeCache = {}; const feeModes = { BTC: ['CONSERVATIVE', 'ECONOMICAL'], LTC: ['CONSERVATIVE', 'ECONOMICAL'] }; router.get('/:target', (0, middleware_2.CacheMiddleware)(middleware_1.CacheTimes.Second), async (req, res) => { let { chain, network, target } = req.params; let { mode, txType } = req.query; if (!chain || !network) { return res.status(400).send('Missing required param'); } chain = chain.toUpperCase(); network = network.toLowerCase(); mode = mode?.toUpperCase(); const targetNum = Number(target); if (targetNum < 0 || targetNum > 100) { return res.status(400).send('invalid target specified'); } if (!mode) { mode = config_1.default.chains[chain]?.[network]?.defaultFeeMode; } else if (!feeModes[chain]) { mode = undefined; } else if (!feeModes[chain]?.includes(mode)) { return res.status(400).send('invalid mode specified'); } if (txType && txType.toString() != '2') { return res.status(400).send('invalid txType specified'); } let feeCacheKey = `${chain}:${network}:${target}`; feeCacheKey += `${mode ? ':' + mode : ''}`; feeCacheKey += `${txType ? ':type' + txType : ''}`; const cachedFee = feeCache[feeCacheKey]; if (cachedFee && cachedFee.date > Date.now() - 10 * 1000) { return res.json(cachedFee.fee); } try { let fee = await chain_state_1.ChainStateProvider.getFee({ chain, network, target: targetNum, mode, txType }); if (!fee) { return res.status(404).send('not available right now'); } // As of v0.21.2.2, Litecoin Core has a bug where it returns a fee rate of 0.00000999 which is below the min relay fee (0.00001). // TODO: remove this if statement once https://github.com/litecoin-project/litecoin/issues/908 is fixed. if (chain === 'LTC' && fee.feerate && fee.feerate < 0.00001) { fee.feerate = 0.00001; } feeCache[feeCacheKey] = { fee, date: Date.now() }; return res.json(fee); } catch (err) { logger_1.default.error('Fee Error: %o', err.message || err); return res.status(500).send('Error getting fee from RPC'); } }); module.exports = { router, path: '/fee' }; //# sourceMappingURL=fee.js.map