|
|
@ -1,5 +1,4 @@ |
|
|
|
from os import getenv |
|
|
|
import os |
|
|
|
import base64 |
|
|
|
from requests import get, post |
|
|
|
from .base import InvoiceResponse, PaymentResponse, PaymentStatus, Wallet |
|
|
@ -18,13 +17,17 @@ class LndRestWallet(Wallet): |
|
|
|
self.auth_read = {"Grpc-Metadata-macaroon": getenv("LND_REST_READ_MACAROON")} |
|
|
|
self.auth_cert = getenv("LND_REST_CERT") |
|
|
|
|
|
|
|
|
|
|
|
def create_invoice(self, amount: int, memo: str = "") -> InvoiceResponse: |
|
|
|
|
|
|
|
def create_invoice(self, amount: int, memo: str = "", description_hash: bytes = b"") -> InvoiceResponse: |
|
|
|
r = post( |
|
|
|
url=f"{self.endpoint}/v1/invoices", |
|
|
|
headers=self.auth_invoice, verify=self.auth_cert, |
|
|
|
json={"value": amount, "memo": memo, "private": True}, |
|
|
|
headers=self.auth_invoice, |
|
|
|
verify=self.auth_cert, |
|
|
|
json={ |
|
|
|
"value": amount, |
|
|
|
"memo": memo, |
|
|
|
"description_hash": base64.b64encode(description_hash).decode("ascii"), |
|
|
|
"private": True, |
|
|
|
}, |
|
|
|
) |
|
|
|
print(self.auth_invoice) |
|
|
|
|
|
|
@ -37,17 +40,19 @@ class LndRestWallet(Wallet): |
|
|
|
r = get(url=f"{self.endpoint}/v1/payreq/{payment_request}", headers=self.auth_read, verify=self.auth_cert,) |
|
|
|
print(r) |
|
|
|
if r.ok: |
|
|
|
checking_id = r.json()["payment_hash"].replace("/","_") |
|
|
|
checking_id = r.json()["payment_hash"].replace("/", "_") |
|
|
|
print(checking_id) |
|
|
|
error_message = None |
|
|
|
ok = True |
|
|
|
|
|
|
|
return InvoiceResponse(ok, checking_id, payment_request, error_message) |
|
|
|
|
|
|
|
|
|
|
|
def pay_invoice(self, bolt11: str) -> PaymentResponse: |
|
|
|
r = post( |
|
|
|
url=f"{self.endpoint}/v1/channels/transactions", headers=self.auth_admin, verify=self.auth_cert, json={"payment_request": bolt11} |
|
|
|
url=f"{self.endpoint}/v1/channels/transactions", |
|
|
|
headers=self.auth_admin, |
|
|
|
verify=self.auth_cert, |
|
|
|
json={"payment_request": bolt11}, |
|
|
|
) |
|
|
|
ok, checking_id, fee_msat, error_message = r.ok, None, 0, None |
|
|
|
r = get(url=f"{self.endpoint}/v1/payreq/{bolt11}", headers=self.auth_admin, verify=self.auth_cert,) |
|
|
@ -59,9 +64,8 @@ class LndRestWallet(Wallet): |
|
|
|
|
|
|
|
return PaymentResponse(ok, checking_id, fee_msat, error_message) |
|
|
|
|
|
|
|
|
|
|
|
def get_invoice_status(self, checking_id: str) -> PaymentStatus: |
|
|
|
checking_id = checking_id.replace("_","/") |
|
|
|
checking_id = checking_id.replace("_", "/") |
|
|
|
print(checking_id) |
|
|
|
r = get(url=f"{self.endpoint}/v1/invoice/{checking_id}", headers=self.auth_invoice, verify=self.auth_cert,) |
|
|
|
print(r.json()["settled"]) |
|
|
@ -71,7 +75,12 @@ class LndRestWallet(Wallet): |
|
|
|
return PaymentStatus(r.json()["settled"]) |
|
|
|
|
|
|
|
def get_payment_status(self, checking_id: str) -> PaymentStatus: |
|
|
|
r = get(url=f"{self.endpoint}/v1/payments", headers=self.auth_admin, verify=self.auth_cert, params={"include_incomplete": "True", "max_payments": "20"}) |
|
|
|
r = get( |
|
|
|
url=f"{self.endpoint}/v1/payments", |
|
|
|
headers=self.auth_admin, |
|
|
|
verify=self.auth_cert, |
|
|
|
params={"include_incomplete": "True", "max_payments": "20"}, |
|
|
|
) |
|
|
|
|
|
|
|
if not r.ok: |
|
|
|
return PaymentStatus(None) |
|
|
|