diff options
| author | Adam Soltys <[email protected]> | 2022-11-02 19:47:29 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2022-11-02 19:48:18 -0700 |
| commit | f0d88333750a2865d3016e92620a87269160effa (patch) | |
| tree | 1cc276efeb5287e1fc176ec60d46aed091ab08ca /src/routes/send | |
| parent | b66477f0912349ef91adaff8c57ac787b5a56447 (diff) | |
| download | coinos-ui-f0d88333750a2865d3016e92620a87269160effa.tar.gz coinos-ui-f0d88333750a2865d3016e92620a87269160effa.zip | |
move to app layout
Diffstat (limited to 'src/routes/send')
| -rw-r--r-- | src/routes/send/+layout.svelte | 18 | ||||
| -rw-r--r-- | src/routes/send/[...text]/+page.server.js | 60 | ||||
| -rw-r--r-- | src/routes/send/[...text]/+page.svelte | 94 | ||||
| -rw-r--r-- | src/routes/send/[uuid=uuid]/+page.server.js | 28 | ||||
| -rw-r--r-- | src/routes/send/[uuid=uuid]/+page.svelte | 101 | ||||
| -rw-r--r-- | src/routes/send/bitcoin/[address]/+page.server.js | 16 | ||||
| -rw-r--r-- | src/routes/send/bitcoin/[address]/+page.svelte | 58 | ||||
| -rw-r--r-- | src/routes/send/lightning/[payreq]/+page.server.js | 27 | ||||
| -rw-r--r-- | src/routes/send/lightning/[payreq]/+page.svelte | 70 | ||||
| -rw-r--r-- | src/routes/send/lnurl/+page.svelte | 0 | ||||
| -rw-r--r-- | src/routes/send/user/[username]/[...amount]/+page.server.js | 29 | ||||
| -rw-r--r-- | src/routes/send/user/[username]/[...amount]/+page.svelte | 103 |
12 files changed, 0 insertions, 604 deletions
diff --git a/src/routes/send/+layout.svelte b/src/routes/send/+layout.svelte deleted file mode 100644 index c9122466..00000000 --- a/src/routes/send/+layout.svelte +++ /dev/null @@ -1,18 +0,0 @@ -<script> - import { Pin } from '$comp'; - import { pin } from '$lib/store'; - import { onMount } from 'svelte'; - - export let data; - - let loaded; - let { user } = data; - - onMount(() => setTimeout(() => (loaded = true), 50)); -</script> - -{#if loaded && user.haspin && $pin?.length !== 6} - <Pin /> -{/if} - -<slot /> diff --git a/src/routes/send/[...text]/+page.server.js b/src/routes/send/[...text]/+page.server.js deleted file mode 100644 index b909ab4d..00000000 --- a/src/routes/send/[...text]/+page.server.js +++ /dev/null @@ -1,60 +0,0 @@ -import validate from 'bitcoin-address-validation'; -import bip21 from 'bip21'; -import { get, post } from '$lib/utils'; -import { invalid, redirect } from '@sveltejs/kit'; - -let parse = async (t) => { - if (!t) return; - let user, uuid; - - // lightning - if (t.startsWith('ln')) { - try { - ({ uuid } = await get(`/invoice/${t}`)); - } catch (e) { - throw redirect(303, `/send/lightning/${t}`); - } - - if (uuid) throw redirect(303, `/send/${uuid}`); - } - - // bitcoin - if (validate(t)) { - try { - ({ uuid } = await get(`/invoice/${t}`)); - } catch (e) { - throw redirect(303, `/send/bitcoin/${t}`); - } - - if (uuid) throw redirect(303, `/send/${uuid}`); - } - - // ln address - if (t.includes('@') && t.includes('.')) { - let [name, domain] = t.split('@'); - try { - let lnurl = await get(`/encode?domain=${domain}&name=${name}`); - } catch (e) {} - } - - // user - try { - user = await get(`/users/${t}`); - } catch (e) {} - - if (user) throw redirect(303, `/send/user/${t}`); -}; - -export async function load({ params }) { - let { text } = params; - await parse(text); -} - -export const actions = { - default: async ({ request }) => { - const form = await request.formData(); - await parse(form.get('text')); - - return invalid(403, { error: 'Does not compute, try again' }); - } -}; diff --git a/src/routes/send/[...text]/+page.svelte b/src/routes/send/[...text]/+page.svelte deleted file mode 100644 index 1311422e..00000000 --- a/src/routes/send/[...text]/+page.svelte +++ /dev/null @@ -1,94 +0,0 @@ -<script> - import { fly } from 'svelte/transition'; - import { enhance } from '$app/forms'; - import { onMount } from 'svelte'; - import { browser } from '$app/environment'; - import { t } from '$lib/translations'; - import { Icon, Spinner } from '$comp'; - import { back, failure } from '$lib/utils'; - - export let form; - - let el; - let placeholder = 'Paste a bitcoin address, lightning invoice or coinos username'; - let text; - - let focus = () => text === placeholder && (text = ''); - let keypress = (e) => e.key === 'Enter' && (e.preventDefault() || el.click()); - - let paste = async () => { - text = await navigator.clipboard.readText(); - }; -</script> - -<button class="ml-5 md:ml-20 mt-5 md:mt-10 hover:opacity-80" on:click={back}> - <Icon icon="arrow-left" style="w-10" /> -</button> - -<h1 class="px-3 md:px-0 text-center text-3xl md:text-4xl font-semibold mb-8"> - Send bitcoin or lightning -</h1> - -<form method="POST" class="container px-4 max-w-xl mx-auto" use:enhance> - {#if form?.error} - <div class="text-red-600 text-center" in:fly> - {form.error} - </div> - {/if} - <div class="mb-2"> - <label for="invoice" class="font-bold mb-1 block">To</label> - <input type="hidden" name="text" bind:value={text} /> - - <textarea - {placeholder} - on:keypress={keypress} - class="w-full p-4 border rounded-xl h-48" - bind:value={text} - /> - </div> - - <div class="flex justify-end"> - <a href="/scan"> - <button - type="button" - class="flex border rounded-full px-6 py-2 font-bold hover:opacity-80 mr-1" - > - <Icon icon="scan" style="mr-2 w-6 my-auto" /> - <div class="my-auto">Scan</div> - </button> - </a> - - <button - type="button" - class="flex border rounded-full px-6 py-2 font-bold hover:opacity-80 mr-1" - on:click={paste} - > - <Icon icon="paste" style="mr-2 w-6 my-auto" /> - <div class="my-auto">Paste</div> - </button> - - <button - bind:this={el} - type="submit" - class="{!text - ? 'opacity-50' - : 'opacity-100 hover:opacity-80'} bg-black text-white border rounded-full px-6 py-2 font-bold" - > - Next - </button> - </div> -</form> - -<style> - .expandable-textarea { - font-family: inherit; - font-size: inherit; - - resize: both; - display: block; - overflow: hidden; - min-height: 48px; - line-height: 20px; - @apply block border rounded-2xl p-3 py-4 w-full; - } -</style> diff --git a/src/routes/send/[uuid=uuid]/+page.server.js b/src/routes/send/[uuid=uuid]/+page.server.js deleted file mode 100644 index c9c77f70..00000000 --- a/src/routes/send/[uuid=uuid]/+page.server.js +++ /dev/null @@ -1,28 +0,0 @@ -import { error, invalid, redirect } from '@sveltejs/kit'; -import { btc as asset, auth, get, post } from '$lib/utils'; - -export async function load({ params, parent }) { - let { user } = await parent(); - let { amount, address, text, user: recipient } = await get(`/invoice/${params.uuid}`); - if (recipient.username === user.username) throw error(500, { message: 'Cannot send to self' }); - return { amount, address, payreq: text, recipient }; -} - -export const actions = { - default: async ({ cookies, params, request }) => { - try { - let body = Object.fromEntries(await request.formData()); - let { confirmed } = body; - - if (!confirmed) { - return invalid(403, { amount, confirm: true }); - } - - await post('/send', body, auth(cookies)); - } catch (e) { - return invalid(400, { message: e.message }); - } - - throw redirect(307, '/sent'); - } -}; diff --git a/src/routes/send/[uuid=uuid]/+page.svelte b/src/routes/send/[uuid=uuid]/+page.svelte deleted file mode 100644 index 73712f71..00000000 --- a/src/routes/send/[uuid=uuid]/+page.svelte +++ /dev/null @@ -1,101 +0,0 @@ -<script> - import { goto } from '$app/navigation'; - import { pin, selectedRate } from '$lib/store'; - import { enhance } from '$app/forms'; - import { Icon, Numpad, Spinner } from '$comp'; - import { page } from '$app/stores'; - import { back, f, s, sats } from '$lib/utils'; - export let data; - export let form; - - let { address, payreq, recipient, user } = data; - let { currency } = user; - - let amount = form?.amount || data.amount; - let a, - af, - amountFiat = amount * ($selectedRate / sats), - fiat = !amount; - - let setAmount = () => { - amount = a; - amountFiat = af; - }; - - let handleBack = () => { - if (amount) { - amount = undefined; - goto(`/send/user/${recipient.username}`); - } else back(); - }; - - let loading; - let submit = () => (loading = true); - - $: update(form); - let update = () => { - if (form?.message.includes('pin')) $pin = undefined; - loading = false; - }; -</script> - -<button class="ml-5 md:ml-20 mt-5 md:mt-10 hover:opacity-80" on:click={handleBack}> - <Icon icon="arrow-left" style="w-10" /> -</button> - -{#if form?.message} - <div class="text-red-600 text-center"> - {form.message} - </div> -{/if} - -<div class="container px-4 mt-20 max-w-xl mx-auto"> - {#if amount} - <div class="text-center mb-8"> - <h1 class="text-xl md:text-2xl text-secondary mb-2">Send</h1> - <p class="text-6xl break-words mb-4"> - {fiat ? f(amountFiat, currency) : s(amount)} - {#if !fiat} - <span class="text-xl md:text-2xl text-secondary">sats</span> - {/if} - </p> - - <h1 class="text-xl md:text-2xl text-secondary mb-2">to</h1> - <p class="text-6xl break-words">{recipient.username}</p> - </div> - {:else} - <Numpad bind:amount={a} bind:amountFiat={af} {currency} bind:fiat /> - {/if} - - <form method="POST" use:enhance on:submit={submit}> - <input name="address" value={address} type="hidden" /> - <input name="amount" value={amount} type="hidden" /> - <input name="payreq" value={payreq} type="hidden" /> - <input name="username" value={recipient.username} type="hidden" /> - <input name="confirmed" value={form?.confirm} type="hidden" /> - <input name="pin" value={$pin} type="hidden" /> - - <div class="flex w-full"> - {#if amount} - <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} - Send - {/if} - </button> - {:else} - <button - type="button" - 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" - on:click={setAmount} - > - Next - </button> - {/if} - </div> - </form> -</div> diff --git a/src/routes/send/bitcoin/[address]/+page.server.js b/src/routes/send/bitcoin/[address]/+page.server.js deleted file mode 100644 index 642593ab..00000000 --- a/src/routes/send/bitcoin/[address]/+page.server.js +++ /dev/null @@ -1,16 +0,0 @@ -import { invalid, redirect } from '@sveltejs/kit'; -import { auth, post } from '$lib/utils'; - -export const actions = { - default: async ({ cookies, request }) => { - try { - let { address, amount, pin } = Object.fromEntries(await request.formData()); - let { tx } = await post('/bitcoin/fee', { address, amount }, auth(cookies)); - await post('/bitcoin/send', { address, pin, tx }, auth(cookies)); - } catch (e) { - return invalid(400, { message: e.message }); - } - - throw redirect(307, '/sent'); - } -}; diff --git a/src/routes/send/bitcoin/[address]/+page.svelte b/src/routes/send/bitcoin/[address]/+page.svelte deleted file mode 100644 index 744bfe9d..00000000 --- a/src/routes/send/bitcoin/[address]/+page.svelte +++ /dev/null @@ -1,58 +0,0 @@ -<script> - import { enhance } from '$app/forms'; - import { Icon, Numpad, Spinner } from '$comp'; - import { page } from '$app/stores'; - import { back } from '$lib/utils'; - import { pin } from '$lib/store'; - - export let data; - export let form; - - let { address } = $page.params; - let { currency } = data.user; - let amount, loading; - - let submit = () => (loading = true); - $: update(form); - let update = () => { - if (form?.message.includes('pin')) $pin = undefined; - loading = false; - }; -</script> - -<button class="ml-5 md:ml-20 mt-5 md:mt-10 hover:opacity-80" on:click={back}> - <Icon icon="arrow-left" style="w-10" /> -</button> - -{#if form?.message} - <div class="text-red-600 text-center"> - {form.message} - </div> -{/if} - -<div class="container px-4 mt-20 max-w-xl mx-auto"> - <div class="text-center mb-8"> - <h1 class="text-3xl md:text-4xl font-semibold mb-2">Send to</h1> - <p class="text-lg text-secondary">{address}</p> - </div> - <Numpad bind:amount {currency} /> - - <form method="POST" use:enhance on:submit={submit}> - <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 - 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} - Send - {/if} - </button> - </div> - </form> -</div> diff --git a/src/routes/send/lightning/[payreq]/+page.server.js b/src/routes/send/lightning/[payreq]/+page.server.js deleted file mode 100644 index 8d60628b..00000000 --- a/src/routes/send/lightning/[payreq]/+page.server.js +++ /dev/null @@ -1,27 +0,0 @@ -import { invalid, redirect } from '@sveltejs/kit'; -import { btc as asset, auth, post } from '$lib/utils'; - -export async function load({ params }) { - return post('/lightning/parse', params); -} - -export const actions = { - default: async ({ cookies, request }) => { - try { - let body = Object.fromEntries(await request.formData()); - let { amount, confirmed } = body; - - if (!confirmed) { - return invalid(403, { amount, confirm: true }); - } - - await post('/lightning/send', 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 }); - } - - throw redirect(307, '/sent'); - } -}; diff --git a/src/routes/send/lightning/[payreq]/+page.svelte b/src/routes/send/lightning/[payreq]/+page.svelte deleted file mode 100644 index e738c9a3..00000000 --- a/src/routes/send/lightning/[payreq]/+page.svelte +++ /dev/null @@ -1,70 +0,0 @@ -<script> - import { enhance } from '$app/forms'; - import { Icon, Numpad, Spinner } from '$comp'; - import { page } from '$app/stores'; - import { back, s } from '$lib/utils'; - import { pin } from '$lib/store'; - - export let data; - export let form; - - let { payreq } = $page.params; - let { alias } = data; - - let { currency } = data.user; - let amount = form?.amount || data.amount; - - let loading; - let submit = () => (loading = true); - $: update(form); - let update = () => { - if (form?.message.includes('pin')) $pin = undefined; - loading = false; - }; -</script> - -<button class="ml-5 md:ml-20 mt-5 md:mt-10 hover:opacity-80" on:click={back}> - <Icon icon="arrow-left" style="w-10" /> -</button> - -{#if form?.message} - <div class="text-red-600 text-center"> - {form.message} - </div> -{/if} - -<div class="container px-4 mt-20 max-w-xl mx-auto"> - {#if amount} - <div class="text-center mb-8"> - <h1 class="text-xl md:text-2xl text-secondary mb-2">Send</h1> - <p class="text-6xl break-words mb-4"> - {s(amount)} <span class="text-xl md:text-2xl text-secondary">sats</span> - </p> - <h1 class="text-xl md:text-2xl text-secondary mb-2">to</h1> - <p class="text-6xl break-words">{alias}</p> - </div> - {:else} - <Numpad bind:amount {currency} /> - {/if} - - <form method="POST" use:enhance on:submit={submit}> - <input name="payreq" value={payreq} type="hidden" /> - <input name="amount" value={amount} type="hidden" /> - <input name="confirmed" value={form?.confirm} 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" - disabled={loading} - > - {#if loading} - <Spinner /> - {:else} - Send - {/if} - </button> - </div> - </form> -</div> diff --git a/src/routes/send/lnurl/+page.svelte b/src/routes/send/lnurl/+page.svelte deleted file mode 100644 index e69de29b..00000000 --- a/src/routes/send/lnurl/+page.svelte +++ /dev/null diff --git a/src/routes/send/user/[username]/[...amount]/+page.server.js b/src/routes/send/user/[username]/[...amount]/+page.server.js deleted file mode 100644 index a659eef3..00000000 --- a/src/routes/send/user/[username]/[...amount]/+page.server.js +++ /dev/null @@ -1,29 +0,0 @@ -import { error, invalid, redirect } from '@sveltejs/kit'; -import { btc as asset, auth, get, post } from '$lib/utils'; - -export async function load({ params, parent }) { - let { user } = await parent(); - let { amount } = params; - let recipient = await get(`/users/${params.username}`); - if (recipient.username === user?.username) throw error(500, { message: 'Cannot send to self' }); - return { amount, recipient }; -} - -export const actions = { - default: async ({ cookies, request }) => { - try { - let body = Object.fromEntries(await request.formData()); - let { amount, confirmed } = body; - - if (!confirmed) { - return invalid(403, { amount, confirm: true }); - } - - await post('/send', body, auth(cookies)); - } catch (e) { - return invalid(400, { message: e.message }); - } - - throw redirect(307, '/sent'); - } -}; diff --git a/src/routes/send/user/[username]/[...amount]/+page.svelte b/src/routes/send/user/[username]/[...amount]/+page.svelte deleted file mode 100644 index 89cec12f..00000000 --- a/src/routes/send/user/[username]/[...amount]/+page.svelte +++ /dev/null @@ -1,103 +0,0 @@ -<script> - import { goto } from '$app/navigation'; - import { pin, selectedRate } from '$lib/store'; - import { enhance } from '$app/forms'; - import { Avatar, Icon, Numpad, Spinner } from '$comp'; - import { page } from '$app/stores'; - import { back, f, s, sats } from '$lib/utils'; - - export let data; - export let form; - - let { recipient, user } = data; - let currency = user?.currency || 'USD'; - - let amount = form?.amount || data.amount; - let a, - af, - amountFiat = amount * ($selectedRate / sats), - fiat = !amount; - - let setAmount = () => { - amount = a; - amountFiat = af; - }; - - let handleBack = () => { - if (amount) { - amount = undefined; - goto(`/send/user/${recipient.username}`); - } else back(); - }; - - let loading; - let submit = () => (loading = true); - - $: update(form); - let update = () => { - if (form?.message.includes('pin')) $pin = undefined; - loading = false; - }; -</script> - -<button class="ml-5 md:ml-20 mt-5 md:mt-10 hover:opacity-80" on:click={handleBack}> - <Icon icon="arrow-left" style="w-10" /> -</button> - -{#if form?.message} - <div class="text-red-600 text-center"> - {form.message} - </div> -{/if} - -<div class="container px-4 mt-20 max-w-xl mx-auto space-y-8"> - {#if amount} - <div class="text-center mb-8 space-y-5"> - <p class="text-5xl break-words"> - {fiat ? f(amountFiat, currency) : s(amount)} - {#if !fiat} - <span class="text-xl md:text-2xl text-secondary">sats</span> - {/if} - </p> - - <h1 class="text-xl md:text-2xl text-secondary mb-2">to</h1> - - <div class="flex p-1 gap-2 justify-center"> - <Avatar user={recipient} size={'20'} /> - <p class="text-4xl break-words my-auto">{recipient.username}</p> - </div> - </div> - {:else} - <Numpad bind:amount={a} bind:amountFiat={af} {currency} bind:fiat /> - {/if} - - <form method="POST" use:enhance on:submit={submit}> - <input name="amount" value={amount} type="hidden" /> - <input name="username" value={recipient.username} type="hidden" /> - <input name="confirmed" value={form?.confirm} type="hidden" /> - <input name="pin" value={$pin} type="hidden" /> - - <div class="flex w-full"> - {#if amount} - <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} - Send - {/if} - </button> - {:else} - <button - type="button" - 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" - on:click={setAmount} - > - Next - </button> - {/if} - </div> - </form> -</div> |
