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 | |
| parent | 29ed3a4366eb9719d32dac390764bf119c40afff (diff) | |
| download | coinos-ui-c8b250bc216b190e913fab27d599b40518d7e748.tar.gz coinos-ui-c8b250bc216b190e913fab27d599b40518d7e748.zip | |
lnurl pay
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/utils.js | 9 | ||||
| -rw-r--r-- | src/routes/(app)/+layout.server.js | 4 | ||||
| -rw-r--r-- | src/routes/(app)/[username]/payments/[...page]/+page.svelte | 2 | ||||
| -rw-r--r-- | src/routes/(app)/ln/[lnurl]/+page.server.js | 27 | ||||
| -rw-r--r-- | src/routes/(app)/ln/[lnurl]/+page.svelte | 15 | ||||
| -rw-r--r-- | src/routes/(app)/payment/[id]/+page.svelte | 4 | ||||
| -rw-r--r-- | src/routes/(app)/send/[...text]/+page.server.js | 15 | ||||
| -rw-r--r-- | src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.server.js | 8 | ||||
| -rw-r--r-- | src/routes/(app)/send/lightning/[payreq]/+page.server.js | 2 | ||||
| -rw-r--r-- | src/routes/(app)/send/lightning/[payreq]/+page.svelte | 36 |
10 files changed, 73 insertions, 49 deletions
diff --git a/src/lib/utils.js b/src/lib/utils.js index f2d78ee8..179aecc6 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -82,14 +82,7 @@ export function reverseFormat(val, locale) { return Number.isNaN(reversedVal) ? 0 : +reversedVal; } -export let protectedRoutes = [ - /customers/, - /dashboard/, - /settings/, - /payments/, - /\/ln\//, - /request/ -]; +export let protectedRoutes = [/customers/, /dashboard/, /settings/, /payments/, /request/]; export const success = (m) => { toast.pop(); diff --git a/src/routes/(app)/+layout.server.js b/src/routes/(app)/+layout.server.js index 63a01df6..0b76c973 100644 --- a/src/routes/(app)/+layout.server.js +++ b/src/routes/(app)/+layout.server.js @@ -15,8 +15,10 @@ export async function load({ cookies, request, url, params }) { } catch (e) {} } - if (user && ['/', '/login', '/register'].includes(pathname) && request.method === 'GET') + if (user && ['/', '/login', '/register'].includes(pathname) && request.method === 'GET') { + console.log('dashboarding', pathname); throw redirect(307, `/${user.username}/dashboard`); + } if ( protectedRoutes.find((p) => pathname.match(p)) && diff --git a/src/routes/(app)/[username]/payments/[...page]/+page.svelte b/src/routes/(app)/[username]/payments/[...page]/+page.svelte index e28ade67..620aec84 100644 --- a/src/routes/(app)/[username]/payments/[...page]/+page.svelte +++ b/src/routes/(app)/[username]/payments/[...page]/+page.svelte @@ -112,7 +112,7 @@ <div class="text-base"> {#each $payments as p} - <a href={`/payment/${p.id}`}> + <a href={`/payment/${p.id}`}> <div class="grid grid-cols-3 border-b h-24 hover:bg-gray-100 px-4"> <div class="whitespace-nowrap my-auto"> <div class="font-bold"> 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" /> diff --git a/src/routes/(app)/payment/[id]/+page.svelte b/src/routes/(app)/payment/[id]/+page.svelte index 9c0afaac..5a604d99 100644 --- a/src/routes/(app)/payment/[id]/+page.svelte +++ b/src/routes/(app)/payment/[id]/+page.svelte @@ -8,7 +8,7 @@ export let data; let { user, tx } = data; let { username } = user; - let { id, amount, hash, created, rate, type, preimage, fee, currency } = tx; + let { id, amount, hash, created, rate, type, ref, fee, currency } = tx; fee = fee || 0; let fiat = (Math.abs(amount) * rate) / sats; @@ -43,7 +43,7 @@ <div> <div class="font-bold">{$t('payments.preimage')}</div> <div> - {preimage} + {ref} </div> </div> {:else} diff --git a/src/routes/(app)/send/[...text]/+page.server.js b/src/routes/(app)/send/[...text]/+page.server.js index f0c8b892..3cc9f73d 100644 --- a/src/routes/(app)/send/[...text]/+page.server.js +++ b/src/routes/(app)/send/[...text]/+page.server.js @@ -15,20 +15,17 @@ let parse = async (t, host) => { options: { amount } } = bip21.decode(t)); - // ln address if (t.includes('@') && t.includes('.')) { - let [name, domain] = t.split('@'); - if (domain === host) t = name; - else { - try { - t = await get(`/encode?domain=${domain}&name=${name}`); - } catch (e) {} - } + try { + t = await get(`/encode?address=${t}`); + } catch (e) {} } - if (t.includes('/voucher')) throw redirect(307, t.substring(t.indexOf('/voucher'))); + if (t.includes('/pot')) throw redirect(307, t.substring(t.indexOf('/pot'))); + console.log('LNURL?'); if (t.toLowerCase().startsWith('lnurl')) throw redirect(307, `/ln/${t}`); + console.log('NOPE'); if (t.includes(':')) t = t.split(':')[1]; // lightning diff --git a/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.server.js b/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.server.js index 066043e7..901d90a8 100644 --- a/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.server.js +++ b/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.server.js @@ -4,9 +4,13 @@ import { auth, post } from '$lib/utils'; export const actions = { default: async ({ cookies, request }) => { try { - let feeRate, subtract; + let feeRate, subtract; let { address, amount, pin } = Object.fromEntries(await request.formData()); - let { tx } = await post('/bitcoin/fee', { address, amount, feeRate, subtract }, auth(cookies)); + let { tx } = await post( + '/bitcoin/fee', + { address, amount, feeRate, subtract }, + auth(cookies) + ); await post('/bitcoin/send', { pin, tx }, auth(cookies)); } catch (e) { return invalid(400, { message: e.message }); diff --git a/src/routes/(app)/send/lightning/[payreq]/+page.server.js b/src/routes/(app)/send/lightning/[payreq]/+page.server.js index a72e1c07..def7651c 100644 --- a/src/routes/(app)/send/lightning/[payreq]/+page.server.js +++ b/src/routes/(app)/send/lightning/[payreq]/+page.server.js @@ -15,7 +15,7 @@ export const actions = { let body = Object.fromEntries(await request.formData()); let { amount, confirmed } = body; - console.log("AMOUNT", amount); + console.log('AMOUNT', amount); if (!confirmed) { return invalid(403, { amount, confirm: true }); diff --git a/src/routes/(app)/send/lightning/[payreq]/+page.svelte b/src/routes/(app)/send/lightning/[payreq]/+page.svelte index 76ab432f..a88a0aec 100644 --- a/src/routes/(app)/send/lightning/[payreq]/+page.svelte +++ b/src/routes/(app)/send/lightning/[payreq]/+page.svelte @@ -24,6 +24,9 @@ if (form?.message?.includes('pin')) $pin = undefined; loading = false; }; + + let show; + let toggle = () => (show = !show); </script> <button class="ml-5 md:ml-20 mt-5 md:mt-10 hover:opacity-80" on:click={back}> @@ -41,10 +44,10 @@ <div class="text-center mb-8"> <h1 class="text-xl md:text-2xl text-secondary mb-2">{$t('payments.send')}</h1> <p class="text-6xl break-words mb-4"> - {s(amount)} <span class="text-xl md:text-2xl text-secondary">sats</span> + ⚡️{s(amount)} </p> <h1 class="text-xl md:text-2xl text-secondary mb-2">{$t('payments.to')}</h1> - <p class="text-6xl break-words">{alias}</p> + <p class="text-4xl break-words">{alias}</p> </div> <form method="POST" use:enhance on:submit={submit} action="?/send" class="space-y-5"> @@ -52,17 +55,7 @@ <input name="amount" value={amount} type="hidden" /> <input name="confirmed" value={form?.confirm} type="hidden" /> <input name="pin" value={$pin} type="hidden" /> - - <div class="relative w-96 mx-auto"> - <label>Max fee</label> - <input name="maxfee" value={maxfee} /> - - <div - class="absolute right-[2px] top-[25px] text-gray-600 rounded-r-2xl p-4 h-[54px] my-auto border-l " - > - sats - </div> - </div> + <input name="maxfee" value={maxfee} type="hidden" /> <div class="flex w-full"> <button @@ -78,6 +71,23 @@ </button> </div> </form> + + {#if show} + <div class="relative w-96 mx-auto"> + <label>Max fee</label> + <input name="maxfee" value={maxfee} /> + + <div + class="absolute right-[2px] top-[25px] text-gray-600 rounded-r-2xl p-4 h-[54px] my-auto border-l " + > + ⚡️ + </div> + </div> + {:else} + <div class="flex w-full mt-5"> + <button class="mx-auto" on:click={toggle}>Settings</button> + </div> + {/if} {:else} <form method="POST" action="?/setAmount" class="w-[300px] mx-auto"> <input type="hidden" value={a} name="amount" /> |
