feat(api/ebay): add maxItems parameter and error handling

This commit is contained in:
2026-01-23 09:53:00 -05:00
parent 7b106c91ce
commit 050fd0adba

View File

@@ -5,6 +5,7 @@ import { fetchEbayItems } from "@marketplace-scrapers/core";
* Search eBay for listings (default: Buy It Now only, Canada only) * Search eBay for listings (default: Buy It Now only, Canada only)
*/ */
export async function ebayRoute(req: Request): Promise<Response> { export async function ebayRoute(req: Request): Promise<Response> {
try {
const reqUrl = new URL(req.url); const reqUrl = new URL(req.url);
const SEARCH_QUERY = const SEARCH_QUERY =
@@ -18,23 +19,26 @@ export async function ebayRoute(req: Request): Promise<Response> {
{ status: 400 }, { status: 400 },
); );
// Parse optional parameters with defaults const minPriceParam = reqUrl.searchParams.get("minPrice");
const minPrice = reqUrl.searchParams.get("minPrice") const minPrice = minPriceParam ? parseInt(minPriceParam, 10) : undefined;
? parseInt(reqUrl.searchParams.get("minPrice")!) const maxPriceParam = reqUrl.searchParams.get("maxPrice");
: undefined; const maxPrice = maxPriceParam ? parseInt(maxPriceParam, 10) : undefined;
const maxPrice = reqUrl.searchParams.get("maxPrice")
? parseInt(reqUrl.searchParams.get("maxPrice")!)
: undefined;
const strictMode = reqUrl.searchParams.get("strictMode") === "true"; const strictMode = reqUrl.searchParams.get("strictMode") === "true";
const buyItNowOnly = reqUrl.searchParams.get("buyItNowOnly") !== "false"; const buyItNowOnly = reqUrl.searchParams.get("buyItNowOnly") !== "false";
const canadaOnly = reqUrl.searchParams.get("canadaOnly") !== "false"; const canadaOnly = reqUrl.searchParams.get("canadaOnly") !== "false";
const exclusionsParam = reqUrl.searchParams.get("exclusions"); const exclusionsParam = reqUrl.searchParams.get("exclusions");
const exclusions = exclusionsParam ? exclusionsParam.split(",").map(s => s.trim()) : []; const exclusions = exclusionsParam
? exclusionsParam.split(",").map((s) => s.trim())
: [];
const keywordsParam = reqUrl.searchParams.get("keywords"); const keywordsParam = reqUrl.searchParams.get("keywords");
const keywords = keywordsParam ? keywordsParam.split(",").map(s => s.trim()) : [SEARCH_QUERY]; const keywords = keywordsParam
? keywordsParam.split(",").map((s) => s.trim())
: [SEARCH_QUERY];
try { const maxItemsParam = reqUrl.searchParams.get("maxItems");
const items = await fetchEbayItems(SEARCH_QUERY, 5, { const maxItems = maxItemsParam ? parseInt(maxItemsParam, 10) : undefined;
const items = await fetchEbayItems(SEARCH_QUERY, 1, {
minPrice, minPrice,
maxPrice, maxPrice,
strictMode, strictMode,
@@ -43,18 +47,19 @@ export async function ebayRoute(req: Request): Promise<Response> {
buyItNowOnly, buyItNowOnly,
canadaOnly, canadaOnly,
}); });
if (!items || items.length === 0)
const results = maxItems ? items.slice(0, maxItems) : items;
if (!results || results.length === 0)
return Response.json( return Response.json(
{ message: "Search didn't return any results!" }, { message: "Search didn't return any results!" },
{ status: 404 }, { status: 404 },
); );
return Response.json(items, { status: 200 }); return Response.json(results, { status: 200 });
} catch (error) { } catch (error) {
console.error("eBay scraping error:", error); console.error("eBay scraping error:", error);
const errorMessage = error instanceof Error ? error.message : "Unknown error occurred"; const errorMessage =
return Response.json( error instanceof Error ? error.message : "Unknown error occurred";
{ message: errorMessage }, return Response.json({ message: errorMessage }, { status: 400 });
{ status: 400 },
);
} }
} }