aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2023-02-01 10:04:29 -0800
committerAdam Soltys <[email protected]>2023-02-01 10:04:29 -0800
commitc26727b1bab7398f94520fa10a502957c99fcab7 (patch)
treee822737fdda40b66da8653b65203ccfc5397e877 /src
parent4514e5cf43069c552fed9f5f975d08664ca0d3b9 (diff)
parent5085ef51412bc4d1e18bdabf29cd9fe3f7183e1c (diff)
downloadcoinos-ui-c26727b1bab7398f94520fa10a502957c99fcab7.tar.gz
coinos-ui-c26727b1bab7398f94520fa10a502957c99fcab7.zip
Merge branch 'master' into staging
Diffstat (limited to 'src')
-rw-r--r--src/components/Numpad.svelte6
-rw-r--r--src/components/Password.svelte4
-rw-r--r--src/components/Pin.svelte2
-rw-r--r--src/components/Qr.svelte2
-rw-r--r--src/lib/upload.js2
-rw-r--r--src/lib/utils.js2
-rw-r--r--src/routes/(app)/+layout.server.js6
-rw-r--r--src/routes/(app)/[username]/+layout.server.js4
-rw-r--r--src/routes/(app)/[username]/payments/[...page]/+page.server.js2
-rw-r--r--src/routes/(app)/[username]/payments/[...page]/+page.svelte53
-rw-r--r--src/routes/(app)/[username]/payments/[...page]/+server.js18
-rw-r--r--src/routes/(app)/[username]/receive/[...param]/+page.svelte6
-rw-r--r--src/routes/(app)/[username]/settings/[...tab]/+page.svelte4
-rw-r--r--src/routes/(app)/[username]/settings/[...tab]/_account.svelte2
-rw-r--r--src/routes/(app)/invoice/[hash]/+layout.server.js2
-rw-r--r--src/routes/(app)/invoice/[hash]/tip/+page.svelte2
-rw-r--r--src/routes/(app)/invoice/sent/+page.svelte2
-rw-r--r--src/routes/(app)/ln/[lnurl]/+page.svelte4
-rw-r--r--src/routes/(app)/payment/[id]/+page.svelte6
-rw-r--r--src/routes/(app)/pot/[name]/+page.svelte2
-rw-r--r--src/routes/(app)/send/[...text]/+page.server.js5
-rw-r--r--src/routes/(app)/send/[uuid=uuid]/+page.server.js2
-rw-r--r--src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte2
23 files changed, 100 insertions, 40 deletions
diff --git a/src/components/Numpad.svelte b/src/components/Numpad.svelte
index d74255e0..5ffaa2ea 100644
--- a/src/components/Numpad.svelte
+++ b/src/components/Numpad.svelte
@@ -94,7 +94,7 @@
let prev = '';
let input = (e) => {
- if (prev === '0') {
+ if (prev === '0' && html !== '0.') {
prev = '';
html = html.replace('0', '');
}
@@ -102,7 +102,8 @@
let sel = getSelection();
let i = sel.focusOffset;
- let clean = html.substr(0,15)
+ let clean = html
+ .substr(0, 15)
.replace(/[^0-9.,]+/g, '')
.replace('.', 'F')
.replace(/\./g, '')
@@ -138,7 +139,6 @@
let node = e.target.childNodes[0];
let range = document.createRange();
- console.log('NODE', node, i);
if (node) {
range.setStart(node, i);
range.setEnd(node, i);
diff --git a/src/components/Password.svelte b/src/components/Password.svelte
index 95a52cac..fd39441c 100644
--- a/src/components/Password.svelte
+++ b/src/components/Password.svelte
@@ -35,7 +35,7 @@
class="bg-primary"
bind:value={password}
autocapitalize="none"
- use:focus
+ use:focus
/>
{:else}
<input
@@ -45,7 +45,7 @@
class="bg-primary"
bind:value={password}
autocapitalize="none"
- use:focus
+ use:focus
/>
{/if}
<button
diff --git a/src/components/Pin.svelte b/src/components/Pin.svelte
index c7889aa9..7225ac37 100644
--- a/src/components/Pin.svelte
+++ b/src/components/Pin.svelte
@@ -1,5 +1,5 @@
<script>
- import { focus } from "$lib/utils";
+ import { focus } from '$lib/utils';
import { pin } from '$lib/store';
let pinCode = '';
diff --git a/src/components/Qr.svelte b/src/components/Qr.svelte
index 5fea7cbd..c67d134e 100644
--- a/src/components/Qr.svelte
+++ b/src/components/Qr.svelte
@@ -10,5 +10,5 @@
on:click={() => screenfull.toggle(qr)}
on:keydown={() => screenfull.toggle(qr)}
>
-<img {src} class="mx-auto" alt="QR Code" />
+ <img {src} class="mx-auto" alt="QR Code" />
</div>
diff --git a/src/lib/upload.js b/src/lib/upload.js
index 899dbb0c..d8b27061 100644
--- a/src/lib/upload.js
+++ b/src/lib/upload.js
@@ -1,5 +1,5 @@
export const upload = async (file, type, progress, token) => {
- console.log("TYPE", type)
+ console.log('TYPE', type);
let url = `/api/upload/${type}`;
let formData = new FormData();
formData.append('file', file);
diff --git a/src/lib/utils.js b/src/lib/utils.js
index e4b1194f..2b5dda90 100644
--- a/src/lib/utils.js
+++ b/src/lib/utils.js
@@ -137,7 +137,7 @@ export const login = async (user, cookies) => {
let expires = new Date();
expires.setSeconds(expires.getSeconds() + maxAge);
- let opts = { path: '/', expires }
+ let opts = { path: '/', expires };
cookies.set('username', user.username, opts);
cookies.set('token', token, opts);
};
diff --git a/src/routes/(app)/+layout.server.js b/src/routes/(app)/+layout.server.js
index 4c09937c..11337c2a 100644
--- a/src/routes/(app)/+layout.server.js
+++ b/src/routes/(app)/+layout.server.js
@@ -15,9 +15,9 @@ export async function load({ cookies, request, url, params }) {
} catch (e) {}
}
- if (user?.needsMigration) {
- throw redirect(307, `/migrate`);
- }
+ if (user?.needsMigration) {
+ throw redirect(307, `/migrate`);
+ }
if (user && ['/', '/login', '/register'].includes(pathname) && request.method === 'GET') {
throw redirect(307, `/${user.username}/dashboard`);
diff --git a/src/routes/(app)/[username]/+layout.server.js b/src/routes/(app)/[username]/+layout.server.js
index 8279698a..27502386 100644
--- a/src/routes/(app)/[username]/+layout.server.js
+++ b/src/routes/(app)/[username]/+layout.server.js
@@ -5,8 +5,8 @@ export let load = async ({ depends, params: { username } }) => {
depends('app:user');
try {
- let subject = await get(`/users/${username}`)
- return { subject };
+ let subject = await get(`/users/${username}`);
+ return { subject };
} catch (e) {
console.log(e);
throw error(500, 'Unable to retrieve user account data');
diff --git a/src/routes/(app)/[username]/payments/[...page]/+page.server.js b/src/routes/(app)/[username]/payments/[...page]/+page.server.js
index 6ced265d..adc6dac8 100644
--- a/src/routes/(app)/[username]/payments/[...page]/+page.server.js
+++ b/src/routes/(app)/[username]/payments/[...page]/+page.server.js
@@ -14,7 +14,7 @@ export async function load({ cookies, params, request }) {
let offset = (page - 1) * limit;
if (!start) start = Date.now() / 1000 - 24 * 60 * 60;
- let url = `/payments?v2=true&start=${start * 1000}&limit=${limit}&offset=${offset}`;
+ let url = `/payments?start=${start * 1000}&limit=${limit}&offset=${offset}`;
if (end) url += `&end=${end * 1000}`;
let { total, payments } = await get(url, auth(cookies));
diff --git a/src/routes/(app)/[username]/payments/[...page]/+page.svelte b/src/routes/(app)/[username]/payments/[...page]/+page.svelte
index 551238cb..c9731299 100644
--- a/src/routes/(app)/[username]/payments/[...page]/+page.svelte
+++ b/src/routes/(app)/[username]/payments/[...page]/+page.svelte
@@ -4,7 +4,7 @@
import { format, parseISO } from 'date-fns';
import { newPayment, payments } from '$lib/store';
import { t } from '$lib/translations';
- import { f, s, sat, sats } from '$lib/utils';
+ import { get, f, s, sat, sats } from '$lib/utils';
import { page } from '$app/stores';
import { differenceInDays, getUnixTime, sub } from 'date-fns';
import { goto, invalidate } from '$app/navigation';
@@ -49,14 +49,41 @@
? $page.url.pathname.substring(0, $page.url.pathname.lastIndexOf('/'))
: $page.url.pathname;
- let csv = () => {
- const keys = ['hash', 'updatedAt', 'rate', 'currency', 'amount', 'fee', 'tip'];
- const csv =
+ let csv = async () => {
+ let url = `/${user.username}/payments`;
+ if (start) url += `/${start}`;
+ if (end) url += `/${end}`;
+
+ let { payments } = await get(url);
+
+ payments = payments.map((p) => ({
+ ...p,
+ created: new Date(p.created),
+ amount_fiat: f((p.amount * p.rate) / sats, p.currency),
+ fee_fiat: p.fee ? f((p.fee * p.rate) / sats, p.currency) : null,
+ tip_fiat: p.tip ? f((p.tip * p.rate) / sats, p.currency) : null
+ }));
+
+ let keys = [
+ 'type',
+ 'id',
+ 'created',
+ 'rate',
+ 'currency',
+ 'amount',
+ 'fee',
+ 'tip',
+ 'amount_fiat',
+ 'fee_fiat',
+ 'tip_fiat'
+ ];
+
+ let csv =
keys.map((k) => `"${k}"`).join(',') +
'\n' +
- $payments.map((r) => keys.map((k) => `"${r[k]}"`).join(',')).join('\n');
+ payments.map((r) => keys.map((k) => `"${r[k] || ''}"`).join(',')).join('\n');
- const filename = 'payments.csv';
+ let filename = 'payments.csv';
let blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });
if (navigator.msSaveBlob) {
navigator.msSaveBlob(blob, filename);
@@ -141,7 +168,11 @@
<a href={`/pot/${p.pot}`}>
<div class="text-secondary flex">
<div class="my-auto mr-1">
- <img src="/icons/logo-symbol.svg" class="w-12 border-4 border-transparent" alt="Pot" />
+ <img
+ src="/icons/logo-symbol.svg"
+ class="w-12 border-4 border-transparent"
+ alt="Pot"
+ />
</div>
<div class="my-auto">Pot</div>
@@ -160,9 +191,13 @@
<div class="text-secondary flex">
{#if p.type === types.lightning}
<div class="text-3xl">⚡️</div>
- {:else}
+ {:else if p.type === types.bitcoin}
<div class="my-auto mr-1">
- <img src="/images/bitcoin.svg" class="w-12 border-4 border-transparent" alt="Bitcoin" />
+ <img
+ src="/images/bitcoin.svg"
+ class="w-12 border-4 border-transparent"
+ alt="Bitcoin"
+ />
</div>
{/if}
diff --git a/src/routes/(app)/[username]/payments/[...page]/+server.js b/src/routes/(app)/[username]/payments/[...page]/+server.js
new file mode 100644
index 00000000..c7c5222d
--- /dev/null
+++ b/src/routes/(app)/[username]/payments/[...page]/+server.js
@@ -0,0 +1,18 @@
+import { get, auth } from '$lib/utils';
+import { json } from '@sveltejs/kit';
+
+export async function GET({ cookies, params }) {
+ let parts = params.page.split('/');
+
+ let start, end;
+ if (parts.length === 1) [start] = parts;
+ if (parts.length === 2) [start, end] = parts;
+
+ if (!start) start = Date.now() / 1000 - 24 * 60 * 60;
+
+ let url = `/payments?start=${start * 1000}`;
+ if (end) url += `&end=${end * 1000}`;
+
+ let { payments } = await get(url, auth(cookies));
+ return json({ payments });
+}
diff --git a/src/routes/(app)/[username]/receive/[...param]/+page.svelte b/src/routes/(app)/[username]/receive/[...param]/+page.svelte
index 1fbd0584..7ca2770e 100644
--- a/src/routes/(app)/[username]/receive/[...param]/+page.svelte
+++ b/src/routes/(app)/[username]/receive/[...param]/+page.svelte
@@ -18,7 +18,7 @@
let { currency, username } = data.subject;
let { user } = data;
- let submit;
+ let submit;
</script>
<form method="POST" class="flex justify-center items-center mt-24 mb-3 px-3" use:enhance>
@@ -34,9 +34,9 @@
<input type="hidden" name="prompt" value={false} />
<div class="space-y-3 w-[300px] mx-auto">
- <Numpad bind:amount bind:currency {submit} />
+ <Numpad bind:amount bind:currency {submit} />
<button
- bind:this={submit}
+ bind:this={submit}
type="submit"
class="bg-black text-white rounded-xl w-full h-[48px] flex justify-center items-center font-semibold
opacity-100 hover:opacity-80"
diff --git a/src/routes/(app)/[username]/settings/[...tab]/+page.svelte b/src/routes/(app)/[username]/settings/[...tab]/+page.svelte
index e1555248..1e8b31ce 100644
--- a/src/routes/(app)/[username]/settings/[...tab]/+page.svelte
+++ b/src/routes/(app)/[username]/settings/[...tab]/+page.svelte
@@ -60,12 +60,12 @@
if ($avatar) {
await upload($avatar.file, $avatar.type, $avatar.progress, token);
- await fetch(`/api/public/${id}-profile.webp`, {cache: 'reload', mode: 'no-cors'})
+ await fetch(`/api/public/${id}-profile.webp`, { cache: 'reload', mode: 'no-cors' });
}
if ($banner) {
await upload($banner.file, $banner.type, $banner.progress, token);
- await fetch(`/api/public/${id}-banner.webp`, {cache: 'reload', mode: 'no-cors'})
+ await fetch(`/api/public/${id}-banner.webp`, { cache: 'reload', mode: 'no-cors' });
}
let event = {
diff --git a/src/routes/(app)/[username]/settings/[...tab]/_account.svelte b/src/routes/(app)/[username]/settings/[...tab]/_account.svelte
index c38334ec..0ab11b32 100644
--- a/src/routes/(app)/[username]/settings/[...tab]/_account.svelte
+++ b/src/routes/(app)/[username]/settings/[...tab]/_account.svelte
@@ -41,7 +41,7 @@
if (file.size > 10000000) return (tooLarge[type] = true);
- if(type === 'profile') {
+ if (type === 'profile') {
$avatar = { id, file, type, progress };
} else if (type === 'banner') {
$banner = { id, file, type, progress };
diff --git a/src/routes/(app)/invoice/[hash]/+layout.server.js b/src/routes/(app)/invoice/[hash]/+layout.server.js
index 61a479ab..d38f945f 100644
--- a/src/routes/(app)/invoice/[hash]/+layout.server.js
+++ b/src/routes/(app)/invoice/[hash]/+layout.server.js
@@ -6,7 +6,7 @@ export async function load({ depends, params, url }) {
depends('app:invoice');
let { hash } = params;
- let invoice = await get(`/invoice?hash=${hash}`);
+ let invoice = await get(`/invoice/${hash}`);
let { amount, received } = invoice;
amount = parseInt(amount);
diff --git a/src/routes/(app)/invoice/[hash]/tip/+page.svelte b/src/routes/(app)/invoice/[hash]/tip/+page.svelte
index eaa67170..ea0ab903 100644
--- a/src/routes/(app)/invoice/[hash]/tip/+page.svelte
+++ b/src/routes/(app)/invoice/[hash]/tip/+page.svelte
@@ -190,7 +190,7 @@
on:input={(e) => handleCustomTipAmount(e)}
class="pl-10"
placeholder="Custom amount"
- use:focus
+ use:focus
/>
<button
type="submit"
diff --git a/src/routes/(app)/invoice/sent/+page.svelte b/src/routes/(app)/invoice/sent/+page.svelte
index 59233617..ae71eb2e 100644
--- a/src/routes/(app)/invoice/sent/+page.svelte
+++ b/src/routes/(app)/invoice/sent/+page.svelte
@@ -1,6 +1,6 @@
<script>
import { Avatar, Icon } from '$comp';
- import { request } from "$lib/store";
+ import { request } from '$lib/store';
</script>
Invoice sent to
diff --git a/src/routes/(app)/ln/[lnurl]/+page.svelte b/src/routes/(app)/ln/[lnurl]/+page.svelte
index ce73b387..7656c9fb 100644
--- a/src/routes/(app)/ln/[lnurl]/+page.svelte
+++ b/src/routes/(app)/ln/[lnurl]/+page.svelte
@@ -1,7 +1,7 @@
<script>
import { Lnurlp, Lnurlw } from '$comp';
- export let data;
- let { tag } = data;
+ export let data;
+ let { tag } = data;
</script>
{#if tag === 'payRequest'}
diff --git a/src/routes/(app)/payment/[id]/+page.svelte b/src/routes/(app)/payment/[id]/+page.svelte
index 9eefda2b..a961d14d 100644
--- a/src/routes/(app)/payment/[id]/+page.svelte
+++ b/src/routes/(app)/payment/[id]/+page.svelte
@@ -8,7 +8,7 @@
export let data;
let { user, tx } = data;
let { username } = user;
- let { id, amount, hash, created, rate, type, ref, fee, currency } = tx;
+ let { id, amount, created, rate, type, ref, fee, currency } = tx;
fee = fee || 0;
let fiat = (Math.abs(amount) * rate) / sats;
@@ -51,7 +51,9 @@
<div class="font-bold">{$t('payments.id')}</div>
<div class="flex">
<div>
- <a href={`${expl}/tx/${id}`} target="_blank" rel="noreferrer" class="text-blue-600">{id}</a>
+ <a href={`${expl}/tx/${id}`} target="_blank" rel="noreferrer" class="text-blue-600"
+ >{id}</a
+ >
</div>
<button class="flex font-bold hover:opacity-80 mb-auto" on:click={() => copy(id)}
><Icon icon="copy" style="mr-1" />
diff --git a/src/routes/(app)/pot/[name]/+page.svelte b/src/routes/(app)/pot/[name]/+page.svelte
index 53ee9da2..2d93abfc 100644
--- a/src/routes/(app)/pot/[name]/+page.svelte
+++ b/src/routes/(app)/pot/[name]/+page.svelte
@@ -36,7 +36,7 @@
<h1 class="text-2xl md:text-3xl font-semibold">Public Pot</h1>
</div>
<p class="text-secondary">Anyone who knows the URL to this pot can add or take out funds</p>
- <img {src} class="mx-auto" alt={name} />
+ <img {src} class="mx-auto" alt={name} />
<div class="flex justify-center gap-4">
<div class="my-auto">
<h2 class="text-2xl md:text-3xl font-semibold">
diff --git a/src/routes/(app)/send/[...text]/+page.server.js b/src/routes/(app)/send/[...text]/+page.server.js
index 8e5e02d7..3d25ed7e 100644
--- a/src/routes/(app)/send/[...text]/+page.server.js
+++ b/src/routes/(app)/send/[...text]/+page.server.js
@@ -21,6 +21,11 @@ let parse = async (t, host) => {
} catch (e) {}
}
+ if (t.endsWith('@classic')) {
+ ({ uuid: id } = await get(`/invoice/classic/${t.replace('@classic', '')}`));
+ if (id) throw redirect(307, `/send/${id}`);
+ }
+
if (t.includes('/pot')) throw redirect(307, t.substring(t.indexOf('/pot')));
if (t.toLowerCase().startsWith('lnurl')) throw redirect(307, `/ln/${t}`);
diff --git a/src/routes/(app)/send/[uuid=uuid]/+page.server.js b/src/routes/(app)/send/[uuid=uuid]/+page.server.js
index 7fa613bf..a59853d3 100644
--- a/src/routes/(app)/send/[uuid=uuid]/+page.server.js
+++ b/src/routes/(app)/send/[uuid=uuid]/+page.server.js
@@ -4,7 +4,7 @@ import { btc as asset, auth, get, post } from '$lib/utils';
export async function load({ params, parent }) {
let { user } = await parent();
- let { amount, address, tip, text, user: recipient } = await get(`/invoice/${params.id}`);
+ let { amount, address, tip, text, user: recipient } = await get(`/invoice/${params.uuid}`);
if (recipient.username === user.username) throw error(500, { message: 'Cannot send to self' });
if (tip) amount += tip;
return { amount, address, payreq: text, recipient };
diff --git a/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte b/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte
index 0da8ea10..6b216cb3 100644
--- a/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte
+++ b/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte
@@ -40,7 +40,7 @@
<Numpad bind:amount {currency} {submit} />
<form method="POST" use:enhance on:submit={toggle}>
- <input name="ts" value={Date.now()} type="hidden" />
+ <input name="ts" value={Date.now()} type="hidden" />
<input name="address" value={address} type="hidden" />
<input name="amount" value={amount} type="hidden" />
<input name="pin" value={$pin} type="hidden" />