import lndService from 'ln-service' import lnd from '../lnd' const cache = new Map() const expiresIn = 1000 * 30 // 30 seconds in milliseconds async function fetchChainFeeRate () { let chainFee = 0 try { const fee = await lndService.getChainFeeRate({ lnd }) chainFee = fee.tokens_per_vbyte } catch (err) { console.error('fetchChainFee', err) } cache.set('fee', { fee: chainFee, createdAt: Date.now() }) return chainFee } async function getChainFeeRate () { if (cache.has('fee')) { const { fee, createdAt } = cache.get('fee') const expired = createdAt + expiresIn < Date.now() if (expired) fetchChainFeeRate().catch(console.error) // update cache return fee } else { fetchChainFeeRate().catch(console.error) } return 0 } export default { Query: { chainFee: async (parent, opts, ctx) => { return await getChainFeeRate() } } }