aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2026-02-11 23:23:32 -0800
committerAdam Soltys <[email protected]>2026-02-11 23:23:32 -0800
commit13f9ef7f26fff64c2bd54c8f9aa14e6ffac67121 (patch)
tree076cd631b671ff5ab74dee08c775c20c192ac659 /src
parent2e61e8abbc318c36969cb5add0c63df81135b4ab (diff)
downloadcoinos-ui-13f9ef7f26fff64c2bd54c8f9aa14e6ffac67121.tar.gz
coinos-ui-13f9ef7f26fff64c2bd54c8f9aa14e6ffac67121.zip
fix svelte errors
Diffstat (limited to 'src')
-rw-r--r--src/app.d.ts6
-rw-r--r--src/components/404.svelte2
-rw-r--r--src/components/Account.svelte2
-rw-r--r--src/components/AmountField.svelte2
-rw-r--r--src/components/Event.svelte2
-rw-r--r--src/components/InvoiceTypes.svelte2
-rw-r--r--src/components/LandingInfoCard.svelte3
-rw-r--r--src/components/Lnurlp.svelte9
-rw-r--r--src/components/Lnurlw.svelte10
-rw-r--r--src/components/Qr.svelte2
-rw-r--r--src/components/WalletPass.svelte1
-rw-r--r--src/lib/nip11.ts2
-rw-r--r--src/lib/nip40.ts4
-rw-r--r--src/lib/nip44.ts6
-rw-r--r--src/lib/nostr.ts11
-rw-r--r--src/lib/parse.ts6
-rw-r--r--src/lib/store.ts4
-rw-r--r--src/lib/utils.ts4
-rw-r--r--src/routes/(app)/+error.svelte4
-rw-r--r--src/routes/(app)/+layout.svelte12
-rw-r--r--src/routes/(app)/[username]/(profile)/+layout.svelte5
-rw-r--r--src/routes/(app)/[username]/(profile)/+page.svelte6
-rw-r--r--src/routes/(app)/[username]/(profile)/notes/new/+page.svelte2
-rw-r--r--src/routes/(app)/[username]/+layout.svelte4
-rw-r--r--src/routes/(app)/[username]/accepted/create/+page.svelte12
-rw-r--r--src/routes/(app)/account/[id]/+page.svelte17
-rw-r--r--src/routes/(app)/account/ark/+page.svelte2
-rw-r--r--src/routes/(app)/account/import/+page.svelte6
-rw-r--r--src/routes/(app)/account/pass/+page.svelte2
-rw-r--r--src/routes/(app)/account/seed/+page.svelte2
-rw-r--r--src/routes/(app)/admin/+layout.svelte2
-rw-r--r--src/routes/(app)/admin/+page.svelte2
-rw-r--r--src/routes/(app)/apps/new/+page.server.ts4
-rw-r--r--src/routes/(app)/apps/new/+page.svelte2
-rw-r--r--src/routes/(app)/dm/+page.svelte16
-rw-r--r--src/routes/(app)/ecash/[id]/[...version]/+layout.server.ts6
-rw-r--r--src/routes/(app)/ecash/[id]/[...version]/+layout.svelte13
-rw-r--r--src/routes/(app)/ecash/[id]/[...version]/+page.svelte8
-rw-r--r--src/routes/(app)/firehose/+page.svelte2
-rw-r--r--src/routes/(app)/fund/[id]/+page.server.ts2
-rw-r--r--src/routes/(app)/fund/[id]/+page.svelte8
-rw-r--r--src/routes/(app)/fund/[id]/authorize/[...amount]/+page.server.ts2
-rw-r--r--src/routes/(app)/fund/[id]/authorize/[...amount]/+page.svelte7
-rw-r--r--src/routes/(app)/fund/[id]/sweep/[...amount]/+page.server.ts5
-rw-r--r--src/routes/(app)/fund/[id]/sweep/[...amount]/+page.svelte8
-rw-r--r--src/routes/(app)/fund/[id]/withdraw/+page.svelte14
-rw-r--r--src/routes/(app)/funder/+page.svelte25
-rw-r--r--src/routes/(app)/invoice/+page.server.ts2
-rw-r--r--src/routes/(app)/invoice/[id]/tip/+page.svelte32
-rw-r--r--src/routes/(app)/invoice/sent/+page.svelte4
-rw-r--r--src/routes/(app)/items/[id]/+page.svelte3
-rw-r--r--src/routes/(app)/items/create/+page.svelte2
-rw-r--r--src/routes/(app)/ln/[lnurl]/+page.server.ts2
-rw-r--r--src/routes/(app)/ln/[lnurl]/+page.svelte8
-rw-r--r--src/routes/(app)/ln/withdrawal/sent/+page.svelte2
-rw-r--r--src/routes/(app)/messages/+page.server.ts7
-rw-r--r--src/routes/(app)/messages/+page.svelte10
-rw-r--r--src/routes/(app)/messages/[recipient]/+page.server.ts4
-rw-r--r--src/routes/(app)/messages/[recipient]/+page.svelte8
-rw-r--r--src/routes/(app)/pay/[username]/[...amount]/+page.server.ts2
-rw-r--r--src/routes/(app)/pay/[username]/[...amount]/+page.svelte8
-rw-r--r--src/routes/(app)/payment/[id]/+page.svelte9
-rw-r--r--src/routes/(app)/payment/[id]/plain/+page.svelte22
-rw-r--r--src/routes/(app)/payments/[...page]/+page.svelte20
-rw-r--r--src/routes/(app)/pos/+page.svelte2
-rw-r--r--src/routes/(app)/printer/+page.svelte8
-rw-r--r--src/routes/(app)/qr/[text]/[icon]/+server.ts2
-rw-r--r--src/routes/(app)/qr/create/+page.svelte7
-rw-r--r--src/routes/(app)/receive/[...token]/+page.svelte6
-rw-r--r--src/routes/(app)/reset/[code]/+page.server.ts2
-rw-r--r--src/routes/(app)/reset/[code]/+page.svelte8
-rw-r--r--src/routes/(app)/send/+layout.svelte2
-rw-r--r--src/routes/(app)/send/ark/[address]/+page.svelte16
-rw-r--r--src/routes/(app)/send/ark/[address]/[amount]/[...feeRate]/+page.svelte7
-rw-r--r--src/routes/(app)/send/bitcoin/[address]/+page.svelte18
-rw-r--r--src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.svelte5
-rw-r--r--src/routes/(app)/send/fund/[...name]/[...amount]/+page.svelte20
-rw-r--r--src/routes/(app)/send/invoice/[id]/+page.svelte13
-rw-r--r--src/routes/(app)/sent/[id]/+page.svelte9
-rw-r--r--src/routes/(app)/settings/+layout.server.ts1
-rw-r--r--src/routes/(app)/settings/account/+page.svelte6
-rw-r--r--src/routes/(app)/sign/+page.svelte2
-rw-r--r--src/routes/(app)/verify/[code]/+page.svelte3
-rw-r--r--src/routes/(static)/bounties/+page.server.ts8
-rw-r--r--src/routes/(static)/bounties/+page.svelte2
-rw-r--r--src/routes/(static)/docs/+page.svelte8
-rw-r--r--src/routes/(static)/login/+page.server.ts8
-rw-r--r--src/routes/(static)/register/+page.svelte2
-rw-r--r--src/routes/+error.svelte4
-rw-r--r--src/routes/+layout.svelte13
-rw-r--r--src/routes/+layout.ts2
-rw-r--r--src/routes/+page.svelte2
92 files changed, 356 insertions, 253 deletions
diff --git a/src/app.d.ts b/src/app.d.ts
index 3673ad85..a6cb4324 100644
--- a/src/app.d.ts
+++ b/src/app.d.ts
@@ -23,4 +23,10 @@ interface Window {
};
};
maplibregl?: any;
+ AndroidNotch?: {
+ getInsetTop(success: (px: number) => void, error: (err: any) => void): void;
+ getInsetBottom(success: (px: number) => void, error: (err: any) => void): void;
+ getInsetRight(success: (px: number) => void, error: (err: any) => void): void;
+ getInsetLeft(success: (px: number) => void, error: (err: any) => void): void;
+ };
}
diff --git a/src/components/404.svelte b/src/components/404.svelte
index 5a7ba663..317ff968 100644
--- a/src/components/404.svelte
+++ b/src/components/404.svelte
@@ -4,7 +4,7 @@
<div class="flex justify-center items-center mt-20">
<div class="space-y-5 text-center">
- <a href="/">
+ <a href="/" aria-label="Go to homepage">
<iconify-icon noobserver icon="coinos:logo" width="224" class="mx-auto"></iconify-icon>
</a>
diff --git a/src/components/Account.svelte b/src/components/Account.svelte
index 55766512..5641226f 100644
--- a/src/components/Account.svelte
+++ b/src/components/Account.svelte
@@ -144,7 +144,7 @@
{:else if seed || (user.seed && fingerprint)}
<iconify-icon noobserver icon="cryptocurrency-color:btc" width="32"></iconify-icon>
{:else}
- <img src="/images/icon.png" class="w-8 h-8" />
+ <img src="/images/icon.png" class="w-8 h-8" alt="Coinos" />
{/if}
{displayName}
</a>
diff --git a/src/components/AmountField.svelte b/src/components/AmountField.svelte
index 56b98d49..810e36f1 100644
--- a/src/components/AmountField.svelte
+++ b/src/components/AmountField.svelte
@@ -26,7 +26,7 @@
await tick();
numpad.focus();
};
- let numpad = $state();
+ let numpad: HTMLDivElement = $state() as HTMLDivElement;
</script>
<div>
diff --git a/src/components/Event.svelte b/src/components/Event.svelte
index 03b93695..7a9c75d4 100644
--- a/src/components/Event.svelte
+++ b/src/components/Event.svelte
@@ -11,7 +11,7 @@
let amount = 21;
let { event, minimal = false, last = true, user = undefined }: any = $props();
let { author, parts, zaps, names, created_at, pubkey } = $derived(event);
- let { id } = event;
+ let id = $derived(event.id);
let zapping = $state();
let zap = async () => {
diff --git a/src/components/InvoiceTypes.svelte b/src/components/InvoiceTypes.svelte
index b3c430a2..5845f699 100644
--- a/src/components/InvoiceTypes.svelte
+++ b/src/components/InvoiceTypes.svelte
@@ -10,7 +10,7 @@
toggleType,
setAmount,
setType,
- activeOnly,
+ activeOnly = false,
} = $props();
let { aid, address_type, type } = $derived(invoice);
diff --git a/src/components/LandingInfoCard.svelte b/src/components/LandingInfoCard.svelte
index 6052b0c5..707cae2f 100644
--- a/src/components/LandingInfoCard.svelte
+++ b/src/components/LandingInfoCard.svelte
@@ -1,7 +1,8 @@
<script lang="ts">
import Image from "./Image.svelte";
- let { image, title, description = undefined, order = undefined, children } = $props();
+ import type { Snippet } from "svelte";
+ let { image, title, description = undefined, order = undefined, children = undefined }: { image: string; title: string; description?: string; order?: string; children?: Snippet } = $props();
</script>
<div class="block lg:flex justify-center lg:space-x-20 items-center">
diff --git a/src/components/Lnurlp.svelte b/src/components/Lnurlp.svelte
index adb1a781..cde26d86 100644
--- a/src/components/Lnurlp.svelte
+++ b/src/components/Lnurlp.svelte
@@ -8,8 +8,13 @@
import { pin } from "$lib/store";
let { data, form, send = $bindable(), comment = $bindable() } = $props();
- let { currency } = data.user;
- let { minSendable, maxSendable, commentAllowed, callback, metadata, rate } = data;
+ let currency = $derived(data.user.currency);
+ let minSendable = $derived(data.minSendable);
+ let maxSendable = $derived(data.maxSendable);
+ let commentAllowed = $derived(data.commentAllowed);
+ let callback = $derived(data.callback);
+ let metadata = $derived(data.metadata);
+ let rate = $derived(data.rate);
let amount = $state(Math.round(minSendable / 1000)),
loading = $state();
diff --git a/src/components/Lnurlw.svelte b/src/components/Lnurlw.svelte
index 38d103bd..e51a247a 100644
--- a/src/components/Lnurlw.svelte
+++ b/src/components/Lnurlw.svelte
@@ -10,8 +10,14 @@
let { data, form } = $props();
- let { currency, username } = data.user;
- let { defaultDescription, minWithdrawable, maxWithdrawable, k1, callback, rate } = data;
+ let currency = $derived(data.user.currency);
+ let username = $derived(data.user.username);
+ let defaultDescription = $derived(data.defaultDescription);
+ let minWithdrawable = $derived(data.minWithdrawable);
+ let maxWithdrawable = $derived(data.maxWithdrawable);
+ let k1 = $derived(data.k1);
+ let callback = $derived(data.callback);
+ let rate = $derived(data.rate);
let amount = $state(Math.round(minWithdrawable / 1000));
let amountFiat = $derived(parseFloat(((amount * rate) / sats).toFixed(2)));
diff --git a/src/components/Qr.svelte b/src/components/Qr.svelte
index c2014348..d5dbfc41 100644
--- a/src/components/Qr.svelte
+++ b/src/components/Qr.svelte
@@ -10,7 +10,7 @@
screenfull = (await import("screenfull")).default;
});
- let src = $derived(() => {
+ let src = $derived.by(() => {
let url = `/qr/${encodeURIComponent(text)}`;
if (icon) url += `/${icon}`;
else url += "/raw";
diff --git a/src/components/WalletPass.svelte b/src/components/WalletPass.svelte
index 0d1b014a..052f9fd0 100644
--- a/src/components/WalletPass.svelte
+++ b/src/components/WalletPass.svelte
@@ -53,6 +53,7 @@
type="button"
onclick={() => (revealPassword = !revealPassword)}
class="absolute right-5 top-1/2"
+ aria-label={revealPassword ? "Hide password" : "Show password"}
>
<iconify-icon
noobserver
diff --git a/src/lib/nip11.ts b/src/lib/nip11.ts
index 6e827ccb..7c5b335a 100644
--- a/src/lib/nip11.ts
+++ b/src/lib/nip11.ts
@@ -2,7 +2,7 @@ import { fetchRelayInformation } from "nostr-tools/nip11";
// Accepts a list of relays, and returns a list of the relays that support all the provided NIPs.
export const relaysSupporting = async (relays: string[], nips: number[]) => {
- let supportingRelays = [];
+ let supportingRelays: string[] = [];
for (const relay of relays) {
const relayInfo = await fetchRelayInformation(relay);
diff --git a/src/lib/nip40.ts b/src/lib/nip40.ts
index 760a6680..e384b565 100644
--- a/src/lib/nip40.ts
+++ b/src/lib/nip40.ts
@@ -1,12 +1,12 @@
// Returns true if the message has an expiration in the past, false otherwise.
-export const expired = (event: object): boolean => {
+export const expired = (event: { tags: string[][] }): boolean => {
const expiryTime = expiration(event);
return expiryTime !== null && Date.now() / 1000 >= expiryTime;
};
// Returns the provided event's expiration time, as a Unix ms integer.
// If it has none, returns null.
-export const expiration = (event: object): number | null => {
+export const expiration = (event: { tags: string[][] }): number | null => {
for (const tag of event.tags) {
if (tag[0] == "expiration") {
return parseInt(tag[1]);
diff --git a/src/lib/nip44.ts b/src/lib/nip44.ts
index f1f872b5..6025a54f 100644
--- a/src/lib/nip44.ts
+++ b/src/lib/nip44.ts
@@ -8,7 +8,7 @@ import { secp256k1 } from "@noble/curves/secp256k1.js";
import { extract as hkdf_extract, expand as hkdf_expand } from "@noble/hashes/hkdf.js";
import { hmac } from "@noble/hashes/hmac.js";
import { sha256 } from "@noble/hashes/sha2.js";
-import { concatBytes, randomBytes, utf8ToBytes } from "@noble/hashes/utils.js";
+import { concatBytes, hexToBytes, randomBytes, utf8ToBytes } from "@noble/hashes/utils.js";
import { base64 } from "@scure/base";
declare const TextDecoder: any;
@@ -24,8 +24,8 @@ export const u = {
},
getConversationKey(privkeyA: string, pubkeyB: string): Uint8Array {
- const sharedX = secp256k1.getSharedSecret(privkeyA, "02" + pubkeyB).subarray(1, 33);
- return hkdf_extract(sha256, sharedX, "nip44-v2");
+ const sharedX = secp256k1.getSharedSecret(hexToBytes(privkeyA), hexToBytes("02" + pubkeyB)).subarray(1, 33);
+ return hkdf_extract(sha256, sharedX, utf8ToBytes("nip44-v2"));
},
getMessageKeys(conversationKey: Uint8Array, nonce: Uint8Array) {
diff --git a/src/lib/nostr.ts b/src/lib/nostr.ts
index 2a8975ec..d2e95a6d 100644
--- a/src/lib/nostr.ts
+++ b/src/lib/nostr.ts
@@ -63,7 +63,7 @@ export const getPrivateKey = async (user: User): Promise<Uint8Array> => {
k = localStorage.getItem("nsec");
if (k) {
const { nip19 } = await loadNostrTools();
- return nip19.decode(k).data as Uint8Array;
+ return nip19.decode(k).data as unknown as Uint8Array;
}
}
@@ -118,8 +118,8 @@ export const sign = async (event: any, user?: any) => {
}
eventToSign.set(event);
- let unsubscribe;
- const { method, params } = await new Promise((r, j) => {
+ let unsubscribe: (() => void) | undefined;
+ const { method, params } = await new Promise<{ method: string; params: any }>((r, j) => {
unsubscribe = $signer.subscribe((v) => {
if (v === "cancel") {
j("cancelled");
@@ -128,7 +128,7 @@ export const sign = async (event: any, user?: any) => {
v?.ready && r(v);
});
});
- await unsubscribe();
+ await unsubscribe?.();
const signedEvent = await signingMethods[method](event, params);
eventToSign.set(signedEvent);
setTimeout(() => eventToSign.set(null), 1000);
@@ -163,10 +163,9 @@ const signingMethods: Record<string, (event: any, params: any) => Promise<any>>
{
created_at: Math.round(Date.now() / 1000),
kind: 24133,
- pubkey,
content,
tags: [["p", pk]],
- },
+ } as EventTemplate,
sk,
);
diff --git a/src/lib/parse.ts b/src/lib/parse.ts
index 2af661a3..48541728 100644
--- a/src/lib/parse.ts
+++ b/src/lib/parse.ts
@@ -80,10 +80,10 @@ export default async (s, host, cookies) => {
if (invoice) redirect(307, `/invoice/${invoice.id}`);
if (t.match(/^🥜([\uFE00-\uFE0F]|[\uE0100-\uE01EF]+)$/)) {
- t = Array.from(t)
+ t = (Array.from(t) as string[])
.slice(1)
- .map((char) => {
- const codePoint = char.codePointAt(0);
+ .map((char: string) => {
+ const codePoint = char.codePointAt(0)!;
// Handle Variation Selectors (VS1-VS16): U+FE00 to U+FE0F
if (codePoint >= 0xfe00 && codePoint <= 0xfe0f) {
diff --git a/src/lib/store.ts b/src/lib/store.ts
index 3d688535..7499e148 100644
--- a/src/lib/store.ts
+++ b/src/lib/store.ts
@@ -1,5 +1,5 @@
import { browser } from "$app/environment";
-import { writable } from "svelte/store";
+import { writable, type Writable } from "svelte/store";
export const persistSession = (key, defaultValue = undefined) => {
const s = writable(
@@ -72,7 +72,7 @@ export const banner = writable();
export const event = writable();
export const events = writable({});
export const fiat = persistLocalValue("fiat", true);
-export const installPrompt = writable();
+export const installPrompt: Writable<any> = writable();
export const invoice = writable();
export const last = writable();
export const loginRedirect = writable();
diff --git a/src/lib/utils.ts b/src/lib/utils.ts
index c1514d6b..a96db03d 100644
--- a/src/lib/utils.ts
+++ b/src/lib/utils.ts
@@ -331,7 +331,7 @@ export const f = (
minimumFractionDigits = 2,
maximumFractionDigits = 2,
) => {
- const l = typeof locale === "function" ? locale() : locale || "en-US";
+ const l = typeof locale === "function" ? (locale as () => string)() : locale || "en-US";
const cur = currency || "USD";
const region = l.length >= 2 ? l.slice(-2) : "";
const currencyDisplay = region && cur.startsWith(region) ? "narrowSymbol" : "symbol";
@@ -345,7 +345,7 @@ export const f = (
};
export const s = (s: number, locale = "en-US"): string => {
- const l = typeof locale === "function" ? locale() : locale || "en-US";
+ const l = typeof locale === "function" ? (locale as () => string)() : locale || "en-US";
return new Intl.NumberFormat(l, { maximumFractionDigits: 0 }).format(s);
};
diff --git a/src/routes/(app)/+error.svelte b/src/routes/(app)/+error.svelte
index 0e31333c..d94eed63 100644
--- a/src/routes/(app)/+error.svelte
+++ b/src/routes/(app)/+error.svelte
@@ -9,7 +9,7 @@
<div class="container px-4 max-w-xl mx-auto mt-10 space-y-5">
<div class="w-full flex">
- <a href="/" class="mx-auto">
+ <a href="/" class="mx-auto" aria-label="Go to homepage">
<iconify-icon noobserver icon="coinos:logo" width="224"></iconify-icon>
</a>
</div>
@@ -20,7 +20,7 @@
<h1 class="text-2xl md:text-3xl font-semibold text-center">Error</h1>
</div>
<p class="text-secondary text-center">Something went wrong</p>
- <p class="text-secondary text-center">{$page.error.message}</p>
+ <p class="text-secondary text-center">{$page.error?.message}</p>
<div class="flex justify-center py-24">
<a href={link}>
diff --git a/src/routes/(app)/+layout.svelte b/src/routes/(app)/+layout.svelte
index 6ac9bed5..54ae72b5 100644
--- a/src/routes/(app)/+layout.svelte
+++ b/src/routes/(app)/+layout.svelte
@@ -33,8 +33,12 @@
let token = $derived(data.token);
let theme = $derived(data.theme);
- $effect(() => ($themeStore = theme));
- $effect(() => (theme = $themeStore));
+ $effect(() => {
+ $themeStore = theme;
+ });
+ $effect(() => {
+ theme = $themeStore;
+ });
afterNavigate(() => {
document.cookie = `pathname=${$page.url.pathname}; path=/; max-age=86400`;
@@ -58,7 +62,7 @@
if (result?.received > 0) {
if ($fiat && $rateStore && user?.currency) {
- success(`Received ${f(toFiat(result.received, $rateStore), user.currency)}!`);
+ success(`Received ${f(toFiat(result.received, $rateStore as number), user.currency)}!`);
} else {
success(`Received ⚡️${s(result.received)}!`);
}
@@ -125,7 +129,7 @@
let checkSocket = () => {
counter++;
- let lost = socket?.readyState !== 1 || !$last || Date.now() - $last > 30000;
+ let lost = socket?.readyState !== 1 || !$last || Date.now() - ($last as number) > 30000;
if (lost) connect(token);
if (counter > 5) {
send("heartbeat", token);
diff --git a/src/routes/(app)/[username]/(profile)/+layout.svelte b/src/routes/(app)/[username]/(profile)/+layout.svelte
index a0d45f22..c1a3e09d 100644
--- a/src/routes/(app)/[username]/(profile)/+layout.svelte
+++ b/src/routes/(app)/[username]/(profile)/+layout.svelte
@@ -9,9 +9,10 @@
let { data, children } = $props();
let { encode, toWords } = bech32;
- let satsPerCurrency = $derived((1 * sats) / rate);
- let { events, rate, user, subject, src, text } = $derived(data);
+ let { rate, user, subject } = $derived(data);
+ let { events, src, text } = $derived(data as any);
+ let satsPerCurrency = $derived((1 * sats) / rate);
let { currency, npub, username: n, display } = $derived(subject);
let locale = $derived(loc(user));
diff --git a/src/routes/(app)/[username]/(profile)/+page.svelte b/src/routes/(app)/[username]/(profile)/+page.svelte
index 21d0abdb..60af01c8 100644
--- a/src/routes/(app)/[username]/(profile)/+page.svelte
+++ b/src/routes/(app)/[username]/(profile)/+page.svelte
@@ -5,7 +5,7 @@
import Balance from "$comp/Balance.svelte";
import { t } from "$lib/translations";
import { installPrompt, password } from "$lib/store";
- import { afterNavigate } from "$app/navigation";
+ import { afterNavigate, preloadData } from "$app/navigation";
import { page } from "$app/stores";
let { data } = $props();
@@ -15,7 +15,7 @@
preloadData("/send");
});
- let { accounts, subject, rate, user } = $derived(data);
+ let { accounts, subject, rate, user } = $derived(data as any);
let { locked } = $derived(user);
let install = async () => {
@@ -65,7 +65,7 @@
<Account {user} {rate} {account} />
{/each}
<div class="flex justify-end">
- <a href="/account/new" class="contents">
+ <a href="/account/new" class="contents" aria-label={$t("accounts.addAccount")}>
<button
class="btn btn-circle btn-accent !w-14 !h-14 !rounded-full"
aria-label={$t("accounts.addAccount")}
diff --git a/src/routes/(app)/[username]/(profile)/notes/new/+page.svelte b/src/routes/(app)/[username]/(profile)/notes/new/+page.svelte
index 4ed4f930..f8a5c12d 100644
--- a/src/routes/(app)/[username]/(profile)/notes/new/+page.svelte
+++ b/src/routes/(app)/[username]/(profile)/notes/new/+page.svelte
@@ -7,7 +7,7 @@
let { data } = $props();
let { user } = $derived(data);
let { pubkey } = $derived(user);
- let content = $state();
+ let content: string = $state("");
let submit = async (e) => {
try {
diff --git a/src/routes/(app)/[username]/+layout.svelte b/src/routes/(app)/[username]/+layout.svelte
index 883fedb4..2d07aa4c 100644
--- a/src/routes/(app)/[username]/+layout.svelte
+++ b/src/routes/(app)/[username]/+layout.svelte
@@ -1,5 +1,7 @@
<script lang="ts">
- let { data, children, fixed } = $props();
+ import type { Snippet } from "svelte";
+
+ let { data, children, fixed }: { data: any; children: Snippet; fixed?: Snippet } = $props();
</script>
<div class="content">
diff --git a/src/routes/(app)/[username]/accepted/create/+page.svelte b/src/routes/(app)/[username]/accepted/create/+page.svelte
index 3a17bcc0..bb3d3395 100644
--- a/src/routes/(app)/[username]/accepted/create/+page.svelte
+++ b/src/routes/(app)/[username]/accepted/create/+page.svelte
@@ -4,11 +4,15 @@
import { goto } from "$app/navigation";
import { browser } from "$app/environment";
import { t } from "$lib/translations";
- let el = $state(),
- text = $state(),
+ import { focus } from "$lib/utils";
+ let el: HTMLButtonElement | undefined = $state(),
+ text: string = $state(""),
pasted = $state();
- let keypress = (e) => (e.key === "Enter" ? e.preventDefault() || el.click() : (pasted = false));
+ let keypress = (e: KeyboardEvent) => {
+ if (e.key === "Enter") { e.preventDefault(); el?.click(); }
+ else pasted = false;
+ };
let paste = async () => {
text = await navigator.clipboard.readText();
@@ -18,7 +22,7 @@
let submit = () => goto(`/qr/${encodeURIComponent(text)}`);
run(() => {
- if (browser && pasted && text) el.click() && (pasted = false);
+ if (browser && pasted && text) el?.click() && (pasted = false);
});
</script>
diff --git a/src/routes/(app)/account/[id]/+page.svelte b/src/routes/(app)/account/[id]/+page.svelte
index 7f306fea..c5e11ad1 100644
--- a/src/routes/(app)/account/[id]/+page.svelte
+++ b/src/routes/(app)/account/[id]/+page.svelte
@@ -11,8 +11,9 @@
import { getRememberedWalletPassword, forgetWalletPassword } from "$lib/passwordCache";
let { data } = $props();
- let { account, user } = data;
- let { id } = account;
+ let account = $derived(data.account);
+ let user = $derived(data.user);
+ let id = $derived(account.id);
let seed = $derived(account.seed || (account.fingerprint && user.seed));
let displayType = $derived(
account.type === "ark"
@@ -21,9 +22,9 @@
? $t("accounts.bitcoin")
: $t("accounts.custodial"),
);
- let name = $state(account.name || displayType);
- let mnemonic = $state(),
- password = $state();
+ let name = $state(data.account.name || displayType);
+ let mnemonic: string | undefined = $state(),
+ password: string | undefined = $state();
let passwordPrompt = $state();
let cancel = $state(() => (passwordPrompt = false));
let toggle = () => (passwordPrompt = !passwordPrompt);
@@ -52,7 +53,7 @@
passwordPrompt = false;
try {
const { decrypt } = await import("nostr-tools/nip49");
- let entropy = await decrypt(seed, password);
+ let entropy = await decrypt(seed, password as string);
mnemonic = entropyToMnemonic(entropy, wordlist);
} catch (e: any) {
fail("Invalid password, try again");
@@ -88,7 +89,7 @@
{#if mnemonic}
<Mnemonic {mnemonic} />
- <button onclick={() => copy(mnemonic)} type="button" class="btn">
+ <button onclick={() => copy(mnemonic as string)} type="button" class="btn">
<iconify-icon noobserver icon="ph:copy-bold" width="32"></iconify-icon>
<div class="my-auto">{$t("accounts.copy")}</div>
</button>
@@ -115,5 +116,5 @@
</div>
{#if passwordPrompt}
- <WalletPass bind:password bind:cancel bind:submit />
+ <WalletPass bind:password bind:cancel {submit} />
{/if}
diff --git a/src/routes/(app)/account/ark/+page.svelte b/src/routes/(app)/account/ark/+page.svelte
index 79df4752..ce843e11 100644
--- a/src/routes/(app)/account/ark/+page.svelte
+++ b/src/routes/(app)/account/ark/+page.svelte
@@ -20,7 +20,7 @@
} from "$lib/passwordCache";
let { data } = $props();
- let { user } = data;
+ let user = $derived(data.user);
let hasMasterSeed = $derived(!!user.seed);
diff --git a/src/routes/(app)/account/import/+page.svelte b/src/routes/(app)/account/import/+page.svelte
index 93616a92..1ae0a932 100644
--- a/src/routes/(app)/account/import/+page.svelte
+++ b/src/routes/(app)/account/import/+page.svelte
@@ -9,9 +9,9 @@
import { validateMnemonic } from "@scure/bip39";
import { wordlist } from "@scure/bip39/wordlists/english.js";
- let el = $state(),
+ let el: HTMLButtonElement | undefined = $state(),
pasted = $state(),
- text = $state();
+ text: string = $state("");
let paste = async () => {
text = await navigator.clipboard.readText();
@@ -30,7 +30,7 @@
};
run(() => {
- if (browser && pasted && text) form.submit() && (pasted = false);
+ if (browser && pasted && text) el?.click() && (pasted = false);
});
</script>
diff --git a/src/routes/(app)/account/pass/+page.svelte b/src/routes/(app)/account/pass/+page.svelte
index 5a177ded..348e7538 100644
--- a/src/routes/(app)/account/pass/+page.svelte
+++ b/src/routes/(app)/account/pass/+page.svelte
@@ -19,7 +19,7 @@
let { data }: any = $props();
- let { user } = data;
+ let user = $derived(data.user);
let submitting = $state(false);
let confirm: string = $state(""),
diff --git a/src/routes/(app)/account/seed/+page.svelte b/src/routes/(app)/account/seed/+page.svelte
index 69cfc1b6..76d457f6 100644
--- a/src/routes/(app)/account/seed/+page.svelte
+++ b/src/routes/(app)/account/seed/+page.svelte
@@ -9,7 +9,7 @@
import { wordlist } from "@scure/bip39/wordlists/english.js";
let { data } = $props();
- let { user } = data;
+ let user = $derived(data.user);
onMount(async () => {
if (!browser) return;
diff --git a/src/routes/(app)/admin/+layout.svelte b/src/routes/(app)/admin/+layout.svelte
index 6c564dac..28e8b7d0 100644
--- a/src/routes/(app)/admin/+layout.svelte
+++ b/src/routes/(app)/admin/+layout.svelte
@@ -1,7 +1,7 @@
<script lang="ts">
import LandingHeader from "$comp/LandingHeader.svelte";
let { data, children } = $props();
- let { user } = data;
+ let user = $derived(data.user);
</script>
<LandingHeader {user} />
diff --git a/src/routes/(app)/admin/+page.svelte b/src/routes/(app)/admin/+page.svelte
index 5604d01b..2569b9db 100644
--- a/src/routes/(app)/admin/+page.svelte
+++ b/src/routes/(app)/admin/+page.svelte
@@ -2,7 +2,7 @@
import { post } from "$lib/utils";
let { data } = $props();
let reset = (username) => post(`/reset`, { password });
- let { users } = data;
+ let users = $derived(data.users);
let password = $state();
</script>
diff --git a/src/routes/(app)/apps/new/+page.server.ts b/src/routes/(app)/apps/new/+page.server.ts
index c221cef9..88c9c81c 100644
--- a/src/routes/(app)/apps/new/+page.server.ts
+++ b/src/routes/(app)/apps/new/+page.server.ts
@@ -7,8 +7,8 @@ export const load = async ({ parent, url }) => {
if (!user) redirect(307, `/login?redirect=${encodeURIComponent(url.pathname + url.search)}`);
- let max_amount = url.searchParams.get("max_amount");
- max_amount = max_amount ? Math.round(Number(max_amount) / 1000) : undefined;
+ const max_amount_param = url.searchParams.get("max_amount");
+ const max_amount = max_amount_param ? String(Math.round(Number(max_amount_param) / 1000)) : null;
const app = {
name: url.searchParams.get("name"),
diff --git a/src/routes/(app)/apps/new/+page.svelte b/src/routes/(app)/apps/new/+page.svelte
index 8268ef29..da929f01 100644
--- a/src/routes/(app)/apps/new/+page.svelte
+++ b/src/routes/(app)/apps/new/+page.svelte
@@ -13,5 +13,5 @@
<div class="text-red-600 text-center">{form.error}</div>
{/if}
- <AppForm {...app} {rate} {user} />
+ <AppForm {...app} {rate} {user} max_fee={undefined} secret={undefined} notify={false} />
</div>
diff --git a/src/routes/(app)/dm/+page.svelte b/src/routes/(app)/dm/+page.svelte
index cc30e84f..53784094 100644
--- a/src/routes/(app)/dm/+page.svelte
+++ b/src/routes/(app)/dm/+page.svelte
@@ -15,7 +15,7 @@
import { theme } from "$lib/store";
let { data } = $props();
- const { user } = data;
+ const user = $derived(data.user);
if (!user) {
window.location.replace("/login");
@@ -299,7 +299,7 @@
class={"chat-btn push-right " +
($theme === "light" ? "light-chat-btn" : "dark-chat-btn") +
(creatingNewChat ? ($theme === "light" ? " light-selected" : " dark-selected") : "")}
- on:click={() => {
+ onclick={() => {
creatingNewChat = !creatingNewChat;
selectedChat = null;
}}
@@ -326,7 +326,7 @@
? " light-selected"
: " dark-selected"
: "")}
- on:click={() => selectChat(c)}
+ onclick={() => selectChat(c)}
>
<span class={"text-xl" + (muted && muted.has(c.pubkey) ? " secondary" : "")}>
{name(c)}
@@ -338,14 +338,14 @@
{:else if searchQuery !== ""}
<button
class={"chat-btn tall-btn " + ($theme === "light" ? "light-chat-btn" : "dark-chat-btn")}
- on:click={() => selectChatUsername(searchQuery)}
+ onclick={() => selectChatUsername(searchQuery)}
>
<span class="text-xl">{$t("dm.findByUsername")}</span>
</button>
{#if searchQuery.includes(".")}
<button
class={"chat-btn tall-btn " + ($theme === "light" ? "light-chat-btn" : "dark-chat-btn")}
- on:click={() => selectChatNip05(searchQuery)}
+ onclick={() => selectChatNip05(searchQuery)}
>
<span class="text-xl">{$t("dm.findByNIP05")}</span>
</button>
@@ -353,7 +353,7 @@
{#if searchQuery.length === 64 || searchQuery.slice(0, 4) === "npub"}
<button
class={"chat-btn tall-btn " + ($theme === "light" ? "light-chat-btn" : "dark-chat-btn")}
- on:click={() => selectChatPubkey(searchQuery)}
+ onclick={() => selectChatPubkey(searchQuery)}
>
<span class="text-xl">{$t("dm.findByPubkey")}</span>
</button>
@@ -383,7 +383,7 @@
<button
class={"small-btn push-right " +
($theme === "light" ? "light-chat-btn" : "dark-chat-btn")}
- on:click={() => toggleMute(selectedChat.pubkey)}
+ onclick={() => toggleMute(selectedChat.pubkey)}
>
{$t(muted && muted.has(selectedChat.pubkey) ? "dm.unmute" : "dm.mute")}
</button>
@@ -436,7 +436,7 @@
value={canSend
? $t("dm.sendMessage")
: $t("dm.relaysNotFound").replace("[R]", name(selectedChat))}
- on:click={async () => sendMessage(text)}
+ onclick={async () => sendMessage(text)}
/>
{/if}
diff --git a/src/routes/(app)/ecash/[id]/[...version]/+layout.server.ts b/src/routes/(app)/ecash/[id]/[...version]/+layout.server.ts
index 2093e8ec..c96f874d 100644
--- a/src/routes/(app)/ecash/[id]/[...version]/+layout.server.ts
+++ b/src/routes/(app)/ecash/[id]/[...version]/+layout.server.ts
@@ -4,9 +4,9 @@ import { get } from "$lib/utils";
export async function load({ params, parent }) {
const { user } = await parent();
const rates = await getRates();
- let { id, version } = params;
- version ||= 4;
- version = parseInt(version);
+ const { id } = params;
+ let version: string | number = params.version || "4";
+ version = parseInt(String(version));
const { token, status } = await get(`/cash/${id}/${version}`);
const { spent, total, mint, external } = status;
diff --git a/src/routes/(app)/ecash/[id]/[...version]/+layout.svelte b/src/routes/(app)/ecash/[id]/[...version]/+layout.svelte
index a4cfd805..5da0c1c3 100644
--- a/src/routes/(app)/ecash/[id]/[...version]/+layout.svelte
+++ b/src/routes/(app)/ecash/[id]/[...version]/+layout.svelte
@@ -4,10 +4,17 @@
import { fiat } from "$lib/store";
let { data, children } = $props();
- let { id, user, token, total, spent, external, mint, rate } = data;
- let currency = user?.currency || "USD";
+ let id = $derived(data.id);
+ let user = $derived(data.user);
+ let token = $derived(data.token);
+ let total = $derived(data.total);
+ let spent = $derived(data.spent);
+ let external = $derived(data.external);
+ let mint = $derived(data.mint);
+ let rate = $derived(data.rate);
+ let currency = $derived(user?.currency || "USD");
- let amount = total - spent;
+ let amount = $derived(total - spent);
let amountFiat = $derived(parseFloat(((amount * rate) / sats).toFixed(2)));
let spentFiat = $derived(parseFloat(((spent * rate) / sats).toFixed(2)));
diff --git a/src/routes/(app)/ecash/[id]/[...version]/+page.svelte b/src/routes/(app)/ecash/[id]/[...version]/+page.svelte
index 0702dcb0..8367273f 100644
--- a/src/routes/(app)/ecash/[id]/[...version]/+page.svelte
+++ b/src/routes/(app)/ecash/[id]/[...version]/+page.svelte
@@ -7,12 +7,12 @@
let { data, form } = $props();
let link = $page.url.href;
- let { id, total, token, external, spent } = $state(data);
+ let { id, total, token, external, spent } = $derived(data);
let peanut = $derived(
"🥜" +
- Array.from(token)
- .map((char) => {
+ Array.from(token as string)
+ .map((char: string) => {
const byteValue = char.charCodeAt(0);
// For byte values 0-15, use Variation Selectors (VS1-VS16): U+FE00 to U+FE0F
if (byteValue >= 0 && byteValue <= 15) {
@@ -58,7 +58,7 @@
</a>
{:else}
<form method="POST" use:enhance class="w-full">
- <input type="hidden" name="token" bind:value={token} />
+ <input type="hidden" name="token" value={token} />
<button type="submit" class="btn">
<iconify-icon noobserver icon="ph:hand-coins-bold" width="32" flip="horizontal"
></iconify-icon>
diff --git a/src/routes/(app)/firehose/+page.svelte b/src/routes/(app)/firehose/+page.svelte
index a11d15d1..b2a2cab4 100644
--- a/src/routes/(app)/firehose/+page.svelte
+++ b/src/routes/(app)/firehose/+page.svelte
@@ -37,7 +37,7 @@
<div class="container px-4 max-w-xl mx-auto space-y-5">
<h1 class="px-3 md:px-0 text-center text-3xl md:text-4xl font-semibold">Events</h1>
- <div onpointerenter={pause} onpointerleave={unpause}>
+ <div onpointerenter={pause} onpointerleave={unpause} role="feed">
{#each events as event}
<Event {event} minimal={true} />
{/each}
diff --git a/src/routes/(app)/fund/[id]/+page.server.ts b/src/routes/(app)/fund/[id]/+page.server.ts
index 5a30e560..15d02507 100644
--- a/src/routes/(app)/fund/[id]/+page.server.ts
+++ b/src/routes/(app)/fund/[id]/+page.server.ts
@@ -3,7 +3,7 @@ import { redirect } from "@sveltejs/kit";
export const actions = {
default: async ({ cookies, locals, params }) => {
- const { user } = locals;
+ const { user } = locals as any;
if (user) {
await post("/redeem", params, auth(cookies));
diff --git a/src/routes/(app)/fund/[id]/+page.svelte b/src/routes/(app)/fund/[id]/+page.svelte
index 8d83038b..7e123da0 100644
--- a/src/routes/(app)/fund/[id]/+page.svelte
+++ b/src/routes/(app)/fund/[id]/+page.svelte
@@ -14,11 +14,15 @@
let { data }: any = $props();
- let { amount, payments, managers, rate, user } = data;
+ let amount = $derived(data.amount);
+ let payments = $derived(data.payments);
+ let managers = $derived(data.managers);
+ let rate = $derived(data.rate);
+ let user = $derived(data.user);
let { id } = $page.params;
let locale = $derived(loc(user));
- let currency = user ? user.currency : "CAD";
+ let currency = $derived(user ? user.currency : "CAD");
let amountFiat = $derived(parseFloat(((amount * rate) / sats).toFixed(2)));
$effect(() => {
diff --git a/src/routes/(app)/fund/[id]/authorize/[...amount]/+page.server.ts b/src/routes/(app)/fund/[id]/authorize/[...amount]/+page.server.ts
index 94d9ff62..5792688d 100644
--- a/src/routes/(app)/fund/[id]/authorize/[...amount]/+page.server.ts
+++ b/src/routes/(app)/fund/[id]/authorize/[...amount]/+page.server.ts
@@ -20,7 +20,7 @@ export async function load({ cookies, params, parent }) {
amount = balance.amount;
} else if (currency) {
fiat = amount;
- amount = Math.round((fiat * sats) / rate);
+ amount = String(Math.round((Number(fiat) * sats) / rate));
}
if (!amount) redirect(307, `/fund/${id}`);
diff --git a/src/routes/(app)/fund/[id]/authorize/[...amount]/+page.svelte b/src/routes/(app)/fund/[id]/authorize/[...amount]/+page.svelte
index d49e047e..c1312873 100644
--- a/src/routes/(app)/fund/[id]/authorize/[...amount]/+page.svelte
+++ b/src/routes/(app)/fund/[id]/authorize/[...amount]/+page.svelte
@@ -7,7 +7,12 @@
let { data } = $props();
- let { amount, currency, id, user, rate, rates } = data;
+ let amount = $derived(data.amount);
+ let currency = $derived(data.currency);
+ let id = $derived(data.id);
+ let user = $derived(data.user);
+ let rate = $derived(data.rate);
+ let rates = $derived(data.rates);
let locale = $derived(loc(user));
</script>
diff --git a/src/routes/(app)/fund/[id]/sweep/[...amount]/+page.server.ts b/src/routes/(app)/fund/[id]/sweep/[...amount]/+page.server.ts
index 82854fb2..a20f8764 100644
--- a/src/routes/(app)/fund/[id]/sweep/[...amount]/+page.server.ts
+++ b/src/routes/(app)/fund/[id]/sweep/[...amount]/+page.server.ts
@@ -19,7 +19,7 @@ export async function load({ cookies, request, params, parent }) {
const balance = await get(`/fund/${id}`);
amount = balance.authorization || balance.amount;
} else if (currency) {
- amount = Math.round((amount * sats) / rate);
+ amount = String(Math.round((Number(amount) * sats) / rate));
}
const username = randomName() + Math.floor(Math.random() * 99) + 1;
@@ -36,8 +36,7 @@ export async function load({ cookies, request, params, parent }) {
};
let redirectUrl = `/fund/${id}/sweep`;
- if (params.amount && !params.currency) redirectUrl += `/${params.amount}`;
- if (params.currency) redirectUrl += `/${params.amount}/params.currency}`;
+ if (params.amount) redirectUrl += `/${params.amount}`;
const extraHeaders: Record<string, string> = {};
if (env.INTERNAL_API_KEY) extraHeaders["x-api-key"] = env.INTERNAL_API_KEY;
diff --git a/src/routes/(app)/fund/[id]/sweep/[...amount]/+page.svelte b/src/routes/(app)/fund/[id]/sweep/[...amount]/+page.svelte
index 40ceafb8..6c656bd4 100644
--- a/src/routes/(app)/fund/[id]/sweep/[...amount]/+page.svelte
+++ b/src/routes/(app)/fund/[id]/sweep/[...amount]/+page.svelte
@@ -8,7 +8,13 @@
let { data } = $props();
- let { amount, currency, id, user, rate, rates, password: pw } = data;
+ let amount = $derived(data.amount);
+ let currency = $derived(data.currency);
+ let id = $derived(data.id);
+ let user = $derived(data.user);
+ let rate = $derived(data.rate);
+ let rates = $derived(data.rates);
+ let pw = $derived(data.password);
let locale = $derived(loc(user));
onMount(() => ($password = pw));
diff --git a/src/routes/(app)/fund/[id]/withdraw/+page.svelte b/src/routes/(app)/fund/[id]/withdraw/+page.svelte
index a37185ed..50662317 100644
--- a/src/routes/(app)/fund/[id]/withdraw/+page.svelte
+++ b/src/routes/(app)/fund/[id]/withdraw/+page.svelte
@@ -6,20 +6,22 @@
import Numpad from "$comp/Numpad.svelte";
import Spinner from "$comp/Spinner.svelte";
import { page } from "$app/stores";
- import { loc, s, f, sats } from "$lib/utils";
+ import { focus, loc, s, f, sats } from "$lib/utils";
import { fiat, pin } from "$lib/store";
let { data, form } = $props();
- let { user } = $derived(data);
- let { currency } = $derived(user);
+ let user = $derived(data.user);
+ let currency = $derived(user.currency);
let loading = $state();
- let { id, balance, rate } = $derived(data);
- let { amount } = $state(data);
+ let id = $derived(data.id);
+ let balance = $derived(data.balance);
+ let rate = $derived(data.rate);
+ let amount = $state(data.amount);
let locale = $derived(loc(user));
let submit = $state();
- let submitting = $state();
+ let submitting = $state(false);
let toggle = () => (submitting = !submitting);
$effect(() => {
if (form?.message.includes("pin")) $pin = undefined;
diff --git a/src/routes/(app)/funder/+page.svelte b/src/routes/(app)/funder/+page.svelte
index 408b1236..09b25d2d 100644
--- a/src/routes/(app)/funder/+page.svelte
+++ b/src/routes/(app)/funder/+page.svelte
@@ -7,9 +7,9 @@
let NfcWriter: any;
async function write() {
- NfcWriter = window.Capacitor?.Plugins?.NfcWriter;
+ NfcWriter = (window as any).Capacitor?.Plugins?.NfcWriter;
ready = true;
- console.log(window.Capacitor);
+ console.log((window as any).Capacitor);
if (!NfcWriter) return;
here = true;
@@ -22,20 +22,17 @@
ready = true;
const ndef = new NDEFReader();
- await ndef.write(
- {
- records: [
- {
- recordType: "url",
- data: "https://coinos.io",
- },
- ],
- },
- { signal: controller.signal },
- );
+ await ndef.write({
+ records: [
+ {
+ recordType: "url",
+ data: "https://coinos.io",
+ },
+ ],
+ });
success = true;
- } catch (err) {
+ } catch (err: any) {
if (err.name === "AbortError") {
console.warn("Previous write aborted");
} else {
diff --git a/src/routes/(app)/invoice/+page.server.ts b/src/routes/(app)/invoice/+page.server.ts
index dc024229..92cfd18d 100644
--- a/src/routes/(app)/invoice/+page.server.ts
+++ b/src/routes/(app)/invoice/+page.server.ts
@@ -11,7 +11,7 @@ export const load = async ({ cookies, parent }) => {
if (aid === user.id) redirect(307, `/${user.username}/receive`);
let invoice: Invoice = {
- aid,
+ aid: aid || "",
rate: rates[user?.currency || subject?.currency],
};
diff --git a/src/routes/(app)/invoice/[id]/tip/+page.svelte b/src/routes/(app)/invoice/[id]/tip/+page.svelte
index 684baf02..54475f2f 100644
--- a/src/routes/(app)/invoice/[id]/tip/+page.svelte
+++ b/src/routes/(app)/invoice/[id]/tip/+page.svelte
@@ -59,28 +59,28 @@
let submit: HTMLButtonElement = $state() as any;
let { data }: any = $props();
- let { invoice, id, user } = $state(data);
- let {
- aid,
- amount,
- hash,
- items,
- type,
- received,
- prompt,
- text,
- tip,
- user: { username },
- } = $state(invoice);
+ let invoice = $derived(data.invoice);
+ let id = $derived(data.id);
+ let user = $derived(data.user);
+ let aid = $derived(invoice.aid);
+ let amount = $derived(invoice.amount);
+ let hash = $derived(invoice.hash);
+ let items = $derived(invoice.items);
+ let type = $derived(invoice.type);
+ let received = $derived(invoice.received);
+ let prompt = $derived(invoice.prompt);
+ let text = $derived(invoice.text);
+ let tip = $state(data.invoice.tip);
+ let username = $derived(invoice.user?.username);
let locale = $derived(loc(user));
let qr;
- let tipPercent = $state(amount > 0 && tip > 0 ? (tip / amount) * 100 : 0);
+ let tipPercent = $state(data.invoice.amount > 0 && data.invoice.tip > 0 ? (data.invoice.tip / data.invoice.amount) * 100 : 0);
let fullscreen;
- let currency = user?.currency || invoice.currency;
- let rate = invoice.rate * (data.rate / data.invoiceRate);
+ let currency = $derived(user?.currency || invoice.currency);
+ let rate = $derived(invoice.rate * (data.rate / data.invoiceRate));
$effect(() => {
tip = Math.round((amount / 100) * tipPercent);
diff --git a/src/routes/(app)/invoice/sent/+page.svelte b/src/routes/(app)/invoice/sent/+page.svelte
index cc87ddaf..c08c23e0 100644
--- a/src/routes/(app)/invoice/sent/+page.svelte
+++ b/src/routes/(app)/invoice/sent/+page.svelte
@@ -5,9 +5,9 @@
Invoice sent to
<div class="flex">
- <Avatar user={$request.requester} size={12} />
+ <Avatar user={($request as any).requester} size={12} />
<h1 class="my-auto">
- <b>{$request.requester.username}</b>
+ <b>{($request as any).requester.username}</b>
is ready to pay
</h1>
</div>
diff --git a/src/routes/(app)/items/[id]/+page.svelte b/src/routes/(app)/items/[id]/+page.svelte
index af5ce095..97b75d5d 100644
--- a/src/routes/(app)/items/[id]/+page.svelte
+++ b/src/routes/(app)/items/[id]/+page.svelte
@@ -10,7 +10,8 @@
run(() => {
form?.message && fail(form.message);
});
- let { item, user } = data;
+ let item = $derived(data.item);
+ let user = $derived(data.user);
</script>
<div class="container max-w-xl mx-auto px-4">
diff --git a/src/routes/(app)/items/create/+page.svelte b/src/routes/(app)/items/create/+page.svelte
index 5bcb010f..ddb72eb5 100644
--- a/src/routes/(app)/items/create/+page.svelte
+++ b/src/routes/(app)/items/create/+page.svelte
@@ -10,7 +10,7 @@
run(() => {
form?.message && fail(form.message);
});
- let { user } = data;
+ let user = $derived(data.user);
let item = {};
</script>
diff --git a/src/routes/(app)/ln/[lnurl]/+page.server.ts b/src/routes/(app)/ln/[lnurl]/+page.server.ts
index 912ed07c..eec5ce31 100644
--- a/src/routes/(app)/ln/[lnurl]/+page.server.ts
+++ b/src/routes/(app)/ln/[lnurl]/+page.server.ts
@@ -12,7 +12,7 @@ export async function load({ params, parent }) {
let data;
const { lnurl } = params;
- const url = Buffer.from(fromWords(decode(lnurl, 20000).words)).toString();
+ const url = Buffer.from(fromWords(decode(lnurl as `${string}1${string}`, 20000).words)).toString();
try {
data = await get(`/decode?text=${lnurl}`);
diff --git a/src/routes/(app)/ln/[lnurl]/+page.svelte b/src/routes/(app)/ln/[lnurl]/+page.svelte
index af01d5fc..308ac440 100644
--- a/src/routes/(app)/ln/[lnurl]/+page.svelte
+++ b/src/routes/(app)/ln/[lnurl]/+page.svelte
@@ -1,12 +1,12 @@
<script lang="ts">
import Lnurlp from "$comp/Lnurlp.svelte";
import Lnurlw from "$comp/Lnurlw.svelte";
- let { data } = $props();
- let { tag } = data;
+ let { data, form } = $props();
+ let tag = $derived(data.tag);
</script>
{#if tag === "payRequest"}
- <Lnurlp {data} />
+ <Lnurlp {data} {form} />
{:else if tag === "withdrawRequest"}
- <Lnurlw {data} />
+ <Lnurlw {data} {form} />
{/if}
diff --git a/src/routes/(app)/ln/withdrawal/sent/+page.svelte b/src/routes/(app)/ln/withdrawal/sent/+page.svelte
index 6b7a8f95..04fd65bd 100644
--- a/src/routes/(app)/ln/withdrawal/sent/+page.svelte
+++ b/src/routes/(app)/ln/withdrawal/sent/+page.svelte
@@ -4,7 +4,7 @@
import { t } from "$lib/translations";
let { data } = $props();
- let { user } = data;
+ let user = $derived(data.user);
toast.pop(0);
</script>
diff --git a/src/routes/(app)/messages/+page.server.ts b/src/routes/(app)/messages/+page.server.ts
index 20ba5f39..80d6f1a9 100644
--- a/src/routes/(app)/messages/+page.server.ts
+++ b/src/routes/(app)/messages/+page.server.ts
@@ -10,10 +10,11 @@ interface Note {
seen: number;
}
-export async function load({ params, parent }) {
+export async function load({ parent, url }) {
const { user } = await parent();
- if (user.username !== params.username) redirect(307, `/${params.username}`);
- const { since = 0 } = params;
+ const username = url.searchParams.get("username");
+ if (user.username !== username) redirect(307, `/${username}`);
+ const since = url.searchParams.get("since") || 0;
let messages = [];
let notes = [];
diff --git a/src/routes/(app)/messages/+page.svelte b/src/routes/(app)/messages/+page.svelte
index 550daed4..354b8456 100644
--- a/src/routes/(app)/messages/+page.svelte
+++ b/src/routes/(app)/messages/+page.svelte
@@ -7,9 +7,15 @@
import { browser } from "$app/environment";
import { decrypt } from "$lib/nostr";
- let { data } = $props();
+ let { data }: any = $props();
- let { messages, notes, invoices, sent, received, subject, user }: any = $state(data);
+ let messages: any = $state(data.messages);
+ let notes: any = $state(data.notes);
+ let invoices: any = $state(data.invoices);
+ let sent: any = $state(data.sent);
+ let received: any = $state(data.received);
+ let subject: any = $state(data.subject);
+ let user: any = $state(data.user);
let refresh = (d: any) => ({ messages, notes, invoices, sent, received, subject, user } = d);
let keys = new Set();
diff --git a/src/routes/(app)/messages/[recipient]/+page.server.ts b/src/routes/(app)/messages/[recipient]/+page.server.ts
index d9a9c54f..feb0d86f 100644
--- a/src/routes/(app)/messages/[recipient]/+page.server.ts
+++ b/src/routes/(app)/messages/[recipient]/+page.server.ts
@@ -1,9 +1,9 @@
import { get } from "$lib/utils";
import type { Message } from "$lib/types";
-export async function load({ params, parent }) {
+export async function load({ params, parent, url }) {
const { user } = await parent();
- const { since = 0 } = params;
+ const since = url.searchParams.get("since") || 0;
let messages: Message[] = [];
const recipient = await get(`/users/${params.recipient}`);
diff --git a/src/routes/(app)/messages/[recipient]/+page.svelte b/src/routes/(app)/messages/[recipient]/+page.svelte
index e82b5617..15b92ea8 100644
--- a/src/routes/(app)/messages/[recipient]/+page.svelte
+++ b/src/routes/(app)/messages/[recipient]/+page.svelte
@@ -33,7 +33,9 @@
};
}
- let { messages, recipient, user }: any = $state(data);
+ let messages: any = $state(data.messages);
+ let recipient: any = $state(data.recipient);
+ let user: any = $state(data.user);
let input: any,
pane: any = $state();
@@ -113,7 +115,7 @@
</script>
<div class="container max-w-xl mx-auto px-4 space-y-5">
- <button type="button" class="hover:opacity-80" data-sveltekit-preload-data="false" onclick={back}>
+ <button type="button" class="hover:opacity-80" data-sveltekit-preload-data="false" onclick={back} aria-label="Go back">
<iconify-icon noobserver icon="ph:arrow-left-bold" width="40"></iconify-icon>
</button>
@@ -168,7 +170,7 @@
aria-label="Message"
tabindex="0"
></div>
- <button type="submit" class="my-auto shrink-0">
+ <button type="submit" class="my-auto shrink-0" aria-label="Send message">
<iconify-icon noobserver icon="ph:paper-plane-right-bold" width="32"></iconify-icon>
</button>
</form>
diff --git a/src/routes/(app)/pay/[username]/[...amount]/+page.server.ts b/src/routes/(app)/pay/[username]/[...amount]/+page.server.ts
index 23918cb3..f1e5a073 100644
--- a/src/routes/(app)/pay/[username]/[...amount]/+page.server.ts
+++ b/src/routes/(app)/pay/[username]/[...amount]/+page.server.ts
@@ -16,7 +16,7 @@ export async function load({ cookies, params, parent }) {
if (currency && !rate) error(500, "Invalid currency symbol");
if (amount) {
- if (currency) amount = (amount * sats) / rate;
+ if (currency) amount = String((Number(amount) * sats) / rate);
const { id } = await post(
"/invoice",
diff --git a/src/routes/(app)/pay/[username]/[...amount]/+page.svelte b/src/routes/(app)/pay/[username]/[...amount]/+page.svelte
index aa46cfd5..25e03e8f 100644
--- a/src/routes/(app)/pay/[username]/[...amount]/+page.svelte
+++ b/src/routes/(app)/pay/[username]/[...amount]/+page.svelte
@@ -18,10 +18,10 @@
let locale = $derived(loc(subject));
let next = $state();
- let initialAmount = $derived(form?.amount || data.amount);
+ let initialAmount = $derived((form as any)?.amount || data.amount);
let amount = $state();
let fiat = $state();
- let formElement = $state();
+ let formElement: HTMLFormElement | undefined = $state();
$effect(() => {
if (typeof amount === "undefined") amount = initialAmount;
@@ -31,10 +31,10 @@
let setMax = async (e) => {
e.preventDefault();
let body = new FormData(formElement);
- body.set("fiat", false);
+ body.set("fiat", String(false));
body.set("amount", user.balance);
- const response = await fetch(formElement.action, {
+ const response = await fetch(formElement!.action, {
method: "POST",
body,
});
diff --git a/src/routes/(app)/payment/[id]/+page.svelte b/src/routes/(app)/payment/[id]/+page.svelte
index 643ce1ae..657f0c95 100644
--- a/src/routes/(app)/payment/[id]/+page.svelte
+++ b/src/routes/(app)/payment/[id]/+page.svelte
@@ -17,8 +17,9 @@
import { goto } from "$app/navigation";
let { data } = $props();
- let { user, payment: p } = $state(data);
- let locale = user ? locales[user.language] : locales["en"];
+ let user = $derived(data.user);
+ let p = $derived(data.payment);
+ let locale = $derived(user ? locales[user.language] : locales["en"]);
let userLocale = $derived(loc(user));
let {
@@ -201,7 +202,7 @@
{txid}
</a>
</div>
- <button class="flex font-bold hover:opacity-80 mb-auto my-auto" onclick={() => copy(txid)}
+ <button class="flex font-bold hover:opacity-80 mb-auto my-auto" onclick={() => copy(txid)} aria-label="Copy transaction ID"
></button>
</div>
</div>
@@ -212,7 +213,7 @@
<span class="text-lg text-secondary">Path</span>
<div class="flex">
<div>{path}</div>
- <button class="flex font-bold hover:opacity-80 mb-auto my-auto" onclick={() => copy(path)}
+ <button class="flex font-bold hover:opacity-80 mb-auto my-auto" onclick={() => copy(path)} aria-label="Copy path"
></button>
</div>
</div>
diff --git a/src/routes/(app)/payment/[id]/plain/+page.svelte b/src/routes/(app)/payment/[id]/plain/+page.svelte
index ad582c02..41cdd25b 100644
--- a/src/routes/(app)/payment/[id]/plain/+page.svelte
+++ b/src/routes/(app)/payment/[id]/plain/+page.svelte
@@ -10,22 +10,30 @@
import { PUBLIC_EXPLORER as expl } from "$env/static/public";
let { data } = $props();
- let { user, payment: p } = data;
+ let user = $derived(data.user);
+ let p = $derived(data.payment);
- let { username } = user;
- let { id, amount, created, rate, type, ref, tip, ourfee, fee, currency } = p;
- let a = Math.abs(amount);
+ let username = $derived(user.username);
+ let id = $derived(p.id);
+ let amount = $derived(p.amount);
+ let created = $derived(p.created);
+ let rate = $derived(p.rate);
+ let type = $derived(p.type);
+ let ref = $derived(p.ref);
+ let tip = $derived(p.tip);
+ let ourfee = $derived(p.ourfee);
+ let fee = $derived(p.fee || 0);
+ let currency = $derived(p.currency);
+ let a = $derived(Math.abs(amount));
onMount(() => {
if (browser) {
let main = document.querySelector("main");
- main.style.paddingBottom = "0";
+ if (main) main.style.paddingBottom = "0";
window.onfocus = () => goto(`/payment/${id}`);
window.print();
}
});
-
- fee = fee || 0;
</script>
<div class="space-y-5">
diff --git a/src/routes/(app)/payments/[...page]/+page.svelte b/src/routes/(app)/payments/[...page]/+page.svelte
index 4d20f8ef..bc207aad 100644
--- a/src/routes/(app)/payments/[...page]/+page.svelte
+++ b/src/routes/(app)/payments/[...page]/+page.svelte
@@ -111,8 +111,8 @@
let filename = "payments.csv";
let blob = new Blob([csv], { type: "text/csv;charset=utf-8;" });
- if (navigator.msSaveBlob) {
- navigator.msSaveBlob(blob, filename);
+ if ((navigator as any).msSaveBlob) {
+ (navigator as any).msSaveBlob(blob, filename);
} else {
let link = document.createElement("a");
if (link.download !== undefined) {
@@ -183,6 +183,14 @@
<div class="grid grid-cols-3 w-full text-center text-lg">
{#each Object.keys(incoming) as c}
+ {@const totalIn = incoming[c]?.fiat || 0}
+ {@const tipsIn = incoming[c]?.fiatTips || 0}
+ {@const subtotalIn = totalIn - tipsIn}
+
+ {@const totalOut = -outgoing[c]?.fiat || 0}
+ {@const tipsOut = outgoing[c]?.fiatTips || 0}
+ {@const subtotalOut = totalOut - tipsOut}
+
<span class="text-base text-secondary text-left"></span>
<!-- <span class="text-base text-secondary" -->
<!-- >{$t("payments.subtotal")}</span -->
@@ -192,14 +200,6 @@
</span>
<span class="text-base text-secondary text-right">{$t("payments.total")}</span>
- {@const totalIn = incoming[c]?.fiat || 0}
- {@const tipsIn = incoming[c]?.fiatTips || 0}
- {@const subtotalIn = totalIn - tipsIn}
-
- {@const totalOut = -outgoing[c]?.fiat || 0}
- {@const tipsOut = outgoing[c]?.fiatTips || 0}
- {@const subtotalOut = totalOut - tipsOut}
-
{#if totalIn > 0}
<span class="text-left text-base text-secondary">{$t("payments.income")}</span>
<!-- <span><b>{subtotalIn ? f(subtotalIn, c) : "-"}</b></span> -->
diff --git a/src/routes/(app)/pos/+page.svelte b/src/routes/(app)/pos/+page.svelte
index 81758c56..6bcdd4d8 100644
--- a/src/routes/(app)/pos/+page.svelte
+++ b/src/routes/(app)/pos/+page.svelte
@@ -14,7 +14,7 @@
}
let { data, form }: any = $props();
- let { token } = $state(data);
+ let token = $state(data.token);
// --- Defaults ---
const LITTLEFS_ADDRESS_DEFAULT = 0x3d0000; // your existing LittleFS offset
diff --git a/src/routes/(app)/printer/+page.svelte b/src/routes/(app)/printer/+page.svelte
index c55f0abf..d370e224 100644
--- a/src/routes/(app)/printer/+page.svelte
+++ b/src/routes/(app)/printer/+page.svelte
@@ -36,7 +36,7 @@
if (!ESPLoader || !Transport) {
({ ESPLoader, Transport } = await import("esptool-js"));
}
- let device = await navigator.serial.requestPort({});
+ let device = await (navigator as any).serial.requestPort({});
transport = new Transport(device, true);
esploader = new ESPLoader({
@@ -44,7 +44,7 @@
baudrate,
});
- chip = await esploader.main();
+ chip = await (esploader as any).main();
} catch (e) {
console.log(e);
}
@@ -60,11 +60,11 @@
eraseAll: false,
compress: true,
reportProgress: (fileIndex, written, total) => {
- progress = parseInt((written / total) * 100);
+ progress = parseInt(String((written / total) * 100));
},
};
- await esploader.writeFlash(flashOptions);
+ await (esploader as any).writeFlash(flashOptions);
};
</script>
diff --git a/src/routes/(app)/qr/[text]/[icon]/+server.ts b/src/routes/(app)/qr/[text]/[icon]/+server.ts
index 85311a8f..91c2b73c 100644
--- a/src/routes/(app)/qr/[text]/[icon]/+server.ts
+++ b/src/routes/(app)/qr/[text]/[icon]/+server.ts
@@ -18,7 +18,7 @@ export async function GET({ params }) {
ctx.drawImage(logo, (size - logoSize) / 2, (size - logoSize) / 2, logoSize, logoSize);
const buffer = canvas.toBuffer("image/png");
- return new Response(buffer, {
+ return new Response(new Uint8Array(buffer), {
headers: {
"Content-Type": "image/png",
"Cache-Control": "public, max-age=31536000, immutable",
diff --git a/src/routes/(app)/qr/create/+page.svelte b/src/routes/(app)/qr/create/+page.svelte
index 3a17bcc0..e86cac68 100644
--- a/src/routes/(app)/qr/create/+page.svelte
+++ b/src/routes/(app)/qr/create/+page.svelte
@@ -4,21 +4,22 @@
import { goto } from "$app/navigation";
import { browser } from "$app/environment";
import { t } from "$lib/translations";
+ import { focus } from "$lib/utils";
let el = $state(),
text = $state(),
pasted = $state();
- let keypress = (e) => (e.key === "Enter" ? e.preventDefault() || el.click() : (pasted = false));
+ let keypress = (e: KeyboardEvent) => { if (e.key === "Enter") { e.preventDefault(); (el as HTMLElement).click(); } else { pasted = false; } };
let paste = async () => {
text = await navigator.clipboard.readText();
pasted = true;
};
- let submit = () => goto(`/qr/${encodeURIComponent(text)}`);
+ let submit = () => goto(`/qr/${encodeURIComponent(text as string)}`);
run(() => {
- if (browser && pasted && text) el.click() && (pasted = false);
+ if (browser && pasted && text) { (el as HTMLElement).click(); pasted = false; }
});
</script>
diff --git a/src/routes/(app)/receive/[...token]/+page.svelte b/src/routes/(app)/receive/[...token]/+page.svelte
index 63f34fb4..ac714005 100644
--- a/src/routes/(app)/receive/[...token]/+page.svelte
+++ b/src/routes/(app)/receive/[...token]/+page.svelte
@@ -19,16 +19,16 @@
let el = $state(),
text = $state(),
pasted = $state(),
- w = $state();
+ w: number | undefined = $state();
- let keypress = (e) => e.key === "Enter" && (e.preventDefault() || el.click());
+ let keypress = (e: KeyboardEvent) => { if (e.key === "Enter") { e.preventDefault(); (el as HTMLElement).click(); } };
let paste = async () => {
text = await navigator.clipboard.readText();
};
run(() => {
- if (browser && pasted && text) el.click() && (pasted = false);
+ if (browser && pasted && text) { (el as HTMLElement).click(); pasted = false; }
});
</script>
diff --git a/src/routes/(app)/reset/[code]/+page.server.ts b/src/routes/(app)/reset/[code]/+page.server.ts
index dc5b58f0..60f1aa81 100644
--- a/src/routes/(app)/reset/[code]/+page.server.ts
+++ b/src/routes/(app)/reset/[code]/+page.server.ts
@@ -15,7 +15,7 @@ export const actions = {
user.recaptcha = recaptcha;
try {
- await login(user, cookies, ip);
+ await login(user, cookies, ip ?? "");
error = null;
} catch (e: any) {
error ||= e.message;
diff --git a/src/routes/(app)/reset/[code]/+page.svelte b/src/routes/(app)/reset/[code]/+page.svelte
index a2b13a30..036f3e8f 100644
--- a/src/routes/(app)/reset/[code]/+page.svelte
+++ b/src/routes/(app)/reset/[code]/+page.svelte
@@ -37,10 +37,10 @@
e.preventDefault();
loading = true;
try {
- recaptchaToken = await getRecaptchaToken();
+ recaptchaToken = (await getRecaptchaToken()) as string;
await tick();
e.currentTarget.submit();
- } catch (err) {
+ } catch (err: any) {
fail(err.message || "captcha failed");
loading = false;
}
@@ -50,7 +50,7 @@
if (!browser) return;
const nodeBadge = document.querySelector(".grecaptcha-badge");
if (nodeBadge) {
- document.body.removeChild(nodeBadge.parentNode);
+ document.body.removeChild(nodeBadge.parentNode!);
}
const scriptSelector =
@@ -64,7 +64,7 @@
<div class="pt-10">
<div class="w-[243px] mx-auto mb-10">
- <a href="/">
+ <a href="/" aria-label="Go to homepage">
<iconify-icon noobserver icon="coinos:logo" width="224"></iconify-icon>
</a>
</div>
diff --git a/src/routes/(app)/send/+layout.svelte b/src/routes/(app)/send/+layout.svelte
index 29fa85d0..1475e4cf 100644
--- a/src/routes/(app)/send/+layout.svelte
+++ b/src/routes/(app)/send/+layout.svelte
@@ -6,7 +6,7 @@
let { data, children } = $props();
let user = $derived(data.user);
- let cancel = () => goto(`/${user.username}`);
+ let cancel: any = () => goto(`/${user.username}`);
</script>
{#if user?.haspin && (!$pin || $pin?.length !== 6)}
diff --git a/src/routes/(app)/send/ark/[address]/+page.svelte b/src/routes/(app)/send/ark/[address]/+page.svelte
index 705d73f7..631f6689 100644
--- a/src/routes/(app)/send/ark/[address]/+page.svelte
+++ b/src/routes/(app)/send/ark/[address]/+page.svelte
@@ -7,25 +7,27 @@
import { loc, fail, s, f, sats } from "$lib/utils";
let { data } = $props();
- let { balance, user } = data;
+ let balance = $derived(data.balance);
+ let user = $derived(data.user);
let { address } = $page.params;
- let { currency, username } = user;
+ let currency = $derived(user.currency);
+ let username = $derived(user.username);
let locale = $derived(loc(user));
let amount = $state(0);
let a = $state(0);
- let submit = $state(),
+ let submit: HTMLButtonElement | undefined = $state(),
fiat = $state();
- $effect(() => ($rate = data.rate));
- $effect(() => (amount = a));
+ $effect(() => void ($rate = data.rate));
+ $effect(() => void (amount = a));
let setMax = async (e) => {
e.preventDefault();
fiat = false;
amount = balance;
await tick();
- submit.click();
+ submit?.click();
};
</script>
@@ -39,7 +41,7 @@
<div class="flex justify-center gap-2">
<button type="button" class="btn !w-auto grow" onclick={setMax} onkeydown={setMax}>
{#if $fiatStore}
- Max {f((balance * $rate) / sats, currency, locale)}
+ Max {f((balance * ($rate as number)) / sats, currency, locale)}
{:else}
Max ⚡️{s(balance)}
{/if}
diff --git a/src/routes/(app)/send/ark/[address]/[amount]/[...feeRate]/+page.svelte b/src/routes/(app)/send/ark/[address]/[amount]/[...feeRate]/+page.svelte
index c7c08772..02f1c4fb 100644
--- a/src/routes/(app)/send/ark/[address]/[amount]/[...feeRate]/+page.svelte
+++ b/src/routes/(app)/send/ark/[address]/[amount]/[...feeRate]/+page.svelte
@@ -55,15 +55,16 @@
};
};
- let { account, amount, address, message } = $derived(data);
+ let { account, amount, address, message } = $derived(data as any);
- let { feeRate } = $state(data);
+ let feeRate = $state((data as any).feeRate);
$effect(() => {
if (!$rate) $rate = data.rate;
});
- let { balance, currency } = data.user;
+ let balance = $derived(data.user.balance);
+ let currency = $derived(data.user.currency);
let submitting = $state(false),
submit = $state();
</script>
diff --git a/src/routes/(app)/send/bitcoin/[address]/+page.svelte b/src/routes/(app)/send/bitcoin/[address]/+page.svelte
index 17e9a5bf..6a34ccfa 100644
--- a/src/routes/(app)/send/bitcoin/[address]/+page.svelte
+++ b/src/routes/(app)/send/bitcoin/[address]/+page.svelte
@@ -4,28 +4,30 @@
import Numpad from "$comp/Numpad.svelte";
import { page } from "$app/stores";
import { fiat as fiatStore, rate } from "$lib/store";
- import { loc, fail, s, f, sats } from "$lib/utils";
+ import { loc, fail, focus, s, f, sats } from "$lib/utils";
let { data } = $props();
- let { balance, user } = data;
+ let balance = $derived(data.balance);
+ let user = $derived(data.user);
let { address } = $page.params;
- let { currency, username } = user;
+ let currency = $derived(user.currency);
+ let username = $derived(user.username);
let locale = $derived(loc(user));
let amount = $state(0);
let a = $state(0);
- let submit = $state(),
+ let submit: HTMLButtonElement | undefined = $state(),
fiat = $state();
- $effect(() => ($rate = data.rate));
- $effect(() => (amount = a));
+ $effect(() => void ($rate = data.rate));
+ $effect(() => void (amount = a));
let setMax = async (e) => {
e.preventDefault();
fiat = false;
amount = balance;
await tick();
- submit.click();
+ submit?.click();
};
</script>
@@ -39,7 +41,7 @@
<div class="flex justify-center gap-2">
<button type="button" class="btn !w-auto grow" onclick={setMax} onkeydown={setMax}>
{#if $fiatStore}
- Max {f((balance * $rate) / sats, currency, locale)}
+ Max {f((balance * ($rate as number)) / sats, currency, locale)}
{:else}
Max ⚡️{s(balance)}
{/if}
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 adf379da..e4d17d4a 100644
--- a/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.svelte
+++ b/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.svelte
@@ -128,7 +128,7 @@
let { account, amount, address, message, fee, fees, subtract, ourfee, hex, inputs } =
$derived(data);
- let { feeRate }: any = $state(data);
+ let feeRate: any = $state(data.feeRate);
$effect(() => {
if (fees) {
@@ -141,7 +141,8 @@
if (!$rate) $rate = data.rate;
});
- let { balance, currency } = data.user;
+ let balance = $derived(data.user.balance);
+ let currency = $derived(data.user.currency);
let submitting = $state(),
submit: any = $state(),
showSettings = $state();
diff --git a/src/routes/(app)/send/fund/[...name]/[...amount]/+page.svelte b/src/routes/(app)/send/fund/[...name]/[...amount]/+page.svelte
index 49284b57..ed541a93 100644
--- a/src/routes/(app)/send/fund/[...name]/[...amount]/+page.svelte
+++ b/src/routes/(app)/send/fund/[...name]/[...amount]/+page.svelte
@@ -6,19 +6,23 @@
import { page } from "$app/stores";
import { fiat as fiatStore, pin } from "$lib/store";
import handler from "$lib/handler";
- import { loc, s, f, sats } from "$lib/utils";
+ import { loc, focus, s, f, sats } from "$lib/utils";
import { applyAction, deserialize } from "$app/forms";
+ import { invalidateAll } from "$app/navigation";
let { data, form } = $props();
- let { amount, user } = $state(data);
- let { balance, currency } = $derived(user);
- let { name, rate } = $derived(data);
+ let amount = $state(data.amount);
+ let user = $derived(data.user);
+ let balance = $derived(user.balance);
+ let currency = $derived(user.currency);
+ let name = $derived(data.name);
+ let rate = $derived(data.rate);
let loading = $state();
let fiat = $state();
let locale = $derived(loc(user));
let submit = $state();
- let submitting = $state();
+ let submitting: boolean = $state(false);
let toggle = () => (submitting = !submitting);
$effect(() => {
if (form?.message?.includes("pin")) $pin = undefined;
@@ -28,11 +32,11 @@
let setMax = async (e) => {
e.preventDefault();
- let body = new FormData(formElement);
- body.set("fiat", false);
+ let body = new FormData(formElement as HTMLFormElement);
+ body.set("fiat", String(false));
body.set("amount", user.balance);
- const response = await fetch(formElement.action, {
+ const response = await fetch((formElement as HTMLFormElement).action, {
method: "POST",
body,
});
diff --git a/src/routes/(app)/send/invoice/[id]/+page.svelte b/src/routes/(app)/send/invoice/[id]/+page.svelte
index e8ba3bfd..99040ed6 100644
--- a/src/routes/(app)/send/invoice/[id]/+page.svelte
+++ b/src/routes/(app)/send/invoice/[id]/+page.svelte
@@ -14,9 +14,16 @@
import { btc, sat, post, back, f, toFiat, s, sats, focus, loc } from "$lib/utils";
let { data, form }: any = $props();
- let { trusted, balance, invoice, user } = $state(data);
- let { address, hash, payreq, user: recipient, tip } = $state(data.invoice);
- let { currency } = $derived(user);
+ let trusted = $derived(data.trusted);
+ let balance = $derived(data.balance);
+ let invoice = $derived(data.invoice);
+ let user = $derived(data.user);
+ let address = $derived(data.invoice.address);
+ let hash = $derived(data.invoice.hash);
+ let payreq = $derived(data.invoice.payreq);
+ let recipient = $derived(data.invoice.user);
+ let tip = $derived(data.invoice.tip);
+ let currency = $derived(user.currency);
let locale = $derived(loc(user));
let amount = $state(form?.amount ?? data.invoice.amount);
diff --git a/src/routes/(app)/sent/[id]/+page.svelte b/src/routes/(app)/sent/[id]/+page.svelte
index aaf2a3a0..4bd45bc8 100644
--- a/src/routes/(app)/sent/[id]/+page.svelte
+++ b/src/routes/(app)/sent/[id]/+page.svelte
@@ -4,9 +4,12 @@
import Success from "$comp/Success.svelte";
let { data } = $props();
- let { rate, tip, user } = $state(data);
- let { currency, username } = $derived(user);
- let amount = $state(Math.abs(data.amount));
+ let rate = $derived(data.rate);
+ let tip = $derived(data.tip);
+ let user = $derived(data.user);
+ let currency = $derived(user.currency);
+ let username = $derived(user.username);
+ let amount = $derived(Math.abs(data.amount));
let locale = $derived(loc(user));
</script>
diff --git a/src/routes/(app)/settings/+layout.server.ts b/src/routes/(app)/settings/+layout.server.ts
index 29874012..9a1b38ee 100644
--- a/src/routes/(app)/settings/+layout.server.ts
+++ b/src/routes/(app)/settings/+layout.server.ts
@@ -6,7 +6,6 @@ export async function load({ cookies, params, parent, url }) {
if (!user) redirect(307, `/register?redirect=${url.pathname}`);
const tab = url.pathname.split("/").filter(Boolean).pop();
if (tab === "settings") redirect(307, `${url.pathname}/account`);
- params.cookies = cookies.getAll();
const subscriptions = await get("/subscriptions", auth(cookies));
return { cookies: cookies.getAll(), subscriptions, tab };
}
diff --git a/src/routes/(app)/settings/account/+page.svelte b/src/routes/(app)/settings/account/+page.svelte
index c435aced..051e9705 100644
--- a/src/routes/(app)/settings/account/+page.svelte
+++ b/src/routes/(app)/settings/account/+page.svelte
@@ -13,8 +13,10 @@
import { PUBLIC_VAPID_PUBKEY } from "$env/static/public";
let { data } = $props();
- let { user } = $state(data);
- let { connect, rates, subscriptions } = data;
+ let user = $state(data.user);
+ let connect = $derived(data.connect);
+ let rates = $derived(data.rates);
+ let subscriptions = $derived(data.subscriptions);
let { currency, email, tip, verified } = $state(user);
let rate = $derived(() => rates[currency]);
diff --git a/src/routes/(app)/sign/+page.svelte b/src/routes/(app)/sign/+page.svelte
index 32b96fe8..f209fe90 100644
--- a/src/routes/(app)/sign/+page.svelte
+++ b/src/routes/(app)/sign/+page.svelte
@@ -5,7 +5,7 @@
let { data, form } = $props();
let { address } = $derived(data);
let message = $state();
- let { signature } = $derived(form);
+ let { signature } = $derived(form as any);
</script>
<div class="container px-4 max-w-xl mx-auto space-y-5 text-center">
diff --git a/src/routes/(app)/verify/[code]/+page.svelte b/src/routes/(app)/verify/[code]/+page.svelte
index c8587f2f..720066d2 100644
--- a/src/routes/(app)/verify/[code]/+page.svelte
+++ b/src/routes/(app)/verify/[code]/+page.svelte
@@ -3,7 +3,8 @@
import { t } from "$lib/translations";
let { data } = $props();
- let { user, error } = data;
+ let user = $derived(data.user);
+ let error = $derived(data.error);
</script>
<div class="container px-4 text-center mx-auto">
diff --git a/src/routes/(static)/bounties/+page.server.ts b/src/routes/(static)/bounties/+page.server.ts
index 00a94d76..f50f69c1 100644
--- a/src/routes/(static)/bounties/+page.server.ts
+++ b/src/routes/(static)/bounties/+page.server.ts
@@ -1,6 +1,12 @@
import { get } from "$lib/utils";
export const load = async () => {
- const users = [
+ const users: {
+ username: string;
+ merchant: any;
+ type: string;
+ amount: number;
+ user?: any;
+ }[] = [
{
username: "fustler",
merchant: "rrdrive",
diff --git a/src/routes/(static)/bounties/+page.svelte b/src/routes/(static)/bounties/+page.svelte
index c5bd99e7..1623a8a6 100644
--- a/src/routes/(static)/bounties/+page.svelte
+++ b/src/routes/(static)/bounties/+page.svelte
@@ -4,7 +4,7 @@
import Amount from "$comp/Amount.svelte";
let { data }: any = $props();
- let { users } = data;
+ let users = $derived(data.users);
let bounties = [
"Hardware Store",
diff --git a/src/routes/(static)/docs/+page.svelte b/src/routes/(static)/docs/+page.svelte
index 90d14ff1..c4d14a0b 100644
--- a/src/routes/(static)/docs/+page.svelte
+++ b/src/routes/(static)/docs/+page.svelte
@@ -5,15 +5,17 @@
import Code from "$comp/Code.svelte";
let { data } = $props();
- let { user, ro, token } = data;
+ let user = $derived(data.user);
+ let ro = $derived(data.ro);
+ let token = $derived(data.token);
let api = PUBLIC_DOMAIN.includes("localhost")
? `${PUBLIC_COINOS_URL}`
: `https://${PUBLIC_DOMAIN}/api`;
- let tokenSample = token ? `export token="${token}"` : `export token=<your auth token>`;
+ let tokenSample = $derived(token ? `export token="${token}"` : `export token=<your auth token>`);
- let roSample = `export token="${ro}"`;
+ let roSample = $derived(`export token="${ro}"`);
</script>
{#snippet cp(something)}
diff --git a/src/routes/(static)/login/+page.server.ts b/src/routes/(static)/login/+page.server.ts
index e4fb3815..eb0ad0bf 100644
--- a/src/routes/(static)/login/+page.server.ts
+++ b/src/routes/(static)/login/+page.server.ts
@@ -28,8 +28,8 @@ export const actions = {
await login(
user,
cookies,
- request.headers.get("cf-connecting-ip"),
- request.headers.get("host"),
+ request.headers.get("cf-connecting-ip") ?? "",
+ request.headers.get("host") ?? "",
);
} catch (e) {
const { message } = e as Error;
@@ -53,8 +53,8 @@ export const actions = {
headers: {
"content-type": "application/json",
accept: "application/json",
- "cf-connecting-ip": request.headers.get("cf-connecting-ip"),
- "x-forwarded-host": request.headers.get("host"),
+ "cf-connecting-ip": request.headers.get("cf-connecting-ip") ?? "",
+ "x-forwarded-host": request.headers.get("host") ?? "",
},
});
diff --git a/src/routes/(static)/register/+page.svelte b/src/routes/(static)/register/+page.svelte
index a8d05e42..843fb129 100644
--- a/src/routes/(static)/register/+page.svelte
+++ b/src/routes/(static)/register/+page.svelte
@@ -47,7 +47,7 @@
});
let username: string | undefined = $state();
- let { index } = $state(data);
+ let index = $state(data.index);
let revealPassword = $state(false);
let cleared;
diff --git a/src/routes/+error.svelte b/src/routes/+error.svelte
index e8c85578..04fd06b7 100644
--- a/src/routes/+error.svelte
+++ b/src/routes/+error.svelte
@@ -8,7 +8,7 @@
<div class="container px-4 max-w-xl mx-auto mt-10 space-y-5">
<div class="w-full flex">
- <a href="/" class="mx-auto">
+ <a href="/" class="mx-auto" aria-label="Go to homepage">
<iconify-icon noobserver icon="coinos:logo" width="224"></iconify-icon>
</a>
</div>
@@ -19,7 +19,7 @@
<h1 class="text-2xl md:text-3xl font-semibold text-center">Error</h1>
</div>
<p class="text-secondary text-center">Something went wrong</p>
- <p class="text-secondary text-center">{$page.error.message}</p>
+ <p class="text-secondary text-center">{$page.error?.message}</p>
<div class="flex justify-center py-24">
<a href={link}>
diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte
index c1586698..f1091c2f 100644
--- a/src/routes/+layout.svelte
+++ b/src/routes/+layout.svelte
@@ -9,11 +9,15 @@
const map = { light: "lofi", dark: "black", system: "system" };
- let { data, children } = $props();
+ let { data, children } = $props<any>();
let pathname = $derived(data.pathname);
let theme = $derived(data.theme);
- $effect(() => ($themeStore = theme));
- $effect(() => (theme = $themeStore));
+ $effect(() => {
+ $themeStore = theme;
+ });
+ $effect(() => {
+ theme = $themeStore;
+ });
$effect(() => {
const v = map[theme] ?? theme;
if (!v || v === "system") {
@@ -47,8 +51,7 @@
if (document.visibilityState === "visible") clearBadge();
});
- let hasNotch = typeof window.AndroidNotch !== "undefined";
- if (hasNotch) {
+ if (window.AndroidNotch) {
window.AndroidNotch.getInsetTop(
(px) => {
document.documentElement.style.setProperty("--safe-area-inset-top", Math.round(px) + "px");
diff --git a/src/routes/+layout.ts b/src/routes/+layout.ts
index eee702d1..5b5238b8 100644
--- a/src/routes/+layout.ts
+++ b/src/routes/+layout.ts
@@ -11,7 +11,7 @@ const opts = { path: "/", expires };
/** @type {import('@sveltejs/kit').Load} */
export const load = async ({ data }) => {
- const { i18n, translations } = data;
+ const { i18n, translations } = data as any;
const { locale, route } = i18n;
addTranslations(translations);
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte
index c160a685..08587115 100644
--- a/src/routes/+page.svelte
+++ b/src/routes/+page.svelte
@@ -11,7 +11,7 @@
import { t } from "$lib/translations";
let { data } = $props();
- let { faqs, locations, user } = $derived(data);
+ let { faqs, locations, user } = $derived(data as any);
let howItWorks = $state();
let faq = $state();