From 050fd0adbaecea8f1076054dbc917466039f1b25 Mon Sep 17 00:00:00 2001 From: Dmytro Stanchiev Date: Fri, 23 Jan 2026 09:53:00 -0500 Subject: [PATCH] feat(api/ebay): add maxItems parameter and error handling --- packages/api-server/src/routes/ebay.ts | 103 +++++++++++++------------ 1 file changed, 54 insertions(+), 49 deletions(-) diff --git a/packages/api-server/src/routes/ebay.ts b/packages/api-server/src/routes/ebay.ts index 720d9b6..4219310 100644 --- a/packages/api-server/src/routes/ebay.ts +++ b/packages/api-server/src/routes/ebay.ts @@ -5,56 +5,61 @@ import { fetchEbayItems } from "@marketplace-scrapers/core"; * Search eBay for listings (default: Buy It Now only, Canada only) */ export async function ebayRoute(req: Request): Promise { - const reqUrl = new URL(req.url); + try { + 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 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 }, + ); - // Parse optional parameters with defaults - const minPrice = reqUrl.searchParams.get("minPrice") - ? parseInt(reqUrl.searchParams.get("minPrice")!) - : undefined; - const maxPrice = reqUrl.searchParams.get("maxPrice") - ? parseInt(reqUrl.searchParams.get("maxPrice")!) - : undefined; - const strictMode = reqUrl.searchParams.get("strictMode") === "true"; - const buyItNowOnly = reqUrl.searchParams.get("buyItNowOnly") !== "false"; - const canadaOnly = reqUrl.searchParams.get("canadaOnly") !== "false"; - const exclusionsParam = reqUrl.searchParams.get("exclusions"); - const exclusions = exclusionsParam ? exclusionsParam.split(",").map(s => s.trim()) : []; - const keywordsParam = reqUrl.searchParams.get("keywords"); - const keywords = keywordsParam ? keywordsParam.split(",").map(s => s.trim()) : [SEARCH_QUERY]; + const minPriceParam = reqUrl.searchParams.get("minPrice"); + const minPrice = minPriceParam ? parseInt(minPriceParam, 10) : undefined; + const maxPriceParam = reqUrl.searchParams.get("maxPrice"); + const maxPrice = maxPriceParam ? parseInt(maxPriceParam, 10) : undefined; + const strictMode = reqUrl.searchParams.get("strictMode") === "true"; + const buyItNowOnly = reqUrl.searchParams.get("buyItNowOnly") !== "false"; + const canadaOnly = reqUrl.searchParams.get("canadaOnly") !== "false"; + const exclusionsParam = reqUrl.searchParams.get("exclusions"); + const exclusions = exclusionsParam + ? exclusionsParam.split(",").map((s) => s.trim()) + : []; + const keywordsParam = reqUrl.searchParams.get("keywords"); + const keywords = keywordsParam + ? keywordsParam.split(",").map((s) => s.trim()) + : [SEARCH_QUERY]; - try { - const items = await fetchEbayItems(SEARCH_QUERY, 5, { - minPrice, - maxPrice, - strictMode, - exclusions, - keywords, - buyItNowOnly, - canadaOnly, - }); - if (!items || items.length === 0) - return Response.json( - { message: "Search didn't return any results!" }, - { status: 404 }, - ); - return Response.json(items, { status: 200 }); - } catch (error) { - console.error("eBay scraping error:", error); - const errorMessage = error instanceof Error ? error.message : "Unknown error occurred"; - return Response.json( - { message: errorMessage }, - { status: 400 }, - ); - } + const maxItemsParam = reqUrl.searchParams.get("maxItems"); + const maxItems = maxItemsParam ? parseInt(maxItemsParam, 10) : undefined; + + const items = await fetchEbayItems(SEARCH_QUERY, 1, { + minPrice, + maxPrice, + strictMode, + exclusions, + keywords, + buyItNowOnly, + canadaOnly, + }); + + const results = maxItems ? items.slice(0, maxItems) : items; + + if (!results || results.length === 0) + return Response.json( + { message: "Search didn't return any results!" }, + { status: 404 }, + ); + return Response.json(results, { status: 200 }); + } catch (error) { + console.error("eBay scraping error:", error); + const errorMessage = + error instanceof Error ? error.message : "Unknown error occurred"; + return Response.json({ message: errorMessage }, { status: 400 }); + } }