From a59996d5d420fe3e4516b74d2262432a017f7113 Mon Sep 17 00:00:00 2001 From: Arc Date: Sat, 10 Jan 2026 15:39:35 +0000 Subject: [PATCH] sending kinda working --- lnbits/wallets/lightspark.py | 14 ++++++++++++-- lnbits/wallets/sidecars/spark/server.mjs | 13 ++++++++++--- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/lnbits/wallets/lightspark.py b/lnbits/wallets/lightspark.py index 458e42043..6ce8075b7 100644 --- a/lnbits/wallets/lightspark.py +++ b/lnbits/wallets/lightspark.py @@ -4,6 +4,7 @@ from typing import Any import httpx from loguru import logger +from bolt11 import decode as bolt11_decode from lnbits.helpers import normalize_endpoint from lnbits.settings import settings @@ -131,9 +132,18 @@ class LightsparkSparkWallet(Wallet): async def pay_invoice(self, bolt11: str, fee_limit_msat: int) -> PaymentResponse: try: max_fee_sats = (int(fee_limit_msat) + 999) // 1000 - payload = {"bolt11": bolt11, "max_fee_sats": max_fee_sats} + payment_hash = None + try: + payment_hash = bolt11_decode(bolt11).payment_hash + except Exception: + payment_hash = None + payload = { + "bolt11": bolt11, + "max_fee_sats": max_fee_sats, + "payment_hash": payment_hash, + } res = await self._request("POST", "/v1/payments", payload) - checking_id = res.get("checking_id") + checking_id = payment_hash or res.get("checking_id") if not checking_id: raise SparkSidecarError( "Spark sidecar payment response missing checking_id." diff --git a/lnbits/wallets/sidecars/spark/server.mjs b/lnbits/wallets/sidecars/spark/server.mjs index 3ba61b3ba..1156df19e 100644 --- a/lnbits/wallets/sidecars/spark/server.mjs +++ b/lnbits/wallets/sidecars/spark/server.mjs @@ -17,6 +17,7 @@ if (!MNEMONIC) { } let walletPromise +const paymentHashToRequestId = new Map() async function getWallet() { if (!walletPromise) { walletPromise = SparkWallet.initialize({ @@ -142,13 +143,17 @@ const server = http.createServer(async (req, res) => { const amountSatsToSend = body.amount_sats ? Number(body.amount_sats) : undefined + const paymentHash = body.payment_hash || null const payment = await wallet.payLightningInvoice({ invoice: bolt11, maxFeeSats, amountSatsToSend }) + if (paymentHash && payment?.id) { + paymentHashToRequestId.set(paymentHash, payment.id) + } return sendJson(res, 200, { - checking_id: payment.id, + checking_id: paymentHash || payment.id, status: payment.status, fee_msat: feeToMsat(payment.fee), preimage: payment.paymentPreimage || null @@ -172,12 +177,14 @@ const server = http.createServer(async (req, res) => { if (parts.length === 3 && parts[0] === 'v1' && parts[1] === 'payments') { const wallet = await getWallet() - const payment = await wallet.getLightningSendRequest(parts[2]) + const requestedId = parts[2] + const lookupId = paymentHashToRequestId.get(requestedId) || requestedId + const payment = await wallet.getLightningSendRequest(lookupId) if (!payment) { return sendJson(res, 404, {error: 'Not found'}) } return sendJson(res, 200, { - checking_id: payment.id, + checking_id: requestedId, status: payment.status, fee_msat: feeToMsat(payment.fee), preimage: payment.paymentPreimage || null