about summary refs log tree commit diff
path: root/src/lib/link-meta/resolve-short-link.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/link-meta/resolve-short-link.ts')
-rw-r--r--src/lib/link-meta/resolve-short-link.ts23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/lib/link-meta/resolve-short-link.ts b/src/lib/link-meta/resolve-short-link.ts
new file mode 100644
index 000000000..3a3e2ab46
--- /dev/null
+++ b/src/lib/link-meta/resolve-short-link.ts
@@ -0,0 +1,23 @@
+import {logger} from '#/logger'
+import {startUriToStarterPackUri} from 'lib/strings/starter-pack'
+
+export async function resolveShortLink(shortLink: string) {
+  const controller = new AbortController()
+  const to = setTimeout(() => controller.abort(), 2e3)
+
+  try {
+    const res = await fetch(shortLink, {
+      method: 'GET',
+      signal: controller.signal,
+    })
+    if (res.status !== 200) {
+      return shortLink
+    }
+    return startUriToStarterPackUri(res.url)
+  } catch (e: unknown) {
+    logger.error('Failed to resolve short link', {safeMessage: e})
+    return null
+  } finally {
+    clearTimeout(to)
+  }
+}