diff --git a/src/state/queries/useResolveShortLink.ts b/src/state/queries/useResolveShortLink.ts new file mode 100644 index 0000000000..ba781cab4e --- /dev/null +++ b/src/state/queries/useResolveShortLink.ts @@ -0,0 +1,24 @@ +import {logger} from '#/logger' + +export function useResolveShortLink() { + return async (shortLink: string) => { + const controller = new AbortController() + const to = setTimeout(() => controller.abort(), 2e3) + + try { + const res = await fetch( + shortLink, + {method: 'HEAD', redirect: 'manual'}, + {signal: controller.signal}, + ) + if (res.status !== 301) { + return shortLink + } + return res.headers.get('Location') + } catch (e: unknown) { + logger.error('Failed to resolve short link', {safeMessage: e}) + } finally { + clearTimeout(to) + } + } +}