{"version":3,"sources":["../src/index.ts","../src/core/constants.ts","../src/adapters/datalayer.ts","../src/core/utils.ts","../src/adapters/dito.ts","../src/adapters/index.ts","../src/params/utils/index.ts","../src/params/resolvers/brand/fromOrderForm.ts","../src/params/resolvers/brand/fromItem.ts","../src/params/brand.ts","../src/params/utils/itemListAttribution.ts","../src/params/resolvers/items/fromOrderForm.ts","../src/params/resolvers/items/fromItem.ts","../src/params/resolvers/items/fromList.ts","../src/params/resolvers/items/fromPdp.ts","../src/params/resolvers/items/fromBanner.ts","../src/params/items.ts","../src/params/resolvers/paymentType/fromOrderForm.ts","../src/params/resolvers/paymentType/fromOrderGroup.ts","../src/params/paymentType.ts","../src/params/userInfo.ts","../src/params/index.ts","../src/formatter/index.ts"],"sourcesContent":["import { dispatchTrackEvent } from './adapters';\nimport { getParameters } from './formatter';\nimport { EVENTS } from './core/constants';\nimport type { EventContext, EventName } from './types';\n\n/**\n * Assembles tracking parameters and sends a web tracking event.\n *\n * @param event - The name of the event to track.\n * @param context - Optional context used to build event parameters; may include a `window` property that will be attached to the dispatched payload.\n * @returns The result returned by `dispatchTrackEvent` when the event is sent successfully, or the value returned by `console.error` (`undefined`) if an error occurs.\n */\nasync function trackWebEvent(event: EventName, context: EventContext = {}) {\n  try {\n    // object data to be sent\n    const parameters = await getParameters(context, event);\n    return await dispatchTrackEvent(\n      event,\n      Object.assign({}, parameters, { window: context.window })\n    );\n  } catch (err) {\n    return console.error(`[DT] Error tracking event ${event}:`, err);\n  }\n}\n\nexport { trackWebEvent, EVENTS };\n\nexport default {\n  trackWebEvent,\n  EVENTS,\n}\n","export const EVENTS = {\n  CUSTOM_VIEW_CART: {\n    name: \"custom_view_cart\",\n    hasEcommerce: true,\n    destinations: [\"DataLayer\"],\n    requiredParams: [\n      \"brand\",\n      \"region\",\n      \"line_items\",\n      \"currency\",\n      \"value\",\n      \"total_discount\",\n      \"subtotal\",\n      \"items\",\n    ],\n  },\n\n  ADD_TO_WISHLIST: {\n    name: \"add_to_wishlist\",\n    hasEcommerce: true,\n    destinations: [\"DataLayer\"],\n    requiredParams: [\n      \"brand\",\n      \"region\",\n      \"line_items\",\n      \"currency\",\n      \"value\",\n      \"items\",\n    ],\n  },\n\n  CUSTOM_ADD_TO_CART: {\n    name: \"custom_add_to_cart\",\n    hasEcommerce: true,\n    destinations: [\"DataLayer\"],\n    requiredParams: [\n      \"brand\",\n      \"region\",\n      \"line_items\",\n      \"currency\",\n      \"value\",\n      \"items\",\n    ],\n  },\n\n  CUSTOM_REMOVE_FROM_CART: {\n    name: \"custom_remove_from_cart\",\n    hasEcommerce: true,\n    destinations: [\"DataLayer\"],\n    requiredParams: [\n      \"brand\",\n      \"region\",\n      \"line_items\",\n      \"currency\",\n      \"value\",\n      \"items\",\n    ],\n  },\n\n  ADD_TO_CART: {\n    name: \"add_to_cart\",\n    hasEcommerce: true,\n    destinations: [\"DataLayer\"],\n    requiredParams: [\n      \"brand\",\n      \"region\",\n      \"line_items\",\n      \"currency\",\n      \"value\",\n      \"items\",\n    ],\n  },\n\n  REMOVE_FROM_CART: {\n    name: \"remove_from_cart\",\n    hasEcommerce: true,\n    destinations: [\"DataLayer\"],\n    requiredParams: [\n      \"brand\",\n      \"region\",\n      \"line_items\",\n      \"currency\",\n      \"value\",\n      \"items\",\n    ],\n  },\n\n  ADD_COUPON: {\n    name: \"add_coupon\",\n    hasEcommerce: true,\n    destinations: [\"DataLayer\"],\n    requiredParams: [\n      \"brand\",\n      \"region\",\n      \"coupon\",\n      \"coupon_message\",\n      \"seller_cod_name\",\n    ],\n  },\n\n  SEARCH: {\n    name: \"search\",\n    hasEcommerce: false,\n    destinations: [\"DataLayer\"],\n    requiredParams: [\"brand\", \"search_term\", \"search_found\", \"search_quantity\"],\n  },\n\n  SEARCH_ZIPCODE: {\n    name: 'search_zipcode',\n    hasEcommerce: false,\n    destinations: ['DataLayer'],\n    requiredParams: ['brand', 'region', 'shippings', 'zipcode', 'flag_pickup'],\n  },\n\n  VIEW_PROMOTION: {\n    name: \"view_promotion\",\n    hasEcommerce: true,\n    destinations: [\"DataLayer\"],\n    requiredParams: [\n      \"brand\",\n      \"region\",\n      \"currency\",\n      \"promotion_name\",\n      \"creative_slot\",\n      \"creative_name\",\n      \"items\",\n    ],\n  },\n\n  SELECT_PROMOTION: {\n    name: \"select_promotion\",\n    hasEcommerce: true,\n    destinations: [\"DataLayer\"],\n    requiredParams: [\n      \"brand\",\n      \"region\",\n      \"currency\",\n      \"promotion_name\",\n      \"creative_slot\",\n      \"creative_name\",\n      \"items\",\n    ],\n  },\n\n  SELECT_CONTENT: {\n    name: \"select_content\",\n    hasEcommerce: false,\n    destinations: [\"DataLayer\"],\n    requiredParams: [\"brand\", 'content_type'],\n  },\n\n  SELECT_ITEM: {\n    name: \"select_item\",\n    hasEcommerce: true,\n    destinations: [\"DataLayer\"],\n    requiredParams: [\"brand\", \"region\", \"items\", \"line_items\"],\n  },\n\n  VIEW_ITEM: {\n    name: \"view_item\",\n    hasEcommerce: true,\n    destinations: [\"DataLayer\"],\n    requiredParams: [\n      \"brand\",\n      \"line_items\",\n      \"currency\",\n      \"value\",\n      \"available_grid\",\n      \"items\",\n    ],\n  },\n\n  CUSTOM_VIEW_ITEM: { // IO STORES\n    name: \"custom_view_item\",\n    hasEcommerce: true,\n    destinations: [\"DataLayer\"],\n    requiredParams: [\n      \"brand\",\n      \"line_items\",\n      \"currency\",\n      \"value\",\n      \"available_grid\",\n      \"items\",\n    ],\n  },\n\n  VIEW_ITEM_LIST: {\n    name: \"view_item_list\",\n    hasEcommerce: true,\n    destinations: [\"DataLayer\"],\n    requiredParams: [\"region\", \"brand\", \"line_items\", \"items\"],\n  },\n\n  BEGIN_CHECKOUT: {\n    name: \"begin_checkout\",\n    hasEcommerce: true,\n    destinations: [\"DataLayer\"],\n    requiredParams: [\"brand\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\", \"items\"],\n  },\n\n  CUSTOM_BEGIN_CHECKOUT: {\n    name: \"custom_begin_checkout\",\n    hasEcommerce: true,\n    destinations: [\"DataLayer\"],\n    requiredParams: [\"brand\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\", \"items\"],\n  },\n\n  AUTH_ACTION: {\n    name: \"auth_action\",\n    hasEcommerce: false,\n    requiredParams: [\"region\", \"method\", \"type\", \"brand\"],\n    destinations: [\"DataLayer\"],\n  },\n\n  ADD_PERSONAL_INFO: {\n    name: \"add_personal_info\",\n    hasEcommerce: true,\n    destinations: [\"DataLayer\"],\n    requiredParams: [\"brand\", \"pre_filled\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\"],\n  },\n\n  CUSTOM_ADD_SHIPPING_INFO: {\n    name: \"add_shipping_info\",\n    hasEcommerce: true,\n    destinations: [\"DataLayer\"],\n    requiredParams: [\n      \"brand\",\n      \"pre_filled\",\n      \"shipping\",\n      \"shipping_tier\",\n      \"line_items\",\n      \"currency\",\n      \"value\",\n      \"total_discount\",\n      \"subtotal\",\n      \"items\"\n    ],\n  },\n\n  CUSTOM_ADD_PAYMENT_INFO: {\n    name: \"add_payment_info\",\n    hasEcommerce: true,\n    destinations: [\"DataLayer\"],\n    requiredParams: [\n      \"brand\",\n      \"pre_filled\",\n      \"line_items\",\n      \"currency\",\n      \"value\",\n      \"total_discount\",\n      \"payment_type\",\n      \"subtotal\",\n      \"items\"\n    ],\n  },\n\n  ORDER_REVIEWED: {\n    name: \"order_reviewed\",\n    hasEcommerce: true,\n    destinations: [\"DataLayer\"],\n    requiredParams: [\"brand\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\", \"payment_type\"],\n  },\n\n  PURCHASE: {\n    name: \"purchase\",\n    hasEcommerce: true,\n    destinations: [\"DataLayer\"],\n    requiredParams: [\n      'brand',\n      'shipping_tier',\n      'line_items',\n      'currency',\n      'value',\n      'shipping',\n      'transaction_id',\n      'total_discount',\n      'payment_type',\n      'seller_cod_name',\n      'subtotal',\n      'coupon',\n      'items'\n    ],\n  },\n\n  CUSTOM_PURCHASE: {\n    name: \"custom_purchase\",\n    hasEcommerce: true,\n    destinations: [\"DataLayer\"],\n    requiredParams: [\n      'brand',\n      'shipping_tier',\n      'line_items',\n      'currency',\n      'value',\n      'shipping',\n      'transaction_id',\n      'total_discount',\n      'payment_type',\n      'seller_cod_name',\n      'subtotal',\n      'coupon',\n      'items'\n    ],\n  },\n\n  CUSTOM_USER_INFO: {\n    name: 'custom_user_info',\n    hasEcommerce: false,\n    destinations: [\"DataLayer\"],\n    requiredParams: ['user_info']\n  },\n\n  NOTIFY_ME: {\n    name: 'notify_me',\n    hasEcommerce: false,\n    destinations: [\"DataLayer\"],\n    requiredParams: ['brand', 'line_items', 'size', 'item_ref']\n  }\n};\n","import type { EventContext, EventName } from \"../types\";\nimport { EVENTS } from \"../core/constants\";\n\n/**\n * Pushes an ecommerce tracking event to the appropriate dataLayer and logs the payload.\n *\n * Ensures a dataLayer array exists on the target (prefer `ecomm.window` if present, otherwise the global `window`)\n * and pushes an object containing `event` and the `ecomm` payload. Also logs the pushed payload for debugging.\n *\n * @param event - The tracking event name to push\n * @param context - The event context payload; if it contains a `window` property that object's `dataLayer` will be used as the target\n */\nexport function pushToDataLayer(event: string, context: EventContext) {\n  const targetWindow = context.window || (typeof window !== 'undefined' ? window : null);\n  if (!targetWindow) return;\n\n  const payload = Object.assign({}, context);\n  delete payload.window; // delete window prop and avoid to push as payload to dayalayer\n\n  const eventName = event.toUpperCase() as EventName;\n  const eventConfig = EVENTS[eventName] as { hasEcommerce: boolean };\n\n  targetWindow.dataLayer = targetWindow.dataLayer || [];\n\n  if (eventConfig?.hasEcommerce) {\n    targetWindow.dataLayer.push({ ecommerce: null });\n    targetWindow.dataLayer.push({ event: event, ecommerce: payload });\n  } else {\n    targetWindow.dataLayer.push(Object.assign({ event: event }, payload));\n  }\n}","import { EventContext } from \"../types\";\n\nexport function dataTrackingLog(data: EventContext, color: string) {\n  console.log(\n    `%c[DT] EVENTO DISPARADO:%c `,\n    `background: ${color}; color: white; font-weight: bold; padding: 2px 4px; border-radius: 3px;`,\n    'color: #fff;',\n    data || ''\n  );\n}\n\nexport function setCookie(name: string, value: string, days = 7) {\n  const encodedValue = encodeURIComponent(value);\n\n  let expires = \"\";\n  if (days) {\n    const date = new Date();\n    date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n    expires = \"; expires=\" + date.toUTCString();\n  }\n\n  document.cookie = `${name}=${encodedValue}${expires}; path=/;`;\n}\n\nexport const paymentTypeMap = [\n  ['vale', 'vale crédito'],\n  ['pagaleve', 'pix'],\n  ['pix parcel', 'pix parcelado'],\n  ['pix', 'pix'],\n  ['apple', 'apple pay'],\n  ['google', 'google pay'],\n  ['boleto', 'boleto'],\n  ['paypal', 'paypal'],\n  ['cred', 'cartão'],\n  ['visa', 'cartão'],\n  ['master', 'cartão'],\n  ['amex', 'cartão'],\n  ['elo', 'cartão'],\n  ['hiper', 'cartão'],\n  ['diner', 'cartão'],\n  ['deb', 'cartão'],\n];\n\n\nexport const toNum = (val: unknown) => typeof val === 'string' ? Number(val.replace(/[^\\d,]/g, '').replace(',', '.')) : val\n\nexport const documentToHash = async (document: string | undefined): Promise<string | null> => {\n  if (!document) return null\n\n  const encoder = new TextEncoder();\n  const data = encoder.encode(document);\n  const hashBuffer = await crypto.subtle.digest(\"SHA-256\", data);\n  const hashArray = Array.from(new Uint8Array(hashBuffer));\n\n  return hashArray.map(b => b.toString(16).padStart(2, \"0\")).join(\"\");\n}","import { dataTrackingLog } from \"../core/utils\";\nimport type { EventContext } from \"../types\";\n\nexport function pushToDito(event: string, ecomm: EventContext) {\n  dataTrackingLog({ id: event, custom_data: ecomm }, '#00c851');\n}","import { EVENTS } from '../core/constants';\nimport { pushToDataLayer } from './datalayer';\nimport { pushToDito } from './dito';\n\nimport type { EventName, EventContext } from '../types'\n\nconst adapters = {\n  DataLayer: pushToDataLayer,\n  Dito: pushToDito,\n};\n\ntype AdapterKey = keyof typeof adapters;\n\n/**\n * Dispatches a tracking event to all destinations configured for the given event.\n *\n * Looks up destinations from the EVENTS configuration, calls each destination adapter\n * in parallel (providing the event name in lowercase and the supplied context), and\n * waits for all attempts to settle. Individual adapter failures are logged with the\n * \"[DT]\" prefix but do not prevent other destinations from running.\n *\n * @param eventName - The name of the event to dispatch\n * @param data - The event context/payload to send to adapters\n */\nexport async function dispatchTrackEvent(eventName: EventName, data: EventContext) {\n  const eventConfig = EVENTS[eventName] as { destinations: string[] };\n\n  if (!eventConfig) return;\n\n  await Promise.allSettled(\n    eventConfig.destinations.map(async (dest: string) => {\n      try {\n        // call the adapter function based on the destination mapped in the adapters object\n        // eventName is converted to lowercase to match the expected format in all adapters\n        await adapters[dest as AdapterKey](eventName.toLowerCase(), data);\n      } catch (err) {\n        console.error(`[DT] Failed to send ${eventName} to ${dest}:`, err);\n      }\n    })\n  );\n}\n","/**\n * Fetches product data for the given product id from the catalog API.\n *\n * @param id - The product identifier used as the `productId` query filter\n * @returns The parsed JSON response containing product data, or `undefined` if the request fails\n */\nexport async function getProductDataById(id: any) {\n  try {\n    const response = await fetch(\n      `/api/catalog_system/pub/products/search?fq=productId:${id}`\n    );\n\n    return await response.json();\n  } catch (e) {\n    console.log('[DT] Erro ao buscar dados do produto', e);\n  }\n}\n\nexport function resizeVtexImage(url: string, width = 500, height = 500) {\n  return url?.replace(\n    /(\\/arquivos\\/ids\\/\\d+)-\\d+-\\d+\\//,\n    `$1-${width}-${height}/`\n  );\n}\n\nexport function isPDP(url: string) {\n  try {\n    const { pathname } = new URL(url, window.location.origin);\n    return /\\/p\\/?$/.test(pathname);\n  } catch {\n    return false;\n  }\n}\n\nexport function extractRefIdFromUrl(url: string | null) {\n  if (!url) return null;\n\n  const path = (() => {\n    try { return new URL(url, location.origin).pathname }\n    catch { return url.split('?')[0] }\n  })();\n\n  const match = decodeURIComponent(path).match(/(\\d+-\\d+)(?=\\/p|$)/);\n  return match ? match[1].replace('-', '_') : null;\n}\n\nexport async function getProductByRefId(url: string | null) {\n  const refId = extractRefIdFromUrl(url);\n  if (!refId) return console.error('Não foi possível extrair o RefId da URL'), null;\n\n  try {\n    const res = await fetch(`/api/catalog_system/pub/products/search?fq=alternateIds_RefId:${refId}`);\n    if (!res.ok) throw new Error(`Erro na API: ${res.status}`);\n\n    const products = await res.json();\n    return products?.[0] || null;\n  } catch (err) {\n    console.error('Erro ao buscar dados do produto:', err);\n    return null;\n  }\n}\n\nexport function getItemShippingTier(orderForm: any, item: any) {\n  const info = orderForm?.shippingData?.logisticsInfo?.find(\n    (li: any) => li.itemId === item.id\n  );\n\n  const selectedSla = info?.slas?.find((sla: any) => sla.id === info.selectedSla);\n  return selectedSla?.pickupStoreInfo?.friendlyName\n    ? `retirada em loja: ${selectedSla.pickupStoreInfo.friendlyName}`\n    : selectedSla?.name\n      ? `Receba em casa: ${selectedSla.name}`\n      : null;\n}\n\nexport async function getItemSku(item: any) {\n  const product = await getProductDataById(item.productId || item.productID || item.item_group_id);\n\n  if (!product.length) return null;\n\n  return product[0].items.find((i: any) => i.name === item.skuName)?.itemId ?? null;\n}\n\nexport function getDiscount(item: any) {\n  const strategies = [\n    // 1. listPrice - sellingPrice\n    () => {\n      if (item?.listPrice != null && item?.sellingPrice != null) {\n        const diff = Math.max(item.listPrice - item.sellingPrice, 0);\n        return diff ? parseFloat((diff / 100).toFixed(2)) : 0;\n      }\n      return null;\n    },\n\n    // 2. listPrice - price\n    () => {\n      if (item?.listPrice != null && item?.price != null) {\n        return Math.max(item.listPrice - item.price, 0);\n      }\n      return null;\n    },\n\n    // 3. desconto calculado.\n    () => (item?.discount || item?.discount === 0 ? item.discount : null),\n  ];\n\n  for (const getValue of strategies) {\n    const value = getValue();\n\n    if (value !== null && value !== undefined) {\n      return value;\n    }\n  }\n\n  return 0;\n}\n\nexport function getItemCategory(item: any) {\n  const keywords = [\"outlet\", \"bazar\", \"sale\"];\n  const regex = new RegExp(keywords.join(\"|\"), \"i\"); // cria: /outlet|bazar|sale/i\n\n  const strategies = [\n    () => item?.item_category,\n    () => item?.category,\n    () => item?.categories, \n    () => item?.productCategories?.[\"39\"],\n    () => {\n      /* \n      Regra: percorre o array itemListElement buscando a categoria de nível raiz,\n      identificada por URLs no formato \"/slug/\" (apenas um nível, ex: \"/bazar/\", \"/new-collection/\").\n      Retorna o `name` correspondente a esse item.\n      */\n      const breadcrumb = item?.itemOffered?.breadcrumbList?.itemListElement;\n\n      if (!Array.isArray(breadcrumb)) return null;\n\n      const level1 = breadcrumb.find((el) => {\n        const path = el?.item;\n        if (!path) return false;\n\n        // remove \"/\" do início/fim e divide\n        const parts = path.replace(/^\\/|\\/$/g, '').split('/');\n\n        return parts.length === 1;\n      });\n\n      return level1?.name || null;\n    }\n  ];\n\n  for (const getValue of strategies) {\n    const rawValue = getValue();\n\n    if (rawValue) {\n      const textToTest = Array.isArray(rawValue) ? rawValue.join(\" \") : String(rawValue);\n      const match = textToTest.match(regex);\n\n      if (match) {\n        return match[0]\n      }\n    }\n  }\n  return \"Coleção\";\n}\n\n\nfunction extractCategory2Label(item: any) {\n  const keywords = [\"outlet\", \"bazar\", \"sale\"];\n  const regex = new RegExp(keywords.join(\"|\"), \"i\");\n\n  const tryCategory = (data: [] | {}) => {\n    if (!data) return null;\n    \n    const items = Array.isArray(data) ? data : Object.values(data || {});\n    \n    // de trás pra frente pra pegar o ultimo nivel da arvore da categoria\n    for (let j = items.length - 1; j >= 0; j--) {\n      const parts = items[j]?.split('/')?.filter(Boolean) || [];\n\n      // busca a primeira categoria (da ultima pra primeira) que NÃO seja sale/outlet/bazar\n      // Ex: \"/Outlet/Blusas/\" -> ignora \"Outlet\", retorna \"Blusas\"\n      for (let i = parts.length - 1; i >= 0; i--) {\n        if (!regex.test(parts[i])) return parts[i];\n      }\n    }\n    return null;\n  };\n\n  const sources = [item?.productCategories, item?.categories];\n  return sources.reduce((result, source) => result || tryCategory(source), null);\n}\n\nexport function getItemCategory2(item: any) {\n  const strategies = [\n    () => item?.item_category2, \n    () => extractCategory2Label(item),\n    () => item?.category?.split?.('>')?.[1]?.trim?.(), // deco select_item context\n    () => item?.subGrup,\n  ];\n\n  for (const getValue of strategies) {\n    const value = getValue();\n\n    if (value !== null && value !== undefined) {\n      return value;\n    }\n  }\n\n  return null;\n}\n\nexport function getItemCategory4(item: any) {\n  const tags = item?.additionalInfo?.tags || item?.tags;\n  return Array.isArray(tags) && tags.length ? tags.join(',') : null;\n}\n\nconst BRAND_CODES = {\n  farm: 'farmrio',\n  'farm etc': 'farmetc',\n  'farm rio': 'farmrio',\n} as const;\n\ntype Standardized = keyof typeof BRAND_CODES\ninterface BrandItem {\n  brand?: string;\n  additionalInfo?: {\n    brandName?: string;\n  };\n}\n\n/**\n * Extrai o código padronizado (ex: 'farmrio') de uma única string de marca.\n * Retorna null se não houver mapeamento.\n */\nfunction getBrandCode(brand: string | undefined): string | null {\n  if (!brand) return null;\n  const standardized = brand.toLowerCase().trim();\n  return BRAND_CODES[standardized as Standardized] || null;\n}\n\n/**\n * Função principal que padroniza a marca ou lista de marcas para o formato final:\n * 'farmrio', 'farmetc', ou 'farmrio_farmetc'.\n */\nexport function normalizeBrand(input: string | BrandItem[] | BrandItem | string[] | undefined | null) {\n  let brandStrings = [];\n\n  if (Array.isArray(input) && input.every(item => typeof item === 'string')) {\n    brandStrings = input as string[];\n  } else if (Array.isArray(input)) {\n    // Se for um Array, coleta a string da marca de cada item.\n    brandStrings = input.map(item => item.additionalInfo?.brandName || item.brand);\n  } else if (typeof input === 'object' && input !== null && 'brand' in input) {\n    // Se for um Objeto único, trata como um Array de um único item (para reuso de lógica).\n    brandStrings = [(input as BrandItem).additionalInfo?.brandName || (input as BrandItem).brand];\n  } else if (typeof input === 'string') {\n    // Se for uma String (mal formatada ou não), trata diretamente.\n    return getBrandCode(input);\n  } else {\n    // Se for undefined, null, ou outro tipo não esperado.\n    return null;\n  }\n\n  const brandCodes = brandStrings\n    .map(getBrandCode)\n    .filter((code): code is string => code !== null); // ['farmrio', 'farmetc', 'farmrio']\n\n  const uniqueSortedCodes = [...new Set(brandCodes)].sort(); // ['farmetc', 'farmrio']\n\n  // Retorna a combinação ('farmrio', 'farmetc', ou 'farmrio_farmetc').\n  return uniqueSortedCodes.length > 0 ? uniqueSortedCodes.join('_') : null;\n}\n","import { normalizeBrand } from '../../utils';\n\nexport function brandFromOrderForm(context: Record<string, any>) {\n  if (!context.orderForm && !context.orderForm.items?.length) return null;\n\n  const items = context.orderForm.items;\n\n  return normalizeBrand(items);\n}\n","import { normalizeBrand } from '../../utils';\n\nexport function brandFromItem(context: Record<string, any>) {\n  const { item } = context;\n\n  return normalizeBrand(item?.additionalInfo?.brandName || item.brand || item.item_brand);\n}\n","import { brandFromOrderForm } from './resolvers/brand/fromOrderForm';\nimport { brandFromItem } from './resolvers/brand/fromItem';\nimport { normalizeBrand } from './utils';\nimport type { EventContext, EventName } from '../types';\n\n/**\n * Determines the brand for an event by using the context or extracting it based on the event type.\n *\n * Prefers `context.brand` when present; otherwise selects a resolver based on `eventName` to extract the brand.\n *\n * @param context - The event context which may already contain a `brand` or provide data for extraction\n * @param eventName - The event name used to choose the extraction strategy\n * @returns The resolved brand value, or `null` if no brand could be determined\n */\nexport function getBrand(context: EventContext, eventName: EventName) {\n  if (context?.brand) return normalizeBrand(context.brand) || context.brand || null;\n\n  switch (eventName) {\n    case 'CUSTOM_VIEW_CART':\n    case 'ADD_COUPON':\n    case 'ADD_PERSONAL_INFO':\n    case 'CUSTOM_ADD_SHIPPING_INFO':\n    case 'CUSTOM_ADD_PAYMENT_INFO':\n    case 'BEGIN_CHECKOUT':\n    case 'CUSTOM_BEGIN_CHECKOUT':\n    case 'SEARCH_ZIPCODE':\n    case 'ORDER_REVIEWED':\n    case 'PURCHASE':\n    case 'CUSTOM_PURCHASE':\n      return brandFromOrderForm(context);\n    case 'ADD_TO_CART':\n    case 'REMOVE_FROM_CART':\n      return brandFromItem(context);\n    default:\n      return null;\n  }\n}\n","const LAST_SELECTED_ITEM_KEY = 'last_selected_item';\nconst STORAGE_VIEWED = 'last_viewed_item';\nconst CART_LIST_HISTORY_KEY = 'cart_list_history';\nconst DAY_IN_MS = 24 * 60 * 60 * 1000;\n\ninterface StoredItemMemory {\n  item_id: string;\n  item_list_name: string;\n  timestamp: number;\n}\n\ninterface CartHistoryEntry {\n  item_id: string;\n  item_list_name: string;\n}\n\nfunction getStorage(): Storage | null {\n  try {\n    if (typeof window === 'undefined' || !window.localStorage) return null;\n    return window.localStorage;\n  } catch {\n    return null;\n  }\n}\n\nfunction parseJSON<T>(value: string | null): T | null {\n  if (!value) return null;\n\n  try {\n    return JSON.parse(value) as T;\n  } catch {\n    return null;\n  }\n}\n\nfunction isFreshTimestamp(timestamp: number): boolean {\n  const elapsed = Date.now() - timestamp;\n  return elapsed >= 0 && elapsed < DAY_IN_MS;\n}\n\nfunction isStoredItemMemory(value: unknown): value is StoredItemMemory {\n  if (!value || typeof value !== 'object') return false;\n\n  const candidate = value as Record<string, unknown>;\n  return (\n    typeof candidate.item_id === 'string' &&\n    typeof candidate.item_list_name === 'string' &&\n    typeof candidate.timestamp === 'number'\n  );\n}\n\nfunction normalizeStoredItemMemory(value: unknown): StoredItemMemory | null {\n  if (!value || typeof value !== 'object') return null;\n\n  const candidate = value as Record<string, unknown>;\n  const itemId = candidate.item_id;\n  const itemListName = candidate.item_list_name;\n  const timestamp = candidate.timestamp;\n\n  if (\n    typeof itemId !== 'string' ||\n    typeof itemListName !== 'string' ||\n    typeof timestamp !== 'number'\n  ) {\n    return null;\n  }\n\n  return {\n    item_id: itemId,\n    item_list_name: itemListName,\n    timestamp,\n  };\n}\n\nfunction resolveIdFromUnknownItem(item: Record<string, any> | null | undefined): string | null {\n  const id =\n    item?.productID ??\n    item?.productId ??\n    item?.item_group_id ??\n    item?.item_id ??\n    item?.id ??\n    null;\n\n  return id == null ? null : String(id);\n}\n\nexport function resolveItemId(item: Record<string, any> | null | undefined): string | null {\n  return resolveIdFromUnknownItem(item);\n}\n\nfunction readStoredItem(key: string): StoredItemMemory | null {\n  const storage = getStorage();\n  if (!storage) return null;\n\n  try {\n    const parsed = parseJSON<unknown>(storage.getItem(key));\n    const normalized = normalizeStoredItemMemory(parsed);\n    return normalized && isStoredItemMemory(normalized) ? normalized : null;\n  } catch {\n    return null;\n  }\n}\n\nfunction writeStoredItem(key: string, value: StoredItemMemory): void {\n  const storage = getStorage();\n  if (!storage) return;\n\n  try {\n    storage.setItem(key, JSON.stringify(value));\n  } catch {\n    // Analytics must never break storefront UI\n  }\n}\n\nfunction readCartHistory(): CartHistoryEntry[] {\n  const storage = getStorage();\n  if (!storage) return [];\n\n  try {\n    const parsed = parseJSON<unknown>(storage.getItem(CART_LIST_HISTORY_KEY));\n    if (!Array.isArray(parsed)) return [];\n\n    return parsed.filter((entry): entry is CartHistoryEntry => (\n      !!entry &&\n      typeof entry === 'object' &&\n      typeof (entry as Record<string, unknown>).item_id === 'string' &&\n      typeof (entry as Record<string, unknown>).item_list_name === 'string'\n    ));\n  } catch {\n    return [];\n  }\n}\n\nfunction writeCartHistory(history: CartHistoryEntry[]): void {\n  const storage = getStorage();\n  if (!storage) return;\n\n  try {\n    storage.setItem(CART_LIST_HISTORY_KEY, JSON.stringify(history));\n  } catch {\n    // Analytics must never break storefront UI\n  }\n}\n\nfunction getLatestItemListNameById(history: CartHistoryEntry[]) {\n  const byId = new Map<string, string>();\n\n  for (let index = history.length - 1; index >= 0; index -= 1) {\n    const entry = history[index];\n    if (!byId.has(entry.item_id)) {\n      byId.set(entry.item_id, entry.item_list_name);\n    }\n  }\n\n  return byId;\n}\n\nexport function saveSelectedItem(productId: string | number | null | undefined, listName: string | null | undefined) {\n  if (productId == null || !listName) return;\n\n  const payload: StoredItemMemory = {\n    item_id: String(productId),\n    item_list_name: String(listName),\n    timestamp: Date.now(),\n  };\n\n  writeStoredItem(LAST_SELECTED_ITEM_KEY, payload);\n}\n\nexport function saveViewedItem(productId: string | number | null | undefined, listName: string | null | undefined) {\n  if (productId == null) return;\n\n  const payload: StoredItemMemory = {\n    item_id: String(productId),\n    item_list_name: String(listName ?? 'PDP'),\n    timestamp: Date.now(),\n  };\n\n  writeStoredItem(STORAGE_VIEWED, payload);\n}\n\nexport function resolveItemListName(params: {\n  event: string;\n  item: Record<string, any> | null | undefined;\n  itemListName: string | null | undefined;\n}) {\n  const { event, item, itemListName } = params;\n  const currentListName = itemListName ?? null;\n  const isResolvableEvent = event === 'VIEW_ITEM' || event === 'ADD_TO_CART';\n\n  if (!isResolvableEvent) return currentListName;\n  const currentItemId = resolveIdFromUnknownItem(item);\n\n  if (event === 'VIEW_ITEM') {\n    if (!currentItemId) return 'PDP';\n\n    const selectedItem = readStoredItem(LAST_SELECTED_ITEM_KEY);\n    if (!selectedItem) return 'PDP';\n\n    if (selectedItem.item_id === currentItemId && isFreshTimestamp(selectedItem.timestamp)) {\n      return selectedItem.item_list_name;\n    }\n\n    return 'PDP';\n  }\n\n  // For add_to_cart, keep explicit non-PDP origin untouched.\n  if (currentListName !== 'PDP' && currentListName !== null) return currentListName;\n  if (!currentItemId) return currentListName;\n\n  const viewedItem = readStoredItem(STORAGE_VIEWED);\n  if (viewedItem && viewedItem.item_id === currentItemId && isFreshTimestamp(viewedItem.timestamp)) {\n    return viewedItem.item_list_name;\n  }\n\n  return currentListName === 'PDP' ? 'PDP' : null;\n}\n\nexport function appendCartHistory(productId: string | number | null | undefined, listName: string | null | undefined) {\n  if (productId == null) return;\n\n  const history = readCartHistory();\n  history.push({\n    item_id: String(productId),\n    item_list_name: listName ? String(listName) : 'PDP',\n  });\n\n  writeCartHistory(history);\n}\n\nexport function getCartHistoryItemListNameMap() {\n  const history = readCartHistory();\n  if (!history.length) return null;\n\n  return getLatestItemListNameById(history);\n}\n\nexport function resolveItemListNameFromCartHistory(\n  item: Record<string, any> | null | undefined,\n  cartHistoryMap: Map<string, string> | null = null\n) {\n  const itemId = resolveIdFromUnknownItem(item);\n  const map = cartHistoryMap ?? getCartHistoryItemListNameMap();\n\n  if (!itemId) return undefined;\n\n  const resolved = map?.get(itemId);\n  return resolved;\n}\n\nfunction pickSelectedItemFromResolvedItems(items: Record<string, any>[], source: Record<string, any>): Record<string, any> | null {\n  if (!Array.isArray(items) || items.length === 0) return null;\n\n  if (typeof source?.index === 'number') {\n    const indexed = items.find((item) => item?.index === source.index) ?? items[source.index];\n    if (indexed && typeof indexed === 'object') return indexed;\n  }\n\n  return items[0];\n}\n\nexport function persistSelectItemOriginFromResolvedItems(items: Record<string, any>[], source: Record<string, any>) {\n  const selectedItem = pickSelectedItemFromResolvedItems(items, source);\n  if (!selectedItem) return;\n\n  const productId = resolveIdFromUnknownItem(selectedItem);\n  const listName = selectedItem?.item_list_name ?? source?.itemListName ?? source?.item_list_name ?? null;\n  saveSelectedItem(productId, listName);\n}\n","import type { EventContext } from '../../../types';\n\nimport {\n  getItemSku,\n  getDiscount,\n  getItemCategory,\n  getItemCategory2,\n  getItemCategory4,\n  getItemShippingTier,\n  normalizeBrand,\n  resizeVtexImage,\n} from '../../utils';\nimport {\n  getCartHistoryItemListNameMap,\n  resolveItemListNameFromCartHistory,\n} from '../../utils/itemListAttribution';\n\n/**\n * Builds an array of normalized item objects from the order form contained in the given context.\n *\n * @param context - EventContext containing an orderForm with items to convert\n * @returns An array of item-like objects derived from `context.orderForm.items`, each containing fields such as `item_id`, `price`, `quantity`, `item_sku`, `item_name`, category and variant attributes, and `discount`\n */\nexport async function itemsFromOrderForm(context: EventContext) {\n  const items = context.orderForm?.items || [];\n  const cartHistoryMap = getCartHistoryItemListNameMap();\n\n  if (!items.length) return [];\n\n  return await Promise.all(\n    items.map(async (item: EventContext) => ({\n        item_id: item.productId,\n        item_category2: getItemCategory2(item),\n        item_category4: getItemCategory4(item),\n        item_shipping_tier: getItemShippingTier(context.orderForm, item),\n        price: parseFloat((item?.price / 100).toFixed(2)) || 0,\n        quantity: item.quantity || 1,\n        item_ref: item.refId || null,\n        item_brand: normalizeBrand(item.additionalInfo?.brandName) || item.additionalInfo?.brandName || null,\n        item_sku: (await getItemSku(item)) || null,\n        item_name: item?.name.replace(item?.skuName, '').trim() || item.name || null,\n        item_category: getItemCategory(item) || null,\n        item_variant: item?.skuName?.split(' - ')[0]?.trim() || '',\n        item_variant2: item?.skuName?.split(' - ')[1]?.trim() || '',\n        item_url: `https://www.farmrio.com.br${item.detailUrl}` || null,\n        discount: getDiscount(item),\n        image_url: resizeVtexImage(item?.image) || resizeVtexImage(item?.imageUrl) || null,\n        item_list_name: resolveItemListNameFromCartHistory(item, cartHistoryMap) ?? null,\n      }))\n  );\n}\n","import {\n  getItemSku,\n  getDiscount,\n  getItemCategory,\n  getItemCategory2,\n  getItemCategory4,\n  getItemShippingTier,\n  resizeVtexImage,\n} from '../../utils';\nimport { appendCartHistory, resolveItemId, resolveItemListName } from '../../utils/itemListAttribution';\n\nexport async function itemsFromItem(context: Record<string, any>, event: string) {\n  const { item, orderForm, itemListName } = context;\n  const resolvedListName = resolveItemListName({ event, item, itemListName });\n  const resolvedItemId = resolveItemId(item);\n\n  if (event === 'ADD_TO_CART') {\n    appendCartHistory(resolvedItemId, resolvedListName);\n  }\n\n  return [\n    {\n      index: typeof item?.index === 'number' ? item.index : null,\n      quantity: 1,\n      item_id: item?.productId|| item?.item_group_id || item?.item_id || item?.id || null,\n      item_category2: getItemCategory2(item),\n      item_category4: getItemCategory4(item),\n      item_shipping_tier: event === 'REMOVE_FROM_CART' ? getItemShippingTier(orderForm, item) : null,\n      price: item?.price || 0,\n      item_ref: item?.ref || item?.refId || item?.item_ref || item?.additionalProperty?.find((i: { name: string }) => i.name === \"RefId\").value || item?.itemOffered?.gtin.substring(0, item?.itemOffered?.gtin.lastIndexOf('_')) || null,\n      item_brand: item?.additionalInfo?.brandName || item?.item_brand || item?.brand?.name || item?.itemOffered?.brand?.name || null,\n      item_sku: item?.sku || item?.itemOffered?.sku || (await getItemSku(item)) || null,\n      item_name: item?.name?.replace(item?.skuName, '').trim() || item?.name?.split(' - ').shift() || item?.item_name?.split(' - ').shift() || item?.itemOffered?.isVariantOf?.name?.split(' - ').shift() || null,\n      item_category: getItemCategory(item) || null,\n      // item_variant: (item?.skuName || item?.item_variant || item?.name || item?.itemOffered.name).split(/[-/]/)[0].trim() || null,\n      item_variant: (item?.skuName || item?.item_variant || item?.name || item?.itemOffered.name).split(' - ')[0]?.trim() || null,\n      // item_variant2: item?.size || item?.itemAttributes?.size || (item?.skuName || item?.name || item?.itemOffered.name)?.split(/[-/]/).pop()?.trim() || null,\n      item_variant2: item?.size || item?.itemAttributes?.size || (item?.skuName || item?.name || item?.itemOffered.name)?.split(' - ')[1]?.trim() || null,\n      discount: getDiscount(item),\n      item_list_name: resolvedListName,\n\n      item_url: item?.item_url || null, // add_to_cart dito\n      image_url: resizeVtexImage(item?.image) || resizeVtexImage(item?.imageUrl) || null,\n    },\n  ];\n}\n \n","import { getDiscount, getItemCategory, getItemCategory2, normalizeBrand } from '../../utils';\n\nexport async function itemsFromList(context: Record<string, any>) {\n  return (context?.list || []).map((item: any) => {\n    return {\n      price: item?.price?.list || item?.price || item?.offers?.lowPrice || item?.priceRange?.listPrice?.highPrice || null,\n      quantity: 1,\n      item_ref: item?.ref || item?.item_ref || item?.referenceId?.[0].Value || item?.productReference || item?.additionalProperty.find((i: { name: string }) => i.name === \"RefId\").value || null,\n      index: typeof context?.index === 'number' ? context.index : Number(item?.index),\n      item_brand: item?.item_brand ? item.item_brand : item.isNotFarm ? item?.item_brand : normalizeBrand(item?.brand?.name) || normalizeBrand(context.brand) || normalizeBrand(item?.item_brand) || null,\n      item_name: item?.productName?.split(' - ').shift() || item?.alternateName?.split(' - ').shift() || item?.item_name?.split(' - ').shift() || item?.seo?.title?.split(' - ').shift() || null,\n      item_category: getItemCategory(item) || null,\n      item_variant: item?.name?.split(\"-\")?.[0].trim() || item?.item_variant || item?.productName?.split(\"-\")?.[1].trim() || null,\n      item_category2: getItemCategory2(item) || null,\n      item_id: item?.productID || item?.productId || item?.item_id || item?.id || null,\n      discount: getDiscount(item) || null,\n      item_list_name: context?.itemListName || null,\n    }\n  })\n}\n","import {\n  getDiscount,\n  getItemCategory,\n  getItemCategory2,\n  normalizeBrand,\n  resizeVtexImage,\n} from '../../utils';\nimport { resolveItemId, resolveItemListName, saveViewedItem } from '../../utils/itemListAttribution';\n\nexport async function itemsFromPDP(context: Record<string, any>, event: string) {\n  const { item, value, brand } = context;\n  const resolvedListName = resolveItemListName({ event, item, itemListName: null });\n  const resolvedItemId = resolveItemId(item);\n\n  if (event === 'VIEW_ITEM') {\n    saveViewedItem(resolvedItemId, resolvedListName);\n  }\n\n  return [\n    {\n      price: value || 0,\n      quantity: 1,\n      item_ref: item?.ref || item?.additionalProperty?.find((i: { name: string }) => i.name === \"RefId\").value || item?.productReference || null,\n      item_brand: item.isNotFarm ? item?.item_brand : normalizeBrand(item?.brand.name) || normalizeBrand(brand) || null,\n      item_name: item?.productName || item?.alternateName || null,\n      item_category: getItemCategory(item) || null,\n      item_variant: item?.name?.split(\"-\")[0].trim() || null,\n      item_category2: getItemCategory2(item) || item?.category?.split(\">\")[1]?.trim() || null,\n      item_id: item?.productID || item?.productId || item?.item_group_id || null,\n      discount: getDiscount(item) || null,\n\n      // dito/insider params view_item\n      item_sku: item?.sku || item?.productId || null,\n      item_url: item?.url || item?.item_url || item?.link || null,\n      image_url: resizeVtexImage(item?.image) || resizeVtexImage(item?.imageUrl) || null,\n      seller_id: item?.seller || null,\n      item_list_name: resolvedListName,\n    },\n  ];\n}\n","import {\n  isPDP,\n  normalizeBrand,\n  getItemCategory,\n  getItemCategory2,\n  getProductByRefId,\n  extractRefIdFromUrl,\n} from '../../utils';\n\nexport async function itemsFromBanner(context: Record<string, any>) {\n  const isUrlFromPDP = isPDP(context?.bannerUrl);\n\n  if (!isUrlFromPDP) return [];\n\n  const product = await getProductByRefId(context?.bannerUrl);\n\n  const item = product?.items[0];\n\n  return {\n    price: item?.sellers[0].commertialOffer.Price || 0,\n    quantity: 1,\n    item_ref: extractRefIdFromUrl(context?.bannerUrl),\n    item_brand: normalizeBrand(product.brand) || null,\n    item_name: product?.productName || product?.alternateName || product?.item_name || null,\n    item_category: getItemCategory(product) || null,\n    item_variant: item?.name?.split(\"-\").pop().trim() || null,\n    item_category2: getItemCategory2(product) || null,\n    item_id: product?.productId || null,\n    discount: item?.sellers[0].commertialOffer.ListPrice - item?.sellers[0].commertialOffer.Price || null,\n  }\n}\n","import { itemsFromOrderForm } from './resolvers/items/fromOrderForm';\nimport { itemsFromItem } from './resolvers/items/fromItem';\nimport { itemsFromList } from './resolvers/items/fromList';\nimport { itemsFromPDP } from './resolvers/items/fromPdp';\nimport { itemsFromBanner } from './resolvers/items/fromBanner';\nimport { persistSelectItemOriginFromResolvedItems } from './utils/itemListAttribution';\n\n/**\n * Selects the appropriate item resolver based on the event name and returns its result.\n *\n * @param context - Runtime context passed to the selected resolver\n * @param eventName - Event identifier that determines which resolver to use\n * @returns The resolved items for the event, or `null` if the event is not recognized\n */\nexport function getItems(context: Record<string, any>, eventName: string) {\n  if (context?.items) return context.items;\n\n  switch (eventName) {\n    case 'CUSTOM_VIEW_CART':\n    case 'BEGIN_CHECKOUT':\n    case 'CUSTOM_BEGIN_CHECKOUT':\n    case 'CUSTOM_ADD_SHIPPING_INFO':\n    case 'CUSTOM_ADD_PAYMENT_INFO':\n    case 'PURCHASE':\n    case 'CUSTOM_PURCHASE':\n      return itemsFromOrderForm(context);\n    case 'ADD_TO_CART':\n    case 'ADD_TO_WISHLIST':\n    case 'REMOVE_FROM_CART':\n      return itemsFromItem(context, eventName);\n    case 'SELECT_ITEM':\n      return itemsFromList(context).then((items) => {\n        persistSelectItemOriginFromResolvedItems(items, context);\n        return items;\n      });\n    case 'VIEW_ITEM_LIST':\n      return itemsFromList(context)\n    case 'VIEW_ITEM':\n    case 'CUSTOM_VIEW_ITEM':\n      return itemsFromPDP(context, eventName)\n    case 'VIEW_PROMOTION':\n    case 'SELECT_PROMOTION':\n      return itemsFromBanner(context)\n    default:\n      return null;\n  }\n}\n","import { paymentTypeMap } from \"../../../core/utils\";\n\nexport function paymentTypeFromOrderForm(context: Record<string, any>) {\n  if (context.payment_type) return context.payment_type;\n  if (!context.orderForm) return null;\n\n  const payments = context.orderForm.paymentData?.payments || [];\n  const systems = context.orderForm.paymentData?.paymentSystems || [];\n  if (!payments.length || !systems.length) return null;\n\n  const selectedPayment = payments.find((p: { paymentSystem: string }) => p?.paymentSystem) || payments[0];\n  const id = String(selectedPayment?.paymentSystem || '').trim();\n  if (!id) return null;\n\n  const system = systems.find((s: { id: string }) => String(s.id) === id);\n  const name = system?.name?.toLowerCase() || '';\n  const match = paymentTypeMap.find(([key]) => name.includes(key));\n\n  return match ? match[1] : null;\n}\n","import { paymentTypeMap } from \"../../../core/utils\";\n\nexport function paymentTypeFromOrderGroup(context: Record<string, any>) {\n  if (!context.orderForm) return null;\n\n  const transactions = context.orderForm.paymentData?.transactions || [];\n  if (!transactions.length) return null;\n\n  const payments = transactions[0]?.payments || [];\n  if (!payments.length) return null;\n\n  const name = payments[0]?.paymentSystemName?.toLowerCase() || '';\n  const match = paymentTypeMap.find(([key]) => name.includes(key));\n\n  return match ? match[1] : null;\n}\n","import { paymentTypeFromOrderForm } from './resolvers/paymentType/fromOrderForm';\nimport { paymentTypeFromOrderGroup } from './resolvers/paymentType/fromOrderGroup';\n\n/**\n * Selects the appropriate payment_type resolver based on the event name and returns its result.\n *\n * @param context - Runtime context passed to the selected resolver\n * @param eventName - Event identifier that determines which resolver to use\n * @returns The resolved payment_type for the event, or `null` if the event is not recognized\n */\nexport function getPaymentType(context: Record<string, any>, eventName: string) {\n  if (context?.paymentType) return context.paymentType;\n\n  switch (eventName) {\n    case 'ORDER_REVIEWED':\n    case 'CUSTOM_ADD_PAYMENT_INFO':\n      return paymentTypeFromOrderForm(context);\n    case 'PURCHASE':\n    case 'CUSTOM_PURCHASE':\n      return paymentTypeFromOrderGroup(context)\n    default:\n      return null;\n  }\n}\n","import { documentToHash } from \"../core/utils\";\nimport { EventContext, EventName } from \"../types\";\n\nexport async function getUserInfo(context: EventContext, eventName: EventName) {\n  // list of domains to avoid cors erros to fetch VTEX IO endpoint\n  const PROD_DOMAINS: Record<string, Record<string, string>> = {\n    \"animale\": {\n      \"store\": \"https://www.animale.com.br\",\n      \"checkout\": \"https://secure.animale.com.br\",\n    },\n    \"farm\": {\n      \"store\": \"https://lojafarm.myvtex.com\"\n    },\n    \"mariafilo\": {\n      \"store\": \"https://mariafilo.myvtex.com\",\n      \"checkout\": \"https://secure.mariafilo.com.br\",\n    },\n    \"lojacrisbarros\": {\n      \"store\": \"https://lojacrisbarros.myvtex.com\",\n      \"checkout\": \"https://secure.crisbarros.com.br\",\n    },\n    \"lojaoffpremium\": {\n      \"store\": \"https://lojaoffpremium.myvtex.com\",\n      \"checkout\": \"https://secure.offpremium.com.br\",\n    },\n    \"bynv\": {\n      \"store\": \"https://bynv.myvtex.com\",\n    },\n    \"fabula\": {\n      \"store\": \"https://lojafabula.myvtex.com\",\n    },\n  };\n\n  const domain = PROD_DOMAINS[context.account || 'https://www.animale.com.br']?.[context.platform || 'store'];\n\n  if (!domain) return { customer: { email: context.userEmail, id: context?.userId }, address: null };\n\n  try {\n    const api = `${domain}/_v/user-info`;\n    const response = await fetch(api, {\n      method: 'POST',\n      body: JSON.stringify({ email: context.userEmail })\n    });\n\n    if (response.status !== 200) {\n      // profile/edit and checkout route; we get the info directly from the input text\n      if (context?.manuallyInfo && context.manuallyInfo?.cpf) {\n        const { cpf, birthDate, phone, firstName, lastName, email, email_optin } = context.manuallyInfo\n        const document = cpf?.replace(/\\D/g, '')\n        const hashedDocument = await documentToHash(document)\n\n        return {\n          address: null,\n          customer: {\n            email,\n            phone,\n            document,\n            lastName,\n            birthDate,\n            firstName,\n            email_optin,\n            homePhone: phone,\n            cpf: hashedDocument,\n          }\n        };\n      }\n\n      return { customer: { email: context.userEmail, id: context?.userId }, address: null };\n    }\n\n    const res = await response.json();\n    const document = res?.customer?.document?.replace(/\\D/g, '')\n    const hashedDocument = await documentToHash(document)\n\n    return { ...res, customer: { ...res.customer, cpf: hashedDocument, document } }\n  } catch (_) {\n    // profile/edit and checkout route; we get the info directly from the input text\n    if (context?.manuallyInfo && context.manuallyInfo?.cpf) {\n      const { cpf, birthDate, phone, firstName, lastName, email, email_optin } = context.manuallyInfo\n      const document = cpf?.replace(/\\D/g, '')\n      const hashedDocument = await documentToHash(document)\n\n      return {\n        address: null,\n        customer: {\n          email,\n          phone,\n          document,\n          lastName,\n          birthDate,\n          firstName,\n          email_optin,\n          homePhone: phone,\n          cpf: hashedDocument,\n        }\n      };\n    }\n\n    return { customer: { email: context.userEmail, id: context?.userId }, address: null };\n  }\n}","import type { EventContext, EventName, LogisticInfo } from '../types';\nimport { getBrand } from './brand';\nimport { getItems } from './items';\nimport { getPaymentType } from './paymentType';\nimport { getUserInfo } from './userInfo';\nimport { toNum } from '../core/utils';\n\n\nexport const paramGetters = {\n  brand: getBrand,\n\n  items: getItems,\n\n  payment_type: getPaymentType,\n\n  user_info: getUserInfo,\n\n  content_type: (context: EventContext, eventName: EventName) => {\n    if (context?.content_type) return context.content_type;\n\n    return `regiao`\n      .concat(':' + context.category)\n      .concat(context.subcategory ? ':' + context.subcategory : '')\n      .concat(':' + context.componentName) || null\n  },\n\n  region: (context: EventContext, eventName: EventName) => {\n    return context.region || null;\n  },\n\n  line_items: (context: EventContext, eventName: EventName) => {\n    if (context?.lineItems) return context.lineItems;\n\n    if (context?.item) {\n      return [context.item.productId || context.item.productID || context.item.item_id];\n    }\n\n    if (context?.list) {\n      return context.list.map((item: { productID: string, id: string, productId: string }) => item?.productID || item?.id || item?.productId)\n    }\n\n    return (context.orderForm.items || [])\n      .map((item: EventContext) => item.productId)\n      .join(',');\n  },\n\n  currency: (context: EventContext, eventName: EventName) => {\n    if (context?.currency) return context.currency\n\n    if (context?.bannerUrl) return 'BRL'\n\n    if (context?.item) {\n      return context.item?.offers?.priceCurrency || 'BRL'\n    }\n\n    return context.orderForm?.storePreferencesData?.currencyCode || null;\n  },\n\n  value: (context: EventContext, eventName: EventName) => {\n    if (context?.value) return toNum(context.value)\n\n    return context.item ? toNum(context.item?.price) : context.orderForm?.value != null\n      ? context.orderForm.value / 100\n      : null;\n  },\n\n  total_discount: (context: EventContext, eventName: EventName) => {\n    if (context?.totalDiscount) return context.totalDiscount\n\n    const totalsList = context.orderForm?.totalizers || context.orderForm?.totals || []; // totals for ordergroup and orderform have different names\n    const items = context.orderForm.items;\n    const totalDiscount = items.reduce((acc: number, item: { quantity: number, listPrice: number, sellingPrice: number }) => {\n      const unitDiscount = Math.max(0, item.listPrice - item.sellingPrice);\n      return acc + (unitDiscount * item.quantity);\n    }, 0);\n\n    const discounts = totalsList.find((t: { id: string }) => t.id === 'Discounts');\n    return Math.abs((discounts?.value || 0) + totalDiscount) / 100 || null;\n  },\n\n  subtotal: (context: EventContext, eventName: EventName) => {\n    const totalsList = context.orderForm?.totalizers || context.orderForm?.totals || []; // totals for ordergroup and orderform have different names\n\n    const subtotal =\n      totalsList\n        .filter((t: EventContext) => t.id === 'Items')\n        .reduce((acc: number, t: EventContext) => acc + (t.value || 0), 0) / 100 || 0;\n\n    return subtotal\n  },\n\n  coupon_message: (context: EventContext, eventName: EventName) => {\n    if (context.couponMessage) return context.couponMessage;\n\n    const messages = context.orderForm?.messages || [];\n\n    if (messages.length === 0) return null;\n\n    const couponMessages = messages.filter((msg: EventContext) =>\n      msg.text.toLowerCase().includes('cupom')\n    );\n\n    if (couponMessages.length === 0) return null;\n\n    return couponMessages.map((msg: EventContext) => msg.text).join(' | ');\n  },\n\n  seller_cod_name: (context: EventContext, eventName: EventName) => {\n    return context.appliedSellerCodName || context?.orderForm.marketingData.utmiCampaign || null;\n  },\n\n  coupon: (context: EventContext, eventName: EventName) => {\n    return context.appliedCoupon || context?.orderForm?.marketingData?.coupon || null;\n  },\n\n  pre_filled: (context: EventContext, eventName: EventName) => {\n    return !!context.preFilled;\n  },\n\n  search_term: (context: EventContext, eventName: EventName) => {\n    return context.searchTerm || null;\n  },\n\n  search_found: (context: EventContext, eventName: EventName) => {\n    return !!context.searchFound;\n  },\n\n  search_quantity: (context: EventContext, eventName: EventName) => {\n    return context.searchQuantity || 0;\n  },\n\n  promotion_name: (context: EventContext, eventName: EventName) => {\n    return context.promotionName || null;\n  },\n\n  creative_name: (context: EventContext, eventName: EventName) => {\n    return context.creativeName || null;\n  },\n\n  creative_slot: (context: EventContext, eventName: EventName) => {\n    return context.creativeSlot || null;\n  },\n\n  zipcode: (context: EventContext, eventName: EventName) => {\n    return context.zipCode || null;\n  },\n\n  size: (context: EventContext, eventName: EventName) => {\n    return context.size || null;\n  },\n\n  item_ref: (context: EventContext, eventName: EventName) => {\n    return context.itemRef || null;\n  },\n\n  flag_pickup: (context: EventContext, eventName: EventName) => {\n    const orderForm = context.orderForm;\n    if (!orderForm) return null;\n\n    const logisticsInfo = orderForm.shippingData?.logisticsInfo || [];\n    const hasPickup = logisticsInfo.some((info: LogisticInfo) =>\n      info.slas?.some((sla) => sla.deliveryChannel === 'pickup-in-point')\n    );\n\n    return hasPickup\n  },\n\n  shippings: (context: EventContext, eventName: EventName) => {\n    const orderForm = context.orderForm;\n    if (!orderForm) return null;\n\n    const groupShipping: Record<string, any> = {};\n\n    for (const info of orderForm.shippingData.logisticsInfo) {\n      const item = orderForm.items[info.itemIndex]\n      if (!item) continue\n\n      for (const sla of info.slas) {\n        const key = sla.name\n\n        if (!groupShipping[key]) {\n          groupShipping[key] = {\n            shipping_tier: sla.name,\n            delivery_time: parseInt(sla.shippingEstimate),\n            shipping: parseFloat((sla.price / 100).toFixed(1)),\n            line_items: []\n          }\n        }\n\n        groupShipping[key].line_items.push(item.id)\n      }\n    }\n\n    const shippings = Object.values(groupShipping).map((s) => ({\n      shipping: s.shipping,\n      shipping_tier: s.shipping_tier,\n      delivery_time: s.delivery_time,\n      line_items: s.line_items.join(',')\n    }))\n\n    return shippings || null\n  },\n\n  shipping: (context: EventContext, eventName: EventName) => {\n    const logistics = context?.orderForm?.shippingData?.logisticsInfo ?? []\n    return logistics.reduce((total: number, item: any) => {\n      const selected = item.slas?.find((sla: any) => sla.id === item.selectedSla)\n      return total + (selected?.price ?? 0)\n    }, 0)\n  },\n\n  shipping_tier: (context: EventContext, eventName: EventName) => {\n    const logistics = context?.orderForm?.shippingData?.logisticsInfo ?? []\n    const selectedSlas = logistics\n      .map((item: {\n        selectedSla?: string,\n        slas?: Array<{\n          id: string,\n          deliveryChannel: string,\n          name?: string,\n          pickupStoreInfo?: { friendlyName?: string }\n        }>\n      }) => {\n        if (!item.selectedSla) return null;\n        return item.slas?.find((sla) => sla.id === item.selectedSla) || null;\n      })\n      .filter(Boolean) as Array<{\n        deliveryChannel: string,\n        name?: string,\n        pickupStoreInfo?: { friendlyName?: string }\n      }>;\n\n    if (selectedSlas.length === 0) return null;\n\n    const uniqueTiers = Array.from(\n      new Map(\n        selectedSlas.map((sla) => {\n          const key = sla.deliveryChannel === 'pickup-in-point'\n            ? `pickup:${sla.pickupStoreInfo?.friendlyName || sla.name || ''}`\n            : `delivery:${sla.name || ''}`;\n          return [key, sla];\n        })\n      ).values()\n    );\n\n    const sortedTiers = uniqueTiers.sort((a, b) => {\n      const aOrder = a.deliveryChannel === 'pickup-in-point' ? 0 : 1;\n      const bOrder = b.deliveryChannel === 'pickup-in-point' ? 0 : 1;\n      if (aOrder !== bOrder) return aOrder - bOrder;\n\n      const aLabel = a.deliveryChannel === 'pickup-in-point'\n        ? (a.pickupStoreInfo?.friendlyName || a.name || '')\n        : (a.name || '');\n      const bLabel = b.deliveryChannel === 'pickup-in-point'\n        ? (b.pickupStoreInfo?.friendlyName || b.name || '')\n        : (b.name || '');\n\n      return aLabel.localeCompare(bLabel, 'pt-BR');\n    });\n\n    const shippingTier = sortedTiers\n      .map((sla) => (\n        sla.deliveryChannel === 'pickup-in-point'\n          ? `retirada em loja${sla.pickupStoreInfo?.friendlyName ? `: ${sla.pickupStoreInfo.friendlyName}` : ''}`\n          : sla.deliveryChannel === 'delivery'\n            ? `receba em casa${sla.name ? `: ${sla.name}` : ''}`\n            : null\n      ))\n      .filter(Boolean)\n      .join(', ');\n\n    return shippingTier || null;\n  },\n\n  transaction_id: (context: EventContext, eventName: EventName) => {\n    return context.orderForm?.orderGroup?.toString() || null;\n  },\n\n  available_grid: (context: EventContext, eventName: EventName) => {\n    return context.availableGrid || null;\n  },\n  method: (context: EventContext, eventName: EventName) => {\n    return context.method || null;\n  },\n  type: (context: EventContext, eventName: EventName) => {\n    return context.type || null;\n  },\n}","import { EVENTS } from '../core/constants';\nimport { paramGetters } from '../params';\nimport type { EventName, EventContext } from '../types'\n\ntype ParamName = keyof typeof paramGetters;\n\n/**\n * Resolve and return the required parameters for a given event.\n *\n * @param context - Context passed to each parameter getter (defaults to an empty object)\n * @param eventName - The event whose required parameters should be resolved\n * @returns An object mapping each required parameter name to its resolved value (`null` when a param getter is missing), or `undefined` if the event has no configuration\n */\nexport async function getParameters(context: EventContext = {}, eventName: EventName) {\n  const eventConfig = EVENTS[eventName] as { requiredParams: string[] };\n\n  if (!eventConfig) return;\n\n  const params = Object.fromEntries(\n    await Promise.all(\n      eventConfig.requiredParams.map(async (param) => {\n        const getter = paramGetters[param as ParamName];\n\n        if (typeof getter !== 'function') {\n          console.error(`[DT] Missing paramGetter for param: ${param}`);\n          return [param, null]; // ou undefined\n        }\n        \n        return [param, await getter(context, eventName)];\n      })\n    )\n  );\n\n  return params;\n}\n"],"mappings":"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","names":["document","_a","_a","document","hashedDocument","_a","_b"]}