From f24aec1fb7dd4080d961c26ab5216fd2dfe5d971 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Tue, 24 Jan 2023 09:53:51 -0800 Subject: lnurl endpoints --- index.js | 3 +++ lib/payments.js | 1 - routes/payments.js | 30 ++++++++++++++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) 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()); } }; -- cgit v1.2.3