diff options
| author | Adam Soltys <[email protected]> | 2024-10-01 15:50:46 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2024-10-01 15:50:46 -0700 |
| commit | 80470a2c66c17e4992f176438025b2b021581d11 (patch) | |
| tree | 0f541e280fcaa86f52bc6578af4ce62901ba2518 /lib/payments.ts | |
| parent | 426127506daa5f5e4c7ec851361bb54d4f769400 (diff) | |
| download | coinos-server-80470a2c66c17e4992f176438025b2b021581d11.tar.gz coinos-server-80470a2c66c17e4992f176438025b2b021581d11.zip | |
getpayment helper
Diffstat (limited to 'lib/payments.ts')
| -rw-r--r-- | lib/payments.ts | 69 |
1 files changed, 32 insertions, 37 deletions
diff --git a/lib/payments.ts b/lib/payments.ts index 60989924..852d6c57 100644 --- a/lib/payments.ts +++ b/lib/payments.ts @@ -480,7 +480,6 @@ let getMaxFee = (n) => : n * 0.01, ); -let checking = {}; let inflight = {}; export let sendLightning = async ({ user, @@ -490,8 +489,8 @@ export let sendLightning = async ({ memo = undefined, }) => { try { - if (inflight[user.id]) fail("payment in flight"); - inflight[user.id] = true; + if (inflight[pr]) fail("payment in flight"); + inflight[pr] = true; let p; let hash = pr; @@ -534,39 +533,6 @@ export let sendLightning = async ({ type: types.lightning, }); - let check = async () => { - if (checking[pr]) return; - checking[pr] = true; - - try { - let { pays } = await ln.listpays(pr); - - let recordExists = !!(await g(`payment:${pr}`)); - let paymentFailed = - !pays.length || pays.every((p) => p.status === "failed"); - - if (recordExists && paymentFailed) { - await db.del(`payment:${pr}`); - await db.del(`payment:${p.id}`); - - let ourfee = p.ourfee || 0; - let credit = Math.round(total * config.fee) - ourfee; - await db.incrBy(`balance:${p.uid}`, total + maxfee + ourfee); - - await db.incrBy(`credit:${types.lightning}:${p.uid}`, credit); - await db.lRem(`${p.uid}:payments`, 1, p.id); - - clearInterval(interval); - } - } catch (e) { - err("Failed to reverse payment", r); - } - - checking[pr] = false; - }; - - let interval = setInterval(check, 5000); - try { l("paying lightning invoice", pr.substr(-8), total, amount, maxfee); @@ -591,7 +557,6 @@ export let sendLightning = async ({ l("refunding fee", maxfee, p.fee, maxfee - p.fee, p.ref); await db.incrBy(`balance:${p.uid}`, maxfee - p.fee); } catch (e) { - await check(); throw e; } @@ -826,3 +791,33 @@ export let reconcile = async (account, initial = false) => { return setTimeout(() => reconcile(account, initial), 1000); } }; + +export let check = async () => { + let payments = await db.sMembers("inflight"); + + for (let pr of payments) { + try { + let { pays } = await ln.listpays(pr); + + let recordExists = !!(await g(`payment:${pr}`)); + let paymentFailed = + !pays.length || pays.every((p) => p.status === "failed"); + + if (recordExists && paymentFailed) { + await db.del(`payment:${pr}`); + await db.del(`payment:${p.id}`); + + let ourfee = p.ourfee || 0; + let credit = Math.round(total * config.fee) - ourfee; + await db.incrBy(`balance:${p.uid}`, total + maxfee + ourfee); + + await db.incrBy(`credit:${types.lightning}:${p.uid}`, credit); + await db.lRem(`${p.uid}:payments`, 1, p.id); + } + } catch (e) { + err("Failed to reverse payment", r); + } + + setTimeout(check, 2000); + } +}; |
