@azzas/azzas-tracker-web 1.0.16 → 1.0.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/mod.cjs +13 -8
- package/dist/mod.cjs.map +1 -1
- package/dist/mod.d.cts +6 -6
- package/dist/mod.d.ts +6 -6
- package/dist/mod.global.js +13 -8
- package/dist/mod.global.js.map +1 -1
- package/dist/mod.js +13 -8
- package/dist/mod.js.map +1 -1
- package/package.json +1 -1
package/dist/mod.cjs
CHANGED
|
@@ -28,7 +28,7 @@ module.exports = __toCommonJS(src_exports);
|
|
|
28
28
|
|
|
29
29
|
// src/core/constants.ts
|
|
30
30
|
var EVENTS = {
|
|
31
|
-
|
|
31
|
+
CUSTOM_VIEW_CART: {
|
|
32
32
|
name: "view_cart",
|
|
33
33
|
destinations: ["Dito", "DataLayer"],
|
|
34
34
|
requiredParams: [
|
|
@@ -120,7 +120,7 @@ var EVENTS = {
|
|
|
120
120
|
destinations: ["DataLayer"],
|
|
121
121
|
requiredParams: ["brand", "pre_filled", "line_items", "currency", "value", "total_discount", "subtotal"]
|
|
122
122
|
},
|
|
123
|
-
|
|
123
|
+
CUSTOM_ADD_SHIPPING_INFO: {
|
|
124
124
|
name: "add_shipping_info",
|
|
125
125
|
destinations: ["DataLayer"],
|
|
126
126
|
requiredParams: [
|
|
@@ -136,7 +136,7 @@ var EVENTS = {
|
|
|
136
136
|
"items"
|
|
137
137
|
]
|
|
138
138
|
},
|
|
139
|
-
|
|
139
|
+
CUSTOM_ADD_PAYMENT_INFO: {
|
|
140
140
|
name: "add_payment_info",
|
|
141
141
|
destinations: ["DataLayer"],
|
|
142
142
|
requiredParams: [
|
|
@@ -355,7 +355,7 @@ async function itemsFromOrderForm(context) {
|
|
|
355
355
|
item_name: item.name || item.id || null,
|
|
356
356
|
item_category: getItemCategory(item) || null,
|
|
357
357
|
item_variant: item.skuName.split("-")[0].trim(),
|
|
358
|
-
item_variant2: ((_b = item.skuName.split("-")
|
|
358
|
+
item_variant2: ((_b = item.skuName.split("-").pop()) == null ? void 0 : _b.trim()) || "",
|
|
359
359
|
discount: getDiscount(item)
|
|
360
360
|
};
|
|
361
361
|
})
|
|
@@ -380,7 +380,7 @@ async function itemsFromItem(context) {
|
|
|
380
380
|
item_name: item.name || item.id || null,
|
|
381
381
|
item_category: getItemCategory(item) || null,
|
|
382
382
|
item_variant: item.skuName.split("-")[0].trim(),
|
|
383
|
-
item_variant2: ((_b = item.skuName.split("-")
|
|
383
|
+
item_variant2: ((_b = item.skuName.split("-").pop()) == null ? void 0 : _b.trim()) || "",
|
|
384
384
|
discount: getDiscount(item),
|
|
385
385
|
item_list_name: null,
|
|
386
386
|
index: 0
|
|
@@ -440,7 +440,11 @@ var paramGetters = {
|
|
|
440
440
|
return context.region || null;
|
|
441
441
|
},
|
|
442
442
|
line_items: (context, eventName) => {
|
|
443
|
-
|
|
443
|
+
if (context == null ? void 0 : context.lineItems) return context.lineItems;
|
|
444
|
+
if (context == null ? void 0 : context.item) {
|
|
445
|
+
return [context.item.productId];
|
|
446
|
+
}
|
|
447
|
+
return (context.orderForm.items || []).map((item) => item.productId).join(",");
|
|
444
448
|
},
|
|
445
449
|
currency: (context, eventName) => {
|
|
446
450
|
var _a, _b;
|
|
@@ -452,7 +456,8 @@ var paramGetters = {
|
|
|
452
456
|
},
|
|
453
457
|
total_discount: (context, eventName) => {
|
|
454
458
|
var _a, _b;
|
|
455
|
-
|
|
459
|
+
const discounts = (_b = (_a = context.orderForm) == null ? void 0 : _a.totalizers) == null ? void 0 : _b.find((t) => t.id === "Discounts");
|
|
460
|
+
return discounts ? Math.abs(discounts.value) / 100 : 0;
|
|
456
461
|
},
|
|
457
462
|
subtotal: (context, eventName) => {
|
|
458
463
|
var _a, _b;
|
|
@@ -510,7 +515,7 @@ var paramGetters = {
|
|
|
510
515
|
return (_a2 = info.slas) == null ? void 0 : _a2.some((sla) => sla.deliveryChannel === "pickup-in-point");
|
|
511
516
|
}
|
|
512
517
|
);
|
|
513
|
-
return
|
|
518
|
+
return hasPickup;
|
|
514
519
|
},
|
|
515
520
|
payment_type: (context, eventName) => {
|
|
516
521
|
var _a, _b, _c, _d, _e;
|
package/dist/mod.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/core/constants.ts","../src/core/utils.ts","../src/adapters/datalayer.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/resolvers/items/fromOrderForm.ts","../src/params/resolvers/items/fromItem.ts","../src/params/resolvers/items/fromList.ts","../src/params/items.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\n // function to send 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 VIEW_CART: {\n name: \"view_cart\",\n destinations: [\"Dito\", \"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_CART: {\n name: \"add_to_cart\",\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 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 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 destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"search_term\", \"search_found\", \"search_quantity\"],\n },\n\n SEARCH_ZIPCODE: {\n name: 'search_zipcode',\n destinations: ['DataLayer'],\n requiredParams: ['brand', 'region', 'shippings', 'zipcode', 'flag_pickup'],\n },\n\n VIEW_PROMOTION: {\n name: \"view_promotion\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"region\", \"promotion_name\", \"creative_name\", \"creative_slot\"],\n },\n\n SELECT_CONTENT: {\n name: \"select_content\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", 'content_type'],\n },\n\n SELECT_ITEM: {\n name: \"select_item\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"region\", \"items\", \"line_items\"],\n },\n\n VIEW_ITEM_LIST: {\n name: \"view_item_list\",\n requiredParams: [\"region\"],\n },\n\n BEGIN_CHECKOUT: {\n name: \"begin_checkout\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\", \"items\"],\n },\n\n AUTH_ACTION: {\n name: \"auth_action\",\n requiredParams: [\"region\"],\n },\n\n ADD_PERSONAL_INFO: {\n name: \"add_personal_info\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"pre_filled\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\"],\n },\n\n ADD_SHIPPING_INFO: {\n name: \"add_shipping_info\",\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 ADD_PAYMENT_INFO: {\n name: \"add_payment_info\",\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 destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\", \"payment_type\"],\n },\n\n PURCHASE: {\n name: \"purchase\",\n requiredParams: [\"region\"],\n },\n};\n","import { EventContext } from \"../types\";\n\n/**\n * Logs a styled tracking message to the console with the destination and event payload.\n *\n * @param data - The event payload or context to include in the log; if falsy, an empty string is logged\n * @param color - CSS background color used for the log label\n * @param destination - Destination name shown in the log label (prefixed by \"DT - \")\n */\nexport function dataTrackingLog(data: EventContext, color: string, destination: string) {\n console.log(\n `%c[DT - ${destination}] EVENTO DISPARADO:%c `,\n `background: ${color}; color: white; font-weight: bold; padding: 2px 4px; border-radius: 3px;`,\n 'color: #fff;',\n data || ''\n );\n}","import { dataTrackingLog } from \"../core/utils\";\nimport type { EventContext } from \"../types\";\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 ecomm - The ecommerce event context payload; if it contains a `window` property that object's `dataLayer` will be used as the target\n * @param dest - A destination label used by the logger\n */\nexport function pushToDataLayer(event: string, ecomm: EventContext, dest: string) {\n const targetWindow = ecomm.window;\n const ecommercePayload = Object.assign({}, ecomm);\n delete ecommercePayload.window; // delete window prop and avoid to push as payload to dayalayer\n\n dataTrackingLog({ event: event, ecommerce: ecommercePayload }, '#0b5fff', dest);\n\n if (targetWindow) {\n targetWindow.dataLayer = targetWindow.dataLayer || [];\n targetWindow.dataLayer.push({ event: event, ecommerce: ecommercePayload });\n return;\n }\n\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({ event: event, ecommerce: ecommercePayload });\n}","import { dataTrackingLog } from \"../core/utils\";\nimport type { EventContext } from \"../types\";\n\nexport function pushToDito(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ id: event, custom_data: ecomm }, '#00c851', dest);\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, dest);\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 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);\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 return item.discount ? item.discount :\n (\n parseFloat(Math.max(item.listPrice - item.sellingPrice, 0).toFixed(2)) || 0\n );\n}\n\nexport function getItemCategory(item: any) {\n return item?.productCategories?.['39'] === 'BAZAR' ? 'Sale' : 'Coleção'\n}\n\nexport function getItemCategory2(item: any) {\n const strategies = [\n () => Object.values(item?.productCategories || {}).pop(), // checkout select_item context\n () => item?.category?.split?.('>')?.[1]?.trim?.(), // deco select_item context\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);\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);\n\n switch (eventName) {\n case 'VIEW_CART':\n case 'ADD_COUPON':\n case 'ADD_PERSONAL_INFO':\n case 'ADD_SHIPPING_INFO':\n case 'ADD_PAYMENT_INFO':\n case 'BEGIN_CHECKOUT':\n case 'SEARCH_ZIPCODE':\n case 'ORDER_REVIEWED':\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","import type { EventContext } from '../../../types';\n\nimport {\n getItemSku,\n getDiscount,\n getItemCategory,\n getItemCategory2,\n getItemCategory4,\n getItemShippingTier,\n normalizeBrand,\n} from '../../utils';\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\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) || null,\n item_sku: (await getItemSku(item)) || item.id || null,\n item_name: item.name || item.id || null,\n item_category: getItemCategory(item) || null,\n item_variant: item.skuName.split('-')[0].trim(),\n item_variant2: item.skuName.split('-')[1]?.trim() || '',\n discount: getDiscount(item),\n }))\n );\n}\n","import {\n getItemSku,\n getDiscount,\n getItemCategory,\n getItemCategory2,\n getItemCategory4,\n getItemShippingTier,\n} from '../../utils';\n\nexport async function itemsFromItem(context: Record<string, any>) {\n const { item, orderForm } = context;\n return [\n {\n item_id: item.productId,\n item_category2: getItemCategory2(item),\n item_category4: getItemCategory4(item),\n item_shipping_tier: getItemShippingTier(orderForm, item),\n price: parseFloat((item.price / 100).toFixed(2)) || 0,\n quantity: 1,\n item_ref: item.refId || null,\n item_brand: item.additionalInfo?.brandName || null,\n item_sku: (await getItemSku(item)) || item.id || null,\n item_name: item.name || item.id || null,\n item_category: getItemCategory(item) || null,\n item_variant: item.skuName.split('-')[0].trim(),\n item_variant2: item.skuName.split('-')[1]?.trim() || '',\n discount: getDiscount(item),\n \n item_list_name: null,\n index: 0\n },\n ];\n}\n","import { getDiscount, getItemCategory, getItemCategory2, normalizeBrand } from '../../utils';\n\nexport async function itemsFromList(context: Record<string, any>) {\n const { item } = context;\n\n return [\n {\n price: item?.price.list || item?.price || 0,\n quantity: 1,\n item_ref: context.item.ref || context.item.additionalProperty.find((i: { name: string }) => i.name === \"RefId\").value || null,\n index: typeof context?.index === 'number' ? context.index : null,\n item_brand: normalizeBrand(item.brand.name) || normalizeBrand(context.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 || null,\n discount: getDiscount(item) || null,\n item_list_name: context?.itemListName || null,\n },\n ];\n}\n","import { itemsFromOrderForm } from './resolvers/items/fromOrderForm';\nimport { itemsFromItem } from './resolvers/items/fromItem';\nimport { itemsFromList } from './resolvers/items/fromList';\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 'VIEW_CART':\n case 'BEGIN_CHECKOUT':\n case 'ADD_SHIPPING_INFO':\n case 'ADD_PAYMENT_INFO':\n return itemsFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'REMOVE_FROM_CART':\n return itemsFromItem(context);\n case 'SELECT_ITEM':\n return itemsFromList(context)\n default:\n return null;\n }\n}\n","import type { EventContext, EventName } from '../types';\nimport { getBrand } from './brand';\nimport { getItems } from './items';\ninterface LogisticInfo {\n slas: { deliveryChannel: string }[];\n}\n\nexport const paramGetters = {\n brand: getBrand,\n\n items: getItems,\n\n content_type: (context: EventContext, eventName: EventName) => {\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 return context?.lineItems ? context.lineItems : (context.orderForm.items || [])\n .map((item: EventContext) => item.productId)\n .join(',');\n },\n\n currency: (context: EventContext, eventName: EventName) => {\n return context.orderForm?.storePreferencesData?.currencyCode || null;\n },\n\n value: (context: EventContext, eventName: EventName) => {\n return context.item ? context.item.price : context.orderForm?.value != null\n ? context.orderForm.value / 100\n : null;\n },\n\n total_discount: (context: EventContext, eventName: EventName) => {\n return (\n context.orderForm?.totalizers\n ?.filter((t: EventContext) => t.id === 'Discounts')\n .reduce((acc: EventContext, t: EventContext) => acc + t.value, 0) / 100 || 0\n );\n },\n\n subtotal: (context: EventContext, eventName: EventName) => {\n return (\n context.orderForm?.totalizers\n ?.filter((t: EventContext) => t.id === 'Items')\n .reduce((acc: EventContext, t: EventContext) => acc + t.value, 0) / 100 || 0\n );\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 || null;\n },\n\n coupon: (context: EventContext, eventName: EventName) => {\n return context.appliedCoupon || 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 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 payment_type: (context: EventContext, eventName: EventName) => {\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\n const paymentTypeMap = [\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 const match = paymentTypeMap.find(([key]) => name.includes(key));\n\n return match ? match[1] : null;\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: any, 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 selected = logistics.find((item: { selectedSla: string }) => item.selectedSla)\n if (!selected) return null\n\n const sla = selected.slas?.find((s: { id: string }) => s.id === selected.selectedSla)\n if (!sla) return null\n\n const { deliveryChannel, name, pickupStoreInfo } = sla\n\n return deliveryChannel === 'pickup-in-point'\n ? `retirada em loja${pickupStoreInfo?.friendlyName ? `: ${pickupStoreInfo.friendlyName}` : ''}`\n : deliveryChannel === 'delivery'\n ? `receba em casa${name ? `: ${name}` : ''}`\n : null\n }\n}\n\n\n\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":["_a","_a","_a","_b"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/core/constants.ts","../src/core/utils.ts","../src/adapters/datalayer.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/resolvers/items/fromOrderForm.ts","../src/params/resolvers/items/fromItem.ts","../src/params/resolvers/items/fromList.ts","../src/params/items.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\n // function to send 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: \"view_cart\",\n destinations: [\"Dito\", \"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_CART: {\n name: \"add_to_cart\",\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 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 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 destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"search_term\", \"search_found\", \"search_quantity\"],\n },\n\n SEARCH_ZIPCODE: {\n name: 'search_zipcode',\n destinations: ['DataLayer'],\n requiredParams: ['brand', 'region', 'shippings', 'zipcode', 'flag_pickup'],\n },\n\n VIEW_PROMOTION: {\n name: \"view_promotion\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"region\", \"promotion_name\", \"creative_name\", \"creative_slot\"],\n },\n\n SELECT_CONTENT: {\n name: \"select_content\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", 'content_type'],\n },\n\n SELECT_ITEM: {\n name: \"select_item\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"region\", \"items\", \"line_items\"],\n },\n\n VIEW_ITEM_LIST: {\n name: \"view_item_list\",\n requiredParams: [\"region\"],\n },\n\n BEGIN_CHECKOUT: {\n name: \"begin_checkout\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\", \"items\"],\n },\n\n AUTH_ACTION: {\n name: \"auth_action\",\n requiredParams: [\"region\"],\n },\n\n ADD_PERSONAL_INFO: {\n name: \"add_personal_info\",\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 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 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 destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\", \"payment_type\"],\n },\n\n PURCHASE: {\n name: \"purchase\",\n requiredParams: [\"region\"],\n },\n};\n","import { EventContext } from \"../types\";\n\n/**\n * Logs a styled tracking message to the console with the destination and event payload.\n *\n * @param data - The event payload or context to include in the log; if falsy, an empty string is logged\n * @param color - CSS background color used for the log label\n * @param destination - Destination name shown in the log label (prefixed by \"DT - \")\n */\nexport function dataTrackingLog(data: EventContext, color: string, destination: string) {\n console.log(\n `%c[DT - ${destination}] EVENTO DISPARADO:%c `,\n `background: ${color}; color: white; font-weight: bold; padding: 2px 4px; border-radius: 3px;`,\n 'color: #fff;',\n data || ''\n );\n}","import { dataTrackingLog } from \"../core/utils\";\nimport type { EventContext } from \"../types\";\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 ecomm - The ecommerce event context payload; if it contains a `window` property that object's `dataLayer` will be used as the target\n * @param dest - A destination label used by the logger\n */\nexport function pushToDataLayer(event: string, ecomm: EventContext, dest: string) {\n const targetWindow = ecomm.window;\n const ecommercePayload = Object.assign({}, ecomm);\n delete ecommercePayload.window; // delete window prop and avoid to push as payload to dayalayer\n\n dataTrackingLog({ event: event, ecommerce: ecommercePayload }, '#0b5fff', dest);\n\n if (targetWindow) {\n targetWindow.dataLayer = targetWindow.dataLayer || [];\n targetWindow.dataLayer.push({ event: event, ecommerce: ecommercePayload });\n return;\n }\n\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({ event: event, ecommerce: ecommercePayload });\n}","import { dataTrackingLog } from \"../core/utils\";\nimport type { EventContext } from \"../types\";\n\nexport function pushToDito(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ id: event, custom_data: ecomm }, '#00c851', dest);\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, dest);\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 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);\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 return item.discount ? item.discount :\n (\n parseFloat(Math.max(item.listPrice - item.sellingPrice, 0).toFixed(2)) || 0\n );\n}\n\nexport function getItemCategory(item: any) {\n return item?.productCategories?.['39'] === 'BAZAR' ? 'Sale' : 'Coleção'\n}\n\nexport function getItemCategory2(item: any) {\n const strategies = [\n () => Object.values(item?.productCategories || {}).pop(), // checkout select_item context\n () => item?.category?.split?.('>')?.[1]?.trim?.(), // deco select_item context\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);\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);\n\n switch (eventName) {\n case 'VIEW_CART':\n case 'ADD_COUPON':\n case 'ADD_PERSONAL_INFO':\n case 'ADD_SHIPPING_INFO':\n case 'ADD_PAYMENT_INFO':\n case 'BEGIN_CHECKOUT':\n case 'SEARCH_ZIPCODE':\n case 'ORDER_REVIEWED':\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","import type { EventContext } from '../../../types';\n\nimport {\n getItemSku,\n getDiscount,\n getItemCategory,\n getItemCategory2,\n getItemCategory4,\n getItemShippingTier,\n normalizeBrand,\n} from '../../utils';\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\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) || null,\n item_sku: (await getItemSku(item)) || item.id || null,\n item_name: item.name || item.id || null,\n item_category: getItemCategory(item) || null,\n item_variant: item.skuName.split('-')[0].trim(),\n item_variant2: item.skuName.split('-').pop()?.trim() || '',\n discount: getDiscount(item),\n }))\n );\n}\n","import {\n getItemSku,\n getDiscount,\n getItemCategory,\n getItemCategory2,\n getItemCategory4,\n getItemShippingTier,\n} from '../../utils';\n\nexport async function itemsFromItem(context: Record<string, any>) {\n const { item, orderForm } = context;\n return [\n {\n item_id: item.productId,\n item_category2: getItemCategory2(item),\n item_category4: getItemCategory4(item),\n item_shipping_tier: getItemShippingTier(orderForm, item),\n price: parseFloat((item.price / 100).toFixed(2)) || 0,\n quantity: 1,\n item_ref: item.refId || null,\n item_brand: item.additionalInfo?.brandName || null,\n item_sku: (await getItemSku(item)) || item.id || null,\n item_name: item.name || item.id || null,\n item_category: getItemCategory(item) || null,\n item_variant: item.skuName.split('-')[0].trim(),\n item_variant2: item.skuName.split('-').pop()?.trim() || '',\n discount: getDiscount(item),\n \n item_list_name: null,\n index: 0\n },\n ];\n}\n","import { getDiscount, getItemCategory, getItemCategory2, normalizeBrand } from '../../utils';\n\nexport async function itemsFromList(context: Record<string, any>) {\n const { item } = context;\n\n return [\n {\n price: item?.price.list || item?.price || 0,\n quantity: 1,\n item_ref: context.item.ref || context.item.additionalProperty.find((i: { name: string }) => i.name === \"RefId\").value || null,\n index: typeof context?.index === 'number' ? context.index : null,\n item_brand: normalizeBrand(item.brand.name) || normalizeBrand(context.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 || null,\n discount: getDiscount(item) || null,\n item_list_name: context?.itemListName || null,\n },\n ];\n}\n","import { itemsFromOrderForm } from './resolvers/items/fromOrderForm';\nimport { itemsFromItem } from './resolvers/items/fromItem';\nimport { itemsFromList } from './resolvers/items/fromList';\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 'VIEW_CART':\n case 'BEGIN_CHECKOUT':\n case 'ADD_SHIPPING_INFO':\n case 'ADD_PAYMENT_INFO':\n return itemsFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'REMOVE_FROM_CART':\n return itemsFromItem(context);\n case 'SELECT_ITEM':\n return itemsFromList(context)\n default:\n return null;\n }\n}\n","import { dataTrackingLog } from '../core/utils';\nimport type { EventContext, EventName } from '../types';\nimport { getBrand } from './brand';\nimport { getItems } from './items';\ninterface LogisticInfo {\n slas: { deliveryChannel: string }[];\n}\n\nexport const paramGetters = {\n brand: getBrand,\n\n items: getItems,\n\n content_type: (context: EventContext, eventName: EventName) => {\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];\n }\n\n return (context.orderForm.items || [])\n .map((item: EventContext) => item.productId)\n .join(',');\n },\n\n currency: (context: EventContext, eventName: EventName) => {\n return context.orderForm?.storePreferencesData?.currencyCode || null;\n },\n\n value: (context: EventContext, eventName: EventName) => {\n return context.item ? context.item.price : context.orderForm?.value != null\n ? context.orderForm.value / 100\n : null;\n },\n\n total_discount: (context: EventContext, eventName: EventName) => {\n const discounts = context.orderForm?.totalizers?.find((t: { id: string }) => t.id === 'Discounts');\n return discounts ? Math.abs(discounts.value) / 100 : 0;\n },\n\n subtotal: (context: EventContext, eventName: EventName) => {\n return (\n context.orderForm?.totalizers\n ?.filter((t: EventContext) => t.id === 'Items')\n .reduce((acc: EventContext, t: EventContext) => acc + t.value, 0) / 100 || 0\n );\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 || null;\n },\n\n coupon: (context: EventContext, eventName: EventName) => {\n return context.appliedCoupon || 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 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 payment_type: (context: EventContext, eventName: EventName) => {\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\n const paymentTypeMap = [\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 const match = paymentTypeMap.find(([key]) => name.includes(key));\n\n return match ? match[1] : null;\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: any, 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 selected = logistics.find((item: { selectedSla: string }) => item.selectedSla)\n if (!selected) return null\n\n const sla = selected.slas?.find((s: { id: string }) => s.id === selected.selectedSla)\n if (!sla) return null\n\n const { deliveryChannel, name, pickupStoreInfo } = sla\n\n return deliveryChannel === 'pickup-in-point'\n ? `retirada em loja${pickupStoreInfo?.friendlyName ? `: ${pickupStoreInfo.friendlyName}` : ''}`\n : deliveryChannel === 'delivery'\n ? `receba em casa${name ? `: ${name}` : ''}`\n : null\n }\n}\n\n\n\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":["_a","_a","_a","_b"]}
|
package/dist/mod.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
declare const EVENTS: {
|
|
2
|
-
|
|
2
|
+
CUSTOM_VIEW_CART: {
|
|
3
3
|
name: string;
|
|
4
4
|
destinations: string[];
|
|
5
5
|
requiredParams: string[];
|
|
@@ -62,12 +62,12 @@ declare const EVENTS: {
|
|
|
62
62
|
destinations: string[];
|
|
63
63
|
requiredParams: string[];
|
|
64
64
|
};
|
|
65
|
-
|
|
65
|
+
CUSTOM_ADD_SHIPPING_INFO: {
|
|
66
66
|
name: string;
|
|
67
67
|
destinations: string[];
|
|
68
68
|
requiredParams: string[];
|
|
69
69
|
};
|
|
70
|
-
|
|
70
|
+
CUSTOM_ADD_PAYMENT_INFO: {
|
|
71
71
|
name: string;
|
|
72
72
|
destinations: string[];
|
|
73
73
|
requiredParams: string[];
|
|
@@ -103,7 +103,7 @@ declare function trackWebEvent(event: EventName, context?: EventContext): Promis
|
|
|
103
103
|
declare const _default: {
|
|
104
104
|
trackWebEvent: typeof trackWebEvent;
|
|
105
105
|
EVENTS: {
|
|
106
|
-
|
|
106
|
+
CUSTOM_VIEW_CART: {
|
|
107
107
|
name: string;
|
|
108
108
|
destinations: string[];
|
|
109
109
|
requiredParams: string[];
|
|
@@ -166,12 +166,12 @@ declare const _default: {
|
|
|
166
166
|
destinations: string[];
|
|
167
167
|
requiredParams: string[];
|
|
168
168
|
};
|
|
169
|
-
|
|
169
|
+
CUSTOM_ADD_SHIPPING_INFO: {
|
|
170
170
|
name: string;
|
|
171
171
|
destinations: string[];
|
|
172
172
|
requiredParams: string[];
|
|
173
173
|
};
|
|
174
|
-
|
|
174
|
+
CUSTOM_ADD_PAYMENT_INFO: {
|
|
175
175
|
name: string;
|
|
176
176
|
destinations: string[];
|
|
177
177
|
requiredParams: string[];
|
package/dist/mod.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
declare const EVENTS: {
|
|
2
|
-
|
|
2
|
+
CUSTOM_VIEW_CART: {
|
|
3
3
|
name: string;
|
|
4
4
|
destinations: string[];
|
|
5
5
|
requiredParams: string[];
|
|
@@ -62,12 +62,12 @@ declare const EVENTS: {
|
|
|
62
62
|
destinations: string[];
|
|
63
63
|
requiredParams: string[];
|
|
64
64
|
};
|
|
65
|
-
|
|
65
|
+
CUSTOM_ADD_SHIPPING_INFO: {
|
|
66
66
|
name: string;
|
|
67
67
|
destinations: string[];
|
|
68
68
|
requiredParams: string[];
|
|
69
69
|
};
|
|
70
|
-
|
|
70
|
+
CUSTOM_ADD_PAYMENT_INFO: {
|
|
71
71
|
name: string;
|
|
72
72
|
destinations: string[];
|
|
73
73
|
requiredParams: string[];
|
|
@@ -103,7 +103,7 @@ declare function trackWebEvent(event: EventName, context?: EventContext): Promis
|
|
|
103
103
|
declare const _default: {
|
|
104
104
|
trackWebEvent: typeof trackWebEvent;
|
|
105
105
|
EVENTS: {
|
|
106
|
-
|
|
106
|
+
CUSTOM_VIEW_CART: {
|
|
107
107
|
name: string;
|
|
108
108
|
destinations: string[];
|
|
109
109
|
requiredParams: string[];
|
|
@@ -166,12 +166,12 @@ declare const _default: {
|
|
|
166
166
|
destinations: string[];
|
|
167
167
|
requiredParams: string[];
|
|
168
168
|
};
|
|
169
|
-
|
|
169
|
+
CUSTOM_ADD_SHIPPING_INFO: {
|
|
170
170
|
name: string;
|
|
171
171
|
destinations: string[];
|
|
172
172
|
requiredParams: string[];
|
|
173
173
|
};
|
|
174
|
-
|
|
174
|
+
CUSTOM_ADD_PAYMENT_INFO: {
|
|
175
175
|
name: string;
|
|
176
176
|
destinations: string[];
|
|
177
177
|
requiredParams: string[];
|
package/dist/mod.global.js
CHANGED
|
@@ -28,7 +28,7 @@ var AzzasTracker = (() => {
|
|
|
28
28
|
|
|
29
29
|
// src/core/constants.ts
|
|
30
30
|
var EVENTS = {
|
|
31
|
-
|
|
31
|
+
CUSTOM_VIEW_CART: {
|
|
32
32
|
name: "view_cart",
|
|
33
33
|
destinations: ["Dito", "DataLayer"],
|
|
34
34
|
requiredParams: [
|
|
@@ -120,7 +120,7 @@ var AzzasTracker = (() => {
|
|
|
120
120
|
destinations: ["DataLayer"],
|
|
121
121
|
requiredParams: ["brand", "pre_filled", "line_items", "currency", "value", "total_discount", "subtotal"]
|
|
122
122
|
},
|
|
123
|
-
|
|
123
|
+
CUSTOM_ADD_SHIPPING_INFO: {
|
|
124
124
|
name: "add_shipping_info",
|
|
125
125
|
destinations: ["DataLayer"],
|
|
126
126
|
requiredParams: [
|
|
@@ -136,7 +136,7 @@ var AzzasTracker = (() => {
|
|
|
136
136
|
"items"
|
|
137
137
|
]
|
|
138
138
|
},
|
|
139
|
-
|
|
139
|
+
CUSTOM_ADD_PAYMENT_INFO: {
|
|
140
140
|
name: "add_payment_info",
|
|
141
141
|
destinations: ["DataLayer"],
|
|
142
142
|
requiredParams: [
|
|
@@ -355,7 +355,7 @@ var AzzasTracker = (() => {
|
|
|
355
355
|
item_name: item.name || item.id || null,
|
|
356
356
|
item_category: getItemCategory(item) || null,
|
|
357
357
|
item_variant: item.skuName.split("-")[0].trim(),
|
|
358
|
-
item_variant2: ((_b = item.skuName.split("-")
|
|
358
|
+
item_variant2: ((_b = item.skuName.split("-").pop()) == null ? void 0 : _b.trim()) || "",
|
|
359
359
|
discount: getDiscount(item)
|
|
360
360
|
};
|
|
361
361
|
})
|
|
@@ -380,7 +380,7 @@ var AzzasTracker = (() => {
|
|
|
380
380
|
item_name: item.name || item.id || null,
|
|
381
381
|
item_category: getItemCategory(item) || null,
|
|
382
382
|
item_variant: item.skuName.split("-")[0].trim(),
|
|
383
|
-
item_variant2: ((_b = item.skuName.split("-")
|
|
383
|
+
item_variant2: ((_b = item.skuName.split("-").pop()) == null ? void 0 : _b.trim()) || "",
|
|
384
384
|
discount: getDiscount(item),
|
|
385
385
|
item_list_name: null,
|
|
386
386
|
index: 0
|
|
@@ -440,7 +440,11 @@ var AzzasTracker = (() => {
|
|
|
440
440
|
return context.region || null;
|
|
441
441
|
},
|
|
442
442
|
line_items: (context, eventName) => {
|
|
443
|
-
|
|
443
|
+
if (context == null ? void 0 : context.lineItems) return context.lineItems;
|
|
444
|
+
if (context == null ? void 0 : context.item) {
|
|
445
|
+
return [context.item.productId];
|
|
446
|
+
}
|
|
447
|
+
return (context.orderForm.items || []).map((item) => item.productId).join(",");
|
|
444
448
|
},
|
|
445
449
|
currency: (context, eventName) => {
|
|
446
450
|
var _a, _b;
|
|
@@ -452,7 +456,8 @@ var AzzasTracker = (() => {
|
|
|
452
456
|
},
|
|
453
457
|
total_discount: (context, eventName) => {
|
|
454
458
|
var _a, _b;
|
|
455
|
-
|
|
459
|
+
const discounts = (_b = (_a = context.orderForm) == null ? void 0 : _a.totalizers) == null ? void 0 : _b.find((t) => t.id === "Discounts");
|
|
460
|
+
return discounts ? Math.abs(discounts.value) / 100 : 0;
|
|
456
461
|
},
|
|
457
462
|
subtotal: (context, eventName) => {
|
|
458
463
|
var _a, _b;
|
|
@@ -510,7 +515,7 @@ var AzzasTracker = (() => {
|
|
|
510
515
|
return (_a2 = info.slas) == null ? void 0 : _a2.some((sla) => sla.deliveryChannel === "pickup-in-point");
|
|
511
516
|
}
|
|
512
517
|
);
|
|
513
|
-
return
|
|
518
|
+
return hasPickup;
|
|
514
519
|
},
|
|
515
520
|
payment_type: (context, eventName) => {
|
|
516
521
|
var _a, _b, _c, _d, _e;
|
package/dist/mod.global.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/core/constants.ts","../src/core/utils.ts","../src/adapters/datalayer.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/resolvers/items/fromOrderForm.ts","../src/params/resolvers/items/fromItem.ts","../src/params/resolvers/items/fromList.ts","../src/params/items.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\n // function to send 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 VIEW_CART: {\n name: \"view_cart\",\n destinations: [\"Dito\", \"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_CART: {\n name: \"add_to_cart\",\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 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 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 destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"search_term\", \"search_found\", \"search_quantity\"],\n },\n\n SEARCH_ZIPCODE: {\n name: 'search_zipcode',\n destinations: ['DataLayer'],\n requiredParams: ['brand', 'region', 'shippings', 'zipcode', 'flag_pickup'],\n },\n\n VIEW_PROMOTION: {\n name: \"view_promotion\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"region\", \"promotion_name\", \"creative_name\", \"creative_slot\"],\n },\n\n SELECT_CONTENT: {\n name: \"select_content\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", 'content_type'],\n },\n\n SELECT_ITEM: {\n name: \"select_item\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"region\", \"items\", \"line_items\"],\n },\n\n VIEW_ITEM_LIST: {\n name: \"view_item_list\",\n requiredParams: [\"region\"],\n },\n\n BEGIN_CHECKOUT: {\n name: \"begin_checkout\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\", \"items\"],\n },\n\n AUTH_ACTION: {\n name: \"auth_action\",\n requiredParams: [\"region\"],\n },\n\n ADD_PERSONAL_INFO: {\n name: \"add_personal_info\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"pre_filled\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\"],\n },\n\n ADD_SHIPPING_INFO: {\n name: \"add_shipping_info\",\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 ADD_PAYMENT_INFO: {\n name: \"add_payment_info\",\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 destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\", \"payment_type\"],\n },\n\n PURCHASE: {\n name: \"purchase\",\n requiredParams: [\"region\"],\n },\n};\n","import { EventContext } from \"../types\";\n\n/**\n * Logs a styled tracking message to the console with the destination and event payload.\n *\n * @param data - The event payload or context to include in the log; if falsy, an empty string is logged\n * @param color - CSS background color used for the log label\n * @param destination - Destination name shown in the log label (prefixed by \"DT - \")\n */\nexport function dataTrackingLog(data: EventContext, color: string, destination: string) {\n console.log(\n `%c[DT - ${destination}] EVENTO DISPARADO:%c `,\n `background: ${color}; color: white; font-weight: bold; padding: 2px 4px; border-radius: 3px;`,\n 'color: #fff;',\n data || ''\n );\n}","import { dataTrackingLog } from \"../core/utils\";\nimport type { EventContext } from \"../types\";\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 ecomm - The ecommerce event context payload; if it contains a `window` property that object's `dataLayer` will be used as the target\n * @param dest - A destination label used by the logger\n */\nexport function pushToDataLayer(event: string, ecomm: EventContext, dest: string) {\n const targetWindow = ecomm.window;\n const ecommercePayload = Object.assign({}, ecomm);\n delete ecommercePayload.window; // delete window prop and avoid to push as payload to dayalayer\n\n dataTrackingLog({ event: event, ecommerce: ecommercePayload }, '#0b5fff', dest);\n\n if (targetWindow) {\n targetWindow.dataLayer = targetWindow.dataLayer || [];\n targetWindow.dataLayer.push({ event: event, ecommerce: ecommercePayload });\n return;\n }\n\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({ event: event, ecommerce: ecommercePayload });\n}","import { dataTrackingLog } from \"../core/utils\";\nimport type { EventContext } from \"../types\";\n\nexport function pushToDito(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ id: event, custom_data: ecomm }, '#00c851', dest);\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, dest);\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 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);\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 return item.discount ? item.discount :\n (\n parseFloat(Math.max(item.listPrice - item.sellingPrice, 0).toFixed(2)) || 0\n );\n}\n\nexport function getItemCategory(item: any) {\n return item?.productCategories?.['39'] === 'BAZAR' ? 'Sale' : 'Coleção'\n}\n\nexport function getItemCategory2(item: any) {\n const strategies = [\n () => Object.values(item?.productCategories || {}).pop(), // checkout select_item context\n () => item?.category?.split?.('>')?.[1]?.trim?.(), // deco select_item context\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);\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);\n\n switch (eventName) {\n case 'VIEW_CART':\n case 'ADD_COUPON':\n case 'ADD_PERSONAL_INFO':\n case 'ADD_SHIPPING_INFO':\n case 'ADD_PAYMENT_INFO':\n case 'BEGIN_CHECKOUT':\n case 'SEARCH_ZIPCODE':\n case 'ORDER_REVIEWED':\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","import type { EventContext } from '../../../types';\n\nimport {\n getItemSku,\n getDiscount,\n getItemCategory,\n getItemCategory2,\n getItemCategory4,\n getItemShippingTier,\n normalizeBrand,\n} from '../../utils';\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\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) || null,\n item_sku: (await getItemSku(item)) || item.id || null,\n item_name: item.name || item.id || null,\n item_category: getItemCategory(item) || null,\n item_variant: item.skuName.split('-')[0].trim(),\n item_variant2: item.skuName.split('-')[1]?.trim() || '',\n discount: getDiscount(item),\n }))\n );\n}\n","import {\n getItemSku,\n getDiscount,\n getItemCategory,\n getItemCategory2,\n getItemCategory4,\n getItemShippingTier,\n} from '../../utils';\n\nexport async function itemsFromItem(context: Record<string, any>) {\n const { item, orderForm } = context;\n return [\n {\n item_id: item.productId,\n item_category2: getItemCategory2(item),\n item_category4: getItemCategory4(item),\n item_shipping_tier: getItemShippingTier(orderForm, item),\n price: parseFloat((item.price / 100).toFixed(2)) || 0,\n quantity: 1,\n item_ref: item.refId || null,\n item_brand: item.additionalInfo?.brandName || null,\n item_sku: (await getItemSku(item)) || item.id || null,\n item_name: item.name || item.id || null,\n item_category: getItemCategory(item) || null,\n item_variant: item.skuName.split('-')[0].trim(),\n item_variant2: item.skuName.split('-')[1]?.trim() || '',\n discount: getDiscount(item),\n \n item_list_name: null,\n index: 0\n },\n ];\n}\n","import { getDiscount, getItemCategory, getItemCategory2, normalizeBrand } from '../../utils';\n\nexport async function itemsFromList(context: Record<string, any>) {\n const { item } = context;\n\n return [\n {\n price: item?.price.list || item?.price || 0,\n quantity: 1,\n item_ref: context.item.ref || context.item.additionalProperty.find((i: { name: string }) => i.name === \"RefId\").value || null,\n index: typeof context?.index === 'number' ? context.index : null,\n item_brand: normalizeBrand(item.brand.name) || normalizeBrand(context.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 || null,\n discount: getDiscount(item) || null,\n item_list_name: context?.itemListName || null,\n },\n ];\n}\n","import { itemsFromOrderForm } from './resolvers/items/fromOrderForm';\nimport { itemsFromItem } from './resolvers/items/fromItem';\nimport { itemsFromList } from './resolvers/items/fromList';\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 'VIEW_CART':\n case 'BEGIN_CHECKOUT':\n case 'ADD_SHIPPING_INFO':\n case 'ADD_PAYMENT_INFO':\n return itemsFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'REMOVE_FROM_CART':\n return itemsFromItem(context);\n case 'SELECT_ITEM':\n return itemsFromList(context)\n default:\n return null;\n }\n}\n","import type { EventContext, EventName } from '../types';\nimport { getBrand } from './brand';\nimport { getItems } from './items';\ninterface LogisticInfo {\n slas: { deliveryChannel: string }[];\n}\n\nexport const paramGetters = {\n brand: getBrand,\n\n items: getItems,\n\n content_type: (context: EventContext, eventName: EventName) => {\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 return context?.lineItems ? context.lineItems : (context.orderForm.items || [])\n .map((item: EventContext) => item.productId)\n .join(',');\n },\n\n currency: (context: EventContext, eventName: EventName) => {\n return context.orderForm?.storePreferencesData?.currencyCode || null;\n },\n\n value: (context: EventContext, eventName: EventName) => {\n return context.item ? context.item.price : context.orderForm?.value != null\n ? context.orderForm.value / 100\n : null;\n },\n\n total_discount: (context: EventContext, eventName: EventName) => {\n return (\n context.orderForm?.totalizers\n ?.filter((t: EventContext) => t.id === 'Discounts')\n .reduce((acc: EventContext, t: EventContext) => acc + t.value, 0) / 100 || 0\n );\n },\n\n subtotal: (context: EventContext, eventName: EventName) => {\n return (\n context.orderForm?.totalizers\n ?.filter((t: EventContext) => t.id === 'Items')\n .reduce((acc: EventContext, t: EventContext) => acc + t.value, 0) / 100 || 0\n );\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 || null;\n },\n\n coupon: (context: EventContext, eventName: EventName) => {\n return context.appliedCoupon || 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 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 payment_type: (context: EventContext, eventName: EventName) => {\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\n const paymentTypeMap = [\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 const match = paymentTypeMap.find(([key]) => name.includes(key));\n\n return match ? match[1] : null;\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: any, 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 selected = logistics.find((item: { selectedSla: string }) => item.selectedSla)\n if (!selected) return null\n\n const sla = selected.slas?.find((s: { id: string }) => s.id === selected.selectedSla)\n if (!sla) return null\n\n const { deliveryChannel, name, pickupStoreInfo } = sla\n\n return deliveryChannel === 'pickup-in-point'\n ? `retirada em loja${pickupStoreInfo?.friendlyName ? `: ${pickupStoreInfo.friendlyName}` : ''}`\n : deliveryChannel === 'delivery'\n ? `receba em casa${name ? `: ${name}` : ''}`\n : null\n }\n}\n\n\n\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":["_a","_a","_a","_b"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/core/constants.ts","../src/core/utils.ts","../src/adapters/datalayer.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/resolvers/items/fromOrderForm.ts","../src/params/resolvers/items/fromItem.ts","../src/params/resolvers/items/fromList.ts","../src/params/items.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\n // function to send 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: \"view_cart\",\n destinations: [\"Dito\", \"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_CART: {\n name: \"add_to_cart\",\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 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 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 destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"search_term\", \"search_found\", \"search_quantity\"],\n },\n\n SEARCH_ZIPCODE: {\n name: 'search_zipcode',\n destinations: ['DataLayer'],\n requiredParams: ['brand', 'region', 'shippings', 'zipcode', 'flag_pickup'],\n },\n\n VIEW_PROMOTION: {\n name: \"view_promotion\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"region\", \"promotion_name\", \"creative_name\", \"creative_slot\"],\n },\n\n SELECT_CONTENT: {\n name: \"select_content\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", 'content_type'],\n },\n\n SELECT_ITEM: {\n name: \"select_item\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"region\", \"items\", \"line_items\"],\n },\n\n VIEW_ITEM_LIST: {\n name: \"view_item_list\",\n requiredParams: [\"region\"],\n },\n\n BEGIN_CHECKOUT: {\n name: \"begin_checkout\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\", \"items\"],\n },\n\n AUTH_ACTION: {\n name: \"auth_action\",\n requiredParams: [\"region\"],\n },\n\n ADD_PERSONAL_INFO: {\n name: \"add_personal_info\",\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 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 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 destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\", \"payment_type\"],\n },\n\n PURCHASE: {\n name: \"purchase\",\n requiredParams: [\"region\"],\n },\n};\n","import { EventContext } from \"../types\";\n\n/**\n * Logs a styled tracking message to the console with the destination and event payload.\n *\n * @param data - The event payload or context to include in the log; if falsy, an empty string is logged\n * @param color - CSS background color used for the log label\n * @param destination - Destination name shown in the log label (prefixed by \"DT - \")\n */\nexport function dataTrackingLog(data: EventContext, color: string, destination: string) {\n console.log(\n `%c[DT - ${destination}] EVENTO DISPARADO:%c `,\n `background: ${color}; color: white; font-weight: bold; padding: 2px 4px; border-radius: 3px;`,\n 'color: #fff;',\n data || ''\n );\n}","import { dataTrackingLog } from \"../core/utils\";\nimport type { EventContext } from \"../types\";\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 ecomm - The ecommerce event context payload; if it contains a `window` property that object's `dataLayer` will be used as the target\n * @param dest - A destination label used by the logger\n */\nexport function pushToDataLayer(event: string, ecomm: EventContext, dest: string) {\n const targetWindow = ecomm.window;\n const ecommercePayload = Object.assign({}, ecomm);\n delete ecommercePayload.window; // delete window prop and avoid to push as payload to dayalayer\n\n dataTrackingLog({ event: event, ecommerce: ecommercePayload }, '#0b5fff', dest);\n\n if (targetWindow) {\n targetWindow.dataLayer = targetWindow.dataLayer || [];\n targetWindow.dataLayer.push({ event: event, ecommerce: ecommercePayload });\n return;\n }\n\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({ event: event, ecommerce: ecommercePayload });\n}","import { dataTrackingLog } from \"../core/utils\";\nimport type { EventContext } from \"../types\";\n\nexport function pushToDito(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ id: event, custom_data: ecomm }, '#00c851', dest);\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, dest);\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 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);\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 return item.discount ? item.discount :\n (\n parseFloat(Math.max(item.listPrice - item.sellingPrice, 0).toFixed(2)) || 0\n );\n}\n\nexport function getItemCategory(item: any) {\n return item?.productCategories?.['39'] === 'BAZAR' ? 'Sale' : 'Coleção'\n}\n\nexport function getItemCategory2(item: any) {\n const strategies = [\n () => Object.values(item?.productCategories || {}).pop(), // checkout select_item context\n () => item?.category?.split?.('>')?.[1]?.trim?.(), // deco select_item context\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);\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);\n\n switch (eventName) {\n case 'VIEW_CART':\n case 'ADD_COUPON':\n case 'ADD_PERSONAL_INFO':\n case 'ADD_SHIPPING_INFO':\n case 'ADD_PAYMENT_INFO':\n case 'BEGIN_CHECKOUT':\n case 'SEARCH_ZIPCODE':\n case 'ORDER_REVIEWED':\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","import type { EventContext } from '../../../types';\n\nimport {\n getItemSku,\n getDiscount,\n getItemCategory,\n getItemCategory2,\n getItemCategory4,\n getItemShippingTier,\n normalizeBrand,\n} from '../../utils';\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\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) || null,\n item_sku: (await getItemSku(item)) || item.id || null,\n item_name: item.name || item.id || null,\n item_category: getItemCategory(item) || null,\n item_variant: item.skuName.split('-')[0].trim(),\n item_variant2: item.skuName.split('-').pop()?.trim() || '',\n discount: getDiscount(item),\n }))\n );\n}\n","import {\n getItemSku,\n getDiscount,\n getItemCategory,\n getItemCategory2,\n getItemCategory4,\n getItemShippingTier,\n} from '../../utils';\n\nexport async function itemsFromItem(context: Record<string, any>) {\n const { item, orderForm } = context;\n return [\n {\n item_id: item.productId,\n item_category2: getItemCategory2(item),\n item_category4: getItemCategory4(item),\n item_shipping_tier: getItemShippingTier(orderForm, item),\n price: parseFloat((item.price / 100).toFixed(2)) || 0,\n quantity: 1,\n item_ref: item.refId || null,\n item_brand: item.additionalInfo?.brandName || null,\n item_sku: (await getItemSku(item)) || item.id || null,\n item_name: item.name || item.id || null,\n item_category: getItemCategory(item) || null,\n item_variant: item.skuName.split('-')[0].trim(),\n item_variant2: item.skuName.split('-').pop()?.trim() || '',\n discount: getDiscount(item),\n \n item_list_name: null,\n index: 0\n },\n ];\n}\n","import { getDiscount, getItemCategory, getItemCategory2, normalizeBrand } from '../../utils';\n\nexport async function itemsFromList(context: Record<string, any>) {\n const { item } = context;\n\n return [\n {\n price: item?.price.list || item?.price || 0,\n quantity: 1,\n item_ref: context.item.ref || context.item.additionalProperty.find((i: { name: string }) => i.name === \"RefId\").value || null,\n index: typeof context?.index === 'number' ? context.index : null,\n item_brand: normalizeBrand(item.brand.name) || normalizeBrand(context.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 || null,\n discount: getDiscount(item) || null,\n item_list_name: context?.itemListName || null,\n },\n ];\n}\n","import { itemsFromOrderForm } from './resolvers/items/fromOrderForm';\nimport { itemsFromItem } from './resolvers/items/fromItem';\nimport { itemsFromList } from './resolvers/items/fromList';\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 'VIEW_CART':\n case 'BEGIN_CHECKOUT':\n case 'ADD_SHIPPING_INFO':\n case 'ADD_PAYMENT_INFO':\n return itemsFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'REMOVE_FROM_CART':\n return itemsFromItem(context);\n case 'SELECT_ITEM':\n return itemsFromList(context)\n default:\n return null;\n }\n}\n","import { dataTrackingLog } from '../core/utils';\nimport type { EventContext, EventName } from '../types';\nimport { getBrand } from './brand';\nimport { getItems } from './items';\ninterface LogisticInfo {\n slas: { deliveryChannel: string }[];\n}\n\nexport const paramGetters = {\n brand: getBrand,\n\n items: getItems,\n\n content_type: (context: EventContext, eventName: EventName) => {\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];\n }\n\n return (context.orderForm.items || [])\n .map((item: EventContext) => item.productId)\n .join(',');\n },\n\n currency: (context: EventContext, eventName: EventName) => {\n return context.orderForm?.storePreferencesData?.currencyCode || null;\n },\n\n value: (context: EventContext, eventName: EventName) => {\n return context.item ? context.item.price : context.orderForm?.value != null\n ? context.orderForm.value / 100\n : null;\n },\n\n total_discount: (context: EventContext, eventName: EventName) => {\n const discounts = context.orderForm?.totalizers?.find((t: { id: string }) => t.id === 'Discounts');\n return discounts ? Math.abs(discounts.value) / 100 : 0;\n },\n\n subtotal: (context: EventContext, eventName: EventName) => {\n return (\n context.orderForm?.totalizers\n ?.filter((t: EventContext) => t.id === 'Items')\n .reduce((acc: EventContext, t: EventContext) => acc + t.value, 0) / 100 || 0\n );\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 || null;\n },\n\n coupon: (context: EventContext, eventName: EventName) => {\n return context.appliedCoupon || 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 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 payment_type: (context: EventContext, eventName: EventName) => {\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\n const paymentTypeMap = [\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 const match = paymentTypeMap.find(([key]) => name.includes(key));\n\n return match ? match[1] : null;\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: any, 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 selected = logistics.find((item: { selectedSla: string }) => item.selectedSla)\n if (!selected) return null\n\n const sla = selected.slas?.find((s: { id: string }) => s.id === selected.selectedSla)\n if (!sla) return null\n\n const { deliveryChannel, name, pickupStoreInfo } = sla\n\n return deliveryChannel === 'pickup-in-point'\n ? `retirada em loja${pickupStoreInfo?.friendlyName ? `: ${pickupStoreInfo.friendlyName}` : ''}`\n : deliveryChannel === 'delivery'\n ? `receba em casa${name ? `: ${name}` : ''}`\n : null\n }\n}\n\n\n\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":["_a","_a","_a","_b"]}
|
package/dist/mod.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// src/core/constants.ts
|
|
2
2
|
var EVENTS = {
|
|
3
|
-
|
|
3
|
+
CUSTOM_VIEW_CART: {
|
|
4
4
|
name: "view_cart",
|
|
5
5
|
destinations: ["Dito", "DataLayer"],
|
|
6
6
|
requiredParams: [
|
|
@@ -92,7 +92,7 @@ var EVENTS = {
|
|
|
92
92
|
destinations: ["DataLayer"],
|
|
93
93
|
requiredParams: ["brand", "pre_filled", "line_items", "currency", "value", "total_discount", "subtotal"]
|
|
94
94
|
},
|
|
95
|
-
|
|
95
|
+
CUSTOM_ADD_SHIPPING_INFO: {
|
|
96
96
|
name: "add_shipping_info",
|
|
97
97
|
destinations: ["DataLayer"],
|
|
98
98
|
requiredParams: [
|
|
@@ -108,7 +108,7 @@ var EVENTS = {
|
|
|
108
108
|
"items"
|
|
109
109
|
]
|
|
110
110
|
},
|
|
111
|
-
|
|
111
|
+
CUSTOM_ADD_PAYMENT_INFO: {
|
|
112
112
|
name: "add_payment_info",
|
|
113
113
|
destinations: ["DataLayer"],
|
|
114
114
|
requiredParams: [
|
|
@@ -327,7 +327,7 @@ async function itemsFromOrderForm(context) {
|
|
|
327
327
|
item_name: item.name || item.id || null,
|
|
328
328
|
item_category: getItemCategory(item) || null,
|
|
329
329
|
item_variant: item.skuName.split("-")[0].trim(),
|
|
330
|
-
item_variant2: ((_b = item.skuName.split("-")
|
|
330
|
+
item_variant2: ((_b = item.skuName.split("-").pop()) == null ? void 0 : _b.trim()) || "",
|
|
331
331
|
discount: getDiscount(item)
|
|
332
332
|
};
|
|
333
333
|
})
|
|
@@ -352,7 +352,7 @@ async function itemsFromItem(context) {
|
|
|
352
352
|
item_name: item.name || item.id || null,
|
|
353
353
|
item_category: getItemCategory(item) || null,
|
|
354
354
|
item_variant: item.skuName.split("-")[0].trim(),
|
|
355
|
-
item_variant2: ((_b = item.skuName.split("-")
|
|
355
|
+
item_variant2: ((_b = item.skuName.split("-").pop()) == null ? void 0 : _b.trim()) || "",
|
|
356
356
|
discount: getDiscount(item),
|
|
357
357
|
item_list_name: null,
|
|
358
358
|
index: 0
|
|
@@ -412,7 +412,11 @@ var paramGetters = {
|
|
|
412
412
|
return context.region || null;
|
|
413
413
|
},
|
|
414
414
|
line_items: (context, eventName) => {
|
|
415
|
-
|
|
415
|
+
if (context == null ? void 0 : context.lineItems) return context.lineItems;
|
|
416
|
+
if (context == null ? void 0 : context.item) {
|
|
417
|
+
return [context.item.productId];
|
|
418
|
+
}
|
|
419
|
+
return (context.orderForm.items || []).map((item) => item.productId).join(",");
|
|
416
420
|
},
|
|
417
421
|
currency: (context, eventName) => {
|
|
418
422
|
var _a, _b;
|
|
@@ -424,7 +428,8 @@ var paramGetters = {
|
|
|
424
428
|
},
|
|
425
429
|
total_discount: (context, eventName) => {
|
|
426
430
|
var _a, _b;
|
|
427
|
-
|
|
431
|
+
const discounts = (_b = (_a = context.orderForm) == null ? void 0 : _a.totalizers) == null ? void 0 : _b.find((t) => t.id === "Discounts");
|
|
432
|
+
return discounts ? Math.abs(discounts.value) / 100 : 0;
|
|
428
433
|
},
|
|
429
434
|
subtotal: (context, eventName) => {
|
|
430
435
|
var _a, _b;
|
|
@@ -482,7 +487,7 @@ var paramGetters = {
|
|
|
482
487
|
return (_a2 = info.slas) == null ? void 0 : _a2.some((sla) => sla.deliveryChannel === "pickup-in-point");
|
|
483
488
|
}
|
|
484
489
|
);
|
|
485
|
-
return
|
|
490
|
+
return hasPickup;
|
|
486
491
|
},
|
|
487
492
|
payment_type: (context, eventName) => {
|
|
488
493
|
var _a, _b, _c, _d, _e;
|
package/dist/mod.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/constants.ts","../src/core/utils.ts","../src/adapters/datalayer.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/resolvers/items/fromOrderForm.ts","../src/params/resolvers/items/fromItem.ts","../src/params/resolvers/items/fromList.ts","../src/params/items.ts","../src/params/index.ts","../src/formatter/index.ts","../src/index.ts"],"sourcesContent":["export const EVENTS = {\n VIEW_CART: {\n name: \"view_cart\",\n destinations: [\"Dito\", \"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_CART: {\n name: \"add_to_cart\",\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 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 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 destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"search_term\", \"search_found\", \"search_quantity\"],\n },\n\n SEARCH_ZIPCODE: {\n name: 'search_zipcode',\n destinations: ['DataLayer'],\n requiredParams: ['brand', 'region', 'shippings', 'zipcode', 'flag_pickup'],\n },\n\n VIEW_PROMOTION: {\n name: \"view_promotion\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"region\", \"promotion_name\", \"creative_name\", \"creative_slot\"],\n },\n\n SELECT_CONTENT: {\n name: \"select_content\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", 'content_type'],\n },\n\n SELECT_ITEM: {\n name: \"select_item\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"region\", \"items\", \"line_items\"],\n },\n\n VIEW_ITEM_LIST: {\n name: \"view_item_list\",\n requiredParams: [\"region\"],\n },\n\n BEGIN_CHECKOUT: {\n name: \"begin_checkout\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\", \"items\"],\n },\n\n AUTH_ACTION: {\n name: \"auth_action\",\n requiredParams: [\"region\"],\n },\n\n ADD_PERSONAL_INFO: {\n name: \"add_personal_info\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"pre_filled\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\"],\n },\n\n ADD_SHIPPING_INFO: {\n name: \"add_shipping_info\",\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 ADD_PAYMENT_INFO: {\n name: \"add_payment_info\",\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 destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\", \"payment_type\"],\n },\n\n PURCHASE: {\n name: \"purchase\",\n requiredParams: [\"region\"],\n },\n};\n","import { EventContext } from \"../types\";\n\n/**\n * Logs a styled tracking message to the console with the destination and event payload.\n *\n * @param data - The event payload or context to include in the log; if falsy, an empty string is logged\n * @param color - CSS background color used for the log label\n * @param destination - Destination name shown in the log label (prefixed by \"DT - \")\n */\nexport function dataTrackingLog(data: EventContext, color: string, destination: string) {\n console.log(\n `%c[DT - ${destination}] EVENTO DISPARADO:%c `,\n `background: ${color}; color: white; font-weight: bold; padding: 2px 4px; border-radius: 3px;`,\n 'color: #fff;',\n data || ''\n );\n}","import { dataTrackingLog } from \"../core/utils\";\nimport type { EventContext } from \"../types\";\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 ecomm - The ecommerce event context payload; if it contains a `window` property that object's `dataLayer` will be used as the target\n * @param dest - A destination label used by the logger\n */\nexport function pushToDataLayer(event: string, ecomm: EventContext, dest: string) {\n const targetWindow = ecomm.window;\n const ecommercePayload = Object.assign({}, ecomm);\n delete ecommercePayload.window; // delete window prop and avoid to push as payload to dayalayer\n\n dataTrackingLog({ event: event, ecommerce: ecommercePayload }, '#0b5fff', dest);\n\n if (targetWindow) {\n targetWindow.dataLayer = targetWindow.dataLayer || [];\n targetWindow.dataLayer.push({ event: event, ecommerce: ecommercePayload });\n return;\n }\n\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({ event: event, ecommerce: ecommercePayload });\n}","import { dataTrackingLog } from \"../core/utils\";\nimport type { EventContext } from \"../types\";\n\nexport function pushToDito(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ id: event, custom_data: ecomm }, '#00c851', dest);\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, dest);\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 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);\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 return item.discount ? item.discount :\n (\n parseFloat(Math.max(item.listPrice - item.sellingPrice, 0).toFixed(2)) || 0\n );\n}\n\nexport function getItemCategory(item: any) {\n return item?.productCategories?.['39'] === 'BAZAR' ? 'Sale' : 'Coleção'\n}\n\nexport function getItemCategory2(item: any) {\n const strategies = [\n () => Object.values(item?.productCategories || {}).pop(), // checkout select_item context\n () => item?.category?.split?.('>')?.[1]?.trim?.(), // deco select_item context\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);\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);\n\n switch (eventName) {\n case 'VIEW_CART':\n case 'ADD_COUPON':\n case 'ADD_PERSONAL_INFO':\n case 'ADD_SHIPPING_INFO':\n case 'ADD_PAYMENT_INFO':\n case 'BEGIN_CHECKOUT':\n case 'SEARCH_ZIPCODE':\n case 'ORDER_REVIEWED':\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","import type { EventContext } from '../../../types';\n\nimport {\n getItemSku,\n getDiscount,\n getItemCategory,\n getItemCategory2,\n getItemCategory4,\n getItemShippingTier,\n normalizeBrand,\n} from '../../utils';\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\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) || null,\n item_sku: (await getItemSku(item)) || item.id || null,\n item_name: item.name || item.id || null,\n item_category: getItemCategory(item) || null,\n item_variant: item.skuName.split('-')[0].trim(),\n item_variant2: item.skuName.split('-')[1]?.trim() || '',\n discount: getDiscount(item),\n }))\n );\n}\n","import {\n getItemSku,\n getDiscount,\n getItemCategory,\n getItemCategory2,\n getItemCategory4,\n getItemShippingTier,\n} from '../../utils';\n\nexport async function itemsFromItem(context: Record<string, any>) {\n const { item, orderForm } = context;\n return [\n {\n item_id: item.productId,\n item_category2: getItemCategory2(item),\n item_category4: getItemCategory4(item),\n item_shipping_tier: getItemShippingTier(orderForm, item),\n price: parseFloat((item.price / 100).toFixed(2)) || 0,\n quantity: 1,\n item_ref: item.refId || null,\n item_brand: item.additionalInfo?.brandName || null,\n item_sku: (await getItemSku(item)) || item.id || null,\n item_name: item.name || item.id || null,\n item_category: getItemCategory(item) || null,\n item_variant: item.skuName.split('-')[0].trim(),\n item_variant2: item.skuName.split('-')[1]?.trim() || '',\n discount: getDiscount(item),\n \n item_list_name: null,\n index: 0\n },\n ];\n}\n","import { getDiscount, getItemCategory, getItemCategory2, normalizeBrand } from '../../utils';\n\nexport async function itemsFromList(context: Record<string, any>) {\n const { item } = context;\n\n return [\n {\n price: item?.price.list || item?.price || 0,\n quantity: 1,\n item_ref: context.item.ref || context.item.additionalProperty.find((i: { name: string }) => i.name === \"RefId\").value || null,\n index: typeof context?.index === 'number' ? context.index : null,\n item_brand: normalizeBrand(item.brand.name) || normalizeBrand(context.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 || null,\n discount: getDiscount(item) || null,\n item_list_name: context?.itemListName || null,\n },\n ];\n}\n","import { itemsFromOrderForm } from './resolvers/items/fromOrderForm';\nimport { itemsFromItem } from './resolvers/items/fromItem';\nimport { itemsFromList } from './resolvers/items/fromList';\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 'VIEW_CART':\n case 'BEGIN_CHECKOUT':\n case 'ADD_SHIPPING_INFO':\n case 'ADD_PAYMENT_INFO':\n return itemsFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'REMOVE_FROM_CART':\n return itemsFromItem(context);\n case 'SELECT_ITEM':\n return itemsFromList(context)\n default:\n return null;\n }\n}\n","import type { EventContext, EventName } from '../types';\nimport { getBrand } from './brand';\nimport { getItems } from './items';\ninterface LogisticInfo {\n slas: { deliveryChannel: string }[];\n}\n\nexport const paramGetters = {\n brand: getBrand,\n\n items: getItems,\n\n content_type: (context: EventContext, eventName: EventName) => {\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 return context?.lineItems ? context.lineItems : (context.orderForm.items || [])\n .map((item: EventContext) => item.productId)\n .join(',');\n },\n\n currency: (context: EventContext, eventName: EventName) => {\n return context.orderForm?.storePreferencesData?.currencyCode || null;\n },\n\n value: (context: EventContext, eventName: EventName) => {\n return context.item ? context.item.price : context.orderForm?.value != null\n ? context.orderForm.value / 100\n : null;\n },\n\n total_discount: (context: EventContext, eventName: EventName) => {\n return (\n context.orderForm?.totalizers\n ?.filter((t: EventContext) => t.id === 'Discounts')\n .reduce((acc: EventContext, t: EventContext) => acc + t.value, 0) / 100 || 0\n );\n },\n\n subtotal: (context: EventContext, eventName: EventName) => {\n return (\n context.orderForm?.totalizers\n ?.filter((t: EventContext) => t.id === 'Items')\n .reduce((acc: EventContext, t: EventContext) => acc + t.value, 0) / 100 || 0\n );\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 || null;\n },\n\n coupon: (context: EventContext, eventName: EventName) => {\n return context.appliedCoupon || 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 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 payment_type: (context: EventContext, eventName: EventName) => {\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\n const paymentTypeMap = [\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 const match = paymentTypeMap.find(([key]) => name.includes(key));\n\n return match ? match[1] : null;\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: any, 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 selected = logistics.find((item: { selectedSla: string }) => item.selectedSla)\n if (!selected) return null\n\n const sla = selected.slas?.find((s: { id: string }) => s.id === selected.selectedSla)\n if (!sla) return null\n\n const { deliveryChannel, name, pickupStoreInfo } = sla\n\n return deliveryChannel === 'pickup-in-point'\n ? `retirada em loja${pickupStoreInfo?.friendlyName ? `: ${pickupStoreInfo.friendlyName}` : ''}`\n : deliveryChannel === 'delivery'\n ? `receba em casa${name ? `: ${name}` : ''}`\n : null\n }\n}\n\n\n\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","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\n // function to send 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"],"mappings":"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","names":["_a","_a","_a","_b"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/constants.ts","../src/core/utils.ts","../src/adapters/datalayer.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/resolvers/items/fromOrderForm.ts","../src/params/resolvers/items/fromItem.ts","../src/params/resolvers/items/fromList.ts","../src/params/items.ts","../src/params/index.ts","../src/formatter/index.ts","../src/index.ts"],"sourcesContent":["export const EVENTS = {\n CUSTOM_VIEW_CART: {\n name: \"view_cart\",\n destinations: [\"Dito\", \"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_CART: {\n name: \"add_to_cart\",\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 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 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 destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"search_term\", \"search_found\", \"search_quantity\"],\n },\n\n SEARCH_ZIPCODE: {\n name: 'search_zipcode',\n destinations: ['DataLayer'],\n requiredParams: ['brand', 'region', 'shippings', 'zipcode', 'flag_pickup'],\n },\n\n VIEW_PROMOTION: {\n name: \"view_promotion\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"region\", \"promotion_name\", \"creative_name\", \"creative_slot\"],\n },\n\n SELECT_CONTENT: {\n name: \"select_content\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", 'content_type'],\n },\n\n SELECT_ITEM: {\n name: \"select_item\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"region\", \"items\", \"line_items\"],\n },\n\n VIEW_ITEM_LIST: {\n name: \"view_item_list\",\n requiredParams: [\"region\"],\n },\n\n BEGIN_CHECKOUT: {\n name: \"begin_checkout\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\", \"items\"],\n },\n\n AUTH_ACTION: {\n name: \"auth_action\",\n requiredParams: [\"region\"],\n },\n\n ADD_PERSONAL_INFO: {\n name: \"add_personal_info\",\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 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 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 destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\", \"payment_type\"],\n },\n\n PURCHASE: {\n name: \"purchase\",\n requiredParams: [\"region\"],\n },\n};\n","import { EventContext } from \"../types\";\n\n/**\n * Logs a styled tracking message to the console with the destination and event payload.\n *\n * @param data - The event payload or context to include in the log; if falsy, an empty string is logged\n * @param color - CSS background color used for the log label\n * @param destination - Destination name shown in the log label (prefixed by \"DT - \")\n */\nexport function dataTrackingLog(data: EventContext, color: string, destination: string) {\n console.log(\n `%c[DT - ${destination}] EVENTO DISPARADO:%c `,\n `background: ${color}; color: white; font-weight: bold; padding: 2px 4px; border-radius: 3px;`,\n 'color: #fff;',\n data || ''\n );\n}","import { dataTrackingLog } from \"../core/utils\";\nimport type { EventContext } from \"../types\";\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 ecomm - The ecommerce event context payload; if it contains a `window` property that object's `dataLayer` will be used as the target\n * @param dest - A destination label used by the logger\n */\nexport function pushToDataLayer(event: string, ecomm: EventContext, dest: string) {\n const targetWindow = ecomm.window;\n const ecommercePayload = Object.assign({}, ecomm);\n delete ecommercePayload.window; // delete window prop and avoid to push as payload to dayalayer\n\n dataTrackingLog({ event: event, ecommerce: ecommercePayload }, '#0b5fff', dest);\n\n if (targetWindow) {\n targetWindow.dataLayer = targetWindow.dataLayer || [];\n targetWindow.dataLayer.push({ event: event, ecommerce: ecommercePayload });\n return;\n }\n\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({ event: event, ecommerce: ecommercePayload });\n}","import { dataTrackingLog } from \"../core/utils\";\nimport type { EventContext } from \"../types\";\n\nexport function pushToDito(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ id: event, custom_data: ecomm }, '#00c851', dest);\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, dest);\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 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);\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 return item.discount ? item.discount :\n (\n parseFloat(Math.max(item.listPrice - item.sellingPrice, 0).toFixed(2)) || 0\n );\n}\n\nexport function getItemCategory(item: any) {\n return item?.productCategories?.['39'] === 'BAZAR' ? 'Sale' : 'Coleção'\n}\n\nexport function getItemCategory2(item: any) {\n const strategies = [\n () => Object.values(item?.productCategories || {}).pop(), // checkout select_item context\n () => item?.category?.split?.('>')?.[1]?.trim?.(), // deco select_item context\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);\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);\n\n switch (eventName) {\n case 'VIEW_CART':\n case 'ADD_COUPON':\n case 'ADD_PERSONAL_INFO':\n case 'ADD_SHIPPING_INFO':\n case 'ADD_PAYMENT_INFO':\n case 'BEGIN_CHECKOUT':\n case 'SEARCH_ZIPCODE':\n case 'ORDER_REVIEWED':\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","import type { EventContext } from '../../../types';\n\nimport {\n getItemSku,\n getDiscount,\n getItemCategory,\n getItemCategory2,\n getItemCategory4,\n getItemShippingTier,\n normalizeBrand,\n} from '../../utils';\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\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) || null,\n item_sku: (await getItemSku(item)) || item.id || null,\n item_name: item.name || item.id || null,\n item_category: getItemCategory(item) || null,\n item_variant: item.skuName.split('-')[0].trim(),\n item_variant2: item.skuName.split('-').pop()?.trim() || '',\n discount: getDiscount(item),\n }))\n );\n}\n","import {\n getItemSku,\n getDiscount,\n getItemCategory,\n getItemCategory2,\n getItemCategory4,\n getItemShippingTier,\n} from '../../utils';\n\nexport async function itemsFromItem(context: Record<string, any>) {\n const { item, orderForm } = context;\n return [\n {\n item_id: item.productId,\n item_category2: getItemCategory2(item),\n item_category4: getItemCategory4(item),\n item_shipping_tier: getItemShippingTier(orderForm, item),\n price: parseFloat((item.price / 100).toFixed(2)) || 0,\n quantity: 1,\n item_ref: item.refId || null,\n item_brand: item.additionalInfo?.brandName || null,\n item_sku: (await getItemSku(item)) || item.id || null,\n item_name: item.name || item.id || null,\n item_category: getItemCategory(item) || null,\n item_variant: item.skuName.split('-')[0].trim(),\n item_variant2: item.skuName.split('-').pop()?.trim() || '',\n discount: getDiscount(item),\n \n item_list_name: null,\n index: 0\n },\n ];\n}\n","import { getDiscount, getItemCategory, getItemCategory2, normalizeBrand } from '../../utils';\n\nexport async function itemsFromList(context: Record<string, any>) {\n const { item } = context;\n\n return [\n {\n price: item?.price.list || item?.price || 0,\n quantity: 1,\n item_ref: context.item.ref || context.item.additionalProperty.find((i: { name: string }) => i.name === \"RefId\").value || null,\n index: typeof context?.index === 'number' ? context.index : null,\n item_brand: normalizeBrand(item.brand.name) || normalizeBrand(context.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 || null,\n discount: getDiscount(item) || null,\n item_list_name: context?.itemListName || null,\n },\n ];\n}\n","import { itemsFromOrderForm } from './resolvers/items/fromOrderForm';\nimport { itemsFromItem } from './resolvers/items/fromItem';\nimport { itemsFromList } from './resolvers/items/fromList';\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 'VIEW_CART':\n case 'BEGIN_CHECKOUT':\n case 'ADD_SHIPPING_INFO':\n case 'ADD_PAYMENT_INFO':\n return itemsFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'REMOVE_FROM_CART':\n return itemsFromItem(context);\n case 'SELECT_ITEM':\n return itemsFromList(context)\n default:\n return null;\n }\n}\n","import { dataTrackingLog } from '../core/utils';\nimport type { EventContext, EventName } from '../types';\nimport { getBrand } from './brand';\nimport { getItems } from './items';\ninterface LogisticInfo {\n slas: { deliveryChannel: string }[];\n}\n\nexport const paramGetters = {\n brand: getBrand,\n\n items: getItems,\n\n content_type: (context: EventContext, eventName: EventName) => {\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];\n }\n\n return (context.orderForm.items || [])\n .map((item: EventContext) => item.productId)\n .join(',');\n },\n\n currency: (context: EventContext, eventName: EventName) => {\n return context.orderForm?.storePreferencesData?.currencyCode || null;\n },\n\n value: (context: EventContext, eventName: EventName) => {\n return context.item ? context.item.price : context.orderForm?.value != null\n ? context.orderForm.value / 100\n : null;\n },\n\n total_discount: (context: EventContext, eventName: EventName) => {\n const discounts = context.orderForm?.totalizers?.find((t: { id: string }) => t.id === 'Discounts');\n return discounts ? Math.abs(discounts.value) / 100 : 0;\n },\n\n subtotal: (context: EventContext, eventName: EventName) => {\n return (\n context.orderForm?.totalizers\n ?.filter((t: EventContext) => t.id === 'Items')\n .reduce((acc: EventContext, t: EventContext) => acc + t.value, 0) / 100 || 0\n );\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 || null;\n },\n\n coupon: (context: EventContext, eventName: EventName) => {\n return context.appliedCoupon || 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 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 payment_type: (context: EventContext, eventName: EventName) => {\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\n const paymentTypeMap = [\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 const match = paymentTypeMap.find(([key]) => name.includes(key));\n\n return match ? match[1] : null;\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: any, 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 selected = logistics.find((item: { selectedSla: string }) => item.selectedSla)\n if (!selected) return null\n\n const sla = selected.slas?.find((s: { id: string }) => s.id === selected.selectedSla)\n if (!sla) return null\n\n const { deliveryChannel, name, pickupStoreInfo } = sla\n\n return deliveryChannel === 'pickup-in-point'\n ? `retirada em loja${pickupStoreInfo?.friendlyName ? `: ${pickupStoreInfo.friendlyName}` : ''}`\n : deliveryChannel === 'delivery'\n ? `receba em casa${name ? `: ${name}` : ''}`\n : null\n }\n}\n\n\n\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","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\n // function to send 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"],"mappings":"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","names":["_a","_a","_a","_b"]}
|