import { fetchFacebookItems } from "@marketplace-scrapers/core"; /** * GET /api/facebook?q={query}&location={location} * Search Facebook Marketplace for listings */ export async function facebookRoute(req: Request): Promise { const reqUrl = new URL(req.url); const SEARCH_QUERY = req.headers.get("query") || reqUrl.searchParams.get("q") || null; if (!SEARCH_QUERY) return Response.json( { message: "Request didn't have 'query' header or 'q' search parameter!", }, { status: 400 }, ); const LOCATION = reqUrl.searchParams.get("location") || "toronto"; const maxItemsParam = reqUrl.searchParams.get("maxItems"); const maxItems = maxItemsParam ? parseInt(maxItemsParam, 10) : 25; if (maxItemsParam && Number.isNaN(maxItems)) { return Response.json( { message: "Invalid maxItems parameter" }, { status: 400 }, ); } const hideUnstableResults = reqUrl.searchParams.get("unstableFilter") === "true"; try { const items = await fetchFacebookItems( SEARCH_QUERY, 1, LOCATION, maxItems, ...(hideUnstableResults ? [{ hideUnstableResults: true }] : []), ); const isEmpty = hideUnstableResults ? items.results.length === 0 && items.unstableResults.length === 0 : !items || items.length === 0; if (isEmpty) return Response.json( { message: "Search didn't return any results!" }, { status: 404 }, ); return Response.json(items, { status: 200 }); } catch (error) { console.error("Facebook scraping error:", error); const errorMessage = error instanceof Error ? error.message : "Unknown error occurred"; return Response.json({ message: errorMessage }, { status: 400 }); } }