aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2024-12-05 19:20:36 -0800
committerAdam Soltys <[email protected]>2024-12-05 19:20:36 -0800
commita9b44cbae79e9c01cff07964a45e1c7efa7fb241 (patch)
tree5caa996fc2eca705fb793e79d63bfbf5f9f93e48 /src
parent6422ef30f14e1baf5d1995de69c777efcad77e32 (diff)
downloadcoinos-ui-a9b44cbae79e9c01cff07964a45e1c7efa7fb241.tar.gz
coinos-ui-a9b44cbae79e9c01cff07964a45e1c7efa7fb241.zip
cached rates
Diffstat (limited to 'src')
-rw-r--r--src/components/Amount.svelte4
-rw-r--r--src/components/InvoiceData.svelte2
-rw-r--r--src/components/Lnurlp.svelte4
-rw-r--r--src/components/Lnurlw.svelte3
-rw-r--r--src/lib/cache.ts17
-rw-r--r--src/lib/invoice.ts5
-rw-r--r--src/lib/rates.ts13
-rw-r--r--src/routes/(app)/+layout.server.ts4
-rw-r--r--src/routes/(app)/[username]/(profile)/+layout.server.ts4
-rw-r--r--src/routes/(app)/[username]/(profile)/+layout.svelte6
-rw-r--r--src/routes/(app)/[username]/(profile)/+page.server.ts8
-rw-r--r--src/routes/(app)/[username]/(profile)/+page.svelte4
-rw-r--r--src/routes/(app)/[username]/receive/+page.server.js10
-rw-r--r--src/routes/(app)/[username]/receive/+page.svelte3
-rw-r--r--src/routes/(app)/ecash/[id]/[...version]/+page.server.ts9
-rw-r--r--src/routes/(app)/fund/[id]/+page.server.ts7
-rw-r--r--src/routes/(app)/fund/[id]/+page.svelte3
-rw-r--r--src/routes/(app)/invoice/+page.server.ts4
-rw-r--r--src/routes/(app)/invoice/[id]/memo/+page.svelte38
-rw-r--r--src/routes/(app)/invoice/[id]/tip/+page.server.ts10
-rw-r--r--src/routes/(app)/invoice/[id]/tip/+page.svelte10
-rw-r--r--src/routes/(app)/ln/[lnurl]/+page.server.ts7
-rw-r--r--src/routes/(app)/messages/+page.svelte4
-rw-r--r--src/routes/(app)/pay/[username]/[...amount]/+page.server.ts4
-rw-r--r--src/routes/(app)/pay/[username]/[...amount]/+page.svelte2
-rw-r--r--src/routes/(app)/payments/[...page]/+page.svelte1
-rw-r--r--src/routes/(app)/send/bitcoin/[address]/+page.server.ts7
-rw-r--r--src/routes/(app)/send/bitcoin/[address]/+page.svelte4
-rw-r--r--src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.server.ts10
-rw-r--r--src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.svelte19
-rw-r--r--src/routes/(app)/send/ecash/+page.server.ts7
-rw-r--r--src/routes/(app)/send/ecash/+page.svelte20
-rw-r--r--src/routes/(app)/send/ecash/[request]/+page.svelte4
-rw-r--r--src/routes/(app)/send/invoice/[id]/+page.server.ts14
-rw-r--r--src/routes/(app)/send/invoice/[id]/+page.svelte6
-rw-r--r--src/routes/(app)/send/lightning/[payreq]/+page.server.ts6
-rw-r--r--src/routes/(app)/send/lightning/[payreq]/+page.svelte3
-rw-r--r--src/routes/(app)/settings/+layout.svelte2
-rw-r--r--src/routes/(app)/settings/account/+page.svelte2
-rw-r--r--src/routes/(app)/settings/nostr/+page.svelte2
-rw-r--r--src/routes/(app)/settings/preferences/+page.server.ts6
-rw-r--r--src/routes/(app)/settings/security/+page.svelte2
42 files changed, 170 insertions, 130 deletions
diff --git a/src/components/Amount.svelte b/src/components/Amount.svelte
index 0fd29755..6dad13e0 100644
--- a/src/components/Amount.svelte
+++ b/src/components/Amount.svelte
@@ -25,14 +25,14 @@
{/if}
</h2>
<h3
- class="flex text-secondary md:text-lg cursor-copy"
+ class="flex text-secondary md:text-lg cursor-copy items-center gap-1"
class:justify-center={align !== "left"}
onclick={() => copy(toFiat(amount, rate).toFixed(2))}
>
{f(toFiat(amount, rate), currency, locale)}
{#if tip}
<span class="text-base">
- + {f(toFiat(tip, rate), currency, locale)}
+ +{f(toFiat(tip, rate), currency, locale)}
</span>
{/if}
</h3>
diff --git a/src/components/InvoiceData.svelte b/src/components/InvoiceData.svelte
index 566c5402..ff72ef9a 100644
--- a/src/components/InvoiceData.svelte
+++ b/src/components/InvoiceData.svelte
@@ -49,4 +49,4 @@
</div>
{/each}
-<Amount {amount} {currency} {rate} {locale} />
+<Amount {amount} {currency} {rate} {locale} {tip} />
diff --git a/src/components/Lnurlp.svelte b/src/components/Lnurlp.svelte
index ab869e22..8f14ddff 100644
--- a/src/components/Lnurlp.svelte
+++ b/src/components/Lnurlp.svelte
@@ -9,11 +9,9 @@
let { data, form, send = $bindable(), comment = $bindable() } = $props();
let { currency } = data.user;
- let { minSendable, maxSendable, commentAllowed, callback, metadata, rates } =
+ let { minSendable, maxSendable, commentAllowed, callback, metadata, rate } =
data;
- let rate = $derived(rates[currency]);
-
let amount = $state(Math.round(minSendable / 1000)),
loading = $state();
let submit = () => (loading = true);
diff --git a/src/components/Lnurlw.svelte b/src/components/Lnurlw.svelte
index cf2185ec..e3345d31 100644
--- a/src/components/Lnurlw.svelte
+++ b/src/components/Lnurlw.svelte
@@ -15,9 +15,8 @@
maxWithdrawable,
k1,
callback,
- rates,
+ rate,
} = data;
- let rate = $derived(rates[currency]);
let amount = $state(Math.round(minWithdrawable / 1000)),
loading = $state();
diff --git a/src/lib/cache.ts b/src/lib/cache.ts
new file mode 100644
index 00000000..079c561b
--- /dev/null
+++ b/src/lib/cache.ts
@@ -0,0 +1,17 @@
+
+// src/lib/server/cache.ts
+let cachedData: any = null;
+
+async function fetchData() {
+ // Fetch data from your API
+ const response = await fetch('https://api.example.com/data');
+ cachedData = await response.json();
+}
+
+// Initialize cache and set up periodic updates
+fetchData(); // Initial fetch
+setInterval(fetchData, 60000); // Update every 60 seconds
+
+export function getCachedData() {
+ return cachedData;
+}
diff --git a/src/lib/invoice.ts b/src/lib/invoice.ts
index a48e02a4..d7576e82 100644
--- a/src/lib/invoice.ts
+++ b/src/lib/invoice.ts
@@ -1,12 +1,13 @@
-import { auth, get, post } from "$lib/utils";
+import getRates from "$lib/rates";
+import { auth, post } from "$lib/utils";
import { redirect } from "@sveltejs/kit";
export default async ({ cookies, request }) => {
const form = await request.formData();
const aid = form.get("aid") || cookies.get("aid");
- const rates = await get("/rates");
const amount = parseInt(form.get("amount"));
+ const rates = await getRates();
let invoice = {
aid,
diff --git a/src/lib/rates.ts b/src/lib/rates.ts
new file mode 100644
index 00000000..96aaeac2
--- /dev/null
+++ b/src/lib/rates.ts
@@ -0,0 +1,13 @@
+import { get } from "$lib/utils";
+
+let last;
+let rates;
+
+export default async function getRates() {
+ if (!rates || Date.now() - last > 60000) {
+ rates = await get("/rates");
+ last = Date.now();
+ }
+
+ return rates;
+}
diff --git a/src/routes/(app)/+layout.server.ts b/src/routes/(app)/+layout.server.ts
index b024edc1..9ecf6f0d 100644
--- a/src/routes/(app)/+layout.server.ts
+++ b/src/routes/(app)/+layout.server.ts
@@ -6,7 +6,6 @@ export async function load({ cookies, request, url, params }) {
const { id, username } = params;
const token = cookies.get("token");
let rate;
- let rates = { USD: 1 };
let user;
if (token) {
@@ -54,11 +53,10 @@ export async function load({ cookies, request, url, params }) {
try {
rate = await get("/rate");
- rates = await get("/rates");
} catch (e) {
console.log(e);
}
const theme = cookies.get("theme") || "light";
- return { user, token, rate, rates, subject, theme };
+ return { user, token, rate, subject, theme };
}
diff --git a/src/routes/(app)/[username]/(profile)/+layout.server.ts b/src/routes/(app)/[username]/(profile)/+layout.server.ts
index 0ed3edb8..70e7ebdb 100644
--- a/src/routes/(app)/[username]/(profile)/+layout.server.ts
+++ b/src/routes/(app)/[username]/(profile)/+layout.server.ts
@@ -1,8 +1,10 @@
+import getRates from "$lib/rates";
import { get } from "$lib/utils";
export async function load({ depends, parent }) {
depends("app:user");
+ const rates = await getRates();
const { subject, user } = await parent();
const { follows, followers } = await get(`/${subject.pubkey}/count`);
@@ -12,5 +14,5 @@ export async function load({ depends, parent }) {
() => [],
);
- return { follows, followers, followList };
+ return { follows, followers, followList, rate: rates[subject.currency] };
}
diff --git a/src/routes/(app)/[username]/(profile)/+layout.svelte b/src/routes/(app)/[username]/(profile)/+layout.svelte
index 98d4238b..3887d026 100644
--- a/src/routes/(app)/[username]/(profile)/+layout.svelte
+++ b/src/routes/(app)/[username]/(profile)/+layout.svelte
@@ -25,10 +25,10 @@
let {
events,
+ rate,
user,
subject,
src,
- rates,
text,
follows,
followers,
@@ -292,13 +292,13 @@
<div class="my-auto mr-1">1</div>
<img src="/images/bitcoin.svg" class="w-5 my-auto" alt="Bitcoin" />
</div>
- <div>&#61; {f(rates[currency], currency, locale, 0, 0)}</div>
+ <div>&#61; {f(rate, currency, locale, 0, 0)}</div>
</div>
<div class="text-secondary flex ml-auto">
<div class="flex items-center">
<iconify-icon icon="ph:lightning-fill" class="text-yellow-300"
></iconify-icon>
- {s((1 * sats) / rates[currency])} =
+ {s((1 * sats) / rate)} =
{f(1, currency, locale, 0, 0)}
</div>
</div>
diff --git a/src/routes/(app)/[username]/(profile)/+page.server.ts b/src/routes/(app)/[username]/(profile)/+page.server.ts
index a7fb4f19..5f0e7579 100644
--- a/src/routes/(app)/[username]/(profile)/+page.server.ts
+++ b/src/routes/(app)/[username]/(profile)/+page.server.ts
@@ -1,11 +1,15 @@
+import getRates from "$lib/rates";
import { auth, get } from "$lib/utils";
-export async function load({ cookies, depends }) {
+export async function load({ cookies, depends, parent }) {
depends("app:payments");
depends("app:items");
+ const { subject } = await parent();
+
let accounts = [];
if (cookies.get("token")) accounts = await get("/accounts", auth(cookies));
- return { accounts };
+ const rates = await getRates();
+ return { accounts, rate: rates[subject.currency] };
}
diff --git a/src/routes/(app)/[username]/(profile)/+page.svelte b/src/routes/(app)/[username]/(profile)/+page.svelte
index eb21a45c..25728372 100644
--- a/src/routes/(app)/[username]/(profile)/+page.svelte
+++ b/src/routes/(app)/[username]/(profile)/+page.svelte
@@ -14,9 +14,7 @@
preloadData("/send");
});
- let { accounts, subject, user, rates } = $state(data);
- let { currency } = $derived(subject);
- let rate = $derived(rates[currency]);
+ let { accounts, subject, rate, user } = $state(data);
let install = async () => {
if (!$installPrompt) return;
diff --git a/src/routes/(app)/[username]/receive/+page.server.js b/src/routes/(app)/[username]/receive/+page.server.js
index b73b1d6a..0203285e 100644
--- a/src/routes/(app)/[username]/receive/+page.server.js
+++ b/src/routes/(app)/[username]/receive/+page.server.js
@@ -1,7 +1,13 @@
+import getRates from "$lib/rates";
import { redirect } from "@sveltejs/kit";
-export const load = async ({ cookies, params: { username }, url }) => {
+export const load = async ({ cookies, params: { username }, parent, url }) => {
const token = cookies.get("token");
+ const rates = await getRates();
if (!token) redirect(307, `/pay/${username}`);
- return { text: `${username}@${url.host}` };
+ const { subject } = await parent();
+ return {
+ rate: rates[subject.currency],
+ text: `${username}@${url.host}`,
+ };
};
diff --git a/src/routes/(app)/[username]/receive/+page.svelte b/src/routes/(app)/[username]/receive/+page.svelte
index bcb9e4ff..28d33754 100644
--- a/src/routes/(app)/[username]/receive/+page.svelte
+++ b/src/routes/(app)/[username]/receive/+page.svelte
@@ -27,11 +27,10 @@
let showOptions;
- let { id, rates, subject, user, text } = $state(data);
+ let { id, rate, subject, user, text } = $state(data);
let locale = loc(user);
let { currency, username } = subject;
- let rate = rates[currency];
let type = types.lightning;
let hash = "";
let qr;
diff --git a/src/routes/(app)/ecash/[id]/[...version]/+page.server.ts b/src/routes/(app)/ecash/[id]/[...version]/+page.server.ts
index 68ccfda6..fa7bf474 100644
--- a/src/routes/(app)/ecash/[id]/[...version]/+page.server.ts
+++ b/src/routes/(app)/ecash/[id]/[...version]/+page.server.ts
@@ -1,5 +1,12 @@
-import { fail, redirect } from "@sveltejs/kit";
+import getRates from "$lib/rates";
import { auth, fd, post } from "$lib/utils";
+import { fail, redirect } from "@sveltejs/kit";
+
+export async function load({ parent }) {
+ const { user } = await parent();
+ const rates = await getRates();
+ return { rate: rates[user.currency] };
+}
export const actions = {
default: async ({ cookies, request, url }) => {
diff --git a/src/routes/(app)/fund/[id]/+page.server.ts b/src/routes/(app)/fund/[id]/+page.server.ts
index bc07d721..668ea3af 100644
--- a/src/routes/(app)/fund/[id]/+page.server.ts
+++ b/src/routes/(app)/fund/[id]/+page.server.ts
@@ -1,7 +1,12 @@
+import getRates from "$lib/rates";
import { auth, get, post } from "$lib/utils";
import { redirect } from "@sveltejs/kit";
-export const load = async ({ params: { id } }) => get(`/fund/${id}`);
+export const load = async ({ params: { id } }) => {
+ const data = await get(`/fund/${id}`);
+ data.rate = await getRates();
+ return data;
+};
export const actions = {
default: async ({ cookies, locals, params }) => {
diff --git a/src/routes/(app)/fund/[id]/+page.svelte b/src/routes/(app)/fund/[id]/+page.svelte
index 0931075a..23dce871 100644
--- a/src/routes/(app)/fund/[id]/+page.svelte
+++ b/src/routes/(app)/fund/[id]/+page.svelte
@@ -11,13 +11,12 @@
let { data } = $props();
- let { amount, src, payments, rates, user } = data;
+ let { amount, src, payments, rate, user } = data;
let { id } = $page.params;
toast.pop(0);
let currency = user ? user.currency : "CAD";
- let rate = rates[currency];
let amountFiat = $derived(parseFloat(((amount * rate) / sats).toFixed(2)));
$loginRedirect = $page.url.pathname;
diff --git a/src/routes/(app)/invoice/+page.server.ts b/src/routes/(app)/invoice/+page.server.ts
index 8d2f3b7f..db68740d 100644
--- a/src/routes/(app)/invoice/+page.server.ts
+++ b/src/routes/(app)/invoice/+page.server.ts
@@ -1,10 +1,12 @@
+import getRates from "$lib/rates";
import type { Invoice } from "$lib/types";
import { auth, post } from "$lib/utils";
import { error, redirect } from "@sveltejs/kit";
export const load = async ({ cookies, parent }) => {
const aid = cookies.get("aid");
- let { subject, user, rates } = await parent();
+ let { subject, user } = await parent();
+ const rates = await getRates();
if (aid === user.id) redirect(307, `/${user.username}/receive`);
let invoice: Invoice = {
diff --git a/src/routes/(app)/invoice/[id]/memo/+page.svelte b/src/routes/(app)/invoice/[id]/memo/+page.svelte
index e5bc8a18..67283148 100644
--- a/src/routes/(app)/invoice/[id]/memo/+page.svelte
+++ b/src/routes/(app)/invoice/[id]/memo/+page.svelte
@@ -1,19 +1,10 @@
<script>
- import { run } from 'svelte/legacy';
+ import { run } from "svelte/legacy";
import { onMount } from "svelte";
import { browser } from "$app/environment";
import { invoice as inv, request } from "$lib/store";
- import {
- copy,
- select,
- f,
- sat,
- get,
- s,
- sats,
- } from "$lib/utils";
- import Icon from "$comp/Icon.svelte";
+ import { copy, select, f, sat, get, s, sats } from "$lib/utils";
import { t } from "$lib/translations";
import { enhance } from "$app/forms";
@@ -21,7 +12,7 @@
let submit = $state();
let { data } = $props();
- let { invoice, id, user, rates } = $state(data);
+ let { invoice, id, user } = $derived(data);
let {
amount,
hash,
@@ -34,30 +25,9 @@
text,
tip,
user: { username, currency },
- } = $state(invoice);
+ } = $derived(invoice);
invoice.memo = user?.username;
-
- let refresh = (data) => {
- $inv = null;
-
- ({ invoice, id } = data);
- ({
- amount,
- hash,
- items,
- memoPrompt,
- type,
- received,
- prompt,
- text,
- tip,
- user: { username },
- } = invoice);
- };
- run(() => {
- refresh(data);
- });
</script>
<form
diff --git a/src/routes/(app)/invoice/[id]/tip/+page.server.ts b/src/routes/(app)/invoice/[id]/tip/+page.server.ts
index a1ba8924..32eea868 100644
--- a/src/routes/(app)/invoice/[id]/tip/+page.server.ts
+++ b/src/routes/(app)/invoice/[id]/tip/+page.server.ts
@@ -1,13 +1,15 @@
-import { get } from "$lib/utils";
import invoice from "$lib/invoice";
+import getRates from "$lib/rates";
import { redirect } from "@sveltejs/kit";
export async function load({ parent }) {
- const rates = await get("/rates");
- const { invoice } = await parent();
+ const rates = await getRates();
+ const { invoice, user } = await parent();
if (!invoice.amount) redirect(307, `/invoice/${invoice.id}`);
- return { rates };
+ const rate = rates[user.currency];
+ const invoiceRate = rates[invoice.currency];
+ return { rate, invoiceRate };
}
export const actions = {
diff --git a/src/routes/(app)/invoice/[id]/tip/+page.svelte b/src/routes/(app)/invoice/[id]/tip/+page.svelte
index 1c651163..7999030e 100644
--- a/src/routes/(app)/invoice/[id]/tip/+page.svelte
+++ b/src/routes/(app)/invoice/[id]/tip/+page.svelte
@@ -63,7 +63,7 @@
let submit = $state();
let { data } = $props();
- let { invoice, id, user, rates } = $state(data);
+ let { invoice, id, user } = $state(data);
let {
aid,
amount,
@@ -83,7 +83,7 @@
let fullscreen;
let currency = user?.currency || invoice.currency;
- let rate = invoice.rate * (rates[currency] / rates[invoice.currency]);
+ let rate = invoice.rate * (data.rate / data.invoiceRate);
$effect(() => {
tip = Math.round((amount / 100) * untrack(() => tipPercent));
@@ -95,11 +95,7 @@
</script>
<div class="container px-4 max-w-lg text-center mx-auto">
- <form
- method="POST"
- use:enhance
- class="space-y-5"
- >
+ <form method="POST" use:enhance class="space-y-5">
<input type="hidden" name="aid" value={aid} />
<input type="hidden" name="amount" value={amount} />
<input type="hidden" name="tip" value={tip} />
diff --git a/src/routes/(app)/ln/[lnurl]/+page.server.ts b/src/routes/(app)/ln/[lnurl]/+page.server.ts
index b405f427..6f121db1 100644
--- a/src/routes/(app)/ln/[lnurl]/+page.server.ts
+++ b/src/routes/(app)/ln/[lnurl]/+page.server.ts
@@ -1,11 +1,14 @@
-import { fd, auth, get, post } from "$lib/utils";
+import getRates from "$lib/rates";
+import { auth, fd, get, post } from "$lib/utils";
import { error, fail, redirect } from "@sveltejs/kit";
export async function load({ params, parent }) {
const { user } = await parent();
if (!user) redirect(307, "/register");
- let data;
+ let data = {
+ rate: await getRates()[user.currency],
+ };
try {
const { lnurl } = params;
diff --git a/src/routes/(app)/messages/+page.svelte b/src/routes/(app)/messages/+page.svelte
index 269a5de3..54af2329 100644
--- a/src/routes/(app)/messages/+page.svelte
+++ b/src/routes/(app)/messages/+page.svelte
@@ -9,10 +9,10 @@
let { data } = $props();
- let { messages, notes, invoices, sent, received, subject, user, rates } =
+ let { messages, notes, invoices, sent, received, subject, user } =
$state(data);
let refresh = (d) =>
- ({ messages, notes, invoices, sent, received, subject, user, rates } = d);
+ ({ messages, notes, invoices, sent, received, subject, user } = d);
let keys = new Set();
let latest = $state([]);
diff --git a/src/routes/(app)/pay/[username]/[...amount]/+page.server.ts b/src/routes/(app)/pay/[username]/[...amount]/+page.server.ts
index 624a90f8..4c112e67 100644
--- a/src/routes/(app)/pay/[username]/[...amount]/+page.server.ts
+++ b/src/routes/(app)/pay/[username]/[...amount]/+page.server.ts
@@ -1,9 +1,11 @@
+import getRates from "$lib/rates";
import { auth, fd, get, post, sats, types } from "$lib/utils";
import { error, fail, redirect } from "@sveltejs/kit";
export async function load({ cookies, params, parent }) {
const { username } = params;
- const { rates, user } = await parent();
+ const { user } = await parent();
+ const rates = await getRates();
if (user?.username === username) redirect(307, `/${username}/receive`);
const subject = await get(`/users/${username}`);
diff --git a/src/routes/(app)/pay/[username]/[...amount]/+page.svelte b/src/routes/(app)/pay/[username]/[...amount]/+page.svelte
index 8d882363..ab96e7c2 100644
--- a/src/routes/(app)/pay/[username]/[...amount]/+page.svelte
+++ b/src/routes/(app)/pay/[username]/[...amount]/+page.svelte
@@ -10,7 +10,7 @@
let { data, form } = $props();
- let { subject, rate, rates, user } = $state(data);
+ let { subject, rate, user } = $state(data);
let currency = subject?.currency || "USD";
let next = $state();
diff --git a/src/routes/(app)/payments/[...page]/+page.svelte b/src/routes/(app)/payments/[...page]/+page.svelte
index 0a33840e..5204b35f 100644
--- a/src/routes/(app)/payments/[...page]/+page.svelte
+++ b/src/routes/(app)/payments/[...page]/+page.svelte
@@ -15,7 +15,6 @@
start,
end,
user,
- rates,
payments,
incoming,
outgoing,
diff --git a/src/routes/(app)/send/bitcoin/[address]/+page.server.ts b/src/routes/(app)/send/bitcoin/[address]/+page.server.ts
index f27d3fab..00429c1e 100644
--- a/src/routes/(app)/send/bitcoin/[address]/+page.server.ts
+++ b/src/routes/(app)/send/bitcoin/[address]/+page.server.ts
@@ -1,7 +1,10 @@
+import getRates from "$lib/rates";
import { auth, get } from "$lib/utils";
-export async function load({ cookies }) {
+export async function load({ cookies, parent }) {
+ const { user } = await parent();
+ const rates = await getRates();
const aid = cookies.get("aid");
const { balance } = await get(`/account/${aid}`, auth(cookies));
- return { balance };
+ return { balance, rate: rates[user.currency] };
}
diff --git a/src/routes/(app)/send/bitcoin/[address]/+page.svelte b/src/routes/(app)/send/bitcoin/[address]/+page.svelte
index c271543c..09caaa85 100644
--- a/src/routes/(app)/send/bitcoin/[address]/+page.svelte
+++ b/src/routes/(app)/send/bitcoin/[address]/+page.svelte
@@ -10,14 +10,14 @@
let { data } = $props();
- let { balance, rates, user } = data;
+ let { balance, user } = data;
let { address } = $page.params;
let { currency, username } = user;
let amount = $state(0);
let submit = $state(), fiat = $state();
- let update = () => ($rate = data.rates[currency]);
+ let update = () => ($rate = data.rate);
let setMax = () => {
fiat = false;
diff --git a/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.server.ts b/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.server.ts
index 9156bf7b..ee38cbd3 100644
--- a/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.server.ts
+++ b/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.server.ts
@@ -1,8 +1,15 @@
+import getRates from "$lib/rates";
import { auth, fd, get, post } from "$lib/utils";
import { fail, redirect } from "@sveltejs/kit";
-export async function load({ params: { address, amount, feeRate }, cookies }) {
+export async function load({
+ params: { address, amount, feeRate },
+ cookies,
+ parent,
+}) {
const aid = cookies.get("aid");
+ const rates = await getRates();
+ const { user } = await parent();
try {
const { fee, fees, inputs, ourfee, hex } = await post(
@@ -20,6 +27,7 @@ export async function load({ params: { address, amount, feeRate }, cookies }) {
fee,
fees,
feeRate,
+ rate: rates[user.currency],
ourfee,
hex,
inputs,
diff --git a/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.svelte b/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.svelte
index 298280df..7d9b8f64 100644
--- a/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.svelte
+++ b/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.svelte
@@ -71,18 +71,8 @@
let toggle = () => (submitting = !submitting);
- let {
- account,
- amount,
- address,
- message,
- fee,
- fees,
- ourfee,
- rates,
- hex,
- inputs,
- } = $derived(data);
+ let { account, amount, address, message, fee, fees, ourfee, hex, inputs } =
+ $derived(data);
let { feeRate } = $state(data);
@@ -91,7 +81,10 @@
feeRate = feeRate
? closest(Object.values(fees), feeRate)
: fees.halfHourFee;
- if (!$rate) $rate = rates[currency];
+ });
+
+ $effect(() => {
+ if (!$rate) $rate = data.rate;
});
let { balance, currency } = data.user;
diff --git a/src/routes/(app)/send/ecash/+page.server.ts b/src/routes/(app)/send/ecash/+page.server.ts
index d65c0046..b290fb95 100644
--- a/src/routes/(app)/send/ecash/+page.server.ts
+++ b/src/routes/(app)/send/ecash/+page.server.ts
@@ -1,6 +1,13 @@
+import getRates from "$lib/rates";
import { auth, fd, post } from "$lib/utils";
import { error, redirect } from "@sveltejs/kit";
+export async function load({ parent }) {
+ const rates = await getRates();
+ const { user } = await parent();
+ return { rate: rates[user.currency] };
+}
+
export const actions = {
default: async ({ cookies, request }) => {
let id;
diff --git a/src/routes/(app)/send/ecash/+page.svelte b/src/routes/(app)/send/ecash/+page.svelte
index 5de8bee1..96ab5b02 100644
--- a/src/routes/(app)/send/ecash/+page.svelte
+++ b/src/routes/(app)/send/ecash/+page.svelte
@@ -1,6 +1,4 @@
<script>
- import { run, preventDefault } from 'svelte/legacy';
-
import { enhance, applyAction } from "$app/forms";
import { t } from "$lib/translations";
import Icon from "$comp/Icon.svelte";
@@ -13,24 +11,22 @@
let { data } = $props();
- let { rates, user } = data;
- let { balance, currency, username } = user;
+ let { user } = $derived(data);
+ let { balance, currency, username } = $derived(user);
let amount = $state(0);
- let submit = $state(), fiat = $state();
-
- let update = () => ($rate = data.rates[currency]);
+ let submit = $state(),
+ fiat = $state();
- let setMax = () => {
+ let setMax = (e) => {
+ e.preventDefault();
fiat = false;
amount = balance;
};
let submitting = $state();
let toggle = () => (submitting = !submitting);
- run(() => {
- update(data);
- });
+ $effect(() => ({ rate: $rate } = user));
</script>
<div class="container px-4 max-w-xl mx-auto space-y-5 text-center">
@@ -45,7 +41,7 @@
<button
type="button"
class="btn !w-auto grow"
- onclick={preventDefault(setMax)}
+ onclick={setMax}
disabled={submitting}
onkeydown={setMax}>Max ⚡️{s(balance)}</button
>
diff --git a/src/routes/(app)/send/ecash/[request]/+page.svelte b/src/routes/(app)/send/ecash/[request]/+page.svelte
index 1f950de0..3f75eee4 100644
--- a/src/routes/(app)/send/ecash/[request]/+page.svelte
+++ b/src/routes/(app)/send/ecash/[request]/+page.svelte
@@ -63,7 +63,7 @@
submitting = false;
};
- let { rates, recipient, req, user, type, target } = $derived({
+ let { recipient, req, user, type, target } = $derived({
...data,
...form,
});
@@ -73,7 +73,7 @@
let toggle = () => (show = !show);
let amount = $derived(form?.amount || data.req.amount);
- $effect(() => ($rate ||= rates[currency]));
+ $effect(() => ($rate ||= data.rate);
$effect(() => form && (submitting = false));
</script>
diff --git a/src/routes/(app)/send/invoice/[id]/+page.server.ts b/src/routes/(app)/send/invoice/[id]/+page.server.ts
index 2798a234..4047ed3d 100644
--- a/src/routes/(app)/send/invoice/[id]/+page.server.ts
+++ b/src/routes/(app)/send/invoice/[id]/+page.server.ts
@@ -1,9 +1,10 @@
+import getRates from "$lib/rates";
import { auth, fd, get, post, types } from "$lib/utils";
import { error, redirect } from "@sveltejs/kit";
export async function load({ cookies, params: { id }, parent }) {
const aid = cookies.get("aid");
- const { rates, user } = await parent();
+ const { user } = await parent();
const invoice = await get(`/invoice/${id}`);
@@ -20,7 +21,11 @@ export async function load({ cookies, params: { id }, parent }) {
if (!user) redirect(307, `/invoice/${id}`);
- return { invoice, rates, user };
+ const rates = await getRates();
+ const rate = rates[user.currency];
+ const invoiceRate = rates[invoice.currency];
+
+ return { invoice, user, rate, invoiceRate };
}
export const actions = {
@@ -31,9 +36,10 @@ export const actions = {
body.hash = id;
p = await post("/payments", body, auth(cookies));
- } catch (e: any) {
+ } catch (e) {
+ const { message } = e as Error;
console.log("payment failed", id, e);
- error(500, e.message);
+ error(500, message);
}
redirect(307, `/sent/${p.id}`);
diff --git a/src/routes/(app)/send/invoice/[id]/+page.svelte b/src/routes/(app)/send/invoice/[id]/+page.svelte
index 1267d71b..d3603d64 100644
--- a/src/routes/(app)/send/invoice/[id]/+page.svelte
+++ b/src/routes/(app)/send/invoice/[id]/+page.svelte
@@ -15,14 +15,12 @@
import { btc, sat, post, back, f, toFiat, s, sats, focus } from "$lib/utils";
let { data, form } = $props();
- let { invoice, rates, user } = $state(data);
+ let { invoice, user } = $state(data);
let { address, hash, payreq, user: recipient, tip } = $state(invoice);
let { currency } = $state(user);
let { amount } = $state(form || invoice);
- let rate = $derived(
- invoice.rate * (rates[user.currency] / rates[invoice.currency]),
- );
+ let rate = $derived(invoice.rate * (data.rate / data.invoiceRate));
let a = $state(),
af = $state(),
diff --git a/src/routes/(app)/send/lightning/[payreq]/+page.server.ts b/src/routes/(app)/send/lightning/[payreq]/+page.server.ts
index 1fb032bb..d340dbe3 100644
--- a/src/routes/(app)/send/lightning/[payreq]/+page.server.ts
+++ b/src/routes/(app)/send/lightning/[payreq]/+page.server.ts
@@ -1,9 +1,13 @@
+import getRates from "$lib/rates";
import { auth, fd, post } from "$lib/utils";
import { fail, redirect } from "@sveltejs/kit";
-export async function load({ cookies, params }) {
+export async function load({ cookies, params, parent }) {
+ const { user } = await parent();
if (params.payreq.startsWith("lno")) return params;
+ const rates = await getRates();
const data = await post("/parse", params, auth(cookies));
+ data.rate = rates[user.currency];
data.payreq = params.payreq;
return data;
}
diff --git a/src/routes/(app)/send/lightning/[payreq]/+page.svelte b/src/routes/(app)/send/lightning/[payreq]/+page.svelte
index 589194ea..d1e8776f 100644
--- a/src/routes/(app)/send/lightning/[payreq]/+page.svelte
+++ b/src/routes/(app)/send/lightning/[payreq]/+page.svelte
@@ -15,12 +15,11 @@
alias,
payreq,
ourfee,
- rates,
user: { currency },
} = $derived({ ...data, ...form });
let a = $state();
- $effect(() => ($rate ||= rates[currency]));
+ $effect(() => ($rate ||= data.rate);
$effect(() => form && (loading = false));
let showMax = $state();
diff --git a/src/routes/(app)/settings/+layout.svelte b/src/routes/(app)/settings/+layout.svelte
index b11927c1..c76c6873 100644
--- a/src/routes/(app)/settings/+layout.svelte
+++ b/src/routes/(app)/settings/+layout.svelte
@@ -23,7 +23,7 @@
let formElement = $state();
- let { user, token, rates, cookies, subscriptions } = $state(data);
+ let { user, token, cookies, subscriptions } = $state(data);
let { tab } = $derived(data);
let prev = $derived({ ...user });
diff --git a/src/routes/(app)/settings/account/+page.svelte b/src/routes/(app)/settings/account/+page.svelte
index ebd62e1f..dc54c52e 100644
--- a/src/routes/(app)/settings/account/+page.svelte
+++ b/src/routes/(app)/settings/account/+page.svelte
@@ -5,7 +5,7 @@
import { page } from "$app/stores";
let { data } = $props();
- let { user, rates } = $state(data);
+ let { user } = $state(data);
let { id } = user;
let avatarFile,
diff --git a/src/routes/(app)/settings/nostr/+page.svelte b/src/routes/(app)/settings/nostr/+page.svelte
index e81682dd..eeb07888 100644
--- a/src/routes/(app)/settings/nostr/+page.svelte
+++ b/src/routes/(app)/settings/nostr/+page.svelte
@@ -10,7 +10,7 @@
} from "$env/static/public";
let { data } = $props();
- let { user, rates } = $derived(data);
+ let { user } = $derived(data);
let { id, npub } = $derived(user);
let importing = $state(),
diff --git a/src/routes/(app)/settings/preferences/+page.server.ts b/src/routes/(app)/settings/preferences/+page.server.ts
index 4145935e..f0cc700e 100644
--- a/src/routes/(app)/settings/preferences/+page.server.ts
+++ b/src/routes/(app)/settings/preferences/+page.server.ts
@@ -1,5 +1,11 @@
+import getRates from "$lib/rates";
import updateUser from "$lib/settings";
+export async function load() {
+ const rates = await getRates();
+ return { rates };
+}
+
export const actions = {
default: updateUser,
};
diff --git a/src/routes/(app)/settings/security/+page.svelte b/src/routes/(app)/settings/security/+page.svelte
index c4a0b5be..67efbc9e 100644
--- a/src/routes/(app)/settings/security/+page.svelte
+++ b/src/routes/(app)/settings/security/+page.svelte
@@ -12,7 +12,7 @@
import { page } from "$app/stores";
let { data } = $props();
- let { user, rates } = $state(data);
+ let { user } = $state(data);
let { id } = user;
let confirming2fa = $state(),