aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2020-07-20 02:11:06 -0400
committerAdam Soltys <[email protected]>2020-07-20 02:11:06 -0400
commit843a7455dbeb4d185919cfd1571546c1bc830aa0 (patch)
treec549144eea01022ca27605ffb37fae5b1783143e
parent3e1b5c2d251c6c4de2ee76915454ff94c16c0b50 (diff)
downloadcoinos-server-843a7455dbeb4d185919cfd1571546c1bc830aa0.tar.gz
coinos-server-843a7455dbeb4d185919cfd1571546c1bc830aa0.zip
create lnurl payment invoice
-rw-r--r--routes/lnurl.js67
1 files changed, 43 insertions, 24 deletions
diff --git a/routes/lnurl.js b/routes/lnurl.js
index e447951b..a3701059 100644
--- a/routes/lnurl.js
+++ b/routes/lnurl.js
@@ -109,6 +109,7 @@ const pay = async ({ amount, minSendable, maxSendable }, res, user) => {
});
recipients[result.secret] = user;
+ l.info("recipient", user.username, result.secret);
res.send(result);
} catch (e) {
l.error("problem generating payment url", e.message);
@@ -139,6 +140,7 @@ app.post("/pay", auth, async (req, res) => {
} = req.body;
const url = `${callback}?amount=${amount * 1000}`;
+ l.info("url", url);
try {
const parts = callback.split("/");
@@ -146,21 +148,7 @@ app.post("/pay", auth, async (req, res) => {
payments[secret] = user;
const result = (await axios.get(url)).data;
- const recipient = recipients[secret];
-
- if (recipient) {
- await db.Invoice.create({
- user_id: recipient.id,
- text: result.pr,
- rate: app.get("rates")[user.currency],
- currency: recipient.currency,
- amount: Math.round(amount / 1000),
- tip: 0,
- network: "BTC",
- });
- }
-
- res.send(await send(amount, result.pr, user));
+ res.send(await send(amount, '', result.pr, user));
} catch (e) {
l.error("failed to send payment", e.message);
res.status(500).send(e.message);
@@ -221,18 +209,49 @@ lnurlServer.bindToHook(
const parts = req.originalUrl.split("/");
const secret = parts[parts.length - 1].split("?")[0];
user = payments[secret];
- let account = await db.Account.findOne({
- where: {
- user_id: user.id,
- asset: config.liquid.btcasset,
- },
- });
- if (account.balance < amount) {
- throw new Error("Insufficient funds");
+ if (user) {
+ let account = await db.Account.findOne({
+ where: {
+ user_id: user.id,
+ asset: config.liquid.btcasset,
+ },
+ });
+
+ if (account.balance < amount) {
+ throw new Error("Insufficient funds");
+ }
+
+ l.info("lnurl payment", user.username, amount);
}
- l.info("lnurl payment", user.username, amount);
+ const recipient = recipients[secret];
+
+ if (recipient) {
+ setTimeout(async () => {
+ try {
+ let { invoices } = await lnb.listInvoices({
+ pending_only: true,
+ num_max_invoices: 1,
+ reversed: true,
+ });
+ let i = invoices.find((i) => parseInt(i.value) === amount);
+ if (i) {
+ await db.Invoice.create({
+ user_id: recipient.id,
+ text: i.payment_request,
+ rate: app.get("rates")[recipient.currency],
+ currency: recipient.currency,
+ amount: Math.round(amount / 1000),
+ tip: 0,
+ network: "BTC",
+ });
+ }
+ } catch (e) {
+ l.error("problem trying to get create payment invoice", e);
+ }
+ }, 1000);
+ }
}
if (tag === "login") {