From 6624b19b1d954dc69afbf1a9f6072e791771aff5 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Tue, 3 Mar 2026 14:39:08 -0800 Subject: static page loads --- src/components/Success.svelte | 2 +- src/locales/en.json | 3 ++ src/routes/(app)/+layout.server.ts | 38 ++++++++++---- src/routes/(app)/invoice/[id]/paid/+page.svelte | 2 +- .../[address]/[amount]/[...feeRate]/+page.svelte | 59 +++++++++------------- src/routes/(static)/+layout.server.ts | 4 -- src/routes/(static)/login/+page.server.ts | 7 +-- src/routes/(static)/register/+page.server.ts | 7 +-- src/routes/(static)/register/auth/+page.server.ts | 7 +-- src/routes/+layout.server.ts | 29 +---------- src/routes/+page.ts | 1 + 11 files changed, 69 insertions(+), 90 deletions(-) delete mode 100644 src/routes/(static)/+layout.server.ts create mode 100644 src/routes/+page.ts (limited to 'src') diff --git a/src/components/Success.svelte b/src/components/Success.svelte index 71acfe7f..25ea7668 100644 --- a/src/components/Success.svelte +++ b/src/components/Success.svelte @@ -58,7 +58,7 @@ - + {/if}

{title}

diff --git a/src/locales/en.json b/src/locales/en.json index 4249412a..7db19d3d 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -589,7 +589,10 @@ "fast": "Fast", "ecashDesc": "Ecash tokens are funded with bitcoin. They may be redeemed in exchange for a lightning payment equal to their value or loaded back into a coinos account at any time. They can also be transferred to other ecash wallets either wholly or partially. You might use them to give bitcoin to someone who doesn't have a wallet by texting the token to them or sharing a link to it. Learn more at", "ecashToken": "Ecash token", + "low": "Low", "medium": "Medium", + "high": "High", + "priority": "Priority", "maxFeeDesc": "Set an upper limit on the network routing fee. If set too low the payment may fail. You can set it higher and try again. We debit the full amount while attempting the payment but credit back any unused portion.", "slow": "Slow", "create": "Create", diff --git a/src/routes/(app)/+layout.server.ts b/src/routes/(app)/+layout.server.ts index 249c0451..f1cb4d24 100644 --- a/src/routes/(app)/+layout.server.ts +++ b/src/routes/(app)/+layout.server.ts @@ -1,18 +1,38 @@ -import { auth, get } from "$lib/utils"; +import { auth, get, isInvalidTokenError, sleep } from "$lib/utils"; import { error, redirect } from "@sveltejs/kit"; -export async function load({ cookies, request, url, params, parent }) { +export async function load({ cookies, url, params }) { const { pathname } = url; const { id, username } = params; const token = cookies.get("token"); - const { user } = await parent(); - const hasArk = token - ? (await get("/accounts", auth(cookies))).some((a: any) => a.type === "ark") - : false; + if (!token) redirect(307, "/login"); + + let user; + try { + user = await get("/me", auth(cookies)); + } catch (e) { + const { message } = e as Error; + if (message.startsWith("Rate")) { + await sleep(3000); + try { + user = await get("/me", auth(cookies)); + } catch (retryError) { + if (isInvalidTokenError(retryError) && pathname !== "/logout") { + redirect(307, "/logout"); + } + throw retryError; + } + } else if (isInvalidTokenError(e) && pathname !== "/logout") { + redirect(307, "/logout"); + } else { + throw e; + } + } - let subject; + const hasArk = (await get("/accounts", auth(cookies))).some((a: any) => a.type === "ark"); + let subject; if (url.pathname.includes("/invoice") && id) { try { ({ user: subject } = await get(`/invoice/${id}`)); @@ -31,10 +51,6 @@ export async function load({ cookies, request, url, params, parent }) { redirect(307, "/migrate"); } - if (user && ["/login", "/register"].includes(pathname) && request.method === "GET") { - redirect(307, `/${user.username}`); - } - const theme = cookies.get("theme") || "light"; return { user, token, subject, theme, hasArk }; diff --git a/src/routes/(app)/invoice/[id]/paid/+page.svelte b/src/routes/(app)/invoice/[id]/paid/+page.svelte index d4a82652..0b49c146 100644 --- a/src/routes/(app)/invoice/[id]/paid/+page.svelte +++ b/src/routes/(app)/invoice/[id]/paid/+page.svelte @@ -15,7 +15,7 @@
{#if pending} - +

Payment detected

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 fcae8598..d5eb0293 100644 --- a/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.svelte +++ b/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.svelte @@ -152,14 +152,10 @@ submit: any = $state(), showSettings = $state(); - let customRate = $state(""); - let showCustom = $state(false); - let presets = $derived(fees ? [ - { label: $t("payments.economy"), rate: 0.1 }, + { label: $t("payments.low"), rate: 0.1 }, { label: $t("payments.medium"), rate: fees.hourFee }, - { label: $t("payments.fast"), rate: fees.halfHourFee }, - { label: $t("payments.fastest"), rate: fees.fastestFee }, + { label: $t("payments.high"), rate: fees.fastestFee }, ] : []); let toggleSettings = () => (showSettings = !showSettings); @@ -169,12 +165,11 @@ let pickRate = (r: number) => { feeRate = r; - showCustom = false; setFee(); }; let applyCustom = () => { - const r = parseFloat(customRate); + const r = parseFloat(String(feeRate)); if (r >= 0.1) { feeRate = r; setFee(); @@ -203,43 +198,35 @@ {#if fees}
-

{$t("payments.networkFee")}

- -
+

{$t("payments.priority")}

+
{#each presets as preset} {/each} -
- {#if showCustom} -
- e.key === 'Enter' && applyCustom()} - /> - sat/vB -
- {/if} +
+ { + const r = parseFloat(e.currentTarget.value); + if (r >= 0.1) { feeRate = r; setFee(); } + }} + onkeydown={(e) => e.key === 'Enter' && applyCustom()} + /> + sat/vB +
diff --git a/src/routes/(static)/+layout.server.ts b/src/routes/(static)/+layout.server.ts deleted file mode 100644 index a6c5a722..00000000 --- a/src/routes/(static)/+layout.server.ts +++ /dev/null @@ -1,4 +0,0 @@ -export async function load({ parent }) { - const { user } = await parent(); - return { user }; -} diff --git a/src/routes/(static)/login/+page.server.ts b/src/routes/(static)/login/+page.server.ts index 480116b5..a59aa78c 100644 --- a/src/routes/(static)/login/+page.server.ts +++ b/src/routes/(static)/login/+page.server.ts @@ -2,9 +2,10 @@ import { PUBLIC_COINOS_URL } from "$env/static/public"; import { fd, get, login } from "$lib/utils"; import { fail, redirect } from "@sveltejs/kit"; -export const load = async ({ parent }) => { - const { user } = await parent(); - if (user?.pubkey) redirect(307, `/${user.username}`); +export const load = async ({ cookies }) => { + const token = cookies.get("token"); + const username = cookies.get("username"); + if (token && username) redirect(307, `/${username}`); const { challenge } = await get("/challenge"); return { challenge }; }; diff --git a/src/routes/(static)/register/+page.server.ts b/src/routes/(static)/register/+page.server.ts index e56f4e14..2a70517a 100644 --- a/src/routes/(static)/register/+page.server.ts +++ b/src/routes/(static)/register/+page.server.ts @@ -1,8 +1,9 @@ import { redirect } from "@sveltejs/kit"; -export const load = async ({ parent }) => { - const { user } = await parent(); - if (user) redirect(307, `/${user.username}`); +export const load = async ({ cookies }) => { + const token = cookies.get("token"); + const username = cookies.get("username"); + if (token && username) redirect(307, `/${username}`); const index = Math.floor(Math.random() * 64) + 1; diff --git a/src/routes/(static)/register/auth/+page.server.ts b/src/routes/(static)/register/auth/+page.server.ts index 29e9a3f8..282081f9 100644 --- a/src/routes/(static)/register/auth/+page.server.ts +++ b/src/routes/(static)/register/auth/+page.server.ts @@ -1,9 +1,10 @@ import { fd, get, login, post } from "$lib/utils"; import { fail, redirect } from "@sveltejs/kit"; -export const load = async ({ parent, url }) => { - const { user } = await parent(); - if (user) redirect(307, `/${user.username}`); +export const load = async ({ cookies, url }) => { + const token = cookies.get("token"); + const cookieUser = cookies.get("username"); + if (token && cookieUser) redirect(307, `/${cookieUser}`); const username = url.searchParams.get("username"); if (!username) redirect(307, "/register"); diff --git a/src/routes/+layout.server.ts b/src/routes/+layout.server.ts index 9f0c584d..61c46ea6 100644 --- a/src/routes/+layout.server.ts +++ b/src/routes/+layout.server.ts @@ -1,36 +1,10 @@ import { defaultLocale, loadTranslations, locales } from "$lib/translations/index"; -import { auth, get, isInvalidTokenError, sleep } from "$lib/utils"; -import { redirect } from "@sveltejs/kit"; export const load = async ({ cookies, request, url }) => { const { pathname } = url; - let user; - const token = cookies.get("token"); - if (token) { - try { - user = await get("/me", auth(cookies)); - } catch (e) { - const { message } = e as Error; - if (message.startsWith("Rate")) { - await sleep(3000); - try { - user = await get("/me", auth(cookies)); - } catch (retryError) { - if (isInvalidTokenError(retryError) && pathname !== "/logout") { - redirect(307, "/logout"); - } - throw retryError; - } - } else if (isInvalidTokenError(e) && pathname !== "/logout") { - redirect(307, "/logout"); - } else { - throw e; - } - } - } // Try to get the locale from cookie - let locale = user?.language || (cookies.get("lang") || "").toLowerCase(); + let locale = (cookies.get("lang") || "").toLowerCase(); // Get user preferred locale if (!locale) { @@ -55,6 +29,5 @@ export const load = async ({ cookies, request, url }) => { theme, pathname, i18n: { locale, route: pathname }, - user, }; }; diff --git a/src/routes/+page.ts b/src/routes/+page.ts new file mode 100644 index 00000000..189f71e2 --- /dev/null +++ b/src/routes/+page.ts @@ -0,0 +1 @@ +export const prerender = true; -- cgit v1.2.3