diff options
| author | Adam Soltys <[email protected]> | 2022-11-05 13:03:47 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2022-11-05 13:03:47 -0700 |
| commit | 5bd8de0b2b0866c1229bb746d0a5a0cdd7a6b519 (patch) | |
| tree | 23d8cf46f3e60429681ec3291b51822a575613bf /src | |
| parent | 119ac865b9ea25f54e30baa03325331604535956 (diff) | |
| download | coinos-ui-5bd8de0b2b0866c1229bb746d0a5a0cdd7a6b519.tar.gz coinos-ui-5bd8de0b2b0866c1229bb746d0a5a0cdd7a6b519.zip | |
handle bip21 qr codes
Diffstat (limited to 'src')
| -rw-r--r-- | src/components/Numpad.svelte | 7 | ||||
| -rw-r--r-- | src/routes/(app)/qr/[text]/+page.server.js | 8 | ||||
| -rw-r--r-- | src/routes/(app)/qr/[text]/+page.svelte | 7 | ||||
| -rw-r--r-- | src/routes/(app)/scan/+page.svelte | 2 | ||||
| -rw-r--r-- | src/routes/(app)/send/[...text]/+page.server.js | 51 | ||||
| -rw-r--r-- | src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.server.js (renamed from src/routes/(app)/send/bitcoin/[address]/+page.server.js) | 0 | ||||
| -rw-r--r-- | src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte (renamed from src/routes/(app)/send/bitcoin/[address]/+page.svelte) | 4 |
7 files changed, 52 insertions, 27 deletions
diff --git a/src/components/Numpad.svelte b/src/components/Numpad.svelte index 36fe9f67..4f7026a9 100644 --- a/src/components/Numpad.svelte +++ b/src/components/Numpad.svelte @@ -5,11 +5,12 @@ import { t } from '$lib/translations'; export let amount, - amountFiat = 0, currency, - fiat = true; + fiat = !amount; - let amountSats = 0; + export let amountFiat = amount * ($selectedRate / sats); + + let amountSats = amount; let loading = false; let symbol = diff --git a/src/routes/(app)/qr/[text]/+page.server.js b/src/routes/(app)/qr/[text]/+page.server.js new file mode 100644 index 00000000..9dd2b24d --- /dev/null +++ b/src/routes/(app)/qr/[text]/+page.server.js @@ -0,0 +1,8 @@ +import Qr from 'qrcode-base64'; + +export async function load({ params }) { + let { text } = params; + let src = Qr.drawImg(text, { size: 600 }); + + return { src }; +} diff --git a/src/routes/(app)/qr/[text]/+page.svelte b/src/routes/(app)/qr/[text]/+page.svelte new file mode 100644 index 00000000..555f919c --- /dev/null +++ b/src/routes/(app)/qr/[text]/+page.svelte @@ -0,0 +1,7 @@ +<script> + import { Qr } from '$comp'; + export let data; + let { src } = data; +</script> + +<Qr {src} /> diff --git a/src/routes/(app)/scan/+page.svelte b/src/routes/(app)/scan/+page.svelte index 10c288dd..4e06e1b5 100644 --- a/src/routes/(app)/scan/+page.svelte +++ b/src/routes/(app)/scan/+page.svelte @@ -7,7 +7,7 @@ let scanner, vid; onMount(() => { - scanner = new QrScanner(vid, ({ data }) => goto(`/send/${data}`), { + scanner = new QrScanner(vid, ({ data }) => goto(`/send/${encodeURI(data)}`), { highlightScanRegion: true, highlightCodeOutline: true }); diff --git a/src/routes/(app)/send/[...text]/+page.server.js b/src/routes/(app)/send/[...text]/+page.server.js index 193e8cbd..283347de 100644 --- a/src/routes/(app)/send/[...text]/+page.server.js +++ b/src/routes/(app)/send/[...text]/+page.server.js @@ -5,20 +5,39 @@ import { invalid, redirect } from '@sveltejs/kit'; let parse = async (t, r) => { if (!t) return; - if (t.includes(':')) t = t.split(':')[1]; - console.log(t) - let user, uuid; + let amount, user, uuid; + + console.log(bip21.decode(t)) + t.startsWith('bitcoin:') && + ({ + address: t, + options: { amount } + } = bip21.decode(t)); + + // ln address + if (t.includes('@') && t.includes('.')) { + let [name, domain] = t.split('@'); + if (domain === r.host) t = name; + else { + try { + t = await get(`/encode?domain=${domain}&name=${name}`); + } catch (e) {} + } + } + + if (t.toLowerCase().startsWith('lnurl')) throw redirect(307, `/lnurl/${t}`); + if (t.includes(':')) t = t.split(':')[1]; // lightning if (t.startsWith('ln')) { try { ({ uuid } = await get(`/invoice/${t}`)); } catch (e) { - throw redirect(303, `/send/lightning/${t}`); + throw redirect(307, `/send/lightning/${t}`); } - if (uuid) throw redirect(303, `/send/${uuid}`); + if (uuid) throw redirect(307, `/send/${uuid}`); } // bitcoin @@ -26,31 +45,21 @@ let parse = async (t, r) => { try { ({ uuid } = await get(`/invoice/${t}`)); } catch (e) { - throw redirect(303, `/send/bitcoin/${t}`); + let r = `/send/bitcoin/${t}`; + if (amount) r += '/' + amount; + console.log("AM", amount) + throw redirect(307, r); } - if (uuid) throw redirect(303, `/send/${uuid}`); - } - - // ln address - if (t.includes('@') && t.includes('.')) { - let [name, domain] = t.split('@'); - if (domain === r.host) t = name; - else { - try { - t = await get(`/encode?domain=${domain}&name=${name}`); - } catch (e) {} - } + if (uuid) throw redirect(307, `/send/${uuid}`); } - if (t.toLowerCase().startsWith('lnurl')) throw redirect(307, `/lnurl/${t}`); - // user try { user = await get(`/users/${t}`); } catch (e) {} - if (user) throw redirect(303, `/send/user/${t}`); + if (user) throw redirect(307, `/send/user/${t}`); }; export async function load({ params, request }) { diff --git a/src/routes/(app)/send/bitcoin/[address]/+page.server.js b/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.server.js index 642593ab..642593ab 100644 --- a/src/routes/(app)/send/bitcoin/[address]/+page.server.js +++ b/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.server.js diff --git a/src/routes/(app)/send/bitcoin/[address]/+page.svelte b/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte index 744bfe9d..a9382eb7 100644 --- a/src/routes/(app)/send/bitcoin/[address]/+page.svelte +++ b/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte @@ -8,9 +8,9 @@ export let data; export let form; - let { address } = $page.params; + let { address, amount } = $page.params; let { currency } = data.user; - let amount, loading; + let loading; let submit = () => (loading = true); $: update(form); |
