diff options
| author | Adam Soltys <[email protected]> | 2023-01-24 09:53:51 -0800 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2023-01-24 09:53:51 -0800 |
| commit | f24aec1fb7dd4080d961c26ab5216fd2dfe5d971 (patch) | |
| tree | d2ba4443b904431117a4939628cbf0ccbc3a7619 | |
| parent | d8d07fac1cd3da8e128677c758d0c81ad1ba7a79 (diff) | |
| download | coinos-server-f24aec1fb7dd4080d961c26ab5216fd2dfe5d971.tar.gz coinos-server-f24aec1fb7dd4080d961c26ab5216fd2dfe5d971.zip | |
lnurl endpoints
| -rw-r--r-- | index.js | 3 | ||||
| -rw-r--r-- | lib/payments.js | 1 | ||||
| -rw-r--r-- | routes/payments.js | 30 |
3 files changed, 33 insertions, 1 deletions
@@ -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()); } }; |
