From 7ebd809abc77385812606e11bedccc9f0b87e52b Mon Sep 17 00:00:00 2001 From: padreug Date: Fri, 12 Sep 2025 23:09:18 +0200 Subject: [PATCH] feat: implement LNURL payment handling in LNBits plugin - Added a new function to handle LNURL payments, allowing users to send payments via LNURL addresses. - Integrated LNURL payment processing into the existing sendCoins function, enhancing the wallet's capabilities for Lightning Network transactions. --- .../lib/plugins/wallet/lnbits/lnbits.js | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/packages/server/lib/plugins/wallet/lnbits/lnbits.js b/packages/server/lib/plugins/wallet/lnbits/lnbits.js index e48ced7b..44a0099f 100644 --- a/packages/server/lib/plugins/wallet/lnbits/lnbits.js +++ b/packages/server/lib/plugins/wallet/lnbits/lnbits.js @@ -131,12 +131,44 @@ async function getStatus(account, tx) { } } +async function sendLNURL(account, lnurl, cryptoAtoms) { + validateConfig(account) + + const paymentData = { + lnurl: lnurl, + amount: parseInt(cryptoAtoms.toString()) * 1000, // Convert satoshis to millisatoshis + comment: `Lamassu ATM - ${new Date().toISOString()}` + } + + const endpoint = `${account.endpoint}/api/v1/payments/lnurl` + const result = await request(endpoint, 'POST', paymentData, account.adminKey) + + if (!result.payment_hash) { + throw new Error('LNBits LNURL payment failed: No payment hash returned') + } + + return { + txid: result.payment_hash, + fee: result.fee_msat ? Math.ceil(result.fee_msat / 1000) : 0 + } +} + async function sendCoins(account, tx) { validateConfig(account) const { toAddress, cryptoAtoms, cryptoCode } = tx await checkCryptoCode(cryptoCode) + // Handle LNURL addresses + if (isLnurl(toAddress)) { + return sendLNURL(account, toAddress, cryptoAtoms) + } + + // Handle bolt11 invoices + if (!isLnInvoice(toAddress)) { + throw new Error('Invalid Lightning address: must be bolt11 invoice or LNURL') + } + const paymentData = { out: true, bolt11: toAddress