From 5871644e8b0c1b5f9e8f18670f847882bbec6678 Mon Sep 17 00:00:00 2001 From: Dmytro Stanchiev Date: Thu, 22 Jan 2026 19:52:09 -0500 Subject: [PATCH] refactor: improve search extraction with edge case handling --- src/facebook.ts | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/facebook.ts b/src/facebook.ts index 2c7cfda..08ccf9d 100644 --- a/src/facebook.ts +++ b/src/facebook.ts @@ -488,7 +488,7 @@ function extractFacebookMarketplaceData( let marketplaceData: FacebookMarketplaceSearch | null = null; // Find the script containing the require data with marketplace_search - for (const script of scripts as unknown as HTMLScriptElement[]) { + for (const script of Array.from(scripts) as HTMLScriptElement[]) { const scriptText = script.textContent; if (!scriptText) continue; @@ -520,7 +520,7 @@ function extractFacebookMarketplaceData( for (const getData of paths) { try { const result = getData(); - if (result && isRecord(result) && result.feed_units?.edges) { + if (result && isRecord(result) && result.feed_units?.edges?.length > 0) { marketplaceData = result as FacebookMarketplaceSearch; break; } @@ -533,17 +533,19 @@ function extractFacebookMarketplaceData( } // Also check for direct marketplace_search in the parsed data - if (parsed.marketplace_search && isRecord(parsed.marketplace_search) && parsed.marketplace_search.feed_units?.edges) { - marketplaceData = parsed.marketplace_search as FacebookMarketplaceSearch; - break; + if (parsed.marketplace_search && isRecord(parsed.marketplace_search)) { + const searchData = parsed.marketplace_search as FacebookMarketplaceSearch; + if (searchData.feed_units?.edges?.length > 0) { + marketplaceData = searchData; + break; + } } } catch { // Ignore parsing errors for other scripts - continue; } } - if (!marketplaceData?.feed_units?.edges) { + if (!marketplaceData?.feed_units?.edges?.length) { console.warn("No marketplace data found in HTML response"); return null; }