api: use fallback url if meta data fetcher fails
This commit is contained in:
@@ -1,5 +1,9 @@
|
|||||||
import urlMetadata from 'url-metadata';
|
import urlMetadata from 'url-metadata';
|
||||||
|
|
||||||
|
function fallbackFavicon(url: string) {
|
||||||
|
return `https://www.google.com/s2/favicons?domain=${url}&sz=256`;
|
||||||
|
}
|
||||||
|
|
||||||
function findBestFavicon(favicons: UrlMetaData['favicons']) {
|
function findBestFavicon(favicons: UrlMetaData['favicons']) {
|
||||||
const match = favicons.find(
|
const match = favicons.find(
|
||||||
(favicon) =>
|
(favicon) =>
|
||||||
@@ -18,9 +22,7 @@ function transform(data: UrlMetaData, url: string) {
|
|||||||
const favicon = findBestFavicon(data.favicons);
|
const favicon = findBestFavicon(data.favicons);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
favicon: favicon
|
favicon: favicon ? new URL(favicon, url).toString() : fallbackFavicon(url),
|
||||||
? new URL(favicon, url).toString()
|
|
||||||
: `https://www.google.com/s2/favicons?domain=${url}&sz=256`,
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -35,8 +37,11 @@ interface UrlMetaData {
|
|||||||
export async function parseUrlMeta(url: string) {
|
export async function parseUrlMeta(url: string) {
|
||||||
try {
|
try {
|
||||||
const metadata = (await urlMetadata(url)) as UrlMetaData;
|
const metadata = (await urlMetadata(url)) as UrlMetaData;
|
||||||
return transform(metadata, url);
|
const data = transform(metadata, url);
|
||||||
|
return data;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
return null;
|
return {
|
||||||
|
favicon: fallbackFavicon(url),
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user