diff options
| author | Adam Soltys <[email protected]> | 2023-12-01 20:04:13 -0800 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2023-12-01 20:04:13 -0800 |
| commit | 216a600224fde22ce76b367557a02094ec693886 (patch) | |
| tree | d1189bbaa39db204633523132a7d4767b952717d /src/lib/utils.js | |
| parent | 7d9bc1f54dfd04172e8d6d43ebc2efd6f407e833 (diff) | |
| download | coinos-ui-216a600224fde22ce76b367557a02094ec693886.tar.gz coinos-ui-216a600224fde22ce76b367557a02094ec693886.zip | |
prettier
Diffstat (limited to 'src/lib/utils.js')
| -rw-r--r-- | src/lib/utils.js | 396 |
1 files changed, 206 insertions, 190 deletions
diff --git a/src/lib/utils.js b/src/lib/utils.js index 9b3e5592..c0df81ae 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -1,266 +1,282 @@ -import { browser } from '$app/environment'; -import { toast } from '@zerodevx/svelte-toast'; -import { goto } from '$app/navigation'; -import { PUBLIC_COINOS_URL } from '$env/static/public'; -import { page } from '$app/stores'; -import { get as getStore } from 'svelte/store'; +import { browser } from "$app/environment"; +import { toast } from "@zerodevx/svelte-toast"; +import { goto } from "$app/navigation"; +import { PUBLIC_COINOS_URL } from "$env/static/public"; +import { page } from "$app/stores"; +import { get as getStore } from "svelte/store"; export function scroll(section) { - if (getStore(page).url.pathname !== '/') goto('/'); - setTimeout(() => section.scrollIntoView({ behavior: 'smooth' }), 500); + if (getStore(page).url.pathname !== "/") goto("/"); + setTimeout(() => section.scrollIntoView({ behavior: "smooth" }), 500); } -let base = browser ? '' : PUBLIC_COINOS_URL; +let base = browser ? "" : PUBLIC_COINOS_URL; -export let punk = (k) => Math.floor((parseInt(k.slice(-2), 16) / 256) * 64) + 1 + '.webp'; +export let punk = (k) => + Math.floor((parseInt(k.slice(-2), 16) / 256) * 64) + 1 + ".webp"; export let g = (url, fetch, headers) => - fetch(base + url, { headers }) - .then((r) => r.text()) - .then((body) => { - try { - return JSON.parse(body); - } catch (e) { - throw new Error(body); - } - }); + fetch(base + url, { headers }) + .then((r) => r.text()) + .then((body) => { + try { + return JSON.parse(body); + } catch (e) { + throw new Error(body); + } + }); export let get = (url, headers = {}) => { - return fetch(base + url, { headers }) - .then(async (r) => { - if (r.ok) return r.text(); - throw new Error(await r.text()); - }) - .then((body) => { - try { - return JSON.parse(body); - } catch (e) { - return body; - } - }); -} + return fetch(base + url, { headers }) + .then(async (r) => { + if (r.ok) return r.text(); + throw new Error(await r.text()); + }) + .then((body) => { + try { + return JSON.parse(body); + } catch (e) { + return body; + } + }); +}; export let post = (url, body, headers) => { - headers = { ...headers, 'content-type': 'application/json', accept: 'application/json' }; - return fetch(base + url, { method: 'POST', body: JSON.stringify(body), headers }) - .then(async (r) => { - if (r.ok) return r.text(); - let text = await r.text(); + headers = { + ...headers, + "content-type": "application/json", + accept: "application/json", + }; + return fetch(base + url, { + method: "POST", + body: JSON.stringify(body), + headers, + }) + .then(async (r) => { + if (r.ok) return r.text(); + let text = await r.text(); - let message; - try { - ({ message } = JSON.parse(text)); - } catch (e) {} + let message; + try { + ({ message } = JSON.parse(text)); + } catch (e) {} - if (message) throw new Error(message); - throw new Error(text); - }) - .then((body) => { - try { - body = JSON.parse(body); - } catch (e) { - throw new Error(body); - } + if (message) throw new Error(message); + throw new Error(text); + }) + .then((body) => { + try { + body = 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 (body.error instanceof Error) throw body.error; + if (body instanceof Error) throw body; + if (body.name === "Error") throw new Error(body.message); - return body; - }); + return body; + }); }; export let copy = (text) => { - navigator.clipboard.writeText(text); - success('Copied!'); + navigator.clipboard.writeText(text); + success("Copied!"); }; export let copyNoNewlines = (text) => { - let stripped = text.replace(/\n/g, ' ').replace(/\s+/g, ' '); - navigator.clipboard.writeText(stripped); - success('Copied!'); + let stripped = text.replace(/\n/g, " ").replace(/\s+/g, " "); + navigator.clipboard.writeText(stripped); + success("Copied!"); }; export function reverseFormat(val, locale) { - 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 reversedVal = val.replace(new RegExp('\\' + group, 'g'), ''); - reversedVal = reversedVal.replace(new RegExp('\\' + decimal, 'g'), '.'); - return Number.isNaN(reversedVal) ? 0 : +reversedVal; + 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 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 success = (m) => { - toast.pop(); - toast.push(m, { - theme: { - '--toastBarBackground': '#F5F7FA' - } - }); + toast.pop(); + toast.push(m, { + theme: { + "--toastBarBackground": "#F5F7FA", + }, + }); }; export let warning = (m) => { - toast.pop(); - toast.push(m, { - theme: { - '--toastBarBackground': '#FFCE22' - } - }); + toast.pop(); + toast.push(m, { + theme: { + "--toastBarBackground": "#FFCE22", + }, + }); }; export let fail = (m) => { - toast.pop(); - toast.push(m, { - theme: { - '--toastBarBackground': '#E93535' - } - }); + toast.pop(); + toast.push(m, { + theme: { + "--toastBarBackground": "#E93535", + }, + }); }; export let info = (m) => { - toast.pop(); - toast.push(m, { - theme: { - '--toastBarBackground': 'white' - } - }); + toast.pop(); + toast.push(m, { + theme: { + "--toastBarBackground": "white", + }, + }); }; export let login = async (user, cookies, ip) => { - let maxAge = 380 * 24 * 60 * 60; + let maxAge = 380 * 24 * 60 * 60; - let res = await fetch(base + '/login', { - method: 'POST', - body: JSON.stringify(user), - headers: { - 'content-type': 'application/json', - accept: 'application/json', - 'cf-connecting-ip': ip - } - }); - if (res.status === 401) { - let text = await res.text(); - if (text.startsWith('2fa')) throw new Error('2fa'); - } + let res = await fetch(base + "/login", { + method: "POST", + body: JSON.stringify(user), + headers: { + "content-type": "application/json", + accept: "application/json", + "cf-connecting-ip": ip, + }, + }); + if (res.status === 401) { + let text = await res.text(); + if (text.startsWith("2fa")) throw new Error("2fa"); + } - let { token } = await res.json(); - if (!token) throw new Error('Login failed'); + let { token } = await res.json(); + if (!token) throw new Error("Login failed"); - let expires = new Date(); - expires.setSeconds(expires.getSeconds() + maxAge); + let expires = new Date(); + expires.setSeconds(expires.getSeconds() + maxAge); - let opts = { path: '/', expires }; - cookies.set('username', user.username, opts); - cookies.set('token', token, opts); + let opts = { path: "/", expires }; + cookies.set("username", user.username, opts); + cookies.set("token", token, opts); }; -export let auth = (cookies) => ({ authorization: `Bearer ${cookies.get('token')}` }); +export let auth = (cookies) => ({ + authorization: `Bearer ${cookies.get("token")}`, +}); export let fiat = (amount, rate) => (amount * rate) / sats; export let fd = async (req) => { - let obj = Object.fromEntries(await req.formData()); - for (let k in obj) - (obj[k] === 'undefined' && (obj[k] = undefined)) || (obj[k] === 'false' && (obj[k] = false)); - return obj; + let obj = 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) => - new Intl.NumberFormat('en-US', { - style: 'currency', - currency - }) - .format(s) - .replace('CA', ''); + new Intl.NumberFormat("en-US", { + style: "currency", + currency, + }) + .format(s) + .replace("CA", ""); -export let s = (s) => new Intl.NumberFormat('en-US', { maximumFractionDigits: 0 }).format(s); +export let s = (s) => + new Intl.NumberFormat("en-US", { maximumFractionDigits: 0 }).format(s); export let sat = (s) => { - s = Math.abs(s); - let p = Math.floor(Math.log(s) / Math.LN10 + 0.000000001); - let d = Math.floor((p + 1) / 3); + 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 - ? new Intl.NumberFormat('en-US', { maximumFractionDigits: 2 }).format(s / Math.pow(1000, d)) + - ['', 'K', 'M', 'G', 'T', 'P', 'E', 'Z'][d] - : 0 - ).toString() - ); + return ( + "⚡️" + + (parseInt(s) > 0 + ? new Intl.NumberFormat("en-US", { maximumFractionDigits: 2 }).format( + s / Math.pow(1000, d) + ) + ["", "K", "M", "G", "T", "P", "E", "Z"][d] + : 0 + ).toString() + ); }; export let sats = 100000000; -export let back = () => browser && (history.length ? history.go(-1) : goto('/')); -export let focus = (el) => browser && screen.width > 1280 && setTimeout(() => el.focus(), 1); +export let back = () => + browser && (history.length ? history.go(-1) : goto("/")); +export let focus = (el) => + browser && screen.width > 1280 && setTimeout(() => el.focus(), 1); export let sleep = (n) => new Promise((r) => setTimeout(r, n)); export let wait = async (f, n = 100, s = 300) => { - let i = 0; - while (!(await f()) && i < s) (await sleep(n)) && i++; - if (i >= s) throw new Error('timeout'); - return f(); + let i = 0; + while (!(await f()) && i < s) (await sleep(n)) && i++; + if (i >= s) throw new Error("timeout"); + return f(); }; export let stretch = async (password, salt) => - crypto.subtle.deriveKey( - { - name: 'PBKDF2', - salt, - iterations: 100000, - hash: 'SHA-256' - }, - await crypto.subtle.importKey( - 'raw', - new TextEncoder().encode(password), - { name: 'PBKDF2' }, - false, - ['deriveBits', 'deriveKey'] - ), - { name: 'AES-GCM', length: 256 }, - true, - ['encrypt', 'decrypt'] - ); + crypto.subtle.deriveKey( + { + name: "PBKDF2", + salt, + iterations: 100000, + hash: "SHA-256", + }, + await crypto.subtle.importKey( + "raw", + new TextEncoder().encode(password), + { name: "PBKDF2" }, + false, + ["deriveBits", "deriveKey"] + ), + { name: "AES-GCM", length: 256 }, + true, + ["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; + 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; - } + 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; + return 0.0; } export let types = { - bitcoin: 'bitcoin', - lightning: 'lightning', - internal: 'internal', - fund: 'fund', - classic: 'classic' + bitcoin: "bitcoin", + lightning: "lightning", + internal: "internal", + fund: "fund", + classic: "classic", }; -export let ease = (t) => (t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t); - - export function shuffleArray(array) { - 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 ease = (t) => + t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t; +export function shuffleArray(array) { + 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]]; + } +} |
