const MszRedirectsFedi = async () => { const loading = new MszLoading({ element: '.js-loading', size: 2, inline: true }); const statusBig = document.querySelector('.js-status-big'); const statusSmall = document.querySelector('.js-status-small'); const setStatusSmall = body => { $removeChildren(statusSmall); $appendChild(statusSmall, body); }; setStatusSmall(<>Resolving Webfinger resource for @{FEDI_USERNAME}@{FEDI_INSTANCE}...); try { const { body } = await $xhr.get(`${location.protocol}//${FEDI_INSTANCE}/.well-known/webfinger?format=json&resource=acct:${FEDI_USERNAME}@${FEDI_INSTANCE}`, { type: 'json' }); let url; if(typeof body === 'object') { if(Array.isArray(body.links)) for(const link of body.links) if(typeof link === 'object' && link.rel === 'http://webfinger.net/rel/profile-page' && typeof link.href === 'string') { url = link.href; break; } if(typeof url !== 'string' && Array.isArray(body.aliases)) for(const alias of body.aliases) if(typeof alias === 'string') { url = alias; break; } } if(typeof url !== 'string' || (!url.startsWith('https://') && !url.startsWith('http://'))) throw new Error('Unable to resolve profile URL for given handle.'); setStatusSmall(<>Redirecting to {url}...); location.replace(url); } catch(ex) { await loading.icon.stop(); loading.icon.batsu(); let errorText = ex.toString(); if(errorText.startsWith('[')) errorText = 'Something went wrong.'; statusBig.textContent = 'Profile not found!'; setStatusSmall({errorText}); } };