diff options
| author | Adam Soltys <[email protected]> | 2023-01-24 09:53:40 -0800 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2023-01-24 09:53:40 -0800 |
| commit | c8b250bc216b190e913fab27d599b40518d7e748 (patch) | |
| tree | 191e56d4d6671c9e24f7db9a7c268461a76bb11d /src/routes/(app)/ln | |
| parent | 29ed3a4366eb9719d32dac390764bf119c40afff (diff) | |
| download | coinos-ui-c8b250bc216b190e913fab27d599b40518d7e748.tar.gz coinos-ui-c8b250bc216b190e913fab27d599b40518d7e748.zip | |
lnurl pay
Diffstat (limited to 'src/routes/(app)/ln')
| -rw-r--r-- | src/routes/(app)/ln/[lnurl]/+page.server.js | 27 | ||||
| -rw-r--r-- | src/routes/(app)/ln/[lnurl]/+page.svelte | 15 |
2 files changed, 30 insertions, 12 deletions
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); </script> @@ -24,10 +26,19 @@ </div> {/each} </div> + + {#if form?.error} + <div class="text-red-600 text-center mb-5"> + {form.error} + </div> + {/if} + <Numpad bind:amount {currency} /> <form method="POST" use:enhance on:submit={submit}> <input name="amount" value={amount} type="hidden" /> + <input name="minSendable" value={minSendable} type="hidden" /> + <input name="maxSendable" value={maxSendable} type="hidden" /> <input name="callback" value={callback} type="hidden" /> <input name="pin" value={$pin} type="hidden" /> |
