aboutsummaryrefslogtreecommitdiffstats
path: root/src/routes
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2022-10-25 00:11:35 -0700
committerAdam Soltys <[email protected]>2022-10-25 00:11:35 -0700
commitb1f81daaab3b04e8ae0b3e4edd4984aeade8098e (patch)
tree97369f2a128b778a0344b7a6e7458de47eab9769 /src/routes
parent0e17224e71296cf6a0336c5a2e7340a3b63cd2dc (diff)
downloadcoinos-ui-b1f81daaab3b04e8ae0b3e4edd4984aeade8098e.tar.gz
coinos-ui-b1f81daaab3b04e8ae0b3e4edd4984aeade8098e.zip
send pin
Diffstat (limited to 'src/routes')
-rw-r--r--src/routes/send/+layout.svelte18
-rw-r--r--src/routes/send/[uuid=uuid]/+page.server.js15
-rw-r--r--src/routes/send/[uuid=uuid]/+page.svelte15
-rw-r--r--src/routes/send/bitcoin/[address]/+page.server.js13
-rw-r--r--src/routes/send/bitcoin/[address]/+page.svelte16
-rw-r--r--src/routes/send/lightning/[payreq]/+page.server.js16
-rw-r--r--src/routes/send/lightning/[payreq]/+page.svelte14
-rw-r--r--src/routes/send/user/[username]/[...amount]/+page.server.js15
-rw-r--r--src/routes/send/user/[username]/[...amount]/+page.svelte16
9 files changed, 117 insertions, 21 deletions
diff --git a/src/routes/send/+layout.svelte b/src/routes/send/+layout.svelte
new file mode 100644
index 00000000..c9122466
--- /dev/null
+++ b/src/routes/send/+layout.svelte
@@ -0,0 +1,18 @@
+<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/[uuid=uuid]/+page.server.js b/src/routes/send/[uuid=uuid]/+page.server.js
index 661e9e7b..c9c77f70 100644
--- a/src/routes/send/[uuid=uuid]/+page.server.js
+++ b/src/routes/send/[uuid=uuid]/+page.server.js
@@ -10,14 +10,19 @@ export async function load({ params, parent }) {
export const actions = {
default: async ({ cookies, params, request }) => {
- let body = Object.fromEntries(await request.formData());
- let { confirmed } = body;
+ try {
+ let body = Object.fromEntries(await request.formData());
+ let { confirmed } = body;
- if (!confirmed) {
- return invalid(403, { amount, confirm: true });
+ if (!confirmed) {
+ return invalid(403, { amount, confirm: true });
+ }
+
+ await post('/send', body, auth(cookies));
+ } catch (e) {
+ return invalid(400, { message: e.message });
}
- await post('/send', body, auth(cookies));
throw redirect(307, '/sent');
}
};
diff --git a/src/routes/send/[uuid=uuid]/+page.svelte b/src/routes/send/[uuid=uuid]/+page.svelte
index aa798bc1..73712f71 100644
--- a/src/routes/send/[uuid=uuid]/+page.svelte
+++ b/src/routes/send/[uuid=uuid]/+page.svelte
@@ -1,6 +1,6 @@
<script>
import { goto } from '$app/navigation';
- import { selectedRate } from '$lib/store';
+ import { pin, selectedRate } from '$lib/store';
import { enhance } from '$app/forms';
import { Icon, Numpad, Spinner } from '$comp';
import { page } from '$app/stores';
@@ -31,12 +31,24 @@
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">
@@ -61,6 +73,7 @@
<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}
diff --git a/src/routes/send/bitcoin/[address]/+page.server.js b/src/routes/send/bitcoin/[address]/+page.server.js
index 9b29a6da..642593ab 100644
--- a/src/routes/send/bitcoin/[address]/+page.server.js
+++ b/src/routes/send/bitcoin/[address]/+page.server.js
@@ -1,11 +1,16 @@
-import { redirect } from '@sveltejs/kit';
+import { invalid, redirect } from '@sveltejs/kit';
import { auth, post } from '$lib/utils';
export const actions = {
default: async ({ cookies, request }) => {
- let { address, amount } = Object.fromEntries(await request.formData());
- let { tx } = await post('/bitcoin/fee', { address, amount }, auth(cookies));
- await post('/bitcoin/send', { address, tx }, auth(cookies));
+ 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
index 8c9e72ff..c9023180 100644
--- a/src/routes/send/bitcoin/[address]/+page.svelte
+++ b/src/routes/send/bitcoin/[address]/+page.svelte
@@ -3,19 +3,33 @@
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>
@@ -26,6 +40,8 @@
<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"
diff --git a/src/routes/send/lightning/[payreq]/+page.server.js b/src/routes/send/lightning/[payreq]/+page.server.js
index f17d6a60..49ebac1c 100644
--- a/src/routes/send/lightning/[payreq]/+page.server.js
+++ b/src/routes/send/lightning/[payreq]/+page.server.js
@@ -7,14 +7,20 @@ export async function load({ params }) {
export const actions = {
default: async ({ cookies, request }) => {
- let body = Object.fromEntries(await request.formData());
- let { amount, confirmed } = body;
+ try {
+ let body = Object.fromEntries(await request.formData());
+ let { amount, confirmed } = body;
- if (!confirmed) {
- return invalid(403, { amount, confirm: true });
+ 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 });
}
- await post('/lightning/send', body, auth(cookies));
throw redirect(307, '/sent');
}
};
diff --git a/src/routes/send/lightning/[payreq]/+page.svelte b/src/routes/send/lightning/[payreq]/+page.svelte
index 973550f6..bda10038 100644
--- a/src/routes/send/lightning/[payreq]/+page.svelte
+++ b/src/routes/send/lightning/[payreq]/+page.svelte
@@ -3,6 +3,8 @@
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;
@@ -14,12 +16,23 @@
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">
@@ -38,6 +51,7 @@
<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
diff --git a/src/routes/send/user/[username]/[...amount]/+page.server.js b/src/routes/send/user/[username]/[...amount]/+page.server.js
index 12bae186..a659eef3 100644
--- a/src/routes/send/user/[username]/[...amount]/+page.server.js
+++ b/src/routes/send/user/[username]/[...amount]/+page.server.js
@@ -11,14 +11,19 @@ export async function load({ params, parent }) {
export const actions = {
default: async ({ cookies, request }) => {
- let body = Object.fromEntries(await request.formData());
- let { amount, confirmed } = body;
+ try {
+ let body = Object.fromEntries(await request.formData());
+ let { amount, confirmed } = body;
- if (!confirmed) {
- return invalid(403, { amount, confirm: true });
+ if (!confirmed) {
+ return invalid(403, { amount, confirm: true });
+ }
+
+ await post('/send', body, auth(cookies));
+ } catch (e) {
+ return invalid(400, { message: e.message });
}
- await post('/send', body, auth(cookies));
throw redirect(307, '/sent');
}
};
diff --git a/src/routes/send/user/[username]/[...amount]/+page.svelte b/src/routes/send/user/[username]/[...amount]/+page.svelte
index e50acd5b..6f4cb313 100644
--- a/src/routes/send/user/[username]/[...amount]/+page.svelte
+++ b/src/routes/send/user/[username]/[...amount]/+page.svelte
@@ -1,10 +1,11 @@
<script>
import { goto } from '$app/navigation';
- import { selectedRate } from '$lib/store';
+ 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;
@@ -31,12 +32,24 @@
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">
@@ -63,6 +76,7 @@
<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}