diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/constants.ts | 15 | ||||
-rw-r--r-- | src/lib/link-meta/link-meta.ts | 38 |
2 files changed, 35 insertions, 18 deletions
diff --git a/src/lib/constants.ts b/src/lib/constants.ts index ada7b2059..170fe640f 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -144,3 +144,18 @@ export const POST_IMG_MAX = { height: 2000, size: 1000000, } + +export const STAGING_LINK_META_PROXY = + 'https://cardyb.staging.bsky.dev/v1/extract?url=' + +export const PROD_LINK_META_PROXY = 'https://cardyb.bsky.app/v1/extract?url=' + +export function LINK_META_PROXY(serviceUrl: string) { + if (serviceUrl.includes('localhost')) { + return STAGING_LINK_META_PROXY + } else if (serviceUrl.includes('staging')) { + return STAGING_LINK_META_PROXY + } else { + return PROD_LINK_META_PROXY + } +} diff --git a/src/lib/link-meta/link-meta.ts b/src/lib/link-meta/link-meta.ts index 6c4ad5384..6863798b4 100644 --- a/src/lib/link-meta/link-meta.ts +++ b/src/lib/link-meta/link-meta.ts @@ -1,8 +1,7 @@ -import he from 'he' import {isBskyAppUrl} from '../strings/url-helpers' import {RootStoreModel} from 'state/index' import {extractBskyMeta} from './bsky' -import {extractHtmlMeta} from './html' +import {LINK_META_PROXY} from 'lib/constants' export enum LikelyType { HTML, @@ -54,26 +53,29 @@ export async function getLinkMeta( try { const controller = new AbortController() const to = setTimeout(() => controller.abort(), timeout || 5e3) - const httpRes = await fetch(url, { - headers: {accept: 'text/html'}, - signal: controller.signal, - }) - const httpResBody = await httpRes.text() + + const response = await fetch( + `${LINK_META_PROXY( + store.session.currentSession?.service || '', + )}${encodeURIComponent(url)}`, + ) + + const body = await response.json() clearTimeout(to) - const httpResMeta = extractHtmlMeta({ - html: httpResBody, - hostname: urlp?.hostname, - pathname: urlp?.pathname, - }) - meta.title = httpResMeta.title ? he.decode(httpResMeta.title) : undefined - meta.description = httpResMeta.description - ? he.decode(httpResMeta.description) - : undefined - meta.image = httpResMeta.image + + const {description, error, image, title} = body + + if (error !== '') { + throw new Error(error) + } + + meta.description = description + meta.image = image + meta.title = title } catch (e) { // failed console.error(e) - meta.error = 'Failed to fetch link' + meta.error = e instanceof Error ? e.toString() : 'Failed to fetch link' } return meta |