import { cache } from "./storage"; import { cacheInterface } from "./types"; import * as currencyPackages from "./currencyPackages.json" export async function pullCache(key: string, replenish: Function, expiry: number, forceReplenish: boolean) { const cacheStorage: cacheInterface = await cache.getValue(); const metadata = await cache.getMeta() as { [key: string]: number; }; if (!cacheStorage[key] || forceReplenish || (Date.now() - metadata[key] >= expiry)) { console.info('[Poly+] "' + key + '" cache is stale replenishing...'); const replenishedCache = await replenish(); cacheStorage[key] = replenishedCache; metadata[key] = Date.now(); cache.setValue(cacheStorage); cache.setMeta(metadata); } return cacheStorage[key]; }; export async function expireCache(key: string) { console.info('[Poly+] Forcefully expiring "' + key + '" cache...'); const metadata = await cache.getMeta() as { [key: string]: number }; metadata[key] = 0; cache.setMeta(metadata); } export async function getUserDetails() { const profileLink: HTMLLinkElement = document.querySelector('.navbar a.text-reset[href^="/users/"]')!; const brickBalance = document.getElementsByClassName('brickBalanceCount')[0]; if (!profileLink || !brickBalance) return null; return { username: profileLink.innerText.trim(), userId: parseInt(profileLink.href.split('/')[4]), bricks: parseInt(brickBalance.textContent!.replace(/,/g, "")) } }; export function bricksToCurrency(bricks: number, currency: string): string | null { const _currencyPackages = currencyPackages as Record>>; const packages = _currencyPackages[currency].toSorted((a, b) => b[1] - a[1]); if (!packages) { console.warn('[Poly+] Missing currency package data for selected currency!'); return null; } let totalValue = 0; for (const [currencyValue, bricksValue] of packages) { while (bricks >= bricksValue) { bricks -= bricksValue; totalValue += currencyValue; } } if (bricks > 0) { const cheapestPackage = packages[packages.length - 1]; const [currencyValue, bricksValue] = cheapestPackage; const unitPrice = currencyValue / bricksValue; totalValue += bricks * unitPrice; } return `~${totalValue.toFixed(2)} ${currency}`; };