diff --git a/lnbits/wallets/sparkl2.py b/lnbits/wallets/sparkl2.py index 8e59b8b89..2c4e1a1e4 100644 --- a/lnbits/wallets/sparkl2.py +++ b/lnbits/wallets/sparkl2.py @@ -88,11 +88,7 @@ class SparkL2Wallet(Wallet): await self._check_sidecar_mnemonic() return StatusResponse("Spark sidecar mnemonic not set", 0) if status == "recovering": - incoming_sats = int(res.get("incoming_sats") or 0) - return StatusResponse( - f"Spark wallet recovering; {incoming_sats} sats incoming.", - 0, - ) + return StatusResponse(None, 0) if status != "ready": return StatusResponse( f"Spark sidecar is not ready: {status or 'unknown'}.", 0 @@ -247,7 +243,7 @@ class SparkL2Wallet(Wallet): preimage = res.get("preimage") if preimage and self._preimage_matches_payment_hash(preimage, checking_id): if fee_msat is None: - logger.error( + logger.warning( "Spark sidecar returned a successful payment without a fee." ) return PaymentPendingStatus() @@ -266,7 +262,7 @@ class SparkL2Wallet(Wallet): mapped = self._map_payment_status(status) if mapped.success: if fee_msat is None: - logger.error( + logger.warning( "Spark sidecar returned a successful payment without a fee." ) return PaymentPendingStatus() @@ -364,8 +360,18 @@ class SparkL2Wallet(Wallet): await asyncio.sleep(5) def _map_invoice_status(self, status: str) -> PaymentStatus: - success = {"TRANSFER_COMPLETED"} - failed = {"TRANSFER_FAILED"} + success = { + "LIGHTNING_PAYMENT_RECEIVED", + "TRANSFER_COMPLETED", + "PAYMENT_PREIMAGE_RECOVERED", + } + failed = { + "TRANSFER_FAILED", + "PAYMENT_PREIMAGE_RECOVERING_FAILED", + "REFUND_SIGNING_FAILED", + "REFUND_SIGNING_COMMITMENTS_QUERYING_FAILED", + "TRANSFER_CREATION_FAILED", + } if status in success: return PaymentSuccessStatus() if status in failed: @@ -373,8 +379,18 @@ class SparkL2Wallet(Wallet): return PaymentPendingStatus() def _map_payment_status(self, status: str) -> PaymentStatus: - success = {"TRANSFER_COMPLETED"} - failed = {"TRANSFER_FAILED"} + success = { + "LIGHTNING_PAYMENT_SUCCEEDED", + "TRANSFER_COMPLETED", + "PREIMAGE_PROVIDED", + } + failed = { + "LIGHTNING_PAYMENT_FAILED", + "TRANSFER_FAILED", + "PREIMAGE_PROVIDING_FAILED", + "USER_TRANSFER_VALIDATION_FAILED", + "USER_SWAP_RETURN_FAILED", + } if status in success: return PaymentSuccessStatus() if status in failed: diff --git a/tests/wallets/test_sparkl2.py b/tests/wallets/test_sparkl2.py index ee8de5722..d02da5fcd 100644 --- a/tests/wallets/test_sparkl2.py +++ b/tests/wallets/test_sparkl2.py @@ -33,7 +33,7 @@ async def test_status_returns_stable_available_balance(mocker: MockerFixture): @pytest.mark.anyio -async def test_status_rejects_recovering_balance(mocker: MockerFixture): +async def test_status_accepts_recovering_balance_as_zero(mocker: MockerFixture): wallet = object.__new__(SparkL2Wallet) mocker.patch.object( wallet, @@ -51,7 +51,7 @@ async def test_status_rejects_recovering_balance(mocker: MockerFixture): status = await wallet.status() - assert status.error_message == "Spark wallet recovering; 658672 sats incoming." + assert status.error_message is None assert status.balance_msat == 0 @@ -207,20 +207,20 @@ async def test_pay_invoice_rejects_invalid_bolt11_before_sidecar( request.assert_not_awaited() -def test_payment_status_waits_for_transfer_settlement(): +def test_payment_status_accepts_spark_success_states(): wallet = object.__new__(SparkL2Wallet) - assert wallet._map_payment_status("LIGHTNING_PAYMENT_SUCCEEDED").pending - assert wallet._map_payment_status("PREIMAGE_PROVIDED").pending + assert wallet._map_payment_status("LIGHTNING_PAYMENT_SUCCEEDED").success + assert wallet._map_payment_status("PREIMAGE_PROVIDED").success assert wallet._map_payment_status("TRANSFER_COMPLETED").success assert wallet._map_payment_status("TRANSFER_FAILED").failed -def test_invoice_status_waits_for_transfer_settlement(): +def test_invoice_status_accepts_spark_receive_success_states(): wallet = object.__new__(SparkL2Wallet) - assert wallet._map_invoice_status("LIGHTNING_PAYMENT_RECEIVED").pending - assert wallet._map_invoice_status("PAYMENT_PREIMAGE_RECOVERED").pending + assert wallet._map_invoice_status("LIGHTNING_PAYMENT_RECEIVED").success + assert wallet._map_invoice_status("PAYMENT_PREIMAGE_RECOVERED").success assert wallet._map_invoice_status("TRANSFER_COMPLETED").success assert wallet._map_invoice_status("TRANSFER_FAILED").failed