diff --git a/lnbits/extensions/satspay/crud.py b/lnbits/extensions/satspay/crud.py index 5779592a8..bd156ae44 100644 --- a/lnbits/extensions/satspay/crud.py +++ b/lnbits/extensions/satspay/crud.py @@ -25,9 +25,9 @@ async def create_charge(user: str, description: Optional[str] = None, onchainwal onchainaddress = None if lnbitswallet: payment_hash, payment_request = await create_invoice( - wallet_id=lnbitswallet, - amount=amount, - memo=charge_id) + wallet_id=lnbitswallet, + amount=amount, + memo=charge_id) else: payment_hash = None payment_request = None @@ -50,14 +50,16 @@ async def create_charge(user: str, description: Optional[str] = None, onchainwal ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) """, - (charge_id, user, description, onchainwallet, onchainaddress, lnbitswallet, payment_request, payment_hash, webhook, time, amount, 0, False), + (charge_id, user, description, onchainwallet, onchainaddress, lnbitswallet, + payment_request, payment_hash, webhook, time, amount, 0, False), ) return await get_charge(charge_id) + async def update_charge(charge_id: str, **kwargs) -> Optional[Charges]: q = ", ".join([f"{field[0]} = ?" for field in kwargs.items()]) - await db.execute(f"UPDATE charges SET {q} WHERE id = ?", (*kwargs.values(), wallet_id)) - row = await db.fetchone("SELECT * FROM charges WHERE id = ?", (wallet_id,)) + await db.execute(f"UPDATE charges SET {q} WHERE id = ?", (*kwargs.values(), charge_id)) + row = await db.fetchone("SELECT * FROM charges WHERE id = ?", (charge_id,)) return Charges.from_row(row) if row else None @@ -74,6 +76,7 @@ async def get_charges(user: str) -> List[Charges]: async def delete_charge(charge_id: str) -> None: await db.execute("DELETE FROM charges WHERE id = ?", (charge_id,)) + async def check_address_balance(charge_id: str) -> List[Charges]: charge = await get_charge(charge_id) if charge.onchainaddress: @@ -83,14 +86,14 @@ async def check_address_balance(charge_id: str) -> List[Charges]: r = await client.get(mempool.endpoint + "/api/address/" + charge.onchainaddress) respAmount = r.json()['chain_stats']['funded_txo_sum'] if (charge.balance + respAmount) >= charge.balance: - return await update_charge(charge_id = charge_id, balance = (charge.balance + respAmount), paid = True) + return await update_charge(charge_id=charge_id, balance=(charge.balance + respAmount), paid=True) else: - return await update_charge(charge_id = charge_id, balance = (charge.balance + respAmount), paid = False) + return await update_charge(charge_id=charge_id, balance=(charge.balance + respAmount), paid=False) except Exception: pass if charge.lnbitswallet: invoice_status = await check_invoice_status(charge.lnbitswallet, charge.payment_hash) if invoice_status.paid: - return await update_charge(charge_id = charge_id, balance = charge.balance, paid = True) + return await update_charge(charge_id=charge_id, balance=charge.balance, paid=True) row = await db.fetchone("SELECT * FROM charges WHERE id = ?", (charge_id,)) return Charges.from_row(row) if row else None diff --git a/lnbits/extensions/satspay/models.py b/lnbits/extensions/satspay/models.py index 013dc1d7f..5eee1061f 100644 --- a/lnbits/extensions/satspay/models.py +++ b/lnbits/extensions/satspay/models.py @@ -1,6 +1,7 @@ from sqlite3 import Row from typing import NamedTuple + class Charges(NamedTuple): id: str user: str @@ -18,5 +19,5 @@ class Charges(NamedTuple): timestamp: int @classmethod - def from_row(cls, row: Row) -> "Payments": - return cls(**dict(row)) \ No newline at end of file + def from_row(cls, row: Row) -> "Charges": + return cls(**dict(row)) diff --git a/lnbits/extensions/satspay/templates/satspay/_api_docs.html b/lnbits/extensions/satspay/templates/satspay/_api_docs.html index 51a21fea2..3c0bc7204 100644 --- a/lnbits/extensions/satspay/templates/satspay/_api_docs.html +++ b/lnbits/extensions/satspay/templates/satspay/_api_docs.html @@ -41,30 +41,82 @@ - + GET - /pay/api/v1/links/<pay_id>PUT + /satspay/api/v1/charge/<charge_id>
Headers
- {"X-Api-Key": <invoice_key>}
+ {"X-Api-Key": <admin_key>}
Body (application/json)
- Returns 201 CREATED (application/json) + Returns 200 OK (application/json)
- {"lnurl": <string>} + [<charge_object>, ...]
Curl example
curl -X GET {{ request.url_root }}pay/api/v1/links/<pay_id> + >curl -X POST {{ request.url_root }}api/v1/charge/<charge_id> + -d '{"onchainwallet": <string, watchonly_wallet_id>, + "description": <string>, "webhook":<string>, "time": + <integer>, "amount": <integer>, "lnbitswallet": + <string, lnbits_wallet_id>}' -H "Content-type: + application/json" -H "X-Api-Key: {{g.user.wallets[0].adminkey }}" + +
+
+
+ + + + + GET + /satspay/api/v1/charge/<charge_id> +
Headers
+ {"X-Api-Key": <admin_key>}
+
+ Body (application/json) +
+
+ Returns 200 OK (application/json) +
+ [<charge_object>, ...] +
Curl example
+ curl -X GET {{ request.url_root }}api/v1/charge/<charge_id> -H "X-Api-Key: {{ g.user.wallets[0].inkey }}"
+ + + + GET /satspay/api/v1/charges +
Headers
+ {"X-Api-Key": <admin_key>}
+
+ Body (application/json) +
+
+ Returns 200 OK (application/json) +
+ [<charge_object>, ...] +
Curl example
+ curl -X GET {{ request.url_root }}api/v1/charges -H "X-Api-Key: {{ + g.user.wallets[0].inkey }}" + +
+
+
{ - let datem = moment(row.time).format('YYYY-MM-DD HH:mm'); - row.countdown = countdown(new Date(datem).getTime()).toString(); - }) - } - }, - methods: { - + updateCountdowns: function () { + setInterval(function(){ + + }, 1000) + }, getWalletLinks: function () { var self = this @@ -494,7 +489,7 @@ }, sendFormDataCharge: function () { var self = this - var wallet = self.g.user.wallets[0].inkey + var wallet = self.g.user.wallets[0].adminkey var data = self.formDialogCharge.data console.log(data) data.amount = parseInt(data.amount) @@ -515,7 +510,7 @@ .request( 'PUT', '/satspay/api/v1/Charge/' + data.id, - wallet.inkey, data) + wallet.adminkey, data) .then(function (response) { self.Charge = _.reject(self.Charge, function (obj) { return obj.id === data.id @@ -654,8 +649,8 @@ } }, 5000); getCharges() - - + var updateCountdowns = this.updateCountdowns + updateCountdowns() } }) diff --git a/lnbits/extensions/satspay/views_api.py b/lnbits/extensions/satspay/views_api.py index 697d246fd..790dc4b9e 100644 --- a/lnbits/extensions/satspay/views_api.py +++ b/lnbits/extensions/satspay/views_api.py @@ -10,6 +10,7 @@ from lnbits.decorators import api_check_wallet_key, api_validate_post_request from lnbits.extensions.satspay import satspay_ext from .crud import ( create_charge, + update_charge, get_charge, get_charges, delete_charge, @@ -38,7 +39,7 @@ async def api_charge_create_or_update(charge_id=None): charge = await create_charge(user=g.wallet.user, **g.data) return jsonify(charge._asdict()), HTTPStatus.CREATED else: - charge = await update_charge(user=g.wallet.user, **g.data) + charge = await update_charge(charge_id=charge_id, **g.data) return jsonify(charge._asdict()), HTTPStatus.OK @@ -59,12 +60,13 @@ async def api_charges_retrieve(): @satspay_ext.route("/api/v1/charge/", methods=["GET"]) @api_check_wallet_key("invoice") async def api_charge_retrieve(charge_id): - charge = get_charge(charge_id) + charge = await get_charge(charge_id) + print(charge) if not charge: return jsonify({"message": "charge does not exist"}), HTTPStatus.NOT_FOUND - return jsonify({charge}), HTTPStatus.OK + return jsonify(charge._asdict()), HTTPStatus.OK @satspay_ext.route("/api/v1/charge/", methods=["DELETE"])