From 8c8779162bf003ab65e2a6361d51ea0bc75092f3 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Thu, 6 Oct 2022 02:57:39 -0700 Subject: handle internal payments better --- src/lib/invoice.js | 4 +- src/lib/socket.js | 1 + src/params/uuid.js | 1 + src/routes/[username]/receive/+page.svelte | 1 + src/routes/send/[...text]/+page.server.js | 13 ++--- src/routes/send/[uuid=uuid]/+page.server.js | 23 ++++++++ src/routes/send/[uuid=uuid]/+page.svelte | 88 +++++++++++++++++++++++++++++ src/routes/sent/+page.svelte | 11 ++++ 8 files changed, 133 insertions(+), 9 deletions(-) create mode 100644 src/params/uuid.js create mode 100644 src/routes/send/[uuid=uuid]/+page.server.js create mode 100644 src/routes/send/[uuid=uuid]/+page.svelte (limited to 'src') diff --git a/src/lib/invoice.js b/src/lib/invoice.js index a0aa8402..1212cbe3 100644 --- a/src/lib/invoice.js +++ b/src/lib/invoice.js @@ -4,12 +4,14 @@ import { redirect } from '@sveltejs/kit'; export default async ({ cookies, request }) => { let form = await request.formData(); + let rates = await get('/rates'); + let invoice = { amount: parseInt(form.get('amount')), tip: parseInt(form.get('tip')), network: 'lightning', prompt: form.get('prompt') === 'true', - rate: await get('/rate') + rate: rates[form.get('currency')] }; let user = { username: form.get('username') }; diff --git a/src/lib/socket.js b/src/lib/socket.js index 7908f7b7..b32aa14a 100644 --- a/src/lib/socket.js +++ b/src/lib/socket.js @@ -20,6 +20,7 @@ export const messages = (data) => ({ payment() { let { amount, invoice } = data; + console.log("INVOICE", invoice) if (invoice) { invoices.set({ ...get(invoices), [invoice.uuid]: invoice }); } diff --git a/src/params/uuid.js b/src/params/uuid.js new file mode 100644 index 00000000..b71f68f1 --- /dev/null +++ b/src/params/uuid.js @@ -0,0 +1 @@ +export let match = (p) => p.split('-').length > 4 diff --git a/src/routes/[username]/receive/+page.svelte b/src/routes/[username]/receive/+page.svelte index d205e6e6..7b0562d5 100644 --- a/src/routes/[username]/receive/+page.svelte +++ b/src/routes/[username]/receive/+page.svelte @@ -11,6 +11,7 @@
+ diff --git a/src/routes/send/[...text]/+page.server.js b/src/routes/send/[...text]/+page.server.js index ca1ce652..6bd3ae6a 100644 --- a/src/routes/send/[...text]/+page.server.js +++ b/src/routes/send/[...text]/+page.server.js @@ -5,31 +5,28 @@ import { invalid, redirect } from '@sveltejs/kit'; let parse = async (t) => { if (!t) return; - let user; + let uuid; // lightning if (t.startsWith('ln')) { try { - ({ user } = await get(`/invoice/${t}`)); + ({ uuid } = await get(`/invoice/${t}`)); } catch (e) { throw redirect(303, `/send/lightning/${t}`); } - if (user) { - let { amount } = await post('/lightning/parse', { payreq: t }); - throw redirect(303, `/send/user/${user.username}/${amount}`); - } + if (uuid) throw redirect(303, `/send/${uuid}`); } // bitcoin if (validate(t)) { try { - ({ user } = await get(`/invoice/${t}`)); + ({ uuid } = await get(`/invoice/${t}`)); } catch (e) { throw redirect(303, `/send/bitcoin/${t}`); } - if (user) throw redirect(303, `/send/user/${user.username}`); + if (uuid) throw redirect(303, `/send/${uuid}`); } // ln address diff --git a/src/routes/send/[uuid=uuid]/+page.server.js b/src/routes/send/[uuid=uuid]/+page.server.js new file mode 100644 index 00000000..661e9e7b --- /dev/null +++ b/src/routes/send/[uuid=uuid]/+page.server.js @@ -0,0 +1,23 @@ +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 }) => { + let body = Object.fromEntries(await request.formData()); + let { confirmed } = body; + + if (!confirmed) { + return invalid(403, { amount, confirm: true }); + } + + 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 new file mode 100644 index 00000000..f625978f --- /dev/null +++ b/src/routes/send/[uuid=uuid]/+page.svelte @@ -0,0 +1,88 @@ + + + + +
+ {#if amount} +
+

Send

+

+ {fiat ? f(amountFiat, currency) : s(amount)} + {#if !fiat} + sats + {/if} +

+ +

to

+

{recipient.username}

+
+ {:else} + + {/if} + + + + + + + + +
+ {#if amount} + + {:else} + + {/if} +
+ +
diff --git a/src/routes/sent/+page.svelte b/src/routes/sent/+page.svelte index f79166e4..95612a17 100644 --- a/src/routes/sent/+page.svelte +++ b/src/routes/sent/+page.svelte @@ -1,4 +1,5 @@ @@ -15,6 +22,10 @@

Sent!

+

+ {f(fiat, user.currency)} +

+

({s(amount)} SAT)