aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2024-10-31 09:34:16 -0700
committerAdam Soltys <[email protected]>2024-10-31 09:34:16 -0700
commit243abb0a3d29e8e34e263eec843488e3bdb468a4 (patch)
treebe55931ba0f3c110c3001f56a5339cb63e78b761 /src/lib
parent4742e72ec25823ceeea7848fb2e1f868bed7f472 (diff)
downloadcoinos-ui-243abb0a3d29e8e34e263eec843488e3bdb468a4.tar.gz
coinos-ui-243abb0a3d29e8e34e263eec843488e3bdb468a4.zip
biome
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/nostr.ts58
-rw-r--r--src/lib/parse.ts5
-rw-r--r--src/lib/samples.ts2
-rw-r--r--src/lib/store.ts52
-rw-r--r--src/lib/ticket.ts6
-rw-r--r--src/lib/upload.ts6
-rw-r--r--src/lib/utils.ts22
7 files changed, 76 insertions, 75 deletions
diff --git a/src/lib/nostr.ts b/src/lib/nostr.ts
index a00a28f9..f45dc811 100644
--- a/src/lib/nostr.ts
+++ b/src/lib/nostr.ts
@@ -35,15 +35,15 @@ type EncryptParams = {
const { encode, decode, toWords, fromWords } = bech32m;
-export let generate = async (user: any) => {
- let p = get(pin);
+export const generate = async (user: any) => {
+ const p = get(pin);
if (p && p.length !== 6) return;
- let salt = crypto.getRandomValues(new Uint8Array(16));
- let mnemonic = generateSeedWords();
- let sk = privateKeyFromSeedWords(mnemonic);
+ const salt = crypto.getRandomValues(new Uint8Array(16));
+ const mnemonic = generateSeedWords();
+ const sk = privateKeyFromSeedWords(mnemonic);
- let bytes = new Uint8Array(
+ const bytes = new Uint8Array(
await crypto.subtle.encrypt(
{ name: "AES-GCM", iv: new Uint8Array(16) },
await stretch(await getPassword(), salt),
@@ -56,19 +56,19 @@ export let generate = async (user: any) => {
user.salt = Buffer.from(salt).toString("hex");
};
-export let encrypt = async ({ message, recipient, user }: EncryptParams) => {
- let sk = await getPrivateKey(user);
+export const encrypt = async ({ message, recipient, user }: EncryptParams) => {
+ const sk = await getPrivateKey(user);
return nip04.encrypt(sk, recipient, message);
};
-export let decrypt = async ({ event, user }) => {
- let cache = get(decrypted);
+export const decrypt = async ({ event, user }) => {
+ const cache = get(decrypted);
try {
let { content, pubkey, id } = event;
if (cache[id]) return cache[id];
if (pubkey === user.pubkey) pubkey = event.tags[0][1];
- let message = await nip04.decrypt(
+ const message = await nip04.decrypt(
await getPrivateKey(user),
pubkey,
content,
@@ -83,7 +83,7 @@ export let decrypt = async ({ event, user }) => {
}
};
-export let getPrivateKey = async (user: User): Promise<Uint8Array> => {
+export const getPrivateKey = async (user: User): Promise<Uint8Array> => {
let k;
if (browser) {
k = localStorage.getItem("nsec");
@@ -92,7 +92,7 @@ export let getPrivateKey = async (user: User): Promise<Uint8Array> => {
}
}
- let { nsec } = user;
+ const { nsec } = user;
if (nsec) {
k = nip49decrypt(nsec, await getPassword());
@@ -102,8 +102,8 @@ export let getPrivateKey = async (user: User): Promise<Uint8Array> => {
return k;
};
-export let getMnemonic = async (user: User) => {
- let { cipher, salt } = user;
+export const getMnemonic = async (user: User) => {
+ const { cipher, salt } = user;
let entropy;
entropy = new Uint8Array(
@@ -117,23 +117,23 @@ export let getMnemonic = async (user: User) => {
return entropyToMnemonic(entropy, wordlist);
};
-let decodeNsec = (nsec: string): Uint8Array => {
- let { type, data } = nip19.decode(nsec);
+const decodeNsec = (nsec: string): Uint8Array => {
+ const { type, data } = nip19.decode(nsec);
if (type === "nsec" && data instanceof Uint8Array) return data;
- else throw new Error("invalid nsec");
+ throw new Error("invalid nsec");
};
-export let getNsec = async (user: User) => {
+export const getNsec = async (user: User) => {
return nip19.nsecEncode(await getPrivateKey(user));
};
-export let setNsec = async (user: User, nsec: string) => {
+export const setNsec = async (user: User, nsec: string) => {
user.pubkey = getPublicKey(decodeNsec(nsec));
user.nsec = await encryptNsec(nsec);
};
-export let encryptNsec = async (nsec: string) => {
- let d = decodeNsec(nsec);
+export const encryptNsec = async (nsec: string) => {
+ const d = decodeNsec(nsec);
return nip49encrypt(d, await getPassword());
};
@@ -142,30 +142,30 @@ type SignParams = {
user: User;
};
-export let sign = async ({ event, user }: SignParams) => {
+export const sign = async ({ event, user }: SignParams) => {
event = finalizeEvent(event, await getPrivateKey(user));
};
-export let send = (event: EventTemplate) => {
+export const send = (event: EventTemplate) => {
return post("/events", { event });
};
-let getPassword = async (): Promise<string> => {
+const getPassword = async (): Promise<string> => {
if (!get(pw)) passwordPrompt.set(true);
await wait(() => !!get(pw));
return get(pw) || "";
};
-export let reEncryptEntropy = async (user: User, newPassword: string) => {
- let { cipher, salt } = user;
+export const reEncryptEntropy = async (user: User, newPassword: string) => {
+ const { cipher, salt } = user;
- let entropy = await crypto.subtle.decrypt(
+ const entropy = await crypto.subtle.decrypt(
{ name: "AES-GCM", iv: new Uint8Array(16) },
await stretch(await getPassword(), hexToUint8Array(salt)),
Uint8Array.from(fromWords(decode(cipher, 180).words)),
);
- let bytes = new Uint8Array(
+ const bytes = new Uint8Array(
await crypto.subtle.encrypt(
{ name: "AES-GCM", iv: new Uint8Array(16) },
await stretch(newPassword, hexToUint8Array(salt)),
diff --git a/src/lib/parse.ts b/src/lib/parse.ts
index 0ebbe003..6e38150c 100644
--- a/src/lib/parse.ts
+++ b/src/lib/parse.ts
@@ -10,7 +10,8 @@ export default async (t, host) => {
if (t.startsWith("http")) redirect(307, t);
if (t.startsWith(host)) redirect(307, `http://${t}`);
- let amount, user;
+ let amount;
+ let user;
t = t.trim();
t.toLowerCase().startsWith("bitcoin:") &&
@@ -54,7 +55,7 @@ export default async (t, host) => {
// bitcoin
if (validate(t) || isLiquid(t)) {
let r = `/send/bitcoin/${t}`;
- if (amount) r += "/" + amount;
+ if (amount) r += `/${amount}`;
redirect(307, r);
}
diff --git a/src/lib/samples.ts b/src/lib/samples.ts
index 1cd74409..469ddad9 100644
--- a/src/lib/samples.ts
+++ b/src/lib/samples.ts
@@ -1,6 +1,6 @@
import { PUBLIC_DOMAIN, PUBLIC_COINOS_URL } from "$env/static/public";
-let api = PUBLIC_DOMAIN.includes("localhost")
+const api = PUBLIC_DOMAIN.includes("localhost")
? `${PUBLIC_COINOS_URL}`
: `https://${PUBLIC_DOMAIN}/api`;
diff --git a/src/lib/store.ts b/src/lib/store.ts
index 1183f049..3156d0e2 100644
--- a/src/lib/store.ts
+++ b/src/lib/store.ts
@@ -1,8 +1,8 @@
import { writable } from "svelte/store";
import { browser } from "$app/environment";
-let persistSession = (key, defaultValue = undefined) => {
- let s = writable(
+const persistSession = (key, defaultValue = undefined) => {
+ const s = writable(
browser &&
sessionStorage.getItem(key) &&
sessionStorage.getItem(key) !== "undefined"
@@ -17,8 +17,8 @@ let persistSession = (key, defaultValue = undefined) => {
return s;
};
-let persistLocal = (key, defaultValue: any = undefined) => {
- let s = writable(
+const persistLocal = (key, defaultValue: any = undefined) => {
+ const s = writable(
browser &&
localStorage.getItem(key) &&
localStorage.getItem(key) !== "undefined"
@@ -38,25 +38,25 @@ let persistLocal = (key, defaultValue: any = undefined) => {
return s;
};
-export let account = writable();
-export let amountPrompt = persistLocal("amountPrompt");
-export let avatar = writable();
-export let banner = writable();
-export let event = writable();
-export let events = writable({});
-export let installPrompt = writable();
-export let invoice = writable();
-export let last = writable();
-export let loginRedirect = writable();
-export let decrypted = persistLocal("decrypted", {});
-export let mnemonic = persistSession("mnemonic");
-export let newPayment = persistLocal("newPayment");
-export let password = writable<string | undefined>();
-export let passwordPrompt = writable();
-export let pin = persistLocal("pin");
-export let rate = writable();
-export let request = writable();
-export let requestRedirect = writable();
-export let token = persistSession("token");
-export let ndef = writable();
-export let showQr = persistLocal("showQr", true);
+export const account = writable();
+export const amountPrompt = persistLocal("amountPrompt");
+export const avatar = writable();
+export const banner = writable();
+export const event = writable();
+export const events = writable({});
+export const installPrompt = writable();
+export const invoice = writable();
+export const last = writable();
+export const loginRedirect = writable();
+export const decrypted = persistLocal("decrypted", {});
+export const mnemonic = persistSession("mnemonic");
+export const newPayment = persistLocal("newPayment");
+export const password = writable<string | undefined>();
+export const passwordPrompt = writable();
+export const pin = persistLocal("pin");
+export const rate = writable();
+export const request = writable();
+export const requestRedirect = writable();
+export const token = persistSession("token");
+export const ndef = writable();
+export const showQr = persistLocal("showQr", true);
diff --git a/src/lib/ticket.ts b/src/lib/ticket.ts
index 557b278f..0d93f390 100644
--- a/src/lib/ticket.ts
+++ b/src/lib/ticket.ts
@@ -3,15 +3,15 @@ import { env } from "$env/dynamic/private";
import tickets from "$lib/tickets";
export const createTicket = async (cookies, username) => {
- let { ticket } = await get("/ticket");
+ const { ticket } = await get("/ticket");
- let { address } = await post(
+ const { address } = await post(
`/${username}/invoice`,
{ invoice: { network: "liquid" }, user: { username } },
auth(cookies),
);
- let { asset } = await post(
+ const { asset } = await post(
"/assets",
{
address,
diff --git a/src/lib/upload.ts b/src/lib/upload.ts
index 6bc5eaf3..6d9d4230 100644
--- a/src/lib/upload.ts
+++ b/src/lib/upload.ts
@@ -1,10 +1,10 @@
export const upload = async (file, type, progress) => {
- let url = `/api/upload/${type}`;
- let formData = new FormData();
+ const url = `/api/upload/${type}`;
+ const formData = new FormData();
formData.append("file", file);
return new Promise((resolve, reject) => {
- let ajax = new XMLHttpRequest();
+ const ajax = new XMLHttpRequest();
ajax.addEventListener("load", () => {
if (ajax.readyState === ajax.DONE) {
if (ajax.status === 200) resolve(ajax.response);
diff --git a/src/lib/utils.ts b/src/lib/utils.ts
index d246e3cf..b27ce5f1 100644
--- a/src/lib/utils.ts
+++ b/src/lib/utils.ts
@@ -13,7 +13,7 @@ export function scroll(section: any) {
const base = browser ? "" : PUBLIC_COINOS_URL;
export const punk = (k: string) =>
- Math.floor((parseInt(k.slice(-2), 16) / 256) * 64) + 1 + ".webp";
+ `${Math.floor((parseInt(k.slice(-2), 16) / 256) * 64) + 1}.webp`;
export const g = (url: string, fetch: any, headers: object) =>
fetch(base + url, { headers })
@@ -100,10 +100,10 @@ export const copyNoNewlines = (text: string) => {
export function reverseFormat(val: string, locale: string): number {
const parts = new Intl.NumberFormat(locale).formatToParts(1111.1);
- const group = parts.find((part) => part.type === "group")!.value;
- const decimal = parts.find((part) => part.type === "decimal")!.value;
- let reversedVal = val.replace(new RegExp("\\" + group, "g"), "");
- reversedVal = reversedVal.replace(new RegExp("\\" + decimal, "g"), ".");
+ const group = parts.find((part) => part.type === "group")?.value;
+ const decimal = parts.find((part) => part.type === "decimal")?.value;
+ let reversedVal = val.replace(new RegExp(`\\${group}`, "g"), "");
+ reversedVal = reversedVal.replace(new RegExp(`\\${decimal}`, "g"), ".");
return Number.isNaN(reversedVal) ? 0 : +reversedVal;
}
@@ -156,7 +156,7 @@ export const login = async (
) => {
const maxAge = 380 * 24 * 60 * 60;
- const res = await fetch(base + "/login", {
+ const res = await fetch(`${base}/login`, {
method: "POST",
body: JSON.stringify(user),
headers: {
@@ -216,14 +216,14 @@ export const f = (s: number, currency: string): string => {
export const s = (s: number): string =>
new Intl.NumberFormat("en-US", { maximumFractionDigits: 0 }).format(s);
-export const sat = (s: number): string => "⚡️" + si(Math.abs(s)).toString();
+export const sat = (s: number): string => `⚡️${si(Math.abs(s)).toString()}`;
export const si = (s: number) => {
if (s < 1000) return s.toString(); // Return the original number if it's less than 1000
const units = ["", "K", "M", "G", "T", "P", "E", "Z"];
const d = Math.floor(Math.log10(s) / 3); // Calculate the unit index
- const scaled = s / Math.pow(1000, d); // Scale the number to the correct unit
+ const scaled = s / 1000 ** d; // Scale the number to the correct unit
return (
new Intl.NumberFormat("en-US", { maximumFractionDigits: 2 }).format(
@@ -320,7 +320,7 @@ export const isLiquid = (text: string): boolean =>
text.startsWith("lq1qq");
export function getCookie(name: string): string | null {
- const nameEQ = name + "=";
+ const nameEQ = `${name}=`;
const ca = document.cookie.split(";");
for (let i = 0; i < ca.length; i++) {
let c = ca[i];
@@ -333,8 +333,8 @@ export function getCookie(name: string): string | null {
export function setCookie(name: string, value: string, seconds: number): void {
const now = new Date();
now.setTime(now.getTime() + seconds * 1000);
- const expires = "expires=" + now.toUTCString();
- document.cookie = name + "=" + value + ";" + expires + ";path=/";
+ const expires = `expires=${now.toUTCString()}`;
+ document.cookie = `${name}=${value};${expires};path=/`;
}
export const network = {