From c8b250bc216b190e913fab27d599b40518d7e748 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Tue, 24 Jan 2023 09:53:40 -0800 Subject: lnurl pay --- src/routes/(app)/ln/[lnurl]/+page.server.js | 27 +++++++++++++++++---------- src/routes/(app)/ln/[lnurl]/+page.svelte | 15 +++++++++++++-- 2 files changed, 30 insertions(+), 12 deletions(-) (limited to 'src/routes/(app)/ln') diff --git a/src/routes/(app)/ln/[lnurl]/+page.server.js b/src/routes/(app)/ln/[lnurl]/+page.server.js index bb731e84..ded2e58c 100644 --- a/src/routes/(app)/ln/[lnurl]/+page.server.js +++ b/src/routes/(app)/ln/[lnurl]/+page.server.js @@ -1,23 +1,30 @@ import { auth, get, post } from '$lib/utils'; -import { error, redirect } from '@sveltejs/kit'; +import { error, invalid, redirect } from '@sveltejs/kit'; export async function load({ params }) { try { let { lnurl } = params; - lnurl = await get(`/decode?text=${lnurl}`); - if (lnurl.tag !== 'payRequest') throw error(500, 'We can only handle lnurl pay requests'); - - return lnurl; + let data = await get(`/decode?text=${lnurl}`); + if (data.tag !== 'payRequest') throw error(500, 'We can only handle lnurl pay requests'); + return data; } catch (e) { throw error(500, e.message); } } export const actions = { - default: async ({ cookies, request }) => { - let { callback, ...form } = Object.fromEntries(await request.formData()); - form.params = { callback }; - await post('/pay', form, auth(cookies)); - throw redirect(307, '/sent'); + default: async ({ cookies, fetch, request }) => { + let error; + + let { callback, amount, minSendable, maxSendable } = Object.fromEntries( + await request.formData() + ); + + if (amount < minSendable) error = `Amount must be at least ${minSendable} sats`; + if (amount > maxSendable) error = `Amount must be at most ${maxSendable} sats`; + if (error) return invalid(400, { error }); + + let { pr } = await fetch(`${callback}?amount=${amount}`).then((r) => r.json()); + throw redirect(307, `/send/lightning/${pr}`); } }; diff --git a/src/routes/(app)/ln/[lnurl]/+page.svelte b/src/routes/(app)/ln/[lnurl]/+page.svelte index 15edeaef..297ac35a 100644 --- a/src/routes/(app)/ln/[lnurl]/+page.svelte +++ b/src/routes/(app)/ln/[lnurl]/+page.svelte @@ -4,10 +4,12 @@ import { Numpad, Spinner } from '$comp'; import { pin } from '$lib/store'; - export let data; + export let data, form; let { currency } = data.user; let { minSendable, maxSendable, callback, metadata } = data; - let amount, loading; + + let amount = minSendable, + loading; let submit = () => (loading = true); @@ -24,10 +26,19 @@ {/each} + + {#if form?.error} +
+ {form.error} +
+ {/if} +
+ + -- cgit v1.2.3