aboutsummaryrefslogtreecommitdiffstats
path: root/src/routes/send
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2022-11-02 19:47:29 -0700
committerAdam Soltys <[email protected]>2022-11-02 19:48:18 -0700
commitf0d88333750a2865d3016e92620a87269160effa (patch)
tree1cc276efeb5287e1fc176ec60d46aed091ab08ca /src/routes/send
parentb66477f0912349ef91adaff8c57ac787b5a56447 (diff)
downloadcoinos-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.svelte18
-rw-r--r--src/routes/send/[...text]/+page.server.js60
-rw-r--r--src/routes/send/[...text]/+page.svelte94
-rw-r--r--src/routes/send/[uuid=uuid]/+page.server.js28
-rw-r--r--src/routes/send/[uuid=uuid]/+page.svelte101
-rw-r--r--src/routes/send/bitcoin/[address]/+page.server.js16
-rw-r--r--src/routes/send/bitcoin/[address]/+page.svelte58
-rw-r--r--src/routes/send/lightning/[payreq]/+page.server.js27
-rw-r--r--src/routes/send/lightning/[payreq]/+page.svelte70
-rw-r--r--src/routes/send/lnurl/+page.svelte0
-rw-r--r--src/routes/send/user/[username]/[...amount]/+page.server.js29
-rw-r--r--src/routes/send/user/[username]/[...amount]/+page.svelte103
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>