@azzas/azzas-tracker-web 1.0.3 → 1.0.5
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 +16 -0
- package/dist/mod.cjs.map +1 -1
- package/dist/mod.d.cts +10 -0
- package/dist/mod.d.ts +10 -0
- package/dist/mod.global.js +16 -0
- package/dist/mod.global.js.map +1 -1
- package/dist/mod.js +16 -0
- package/dist/mod.js.map +1 -1
- package/package.json +1 -1
package/dist/mod.cjs
CHANGED
|
@@ -80,6 +80,11 @@ var EVENTS = {
|
|
|
80
80
|
destinations: ["DataLayer"],
|
|
81
81
|
requiredParams: ["brand", "search_term", "search_found", "search_quantity"]
|
|
82
82
|
},
|
|
83
|
+
VIEW_PROMOTION: {
|
|
84
|
+
name: "view_promotion",
|
|
85
|
+
destinations: ["DataLayer"],
|
|
86
|
+
requiredParams: ["region", "promotion_name", "creative_name", "creative_slot"]
|
|
87
|
+
},
|
|
83
88
|
SEARCH_ZIPCODE: {
|
|
84
89
|
name: "search_zipcode",
|
|
85
90
|
requiredParams: ["region"]
|
|
@@ -138,6 +143,8 @@ function dataTrackingLog(data, color, destination) {
|
|
|
138
143
|
}
|
|
139
144
|
function pushToDataLayer(event, ecomm, dest) {
|
|
140
145
|
dataTrackingLog({ event, ecommerce: ecomm }, "#0b5fff", dest);
|
|
146
|
+
window.dataLayer = window.dataLayer || [];
|
|
147
|
+
window.dataLayer.push({ event, ecommerce: ecomm });
|
|
141
148
|
}
|
|
142
149
|
function pushToMeta(event, ecomm, dest) {
|
|
143
150
|
dataTrackingLog({ eventName: event, data: ecomm }, "#8C1007", dest);
|
|
@@ -369,6 +376,15 @@ var paramGetters = {
|
|
|
369
376
|
search_quantity: (context, eventName) => {
|
|
370
377
|
return context.searchQuantity || 0;
|
|
371
378
|
},
|
|
379
|
+
promotion_name: (context, eventName) => {
|
|
380
|
+
return context.promotionName || null;
|
|
381
|
+
},
|
|
382
|
+
creative_name: (context, eventName) => {
|
|
383
|
+
return context.creativeName || null;
|
|
384
|
+
},
|
|
385
|
+
creative_slot: (context, eventName) => {
|
|
386
|
+
return context.creativeSlot || null;
|
|
387
|
+
},
|
|
372
388
|
items: getItems
|
|
373
389
|
};
|
|
374
390
|
|
package/dist/mod.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/constants.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/items.ts","../src/params/index.ts","../src/formatter/index.ts"],"sourcesContent":["import { dispatchTrackEvent } from './adapters';\nimport { getParameters } from './formatter';\nimport type { EventContext, EventName } from './types';\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(event, parameters);\n } catch (err) {\n return console.error(`[DT] Error tracking event ${event}:`, err);\n }\n}\n\nexport { trackWebEvent };\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 requiredParams: ['region'],\n },\n\n SELECT_CONTENT: {\n name: 'select_content',\n requiredParams: ['region'],\n },\n\n SELECT_ITEM: {\n name: 'select_item',\n requiredParams: ['region'],\n },\n\n VIEW_ITEM_LIST: {\n name: 'view_item_list',\n requiredParams: ['region'],\n },\n\n BEGIN_CHECKOUT: {\n name: 'begin_checkout',\n requiredParams: ['region'],\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 requiredParams: ['region'],\n },\n\n ADD_PAYMENT_INFO: {\n name: 'add_payment_info',\n requiredParams: ['region'],\n },\n\n ORDER_REVIWED: {\n name: 'order_reviewed',\n requiredParams: ['region'],\n },\n\n PURCHASE: {\n name: 'purchase',\n requiredParams: ['region'],\n },\n};\n","import { EVENTS } from '../constants';\nimport type { EventName, EventContext } from '../types'\n\nfunction dataTrackingLog(data: EventContext, color: string, destination: string) {\n console.log(\n `%c[${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}\n\nfunction pushToDataLayer(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ event: event, ecommerce: ecomm }, '#0b5fff', dest);\n}\n\nfunction pushToMeta(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ eventName: event, data: ecomm }, '#8C1007', dest);\n}\n\nfunction pushToDito(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ id: event, custom_data: ecomm }, '#00c851', dest);\n}\n\nconst adapters = {\n Meta: pushToMeta,\n DataLayer: pushToDataLayer,\n Dito: pushToDito,\n};\n\ntype AdapterKey = keyof typeof 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","export 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);\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 (\n parseFloat(Math.max(item.listPrice - item.sellingPrice, 0).toFixed(2)) || 0\n );\n}\n\nexport function getItemCategory(item: any) {\n return 'sale';\n}\n\nexport function getItemCategory2(item: any) {\n return 'sale2';\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 brandMap = { Farm: 'farmrio', 'Farm Etc': 'farmetc' };\nexport function normalizeBrand(input: any) {\n if (typeof input === 'string') {\n return brandMap[input as keyof typeof brandMap] || null;\n }\n\n if (Array.isArray(input)) {\n const uniqueBrands = new Set(\n input.map((i) => brandMap[i.additionalInfo?.brandName as keyof typeof brandMap || i.brand])\n );\n return uniqueBrands.size ? [...uniqueBrands].join('_') : null;\n }\n\n return 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 type { EventContext, EventName } from '../types';\n\nexport function getBrand(context: EventContext, eventName: EventName) {\n if (context?.brand) return context.brand;\n\n switch (eventName) {\n case 'VIEW_CART':\n case 'ADD_COUPON':\n case 'ADD_PERSONAL_INFO':\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\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 ];\n}\n","import { itemsFromOrderForm } from './resolvers/items/fromOrderForm';\nimport { itemsFromItem } from './resolvers/items/fromItem';\n\nexport function getItems(context: Record<string, any>, eventName: string) {\n switch (eventName) {\n case 'VIEW_CART':\n return itemsFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'REMOVE_FROM_CART':\n return itemsFromItem(context);\n default:\n return null;\n }\n}\n","import type { EventContext, EventName } from '../types';\nimport { getBrand } from './brand';\nimport { getItems } from './items';\n\nexport const paramGetters = {\n brand: getBrand,\n\n region: (context: EventContext, eventName: EventName) => {\n return context.region || null;\n },\n\n line_items: (context: EventContext, eventName: EventName) => {\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 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 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 items: getItems,\n};\n","import { EVENTS } from '../constants';\nimport { paramGetters } from '../params';\nimport type { EventName, EventContext } from '../types'\n\ntype ParamName = keyof typeof paramGetters;\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"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/constants.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/items.ts","../src/params/index.ts","../src/formatter/index.ts"],"sourcesContent":["import { dispatchTrackEvent } from './adapters';\nimport { getParameters } from './formatter';\nimport type { EventContext, EventName } from './types';\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(event, { ...parameters, window: context.window });\n return await dispatchTrackEvent(event, parameters);\n } catch (err) {\n return console.error(`[DT] Error tracking event ${event}:`, err);\n }\n}\n\nexport { trackWebEvent };\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 VIEW_PROMOTION: {\n name: 'view_promotion',\n destinations: ['DataLayer'],\n requiredParams: ['region', 'promotion_name', 'creative_name', 'creative_slot'],\n },\n\n SEARCH_ZIPCODE: {\n name: 'search_zipcode',\n requiredParams: ['region'],\n },\n\n SELECT_CONTENT: {\n name: 'select_content',\n requiredParams: ['region'],\n },\n\n SELECT_ITEM: {\n name: 'select_item',\n requiredParams: ['region'],\n },\n\n VIEW_ITEM_LIST: {\n name: 'view_item_list',\n requiredParams: ['region'],\n },\n\n BEGIN_CHECKOUT: {\n name: 'begin_checkout',\n requiredParams: ['region'],\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 requiredParams: ['region'],\n },\n\n ADD_PAYMENT_INFO: {\n name: 'add_payment_info',\n requiredParams: ['region'],\n },\n\n ORDER_REVIWED: {\n name: 'order_reviewed',\n requiredParams: ['region'],\n },\n\n PURCHASE: {\n name: 'purchase',\n requiredParams: ['region'],\n },\n};\n","import { EVENTS } from '../constants';\nimport type { EventName, EventContext } from '../types'\n\n\nfunction dataTrackingLog(data: EventContext, color: string, destination: string) {\n console.log(\n `%c[${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}\n\nfunction pushToDataLayer(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ event: event, ecommerce: ecomm }, '#0b5fff', dest);\n\n // if (ecomm.window) {\n // ecomm.window.dataLayer = ecomm.window.dataLayer || []\n // ecomm.window.dataLayer.push(event)\n // return;\n // }\n\n window.dataLayer = window.dataLayer || []\n window.dataLayer.push({ event: event, ecommerce: ecomm })\n}\n\nfunction pushToMeta(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ eventName: event, data: ecomm }, '#8C1007', dest);\n}\n\nfunction pushToDito(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ id: event, custom_data: ecomm }, '#00c851', dest);\n}\n\nconst adapters = {\n Meta: pushToMeta,\n DataLayer: pushToDataLayer,\n Dito: pushToDito,\n};\n\ntype AdapterKey = keyof typeof 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","export 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);\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 (\n parseFloat(Math.max(item.listPrice - item.sellingPrice, 0).toFixed(2)) || 0\n );\n}\n\nexport function getItemCategory(item: any) {\n return 'sale';\n}\n\nexport function getItemCategory2(item: any) {\n return 'sale2';\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 brandMap = { Farm: 'farmrio', 'Farm Etc': 'farmetc' };\nexport function normalizeBrand(input: any) {\n if (typeof input === 'string') {\n return brandMap[input as keyof typeof brandMap] || null;\n }\n\n if (Array.isArray(input)) {\n const uniqueBrands = new Set(\n input.map((i) => brandMap[i.additionalInfo?.brandName as keyof typeof brandMap || i.brand])\n );\n return uniqueBrands.size ? [...uniqueBrands].join('_') : null;\n }\n\n return 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 type { EventContext, EventName } from '../types';\n\nexport function getBrand(context: EventContext, eventName: EventName) {\n if (context?.brand) return context.brand;\n\n switch (eventName) {\n case 'VIEW_CART':\n case 'ADD_COUPON':\n case 'ADD_PERSONAL_INFO':\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\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 ];\n}\n","import { itemsFromOrderForm } from './resolvers/items/fromOrderForm';\nimport { itemsFromItem } from './resolvers/items/fromItem';\n\nexport function getItems(context: Record<string, any>, eventName: string) {\n switch (eventName) {\n case 'VIEW_CART':\n return itemsFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'REMOVE_FROM_CART':\n return itemsFromItem(context);\n default:\n return null;\n }\n}\n","import type { EventContext, EventName } from '../types';\nimport { getBrand } from './brand';\nimport { getItems } from './items';\n\nexport const paramGetters = {\n brand: getBrand,\n\n region: (context: EventContext, eventName: EventName) => {\n return context.region || null;\n },\n\n line_items: (context: EventContext, eventName: EventName) => {\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 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 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 items: getItems,\n};\n","import { EVENTS } from '../constants';\nimport { paramGetters } from '../params';\nimport type { EventName, EventContext } from '../types'\n\ntype ParamName = keyof typeof paramGetters;\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"]}
|
package/dist/mod.d.cts
CHANGED
|
@@ -24,6 +24,11 @@ declare const EVENTS: {
|
|
|
24
24
|
destinations: string[];
|
|
25
25
|
requiredParams: string[];
|
|
26
26
|
};
|
|
27
|
+
VIEW_PROMOTION: {
|
|
28
|
+
name: string;
|
|
29
|
+
destinations: string[];
|
|
30
|
+
requiredParams: string[];
|
|
31
|
+
};
|
|
27
32
|
SEARCH_ZIPCODE: {
|
|
28
33
|
name: string;
|
|
29
34
|
requiredParams: string[];
|
|
@@ -71,6 +76,11 @@ declare const EVENTS: {
|
|
|
71
76
|
};
|
|
72
77
|
};
|
|
73
78
|
|
|
79
|
+
declare global {
|
|
80
|
+
interface Window {
|
|
81
|
+
dataLayer: any[];
|
|
82
|
+
}
|
|
83
|
+
}
|
|
74
84
|
type EventName = keyof typeof EVENTS;
|
|
75
85
|
type EventContext = Record<string, any>;
|
|
76
86
|
|
package/dist/mod.d.ts
CHANGED
|
@@ -24,6 +24,11 @@ declare const EVENTS: {
|
|
|
24
24
|
destinations: string[];
|
|
25
25
|
requiredParams: string[];
|
|
26
26
|
};
|
|
27
|
+
VIEW_PROMOTION: {
|
|
28
|
+
name: string;
|
|
29
|
+
destinations: string[];
|
|
30
|
+
requiredParams: string[];
|
|
31
|
+
};
|
|
27
32
|
SEARCH_ZIPCODE: {
|
|
28
33
|
name: string;
|
|
29
34
|
requiredParams: string[];
|
|
@@ -71,6 +76,11 @@ declare const EVENTS: {
|
|
|
71
76
|
};
|
|
72
77
|
};
|
|
73
78
|
|
|
79
|
+
declare global {
|
|
80
|
+
interface Window {
|
|
81
|
+
dataLayer: any[];
|
|
82
|
+
}
|
|
83
|
+
}
|
|
74
84
|
type EventName = keyof typeof EVENTS;
|
|
75
85
|
type EventContext = Record<string, any>;
|
|
76
86
|
|
package/dist/mod.global.js
CHANGED
|
@@ -80,6 +80,11 @@ var AzzasTracker = (() => {
|
|
|
80
80
|
destinations: ["DataLayer"],
|
|
81
81
|
requiredParams: ["brand", "search_term", "search_found", "search_quantity"]
|
|
82
82
|
},
|
|
83
|
+
VIEW_PROMOTION: {
|
|
84
|
+
name: "view_promotion",
|
|
85
|
+
destinations: ["DataLayer"],
|
|
86
|
+
requiredParams: ["region", "promotion_name", "creative_name", "creative_slot"]
|
|
87
|
+
},
|
|
83
88
|
SEARCH_ZIPCODE: {
|
|
84
89
|
name: "search_zipcode",
|
|
85
90
|
requiredParams: ["region"]
|
|
@@ -138,6 +143,8 @@ var AzzasTracker = (() => {
|
|
|
138
143
|
}
|
|
139
144
|
function pushToDataLayer(event, ecomm, dest) {
|
|
140
145
|
dataTrackingLog({ event, ecommerce: ecomm }, "#0b5fff", dest);
|
|
146
|
+
window.dataLayer = window.dataLayer || [];
|
|
147
|
+
window.dataLayer.push({ event, ecommerce: ecomm });
|
|
141
148
|
}
|
|
142
149
|
function pushToMeta(event, ecomm, dest) {
|
|
143
150
|
dataTrackingLog({ eventName: event, data: ecomm }, "#8C1007", dest);
|
|
@@ -369,6 +376,15 @@ var AzzasTracker = (() => {
|
|
|
369
376
|
search_quantity: (context, eventName) => {
|
|
370
377
|
return context.searchQuantity || 0;
|
|
371
378
|
},
|
|
379
|
+
promotion_name: (context, eventName) => {
|
|
380
|
+
return context.promotionName || null;
|
|
381
|
+
},
|
|
382
|
+
creative_name: (context, eventName) => {
|
|
383
|
+
return context.creativeName || null;
|
|
384
|
+
},
|
|
385
|
+
creative_slot: (context, eventName) => {
|
|
386
|
+
return context.creativeSlot || null;
|
|
387
|
+
},
|
|
372
388
|
items: getItems
|
|
373
389
|
};
|
|
374
390
|
|
package/dist/mod.global.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/constants.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/items.ts","../src/params/index.ts","../src/formatter/index.ts"],"sourcesContent":["import { dispatchTrackEvent } from './adapters';\nimport { getParameters } from './formatter';\nimport type { EventContext, EventName } from './types';\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(event, parameters);\n } catch (err) {\n return console.error(`[DT] Error tracking event ${event}:`, err);\n }\n}\n\nexport { trackWebEvent };\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 requiredParams: ['region'],\n },\n\n SELECT_CONTENT: {\n name: 'select_content',\n requiredParams: ['region'],\n },\n\n SELECT_ITEM: {\n name: 'select_item',\n requiredParams: ['region'],\n },\n\n VIEW_ITEM_LIST: {\n name: 'view_item_list',\n requiredParams: ['region'],\n },\n\n BEGIN_CHECKOUT: {\n name: 'begin_checkout',\n requiredParams: ['region'],\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 requiredParams: ['region'],\n },\n\n ADD_PAYMENT_INFO: {\n name: 'add_payment_info',\n requiredParams: ['region'],\n },\n\n ORDER_REVIWED: {\n name: 'order_reviewed',\n requiredParams: ['region'],\n },\n\n PURCHASE: {\n name: 'purchase',\n requiredParams: ['region'],\n },\n};\n","import { EVENTS } from '../constants';\nimport type { EventName, EventContext } from '../types'\n\nfunction dataTrackingLog(data: EventContext, color: string, destination: string) {\n console.log(\n `%c[${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}\n\nfunction pushToDataLayer(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ event: event, ecommerce: ecomm }, '#0b5fff', dest);\n}\n\nfunction pushToMeta(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ eventName: event, data: ecomm }, '#8C1007', dest);\n}\n\nfunction pushToDito(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ id: event, custom_data: ecomm }, '#00c851', dest);\n}\n\nconst adapters = {\n Meta: pushToMeta,\n DataLayer: pushToDataLayer,\n Dito: pushToDito,\n};\n\ntype AdapterKey = keyof typeof 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","export 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);\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 (\n parseFloat(Math.max(item.listPrice - item.sellingPrice, 0).toFixed(2)) || 0\n );\n}\n\nexport function getItemCategory(item: any) {\n return 'sale';\n}\n\nexport function getItemCategory2(item: any) {\n return 'sale2';\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 brandMap = { Farm: 'farmrio', 'Farm Etc': 'farmetc' };\nexport function normalizeBrand(input: any) {\n if (typeof input === 'string') {\n return brandMap[input as keyof typeof brandMap] || null;\n }\n\n if (Array.isArray(input)) {\n const uniqueBrands = new Set(\n input.map((i) => brandMap[i.additionalInfo?.brandName as keyof typeof brandMap || i.brand])\n );\n return uniqueBrands.size ? [...uniqueBrands].join('_') : null;\n }\n\n return 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 type { EventContext, EventName } from '../types';\n\nexport function getBrand(context: EventContext, eventName: EventName) {\n if (context?.brand) return context.brand;\n\n switch (eventName) {\n case 'VIEW_CART':\n case 'ADD_COUPON':\n case 'ADD_PERSONAL_INFO':\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\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 ];\n}\n","import { itemsFromOrderForm } from './resolvers/items/fromOrderForm';\nimport { itemsFromItem } from './resolvers/items/fromItem';\n\nexport function getItems(context: Record<string, any>, eventName: string) {\n switch (eventName) {\n case 'VIEW_CART':\n return itemsFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'REMOVE_FROM_CART':\n return itemsFromItem(context);\n default:\n return null;\n }\n}\n","import type { EventContext, EventName } from '../types';\nimport { getBrand } from './brand';\nimport { getItems } from './items';\n\nexport const paramGetters = {\n brand: getBrand,\n\n region: (context: EventContext, eventName: EventName) => {\n return context.region || null;\n },\n\n line_items: (context: EventContext, eventName: EventName) => {\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 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 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 items: getItems,\n};\n","import { EVENTS } from '../constants';\nimport { paramGetters } from '../params';\nimport type { EventName, EventContext } from '../types'\n\ntype ParamName = keyof typeof paramGetters;\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"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/constants.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/items.ts","../src/params/index.ts","../src/formatter/index.ts"],"sourcesContent":["import { dispatchTrackEvent } from './adapters';\nimport { getParameters } from './formatter';\nimport type { EventContext, EventName } from './types';\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(event, { ...parameters, window: context.window });\n return await dispatchTrackEvent(event, parameters);\n } catch (err) {\n return console.error(`[DT] Error tracking event ${event}:`, err);\n }\n}\n\nexport { trackWebEvent };\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 VIEW_PROMOTION: {\n name: 'view_promotion',\n destinations: ['DataLayer'],\n requiredParams: ['region', 'promotion_name', 'creative_name', 'creative_slot'],\n },\n\n SEARCH_ZIPCODE: {\n name: 'search_zipcode',\n requiredParams: ['region'],\n },\n\n SELECT_CONTENT: {\n name: 'select_content',\n requiredParams: ['region'],\n },\n\n SELECT_ITEM: {\n name: 'select_item',\n requiredParams: ['region'],\n },\n\n VIEW_ITEM_LIST: {\n name: 'view_item_list',\n requiredParams: ['region'],\n },\n\n BEGIN_CHECKOUT: {\n name: 'begin_checkout',\n requiredParams: ['region'],\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 requiredParams: ['region'],\n },\n\n ADD_PAYMENT_INFO: {\n name: 'add_payment_info',\n requiredParams: ['region'],\n },\n\n ORDER_REVIWED: {\n name: 'order_reviewed',\n requiredParams: ['region'],\n },\n\n PURCHASE: {\n name: 'purchase',\n requiredParams: ['region'],\n },\n};\n","import { EVENTS } from '../constants';\nimport type { EventName, EventContext } from '../types'\n\n\nfunction dataTrackingLog(data: EventContext, color: string, destination: string) {\n console.log(\n `%c[${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}\n\nfunction pushToDataLayer(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ event: event, ecommerce: ecomm }, '#0b5fff', dest);\n\n // if (ecomm.window) {\n // ecomm.window.dataLayer = ecomm.window.dataLayer || []\n // ecomm.window.dataLayer.push(event)\n // return;\n // }\n\n window.dataLayer = window.dataLayer || []\n window.dataLayer.push({ event: event, ecommerce: ecomm })\n}\n\nfunction pushToMeta(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ eventName: event, data: ecomm }, '#8C1007', dest);\n}\n\nfunction pushToDito(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ id: event, custom_data: ecomm }, '#00c851', dest);\n}\n\nconst adapters = {\n Meta: pushToMeta,\n DataLayer: pushToDataLayer,\n Dito: pushToDito,\n};\n\ntype AdapterKey = keyof typeof 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","export 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);\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 (\n parseFloat(Math.max(item.listPrice - item.sellingPrice, 0).toFixed(2)) || 0\n );\n}\n\nexport function getItemCategory(item: any) {\n return 'sale';\n}\n\nexport function getItemCategory2(item: any) {\n return 'sale2';\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 brandMap = { Farm: 'farmrio', 'Farm Etc': 'farmetc' };\nexport function normalizeBrand(input: any) {\n if (typeof input === 'string') {\n return brandMap[input as keyof typeof brandMap] || null;\n }\n\n if (Array.isArray(input)) {\n const uniqueBrands = new Set(\n input.map((i) => brandMap[i.additionalInfo?.brandName as keyof typeof brandMap || i.brand])\n );\n return uniqueBrands.size ? [...uniqueBrands].join('_') : null;\n }\n\n return 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 type { EventContext, EventName } from '../types';\n\nexport function getBrand(context: EventContext, eventName: EventName) {\n if (context?.brand) return context.brand;\n\n switch (eventName) {\n case 'VIEW_CART':\n case 'ADD_COUPON':\n case 'ADD_PERSONAL_INFO':\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\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 ];\n}\n","import { itemsFromOrderForm } from './resolvers/items/fromOrderForm';\nimport { itemsFromItem } from './resolvers/items/fromItem';\n\nexport function getItems(context: Record<string, any>, eventName: string) {\n switch (eventName) {\n case 'VIEW_CART':\n return itemsFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'REMOVE_FROM_CART':\n return itemsFromItem(context);\n default:\n return null;\n }\n}\n","import type { EventContext, EventName } from '../types';\nimport { getBrand } from './brand';\nimport { getItems } from './items';\n\nexport const paramGetters = {\n brand: getBrand,\n\n region: (context: EventContext, eventName: EventName) => {\n return context.region || null;\n },\n\n line_items: (context: EventContext, eventName: EventName) => {\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 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 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 items: getItems,\n};\n","import { EVENTS } from '../constants';\nimport { paramGetters } from '../params';\nimport type { EventName, EventContext } from '../types'\n\ntype ParamName = keyof typeof paramGetters;\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"]}
|
package/dist/mod.js
CHANGED
|
@@ -54,6 +54,11 @@ var EVENTS = {
|
|
|
54
54
|
destinations: ["DataLayer"],
|
|
55
55
|
requiredParams: ["brand", "search_term", "search_found", "search_quantity"]
|
|
56
56
|
},
|
|
57
|
+
VIEW_PROMOTION: {
|
|
58
|
+
name: "view_promotion",
|
|
59
|
+
destinations: ["DataLayer"],
|
|
60
|
+
requiredParams: ["region", "promotion_name", "creative_name", "creative_slot"]
|
|
61
|
+
},
|
|
57
62
|
SEARCH_ZIPCODE: {
|
|
58
63
|
name: "search_zipcode",
|
|
59
64
|
requiredParams: ["region"]
|
|
@@ -112,6 +117,8 @@ function dataTrackingLog(data, color, destination) {
|
|
|
112
117
|
}
|
|
113
118
|
function pushToDataLayer(event, ecomm, dest) {
|
|
114
119
|
dataTrackingLog({ event, ecommerce: ecomm }, "#0b5fff", dest);
|
|
120
|
+
window.dataLayer = window.dataLayer || [];
|
|
121
|
+
window.dataLayer.push({ event, ecommerce: ecomm });
|
|
115
122
|
}
|
|
116
123
|
function pushToMeta(event, ecomm, dest) {
|
|
117
124
|
dataTrackingLog({ eventName: event, data: ecomm }, "#8C1007", dest);
|
|
@@ -343,6 +350,15 @@ var paramGetters = {
|
|
|
343
350
|
search_quantity: (context, eventName) => {
|
|
344
351
|
return context.searchQuantity || 0;
|
|
345
352
|
},
|
|
353
|
+
promotion_name: (context, eventName) => {
|
|
354
|
+
return context.promotionName || null;
|
|
355
|
+
},
|
|
356
|
+
creative_name: (context, eventName) => {
|
|
357
|
+
return context.creativeName || null;
|
|
358
|
+
},
|
|
359
|
+
creative_slot: (context, eventName) => {
|
|
360
|
+
return context.creativeSlot || null;
|
|
361
|
+
},
|
|
346
362
|
items: getItems
|
|
347
363
|
};
|
|
348
364
|
|
package/dist/mod.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constants.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/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 requiredParams: ['region'],\n },\n\n SELECT_CONTENT: {\n name: 'select_content',\n requiredParams: ['region'],\n },\n\n SELECT_ITEM: {\n name: 'select_item',\n requiredParams: ['region'],\n },\n\n VIEW_ITEM_LIST: {\n name: 'view_item_list',\n requiredParams: ['region'],\n },\n\n BEGIN_CHECKOUT: {\n name: 'begin_checkout',\n requiredParams: ['region'],\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 requiredParams: ['region'],\n },\n\n ADD_PAYMENT_INFO: {\n name: 'add_payment_info',\n requiredParams: ['region'],\n },\n\n ORDER_REVIWED: {\n name: 'order_reviewed',\n requiredParams: ['region'],\n },\n\n PURCHASE: {\n name: 'purchase',\n requiredParams: ['region'],\n },\n};\n","import { EVENTS } from '../constants';\nimport type { EventName, EventContext } from '../types'\n\nfunction dataTrackingLog(data: EventContext, color: string, destination: string) {\n console.log(\n `%c[${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}\n\nfunction pushToDataLayer(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ event: event, ecommerce: ecomm }, '#0b5fff', dest);\n}\n\nfunction pushToMeta(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ eventName: event, data: ecomm }, '#8C1007', dest);\n}\n\nfunction pushToDito(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ id: event, custom_data: ecomm }, '#00c851', dest);\n}\n\nconst adapters = {\n Meta: pushToMeta,\n DataLayer: pushToDataLayer,\n Dito: pushToDito,\n};\n\ntype AdapterKey = keyof typeof 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","export 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);\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 (\n parseFloat(Math.max(item.listPrice - item.sellingPrice, 0).toFixed(2)) || 0\n );\n}\n\nexport function getItemCategory(item: any) {\n return 'sale';\n}\n\nexport function getItemCategory2(item: any) {\n return 'sale2';\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 brandMap = { Farm: 'farmrio', 'Farm Etc': 'farmetc' };\nexport function normalizeBrand(input: any) {\n if (typeof input === 'string') {\n return brandMap[input as keyof typeof brandMap] || null;\n }\n\n if (Array.isArray(input)) {\n const uniqueBrands = new Set(\n input.map((i) => brandMap[i.additionalInfo?.brandName as keyof typeof brandMap || i.brand])\n );\n return uniqueBrands.size ? [...uniqueBrands].join('_') : null;\n }\n\n return 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 type { EventContext, EventName } from '../types';\n\nexport function getBrand(context: EventContext, eventName: EventName) {\n if (context?.brand) return context.brand;\n\n switch (eventName) {\n case 'VIEW_CART':\n case 'ADD_COUPON':\n case 'ADD_PERSONAL_INFO':\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\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 ];\n}\n","import { itemsFromOrderForm } from './resolvers/items/fromOrderForm';\nimport { itemsFromItem } from './resolvers/items/fromItem';\n\nexport function getItems(context: Record<string, any>, eventName: string) {\n switch (eventName) {\n case 'VIEW_CART':\n return itemsFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'REMOVE_FROM_CART':\n return itemsFromItem(context);\n default:\n return null;\n }\n}\n","import type { EventContext, EventName } from '../types';\nimport { getBrand } from './brand';\nimport { getItems } from './items';\n\nexport const paramGetters = {\n brand: getBrand,\n\n region: (context: EventContext, eventName: EventName) => {\n return context.region || null;\n },\n\n line_items: (context: EventContext, eventName: EventName) => {\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 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 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 items: getItems,\n};\n","import { EVENTS } from '../constants';\nimport { paramGetters } from '../params';\nimport type { EventName, EventContext } from '../types'\n\ntype ParamName = keyof typeof paramGetters;\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 type { EventContext, EventName } from './types';\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(event, parameters);\n } catch (err) {\n return console.error(`[DT] Error tracking event ${event}:`, err);\n }\n}\n\nexport { trackWebEvent };\n"],"mappings":"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","names":["_a"]}
|
|
1
|
+
{"version":3,"sources":["../src/constants.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/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 VIEW_PROMOTION: {\n name: 'view_promotion',\n destinations: ['DataLayer'],\n requiredParams: ['region', 'promotion_name', 'creative_name', 'creative_slot'],\n },\n\n SEARCH_ZIPCODE: {\n name: 'search_zipcode',\n requiredParams: ['region'],\n },\n\n SELECT_CONTENT: {\n name: 'select_content',\n requiredParams: ['region'],\n },\n\n SELECT_ITEM: {\n name: 'select_item',\n requiredParams: ['region'],\n },\n\n VIEW_ITEM_LIST: {\n name: 'view_item_list',\n requiredParams: ['region'],\n },\n\n BEGIN_CHECKOUT: {\n name: 'begin_checkout',\n requiredParams: ['region'],\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 requiredParams: ['region'],\n },\n\n ADD_PAYMENT_INFO: {\n name: 'add_payment_info',\n requiredParams: ['region'],\n },\n\n ORDER_REVIWED: {\n name: 'order_reviewed',\n requiredParams: ['region'],\n },\n\n PURCHASE: {\n name: 'purchase',\n requiredParams: ['region'],\n },\n};\n","import { EVENTS } from '../constants';\nimport type { EventName, EventContext } from '../types'\n\n\nfunction dataTrackingLog(data: EventContext, color: string, destination: string) {\n console.log(\n `%c[${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}\n\nfunction pushToDataLayer(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ event: event, ecommerce: ecomm }, '#0b5fff', dest);\n\n // if (ecomm.window) {\n // ecomm.window.dataLayer = ecomm.window.dataLayer || []\n // ecomm.window.dataLayer.push(event)\n // return;\n // }\n\n window.dataLayer = window.dataLayer || []\n window.dataLayer.push({ event: event, ecommerce: ecomm })\n}\n\nfunction pushToMeta(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ eventName: event, data: ecomm }, '#8C1007', dest);\n}\n\nfunction pushToDito(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ id: event, custom_data: ecomm }, '#00c851', dest);\n}\n\nconst adapters = {\n Meta: pushToMeta,\n DataLayer: pushToDataLayer,\n Dito: pushToDito,\n};\n\ntype AdapterKey = keyof typeof 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","export 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);\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 (\n parseFloat(Math.max(item.listPrice - item.sellingPrice, 0).toFixed(2)) || 0\n );\n}\n\nexport function getItemCategory(item: any) {\n return 'sale';\n}\n\nexport function getItemCategory2(item: any) {\n return 'sale2';\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 brandMap = { Farm: 'farmrio', 'Farm Etc': 'farmetc' };\nexport function normalizeBrand(input: any) {\n if (typeof input === 'string') {\n return brandMap[input as keyof typeof brandMap] || null;\n }\n\n if (Array.isArray(input)) {\n const uniqueBrands = new Set(\n input.map((i) => brandMap[i.additionalInfo?.brandName as keyof typeof brandMap || i.brand])\n );\n return uniqueBrands.size ? [...uniqueBrands].join('_') : null;\n }\n\n return 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 type { EventContext, EventName } from '../types';\n\nexport function getBrand(context: EventContext, eventName: EventName) {\n if (context?.brand) return context.brand;\n\n switch (eventName) {\n case 'VIEW_CART':\n case 'ADD_COUPON':\n case 'ADD_PERSONAL_INFO':\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\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 ];\n}\n","import { itemsFromOrderForm } from './resolvers/items/fromOrderForm';\nimport { itemsFromItem } from './resolvers/items/fromItem';\n\nexport function getItems(context: Record<string, any>, eventName: string) {\n switch (eventName) {\n case 'VIEW_CART':\n return itemsFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'REMOVE_FROM_CART':\n return itemsFromItem(context);\n default:\n return null;\n }\n}\n","import type { EventContext, EventName } from '../types';\nimport { getBrand } from './brand';\nimport { getItems } from './items';\n\nexport const paramGetters = {\n brand: getBrand,\n\n region: (context: EventContext, eventName: EventName) => {\n return context.region || null;\n },\n\n line_items: (context: EventContext, eventName: EventName) => {\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 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 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 items: getItems,\n};\n","import { EVENTS } from '../constants';\nimport { paramGetters } from '../params';\nimport type { EventName, EventContext } from '../types'\n\ntype ParamName = keyof typeof paramGetters;\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 type { EventContext, EventName } from './types';\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(event, { ...parameters, window: context.window });\n return await dispatchTrackEvent(event, parameters);\n } catch (err) {\n return console.error(`[DT] Error tracking event ${event}:`, err);\n }\n}\n\nexport { trackWebEvent };\n"],"mappings":"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","names":["_a"]}
|