From 7de7a87dd4f014f2a4f0aa405a6ba4a1a6c9f208 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Wed, 8 Feb 2023 13:21:13 -0800 Subject: fix internal payments --- routes/payments.js | 72 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 40 insertions(+), 32 deletions(-) (limited to 'routes/payments.js') diff --git a/routes/payments.js b/routes/payments.js index b63ea716..edbcf224 100644 --- a/routes/payments.js +++ b/routes/payments.js @@ -17,7 +17,7 @@ export default { let { amount, hash, maxfee, name, memo, payreq, tip, username } = body; amount = parseInt(amount); - maxfee = parseInt(maxfee); + maxfee = maxfee ? parseInt(maxfee) : 0; tip = parseInt(tip); await requirePin({ body, user }); @@ -36,36 +36,44 @@ export default { }) .json(); } else if (payreq) { - let { msatoshi } = await ln.decode(payreq); - if (msatoshi) amount = Math.round(msatoshi * 1000); - - p = await debit( - hash, - amount + maxfee, - maxfee, - memo, - user, - types.lightning - ); - - let r = await ln.pay(payreq, msatoshi ? undefined : `${amount}sats`); - - p.amount = -amount; - p.hash = r.payment_hash; - p.fee = r.msatoshi_sent - r.msatoshi; - p.ref = r.payment_preimage; - - await s(`payment:${p.id}`, p); - await db.incrBy(`balance:${p.uid}`, maxfee - p.fee); - } else if (hash) { - p = await debit(hash, amount, 0, memo, user); - await credit(hash, amount, memo, user.id); - } else { - let pot = name || v4(); - p = await debit(hash, amount, 0, memo, user, types.pot); - await db.incrBy(`pot:${pot}`, amount); - await db.lPush(`pot:${pot}:payments`, p.id); - l("funded pot", pot); + let { msatoshi, payment_hash } = await ln.decode(payreq); + if (msatoshi) amount = Math.round(msatoshi / 1000); + let invoice = await g(`invoice:${payment_hash}`); + + if (invoice) hash = payment_hash; + else { + p = await debit( + hash, + amount + maxfee, + maxfee, + memo, + user, + types.lightning + ); + + let r = await ln.pay(payreq, msatoshi ? undefined : `${amount}sats`); + + p.amount = -amount; + p.hash = r.payment_hash; + p.fee = r.msatoshi_sent - r.msatoshi; + p.ref = r.payment_preimage; + + await s(`payment:${p.id}`, p); + await db.incrBy(`balance:${p.uid}`, maxfee - p.fee); + } + } + + if (!p) { + if (hash) { + p = await debit(hash, amount, 0, memo, user); + await credit(hash, amount, memo, user.id); + } else { + let pot = name || v4(); + p = await debit(hash, amount, 0, memo, user, types.pot); + await db.incrBy(`pot:${pot}`, amount); + await db.lPush(`pot:${pot}:payments`, p.id); + l("funded pot", pot); + } } res.send(p); @@ -242,5 +250,5 @@ export default { await bc.sendRawTransaction(hex); res.send({ txid }); - }, + } }; -- cgit v1.2.3