var cache = new Map(); export async function resolveServer(hs_name) { var server = cache.get(hs_name); if (server) return server; try { let res = await fetch(`https://${hs_name}/.well-known/matrix/server`); let json = await res.json(); var server = json["m.server"]; } catch (error) { console.warn(`Failed look up delegated server for ${hs_name}`, error.message); } if (!server) server = server.includes(':') ? server : server + ":8448"; cache.set(hs_name, server); return server; } export function formatBytes(bytes, decimals = 3) { if (bytes == undefined) return bytes; if (bytes == 0) return "0 Bytes"; const k = 1024; const dm = decimals < 0 ? 0 : decimals; const sizes = ['Bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']; const i = Math.floor(Math.log(bytes) / Math.log(k)); return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`; } var durationFormat = new Intl.DurationFormat("en", {style: "digital"}); export function formatDuration(ms) { return durationFormat.format({ hours: Math.floor(ms / (1000 * 60 * 60)), minutes: Math.floor((ms / (1000 * 60)) % 60), seconds: Math.floor((ms / 1000) % 60) }); }