cc289089cf
* not-custodial zap scaffolding * invoice forward state machine * small refinements to state machine * make wrap invoice work * get state machine working end to end * untested logic layout for paidAction invoice wraps * perform pessimisitic actions before outgoing payment * working end to end * remove unneeded params from wallets/server/createInvoice * fix cltv relative/absolute confusion + cancelling forwards * small refinements * add p2p wrap info to paidAction docs * fallback to SN invoice when wrap fails * fix paidAction retry description * consistent naming scheme for state machine * refinements * have sn pay bounded outbound fee * remove debug logging * reenable lnc permissions checks * don't p2p zap on item forward splits * make createInvoice params json encodeable * direct -> p2p badge on notifications * allow no tls in dev for core lightning * fix autowithdraw to create invoice with msats * fix autowithdraw msats/sats inconsitency * label p2p zaps properly in satistics * add fees to autowithdrawal notifications * add RETRYING as terminal paid action state * Update api/paidAction/README.md Co-authored-by: ekzyis <ek@stacker.news> * Update api/paidAction/README.md Co-authored-by: ekzyis <ek@stacker.news> * Update api/lnd/index.js Co-authored-by: ekzyis <ek@stacker.news> * ek suggestions * add bugetable to nwc card * get paranoid with numbers * better finalize retries and better max timeout height * refine forward failure transitions * more accurate satistics p2p status * make sure paidaction cancel in state machine only * dont drop bolt11s unless status is not null * only allow PENDING_HELD to transition to FORWARDING * add mermaid state machine diagrams to paid action doc * fix cancel transition name * cleanup readme * move forwarding outside of transition * refine testServerConnect and make sure ensureB64 transforms * remove unused params from testServerConnect --------- Co-authored-by: ekzyis <ek@stacker.news> Co-authored-by: k00b <k00b@stacker.news>
40 lines
1.1 KiB
JavaScript
40 lines
1.1 KiB
JavaScript
import lndService from 'ln-service'
|
|
import lnd from '@/api/lnd'
|
|
import { isServiceEnabled } from '@/lib/sndev'
|
|
|
|
const cache = new Map()
|
|
const expiresIn = 1000 * 30 // 30 seconds in milliseconds
|
|
|
|
async function fetchBlockHeight () {
|
|
let blockHeight = 0
|
|
if (!isServiceEnabled('payments')) return blockHeight
|
|
try {
|
|
const height = await lndService.getHeight({ lnd })
|
|
blockHeight = height.current_block_height
|
|
cache.set('block', { height: blockHeight, createdAt: Date.now() })
|
|
} catch (err) {
|
|
console.error('fetchBlockHeight', err)
|
|
}
|
|
return blockHeight
|
|
}
|
|
|
|
async function getBlockHeight () {
|
|
if (cache.has('block')) {
|
|
const { height, createdAt } = cache.get('block')
|
|
const expired = createdAt + expiresIn < Date.now()
|
|
if (expired) fetchBlockHeight().catch(console.error) // update cache
|
|
return height // serve stale block height (this on the SSR critical path)
|
|
} else {
|
|
fetchBlockHeight().catch(console.error)
|
|
}
|
|
return 0
|
|
}
|
|
|
|
export default {
|
|
Query: {
|
|
blockHeight: async (parent, opts, ctx) => {
|
|
return await getBlockHeight()
|
|
}
|
|
}
|
|
}
|