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