{"version":3,"file":"index.modern.mjs","sources":["../src/config/index.ts","../src/providers/log/index.ts","../src/utils/index.ts","../src/modules/openai.ts","../src/sources/article.ts","../src/sources/builddotcom.ts","../src/sources/etsy.ts","../src/sources/fineartamerica.ts","../src/sources/google.ts","../src/sources/homedepot.ts","../src/sources/ikea.ts","../src/sources/rugsdotcom.ts","../src/sources/zgallerie.ts","../src/types/scrapperOutput.ts","../src/client.ts","../src/sources/potterybarn.ts","../src/sources/wayfair.ts","../src/sources/westelm.ts"],"sourcesContent":["import { config } from 'dotenv';\n\nimport pkg from '../../package.json';\n\nconfig();\n\nexport default {\n  APP: {\n    NAME: pkg.name,\n    VERSION: pkg.version,\n    DESCRIPTION: pkg.description,\n    AUTHOR: pkg.author,\n    STAGE: (process.env.NODE_ENV === 'development' ? 'dev' : 'prod') as 'dev' | 'prod',\n    ENV: (process.env.NODE_ENV || 'development') as 'development' | 'production',\n  },\n  SERP: {\n    API_KEY: process.env.SERP_API_KEY || '',\n  },\n  OPEN_AI: {\n    API_KEY: process.env.OPEN_AI_SECRET_KEY ?? '',\n    ORG_ID: process.env.OPEN_AI_ORG_ID || undefined,\n    MODEL: process.env.OPEN_AI_MODEL || 'gpt-4o-mini',\n  },\n  GOOGLE: {\n    API_KEY: process.env.GOOGLE_API_KEY || '',\n    CSE_ID: process.env.GOOGLE_CSE_ID || '',\n  },\n};\n","/* eslint-disable no-console */\nexport class Logger {\n  constructor(private readonly name: string) {}\n\n  info(message: string, ...args: any) {\n    console.log(`[${this.name}] ${message}:`, ...args);\n  }\n\n  error(message: string, ...args: any) {\n    console.error(`[${this.name}] ${message}:`, ...args);\n  }\n\n  warn(message: string, ...args: any) {\n    console.warn(`[${this.name}] ${message}:`, ...args);\n  }\n\n  debug(message: string, ...args: any) {\n    console.debug(`[${this.name}] ${message}:`, ...args);\n  }\n\n  trace(message: string, ...args: any) {\n    console.trace(`[${this.name}] ${message}:`, ...args);\n  }\n}\n","/* eslint-disable no-param-reassign */\n/* eslint-disable no-restricted-syntax */\n\nimport axios from 'axios';\n\n// to always return type string event when s may be falsy other than empty-string\nexport const capitalize = (s: string) => {\n  if (!s) {\n    return 'Unnamed room';\n  }\n  // replace / with whitespace\n  s = s.replace(/\\//g, ' ');\n  // replace : with whitespace\n  s = s.replace(/:/g, ' ');\n  // replace , with whitespace\n  s = s.replace(/,/g, ' ');\n  // replace - with whitespace\n  s = s.replace(/-/g, ' ');\n  // replace _ with whitespace\n  s = s.replace(/_/g, ' ');\n  s = s.replaceAll('  ', ' ');\n  // capitalize first letter of each word\n  s = s.replace(/(^\\w{1})|(\\s+\\w{1})/g, (letter) => letter.toUpperCase());\n  // remove any numbers from the end\n  s = s.replace(/[\\d.]+$/, '');\n  return s.trim(); // trim trailing whitespace\n};\n\nexport function removeNullsAndUndefined(obj: Record<string, any>) {\n  for (const propName in obj) {\n    if (obj[propName] === null || obj[propName] === undefined || obj[propName] === '') {\n      delete obj[propName];\n    }\n  }\n}\n\ninterface ParseJSONOptions {\n  throwOnError?: boolean;\n  defaultValue?: any;\n}\n\n/**\n * Parses JSON from a markdown string or plain JSON string\n * @param mdString - The input string containing JSON (with or without markdown formatting)\n * @param options - Configuration options for parsing\n * @returns Parsed JSON object or default value if parsing fails\n * @throws Error if parsing fails and throwOnError is true\n * @examples\n ```typescript\n // With type safety\n interface User {\n   name: string;\n   age: number;\n }\n\n // Basic usage\n const user = parseJSONFromMarkdownString<User>(\\`\n   \\`\\`\\`json\n   {\n     \"name\": \"John\",\n     \"age\": 30\n   }\n   \\`\\`\\`\n \\`);\n\n // With options\n const userWithFallback = parseJSONFromMarkdownString<User>(\n   invalidJson,\n   {\n     throwOnError: false,\n     defaultValue: { name: 'Unknown', age: 0 }\n   }\n );\n\n // Direct JSON parsing\n const plainJsonUser = parseJSONFromMarkdownString<User>('{\"name\": \"John\", \"age\": 30}');\n ```\n */\nexport function parseJSONFromMarkdownString<T = any>(mdString: string, options: ParseJSONOptions = { throwOnError: true }): T {\n  try {\n    // Guard against invalid input\n    if (!mdString || typeof mdString !== 'string') {\n      throw new Error('Input must be a non-empty string');\n    }\n\n    // Normalize line endings\n    const normalizedString = mdString.replace(/\\r\\n/g, '\\n');\n\n    // Extract JSON content\n    let jsonString = normalizedString;\n    if (normalizedString.includes('```json')) {\n      // Find content between ```json and the next ```\n      const jsonBlockRegex = /```json\\s*([\\s\\S]*?)\\s*```/;\n      const matches = normalizedString.match(jsonBlockRegex);\n\n      if (!matches || !matches[1]) {\n        throw new Error('Invalid markdown JSON format');\n      }\n      [, jsonString] = matches;\n    }\n\n    // Clean up whitespace and try to parse\n    const trimmedString = jsonString.trim();\n    const parsed = JSON.parse(trimmedString);\n\n    // Validate that we got a value back\n    if (parsed === undefined) {\n      throw new Error('Parsing resulted in undefined value');\n    }\n\n    return parsed as T;\n  } catch (error) {\n    if (options.throwOnError) {\n      throw new Error(`Failed to parse JSON: ${(error as Error).message} => ${mdString}`);\n    }\n    return options.defaultValue as T;\n  }\n}\n\nexport async function getHtml(url: string) {\n  const parsedUrl = new URL(url);\n  let { data: html } = await axios\n    .get<string>(url, {\n      headers: {\n        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',\n        Accept: 'application/json, text/plain, */*',\n        'Accept-Encoding': 'gzip, deflate, br',\n        'Content-Type': 'application/json',\n        'X-Requested-With': 'XMLHttpRequest',\n        Origin: parsedUrl.origin,\n        Host: parsedUrl.host,\n        Connection: 'keep-alive',\n      },\n    })\n    .catch((err) => {\n      console.debug('getHtml.axios.get', err.message, err.response);\n      return { data: '<html><head><title></title></head></html>' };\n    });\n  if (typeof html !== 'string') {\n    html = JSON.stringify(html);\n  }\n  return html;\n}\n","import type { Tiktoken, TiktokenModel } from 'js-tiktoken';\nimport { encodingForModel } from 'js-tiktoken';\nimport { OpenAI } from 'openai';\n\nimport { Logger } from '@/providers/log';\nimport type { ProductMetadata } from '@/types/scrapperOutput';\nimport { parseJSONFromMarkdownString } from '@/utils';\n\nconst logger = new Logger('OpenAIService');\n\nexport const getClient = (config: { apiKey: string; organization?: string }) => new OpenAI(config);\n\n/**\n * @deprecated since version 1.2.0. Use {@link scrapeUsingAI} instead\n */\nexport const getCompletion = async (prompt: string, client: OpenAI, model = 'gpt-4o-mini') => {\n  try {\n    const result = await client.chat.completions.create({\n      model,\n      messages: [\n        {\n          role: 'system',\n          content: prompt,\n        },\n      ],\n      n: 1,\n      temperature: 0,\n    });\n\n    return result.choices[0]?.message?.content;\n  } catch (err) {\n    logger.error('getCompletion', (err as any).message);\n    return undefined;\n  }\n};\n\nconst trimToTokenLimit = (text: string, enc: Tiktoken, maxTokens = 128000, separator = '-------'): string => {\n  // Add input validation\n  if (!text || !enc) {\n    return text;\n  }\n\n  const tokens = enc.encode(text);\n\n  if (tokens.length <= maxTokens) {\n    return text;\n  }\n\n  if (text.includes(separator)) {\n    const parts = text.split(separator);\n    if (parts.length !== 3) {\n      // Handle invalid format more gracefully\n      return enc.decode(tokens.slice(0, maxTokens));\n    }\n\n    const [beforeHtml, html, afterHtml] = parts;\n    const beforeTokens = enc.encode(beforeHtml).length;\n    const afterTokens = enc.encode(afterHtml).length;\n    const intermediatoryTokens = enc.encode(`${separator}...[content trimmed]...${separator}`).length;\n\n    const availableTokens = maxTokens - beforeTokens - afterTokens - intermediatoryTokens;\n    if (availableTokens < 0) {\n      // Handle case where surrounding content is already too large\n      return enc.decode(tokens.slice(0, maxTokens));\n    }\n\n    const htmlTokens = enc.encode(html);\n    const halfAvailable = Math.floor(availableTokens / 2);\n    const startHtml = enc.decode(htmlTokens.slice(0, halfAvailable));\n    const endHtml = enc.decode(htmlTokens.slice(-halfAvailable));\n\n    return `${beforeHtml}${separator}${startHtml}...[content trimmed]...${endHtml}${separator}${afterHtml}`;\n  }\n\n  return enc.decode(tokens.slice(0, maxTokens));\n};\n\nexport const scrapeUsingAI = async (\n  client: OpenAI,\n  productUrl: string,\n  htmlContent?: string,\n  userId?: string,\n  metadata?: Record<string, string>,\n  model = 'gpt-4o-mini',\n  trimToMaxToken = 112000,\n  timeoutSeconds = 29,\n) => {\n  try {\n    const enc = encodingForModel(model as TiktokenModel);\n    const systemContext = `You are tasked with a job to accept from a given product URL and optionally its HTML content from the user and return the extracted information in a structured JSON format. You should not prompt the user to provide any additional details; rather, work with the details that are already provided to you.\n\nYou should be able to extract the following information:\n- **Product Name**\n- **Description**: A string describing the product in one line, such that when this string is searched in Google, it shows similar products.\n- **Tags**: A list of comma-separated words relating to the product.\n- **Product URL**\n- **Type**: One of the following: bathtub, bed, bench, bookshelf, cabinet, chair, coffee_table, console_table, day_bed, desk, dressing_table, faucet, floor_lamp, futon, light, loveseat, mattress, mirror, nightstand, painting, plant_stand, rug, side_table, sink, sleeper_sofa, sofa, sofa_bed, stool, storage_unit, study_table, table_lamp, toy, tv_stand, vanity, wall_lamp, wall_mirror, wall_shelf, water_closet.\n- **Price**: Converted to US dollars in format XXX.XX.\n- **Exact Height**: In inches and up to one decimal place, in XX.X format with unit converted to inches.\n- **Exact Width**: In inches and up to one decimal place, in XX.X format with unit converted to inches.\n- **Exact Depth**: In inches and up to one decimal place, in XX.X format with unit converted to inches.\n- **Images**: A list of image URLs.\n- **SKU**\n- **Source**: Brand name.\n\nThe information should be structured properly in the following JSON schema:\n\n{\n  \"product_name\": string,\n  \"product_url\": string,\n  \"type\": string,\n  \"price\": number,\n  \"height\": number,\n  \"width\": number,\n  \"depth\": number,\n  \"tags\": string,\n  \"images\": string[],\n  \"sku\": string,\n  \"source\": string,\n  \"description\": string\n}\n\n# Output Format\nStrictly return the extracted information in plain JSON format without any plain text and without any markdown formatting.\n\n# Examples\n\nExample JSON object for the product URL: [https://www.ikea.com/us/en/p/haegernaes-table-and-4-chairs-antique-stain-pine-70575947/]\n\n{\n  \"product_name\": \"HÄGERNÄS\",\n  \"product_url\": \"https://www.ikea.com/us/en/p/haegernaes-table-and-4-chairs-antique-stain-pine-70575947/\",\n  \"type\": \"table\",\n  \"price\": 199.99,\n  \"height\": 29.50,\n  \"width\": 59.10,\n  \"depth\": 35.40,\n  \"tags\": \"table, chairs, dining, antique, pine, furniture\",\n  \"images\": [\n    \"https://www.ikea.com/us/en/images/products/haegernaes-table-and-4-chairs-antique-stain-pine__1350925_pe951817_s5.jpg\"\n  ],\n  \"sku\": \"70575947\",\n  \"source\": \"ikea\",\n  \"description\": \"This sturdy dining set with a table and four chairs is perfect for your breakfast nook or smaller dining area. Solid pine is a natural material that ages beautifully and acquires its own unique character over time. Each table and chair has its own unique character due to the distinctive grain pattern. For a softer seat or to add a personal touch to the room, complete with a chair pad in the style and color of your choice.\"\n}`;\n    let userPrompt = `Here's the product URL: ${productUrl}${\n      htmlContent\n        ? `\\nand the HTML content:\n-------\n${htmlContent}\n-------\n`\n        : ''\n    }`.substring(0, 1048575);\n\n    const reservedTokens = enc.encode(systemContext).length;\n    const availableTokens = trimToMaxToken - reservedTokens;\n    userPrompt = trimToTokenLimit(userPrompt, enc, availableTokens);\n\n    // Create the main API call promise\n    const apiCallPromise = client.chat.completions.create({\n      model,\n      messages: [\n        {\n          role: 'system',\n          content: systemContext,\n        },\n        {\n          role: 'user',\n          content: userPrompt,\n        },\n      ],\n      n: 1,\n      temperature: 0,\n      response_format: {\n        type: 'json_object',\n      },\n      stream: false,\n      user: userId,\n      metadata,\n    });\n\n    // If timeout is provided, race between the API call and a timeout promise\n    if (timeoutSeconds) {\n      const timeoutPromise = new Promise((_, reject) => {\n        setTimeout(() => {\n          reject(new Error(`Operation timed out after ${timeoutSeconds} seconds`));\n        }, timeoutSeconds * 1000);\n      });\n\n      const result = (await Promise.race([apiCallPromise, timeoutPromise])) as OpenAI.Chat.Completions.ChatCompletion;\n      return parseJSONFromMarkdownString<ProductMetadata>(result.choices[0]?.message?.content || '');\n    }\n\n    // If no timeout provided, just execute the API call\n    const result = await apiCallPromise;\n    return parseJSONFromMarkdownString<ProductMetadata>(result.choices[0]?.message?.content || '');\n  } catch (error) {\n    logger.error('scrapeUsingAI', error instanceof Error ? error.message : 'Unknown error');\n    return {} as ProductMetadata;\n  }\n};\n","/* eslint-disable no-param-reassign */\nimport { load } from 'cheerio';\n\nimport { getHtml } from '@/utils';\n\nimport type { ScrapperOutput } from '../types/scrapperOutput';\n\nexport class Article {\n  readonly url: string;\n\n  constructor(url: string) {\n    this.url = url;\n  }\n\n  async extract(html?: string) {\n    if (!html) {\n      if (!this.url.includes('article')) {\n        throw new Error('Invalid URL');\n      }\n      html = await getHtml(this.url);\n    }\n    const $ = load(html!);\n    const dimension = $('#details > div > div.content.desktop.flex-grid > div:nth-child(3) > div > div')\n      .html()\n      ?.match(/[\\d.]+\"H x [\\d.]+\"W x [\\d.]+\"D/gm)?.[0];\n    const res: ScrapperOutput = {\n      product_name: $(\n        '#app > div > div.app-container-wrapper > div > div > div.product-nav > div.product-nav-desktop.container > div > div.primary-info > div > h2',\n      )\n        .text()\n        .replace(/[\\r\\n]/gm, '')\n        .trim(),\n      images: $(\n        '#app > div > div.app-container-wrapper > div > div > div.main-layout > div.product-buy-section-container.container.product-page-buy-section > div > div.product-buy-images > div.product-thumbnails-container > div > a.active.product-thumbnail > div > picture > img',\n      )\n        .map((_i, el) => $(el).attr('src')?.substring(0, $(el).attr('src')?.indexOf('?')))\n        .get(),\n      depth: dimension?.split('x')[2]?.trim()?.replace(/\\D+/g, ''),\n      width: dimension?.split('x')[1]?.trim()?.replace(/\\D+/g, ''),\n      height: dimension?.split('x')[0]?.trim()?.replace(/\\D+/g, ''),\n      price: $(\n        '#app > div > div.app-container-wrapper > div > div > div.product-nav > div.product-nav-desktop.container > div > div.product-navbar-desktop > div.sale-price > div > span',\n      )\n        .text()\n        ?.replace(/[\\r\\n]/gm, '')\n        ?.replace(/\\D+/g, '')\n        ?.trim(),\n      source: 'article',\n      product_url: this.url,\n    };\n    return res;\n  }\n}\n","/* eslint-disable no-param-reassign */\nimport { load } from 'cheerio';\n\nimport { getHtml } from '@/utils';\n\nimport type { ScrapperOutput } from '../types/scrapperOutput';\n\nexport interface ProductJSON {\n  '@context': string;\n  '@type': string;\n  name: string;\n  description: string;\n  productID: string;\n  image: string;\n  sku: string;\n  brand: Brand;\n  offers: Offers;\n  aggregateRating: AggregateRating;\n}\n\nexport interface AggregateRating {\n  '@type': string;\n  ratingValue: number;\n  reviewCount: number;\n  worstRating: number;\n  bestRating: number;\n}\n\nexport interface Brand {\n  '@type': string;\n  name: string;\n}\n\nexport interface Offers {\n  '@type': string;\n  '@id': string;\n  priceCurrency: string;\n  price: number;\n  sku: string;\n  availability: string;\n  seller: Brand;\n  url: string;\n}\n\nexport class Builddotcom {\n  readonly url: string;\n\n  constructor(url: string) {\n    this.url = url;\n  }\n\n  async extract(html?: string) {\n    if (!html) {\n      if (!this.url.includes('build.com')) {\n        throw new Error('Invalid URL');\n      }\n      html = await getHtml(this.url);\n    }\n    const $ = load(html!);\n    const productJson: ProductJSON = JSON.parse(\n      $('#main-content > div.center-ns.mw9-ns.b--theme-grey.bg-theme-white.ba-ns.pa2.pa3-ns.mt3-ns.mb3 > script').text(),\n    );\n    const thumbnail = productJson.image.replace('t_base,c_lpad,f_auto,dpr_auto,w_1200,h_1200', 't_base');\n    const productName = $('#pdp-buysection > div.cf.flex.db-ns.flex-column > div.fl.w-50-ns.order-0 > section > h1 > span.fw2.di-ns')\n      .text()\n      .replace(/[\\r\\n]/gm, '')\n      .trim();\n    const res: ScrapperOutput = {\n      product_name: productJson.name,\n      images: thumbnail ? [thumbnail] : [],\n      price: productJson.offers.price.toString(),\n      source: 'build.com',\n      sku: productJson.offers.sku,\n      product_url: productJson.offers.url,\n      artist: productJson.brand.name,\n      description: productName,\n      'supporting-surface': productJson.description.toLowerCase().includes('wall') ? 'wall' : 'floor',\n    };\n    return res;\n  }\n}\n","/* eslint-disable no-param-reassign */\nimport { load } from 'cheerio';\n\nimport { getHtml } from '@/utils';\n\nimport type { ScrapperOutput } from '../types/scrapperOutput';\n\nexport class Etsy {\n  readonly url: string;\n\n  constructor(url: string) {\n    this.url = url;\n  }\n\n  async extract(html?: string) {\n    if (!html) {\n      if (!this.url.includes('etsy')) {\n        throw new Error('Invalid URL');\n      }\n      html = await getHtml(this.url);\n    }\n    const $ = load(html!);\n    const res: ScrapperOutput = {\n      product_name: $('#listing-page-cart > div.wt-mb-xs-2 > h1')\n        .text()\n        .replace(/[\\r\\n]/gm, '')\n        .trim(),\n      images: $(\n        '#listing-right-column > div > div.body-wrap.wt-body-max-width.wt-display-flex-md.wt-flex-direction-column-xs > div.image-col.wt-order-xs-1.wt-mb-lg-6 > div > div > div.image-wrapper.wt-position-relative.carousel-container-responsive > div > div.image-carousel-container.wt-position-relative.wt-flex-xs-6.wt-order-xs-2.show-scrollable-thumbnails > ul > li > img',\n      )\n        .map((_i, el) => $(el).attr('data-src-zoom-image'))\n        .get(),\n      height: $('#product-details-content-toggle > div > ul > div > div:nth-last-child(1) > li > div')\n        .filter((_i, el) => $(el).text().includes('Height'))\n        .text()\n        ?.split(':')[1]\n        ?.trim()\n        ?.replace(/\\D+/g, ''),\n      width: $('#product-details-content-toggle > div > ul > div > div:nth-last-child(1) > li > div')\n        .filter((_i, el) => $(el).text().includes('Width'))\n        .text()\n        ?.split(':')[1]\n        ?.trim()\n        ?.replace(/\\D+/g, ''),\n      depth: $('#product-details-content-toggle > div > ul > div > div:nth-last-child(1) > li > div')\n        .filter((_i, el) => $(el).text().includes('Depth'))\n        .text()\n        ?.split(':')[1]\n        ?.trim()\n        ?.replace(/\\D+/g, ''),\n      material: $('#legacy-materials-product-details').text()?.split(':').pop()?.trim(),\n      price: $(\n        '#listing-page-cart > div.wt-mb-xs-6.wt-mb-lg-0 > div:nth-child(1) > div.wt-mb-xs-3 > div.wt-mb-xs-3 > div.wt-display-flex-xs.wt-align-items-center.wt-justify-content-space-between > div.wt-display-flex-xs.wt-align-items-center > p > span:nth-child(2)',\n      )\n        .text()\n        .replace(/[\\r\\n]/gm, '')\n        .trim(),\n      sku: this.url.split('/')[this.url.split('/').length - 2],\n      artist: $(\n        '#desktop_shop_owners_parent > div > div > div.wt-display-flex-xs.wt-align-items-center.wt-mb-xs-2 > div:nth-child(2) > p.wt-text-body-03.wt-line-height-tight.wt-mb-xs-1',\n      )\n        .text()\n        .trim(),\n      source: 'etsy',\n      product_url: this.url,\n    };\n    return res;\n  }\n}\n","/* eslint-disable no-param-reassign */\nimport { load } from 'cheerio';\n\nimport { getHtml } from '@/utils';\n\nimport type { ScrapperOutput } from '../types/scrapperOutput';\n\nexport class Fineartamerica {\n  readonly url: string;\n\n  constructor(url: string) {\n    this.url = url;\n  }\n\n  async extract(html?: string) {\n    if (!html) {\n      if (!this.url.includes('fineartamerica')) {\n        throw new Error('Invalid URL');\n      }\n      html = await getHtml(this.url);\n    }\n    const $ = load(html!);\n    const res: ScrapperOutput = {\n      product_name: $('#h1title').text().trim(),\n      images: [$('#productPreviewImage').attr('src')?.trim() ?? $('#mainimage').attr('src')?.trim()].filter((x) => !!x) as string[],\n      material: $('#priceDetailDiv > div:nth-child(2) > p:nth-child(2)').text().trim(),\n      price: `${$('#productCurrency').text().trim()} ${$('#productPrice').text().trim()}`,\n      artist: $('#artistName > a').text().trim(),\n      source: 'fineartamerica',\n      product_url: this.url,\n    };\n    return res;\n  }\n}\n","/* eslint-disable no-param-reassign */\nimport { customsearch } from '@googleapis/customsearch';\nimport { load } from 'cheerio';\nimport { getJson } from 'serpapi';\n\nimport { Logger } from '../providers/log';\nimport type { ScrapperOutput } from '../types/scrapperOutput';\nimport { capitalize, getHtml } from '../utils';\n\nconst logger = new Logger('googleScrapper');\n\nexport class Google {\n  serpApiKey?: string;\n\n  googleApiKey: string = '';\n\n  googleCseId: string = '';\n\n  url: string;\n\n  constructor(\n    config: {\n      url: string;\n    } & (\n      | {\n          serpApiKey: string;\n        }\n      | {\n          googleApiKey: string;\n          googleCseId: string;\n        }\n    ),\n  ) {\n    this.url = config.url;\n    if ('serpApiKey' in config) {\n      this.serpApiKey = config.serpApiKey;\n    } else {\n      this.googleApiKey = config.googleApiKey;\n      this.googleCseId = config.googleCseId;\n    }\n  }\n\n  async getImages(prompt: string, useSerpApi?: boolean): Promise<string[]> {\n    const results: Record<string, any> | undefined = useSerpApi\n      ? await getJson('google', {\n          api_key: this.serpApiKey,\n          q: prompt,\n          gl: 'us',\n          hl: 'en',\n          tbm: 'isch',\n          filter: '1',\n          google_domain: 'google.com',\n          location: 'California, United States',\n        }).catch((err) => {\n          logger.error('getImages.usingSerpApi', err);\n          return undefined;\n        })\n      : await customsearch('v1')\n          .cse.list(\n            {\n              auth: this.googleApiKey,\n              q: prompt, // .replace(/\\s+/g, '+'),\n              cr: 'countryUS',\n              cx: this.googleCseId,\n              gl: 'us',\n              hl: 'en',\n              // lr: 'lang_en',\n              filter: '1',\n              num: 5,\n              safe: 'active',\n              searchType: 'image',\n            },\n            {\n              http2: true,\n            },\n          )\n          .catch((err) => {\n            logger.error('getImages.usingGoogleApi', err);\n            return undefined;\n          });\n    return useSerpApi\n      ? (results?.images_results.slice(0, 3) ?? []).map((image: any) => image.original)\n      : (results?.data.items?.map((item: any) => item.link!) ?? []);\n  }\n\n  async extract(html?: string) {\n    try {\n      if (!html) {\n        html = await getHtml(this.url);\n      }\n      const parsedURL = new URL(this.url);\n      const domain = parsedURL.hostname.replace('www.', '');\n      const domainParts = domain.split('.');\n      const pathName = parsedURL.pathname.replaceAll('/', ' ').trim();\n      const $ = load(html!);\n      const title = `${capitalize(`${pathName} ${$('head > title').text().trim()}`)}`\n        .toLowerCase()\n        .replace(/\\b(?![\\w\\d]+\\b)[^\\s]+\\b/g, '')\n        .replace(domainParts.at(-2) ?? '', '')\n        .replace(/\\s{2,}/g, ' ')\n        .split(' ')\n        .filter(\n          (word) =>\n            !(\n              word.includes('0') ||\n              word.includes('1') ||\n              word.includes('2') ||\n              word.includes('3') ||\n              word.includes('4') ||\n              word.includes('5') ||\n              word.includes('6') ||\n              word.includes('7') ||\n              word.includes('8') ||\n              word.includes('9') ||\n              word.includes('&') ||\n              word.includes('|') ||\n              word.includes('=')\n            ),\n        )\n        .join(' ')\n        .trim();\n      const processedTitle = Array.from(new Set(`${title} from ${domain}`.toLowerCase().split(' '))).join(' ');\n      const images = await this.getImages(processedTitle, !!this.serpApiKey);\n      if (!images.length && this.serpApiKey && this.googleApiKey && this.googleCseId) {\n        logger.warn('No images found, trying without serp api');\n        images.push(...(await this.getImages(processedTitle, false)));\n      }\n      const res: ScrapperOutput = {\n        images,\n        product_name: capitalize(title),\n        source: domainParts.at(-2),\n        product_url: this.url,\n      };\n      return res;\n    } catch (error) {\n      logger.error('extract', (error as any)?.message ?? error);\n      throw error;\n    }\n  }\n}\n","/* eslint-disable no-param-reassign */\nimport { load } from 'cheerio';\n\nimport { getHtml } from '@/utils';\n\nimport type { ScrapperOutput } from '../types/scrapperOutput';\n\nexport interface HomedepotProductStructureData {\n  '@context': string;\n  '@type': string;\n  name: string;\n  image: string[];\n  description: string;\n  productID: string;\n  sku: string;\n  gtin13: string;\n  depth: string;\n  height: string;\n  width: string;\n  color: string;\n  weight: string;\n  brand: Brand;\n  aggregateRating: AggregateRating;\n  offers: Offers;\n  review: Review[];\n}\n\nexport interface AggregateRating {\n  '@type': string;\n  ratingValue: string;\n  reviewCount: number;\n}\n\nexport interface Brand {\n  '@type': BrandType;\n  name: string;\n}\n\nexport enum BrandType {\n  Brand = 'Brand',\n  Person = 'Person',\n}\n\nexport interface Offers {\n  '@type': string;\n  url: string;\n  priceCurrency: string;\n  price: number;\n  priceValidUntil: string;\n  availability: string;\n  hasMerchantReturnPolicy: HasMerchantReturnPolicy;\n}\n\nexport interface HasMerchantReturnPolicy {\n  '@type': string;\n  applicableCountry: string;\n  returnPolicyCategory: string;\n  merchantReturnDays: number;\n}\n\nexport interface Review {\n  '@type': ReviewType;\n  reviewRating: ReviewRating;\n  author: Brand;\n  headline: string;\n  reviewBody: string;\n}\n\nexport enum ReviewType {\n  Review = 'Review',\n}\n\nexport interface ReviewRating {\n  '@type': ReviewRatingType;\n  ratingValue: number;\n  bestRating: string;\n}\n\nexport enum ReviewRatingType {\n  Rating = 'Rating',\n}\n\nexport class Homedepot {\n  readonly url: string;\n\n  constructor(url: string) {\n    this.url = url;\n  }\n\n  async extract(html?: string): Promise<ScrapperOutput> {\n    if (!html) {\n      if (!this.url.includes('homedepot')) {\n        throw new Error('Invalid URL');\n      }\n      html = await getHtml(this.url);\n    }\n    const $ = load(html!);\n    const stringifiedLdJson = $('#thd-helmet__script--productStructureData').html();\n    const ldJson: HomedepotProductStructureData = JSON.parse(stringifiedLdJson ?? '');\n    return {\n      product_name: ldJson.name,\n      images: ldJson.image.map((img) => img.replace('_100', '_1024')),\n      height: ldJson.height,\n      width: ldJson.width,\n      depth: ldJson.depth,\n      material: ldJson.color,\n      price: ldJson.offers.price.toString(),\n      sku: ldJson.sku,\n      artist: ldJson.brand.name,\n      product_url: this.url,\n      source: 'homedepot',\n      description: ldJson.description,\n      tags: 'furniture',\n    };\n  }\n}\n","/* eslint-disable no-param-reassign */\nimport axios from 'axios';\nimport { load } from 'cheerio';\n\nimport { Logger } from '../providers/log';\nimport type { ScrapperOutput } from '../types/scrapperOutput';\n\n// Generated by https://quicktype.io\n\nexport interface IkeaProduct {\n  catalogRefs?: CatalogRefs;\n  currencyCode?: string;\n  experimental?: Experimental;\n  globalId?: string;\n  id?: string;\n  mainImage?: Image;\n  name?: string;\n  pipUrl?: string;\n  price?: string;\n  priceExclTax?: string;\n  priceExclTaxNumeral?: number;\n  priceNumeral?: number;\n  revampPrice?: RevampPrice;\n  styleGroup?: string;\n  typeName?: string;\n  validDesignText?: string;\n}\n\nexport interface CatalogRefs {\n  products: Products;\n  themes: Products;\n}\n\nexport interface Products {\n  elements?: Products[];\n  id: string;\n  name: string;\n  url: string;\n}\n\nexport interface Experimental {\n  contextualImage: Image;\n  isBreathTakingItem: boolean;\n  isFamilyPrice: boolean;\n  isNewLowerPrice: boolean;\n  isNewProduct: boolean;\n  isTimeRestricted: boolean;\n  priceUnit: string;\n  rating: Rating;\n  technicalCompliance: TechnicalCompliance;\n}\n\nexport interface Image {\n  alt: string;\n  id: string;\n  imageFileName: string;\n  type: string;\n  url: string;\n}\n\nexport interface Rating {\n  count: number;\n  enabled: boolean;\n  maxValue: number;\n  percentage: number;\n  value: number;\n}\n\nexport interface TechnicalCompliance {\n  valid: boolean;\n}\n\nexport interface RevampPrice {\n  currencyPrefix: string;\n  currencySuffix: string;\n  currencySuffixZeroDecimals: boolean;\n  currencySymbol: string;\n  decimals: string;\n  hasTrailingCurrency: boolean;\n  integer: string;\n  numDecimals: number;\n  separator: string;\n}\n\n// Generated by https://quicktype.io\n\nexport interface IkeaModel {\n  models: Model[];\n  itemType: string;\n  categorization: Categorization;\n  variations: Variation[];\n}\n\nexport interface Categorization {\n  hfbName: string;\n  hfbId: string;\n  rangeName: string;\n  rangeId: string;\n  areaName: string;\n  areaId: string;\n}\n\nexport interface Model {\n  markets: string[];\n  url: string;\n  geoEnabled: boolean;\n}\n\nexport interface Variation {\n  localId: string;\n  itemType: string;\n  models: Model[];\n}\n\nconst logger = new Logger('IkeaScrapper');\n\nexport class Ikea {\n  static readonly BASE_URL = 'https://www.ikea.com';\n\n  readonly url: string;\n\n  readonly sku: string;\n\n  constructor(url: string) {\n    this.url = url;\n    const { pathname } = new URL(this.url);\n    // remote trailing / from pathname\n    this.sku = pathname.slice(1).replace(/\\/$/, '').split('-').pop()!.replace(/[^\\d]/g, '');\n  }\n\n  async getProductDetails() {\n    try {\n      return await axios\n        .get<IkeaProduct>(`${Ikea.BASE_URL}/us/en/products/${this.sku.slice(-3)}/${this.sku}.json`)\n        .then((response) => response.data);\n    } catch (err) {\n      logger.error('getProductDetails', (err as any)?.message, (err as any).response?.status, (err as any).response?.data);\n      return null;\n    }\n  }\n\n  async getGLBs() {\n    try {\n      return await axios\n        .get<IkeaModel>(`${Ikea.BASE_URL}/global/assets/rotera/resources/${this.sku}.json`)\n        .then((response) => response.data);\n    } catch (err) {\n      logger.debug('getGLBs', (err as any)?.message, (err as any).response?.status, (err as any).response?.data);\n      return null;\n    }\n  }\n\n  async extract(html?: string) {\n    if (!html) {\n      if (!this.url.includes('ikea')) {\n        throw new Error('Invalid URL');\n      }\n      const response = await axios.get(this.url);\n      html = response.data;\n    }\n    const [productDetails, glbs] = await Promise.allSettled([this.getProductDetails(), this.getGLBs()]).then(\n      (resolvedPromises) =>\n        resolvedPromises.map((p) => {\n          if (p.status === 'fulfilled') {\n            return p.value;\n          }\n          return null;\n        }) as [IkeaProduct | null, IkeaModel | null],\n    );\n    let res: ScrapperOutput = {};\n    if (!productDetails || Object.keys(productDetails).length === 0) {\n      const $ = load(html!);\n      res = {\n        product_name: $(\n          '#pip-buy-module-content > div.pip-temp-price-module.pip-temp-price-module--informational.pip-temp-price-module--small.pip-temp-price-module--regular-price-package > div.pip-temp-price-module__information > div > h1 > span.pip-header-section__title--big.notranslate',\n        )\n          .text()\n          .replace(/[\\r\\n]/gm, '')\n          .trim(),\n        images: $('.pip-image')\n          .map((_i, el) => $(el).attr('src'))\n          .get(),\n        depth: $(\n          '#range-modal-mount-node > div > div:nth-child(3) > div > div.pip-sheets__content-wrapper > div > div > div > div.pip-product-dimensions__dimensions-container > p',\n        )\n          .filter((_i, el) => !!$(el).html()?.includes('Length'))\n          .text()\n          ?.split(' ')[0]\n          ?.trim()\n          ?.replace(/\\D+/g, ''),\n        width: $(\n          '#range-modal-mount-node > div > div:nth-child(3) > div > div.pip-sheets__content-wrapper > div > div > div > div.pip-product-dimensions__dimensions-container > p',\n        )\n          .filter((_i, el) => !!$(el).html()?.includes('Width'))\n          .text()\n          ?.split(' ')[0]\n          ?.trim()\n          ?.replace(/\\D+/g, ''),\n        height: $(\n          '#range-modal-mount-node > div > div:nth-child(3) > div > div.pip-sheets__content-wrapper > div > div > div > div.pip-product-dimensions__dimensions-container > p',\n        )\n          .filter((_i, el) => !!$(el).html()?.includes('height'))\n          .text()\n          ?.split(' ')[0]\n          ?.trim()\n          ?.replace(/\\D+/g, ''),\n        price: $(\n          '#pip-buy-module-content > div.pip-temp-price-module.pip-temp-price-module--informational.pip-temp-price-module--small.pip-temp-price-module--regular-price-package > div.pip-temp-price-module__price > div > span > span:nth-child(1) > span.pip-temp-price__integer',\n        )\n          .text()\n          .replace(/[\\r\\n]/gm, '')\n          .trim(),\n        sku: this.sku,\n        source: 'ikea',\n        product_url: this.url,\n        glbs:\n          glbs?.models.map((model: Model) => model.url) ??\n          Array.from(new Set(html!.match(/https:\\/\\/web-api\\.ikea\\.com\\/dimma\\/assets\\/.[^\"]*\\.glb/g))).sort(),\n      };\n    } else {\n      res = {\n        product_name: productDetails?.name,\n        images: productDetails?.mainImage?.url ? [productDetails.mainImage.url] : [],\n        price: productDetails?.priceNumeral?.toString(),\n        sku: this.sku,\n        product_url: this.url,\n        source: 'ikea',\n        glbs: glbs?.models.map((model: Model) => model.url) ?? [],\n      };\n    }\n    return res;\n  }\n}\n","/* eslint-disable no-param-reassign */\nimport { load } from 'cheerio';\n\nimport { getHtml } from '@/utils';\n\nimport type { ScrapperOutput } from '../types/scrapperOutput';\n\nexport class Rugsdotcom {\n  readonly url: string;\n\n  constructor(url: string) {\n    this.url = url;\n  }\n\n  async extract(html?: string) {\n    if (!html) {\n      if (!this.url.includes('rugs.com')) {\n        throw new Error('Invalid URL');\n      }\n      html = await getHtml(this.url);\n    }\n    const $ = load(html!);\n    const thumbnail = $('#FullScreenImageGallery > div:nth-child(3) > div > img').attr('src');\n    const res: ScrapperOutput = {\n      product_name: $(\n        '#react-root > div.row.product-display--content-container > div.col-12.col-md-6.pl-md-0.pr-xl-0.product-display--description > div:nth-child(2) > div > div:nth-child(1) > div > h1',\n      )\n        .text()\n        .replace(/[\\r\\n]/gm, '')\n        .trim(),\n      images: thumbnail ? [thumbnail.substring(0, thumbnail.indexOf('?'))] : [],\n      price: $(\n        '#add_to_cart_form > div:nth-child(1) > div > div > div.col-12.px-md-0.d-flex.align-items-center > span.h2-bold-no-margin.price.mr-2',\n      )\n        .text()\n        ?.replace(/[\\r\\n]/gm, '')\n        ?.replace(/\\D+/g, '')\n        ?.trim(),\n      source: 'rugs.com',\n      sku: $('#react-root > div.row.d-none.d-md-flex.py-3.product-display--breadcrumbs.width-fixed > div > strong').text()?.trim(),\n      product_url: this.url,\n    };\n    return res;\n  }\n}\n","/* eslint-disable no-param-reassign */\n\nimport { getHtml } from '@/utils';\n\nimport type { ScrapperOutput } from '../types/scrapperOutput';\n\nexport class Zgallerie {\n  readonly url: string;\n\n  constructor(url: string) {\n    this.url = url;\n  }\n\n  async extract(html?: string) {\n    if (!html) {\n      if (!this.url.includes('zgallerie')) {\n        throw new Error('Invalid URL');\n      }\n      html = await getHtml(this.url);\n    }\n    const re = /<script id=\"__NEXT_DATA__\" type=\"application\\/json\">(.+)<\\/script>/;\n    const result = html.match(re);\n    const info = JSON.parse(result?.[1]?.substring(0, result[1].indexOf('</script>')) ?? '');\n    const res: ScrapperOutput = {\n      product_name: info.props.pageProps.product.name.split('~')[0],\n      images: info.props.pageProps.product.images.map((image: any) => image.url_zoom),\n      height: info.props.pageProps.product.height?.toString(),\n      width: info.props.pageProps.product.width?.toString(),\n      depth: info.props.pageProps.product.depth?.toString(),\n      price: info.props.pageProps.product.calculated_price?.toString(),\n      sku: info.props.pageProps.product.sku?.toString(),\n      artist: info.props.pageProps.product.additional_info.artist_name ? info.props.pageProps.product.additional_info.artist_name[0] : '',\n      source: 'zgallerie',\n      product_url: this.url,\n    };\n    return res;\n  }\n}\n","export enum Types {\n  BATHTUB = 'bathtub',\n  BED = 'bed',\n  BENCH = 'bench',\n  BOOKSHELF = 'bookshelf',\n  CABINET = 'cabinet',\n  CHAIR = 'chair',\n  COFFEE_TABLE = 'coffee_table',\n  CONSOLE_TABLE = 'console_table',\n  DAY_BED = 'day_bed',\n  DESK = 'desk',\n  DRESSING_TABLE = 'dressing_table',\n  FAUCET = 'faucet',\n  FLOOR_LAMP = 'floor_lamp',\n  FUTON = 'futon',\n  LIGHT = 'light',\n  LOVESEAT = 'loveseat',\n  MATTRESS = 'mattress',\n  MIRROR = 'mirror',\n  NIGHTSTAND = 'nightstand',\n  PAINTING = 'painting',\n  PLANT_STAND = 'plant_stand',\n  RUG = 'rug',\n  SIDE_TABLE = 'side_table',\n  SINK = 'sink',\n  SLEEPER_SOFA = 'sleeper_sofa',\n  SOFA = 'sofa',\n  SOFA_BED = 'sofa_bed',\n  STOOL = 'stool',\n  STORAGE_UNIT = 'storage_unit',\n  STUDY_TABLE = 'study_table',\n  TABLE_LAMP = 'table_lamp',\n  TOY = 'toy',\n  TV_STAND = 'tv_stand',\n  VANITY = 'vanity',\n  WALL_LAMP = 'wall_lamp',\n  WALL_MIRROR = 'wall_mirror',\n  WALL_SHELF = 'wall_shelf',\n  WATER_CLOSET = 'water_closet',\n}\n\nexport interface ScrapperOutput {\n  product_name?: string;\n  images?: string[];\n  height?: string;\n  width?: string;\n  depth?: string;\n  material?: string;\n  price?: string;\n  sku?: string;\n  artist?: string;\n  type?: Types;\n  product_url?: string;\n  source?: string;\n  glbs?: string[];\n  glb_to_use?: string;\n  description?: string;\n  tags?: string;\n  'supporting-surface'?: 'floor' | 'wall';\n}\n\nexport interface ProductMetadata {\n  product_name: string;\n  product_url: string;\n  type: string;\n  price: number;\n  height: number;\n  width: number;\n  depth: number;\n  tags: string;\n  images: string[];\n  sku: string;\n  source: string;\n  description: string;\n}\n\nexport interface ScraperInput {\n  url: string;\n  html: string;\n}\n","/* eslint-disable no-restricted-syntax */\n/* eslint-disable class-methods-use-this */\n/* eslint-disable no-param-reassign */\nimport { load } from 'cheerio';\nimport type { OpenAI } from 'openai';\n\nimport CONFIG from './config';\nimport { getClient, scrapeUsingAI } from './modules/openai';\nimport { Logger } from './providers/log';\nimport { Article } from './sources/article';\nimport { Builddotcom } from './sources/builddotcom';\nimport { Etsy } from './sources/etsy';\nimport { Fineartamerica } from './sources/fineartamerica';\nimport { Google } from './sources/google';\nimport { Homedepot } from './sources/homedepot';\nimport { Ikea } from './sources/ikea';\nimport { Rugsdotcom } from './sources/rugsdotcom';\nimport { Zgallerie } from './sources/zgallerie';\nimport type { ProductMetadata, ScrapperOutput } from './types/scrapperOutput';\nimport { Types } from './types/scrapperOutput';\nimport { capitalize, getHtml, removeNullsAndUndefined } from './utils';\n\nconst logger = new Logger('ScrapperClient');\n\nconst determineType = (searchString: string) => {\n  try {\n    const allTags = capitalize(searchString).toLocaleLowerCase();\n    const allModelTypes = Object.values(Types);\n    const determinedType = allModelTypes.find((type) => {\n      const typeTags = type.toLocaleLowerCase().split('_');\n      return typeTags.some((tag) => allTags.includes(tag));\n    });\n    return determinedType as Types | undefined;\n  } catch (err) {\n    logger.error('determineType', (err as any).message);\n    return undefined;\n  }\n};\n\nconst isAnImage = (html: string): boolean => {\n  return !html.includes('<html');\n};\n\nexport const getRawData = async (url: string, html: string) => {\n  try {\n    if (isAnImage(html)) {\n      return {\n        images: [url],\n        product_url: url,\n        product_name: url.split('/').pop()?.split('.').shift(),\n        source: 'user-sourced',\n      };\n    }\n    const googleClient = new Google({\n      url,\n      serpApiKey: CONFIG.SERP.API_KEY,\n      googleApiKey: CONFIG.GOOGLE.API_KEY,\n      googleCseId: CONFIG.GOOGLE.CSE_ID,\n    });\n    if (url.includes('article')) {\n      return await new Article(url).extract(html).then(async (data) => {\n        return {\n          ...data,\n          images: !data.images?.length ? await googleClient.getImages(data.product_name ?? '') : data.images,\n        };\n      });\n    }\n    if (url.includes('build.com')) {\n      return await new Builddotcom(url).extract(html).then(async (data) => {\n        return {\n          ...data,\n          images: !data.images?.length ? await googleClient.getImages(data.product_name ?? '') : data.images,\n        };\n      });\n    }\n    if (url.includes('etsy')) {\n      return await new Etsy(url).extract(html).then(async (data) => {\n        return {\n          ...data,\n          images: !data.images?.length ? await googleClient.getImages(data.product_name ?? '') : data.images,\n        };\n      });\n    }\n    if (url.includes('fineartamerica')) {\n      return await new Fineartamerica(url).extract(html).then(async (data) => {\n        return {\n          ...data,\n          images: !data.images?.length ? await googleClient.getImages(data.product_name ?? '') : data.images,\n        };\n      });\n    }\n    if (url.includes('ikea')) {\n      return await new Ikea(url).extract(html).then(async (data) => {\n        return {\n          ...data,\n          images: !data.images?.length ? await googleClient.getImages(data.product_name ?? '') : data.images,\n        };\n      });\n    }\n    // if (url.includes('potterybarn')) {\n    //   return await new Potterybarn(url).extract(html);\n    // }\n    if (url.includes('https://rugs.com')) {\n      return await new Rugsdotcom(url).extract(html).then(async (data) => {\n        return {\n          ...data,\n          images: !data.images?.length ? await googleClient.getImages(data.product_name ?? '') : data.images,\n        };\n      });\n    }\n    // if (url.includes('westelm')) {\n    //   return await new Westelm(url).extract(html);\n    // }\n    if (url.includes('homedepot')) {\n      return await new Homedepot(url).extract(html).then(async (data) => {\n        return {\n          ...data,\n          images: !data.images?.length ? await googleClient.getImages(`${data.product_name ?? ''} from homedepot`) : data.images,\n        };\n      });\n    }\n    if (url.includes('zgallerie')) {\n      return await new Zgallerie(url).extract(html).then(async (data) => {\n        return {\n          ...data,\n          images: !data.images?.length ? await googleClient.getImages(data.product_name ?? '') : data.images,\n        };\n      });\n    }\n    return await googleClient.extract(html);\n  } catch (error) {\n    logger.error('getRawData', (error as any).message);\n    return null;\n  }\n};\n\nexport const getProductMetadata = (sourceUrl: string, html: string): ProductMetadata => {\n  try {\n    const $ = load(html);\n\n    // Extract Schema.org JSON-LD data\n    let schemaData: any = {};\n    try {\n      const jsonLdScripts = $('script[type=\"application/ld+json\"]');\n      jsonLdScripts.each((_, element) => {\n        try {\n          const data = JSON.parse($(element).html() || '{}');\n          // Look for Product or WebPage type schemas\n          if (data['@type'] === 'Product' || data['@type'] === 'WebPage') {\n            schemaData = data;\n          }\n          // Handle array of schemas\n          if (Array.isArray(data)) {\n            data.forEach((item) => {\n              if (item['@type'] === 'Product' || item['@type'] === 'WebPage') {\n                schemaData = item;\n              }\n            });\n          }\n        } catch (e) {\n          console.warn('Error parsing JSON-LD script:', e);\n        }\n      });\n    } catch (e) {\n      console.warn('Error extracting Schema.org data:', e);\n    }\n\n    // Helper function to get meta content with multiple fallbacks\n    const getMetaContent = (ogTag: string, twitterTag: string, schemaPath: string[]): string => {\n      // Try OpenGraph\n      const ogContent = $(`meta[property=\"${ogTag}\"]`).attr('content') || $(`meta[name=\"${ogTag}\"]`).attr('content');\n      if (ogContent) return ogContent;\n\n      // Try Twitter\n      const twitterContent = $(`meta[name=\"${twitterTag}\"]`).attr('content');\n      if (twitterContent) return twitterContent;\n\n      // Try Schema.org\n      let schemaContent = schemaData;\n      for (const path of schemaPath) {\n        schemaContent = schemaContent?.[path];\n        if (!schemaContent) break;\n      }\n      return typeof schemaContent === 'string' ? schemaContent : '';\n    };\n\n    // Helper function to get numeric content with fallbacks\n    const getNumericMetaContent = (ogTag: string, twitterTag: string, schemaPath: string[]): number => {\n      const value = getMetaContent(ogTag, twitterTag, schemaPath);\n      return value ? parseFloat(value) : 0;\n    };\n\n    // Initialize and populate images array with fallbacks\n    const images: string[] = [];\n\n    // Try OG images\n    $('meta[property=\"og:image\"]').each((_, element) => {\n      const imageUrl = $(element).attr('content');\n      if (imageUrl && !images.includes(imageUrl)) {\n        images.push(imageUrl);\n      }\n    });\n\n    // If no OG images, try Twitter images\n    if (images.length === 0) {\n      $('meta[name=\"twitter:image\"]').each((_, element) => {\n        const imageUrl = $(element).attr('content');\n        if (imageUrl && !images.includes(imageUrl)) {\n          images.push(imageUrl);\n        }\n      });\n    }\n\n    // If still no images, try Schema.org images\n    if (images.length === 0 && schemaData.image) {\n      const schemaImages = Array.isArray(schemaData.image) ? schemaData.image : [schemaData.image];\n\n      schemaImages.forEach((img: string) => {\n        if (img && !images.includes(img)) {\n          images.push(img);\n        }\n      });\n    }\n\n    // Get source domain from URL if available\n    const source = sourceUrl ? new URL(sourceUrl).hostname : '';\n\n    // Price extraction with Schema.org fallback\n    const priceString =\n      getMetaContent('og:price:amount', 'twitter:price:amount', ['offers', 'price']) ||\n      getMetaContent('product:price:amount', 'twitter:price', ['price']);\n\n    // Create the metadata object with all fallbacks\n    const metadata: ProductMetadata = {\n      product_name: getMetaContent('og:title', 'twitter:title', ['name']),\n      product_url: getMetaContent('og:url', 'twitter:url', ['url']) || sourceUrl,\n      type: getMetaContent('og:type', 'twitter:card', ['@type']),\n      price: parseFloat(priceString) || 0,\n      height: getNumericMetaContent('product:height', 'twitter:height', ['height', 'value']),\n      width: getNumericMetaContent('product:width', 'twitter:width', ['width', 'value']),\n      depth: getNumericMetaContent('product:depth', 'twitter:depth', ['depth', 'value']),\n      tags: getMetaContent('article:tag', 'twitter:label', ['keywords']) || '',\n      images,\n      sku: getMetaContent('product:sku', 'twitter:data1', ['sku']),\n      source,\n      description: getMetaContent('og:description', 'twitter:description', ['description']),\n    };\n\n    return metadata;\n  } catch (error) {\n    console.error('Error processing content:', error);\n    throw error;\n  }\n};\n\nexport class UniversalPDPScrapper {\n  private readonly openAiClient: OpenAI;\n\n  constructor(\n    config?: (\n      | {\n          serpApiKey?: string;\n        }\n      | {\n          googleApiKey?: string;\n          googleCseId?: string;\n        }\n    ) & {\n      openaiApiKey?: string;\n      openaiOrgId?: string;\n      openaiModelId?: string;\n    },\n  ) {\n    if (config?.openaiApiKey) {\n      CONFIG.OPEN_AI.API_KEY = config.openaiApiKey;\n    }\n    if (config?.openaiOrgId) {\n      CONFIG.OPEN_AI.ORG_ID = config.openaiOrgId;\n    }\n    if (config?.openaiModelId) {\n      CONFIG.OPEN_AI.MODEL = config.openaiModelId;\n    }\n    if (config && 'serpApiKey' in config && config.serpApiKey) {\n      CONFIG.SERP.API_KEY = config.serpApiKey;\n    }\n    if (config && 'googleApiKey' in config && config.googleApiKey) {\n      CONFIG.GOOGLE.API_KEY = config.googleApiKey;\n    }\n    if (config && 'googleCseId' in config && config.googleCseId) {\n      CONFIG.GOOGLE.CSE_ID = config.googleCseId;\n    }\n\n    this.openAiClient = getClient({\n      apiKey: CONFIG.OPEN_AI.API_KEY,\n      organization: CONFIG.OPEN_AI.ORG_ID,\n    });\n  }\n\n  scrape = async (url: string, timeoutInSeconds = 15) => {\n    try {\n      const htmlContent = await getHtml(url);\n      const productMetadata = getProductMetadata(url, htmlContent);\n      const [partialScrapperOutput, parsedOpenAiOutput] = await Promise.all([\n        getRawData(url, htmlContent),\n        scrapeUsingAI(this.openAiClient, url, htmlContent, undefined, undefined, CONFIG.OPEN_AI.MODEL, 112000, timeoutInSeconds).catch(\n          () => ({}) as ProductMetadata,\n        ),\n      ]);\n      removeNullsAndUndefined(partialScrapperOutput ?? {});\n      removeNullsAndUndefined(parsedOpenAiOutput ?? {});\n      removeNullsAndUndefined(productMetadata ?? {});\n      const scrapperOutput = {\n        ...parsedOpenAiOutput,\n        ...productMetadata,\n        ...partialScrapperOutput,\n        product_name: parsedOpenAiOutput.product_name || productMetadata.product_name || partialScrapperOutput?.product_name,\n        images: Array.from(\n          new Set([...(productMetadata.images || []), ...(parsedOpenAiOutput.images ?? []), ...(partialScrapperOutput?.images ?? [])]),\n        ),\n        description: (partialScrapperOutput?.description ?? '').concat(parsedOpenAiOutput.description ?? ''),\n        tags: parsedOpenAiOutput.tags?.toLowerCase(),\n        height: Number(\n          (parsedOpenAiOutput.height || partialScrapperOutput?.height || productMetadata.height).toString().replace(/[^\\d.]/g, ''),\n        ).toFixed(2),\n        width: Number(\n          (parsedOpenAiOutput.width || partialScrapperOutput?.width || productMetadata.width).toString().replace(/[^\\d.]/g, ''),\n        ).toFixed(2),\n        depth: Number(\n          (parsedOpenAiOutput.depth || partialScrapperOutput?.depth || productMetadata.depth).toString().replace(/[^\\d.]/g, ''),\n        ).toFixed(2),\n        price: Number(\n          (parsedOpenAiOutput.price || partialScrapperOutput?.price || productMetadata.price).toString().replace(/[^\\d.]/g, ''),\n        ).toFixed(2),\n      } as ScrapperOutput;\n      if (!scrapperOutput) {\n        throw new Error('Scrapper failed');\n      }\n      if (!scrapperOutput.type || scrapperOutput.type.toString() === 'product') {\n        scrapperOutput.type = determineType(`${scrapperOutput.product_name} ${scrapperOutput.product_url}`) ?? Types.PAINTING;\n      }\n      if (scrapperOutput.glbs) {\n        scrapperOutput.glb_to_use = scrapperOutput.glbs.find((glb) => glb.includes('.glb')) ?? scrapperOutput.glbs[0];\n        delete scrapperOutput.glbs;\n      }\n      scrapperOutput['supporting-surface'] =\n        scrapperOutput.type === Types.PAINTING || scrapperOutput.type.includes('wall_') ? 'wall' : 'floor';\n      logger.info('scrape', scrapperOutput);\n      scrapperOutput.images = scrapperOutput.images?.slice(0, 5) ?? [];\n      removeNullsAndUndefined(scrapperOutput);\n      return scrapperOutput;\n    } catch (err) {\n      logger.error('scrape', (err as any).message);\n      return null;\n    }\n  };\n}\n","/* eslint-disable no-param-reassign */\nimport { load } from 'cheerio';\n\nimport { getHtml } from '@/utils';\n\nimport type { ScrapperOutput } from '../types/scrapperOutput';\n\nexport class Potterybarn {\n  readonly url: string;\n\n  constructor(url: string) {\n    this.url = url;\n  }\n\n  async extract(html?: string) {\n    if (!html) {\n      if (!this.url.includes('potterybarn')) {\n        throw new Error('Invalid URL');\n      }\n      html = await getHtml(this.url);\n    }\n    const $ = load(html!);\n    const res: ScrapperOutput = {\n      product_name: $('#main-content > div.purchasing-container > div.pip-info > div > h1')\n        .text()\n        .replace(/[\\r\\n]/gm, '')\n        .trim(),\n      images: $('div.ossa8632-dummyheroimg > img')\n        .map((_i, el) => $(el).attr('src'))\n        .get(),\n      source: 'potterybarn',\n      product_url: this.url,\n    };\n    return res;\n  }\n}\n","/* eslint-disable no-param-reassign */\nimport { load } from 'cheerio';\n\nimport { getHtml } from '@/utils';\n\nimport type { ScrapperOutput } from '../types/scrapperOutput';\n\nexport class Wayfair {\n  readonly url: string;\n\n  constructor(url: string) {\n    this.url = url;\n  }\n\n  async extract(html?: string) {\n    if (!html) {\n      if (!this.url.includes('wayfair')) {\n        throw new Error('Invalid URL');\n      }\n      html = await getHtml(this.url);\n    }\n    const $ = load(html!);\n    const dimensions = $('#CollapsePanel-2 > div > div > div > div > div > div > div > span > dd:nth-child(2) > div')\n      .text()\n      .trim()\n      .split(' x ');\n    const res: ScrapperOutput = {\n      product_name: $(\n        '#bd > div.pl-Wrapper > div.PdpLayoutResponsive-top > div > div.pl-Box--display-flex.pl-Box--pb-0.pl-Box--pb-8-bp960.pl-Box--pt-2.pl-Box--pt-6-bp960.pl-Box--pl-0.pl-Box--pl-4-bp960.pl-Box--fw-wrap.pl-Box--size-12.pl-Box--size-6-bp960.pl-Grid-item.pl-Box--defaultColor > div > div.StyledBox-owpd5f-0.BoxV2___StyledStyledBox-sc-1wnmyqq-0.iNfvtb > div:nth-child(1) > div > header > h1',\n      )\n        .text()\n        .trim(),\n      price: $(\n        '#bd > div.pl-Wrapper > div.PdpLayoutResponsive-top > div > div.pl-Box--display-flex.pl-Box--pb-0.pl-Box--pb-8-bp960.pl-Box--pt-2.pl-Box--pt-6-bp960.pl-Box--pl-0.pl-Box--pl-4-bp960.pl-Box--fw-wrap.pl-Box--size-12.pl-Box--size-6-bp960.pl-Grid-item.pl-Box--defaultColor > div > div.StyledBox-owpd5f-0.BoxV2___StyledStyledBox-sc-1wnmyqq-0.iNfvtb > div:nth-child(2) > div.SFPrice > div:nth-child(1) > span.pl-Box--display-inline-block.pl-Box--mr-1.pl-Box--pr-1.pl-Price-V2.pl-Price-V2--5000.pl-Box--saleColor',\n      )\n        .text()\n        .trim(),\n      images: $(\n        '#bd > div.pl-Wrapper > div.PdpLayoutResponsive-top > div > div.pl-Box--display-flex.pl-Box--pb-8-bp960.pl-Box--pt-8-bp960.pl-Box--pr-6-bp960.pl-Box--fd-column.pl-Box--fw-wrap.pl-Box--size-12.pl-Box--size-6-bp960.pl-Grid-item.pl-Box--defaultColor > div.PdpLayoutResponsive-stickyWrap > div > div > div > div.ProductDetailImageCarousel-top > div.ProductDetailImageCarousel-container > div > div > div.pl-MultiCarousel-innerWrap > ul > li > div > div > div > div > div > img',\n      )\n        .map((_i, el) => $(el).attr('src'))\n        .get(),\n      height: dimensions[0]?.substring(0, dimensions[0].indexOf(\"'\")),\n      width: dimensions[1]?.substring(0, dimensions[1].indexOf(\"'\")),\n      depth: dimensions[2]?.substring(0, dimensions[2].indexOf(\"'\")),\n      sku: $('#bd > div.pl-Wrapper > div.PdpLayoutResponsive-breadcrumbWrap > div > div > nav > ol > li:nth-last-child(1) > span')\n        .text()\n        .trim(),\n      source: 'wayfair',\n      product_url: this.url,\n    };\n    return res;\n  }\n}\n","/* eslint-disable no-param-reassign */\nimport { load } from 'cheerio';\n\nimport { getHtml } from '@/utils';\n\nimport type { ScrapperOutput } from '../types/scrapperOutput';\n\nexport class Westelm {\n  readonly url: string;\n\n  constructor(url: string) {\n    this.url = url;\n  }\n\n  async extract(html?: string) {\n    if (!html) {\n      if (!this.url.includes('westelm')) {\n        throw new Error('Invalid URL');\n      }\n      html = await getHtml(this.url);\n    }\n    const $ = load(html!);\n    const thumbnail = $.html()?.match(/https:\\/\\/assets.weimgs.com\\/weimgs\\/rk\\/images\\/wcm\\/products\\/[a-z0-9/-]+.jpg/gm)?.[0];\n    const dimension = html?.match(/[\\d.]+&quot;w x [\\d.]+&quot;d x [\\d.]+&quot;h/gm)?.[0];\n    const res: ScrapperOutput = {\n      product_name: $('h1.heading-title-pip')\n        .text()\n        .replace(/[\\r\\n]/gm, '')\n        .trim(),\n      images: thumbnail ? [thumbnail] : [],\n      depth: dimension?.split('x')[1]?.trim()?.replace('&quot;d', ''),\n      width: dimension?.split('x')[0]?.trim()?.replace('&quot;w', ''),\n      height: dimension?.split('x')[2]?.trim()?.replace('&quot;h', ''),\n      price: $(\n        '#pip-river-container-WE > div > div > div.product-details > div > div.line-through.price-under-title > ul > li > span.amount',\n      )\n        .text()\n        .replace(/[\\r\\n]/gm, '')\n        .trim(),\n      source: 'westelm',\n      product_url: this.url,\n    };\n    return res;\n  }\n}\n"],"names":["config","APP","NAME","pkg","name","VERSION","version","DESCRIPTION","description","AUTHOR","author","STAGE","process","env","NODE_ENV","ENV","SERP","API_KEY","SERP_API_KEY","OPEN_AI","_process$env$OPEN_AI_","OPEN_AI_SECRET_KEY","ORG_ID","OPEN_AI_ORG_ID","undefined","MODEL","OPEN_AI_MODEL","GOOGLE","GOOGLE_API_KEY","CSE_ID","GOOGLE_CSE_ID","Logger","constructor","info","message","args","console","log","error","warn","debug","trace","capitalize","s","replace","replaceAll","letter","toUpperCase","trim","removeNullsAndUndefined","obj","propName","parseJSONFromMarkdownString","mdString","options","throwOnError","Error","normalizedString","jsonString","includes","jsonBlockRegex","matches","match","trimmedString","parsed","JSON","parse","defaultValue","getHtml","url","parsedUrl","URL","data","html","axios","get","headers","Accept","Origin","origin","Host","host","Connection","catch","err","response","stringify","logger","getClient","OpenAI","getCompletion","prompt","client","model","_result$choices$","result","chat","completions","create","messages","role","content","n","temperature","choices","trimToTokenLimit","text","enc","maxTokens","separator","tokens","encode","length","parts","split","decode","slice","beforeHtml","afterHtml","beforeTokens","afterTokens","intermediatoryTokens","availableTokens","htmlTokens","halfAvailable","Math","floor","startHtml","endHtml","scrapeUsingAI","productUrl","htmlContent","userId","metadata","trimToMaxToken","timeoutSeconds","_result$choices$3","encodingForModel","systemContext","userPrompt","substring","reservedTokens","apiCallPromise","response_format","type","stream","user","_result$choices$2","timeoutPromise","Promise","_","reject","setTimeout","race","Article","extract","_$$html","_dimension$split$","_dimension$split$2","_dimension$split$3","_$$text","$","load","dimension","res","product_name","images","map","_i","el","_$$attr","_$$attr2","attr","indexOf","depth","width","height","price","source","product_url","Builddotcom","productJson","thumbnail","image","productName","offers","toString","sku","artist","brand","toLowerCase","Etsy","_$$filter$text","_$$filter$text2","_$$filter$text3","filter","material","pop","Fineartamerica","_$$attr$trim","x","Google","serpApiKey","googleApiKey","googleCseId","getImages","useSerpApi","_results$images_resul","_results$data$items$m","_results$data$items","results","getJson","api_key","q","gl","hl","tbm","google_domain","location","customsearch","cse","list","auth","cr","cx","num","safe","searchType","http2","images_results","original","items","item","link","_domainParts$at","parsedURL","domain","hostname","domainParts","pathName","pathname","title","at","word","join","processedTitle","Array","from","Set","push","_error$message","BrandType","ReviewType","ReviewRatingType","Homedepot","stringifiedLdJson","ldJson","img","color","tags","Ikea","getProductDetails","BASE_URL","then","_err$response","_err$response2","status","getGLBs","_err$response3","_err$response4","productDetails","glbs","allSettled","resolvedPromises","p","value","Object","keys","_glbs$models$map","_$$html2","_$$html3","models","sort","_productDetails$mainI","_productDetails$price","_glbs$models$map2","mainImage","priceNumeral","Rugsdotcom","_$$text2","Zgallerie","_result$1$substring","_result$","_info$props$pageProps","_info$props$pageProps2","_info$props$pageProps3","_info$props$pageProps4","_info$props$pageProps5","re","props","pageProps","product","url_zoom","calculated_price","additional_info","artist_name","Types","determineType","searchString","allTags","toLocaleLowerCase","allModelTypes","values","determinedType","find","typeTags","some","tag","isAnImage","getRawData","_url$split$pop","shift","googleClient","CONFIG","_data$images","_data$product_name","_extends","_data$images2","_data$product_name2","_data$images3","_data$product_name3","_data$images4","_data$product_name4","_data$images5","_data$product_name5","_data$images6","_data$product_name6","_data$images7","_data$product_name7","_data$images8","_data$product_name8","getProductMetadata","sourceUrl","schemaData","jsonLdScripts","each","element","isArray","forEach","e","getMetaContent","ogTag","twitterTag","schemaPath","ogContent","twitterContent","schemaContent","path","_schemaContent","getNumericMetaContent","parseFloat","imageUrl","schemaImages","priceString","UniversalPDPScrapper","_this","openAiClient","scrape","timeoutInSeconds","_parsedOpenAiOutput$i","_partialScrapperOutpu","_partialScrapperOutpu2","_parsedOpenAiOutput$d","_parsedOpenAiOutput$t","_scrapperOutput$image","_scrapperOutput$image2","productMetadata","partialScrapperOutput","parsedOpenAiOutput","all","scrapperOutput","concat","Number","toFixed","_determineType","PAINTING","_scrapperOutput$glbs$","glb_to_use","glb","openaiApiKey","openaiOrgId","openaiModelId","apiKey","organization","Potterybarn","Wayfair","_dimensions$","_dimensions$2","_dimensions$3","dimensions","Westelm","_html"],"mappings":"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"}