From bf70219a4753d31a201ffc10e0c378a512adb721 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Thu, 6 Oct 2022 00:13:16 -0700 Subject: send route can take a parameter --- package.json | 1 + pnpm-lock.yaml | 7 ++ src/components/AppHeader.svelte | 3 - src/routes/+layout.svelte | 2 + src/routes/[username]/+page.svelte | 75 +++++++++------- src/routes/[username]/bitcoin/+page.server.js | 4 + src/routes/[username]/bitcoin/+page.svelte | 0 src/routes/[username]/settings/+page.svelte | 2 +- src/routes/[username]/settings/_account.svelte | 3 + .../[username]/transactions/[...page]/+page.svelte | 19 +++-- src/routes/scan/+page.svelte | 4 +- src/routes/send/+page.server.js | 47 ---------- src/routes/send/+page.svelte | 99 ---------------------- src/routes/send/[...text]/+page.server.js | 55 ++++++++++++ src/routes/send/[...text]/+page.svelte | 99 ++++++++++++++++++++++ src/routes/send/lightning/[payreq]/+page.svelte | 2 +- src/routes/send/user/[username]/+page.svelte | 2 +- 17 files changed, 234 insertions(+), 190 deletions(-) create mode 100644 src/routes/[username]/bitcoin/+page.server.js create mode 100644 src/routes/[username]/bitcoin/+page.svelte delete mode 100644 src/routes/send/+page.server.js delete mode 100644 src/routes/send/+page.svelte create mode 100644 src/routes/send/[...text]/+page.server.js create mode 100644 src/routes/send/[...text]/+page.svelte diff --git a/package.json b/package.json index 3afd183a..808e5761 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "bitcoin-address-validation": "^2.2.1", "bolt11": "^1.4.0", "cookie": "^0.5.0", + "date-fns": "^2.29.3", "leaflet": "^1.9.1", "leaflet.markercluster": "^1.5.3", "postcss": "^8.4.17", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 52f20ba5..644cca0e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,6 +9,7 @@ specifiers: bitcoin-address-validation: ^2.2.1 bolt11: ^1.4.0 cookie: ^0.5.0 + date-fns: ^2.29.3 leaflet: ^1.9.1 leaflet.markercluster: ^1.5.3 postcss: ^8.4.17 @@ -34,6 +35,7 @@ devDependencies: bitcoin-address-validation: 2.2.1 bolt11: 1.4.0 cookie: 0.5.0 + date-fns: 2.29.3 leaflet: 1.9.1 leaflet.markercluster: 1.5.3_leaflet@1.9.1 postcss: 8.4.17 @@ -536,6 +538,11 @@ packages: engines: {node: '>= 12'} dev: true + /date-fns/2.29.3: + resolution: {integrity: sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==} + engines: {node: '>=0.11'} + dev: true + /debug/4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} diff --git a/src/components/AppHeader.svelte b/src/components/AppHeader.svelte index a21c4ecd..94bd9b1a 100644 --- a/src/components/AppHeader.svelte +++ b/src/components/AppHeader.svelte @@ -13,9 +13,6 @@ $: update(data); let update = (data) => ({ subject, user } = data); - $: updateUser(user); - let updateUser = () => console.log('USER', user); - const menuButtons = [ { stringID: 'nav.dashboard', icon: 'dash', goto: 'dashboard' }, { stringID: 'nav.settings', icon: 'settings', goto: 'settings' }, diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index a07d2fb1..c86b0eb5 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -35,7 +35,9 @@ +
+
diff --git a/src/routes/send/[...text]/+page.server.js b/src/routes/send/[...text]/+page.server.js new file mode 100644 index 00000000..ec764882 --- /dev/null +++ b/src/routes/send/[...text]/+page.server.js @@ -0,0 +1,55 @@ +import validate from 'bitcoin-address-validation'; +import bip21 from 'bip21'; +import { get } from '$lib/utils'; +import { invalid, redirect } from '@sveltejs/kit'; + +let parse = async (t) => { + if (!t) return; + + // lightning + if (t.startsWith('ln')) { + throw redirect(303, `/send/lightning/${t}`); + } + + // bitcoin + if (validate(t)) { + let user; + try { + ({ user } = await get(`/invoice/${t}`)); + } catch (e) { + throw redirect(303, `/send/bitcoin/${t}`); + } + + if (user) throw redirect(303, `/send/user/${user.username}`); + } + + // 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 + let 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: 'Failed to recognize input' }); + } +}; diff --git a/src/routes/send/[...text]/+page.svelte b/src/routes/send/[...text]/+page.svelte new file mode 100644 index 00000000..5d6d123e --- /dev/null +++ b/src/routes/send/[...text]/+page.svelte @@ -0,0 +1,99 @@ + + + + +
+ {#if form?.error} +
+ {form.error} +
+ {/if} +
+ + + +
+ {text} +
+
+ +
+ + + + + + + +
+
+ + diff --git a/src/routes/send/lightning/[payreq]/+page.svelte b/src/routes/send/lightning/[payreq]/+page.svelte index 1b248af6..973550f6 100644 --- a/src/routes/send/lightning/[payreq]/+page.svelte +++ b/src/routes/send/lightning/[payreq]/+page.svelte @@ -23,7 +23,7 @@
{#if amount}
-

Sending

+

Send

{s(amount)} sats

diff --git a/src/routes/send/user/[username]/+page.svelte b/src/routes/send/user/[username]/+page.svelte index 1193696b..05908011 100644 --- a/src/routes/send/user/[username]/+page.svelte +++ b/src/routes/send/user/[username]/+page.svelte @@ -38,7 +38,7 @@
{#if amount}
-

Sending

+

Send

{fiat ? f(amountFiat, currency) : s(a)} {#if !fiat} -- cgit v1.2.3 From 97948ce65ec1ea90c17ef8813929cbd12b0c4bfc Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Thu, 6 Oct 2022 00:28:42 -0700 Subject: check for internal payments --- src/routes/send/[...text]/+page.server.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/routes/send/[...text]/+page.server.js b/src/routes/send/[...text]/+page.server.js index ec764882..471724e4 100644 --- a/src/routes/send/[...text]/+page.server.js +++ b/src/routes/send/[...text]/+page.server.js @@ -8,7 +8,14 @@ let parse = async (t) => { // lightning if (t.startsWith('ln')) { - throw redirect(303, `/send/lightning/${t}`); + let user; + try { + ({ user } = await get(`/invoice/${t}`)); + } catch (e) { + throw redirect(303, `/send/lightning/${t}`); + } + + if (user) throw redirect(303, `/send/user/${user.username}`); } // bitcoin @@ -41,8 +48,8 @@ let parse = async (t) => { }; export async function load({ params }) { - let { text } = params; - await parse(text); + let { text } = params; + await parse(text); } export const actions = { -- cgit v1.2.3