diff options
Diffstat (limited to 'src')
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>= {f(rates[currency], currency, locale, 0, 0)}</div> + <div>= {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(), |
