diff options
| author | Adam Soltys <[email protected]> | 2023-01-25 23:01:55 -0800 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2023-01-25 23:01:55 -0800 |
| commit | f1b3efe88204ba203667a8dd67ac8ab598af1959 (patch) | |
| tree | 071975ffa4c30f81a7a25b78b4cfd5f85fdf7ea5 /src/routes/(app) | |
| parent | 2a18749cb9b08726dedf0cfb63971305e50a910a (diff) | |
| download | coinos-ui-f1b3efe88204ba203667a8dd67ac8ab598af1959.tar.gz coinos-ui-f1b3efe88204ba203667a8dd67ac8ab598af1959.zip | |
sveltekit 1.0
Diffstat (limited to 'src/routes/(app)')
21 files changed, 53 insertions, 92 deletions
diff --git a/src/routes/(app)/+error.svelte b/src/routes/(app)/+error.svelte deleted file mode 100644 index 8d613909..00000000 --- a/src/routes/(app)/+error.svelte +++ /dev/null @@ -1,42 +0,0 @@ -<script> - import { page } from '$app/stores'; - import { Icon, PageNotFound } from '$comp'; - import { t } from '$lib/translations'; - import { back } from '$lib/utils'; - - export let data; - let { user } = data; - - $: message = $page.error.message; - $: if (message.startsWith('Internal')) message = 'Something went wrong'; -</script> - -{#if $page.error.message.includes('not found') || $page.status === 404} - <PageNotFound /> -{:else} - <div class="container px-4 max-w-lg mx-auto mt-20 space-y-5"> - <div class="w-[243px] mx-auto mb-10"> - <a href="/"> - <Icon icon="logo" /> - </a> - </div> - - <div class="flex justify-center items-center"> - <div class="shadow-xl rounded-3xl p-10 pb-12 space-y-5 w-full mx-5 md:mx-0 md:w-[400px]"> - <h1 class="text-3xl md:text-4xl font-semibold"> - {$t('error.header')} - </h1> - - <p class="text-secondary"> - {message}. If the problem persists, please - <a href="/support" class="underline">let us know.</a> - </p> - - <button - class="rounded-full bg-black text-white py-2 px-5 font-bold hover:opacity-80 mb-2" - on:click={back}>Back</button - > - </div> - </div> - </div> -{/if} diff --git a/src/routes/(app)/+layout.server.js b/src/routes/(app)/+layout.server.js index 0b76c973..1415bdca 100644 --- a/src/routes/(app)/+layout.server.js +++ b/src/routes/(app)/+layout.server.js @@ -15,6 +15,10 @@ export async function load({ cookies, request, url, params }) { } catch (e) {} } + if (user?.needsMigration) { + throw redirect(307, `/migrate`); + } + if (user && ['/', '/login', '/register'].includes(pathname) && request.method === 'GET') { console.log('dashboarding', pathname); throw redirect(307, `/${user.username}/dashboard`); diff --git a/src/routes/(app)/[username]/(profile)/messages/+page.svelte b/src/routes/(app)/[username]/(profile)/messages/+page.svelte index 47228015..00960534 100644 --- a/src/routes/(app)/[username]/(profile)/messages/+page.svelte +++ b/src/routes/(app)/[username]/(profile)/messages/+page.svelte @@ -12,7 +12,6 @@ import { calculateId } from 'nostr'; export let data; - export let form; let { newMessages, subject, user } = data; let input, pane; diff --git a/src/routes/(app)/[username]/payments/[...page]/+page.svelte b/src/routes/(app)/[username]/payments/[...page]/+page.svelte index 620aec84..551238cb 100644 --- a/src/routes/(app)/[username]/payments/[...page]/+page.svelte +++ b/src/routes/(app)/[username]/payments/[...page]/+page.svelte @@ -141,7 +141,7 @@ <a href={`/pot/${p.pot}`}> <div class="text-secondary flex"> <div class="my-auto mr-1"> - <img src="/icons/logo-symbol.svg" class="w-12 border-4 border-transparent" /> + <img src="/icons/logo-symbol.svg" class="w-12 border-4 border-transparent" alt="Pot" /> </div> <div class="my-auto">Pot</div> @@ -162,7 +162,7 @@ <div class="text-3xl">⚡️</div> {:else} <div class="my-auto mr-1"> - <img src="/images/bitcoin.svg" class="w-12 border-4 border-transparent" /> + <img src="/images/bitcoin.svg" class="w-12 border-4 border-transparent" alt="Bitcoin" /> </div> {/if} @@ -201,10 +201,4 @@ .active * { @apply bg-black text-white border-black; } - - select { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - } </style> diff --git a/src/routes/(app)/[username]/receive/[...param]/+page.svelte b/src/routes/(app)/[username]/receive/[...param]/+page.svelte index 47c507fa..13c65939 100644 --- a/src/routes/(app)/[username]/receive/[...param]/+page.svelte +++ b/src/routes/(app)/[username]/receive/[...param]/+page.svelte @@ -19,6 +19,7 @@ let { currency, username } = data.subject; let { user } = data; + let submit; </script> <form method="POST" class="flex justify-center items-center mt-24 mb-3 px-3" use:enhance> @@ -34,8 +35,9 @@ <input type="hidden" name="prompt" value={false} /> <div class="space-y-3 w-[300px] mx-auto"> - <Numpad bind:amount bind:currency /> + <Numpad bind:amount bind:currency {submit} /> <button + bind:this={submit} type="submit" class="bg-black text-white rounded-xl w-full h-[48px] flex justify-center items-center font-semibold opacity-100 hover:opacity-80" diff --git a/src/routes/(app)/[username]/settings/[...tab]/+page.server.js b/src/routes/(app)/[username]/settings/[...tab]/+page.server.js index cb642e60..dd16459f 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/+page.server.js +++ b/src/routes/(app)/[username]/settings/[...tab]/+page.server.js @@ -1,4 +1,4 @@ -import { invalid, redirect } from '@sveltejs/kit'; +import { fail, redirect } from '@sveltejs/kit'; import { auth, get, post } from '$lib/utils'; export function load({ params, url }) { @@ -14,7 +14,7 @@ export const actions = { try { ({ user } = await post(`/user`, user, auth(cookies))); } catch (e) { - return invalid(400, { message: e.message }); + return fail(400, { message: e.message }); } return { user, success: true }; diff --git a/src/routes/(app)/invoice/[hash]/+page.svelte b/src/routes/(app)/invoice/[hash]/+page.svelte index 059225ab..090a333f 100644 --- a/src/routes/(app)/invoice/[hash]/+page.svelte +++ b/src/routes/(app)/invoice/[hash]/+page.svelte @@ -151,8 +151,4 @@ .full { @apply p-8; } - - .full-shadow { - box-shadow: inset 0 0 0 1000px rgba(0, 0, 0, 0.25); - } </style> diff --git a/src/routes/(app)/invoice/[hash]/tip/+page.svelte b/src/routes/(app)/invoice/[hash]/tip/+page.svelte index d7df0a69..eaa67170 100644 --- a/src/routes/(app)/invoice/[hash]/tip/+page.svelte +++ b/src/routes/(app)/invoice/[hash]/tip/+page.svelte @@ -2,7 +2,7 @@ import { onMount } from 'svelte'; import { browser } from '$app/environment'; import { invoice as inv, request } from '$lib/store'; - import { back, copy, f, sat, get, reverseFormat, s, sats } from '$lib/utils'; + import { back, copy, focus, f, sat, get, reverseFormat, s, sats } from '$lib/utils'; import { Icon } from '$comp'; import { goto } from '$app/navigation'; import { t } from '$lib/translations'; @@ -190,7 +190,7 @@ on:input={(e) => handleCustomTipAmount(e)} class="pl-10" placeholder="Custom amount" - autofocus + use:focus /> <button type="submit" diff --git a/src/routes/(app)/ln/[lnurl]/+page.server.js b/src/routes/(app)/ln/[lnurl]/+page.server.js index ded2e58c..6f61143f 100644 --- a/src/routes/(app)/ln/[lnurl]/+page.server.js +++ b/src/routes/(app)/ln/[lnurl]/+page.server.js @@ -1,5 +1,5 @@ import { auth, get, post } from '$lib/utils'; -import { error, invalid, redirect } from '@sveltejs/kit'; +import { error, fail, redirect } from '@sveltejs/kit'; export async function load({ params }) { try { @@ -22,7 +22,7 @@ export const actions = { 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 }); + if (error) return fail(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)/login/+page.server.js b/src/routes/(app)/login/+page.server.js index 24146326..27607ff1 100644 --- a/src/routes/(app)/login/+page.server.js +++ b/src/routes/(app)/login/+page.server.js @@ -1,4 +1,4 @@ -import { invalid, redirect } from '@sveltejs/kit'; +import { fail, redirect } from '@sveltejs/kit'; import { login } from '$lib/utils'; export const load = async ({ parent }) => { @@ -17,7 +17,7 @@ export const actions = { try { let r = await login(user, cookies); } catch (e) { - return invalid(400, { error: 'Login failed', message: e.message, ...form }); + return fail(400, { error: 'Login failed', message: e.message, ...form }); } throw redirect(303, loginRedirect || `/${user.username}/dashboard`); diff --git a/src/routes/(app)/payment/[id]/+page.svelte b/src/routes/(app)/payment/[id]/+page.svelte index 5a604d99..9eefda2b 100644 --- a/src/routes/(app)/payment/[id]/+page.svelte +++ b/src/routes/(app)/payment/[id]/+page.svelte @@ -51,7 +51,7 @@ <div class="font-bold">{$t('payments.id')}</div> <div class="flex"> <div> - <a href={`${expl}/tx/${id}`} target="_blank" class="text-blue-600">{id}</a> + <a href={`${expl}/tx/${id}`} target="_blank" rel="noreferrer" class="text-blue-600">{id}</a> </div> <button class="flex font-bold hover:opacity-80 mb-auto" on:click={() => copy(id)} ><Icon icon="copy" style="mr-1" /> diff --git a/src/routes/(app)/pot/[name]/withdraw/+page.server.js b/src/routes/(app)/pot/[name]/withdraw/+page.server.js index 7a486d58..ab56867d 100644 --- a/src/routes/(app)/pot/[name]/withdraw/+page.server.js +++ b/src/routes/(app)/pot/[name]/withdraw/+page.server.js @@ -1,4 +1,4 @@ -import { invalid, redirect } from '@sveltejs/kit'; +import { fail, redirect } from '@sveltejs/kit'; import { auth, post } from '$lib/utils'; export async function load({ parent }) { @@ -13,7 +13,7 @@ export const actions = { try { await post('/take', body, auth(cookies)); } catch (e) { - return invalid(400, { message: e.message }); + return fail(400, { message: e.message }); } throw redirect(307, `/pot/${body.name}`); diff --git a/src/routes/(app)/register/+page.server.js b/src/routes/(app)/register/+page.server.js index 44c1f44b..1d98136f 100644 --- a/src/routes/(app)/register/+page.server.js +++ b/src/routes/(app)/register/+page.server.js @@ -1,4 +1,4 @@ -import { invalid, redirect } from '@sveltejs/kit'; +import { fail, redirect } from '@sveltejs/kit'; import { post, login } from '$lib/utils'; export const load = async ({ parent }) => { @@ -28,7 +28,7 @@ export const actions = { error ||= e.message; } - if (error) return invalid(400, { error }); + if (error) return fail(400, { error }); throw redirect(307, loginRedirect || `/${user.username}/dashboard`); } }; diff --git a/src/routes/(app)/send/[...text]/+page.server.js b/src/routes/(app)/send/[...text]/+page.server.js index 3cc9f73d..8e5e02d7 100644 --- a/src/routes/(app)/send/[...text]/+page.server.js +++ b/src/routes/(app)/send/[...text]/+page.server.js @@ -1,7 +1,7 @@ import { validate } from 'bitcoin-address-validation'; import bip21 from 'bip21'; import { auth, get, post } from '$lib/utils'; -import { invalid, redirect } from '@sveltejs/kit'; +import { redirect } from '@sveltejs/kit'; let parse = async (t, host) => { if (!t) return; @@ -23,9 +23,7 @@ let parse = async (t, host) => { 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/[uuid=uuid]/+page.server.js b/src/routes/(app)/send/[uuid=uuid]/+page.server.js index e9f161c7..7fa613bf 100644 --- a/src/routes/(app)/send/[uuid=uuid]/+page.server.js +++ b/src/routes/(app)/send/[uuid=uuid]/+page.server.js @@ -1,4 +1,4 @@ -import { error, invalid, redirect } from '@sveltejs/kit'; +import { error, fail, redirect } from '@sveltejs/kit'; import { btc as asset, auth, get, post } from '$lib/utils'; export async function load({ params, parent }) { @@ -17,12 +17,12 @@ export const actions = { let { confirmed } = body; if (!confirmed) { - return invalid(403, { amount, confirm: true }); + return fail(400, { amount, confirm: true }); } await post('/payments', body, auth(cookies)); } catch (e) { - return invalid(400, { message: e.message }); + return fail(400, { message: e.message }); } throw redirect(307, '/sent'); 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 901d90a8..59e9326d 100644 --- a/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.server.js +++ b/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.server.js @@ -1,11 +1,17 @@ -import { invalid, redirect } from '@sveltejs/kit'; +import { fail, redirect } from '@sveltejs/kit'; import { auth, post } from '$lib/utils'; +let seen = {}; export const actions = { default: async ({ cookies, request }) => { try { let feeRate, subtract; - let { address, amount, pin } = Object.fromEntries(await request.formData()); + let { address, amount, pin, ts } = Object.fromEntries(await request.formData()); + + if (seen[ts]) return fail(400, { message: 'Duplicate form submission' }); + seen[ts] = 1; + setTimeout(() => delete seen[ts], 30000); + let { tx } = await post( '/bitcoin/fee', { address, amount, feeRate, subtract }, @@ -13,7 +19,7 @@ export const actions = { ); await post('/bitcoin/send', { pin, tx }, auth(cookies)); } catch (e) { - return invalid(400, { message: e.message }); + return fail(400, { message: e.message }); } throw redirect(307, '/sent'); diff --git a/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte b/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte index 2165e896..0da8ea10 100644 --- a/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte +++ b/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte @@ -11,9 +11,10 @@ let { address, amount } = $page.params; let { currency } = data.user; - let loading; + let loading, submit; + + let toggle = () => (loading = true); - let submit = () => (loading = true); $: update(form); let update = () => { if (form?.message.includes('pin')) $pin = undefined; @@ -36,17 +37,20 @@ <h1 class="text-3xl md:text-4xl font-semibold mb-2">{$t('payments.sendTo')}</h1> <p class="text-lg text-secondary">{address}</p> </div> - <Numpad bind:amount {currency} /> + <Numpad bind:amount {currency} {submit} /> - <form method="POST" use:enhance on:submit={submit}> + <form method="POST" use:enhance on:submit={toggle}> + <input name="ts" value={Date.now()} type="hidden" /> <input name="address" value={address} type="hidden" /> <input name="amount" value={amount} type="hidden" /> <input name="pin" value={$pin} type="hidden" /> <div class="flex w-full"> <button + bind:this={submit} 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" + disabled={loading} > {#if loading} <Spinner /> diff --git a/src/routes/(app)/send/lightning/[payreq]/+page.server.js b/src/routes/(app)/send/lightning/[payreq]/+page.server.js index def7651c..21bc9c71 100644 --- a/src/routes/(app)/send/lightning/[payreq]/+page.server.js +++ b/src/routes/(app)/send/lightning/[payreq]/+page.server.js @@ -1,4 +1,4 @@ -import { invalid, redirect } from '@sveltejs/kit'; +import { fail, redirect } from '@sveltejs/kit'; import { btc as asset, auth, post } from '$lib/utils'; export async function load({ params }) { @@ -18,14 +18,14 @@ export const actions = { console.log('AMOUNT', amount); if (!confirmed) { - return invalid(403, { amount, confirm: true }); + return fail(400, { amount, confirm: true }); } await post('/payments', body, auth(cookies)); } catch (e) { if (e.message.includes('unusable')) e.message = 'Failed to route payment, try sending a lower amount'; - return invalid(400, { message: e.message }); + return fail(400, { message: e.message }); } throw redirect(307, '/sent'); diff --git a/src/routes/(app)/send/pot/[name]/[...amount]/+page.server.js b/src/routes/(app)/send/pot/[name]/[...amount]/+page.server.js index eadaa22e..0e1b7f5b 100644 --- a/src/routes/(app)/send/pot/[name]/[...amount]/+page.server.js +++ b/src/routes/(app)/send/pot/[name]/[...amount]/+page.server.js @@ -1,4 +1,4 @@ -import { invalid, redirect } from '@sveltejs/kit'; +import { fail, redirect } from '@sveltejs/kit'; import { auth, post } from '$lib/utils'; export const actions = { @@ -9,7 +9,7 @@ export const actions = { try { p = await post('/payments', body, auth(cookies)); } catch (e) { - return invalid(400, { message: e.message }); + return fail(400, { message: e.message }); } if (p) throw redirect(307, `/pot/${body.name}`); diff --git a/src/routes/(app)/send/user/[username]/[...amount]/+page.server.js b/src/routes/(app)/send/user/[username]/[...amount]/+page.server.js index 01712df2..46172175 100644 --- a/src/routes/(app)/send/user/[username]/[...amount]/+page.server.js +++ b/src/routes/(app)/send/user/[username]/[...amount]/+page.server.js @@ -1,4 +1,4 @@ -import { error, invalid, redirect } from '@sveltejs/kit'; +import { error, fail, redirect } from '@sveltejs/kit'; import { btc as asset, auth, get, post } from '$lib/utils'; export async function load({ params, parent }) { @@ -17,13 +17,13 @@ export const actions = { amount = parseInt(amount); if (!confirmed) { - return invalid(403, { amount, confirm: true }); + return fail(400, { amount, confirm: true }); } await post('/payments', body, auth(cookies)); } catch (e) { console.log(e); - return invalid(400, { message: e.message }); + return fail(400, { message: e.message }); } throw redirect(307, '/sent'); diff --git a/src/routes/(app)/support/+page.server.js b/src/routes/(app)/support/+page.server.js index 02c5e3b3..5d3bf988 100644 --- a/src/routes/(app)/support/+page.server.js +++ b/src/routes/(app)/support/+page.server.js @@ -1,5 +1,5 @@ import { post } from '$lib/utils'; -import { invalid } from '@sveltejs/kit'; +import { fail } from '@sveltejs/kit'; export const actions = { default: async ({ cookies, request }) => { @@ -8,7 +8,7 @@ export const actions = { try { await post('/email', form); } catch (e) { - return invalid(400, { error: e.message }); + return fail(400, { error: e.message }); } return { success: true }; |
