aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2022-11-05 13:03:47 -0700
committerAdam Soltys <[email protected]>2022-11-05 13:03:47 -0700
commit5bd8de0b2b0866c1229bb746d0a5a0cdd7a6b519 (patch)
tree23d8cf46f3e60429681ec3291b51822a575613bf /src
parent119ac865b9ea25f54e30baa03325331604535956 (diff)
downloadcoinos-ui-5bd8de0b2b0866c1229bb746d0a5a0cdd7a6b519.tar.gz
coinos-ui-5bd8de0b2b0866c1229bb746d0a5a0cdd7a6b519.zip
handle bip21 qr codes
Diffstat (limited to 'src')
-rw-r--r--src/components/Numpad.svelte7
-rw-r--r--src/routes/(app)/qr/[text]/+page.server.js8
-rw-r--r--src/routes/(app)/qr/[text]/+page.svelte7
-rw-r--r--src/routes/(app)/scan/+page.svelte2
-rw-r--r--src/routes/(app)/send/[...text]/+page.server.js51
-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);