56 lines
1.6 KiB
TypeScript
56 lines
1.6 KiB
TypeScript
import { NextRequest, NextResponse } from 'next/server';
|
|
|
|
export async function POST(req: NextRequest) {
|
|
try {
|
|
const { url } = await req.json();
|
|
|
|
if (!url) {
|
|
return NextResponse.json({ error: 'URL is required' }, { status: 400 });
|
|
}
|
|
|
|
// Use Firecrawl API to capture screenshot
|
|
const firecrawlResponse = await fetch('https://api.firecrawl.dev/v1/scrape', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Authorization': `Bearer ${process.env.FIRECRAWL_API_KEY}`,
|
|
'Content-Type': 'application/json'
|
|
},
|
|
body: JSON.stringify({
|
|
url,
|
|
formats: ['screenshot'], // Regular viewport screenshot, not full page
|
|
waitFor: 3000, // Wait for page to fully load
|
|
timeout: 30000,
|
|
blockAds: true,
|
|
actions: [
|
|
{
|
|
type: 'wait',
|
|
milliseconds: 2000 // Additional wait for dynamic content
|
|
}
|
|
]
|
|
})
|
|
});
|
|
|
|
if (!firecrawlResponse.ok) {
|
|
const error = await firecrawlResponse.text();
|
|
throw new Error(`Firecrawl API error: ${error}`);
|
|
}
|
|
|
|
const data = await firecrawlResponse.json();
|
|
|
|
if (!data.success || !data.data?.screenshot) {
|
|
throw new Error('Failed to capture screenshot');
|
|
}
|
|
|
|
return NextResponse.json({
|
|
success: true,
|
|
screenshot: data.data.screenshot,
|
|
metadata: data.data.metadata
|
|
});
|
|
|
|
} catch (error: any) {
|
|
console.error('Screenshot capture error:', error);
|
|
return NextResponse.json({
|
|
error: error.message || 'Failed to capture screenshot'
|
|
}, { status: 500 });
|
|
}
|
|
} |