api: clean up favicon route

This commit is contained in:
Carl-Gerhard Lindesvärd
2024-03-21 09:01:22 +01:00
parent 2469c6e1b8
commit 709449e55c
4 changed files with 196 additions and 30 deletions

View File

@@ -0,0 +1,38 @@
import urlMetadata from 'url-metadata';
function findBestFavicon(favicons: UrlMetaData['favicons']) {
const match = favicons.find(
(favicon) =>
favicon.rel === 'shortcut icon' ||
favicon.rel === 'icon' ||
favicon.rel === 'apple-touch-icon'
);
if (match) {
return match.href;
}
return null;
}
function transform(data: UrlMetaData, url: string) {
const favicon = findBestFavicon(data.favicons);
return {
favicon: favicon ? new URL(favicon, url).toString() : null,
};
}
interface UrlMetaData {
favicons: {
rel: string;
href: string;
sizes: string;
}[];
}
export async function parseUrlMeta(url: string) {
try {
const metadata = (await urlMetadata(url)) as UrlMetaData;
return transform(metadata, url);
} catch (err) {
return null;
}
}