diff --git a/lnbits/extensions/satspay/helpers.py b/lnbits/extensions/satspay/helpers.py index 6862c6089..04846280d 100644 --- a/lnbits/extensions/satspay/helpers.py +++ b/lnbits/extensions/satspay/helpers.py @@ -35,18 +35,18 @@ async def call_webhook(charge: Charges): json=public_charge(charge), timeout=40, ) - except AssertionError: - charge.webhook = None + return {"webhook_success": r.is_success, "webhook_message": r.reason_phrase} except Exception as e: logger.warning(f"Failed to call webhook for charge {charge.id}") logger.warning(e) + return {"webhook_success": False, "webhook_message": str(e)} async def fetch_onchain_balance(charge: Charges): endpoint = ( f"{charge.config['mempool_endpoint']}/testnet" - if charge.config["network"] == "Testnet" - else charge.config["mempool_endpoint"] + if charge.config.network == "Testnet" + else charge.config.mempool_endpoint ) async with httpx.AsyncClient() as client: r = await client.get(endpoint + "/api/address/" + charge.onchainaddress) diff --git a/lnbits/extensions/satspay/models.py b/lnbits/extensions/satspay/models.py index 8d2602e15..1e7c95c99 100644 --- a/lnbits/extensions/satspay/models.py +++ b/lnbits/extensions/satspay/models.py @@ -19,6 +19,13 @@ class CreateCharge(BaseModel): extra: str = "{}" +class ChargeConfig(BaseModel): + mempool_endpoint: Optional[str] + network: Optional[str] + webhook_success: Optional[bool] = False + webhook_message: Optional[str] + + class Charges(BaseModel): id: str description: Optional[str] @@ -59,5 +66,9 @@ class Charges(BaseModel): return False @property - def config(self): - return json.loads(self.extra) + def config(self) -> ChargeConfig: + charge_config = json.loads(self.extra) + return ChargeConfig(**charge_config) + + def must_call_webhook(self): + return self.webhook and self.paid and self.config.webhook_success == False diff --git a/lnbits/extensions/satspay/tasks.py b/lnbits/extensions/satspay/tasks.py index 27eb879a5..ce54b44a2 100644 --- a/lnbits/extensions/satspay/tasks.py +++ b/lnbits/extensions/satspay/tasks.py @@ -1,4 +1,5 @@ import asyncio +import json from loguru import logger @@ -7,6 +8,7 @@ from lnbits.extensions.satspay.crud import check_address_balance, get_charge from lnbits.helpers import get_current_extension_name from lnbits.tasks import register_invoice_listener +from .crud import update_charge from .helpers import call_webhook @@ -32,5 +34,7 @@ async def on_invoice_paid(payment: Payment) -> None: await payment.set_pending(False) charge = await check_address_balance(charge_id=charge.id) - if charge.paid and charge.webhook: - await call_webhook(charge) + if charge.must_call_webhook(): + resp = await call_webhook(charge) + extra = {**charge.config.dict(), **resp} + await update_charge(charge_id=charge.id, extra=json.dumps(extra)) diff --git a/lnbits/extensions/satspay/templates/satspay/index.html b/lnbits/extensions/satspay/templates/satspay/index.html index 3543dee35..60c4d5199 100644 --- a/lnbits/extensions/satspay/templates/satspay/index.html +++ b/lnbits/extensions/satspay/templates/satspay/index.html @@ -203,9 +203,14 @@ :href="props.row.webhook" target="_blank" style="color: unset; text-decoration: none" - >{{props.row.webhook || props.row.webhook}}{{props.row.webhook}} +