diff options
| author | Adam Soltys <[email protected]> | 2024-10-31 09:34:16 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2024-10-31 09:34:16 -0700 |
| commit | 243abb0a3d29e8e34e263eec843488e3bdb468a4 (patch) | |
| tree | be55931ba0f3c110c3001f56a5339cb63e78b761 /src/lib | |
| parent | 4742e72ec25823ceeea7848fb2e1f868bed7f472 (diff) | |
| download | coinos-ui-243abb0a3d29e8e34e263eec843488e3bdb468a4.tar.gz coinos-ui-243abb0a3d29e8e34e263eec843488e3bdb468a4.zip | |
biome
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/nostr.ts | 58 | ||||
| -rw-r--r-- | src/lib/parse.ts | 5 | ||||
| -rw-r--r-- | src/lib/samples.ts | 2 | ||||
| -rw-r--r-- | src/lib/store.ts | 52 | ||||
| -rw-r--r-- | src/lib/ticket.ts | 6 | ||||
| -rw-r--r-- | src/lib/upload.ts | 6 | ||||
| -rw-r--r-- | src/lib/utils.ts | 22 |
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 = { |
