import type { RichContent } from "../../model/interfaces.ts"; import type { RichContentProvider } from "../rich-content-service.ts"; import { extractOgTag, fetchWithTimeout } from "../rich-content-service.ts"; export const genericProvider: RichContentProvider = { name: "generic", matches(_url: string): boolean { return true; // fallback — always matches }, async fetch(url: string): Promise { const res = await fetchWithTimeout(url); const contentType = res.headers.get("content-type") ?? ""; if (!contentType.startsWith("text/html")) { return { type: "generic", url }; } const html = await res.text(); return { type: "generic", url, title: extractOgTag(html, "title"), description: extractOgTag(html, "description"), thumbnailUrl: extractOgTag(html, "image"), siteName: extractOgTag(html, "site_name"), }; }, };