aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib/socket.js6
-rw-r--r--src/lib/store.js28
-rw-r--r--src/routes/(app)/[username]/payments/[...page]/+page.svelte51
-rw-r--r--src/routes/(app)/payment/[id]/+page.server.js (renamed from src/routes/(app)/tx/[id]/+page.server.js)0
-rw-r--r--src/routes/(app)/payment/[id]/+page.svelte (renamed from src/routes/(app)/tx/[id]/+page.svelte)6
-rw-r--r--src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.server.js5
-rw-r--r--src/routes/(app)/send/lightning/[payreq]/+page.server.js3
-rw-r--r--src/routes/(app)/send/lightning/[payreq]/+page.svelte14
8 files changed, 64 insertions, 49 deletions
diff --git a/src/lib/socket.js b/src/lib/socket.js
index 86083974..4044d2a2 100644
--- a/src/lib/socket.js
+++ b/src/lib/socket.js
@@ -6,7 +6,7 @@ import {
newPayment,
last,
rate,
- txns,
+ payments,
user
} from '$lib/store';
import { success, sat } from '$lib/utils';
@@ -60,9 +60,9 @@ export const messages = (data) => ({
let { amount, invoice } = data;
invalidate('app:invoice');
- let payments = get(txns);
+ let payments = get(payments);
let i = payments.findIndex((p) => p.id === data.id);
- if (~i) (payments[i] = data), txns.set(payments);
+ if (~i) (payments[i] = data), payments.set(payments);
else newPayment.set(true);
invalidate((url) => url.pathname === '/payments');
diff --git a/src/lib/store.js b/src/lib/store.js
index e4d017b8..5d83a74c 100644
--- a/src/lib/store.js
+++ b/src/lib/store.js
@@ -32,22 +32,22 @@ const persistLocal = (key, defaultValue) => {
return s;
};
-export const requestRedirect = writable();
-export const loginRedirect = writable();
-export const rate = writable();
-export const user = writable();
-export const selectedRate = writable();
-export const token = persistSession('token');
-export const newPayment = persistLocal('newPayment');
-export const colorTheme = writable('from-primary to-gradient');
export const avatarUpload = writable();
export const bannerUpload = writable();
-export const pin = persistSession('pin', undefined);
-export const last = writable();
-export const request = writable();
-export const invoice = writable();
-export const txns = persistLocal('transactions', []);
+export const colorTheme = writable('from-primary to-gradient');
export const events = writable({});
+export const invoice = writable();
+export const last = writable();
+export const loginRedirect = writable();
+export const messages = persistLocal('messages', {});
+export const newPayment = persistLocal('newPayment');
export const password = persistLocal('password');
export const passwordPrompt = writable();
-export const messages = persistLocal('messages', {});
+export const payments = persistLocal('transactions', []);
+export const pin = persistSession('pin', undefined);
+export const rate = writable();
+export const request = writable();
+export const requestRedirect = writable();
+export const selectedRate = writable();
+export const token = persistSession('token');
+export const user = writable();
diff --git a/src/routes/(app)/[username]/payments/[...page]/+page.svelte b/src/routes/(app)/[username]/payments/[...page]/+page.svelte
index 24f7cf6e..e28ade67 100644
--- a/src/routes/(app)/[username]/payments/[...page]/+page.svelte
+++ b/src/routes/(app)/[username]/payments/[...page]/+page.svelte
@@ -2,7 +2,7 @@
import { Avatar, Icon } from '$comp';
import { onMount } from 'svelte';
import { format, parseISO } from 'date-fns';
- import { newPayment, txns } from '$lib/store';
+ import { newPayment, payments } from '$lib/store';
import { t } from '$lib/translations';
import { f, s, sat, sats } from '$lib/utils';
import { page } from '$app/stores';
@@ -20,10 +20,10 @@
let { start, end, user } = data;
let change = ({ target: { value } }) => goto(value);
- let link = (tx) => {
- if (tx.redeemcode) return `/voucher/${tx.redeemcode}`;
- if (tx.with) return '/' + tx.with.username;
- return `/tx/${tx.hash}`;
+ let link = (p) => {
+ if (p.pot) return `/pot/${p.pot}`;
+ if (p.with) return '/' + p.with.username;
+ return `/p/${p.id}`;
};
let presets = [
@@ -39,9 +39,8 @@
let p,
total,
- payments = [],
pages = [];
- $: data && ({ page: p, pages, start, end, total, payments: $txns } = data);
+ $: data && ({ page: p, pages, start, end, total, payments: $payments } = data);
$: $page && ($newPayment = false);
$: $newPayment && invalidate(`/users/${user.username}`);
@@ -55,7 +54,7 @@
const csv =
keys.map((k) => `"${k}"`).join(',') +
'\n' +
- $txns.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 blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });
@@ -112,34 +111,34 @@
</div>
<div class="text-base">
- {#each $txns as tx}
- <a href={link(tx)}>
+ {#each $payments as p}
+ <a href={`/payment/${p.id}`}>
<div class="grid grid-cols-3 border-b h-24 hover:bg-gray-100 px-4">
<div class="whitespace-nowrap my-auto">
<div class="font-bold">
- {f(tx.amount * (tx.rate / sats), tx.currency)}
+ {f(p.amount * (p.rate / sats), p.currency)}
- {#if tx.tip}
+ {#if p.tip}
<span class="text-sm">
- +{f(tx.tip * (tx.rate / sats), tx.currency)}
+ +{f(p.tip * (p.rate / sats), p.currency)}
</span>
{/if}
</div>
<div class="text-secondary">
- {sat(tx.amount)}
+ {sat(p.amount)}
- {#if tx.tip}
+ {#if p.tip}
<span class="text-sm">
- +{sat(tx.tip)}
+ +{sat(p.tip)}
</span>
{/if}
</div>
</div>
<div class="flex my-auto">
- {#if tx.type === types.pot}
- <a href={`/pot/${tx.pot}`}>
+ {#if p.type === types.pot}
+ <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" />
@@ -148,18 +147,18 @@
<div class="my-auto">Pot</div>
</div>
</a>
- {:else if tx.type === types.internal}
- <a href={`/${tx.with.username}`}>
+ {:else if p.type === types.internal}
+ <a href={`/${p.with.username}`}>
<div class="flex">
<div class="my-auto">
- <Avatar user={tx.with} size={12} />
+ <Avatar user={p.with} size={12} />
</div>
- <div class="my-auto ml-1 text-secondary">{tx.with.username}</div>
+ <div class="my-auto ml-1 text-secondary">{p.with.username}</div>
</div>
</a>
{:else}
<div class="text-secondary flex">
- {#if tx.type === 'lightning'}
+ {#if p.type === types.lightning}
<div class="text-3xl">⚡️</div>
{:else}
<div class="my-auto mr-1">
@@ -168,7 +167,7 @@
{/if}
<div class="my-auto">
- {tx.amount > 0 ? (tx.confirmed ? 'Received' : 'Pending') : 'Sent'}
+ {p.amount > 0 ? (p.confirmed ? 'Received' : 'Pending') : 'Sent'}
</div>
</div>
{/if}
@@ -176,10 +175,10 @@
<div class="text-secondary text-right text-sm my-auto">
<div>
- {format(new Date(tx.created), 'h:mm aaa')}
+ {format(new Date(p.created), 'h:mm aaa')}
</div>
<div>
- {format(new Date(tx.created), 'MMM d')}
+ {format(new Date(p.created), 'MMM d')}
</div>
</div>
</div>
diff --git a/src/routes/(app)/tx/[id]/+page.server.js b/src/routes/(app)/payment/[id]/+page.server.js
index cbd7355e..cbd7355e 100644
--- a/src/routes/(app)/tx/[id]/+page.server.js
+++ b/src/routes/(app)/payment/[id]/+page.server.js
diff --git a/src/routes/(app)/tx/[id]/+page.svelte b/src/routes/(app)/payment/[id]/+page.svelte
index a2bb1459..9c0afaac 100644
--- a/src/routes/(app)/tx/[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 { amount, hash, created, rate, type, preimage, fee, currency } = tx;
+ let { id, amount, hash, created, rate, type, preimage, fee, currency } = tx;
fee = fee || 0;
let fiat = (Math.abs(amount) * rate) / sats;
@@ -51,9 +51,9 @@
<div class="font-bold">{$t('payments.id')}</div>
<div class="flex">
<div>
- <a href={`${expl}/tx/${hash}`} target="_blank" class="text-blue-600">{hash}</a>
+ <a href={`${expl}/tx/${id}`} target="_blank" class="text-blue-600">{id}</a>
</div>
- <button class="flex font-bold hover:opacity-80 mb-auto" on:click={() => copy(hash)}
+ <button class="flex font-bold hover:opacity-80 mb-auto" on:click={() => copy(id)}
><Icon icon="copy" style="mr-1" />
</button>
</div>
diff --git a/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.server.js b/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.server.js
index 642593ab..066043e7 100644
--- a/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.server.js
+++ b/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.server.js
@@ -4,9 +4,10 @@ import { auth, post } from '$lib/utils';
export const actions = {
default: async ({ cookies, request }) => {
try {
+ let feeRate, subtract;
let { address, amount, pin } = Object.fromEntries(await request.formData());
- let { tx } = await post('/bitcoin/fee', { address, amount }, auth(cookies));
- await post('/bitcoin/send', { address, pin, tx }, auth(cookies));
+ let { tx } = await post('/bitcoin/fee', { address, amount, feeRate, subtract }, auth(cookies));
+ await post('/bitcoin/send', { pin, tx }, auth(cookies));
} catch (e) {
return invalid(400, { message: e.message });
}
diff --git a/src/routes/(app)/send/lightning/[payreq]/+page.server.js b/src/routes/(app)/send/lightning/[payreq]/+page.server.js
index 2ae693aa..a72e1c07 100644
--- a/src/routes/(app)/send/lightning/[payreq]/+page.server.js
+++ b/src/routes/(app)/send/lightning/[payreq]/+page.server.js
@@ -9,11 +9,14 @@ export const actions = {
setAmount: async ({ cookies, request }) => {
return Object.fromEntries(await request.formData());
},
+
send: async ({ cookies, request }) => {
try {
let body = Object.fromEntries(await request.formData());
let { amount, confirmed } = body;
+ console.log("AMOUNT", amount);
+
if (!confirmed) {
return invalid(403, { amount, confirm: true });
}
diff --git a/src/routes/(app)/send/lightning/[payreq]/+page.svelte b/src/routes/(app)/send/lightning/[payreq]/+page.svelte
index 6fff5665..76ab432f 100644
--- a/src/routes/(app)/send/lightning/[payreq]/+page.svelte
+++ b/src/routes/(app)/send/lightning/[payreq]/+page.svelte
@@ -15,6 +15,7 @@
let { currency } = data.user;
let amount = form?.amount || data.amount;
let a;
+ let maxfee = 100;
let loading;
let submit = () => (loading = true);
@@ -46,12 +47,23 @@
<p class="text-6xl break-words">{alias}</p>
</div>
- <form method="POST" use:enhance on:submit={submit} action="?/send">
+ <form method="POST" use:enhance on:submit={submit} action="?/send" class="space-y-5">
<input name="payreq" value={payreq} type="hidden" />
<input name="amount" value={amount} type="hidden" />
<input name="confirmed" value={form?.confirm} type="hidden" />
<input name="pin" value={$pin} type="hidden" />
+ <div class="relative w-96 mx-auto">
+ <label>Max fee</label>
+ <input name="maxfee" value={maxfee} />
+
+ <div
+ class="absolute right-[2px] top-[25px] text-gray-600 rounded-r-2xl p-4 h-[54px] my-auto border-l "
+ >
+ sats
+ </div>
+ </div>
+
<div class="flex w-full">
<button
type="submit"