diff options
Diffstat (limited to 'src/lib/utils.ts')
| -rw-r--r-- | src/lib/utils.ts | 134 |
1 files changed, 62 insertions, 72 deletions
diff --git a/src/lib/utils.ts b/src/lib/utils.ts index d6238842..69e0f949 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -5,20 +5,20 @@ import { PUBLIC_COINOS_URL } from "$env/static/public"; import { page } from "$app/stores"; import { get as getStore } from "svelte/store"; -export function scroll(section) { +export function scroll(section: any) { if (getStore(page).url.pathname !== "/") goto("/"); setTimeout(() => section.scrollIntoView({ behavior: "smooth" }), 500); } let base = browser ? "" : PUBLIC_COINOS_URL; -export let punk = (k) => +export let punk = (k: string) => Math.floor((parseInt(k.slice(-2), 16) / 256) * 64) + 1 + ".webp"; -export let g = (url, fetch, headers) => +export let g = (url: string, fetch: any, headers: object) => fetch(base + url, { headers }) - .then((r) => r.text()) - .then((body) => { + .then((r: Response) => r.text()) + .then((body: string) => { try { return JSON.parse(body); } catch (e) { @@ -26,7 +26,7 @@ export let g = (url, fetch, headers) => } }); -export let get = (url, headers = {}) => { +export let get = (url: string, headers = {}) => { return fetch(base + url, { headers }) .then(async (r) => { if (r.ok) return r.text(); @@ -41,7 +41,7 @@ export let get = (url, headers = {}) => { }); }; -export let post = async (url, body, headers) => { +export let post = async (url: string, body: object, headers: HeadersInit | undefined = undefined) => { headers = { "content-type": "application/json", accept: "application/json", @@ -66,46 +66,47 @@ export let post = async (url, body, headers) => { throw new Error(text); }) .then((body) => { + let json; try { - body = JSON.parse(body); + json = JSON.parse(body); } catch (e) { throw new Error(body); } - if (body.error instanceof Error) throw body.error; - if (body instanceof Error) throw body; - if (body.name === "Error") throw new Error(body.message); + if (json.error instanceof Error) throw json.error; + if (json instanceof Error) throw body; + if (json.name === "Error") throw new Error(json.message); - return body; + return json; }); return response; }; -export let copy = (text) => { +export let copy = (text: string) => { navigator.clipboard.writeText(text); success("Copied!"); }; -export let copyNoNewlines = (text) => { +export let copyNoNewlines = (text: string) => { let stripped = text.replace(/\n/g, " ").replace(/\s+/g, " "); navigator.clipboard.writeText(stripped); success("Copied!"); }; -export function reverseFormat(val, locale) { +export function reverseFormat(val: string, locale: string): number { let parts = new Intl.NumberFormat(locale).formatToParts(1111.1); - let group = parts.find((part) => part.type === "group").value; - let decimal = parts.find((part) => part.type === "decimal").value; + let group = parts.find((part) => part.type === "group")!.value; + let 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; } -export let protectedRoutes = [/customers/, /settings/, /payments/]; +export let protectedRoutes: RegExp[] = [/customers/, /settings/, /payments/]; -let recent = []; -export let success = (m, clear = true) => { +let recent: string[] = []; +export let success = (m: string, clear: boolean = true) => { if (recent.includes(m)) return; recent.push(m); setTimeout(() => (recent = []), 5000); @@ -117,7 +118,7 @@ export let success = (m, clear = true) => { }); }; -export let warning = (m, clear = true) => { +export let warning = (m: string, clear: boolean = true) => { if (clear) toast.pop(); toast.push(m, { theme: { @@ -125,7 +126,8 @@ export let warning = (m, clear = true) => { }, }); }; -export let fail = (m, clear = true) => { + +export let fail = (m: string, clear: boolean = true) => { if (clear) toast.pop(); toast.push(m, { theme: { @@ -133,7 +135,8 @@ export let fail = (m, clear = true) => { }, }); }; -export let info = (m) => { + +export let info = (m: string) => { toast.pop(); toast.push(m, { theme: { @@ -142,7 +145,11 @@ export let info = (m) => { }); }; -export let login = async (user, cookies, ip) => { +export let login = async ( + user: { username: string; password: string }, + cookies: any, + ip: string +) => { let maxAge = 380 * 24 * 60 * 60; let res = await fetch(base + "/login", { @@ -171,21 +178,25 @@ export let login = async (user, cookies, ip) => { cookies.set("token", token, opts); }; -export let auth = (cookies) => ({ +export let auth = (cookies: any) => ({ authorization: `Bearer ${cookies.get("token")}`, }); -export let btc = (fiat, rate) => Math.round((fiat * sats) / rate); -export let fiat = (amount, rate) => (amount * rate) / sats; -export let fd = async (req) => { - let obj = Object.fromEntries(await req.formData()); +export let btc = (fiat: number, rate: number): number => + Math.round((fiat * sats) / rate); + +export let fiat = (amount: number, rate: number): number => + (amount * rate) / sats; + +export let fd = async (req: Request): Promise<any> => { + let obj: Record<string, any> = Object.fromEntries(await req.formData()); for (let k in obj) (obj[k] === "undefined" && (obj[k] = undefined)) || (obj[k] === "false" && (obj[k] = false)); return obj; }; -export let f = (s, currency) => { +export let f = (s: number, currency: string): string => { try { return new Intl.NumberFormat("en-US", { style: "currency", @@ -198,17 +209,17 @@ export let f = (s, currency) => { } }; -export let s = (s) => +export let s = (s: number): string => new Intl.NumberFormat("en-US", { maximumFractionDigits: 0 }).format(s); -export let sat = (s) => { +export let sat = (s: number): string => { s = Math.abs(s); let p = Math.floor(Math.log(s) / Math.LN10 + 0.000000001); let d = Math.floor((p + 1) / 3); return ( "⚡️" + - (parseInt(s) > 0 + (parseInt(s.toString()) > 0 ? new Intl.NumberFormat("en-US", { maximumFractionDigits: 2 }).format( s / Math.pow(1000, d) ) + ["", "K", "M", "G", "T", "P", "E", "Z"][d] @@ -219,24 +230,29 @@ export let sat = (s) => { export let sats = 100000000; -export let back = () => +export let back = (): any => browser && (history.length ? history.go(-1) : goto("/")); -export let focus = (el) => +export let focus = (el: HTMLElement): any => browser && screen.width > 1280 && setTimeout(() => el.focus(), 1); -export let select = (el) => +export let select = (el: HTMLInputElement): any => browser && screen.width > 1280 && setTimeout(() => el.select(), 1); -export let sleep = (n) => new Promise((r) => setTimeout(r, n)); -export let wait = async (f, n = 100, s = 300) => { +export let sleep = (n: number): Promise<void> => + new Promise((r) => setTimeout(r, n)); + +export let wait = async (f: () => boolean | Promise<boolean>, n: number = 100, s: number = 300): Promise<boolean> => { let i = 0; - while (!(await f()) && i < s) (await sleep(n)) && i++; + while (!(await f()) && i < s) { + await sleep(n); + i++; + } if (i >= s) throw new Error("timeout"); return f(); }; -export let stretch = async (password, salt) => +export let stretch = async (password: string, salt: Uint8Array) => crypto.subtle.deriveKey( { name: "PBKDF2", @@ -256,32 +272,6 @@ export let stretch = async (password, salt) => ["encrypt", "decrypt"] ); -function get_bigrams(string) { - var s = string.toLowerCase(); - var v = s.split(""); - for (var i = 0; i < v.length; i++) { - v[i] = s.slice(i, i + 2); - } - return v; -} - -export function ss(str1, str2) { - if (str1.length > 0 && str2.length > 0) { - var pairs1 = get_bigrams(str1); - var pairs2 = get_bigrams(str2); - var union = pairs1.length + pairs2.length; - var hits = 0; - for (var x = 0; x < pairs1.length; x++) { - for (var y = 0; y < pairs2.length; y++) { - if (pairs1[x] == pairs2[y]) hit_count++; - } - } - if (hits > 0) return (2.0 * hits) / union; - } - - return 0.0; -} - export let types = { bitcoin: "bitcoin", liquid: "liquid", @@ -291,22 +281,22 @@ export let types = { ecash: "ecash", }; -export let ease = (t) => +export let ease = (t: number): number => t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t; -export function shuffleArray(array) { +export function shuffleArray<T>(array: T[]): void { for (let i = array.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [array[i], array[j]] = [array[j], array[i]]; } } -export let closest = (a, n) => +export let closest = (a: number[], n: number): number => a.reduce((prev, curr) => Math.abs(curr - n) < Math.abs(prev - n) ? curr : prev ); -export let isLiquid = (text) => +export let isLiquid = (text: string): boolean => text.startsWith("Az") || text.startsWith("lq1") || text.startsWith("VJL") || @@ -320,7 +310,7 @@ export let isLiquid = (text) => text.startsWith("el1qq") || text.startsWith("lq1qq"); -export function getCookie(name) { +export function getCookie(name: string): string | null { let nameEQ = name + "="; let ca = document.cookie.split(";"); for (let i = 0; i < ca.length; i++) { @@ -331,7 +321,7 @@ export function getCookie(name) { return null; } -export function setCookie(name, value, seconds) { +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(); |
