From 2fc9fd9e22deb3468dc51fdd84539feedcb75b8c Mon Sep 17 00:00:00 2001 From: Hailey Date: Wed, 26 Jun 2024 16:22:42 -0700 Subject: [PATCH] resolve short links --- src/state/queries/useResolveShortLink.ts | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/state/queries/useResolveShortLink.ts 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) + } + } +}