diff --git a/lnbits/core/models.py b/lnbits/core/models.py index 9dec751e6..175c5fe4e 100644 --- a/lnbits/core/models.py +++ b/lnbits/core/models.py @@ -96,6 +96,10 @@ class Payment(NamedTuple): def is_out(self) -> bool: return self.amount < 0 + @property + def is_uncheckable(self) -> bool: + return self.checking_id.startswith("temp_") or self.checking_id.startswith("internal_") + def set_pending(self, pending: bool) -> None: from .crud import update_payment_status diff --git a/lnbits/core/services.py b/lnbits/core/services.py index e074a34a4..c15f78a05 100644 --- a/lnbits/core/services.py +++ b/lnbits/core/services.py @@ -45,6 +45,8 @@ def pay_invoice( *, wallet_id: str, payment_request: str, max_sat: Optional[int] = None, extra: Optional[Dict] = None ) -> str: temp_id = f"temp_{urlsafe_short_hash()}" + internal_id = f"internal_{urlsafe_short_hash()}" + try: invoice = bolt11.decode(payment_request) if invoice.amount_msat == 0: @@ -66,7 +68,7 @@ def pay_invoice( internal = check_internal(invoice.payment_hash) if internal: # create a new payment from this wallet - create_payment(checking_id=temp_id, fee=0, pending=False, **payment_kwargs) + create_payment(checking_id=internal_id, fee=0, pending=False, **payment_kwargs) else: # create a temporary payment here so we can check if # the balance is enough in the next step diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index 4018fbdd1..52c67cd6a 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -16,7 +16,9 @@ def api_payments(): g.wallet.delete_expired_payments() for payment in g.wallet.get_payments(complete=False, pending=True): - if payment.is_out: + if payment.is_uncheckable: + pass + elif payment.is_out: payment.set_pending(WALLET.get_payment_status(payment.checking_id).pending) else: payment.set_pending(WALLET.get_invoice_status(payment.checking_id).pending) @@ -104,7 +106,9 @@ def api_payment(payment_hash): return jsonify({"paid": True}), HTTPStatus.OK try: - if payment.is_out: + if payment.is_uncheckable: + pass + elif payment.is_out: is_paid = not WALLET.get_payment_status(payment.checking_id).pending elif payment.is_in: is_paid = not WALLET.get_invoice_status(payment.checking_id).pending