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 soundcloudProvider: RichContentProvider = { name: "soundcloud", matches(url: string): boolean { try { return new URL(url).hostname === "soundcloud.com"; } catch { return false; } }, async fetch(url: string): Promise { const res = await fetchWithTimeout(url); const contentType = res.headers.get("content-type") ?? ""; if (!contentType.startsWith("text/html")) { return { type: "soundcloud", siteName: "SoundCloud", url }; } const html = await res.text(); return { type: "soundcloud", siteName: "SoundCloud", url, title: extractOgTag(html, "title"), description: extractOgTag(html, "description"), thumbnailUrl: extractOgTag(html, "image"), embedUrl: `https://w.soundcloud.com/player/?url=${ encodeURIComponent(url) }&visual=true&auto_play=false`, }; }, };