import { NextRequest, NextResponse } from "next/server"; export async function POST(request: NextRequest) { try { const { url } = await request.json(); if (!url || typeof url !== "string") { return NextResponse.json({ error: "URL is required" }, { status: 400 }); } // Fetch the URL content const response = await fetch(url, { headers: { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36", }, }); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const contentType = response.headers.get("content-type") || ""; let content: string; if (contentType.includes("application/json")) { const json = await response.json(); content = JSON.stringify(json, null, 2); } else if (contentType.includes("text/html")) { const html = await response.text(); // Basic HTML to text conversion - remove tags and decode entities content = html .replace(/)<[^<]*)*<\/script>/gi, "") .replace(/)<[^<]*)*<\/style>/gi, "") .replace(/<[^>]*>/g, "") .replace(/ /g, " ") .replace(/&/g, "&") .replace(/</g, "<") .replace(/>/g, ">") .replace(/"/g, '"') .replace(/'/g, "'") .replace(/\s+/g, " ") .trim(); } else { content = await response.text(); } return NextResponse.json({ content }); } catch (error) { console.error("Error fetching URL:", error); return NextResponse.json( { error: "Failed to fetch URL content" }, { status: 500 } ); } }