import { emojisArrayToObject } from './utils' import type { ServerInfo } from '~/types' const ServerInfoTTL = 60 * 60 * 1000 * 12 // 12 hour const serverInfoPromise = new Map>() const serverInfos = useLocalStorage>('nuxtodon-server-info', {}) async function _fetchServerInfo(server: string) { if (!serverInfos.value[server]) { // @ts-expect-error init serverInfos.value[server] = { timeUpdated: 0, server, } } if (serverInfos.value[server].timeUpdated + ServerInfoTTL < Date.now()) { await Promise.allSettled([ masto.instances.fetch().then((r) => { Object.assign(serverInfos.value[server], r) }), masto.customEmojis.fetchAll().then((r) => { serverInfos.value[server].customEmojis = emojisArrayToObject(r) }), ]) } return serverInfos.value[server] } export function fetchServerInfo(server: string) { if (!serverInfoPromise.has(server)) serverInfoPromise.set(server, _fetchServerInfo(server)) return serverInfoPromise.get(server)! } export function useServerInfo(server: string) { const info = ref() fetchServerInfo(server).then((r) => { info.value = r }) return info }