Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
79c3d7526e |
@@ -129,6 +129,15 @@ async def create_fiat_invoice(
|
||||
if not fiat_provider_name:
|
||||
raise ValueError("Fiat provider is required for fiat invoices.")
|
||||
if not settings.is_fiat_provider_enabled(fiat_provider_name):
|
||||
funding_source = get_funding_source()
|
||||
if funding_source.__class__.__name__ == "LNbitsWallet":
|
||||
fiat_invoice = await create_wallet_invoice(wallet_id, invoice_data)
|
||||
fiat_invoice.fiat_provider = fiat_provider_name
|
||||
fiat_invoice.extra["fiat_checking_id"] = fiat_invoice.checking_id
|
||||
# TODO: move to payment
|
||||
fiat_invoice.extra["fiat_payment_request"] = fiat_invoice.payment_request
|
||||
|
||||
return fiat_invoice
|
||||
raise ValueError(
|
||||
f"Fiat provider '{fiat_provider_name}' is not enabled.",
|
||||
)
|
||||
@@ -219,6 +228,7 @@ async def create_wallet_invoice(wallet_id: str, data: CreateInvoice) -> Payment:
|
||||
payment_hash=data.payment_hash,
|
||||
labels=data.labels,
|
||||
external_id=data.external_id,
|
||||
fiat_provider=data.fiat_provider,
|
||||
conn=conn,
|
||||
)
|
||||
|
||||
@@ -261,6 +271,7 @@ async def create_invoice(
|
||||
payment_hash: str | None = None,
|
||||
labels: list[str] | None = None,
|
||||
external_id: str | None = None,
|
||||
fiat_provider: str | None = None,
|
||||
conn: Connection | None = None,
|
||||
) -> Payment:
|
||||
if not amount > 0:
|
||||
@@ -321,6 +332,9 @@ async def create_invoice(
|
||||
description_hash=description_hash,
|
||||
unhashed_description=unhashed_description,
|
||||
expiry=expiry or settings.lightning_invoice_expiry,
|
||||
fiat_provider=fiat_provider,
|
||||
currency=currency if currency != "sat" else None,
|
||||
fiat_amount=amount if currency != "sat" else None,
|
||||
)
|
||||
if (
|
||||
not invoice_response.ok
|
||||
@@ -332,6 +346,8 @@ async def create_invoice(
|
||||
status="pending",
|
||||
)
|
||||
invoice = bolt11_decode(invoice_response.payment_request)
|
||||
extra["fiat_provider"] = fiat_provider
|
||||
extra["fiat_payment_request"] = invoice_response.fiat_payment_request
|
||||
|
||||
create_payment_model = CreatePayment(
|
||||
wallet_id=user_wallet.source_wallet_id,
|
||||
|
||||
@@ -30,6 +30,7 @@ class InvoiceResponse(NamedTuple):
|
||||
ok: bool
|
||||
checking_id: str | None = None # payment_hash, rpc_id
|
||||
payment_request: str | None = None
|
||||
fiat_payment_request: str | None = None
|
||||
error_message: str | None = None
|
||||
preimage: str | None = None
|
||||
fee_msat: int | None = None
|
||||
|
||||
@@ -78,17 +78,28 @@ class LNbitsWallet(Wallet):
|
||||
data: dict = {"out": False, "amount": amount, "memo": memo or ""}
|
||||
if kwargs.get("expiry"):
|
||||
data["expiry"] = kwargs["expiry"]
|
||||
if kwargs.get("fiat_provider"):
|
||||
if "currency" not in kwargs or "fiat_amount" not in kwargs:
|
||||
return InvoiceResponse(
|
||||
ok=False,
|
||||
error_message="Fiat provider requires "
|
||||
"'currency' and 'fiat_amount' parameters.",
|
||||
)
|
||||
data["amount"] = kwargs["fiat_amount"]
|
||||
data["unit"] = kwargs["currency"]
|
||||
data["fiat_provider"] = kwargs["fiat_provider"]
|
||||
|
||||
if description_hash:
|
||||
data["description_hash"] = description_hash.hex()
|
||||
if unhashed_description:
|
||||
data["unhashed_description"] = unhashed_description.hex()
|
||||
|
||||
try:
|
||||
r = await self.client.post(url="/api/v1/payments", json=data)
|
||||
print(f"Creating invoice with data: {data}")
|
||||
r = await self.client.post(url="/api/v1/payments", json=data, timeout=30)
|
||||
r.raise_for_status()
|
||||
data = r.json()
|
||||
|
||||
# Backwards compatibility for pre-v1 which used the key "payment_request"
|
||||
payment_str = data.get("bolt11") or data.get("payment_request")
|
||||
if r.is_error or not payment_str:
|
||||
error_message = data["detail"] if "detail" in data else r.text
|
||||
@@ -100,6 +111,7 @@ class LNbitsWallet(Wallet):
|
||||
ok=True,
|
||||
checking_id=data["checking_id"],
|
||||
payment_request=payment_str,
|
||||
fiat_payment_request=data.get("payment_request"),
|
||||
preimage=data.get("preimage"),
|
||||
)
|
||||
except json.JSONDecodeError:
|
||||
@@ -111,6 +123,11 @@ class LNbitsWallet(Wallet):
|
||||
return InvoiceResponse(
|
||||
ok=False, error_message="Server error: 'missing required fields'"
|
||||
)
|
||||
except httpx.HTTPStatusError as exc:
|
||||
logger.warning(exc.response.text)
|
||||
return InvoiceResponse(
|
||||
ok=False, error_message=f"Unable to connect to {self.endpoint}."
|
||||
)
|
||||
except Exception as exc:
|
||||
logger.warning(exc)
|
||||
return InvoiceResponse(
|
||||
@@ -213,6 +230,7 @@ class LNbitsWallet(Wallet):
|
||||
logger.info("connected to LNbits fundingsource websocket.")
|
||||
while settings.lnbits_running:
|
||||
message = await ws.recv()
|
||||
print(f"### Received message from websocket: {message}")
|
||||
message_dict = json.loads(message)
|
||||
if (
|
||||
message_dict
|
||||
|
||||
Reference in New Issue
Block a user