From d76060a5dc4f9f3da6d9cea517dff48995fd5818 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Sat, 5 Nov 2022 11:53:08 -0700 Subject: handle lnurl pay requests --- src/components/Request.svelte | 1 + src/lib/utils.js | 7 ++-- src/routes/(app)/+layout.svelte | 1 - src/routes/(app)/[username]/+page.svelte | 12 +++---- src/routes/(app)/lnurl/[lnurl]/+page.server.js | 19 ++++++++++ src/routes/(app)/lnurl/[lnurl]/+page.svelte | 46 +++++++++++++++++++++++++ src/routes/(app)/send/[...text]/+page.server.js | 21 +++++++---- 7 files changed, 91 insertions(+), 16 deletions(-) create mode 100644 src/routes/(app)/lnurl/[lnurl]/+page.server.js create mode 100644 src/routes/(app)/lnurl/[lnurl]/+page.svelte (limited to 'src') diff --git a/src/components/Request.svelte b/src/components/Request.svelte index c0e2afc0..ea314f13 100644 --- a/src/components/Request.svelte +++ b/src/components/Request.svelte @@ -1,4 +1,5 @@ diff --git a/src/lib/utils.js b/src/lib/utils.js index 2e0036e1..7e0b8e4f 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -22,12 +22,15 @@ export const g = (url, fetch, headers) => export const get = (url, headers = {}) => fetch(base + url, { headers }) - .then((r) => r.text()) + .then(async (r) => { + if (r.ok) return r.text(); + throw new Error(await r.text()); + }) .then((body) => { try { return JSON.parse(body); } catch (e) { - throw new Error(body); + return body; } }); diff --git a/src/routes/(app)/+layout.svelte b/src/routes/(app)/+layout.svelte index 9f29e9a2..5bfe7712 100644 --- a/src/routes/(app)/+layout.svelte +++ b/src/routes/(app)/+layout.svelte @@ -1,5 +1,4 @@ + +
+
+ {#each JSON.parse(metadata) as m} +
+ {#if m[0] === 'text/plain'} +

{m[1]}

+ {/if} + {#if m[0].includes('image')} + Recipient + {/if} +
+ {/each} +
+ + +
+ + + + +
+ +
+
+
diff --git a/src/routes/(app)/send/[...text]/+page.server.js b/src/routes/(app)/send/[...text]/+page.server.js index b909ab4d..4668cb4f 100644 --- a/src/routes/(app)/send/[...text]/+page.server.js +++ b/src/routes/(app)/send/[...text]/+page.server.js @@ -3,8 +3,10 @@ import bip21 from 'bip21'; import { get, post } from '$lib/utils'; import { invalid, redirect } from '@sveltejs/kit'; -let parse = async (t) => { +let parse = async (t, r) => { if (!t) return; + if (t.includes(':')) t = t.split(':')[1]; + let user, uuid; // lightning @@ -32,11 +34,16 @@ let parse = async (t) => { // ln address if (t.includes('@') && t.includes('.')) { let [name, domain] = t.split('@'); - try { - let lnurl = await get(`/encode?domain=${domain}&name=${name}`); - } catch (e) {} + if (domain === r.host) t = name; + else { + try { + t = await get(`/encode?domain=${domain}&name=${name}`); + } catch (e) {} + } } + if (t.toLowerCase().startsWith('lnurl')) throw redirect(307, `/lnurl/${t}`); + // user try { user = await get(`/users/${t}`); @@ -45,15 +52,15 @@ let parse = async (t) => { if (user) throw redirect(303, `/send/user/${t}`); }; -export async function load({ params }) { +export async function load({ params, request }) { let { text } = params; - await parse(text); + await parse(text, request); } export const actions = { default: async ({ request }) => { const form = await request.formData(); - await parse(form.get('text')); + await parse(form.get('text'), request); return invalid(403, { error: 'Does not compute, try again' }); } -- cgit v1.2.3