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 } ); } }