aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--index.js3
-rw-r--r--lib/payments.js1
-rw-r--r--routes/payments.js30
3 files changed, 33 insertions, 1 deletions
diff --git a/index.js b/index.js
index 99058833..b2796203 100644
--- a/index.js
+++ b/index.js
@@ -50,6 +50,9 @@ app.get("/payments/:hash", auth, payments.get);
app.post("/parse", payments.parse);
app.get("/pot/:name", payments.pot);
app.post("/take", auth, payments.take);
+app.get("/encode", payments.encode);
+app.get("/decode", payments.decode);
+app.get("/lnurl/:code", payments.lnurl);
app.post("/bitcoin", payments.bitcoin);
app.post("/bitcoin/fee", auth, payments.fee);
diff --git a/lib/payments.js b/lib/payments.js
index d25df227..386d84d8 100644
--- a/lib/payments.js
+++ b/lib/payments.js
@@ -123,7 +123,6 @@ export let confirm = async (address, txid, vout) => {
let id = `payment:${txid}:${vout}`;
let p = await g(id);
p.confirmed = true;
- console.log("P", p);
await db
.multi()
diff --git a/routes/payments.js b/routes/payments.js
index 3ec196cd..53bb6e4d 100644
--- a/routes/payments.js
+++ b/routes/payments.js
@@ -7,6 +7,8 @@ import { l, err } from "$lib/logging";
import { fail, btc, sats } from "$lib/utils";
import { requirePin } from "$lib/auth";
import { debit, credit, confirm, types } from "$lib/payments";
+import { bech32 } from "bech32";
+import got from "got";
import bc from "$lib/bitcoin";
import ln from "$lib/ln";
@@ -217,5 +219,33 @@ export default {
await bc.sendRawTransaction(hex);
res.send({ txid });
+ },
+
+ async encode({ query: { address } }, res) {
+ let [name, domain] = address.split("@");
+ let url = `https://${domain}/.well-known/lnurlp/${name}`;
+ let r = await got(url).json();
+ if (r.tag !== "payRequest") fail("not an ln address");
+ let enc = bech32.encode("lnurl", bech32.toWords(Buffer.from(url)), 20000);
+ console.log(enc);
+ res.send(enc);
+ },
+
+ async decode({ query: { text } }, res) {
+ let url = Buffer.from(
+ bech32.fromWords(bech32.decode(text, 20000).words)
+ ).toString();
+
+ res.send(await got(url).json());
+ },
+
+ async lnurl({ params: { code }, query: { amount } }, res) {
+ let { uid } = await g(`code:${code}`);
+
+ let url = Buffer.from(
+ bech32.fromWords(bech32.decode(text, 20000).words)
+ ).toString();
+
+ res.send(await got(url).json());
}
};