Spaces:
Sleeping
Sleeping
| import { NextRequest, NextResponse } from 'next/server'; | |
| export async function POST(request: NextRequest) { | |
| try { | |
| const body = await request.json(); | |
| const url = body.url; | |
| const prompt = body.prompt; | |
| console.log('[extract-brand-styles] Extracting brand styles for:', url); | |
| console.log('[extract-brand-styles] User prompt:', prompt); | |
| // Call Firecrawl API to extract branding information | |
| const FIRECRAWL_API_KEY = process.env.FIRECRAWL_API_KEY; | |
| if (!FIRECRAWL_API_KEY) { | |
| console.error('[extract-brand-styles] No Firecrawl API key found'); | |
| throw new Error('Firecrawl API key not configured'); | |
| } | |
| console.log('[extract-brand-styles] Calling Firecrawl branding API for:', url); | |
| const firecrawlResponse = await fetch('https://api.firecrawl.dev/v2/scrape', { | |
| method: 'POST', | |
| headers: { | |
| 'Authorization': `Bearer ${FIRECRAWL_API_KEY}`, | |
| 'Content-Type': 'application/json', | |
| }, | |
| body: JSON.stringify({ | |
| url: url, | |
| formats: ['branding'], | |
| }), | |
| }); | |
| if (!firecrawlResponse.ok) { | |
| const errorText = await firecrawlResponse.text(); | |
| console.error('[extract-brand-styles] Firecrawl API error:', firecrawlResponse.status, errorText); | |
| throw new Error(`Firecrawl API returned ${firecrawlResponse.status}`); | |
| } | |
| const firecrawlData = await firecrawlResponse.json(); | |
| console.log('[extract-brand-styles] Firecrawl response received successfully'); | |
| // Extract branding data from response | |
| const brandingData = firecrawlData.data?.branding || firecrawlData.branding; | |
| if (!brandingData) { | |
| console.error('[extract-brand-styles] No branding data in Firecrawl response'); | |
| console.log('[extract-brand-styles] Response structure:', JSON.stringify(firecrawlData, null, 2)); | |
| throw new Error('No branding data in Firecrawl response'); | |
| } | |
| console.log('[extract-brand-styles] Successfully extracted branding data'); | |
| // Return the branding data | |
| return NextResponse.json({ | |
| success: true, | |
| url, | |
| styleName: brandingData.name || url, | |
| guidelines: brandingData, | |
| }); | |
| } catch (error) { | |
| console.error('[extract-brand-styles] Error occurred:', error); | |
| return NextResponse.json( | |
| { | |
| success: false, | |
| error: error instanceof Error ? error.message : 'Failed to extract brand styles' | |
| }, | |
| { status: 500 } | |
| ); | |
| } | |
| } | |