diff --git a/src/services/readerService.ts b/src/services/readerService.ts new file mode 100644 index 00000000..8b2b97ab --- /dev/null +++ b/src/services/readerService.ts @@ -0,0 +1,32 @@ +// Lightweight readability-style fetcher using r.jina.ai proxy +// Returns simplified HTML for a given URL. This avoids CORS and heavy deps. + +export interface ReadableContent { + url: string + title?: string + html: string +} + +function toProxyUrl(url: string): string { + // Ensure the target URL has a protocol and build the proxy URL + const normalized = /^https?:\/\//i.test(url) ? url : `https://${url}` + return `https://r.jina.ai/http://${normalized.replace(/^https?:\/\//, '')}` +} + +export async function fetchReadableContent(targetUrl: string): Promise { + const proxyUrl = toProxyUrl(targetUrl) + const res = await fetch(proxyUrl) + if (!res.ok) { + throw new Error(`Failed to fetch readable content (${res.status})`) + } + const html = await res.text() + // Best-effort title extraction + const match = html.match(/]*>(.*?)<\/title>/i) + return { + url: targetUrl, + title: match?.[1], + html + } +} + +