diff options
Diffstat (limited to 'src/lib/link-meta')
-rw-r--r-- | src/lib/link-meta/link-meta.ts | 8 | ||||
-rw-r--r-- | src/lib/link-meta/resolve-short-link.ts | 23 |
2 files changed, 28 insertions, 3 deletions
diff --git a/src/lib/link-meta/link-meta.ts b/src/lib/link-meta/link-meta.ts index fa951432e..6416df2b7 100644 --- a/src/lib/link-meta/link-meta.ts +++ b/src/lib/link-meta/link-meta.ts @@ -1,8 +1,10 @@ import {BskyAgent} from '@atproto/api' -import {isBskyAppUrl} from '../strings/url-helpers' -import {extractBskyMeta} from './bsky' + import {LINK_META_PROXY} from 'lib/constants' import {getGiphyMetaUri} from 'lib/strings/embed-player' +import {parseStarterPackUri} from 'lib/strings/starter-pack' +import {isBskyAppUrl} from '../strings/url-helpers' +import {extractBskyMeta} from './bsky' export enum LikelyType { HTML, @@ -28,7 +30,7 @@ export async function getLinkMeta( url: string, timeout = 15e3, ): Promise<LinkMeta> { - if (isBskyAppUrl(url)) { + if (isBskyAppUrl(url) && !parseStarterPackUri(url)) { return extractBskyMeta(agent, url) } 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) + } +} |