From 6a8634f2a4cdcf1f27f2cf5dbf8489e6727ed5d4 Mon Sep 17 00:00:00 2001 From: austinkelsay Date: Fri, 15 Nov 2024 13:45:38 -0600 Subject: [PATCH] Try adding lnurlp logic into .well-known endpoint directly instead of redirect endpoint --- src/pages/api/.well-known/lnurlp/[slug].js | 40 ++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/src/pages/api/.well-known/lnurlp/[slug].js b/src/pages/api/.well-known/lnurlp/[slug].js index cda409f..813a22c 100644 --- a/src/pages/api/.well-known/lnurlp/[slug].js +++ b/src/pages/api/.well-known/lnurlp/[slug].js @@ -1,10 +1,46 @@ +import appConfig from "@/config/appConfig" import { runMiddleware, corsMiddleware } from "@/utils/corsMiddleware"; +import { getLightningAddressByName } from "@/db/models/lightningAddressModels"; + +const BACKEND_URL = process.env.BACKEND_URL +const ZAP_PUBKEY = process.env.ZAP_PUBKEY export default async function handler(req, res) { // Run CORS middleware first await runMiddleware(req, res, corsMiddleware); - // Redirect to your lightning address endpoint const { slug } = req.query; - res.redirect(307, `/api/lightning-address/lnurlp/${slug}`); + + if (!slug || slug === 'undefined') { + res.status(404).json({ error: 'Not found' }) + return + } + + let foundAddress = null; + const customAddress = appConfig.customLightningAddresses.find(addr => addr.name === slug); + + if (customAddress) { + foundAddress = customAddress; + } else { + foundAddress = await getLightningAddressByName(slug); + } + + if (!foundAddress) { + res.status(404).json({ error: 'Lightning address not found' }) + return + } + + const metadata = [ + ["text/plain", `${foundAddress.description}`] + ]; + + res.status(200).json({ + callback: `${BACKEND_URL}/api/lightning-address/callback/${foundAddress.name}`, + maxSendable: foundAddress.maxSendable || 10000000000, + minSendable: foundAddress.minSendable || 1000, + metadata: JSON.stringify(metadata), + tag: 'payRequest', + allowsNostr: true, + nostrPubkey: ZAP_PUBKEY + }); }