diff options
| author | Adam Soltys <[email protected]> | 2023-01-27 20:58:08 -0800 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2023-01-27 20:58:08 -0800 |
| commit | 2dbd712039e4268c6cf8e6240033caf464ebcd50 (patch) | |
| tree | 7f3dc97f2b37b06c8193183f611b5b5abcb0f5e7 /src/routes/(app) | |
| parent | 1ff3877220343972ba8e7008b7338b41cc4c876d (diff) | |
| download | coinos-ui-2dbd712039e4268c6cf8e6240033caf464ebcd50.tar.gz coinos-ui-2dbd712039e4268c6cf8e6240033caf464ebcd50.zip | |
lnurlw
Diffstat (limited to 'src/routes/(app)')
| -rw-r--r-- | src/routes/(app)/ln/[lnurl]/+page.server.js | 27 | ||||
| -rw-r--r-- | src/routes/(app)/ln/[lnurl]/+page.svelte | 62 | ||||
| -rw-r--r-- | src/routes/(app)/ln/withdrawal/sent/+page.svelte | 23 | ||||
| -rw-r--r-- | src/routes/(app)/send/lnurl/+page.svelte | 0 |
4 files changed, 55 insertions, 57 deletions
diff --git a/src/routes/(app)/ln/[lnurl]/+page.server.js b/src/routes/(app)/ln/[lnurl]/+page.server.js index 6f61143f..a947dbb4 100644 --- a/src/routes/(app)/ln/[lnurl]/+page.server.js +++ b/src/routes/(app)/ln/[lnurl]/+page.server.js @@ -5,7 +5,8 @@ export async function load({ params }) { try { let { lnurl } = params; let data = await get(`/decode?text=${lnurl}`); - if (data.tag !== 'payRequest') throw error(500, 'We can only handle lnurl pay requests'); + if (data.tag === 'payRequest') throw redirect('/lnurlp'); + throw error(500, 'We can only handle lnurl pay requests'); return data; } catch (e) { throw error(500, e.message); @@ -13,7 +14,7 @@ export async function load({ params }) { } export const actions = { - default: async ({ cookies, fetch, request }) => { + pay: async ({ cookies, fetch, request }) => { let error; let { callback, amount, minSendable, maxSendable } = Object.fromEntries( @@ -26,5 +27,27 @@ export const actions = { let { pr } = await fetch(`${callback}?amount=${amount}`).then((r) => r.json()); throw redirect(307, `/send/lightning/${pr}`); + }, + + withdraw: async ({ cookies, fetch, request }) => { + let error; + + let { callback, amount, minWithdrawable, maxWithdrawable, k1 } = Object.fromEntries( + await request.formData() + ); + + if (amount < minWithdrawable) error = `Amount must be at least ${minWithdrawable} sats`; + if (amount > maxWithdrawable) error = `Amount must be at most ${maxWithdrawable} sats`; + if (error) return fail(400, { error }); + + let invoice = { amount, type: 'lightning' }; + let user = { username: form.get('username'), currency: form.get('currency') }; + + let { text: pr } = await post('/invoice', { invoice, user }, auth(cookies)); + + let c = callback.includes('?') ? '&' : '?'; + await fetch(`${callback}${c}k1=${k1}&pr=${pr}`).then((r) => r.json()); + + throw redirect(307, `/ln/withdrawal/sent`); } }; diff --git a/src/routes/(app)/ln/[lnurl]/+page.svelte b/src/routes/(app)/ln/[lnurl]/+page.svelte index 297ac35a..f9423153 100644 --- a/src/routes/(app)/ln/[lnurl]/+page.svelte +++ b/src/routes/(app)/ln/[lnurl]/+page.svelte @@ -1,58 +1,10 @@ <script> - import { t } from '$lib/translations'; - import { enhance } from '$app/forms'; - import { Numpad, Spinner } from '$comp'; - import { pin } from '$lib/store'; - - export let data, form; - let { currency } = data.user; - let { minSendable, maxSendable, callback, metadata } = data; - - let amount = minSendable, - loading; - let submit = () => (loading = true); + import { Lnurlp, Lnurlw } from '$comp'; + let { tag } = data; </script> -<div class="container px-4 mt-20 max-w-xl mx-auto"> - <div class="text-center mb-8"> - {#each JSON.parse(metadata) as m} - <div> - {#if m[0] === 'text/plain'} - <h1 class="text-3xl md:text-4xl font-semibold mb-2">{m[1]}</h1> - {/if} - {#if m[0].includes('image')} - <img src={`data:image/png;base64,${m[1]}`} alt="Recipient" /> - {/if} - </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" /> - - <div class="flex w-full"> - <button - type="submit" - class="opacity-100 hover:opacity-80'} rounded-2xl border py-3 font-bold mx-auto mt-2 bg-black text-white px-4 w-24" - > - {#if loading} - <Spinner /> - {:else} - {$t('payments.send')} - {/if} - </button> - </div> - </form> -</div> +{#if tag === 'payRequest'} + <Lnurlp {data} /> +{:else if tag === 'withdrawRequest'} + <Lnurlw {data} /> +{/if} diff --git a/src/routes/(app)/ln/withdrawal/sent/+page.svelte b/src/routes/(app)/ln/withdrawal/sent/+page.svelte new file mode 100644 index 00000000..84e6a7e0 --- /dev/null +++ b/src/routes/(app)/ln/withdrawal/sent/+page.svelte @@ -0,0 +1,23 @@ +<script> + import { scale } from 'svelte/transition'; + import { Icon } from '$comp'; + import { toast } from '@zerodevx/svelte-toast'; + import { t } from '$lib/translations'; + + export let data; + let { user } = data; + toast.pop(0); +</script> + +<div class="text-center mt-20 md:mt-0"> + <div class="flex w-full max-w-[200px] mx-auto py-20" in:scale={{ start: 0.5 }}> + <Icon icon="check" style="mx-auto" /> + </div> + <h1 class="text-3xl md:text-4xl font-bold mb-6">Request Sent!</h1> +</div> + +<a href={`/${user.username}/payments`}> + <div class="opacity-0 w-screen h-screen fixed top-0 left-0 z-50" /> +</a> + +<div class="fixed bottom-10 w-full text-center">{$t('payments.tapAnywhere')}</div> diff --git a/src/routes/(app)/send/lnurl/+page.svelte b/src/routes/(app)/send/lnurl/+page.svelte deleted file mode 100644 index e69de29b..00000000 --- a/src/routes/(app)/send/lnurl/+page.svelte +++ /dev/null |
