@azzas/azzas-tracker-web 1.0.9 → 1.0.11

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/README.md CHANGED
@@ -82,6 +82,27 @@ Uso básico da função no consumidor:
82
82
 
83
83
  ***OBS***: atente-se ao adicionar eventos novos e contribua na documentação do NOTION ou apenas DOCUMENTE em algum lugar! Seu futuro EU será grato 👍
84
84
 
85
+ ## Teste Local para Ambientes CDN/DENO
86
+
87
+ Para testar alterações na biblioteca localmente, simulando a forma como ela é carregada por uma CDN (<script src="...">), use o script npm run dev:deno.
88
+
89
+ Este comando realiza o build mais recente da biblioteca, empacota-o e inicia um servidor HTTP local usando o Deno para servir o arquivo
90
+
91
+ 1. Aqui nesse repositório, rode o script que inicia o servidor local:
92
+
93
+ ```bash
94
+ npm run dev:deno
95
+ ```
96
+
97
+ O servidor será iniciado e começará a servir o seu arquivo de build no seguinte endereço: http://localhost:4507/.
98
+
99
+ 2. No Projeto Consumidor (DENO/FRONT):
100
+
101
+ Altere o link do <script> no seu projeto para apontar para o servidor local.
102
+
103
+ Você deve usar: <script src="http://localhost:4507/dist/mod.global.js"></script>
104
+
105
+
85
106
  ## Boas Práticas
86
107
  - Sempre garantir que os `requiredParams` de cada evento estejam preenchidos antes de enviar.
87
108
 
package/dist/mod.cjs CHANGED
@@ -20,6 +20,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/index.ts
21
21
  var src_exports = {};
22
22
  __export(src_exports, {
23
+ EVENTS: () => EVENTS,
24
+ default: () => src_default,
23
25
  trackWebEvent: () => trackWebEvent
24
26
  });
25
27
  module.exports = __toCommonJS(src_exports);
@@ -95,7 +97,8 @@ var EVENTS = {
95
97
  },
96
98
  SELECT_ITEM: {
97
99
  name: "select_item",
98
- requiredParams: ["region"]
100
+ destinations: ["DataLayer"],
101
+ requiredParams: ["brand", "region", "items", "line_items"]
99
102
  },
100
103
  VIEW_ITEM_LIST: {
101
104
  name: "view_item_list",
@@ -143,14 +146,15 @@ function dataTrackingLog(data, color, destination) {
143
146
  );
144
147
  }
145
148
  function pushToDataLayer(event, ecomm, dest) {
146
- dataTrackingLog({ event, ecommerce: ecomm }, "#0b5fff", dest);
147
- if (ecomm.window) {
148
- ecomm.window.dataLayer = ecomm.window.dataLayer || [];
149
- ecomm.window.dataLayer.push({ event, ecommerce: ecomm });
149
+ const { window: targetWindow, ...ecommercePayload } = ecomm;
150
+ dataTrackingLog({ event, ecommerce: ecommercePayload }, "#0b5fff", dest);
151
+ if (targetWindow) {
152
+ targetWindow.dataLayer = targetWindow.dataLayer || [];
153
+ targetWindow.dataLayer.push({ event, ecommerce: ecommercePayload });
150
154
  return;
151
155
  }
152
156
  window.dataLayer = window.dataLayer || [];
153
- window.dataLayer.push({ event, ecommerce: ecomm });
157
+ window.dataLayer.push({ event, ecommerce: ecommercePayload });
154
158
  }
155
159
  function pushToMeta(event, ecomm, dest) {
156
160
  dataTrackingLog({ eventName: event, data: ecomm }, "#8C1007", dest);
@@ -198,7 +202,7 @@ function getItemShippingTier(orderForm, item) {
198
202
  }
199
203
  async function getItemSku(item) {
200
204
  var _a, _b;
201
- const product = await getProductDataById(item.productId);
205
+ const product = await getProductDataById(item.productId || item.productID);
202
206
  if (!product.length) return null;
203
207
  return (_b = (_a = product[0].items.find((i) => i.name === item.skuName)) == null ? void 0 : _a.itemId) != null ? _b : null;
204
208
  }
@@ -216,21 +220,36 @@ function getItemCategory4(item) {
216
220
  const tags = ((_a = item == null ? void 0 : item.additionalInfo) == null ? void 0 : _a.tags) || (item == null ? void 0 : item.tags);
217
221
  return Array.isArray(tags) && tags.length ? tags.join(",") : null;
218
222
  }
219
- var brandMap = { Farm: "farmrio", "Farm Etc": "farmetc" };
223
+ var BRAND_CODES = {
224
+ farm: "farmrio",
225
+ "farm etc": "farmetc",
226
+ "farm rio": "farmrio"
227
+ };
228
+ function getBrandCode(brand) {
229
+ if (!brand) return null;
230
+ const standardized = brand.toLowerCase().trim();
231
+ return BRAND_CODES[standardized] || null;
232
+ }
220
233
  function normalizeBrand(input) {
221
- if (typeof input === "string") {
222
- return brandMap[input] || null;
223
- }
224
- if (Array.isArray(input)) {
225
- const uniqueBrands = new Set(
226
- input.map((i) => {
227
- var _a;
228
- return brandMap[((_a = i.additionalInfo) == null ? void 0 : _a.brandName) || i.brand];
229
- })
230
- );
231
- return uniqueBrands.size ? [...uniqueBrands].join("_") : null;
234
+ var _a;
235
+ let brandStrings = [];
236
+ if (Array.isArray(input) && input.every((item) => typeof item === "string")) {
237
+ brandStrings = input;
238
+ } else if (Array.isArray(input)) {
239
+ brandStrings = input.map((item) => {
240
+ var _a2;
241
+ return ((_a2 = item.additionalInfo) == null ? void 0 : _a2.brandName) || item.brand;
242
+ });
243
+ } else if (typeof input === "object" && input !== null && "brand" in input) {
244
+ brandStrings = [((_a = input.additionalInfo) == null ? void 0 : _a.brandName) || input.brand];
245
+ } else if (typeof input === "string") {
246
+ return getBrandCode(input);
247
+ } else {
248
+ return null;
232
249
  }
233
- return null;
250
+ const brandCodes = brandStrings.map(getBrandCode).filter((code) => code !== null);
251
+ const uniqueSortedCodes = [...new Set(brandCodes)].sort();
252
+ return uniqueSortedCodes.length > 0 ? uniqueSortedCodes.join("_") : null;
234
253
  }
235
254
 
236
255
  // src/params/resolvers/brand/fromOrderForm.ts
@@ -250,7 +269,7 @@ function brandFromItem(context) {
250
269
 
251
270
  // src/params/brand.ts
252
271
  function getBrand(context, eventName) {
253
- if (context == null ? void 0 : context.brand) return context.brand;
272
+ if (context == null ? void 0 : context.brand) return normalizeBrand(context.brand);
254
273
  switch (eventName) {
255
274
  case "VIEW_CART":
256
275
  case "ADD_COUPON":
@@ -317,8 +336,31 @@ async function itemsFromItem(context) {
317
336
  ];
318
337
  }
319
338
 
339
+ // src/params/resolvers/items/fromList.ts
340
+ async function itemsFromList(context) {
341
+ const { item } = context;
342
+ return [
343
+ {
344
+ item_id: item.productID,
345
+ // item_category2: getItemCategory2(item),
346
+ // price: parseFloat((context.item.offers.highPrice / 100).toFixed(2)) || 0,
347
+ quantity: 1,
348
+ item_ref: context.item.additionalProperty.find((i) => i.name === "RefId").value,
349
+ item_brand: normalizeBrand(item.brand.name) || null,
350
+ item_sku: await getItemSku(item) || item.productID || null,
351
+ item_name: item.alternateName || null,
352
+ // item_category: getItemCategory(item) || null,
353
+ // item_variant: item?.skuName?.split('-')[0].trim() || null,
354
+ discount: context.item.offers.highPrice - context.item.offers.lowPrice || null,
355
+ item_list_name: (context == null ? void 0 : context.itemListName) || null,
356
+ index: typeof (context == null ? void 0 : context.index) === "number" ? context.index : null
357
+ }
358
+ ];
359
+ }
360
+
320
361
  // src/params/items.ts
321
362
  function getItems(context, eventName) {
363
+ if (context == null ? void 0 : context.items) return context.items;
322
364
  switch (eventName) {
323
365
  case "VIEW_CART":
324
366
  case "BEGIN_CHECKOUT":
@@ -326,6 +368,8 @@ function getItems(context, eventName) {
326
368
  case "ADD_TO_CART":
327
369
  case "REMOVE_FROM_CART":
328
370
  return itemsFromItem(context);
371
+ case "SELECT_ITEM":
372
+ return itemsFromList(context);
329
373
  default:
330
374
  return null;
331
375
  }
@@ -338,7 +382,7 @@ var paramGetters = {
338
382
  return context.region || null;
339
383
  },
340
384
  line_items: (context, eventName) => {
341
- return (context.orderForm.items || []).map((item) => item.productId).join(",");
385
+ return (context == null ? void 0 : context.lineItems) ? context.lineItems : (context.orderForm.items || []).map((item) => item.productId).join(",");
342
386
  },
343
387
  currency: (context, eventName) => {
344
388
  var _a, _b;
@@ -427,8 +471,13 @@ async function trackWebEvent(event, context = {}) {
427
471
  return console.error(`[DT] Error tracking event ${event}:`, err);
428
472
  }
429
473
  }
474
+ var src_default = {
475
+ trackWebEvent,
476
+ EVENTS
477
+ };
430
478
  // Annotate the CommonJS export names for ESM import in node:
431
479
  0 && (module.exports = {
480
+ EVENTS,
432
481
  trackWebEvent
433
482
  });
434
483
  //# sourceMappingURL=mod.cjs.map
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(\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 };\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 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 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[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}\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: event, ecommerce: ecomm })\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 case 'BEGIN_CHECKOUT':\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 case 'BEGIN_CHECKOUT':\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"]}
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/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 './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 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 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 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\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 */\nfunction 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}\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 */\nfunction pushToDataLayer(event: string, ecomm: EventContext, dest: string) {\n // spread to separate window prop and avoid to push as payload to dayalayer\n const { window: targetWindow, ...ecommercePayload } = ecomm;\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}\n\n/**\n * Log a Meta tracking event payload for delivery to the Meta destination.\n *\n * @param event - The event name to send to Meta\n * @param ecomm - The event context / ecommerce payload\n * @param dest - Destination identifier (e.g., \"Meta\")\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\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 (\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 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 'BEGIN_CHECKOUT':\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 ];\n}\n","import {\n getItemSku,\n // getDiscount,\n // getItemCategory,\n // getItemCategory2,\n // getItemCategory4,\n normalizeBrand,\n} from '../../utils';\n\nexport async function itemsFromList(context: Record<string, any>) {\n const { item } = context;\n\n return [\n {\n item_id: item.productID,\n // item_category2: getItemCategory2(item),\n // price: parseFloat((context.item.offers.highPrice / 100).toFixed(2)) || 0,\n quantity: 1,\n item_ref: context.item.additionalProperty.find((i: { name: string }) => i.name === \"RefId\").value,\n item_brand: normalizeBrand(item.brand.name) || null,\n item_sku: (await getItemSku(item)) || item.productID || null,\n item_name: item.alternateName || null,\n // item_category: getItemCategory(item) || null,\n // item_variant: item?.skuName?.split('-')[0].trim() || null,\n discount: context.item.offers.highPrice - context.item.offers.lowPrice || null,\n item_list_name: context?.itemListName || null,\n index: typeof context?.index === 'number' ? context.index : 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 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';\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?.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 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\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"]}
package/dist/mod.d.cts CHANGED
@@ -39,6 +39,7 @@ declare const EVENTS: {
39
39
  };
40
40
  SELECT_ITEM: {
41
41
  name: string;
42
+ destinations: string[];
42
43
  requiredParams: string[];
43
44
  };
44
45
  VIEW_ITEM_LIST: {
@@ -85,6 +86,96 @@ declare global {
85
86
  type EventName = keyof typeof EVENTS;
86
87
  type EventContext = Record<string, any>;
87
88
 
89
+ /**
90
+ * Assembles tracking parameters and sends a web tracking event.
91
+ *
92
+ * @param event - The name of the event to track.
93
+ * @param context - Optional context used to build event parameters; may include a `window` property that will be attached to the dispatched payload.
94
+ * @returns The result returned by `dispatchTrackEvent` when the event is sent successfully, or the value returned by `console.error` (`undefined`) if an error occurs.
95
+ */
88
96
  declare function trackWebEvent(event: EventName, context?: EventContext): Promise<void>;
89
97
 
90
- export { trackWebEvent };
98
+ declare const _default: {
99
+ trackWebEvent: typeof trackWebEvent;
100
+ EVENTS: {
101
+ VIEW_CART: {
102
+ name: string;
103
+ destinations: string[];
104
+ requiredParams: string[];
105
+ };
106
+ ADD_TO_CART: {
107
+ name: string;
108
+ destinations: string[];
109
+ requiredParams: string[];
110
+ };
111
+ REMOVE_FROM_CART: {
112
+ name: string;
113
+ destinations: string[];
114
+ requiredParams: string[];
115
+ };
116
+ ADD_COUPON: {
117
+ name: string;
118
+ destinations: string[];
119
+ requiredParams: string[];
120
+ };
121
+ SEARCH: {
122
+ name: string;
123
+ destinations: string[];
124
+ requiredParams: string[];
125
+ };
126
+ VIEW_PROMOTION: {
127
+ name: string;
128
+ destinations: string[];
129
+ requiredParams: string[];
130
+ };
131
+ SEARCH_ZIPCODE: {
132
+ name: string;
133
+ requiredParams: string[];
134
+ };
135
+ SELECT_CONTENT: {
136
+ name: string;
137
+ requiredParams: string[];
138
+ };
139
+ SELECT_ITEM: {
140
+ name: string;
141
+ destinations: string[];
142
+ requiredParams: string[];
143
+ };
144
+ VIEW_ITEM_LIST: {
145
+ name: string;
146
+ requiredParams: string[];
147
+ };
148
+ BEGIN_CHECKOUT: {
149
+ name: string;
150
+ destinations: string[];
151
+ requiredParams: string[];
152
+ };
153
+ AUTH_ACTION: {
154
+ name: string;
155
+ requiredParams: string[];
156
+ };
157
+ ADD_PERSONAL_INFO: {
158
+ name: string;
159
+ destinations: string[];
160
+ requiredParams: string[];
161
+ };
162
+ ADD_SHIPPING_INFO: {
163
+ name: string;
164
+ requiredParams: string[];
165
+ };
166
+ ADD_PAYMENT_INFO: {
167
+ name: string;
168
+ requiredParams: string[];
169
+ };
170
+ ORDER_REVIWED: {
171
+ name: string;
172
+ requiredParams: string[];
173
+ };
174
+ PURCHASE: {
175
+ name: string;
176
+ requiredParams: string[];
177
+ };
178
+ };
179
+ };
180
+
181
+ export { EVENTS, _default as default, trackWebEvent };
package/dist/mod.d.ts CHANGED
@@ -39,6 +39,7 @@ declare const EVENTS: {
39
39
  };
40
40
  SELECT_ITEM: {
41
41
  name: string;
42
+ destinations: string[];
42
43
  requiredParams: string[];
43
44
  };
44
45
  VIEW_ITEM_LIST: {
@@ -85,6 +86,96 @@ declare global {
85
86
  type EventName = keyof typeof EVENTS;
86
87
  type EventContext = Record<string, any>;
87
88
 
89
+ /**
90
+ * Assembles tracking parameters and sends a web tracking event.
91
+ *
92
+ * @param event - The name of the event to track.
93
+ * @param context - Optional context used to build event parameters; may include a `window` property that will be attached to the dispatched payload.
94
+ * @returns The result returned by `dispatchTrackEvent` when the event is sent successfully, or the value returned by `console.error` (`undefined`) if an error occurs.
95
+ */
88
96
  declare function trackWebEvent(event: EventName, context?: EventContext): Promise<void>;
89
97
 
90
- export { trackWebEvent };
98
+ declare const _default: {
99
+ trackWebEvent: typeof trackWebEvent;
100
+ EVENTS: {
101
+ VIEW_CART: {
102
+ name: string;
103
+ destinations: string[];
104
+ requiredParams: string[];
105
+ };
106
+ ADD_TO_CART: {
107
+ name: string;
108
+ destinations: string[];
109
+ requiredParams: string[];
110
+ };
111
+ REMOVE_FROM_CART: {
112
+ name: string;
113
+ destinations: string[];
114
+ requiredParams: string[];
115
+ };
116
+ ADD_COUPON: {
117
+ name: string;
118
+ destinations: string[];
119
+ requiredParams: string[];
120
+ };
121
+ SEARCH: {
122
+ name: string;
123
+ destinations: string[];
124
+ requiredParams: string[];
125
+ };
126
+ VIEW_PROMOTION: {
127
+ name: string;
128
+ destinations: string[];
129
+ requiredParams: string[];
130
+ };
131
+ SEARCH_ZIPCODE: {
132
+ name: string;
133
+ requiredParams: string[];
134
+ };
135
+ SELECT_CONTENT: {
136
+ name: string;
137
+ requiredParams: string[];
138
+ };
139
+ SELECT_ITEM: {
140
+ name: string;
141
+ destinations: string[];
142
+ requiredParams: string[];
143
+ };
144
+ VIEW_ITEM_LIST: {
145
+ name: string;
146
+ requiredParams: string[];
147
+ };
148
+ BEGIN_CHECKOUT: {
149
+ name: string;
150
+ destinations: string[];
151
+ requiredParams: string[];
152
+ };
153
+ AUTH_ACTION: {
154
+ name: string;
155
+ requiredParams: string[];
156
+ };
157
+ ADD_PERSONAL_INFO: {
158
+ name: string;
159
+ destinations: string[];
160
+ requiredParams: string[];
161
+ };
162
+ ADD_SHIPPING_INFO: {
163
+ name: string;
164
+ requiredParams: string[];
165
+ };
166
+ ADD_PAYMENT_INFO: {
167
+ name: string;
168
+ requiredParams: string[];
169
+ };
170
+ ORDER_REVIWED: {
171
+ name: string;
172
+ requiredParams: string[];
173
+ };
174
+ PURCHASE: {
175
+ name: string;
176
+ requiredParams: string[];
177
+ };
178
+ };
179
+ };
180
+
181
+ export { EVENTS, _default as default, trackWebEvent };
@@ -21,6 +21,8 @@ var AzzasTracker = (() => {
21
21
  // src/index.ts
22
22
  var src_exports = {};
23
23
  __export(src_exports, {
24
+ EVENTS: () => EVENTS,
25
+ default: () => src_default,
24
26
  trackWebEvent: () => trackWebEvent
25
27
  });
26
28
 
@@ -95,7 +97,8 @@ var AzzasTracker = (() => {
95
97
  },
96
98
  SELECT_ITEM: {
97
99
  name: "select_item",
98
- requiredParams: ["region"]
100
+ destinations: ["DataLayer"],
101
+ requiredParams: ["brand", "region", "items", "line_items"]
99
102
  },
100
103
  VIEW_ITEM_LIST: {
101
104
  name: "view_item_list",
@@ -143,14 +146,15 @@ var AzzasTracker = (() => {
143
146
  );
144
147
  }
145
148
  function pushToDataLayer(event, ecomm, dest) {
146
- dataTrackingLog({ event, ecommerce: ecomm }, "#0b5fff", dest);
147
- if (ecomm.window) {
148
- ecomm.window.dataLayer = ecomm.window.dataLayer || [];
149
- ecomm.window.dataLayer.push({ event, ecommerce: ecomm });
149
+ const { window: targetWindow, ...ecommercePayload } = ecomm;
150
+ dataTrackingLog({ event, ecommerce: ecommercePayload }, "#0b5fff", dest);
151
+ if (targetWindow) {
152
+ targetWindow.dataLayer = targetWindow.dataLayer || [];
153
+ targetWindow.dataLayer.push({ event, ecommerce: ecommercePayload });
150
154
  return;
151
155
  }
152
156
  window.dataLayer = window.dataLayer || [];
153
- window.dataLayer.push({ event, ecommerce: ecomm });
157
+ window.dataLayer.push({ event, ecommerce: ecommercePayload });
154
158
  }
155
159
  function pushToMeta(event, ecomm, dest) {
156
160
  dataTrackingLog({ eventName: event, data: ecomm }, "#8C1007", dest);
@@ -198,7 +202,7 @@ var AzzasTracker = (() => {
198
202
  }
199
203
  async function getItemSku(item) {
200
204
  var _a, _b;
201
- const product = await getProductDataById(item.productId);
205
+ const product = await getProductDataById(item.productId || item.productID);
202
206
  if (!product.length) return null;
203
207
  return (_b = (_a = product[0].items.find((i) => i.name === item.skuName)) == null ? void 0 : _a.itemId) != null ? _b : null;
204
208
  }
@@ -216,21 +220,36 @@ var AzzasTracker = (() => {
216
220
  const tags = ((_a = item == null ? void 0 : item.additionalInfo) == null ? void 0 : _a.tags) || (item == null ? void 0 : item.tags);
217
221
  return Array.isArray(tags) && tags.length ? tags.join(",") : null;
218
222
  }
219
- var brandMap = { Farm: "farmrio", "Farm Etc": "farmetc" };
223
+ var BRAND_CODES = {
224
+ farm: "farmrio",
225
+ "farm etc": "farmetc",
226
+ "farm rio": "farmrio"
227
+ };
228
+ function getBrandCode(brand) {
229
+ if (!brand) return null;
230
+ const standardized = brand.toLowerCase().trim();
231
+ return BRAND_CODES[standardized] || null;
232
+ }
220
233
  function normalizeBrand(input) {
221
- if (typeof input === "string") {
222
- return brandMap[input] || null;
223
- }
224
- if (Array.isArray(input)) {
225
- const uniqueBrands = new Set(
226
- input.map((i) => {
227
- var _a;
228
- return brandMap[((_a = i.additionalInfo) == null ? void 0 : _a.brandName) || i.brand];
229
- })
230
- );
231
- return uniqueBrands.size ? [...uniqueBrands].join("_") : null;
234
+ var _a;
235
+ let brandStrings = [];
236
+ if (Array.isArray(input) && input.every((item) => typeof item === "string")) {
237
+ brandStrings = input;
238
+ } else if (Array.isArray(input)) {
239
+ brandStrings = input.map((item) => {
240
+ var _a2;
241
+ return ((_a2 = item.additionalInfo) == null ? void 0 : _a2.brandName) || item.brand;
242
+ });
243
+ } else if (typeof input === "object" && input !== null && "brand" in input) {
244
+ brandStrings = [((_a = input.additionalInfo) == null ? void 0 : _a.brandName) || input.brand];
245
+ } else if (typeof input === "string") {
246
+ return getBrandCode(input);
247
+ } else {
248
+ return null;
232
249
  }
233
- return null;
250
+ const brandCodes = brandStrings.map(getBrandCode).filter((code) => code !== null);
251
+ const uniqueSortedCodes = [...new Set(brandCodes)].sort();
252
+ return uniqueSortedCodes.length > 0 ? uniqueSortedCodes.join("_") : null;
234
253
  }
235
254
 
236
255
  // src/params/resolvers/brand/fromOrderForm.ts
@@ -250,7 +269,7 @@ var AzzasTracker = (() => {
250
269
 
251
270
  // src/params/brand.ts
252
271
  function getBrand(context, eventName) {
253
- if (context == null ? void 0 : context.brand) return context.brand;
272
+ if (context == null ? void 0 : context.brand) return normalizeBrand(context.brand);
254
273
  switch (eventName) {
255
274
  case "VIEW_CART":
256
275
  case "ADD_COUPON":
@@ -317,8 +336,31 @@ var AzzasTracker = (() => {
317
336
  ];
318
337
  }
319
338
 
339
+ // src/params/resolvers/items/fromList.ts
340
+ async function itemsFromList(context) {
341
+ const { item } = context;
342
+ return [
343
+ {
344
+ item_id: item.productID,
345
+ // item_category2: getItemCategory2(item),
346
+ // price: parseFloat((context.item.offers.highPrice / 100).toFixed(2)) || 0,
347
+ quantity: 1,
348
+ item_ref: context.item.additionalProperty.find((i) => i.name === "RefId").value,
349
+ item_brand: normalizeBrand(item.brand.name) || null,
350
+ item_sku: await getItemSku(item) || item.productID || null,
351
+ item_name: item.alternateName || null,
352
+ // item_category: getItemCategory(item) || null,
353
+ // item_variant: item?.skuName?.split('-')[0].trim() || null,
354
+ discount: context.item.offers.highPrice - context.item.offers.lowPrice || null,
355
+ item_list_name: (context == null ? void 0 : context.itemListName) || null,
356
+ index: typeof (context == null ? void 0 : context.index) === "number" ? context.index : null
357
+ }
358
+ ];
359
+ }
360
+
320
361
  // src/params/items.ts
321
362
  function getItems(context, eventName) {
363
+ if (context == null ? void 0 : context.items) return context.items;
322
364
  switch (eventName) {
323
365
  case "VIEW_CART":
324
366
  case "BEGIN_CHECKOUT":
@@ -326,6 +368,8 @@ var AzzasTracker = (() => {
326
368
  case "ADD_TO_CART":
327
369
  case "REMOVE_FROM_CART":
328
370
  return itemsFromItem(context);
371
+ case "SELECT_ITEM":
372
+ return itemsFromList(context);
329
373
  default:
330
374
  return null;
331
375
  }
@@ -338,7 +382,7 @@ var AzzasTracker = (() => {
338
382
  return context.region || null;
339
383
  },
340
384
  line_items: (context, eventName) => {
341
- return (context.orderForm.items || []).map((item) => item.productId).join(",");
385
+ return (context == null ? void 0 : context.lineItems) ? context.lineItems : (context.orderForm.items || []).map((item) => item.productId).join(",");
342
386
  },
343
387
  currency: (context, eventName) => {
344
388
  var _a, _b;
@@ -427,6 +471,10 @@ var AzzasTracker = (() => {
427
471
  return console.error(`[DT] Error tracking event ${event}:`, err);
428
472
  }
429
473
  }
474
+ var src_default = {
475
+ trackWebEvent,
476
+ EVENTS
477
+ };
430
478
  return __toCommonJS(src_exports);
431
479
  })();
432
480
  //# sourceMappingURL=mod.global.js.map
@@ -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(\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 };\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 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 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[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}\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: event, ecommerce: ecomm })\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 case 'BEGIN_CHECKOUT':\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 case 'BEGIN_CHECKOUT':\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":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;;;ACAO,MAAM,SAAS;AAAA,IACpB,WAAW;AAAA,MACT,MAAM;AAAA,MACN,cAAc,CAAC,QAAQ,WAAY;AAAA,MACnC,gBAAgB;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IAEA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,cAAc,CAAC,WAAW;AAAA,MAC1B,gBAAgB;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IAEA,kBAAkB;AAAA,MAChB,MAAM;AAAA,MACN,cAAc,CAAC,WAAW;AAAA,MAC1B,gBAAgB;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IAEA,YAAY;AAAA,MACV,MAAM;AAAA,MACN,cAAc,CAAC,WAAW;AAAA,MAC1B,gBAAgB;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IAEA,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,cAAc,CAAC,WAAW;AAAA,MAC1B,gBAAgB,CAAC,SAAS,eAAe,gBAAgB,iBAAiB;AAAA,IAC5E;AAAA,IAEA,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,cAAc,CAAC,WAAW;AAAA,MAC1B,gBAAgB,CAAC,UAAU,kBAAkB,iBAAiB,eAAe;AAAA,IAC/E;AAAA,IAEA,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,gBAAgB,CAAC,QAAQ;AAAA,IAC3B;AAAA,IAEA,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,gBAAgB,CAAC,QAAQ;AAAA,IAC3B;AAAA,IAEA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,gBAAgB,CAAC,QAAQ;AAAA,IAC3B;AAAA,IAEA,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,gBAAgB,CAAC,QAAQ;AAAA,IAC3B;AAAA,IAEA,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,cAAc,CAAC,WAAW;AAAA,MAC1B,gBAAgB,CAAC,SAAS,cAAc,YAAY,SAAS,kBAAkB,YAAY,OAAO;AAAA,IACpG;AAAA,IAEA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,gBAAgB,CAAC,QAAQ;AAAA,IAC3B;AAAA,IAEA,mBAAmB;AAAA,MACjB,MAAM;AAAA,MACN,cAAc,CAAC,WAAW;AAAA,MAC1B,gBAAgB,CAAC,SAAS,cAAc,cAAc,YAAY,SAAS,kBAAkB,UAAU;AAAA,IACzG;AAAA,IAEA,mBAAmB;AAAA,MACjB,MAAM;AAAA,MACN,gBAAgB,CAAC,QAAQ;AAAA,IAC3B;AAAA,IAEA,kBAAkB;AAAA,MAChB,MAAM;AAAA,MACN,gBAAgB,CAAC,QAAQ;AAAA,IAC3B;AAAA,IAEA,eAAe;AAAA,MACb,MAAM;AAAA,MACN,gBAAgB,CAAC,QAAQ;AAAA,IAC3B;AAAA,IAEA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,gBAAgB,CAAC,QAAQ;AAAA,IAC3B;AAAA,EACF;;;ACtHA,WAAS,gBAAgB,MAAoB,OAAe,aAAqB;AAC/E,YAAQ;AAAA,MACN,WAAW,WAAW;AAAA,MACtB,eAAe,KAAK;AAAA,MACpB;AAAA,MACA,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,WAAS,gBAAgB,OAAe,OAAqB,MAAc;AACzE,oBAAgB,EAAE,OAAc,WAAW,MAAM,GAAG,WAAW,IAAI;AAEnE,QAAI,MAAM,QAAQ;AAChB,YAAM,OAAO,YAAY,MAAM,OAAO,aAAa,CAAC;AACpD,YAAM,OAAO,UAAU,KAAK,EAAE,OAAc,WAAW,MAAM,CAAC;AAC9D;AAAA,IACF;AAEA,WAAO,YAAY,OAAO,aAAa,CAAC;AACxC,WAAO,UAAU,KAAK,EAAE,OAAc,WAAW,MAAM,CAAC;AAAA,EAC1D;AAEA,WAAS,WAAW,OAAe,OAAqB,MAAc;AACpE,oBAAgB,EAAE,WAAW,OAAO,MAAM,MAAM,GAAG,WAAW,IAAI;AAAA,EACpE;AAEA,WAAS,WAAW,OAAe,OAAqB,MAAc;AACpE,oBAAgB,EAAE,IAAI,OAAO,aAAa,MAAM,GAAG,WAAW,IAAI;AAAA,EACpE;AAEA,MAAM,WAAW;AAAA,IACf,MAAM;AAAA,IACN,WAAW;AAAA,IACX,MAAM;AAAA,EACR;AAIA,iBAAsB,mBAAmB,WAAsB,MAAoB;AACjF,UAAM,cAAc,OAAO,SAAS;AAEpC,QAAI,CAAC,YAAa;AAElB,UAAM,QAAQ;AAAA,MACZ,YAAY,aAAa,IAAI,OAAO,SAAiB;AACnD,YAAI;AAGF,gBAAM,SAAS,IAAkB,EAAE,UAAU,YAAY,GAAG,MAAM,IAAI;AAAA,QACxE,SAAS,KAAK;AACZ,kBAAQ,MAAM,uBAAuB,SAAS,OAAO,IAAI,KAAK,GAAG;AAAA,QACnE;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;;;AC1DA,iBAAsB,mBAAmB,IAAS;AAChD,QAAI;AACF,YAAM,WAAW,MAAM;AAAA,QACrB,wDAAwD,EAAE;AAAA,MAC5D;AAEA,aAAO,MAAM,SAAS,KAAK;AAAA,IAC7B,SAAS,GAAG;AACV,cAAQ,IAAI,wCAAwC,CAAC;AAAA,IACvD;AAAA,EACF;AAEO,WAAS,oBAAoB,WAAgB,MAAW;AAZ/D;AAaE,UAAM,QAAO,kDAAW,iBAAX,mBAAyB,kBAAzB,mBAAwC;AAAA,MACnD,CAAC,OAAY,GAAG,WAAW,KAAK;AAAA;AAGlC,UAAM,eAAc,kCAAM,SAAN,mBAAY,KAAK,CAAC,QAAa,IAAI,OAAO,KAAK;AACnE,aAAO,gDAAa,oBAAb,mBAA8B,gBACjC,qBAAqB,YAAY,gBAAgB,YAAY,MAC7D,2CAAa,QACX,mBAAmB,YAAY,IAAI,KACnC;AAAA,EACR;AAEA,iBAAsB,WAAW,MAAW;AAzB5C;AA0BE,UAAM,UAAU,MAAM,mBAAmB,KAAK,SAAS;AAEvD,QAAI,CAAC,QAAQ,OAAQ,QAAO;AAE5B,YAAO,mBAAQ,CAAC,EAAE,MAAM,KAAK,CAAC,MAAW,EAAE,SAAS,KAAK,OAAO,MAAzD,mBAA4D,WAA5D,YAAsE;AAAA,EAC/E;AAEO,WAAS,YAAY,MAAW;AACrC,WACE,WAAW,KAAK,IAAI,KAAK,YAAY,KAAK,cAAc,CAAC,EAAE,QAAQ,CAAC,CAAC,KAAK;AAAA,EAE9E;AAEO,WAAS,gBAAgB,MAAW;AACzC,WAAO;AAAA,EACT;AAEO,WAAS,iBAAiB,MAAW;AAC1C,WAAO;AAAA,EACT;AAEO,WAAS,iBAAiB,MAAW;AA/C5C;AAgDE,UAAM,SAAO,kCAAM,mBAAN,mBAAsB,UAAQ,6BAAM;AACjD,WAAO,MAAM,QAAQ,IAAI,KAAK,KAAK,SAAS,KAAK,KAAK,GAAG,IAAI;AAAA,EAC/D;AAEA,MAAM,WAAW,EAAE,MAAM,WAAW,YAAY,UAAU;AACnD,WAAS,eAAe,OAAY;AACzC,QAAI,OAAO,UAAU,UAAU;AAC7B,aAAO,SAAS,KAA8B,KAAK;AAAA,IACrD;AAEA,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,YAAM,eAAe,IAAI;AAAA,QACvB,MAAM,IAAI,CAAC,MAAG;AA5DpB;AA4DuB,4BAAS,OAAE,mBAAF,mBAAkB,cAAsC,EAAE,KAAK;AAAA,SAAC;AAAA,MAC5F;AACA,aAAO,aAAa,OAAO,CAAC,GAAG,YAAY,EAAE,KAAK,GAAG,IAAI;AAAA,IAC3D;AAEA,WAAO;AAAA,EACT;;;AChEO,WAAS,mBAAmB,SAA8B;AAFjE;AAGE,QAAI,CAAC,QAAQ,aAAa,GAAC,aAAQ,UAAU,UAAlB,mBAAyB,QAAQ,QAAO;AAEnE,UAAM,QAAQ,QAAQ,UAAU;AAEhC,WAAO,eAAe,KAAK;AAAA,EAC7B;;;ACNO,WAAS,cAAc,SAA8B;AAF5D;AAGE,UAAM,EAAE,KAAK,IAAI;AAEjB,WAAO,iBAAe,UAAK,mBAAL,mBAAqB,cAAa,KAAK,KAAK;AAAA,EACpE;;;ACFO,WAAS,SAAS,SAAuB,WAAsB;AACpE,QAAI,mCAAS,MAAO,QAAO,QAAQ;AAEnC,YAAQ,WAAW;AAAA,MACjB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAO,mBAAmB,OAAO;AAAA,MACnC,KAAK;AAAA,MACL,KAAK;AACH,eAAO,cAAc,OAAO;AAAA,MAC9B;AACE,eAAO;AAAA,IACX;AAAA,EACF;;;ACPA,iBAAsB,mBAAmB,SAAuB;AAZhE;AAaE,UAAM,UAAQ,aAAQ,cAAR,mBAAmB,UAAS,CAAC;AAE3C,QAAI,CAAC,MAAM,OAAQ,QAAO,CAAC;AAE3B,WAAO,MAAM,QAAQ;AAAA,MACnB,MAAM,IAAI,OAAO,SAAoB;AAlBzC,YAAAA,KAAA;AAkB6C;AAAA,UACvC,SAAS,KAAK;AAAA,UACd,gBAAgB,iBAAiB,IAAI;AAAA,UACrC,gBAAgB,iBAAiB,IAAI;AAAA,UACrC,oBAAoB,oBAAoB,QAAQ,WAAW,IAAI;AAAA,UAC/D,OAAO,YAAY,KAAK,QAAQ,KAAK,QAAQ,CAAC,CAAC,KAAK;AAAA,UACpD,UAAU,KAAK,YAAY;AAAA,UAC3B,UAAU,KAAK,SAAS;AAAA,UACxB,YAAY,gBAAeA,MAAA,KAAK,mBAAL,gBAAAA,IAAqB,SAAS,KAAK;AAAA,UAC9D,UAAW,MAAM,WAAW,IAAI,KAAM,KAAK,MAAM;AAAA,UACjD,WAAW,KAAK,QAAQ,KAAK,MAAM;AAAA,UACnC,eAAe,gBAAgB,IAAI,KAAK;AAAA,UACxC,cAAc,KAAK,QAAQ,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK;AAAA,UAC9C,iBAAe,UAAK,QAAQ,MAAM,GAAG,EAAE,CAAC,MAAzB,mBAA4B,WAAU;AAAA,UACrD,UAAU,YAAY,IAAI;AAAA,QAC5B;AAAA,OAAE;AAAA,IACJ;AAAA,EACF;;;AC1BA,iBAAsB,cAAc,SAA8B;AATlE;AAUE,UAAM,EAAE,MAAM,UAAU,IAAI;AAC5B,WAAO;AAAA,MACL;AAAA,QACE,SAAS,KAAK;AAAA,QACd,gBAAgB,iBAAiB,IAAI;AAAA,QACrC,gBAAgB,iBAAiB,IAAI;AAAA,QACrC,oBAAoB,oBAAoB,WAAW,IAAI;AAAA,QACvD,OAAO,YAAY,KAAK,QAAQ,KAAK,QAAQ,CAAC,CAAC,KAAK;AAAA,QACpD,UAAU;AAAA,QACV,UAAU,KAAK,SAAS;AAAA,QACxB,cAAY,UAAK,mBAAL,mBAAqB,cAAa;AAAA,QAC9C,UAAW,MAAM,WAAW,IAAI,KAAM,KAAK,MAAM;AAAA,QACjD,WAAW,KAAK,QAAQ,KAAK,MAAM;AAAA,QACnC,eAAe,gBAAgB,IAAI,KAAK;AAAA,QACxC,cAAc,KAAK,QAAQ,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK;AAAA,QAC9C,iBAAe,UAAK,QAAQ,MAAM,GAAG,EAAE,CAAC,MAAzB,mBAA4B,WAAU;AAAA,QACrD,UAAU,YAAY,IAAI;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;;;AC1BO,WAAS,SAAS,SAA8B,WAAmB;AACxE,YAAQ,WAAW;AAAA,MACjB,KAAK;AAAA,MACL,KAAK;AACH,eAAO,mBAAmB,OAAO;AAAA,MACnC,KAAK;AAAA,MACL,KAAK;AACH,eAAO,cAAc,OAAO;AAAA,MAC9B;AACE,eAAO;AAAA,IACX;AAAA,EACF;;;ACVO,MAAM,eAAe;AAAA,IAC1B,OAAO;AAAA,IAEP,QAAQ,CAAC,SAAuB,cAAyB;AACvD,aAAO,QAAQ,UAAU;AAAA,IAC3B;AAAA,IAEA,YAAY,CAAC,SAAuB,cAAyB;AAC3D,cAAQ,QAAQ,UAAU,SAAS,CAAC,GACjC,IAAI,CAAC,SAAuB,KAAK,SAAS,EAC1C,KAAK,GAAG;AAAA,IACb;AAAA,IAEA,UAAU,CAAC,SAAuB,cAAyB;AAjB7D;AAkBI,eAAO,mBAAQ,cAAR,mBAAmB,yBAAnB,mBAAyC,iBAAgB;AAAA,IAClE;AAAA,IAEA,OAAO,CAAC,SAAuB,cAAyB;AArB1D;AAsBI,aAAO,QAAQ,OAAO,QAAQ,KAAK,UAAQ,aAAQ,cAAR,mBAAmB,UAAS,OACnE,QAAQ,UAAU,QAAQ,MAC1B;AAAA,IACN;AAAA,IAEA,gBAAgB,CAAC,SAAuB,cAAyB;AA3BnE;AA4BI,eACE,mBAAQ,cAAR,mBAAmB,eAAnB,mBACI,OAAO,CAAC,MAAoB,EAAE,OAAO,aACtC,OAAO,CAAC,KAAmB,MAAoB,MAAM,EAAE,OAAO,MAAK,OAAO;AAAA,IAEjF;AAAA,IAEA,UAAU,CAAC,SAAuB,cAAyB;AAnC7D;AAoCI,eACE,mBAAQ,cAAR,mBAAmB,eAAnB,mBACI,OAAO,CAAC,MAAoB,EAAE,OAAO,SACtC,OAAO,CAAC,KAAmB,MAAoB,MAAM,EAAE,OAAO,MAAK,OAAO;AAAA,IAEjF;AAAA,IAEA,gBAAgB,CAAC,SAAuB,cAAyB;AA3CnE;AA4CI,YAAM,aAAW,aAAQ,cAAR,mBAAmB,aAAY,CAAC;AAEjD,UAAI,SAAS,WAAW,EAAG,QAAO;AAElC,YAAM,iBAAiB,SAAS;AAAA,QAAO,CAAC,QACtC,IAAI,KAAK,YAAY,EAAE,SAAS,OAAO;AAAA,MACzC;AAEA,UAAI,eAAe,WAAW,EAAG,QAAO;AAExC,aAAO,eAAe,IAAI,CAAC,QAAsB,IAAI,IAAI,EAAE,KAAK,KAAK;AAAA,IACvE;AAAA,IAEA,iBAAiB,CAAC,SAAuB,cAAyB;AAChE,aAAO,QAAQ,wBAAwB;AAAA,IACzC;AAAA,IAEA,QAAQ,CAAC,SAAuB,cAAyB;AACvD,aAAO,QAAQ,iBAAiB;AAAA,IAClC;AAAA,IAEA,YAAY,CAAC,SAAuB,cAAyB;AAC3D,aAAO,CAAC,CAAC,QAAQ;AAAA,IACnB;AAAA,IAEA,aAAa,CAAC,SAAuB,cAAyB;AAC5D,aAAO,QAAQ,cAAc;AAAA,IAC/B;AAAA,IAEA,cAAc,CAAC,SAAuB,cAAyB;AAC7D,aAAO,CAAC,CAAC,QAAQ;AAAA,IACnB;AAAA,IAEA,iBAAiB,CAAC,SAAuB,cAAyB;AAChE,aAAO,QAAQ,kBAAkB;AAAA,IACnC;AAAA,IAEA,gBAAgB,CAAC,SAAuB,cAAyB;AAC/D,aAAO,QAAQ,iBAAiB;AAAA,IAClC;AAAA,IAEA,eAAe,CAAC,SAAuB,cAAyB;AAC9D,aAAO,QAAQ,gBAAgB;AAAA,IACjC;AAAA,IAEA,eAAe,CAAC,SAAuB,cAAyB;AAC9D,aAAO,QAAQ,gBAAgB;AAAA,IACjC;AAAA,IAEA,OAAO;AAAA,EACT;;;ACxFA,iBAAsB,cAAc,UAAwB,CAAC,GAAG,WAAsB;AACpF,UAAM,cAAc,OAAO,SAAS;AAEpC,QAAI,CAAC,YAAa;AAElB,UAAM,SAAS,OAAO;AAAA,MACpB,MAAM,QAAQ;AAAA,QACZ,YAAY,eAAe,IAAI,OAAO,UAAU;AAC9C,gBAAM,SAAS,aAAa,KAAkB;AAE9C,cAAI,OAAO,WAAW,YAAY;AAChC,oBAAQ,MAAM,uCAAuC,KAAK,EAAE;AAC5D,mBAAO,CAAC,OAAO,IAAI;AAAA,UACrB;AAEA,iBAAO,CAAC,OAAO,MAAM,OAAO,SAAS,SAAS,CAAC;AAAA,QACjD,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,EACT;;;AXvBA,iBAAe,cAAc,OAAkB,UAAwB,CAAC,GAAG;AACzE,QAAI;AAEF,YAAM,aAAa,MAAM,cAAc,SAAS,KAAK;AAGrD,aAAO,MAAM;AAAA,QACX;AAAA,QACA,OAAO,OAAO,CAAC,GAAG,YAAY,EAAE,QAAQ,QAAQ,OAAO,CAAC;AAAA,MAC1D;AAAA,IACF,SAAS,KAAK;AACZ,aAAO,QAAQ,MAAM,6BAA6B,KAAK,KAAK,GAAG;AAAA,IACjE;AAAA,EACF;","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/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 './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 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 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 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\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 */\nfunction 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}\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 */\nfunction pushToDataLayer(event: string, ecomm: EventContext, dest: string) {\n // spread to separate window prop and avoid to push as payload to dayalayer\n const { window: targetWindow, ...ecommercePayload } = ecomm;\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}\n\n/**\n * Log a Meta tracking event payload for delivery to the Meta destination.\n *\n * @param event - The event name to send to Meta\n * @param ecomm - The event context / ecommerce payload\n * @param dest - Destination identifier (e.g., \"Meta\")\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\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 (\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 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 'BEGIN_CHECKOUT':\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 ];\n}\n","import {\n getItemSku,\n // getDiscount,\n // getItemCategory,\n // getItemCategory2,\n // getItemCategory4,\n normalizeBrand,\n} from '../../utils';\n\nexport async function itemsFromList(context: Record<string, any>) {\n const { item } = context;\n\n return [\n {\n item_id: item.productID,\n // item_category2: getItemCategory2(item),\n // price: parseFloat((context.item.offers.highPrice / 100).toFixed(2)) || 0,\n quantity: 1,\n item_ref: context.item.additionalProperty.find((i: { name: string }) => i.name === \"RefId\").value,\n item_brand: normalizeBrand(item.brand.name) || null,\n item_sku: (await getItemSku(item)) || item.productID || null,\n item_name: item.alternateName || null,\n // item_category: getItemCategory(item) || null,\n // item_variant: item?.skuName?.split('-')[0].trim() || null,\n discount: context.item.offers.highPrice - context.item.offers.lowPrice || null,\n item_list_name: context?.itemListName || null,\n index: typeof context?.index === 'number' ? context.index : 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 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';\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?.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 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\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"]}
package/dist/mod.js CHANGED
@@ -69,7 +69,8 @@ var EVENTS = {
69
69
  },
70
70
  SELECT_ITEM: {
71
71
  name: "select_item",
72
- requiredParams: ["region"]
72
+ destinations: ["DataLayer"],
73
+ requiredParams: ["brand", "region", "items", "line_items"]
73
74
  },
74
75
  VIEW_ITEM_LIST: {
75
76
  name: "view_item_list",
@@ -117,14 +118,15 @@ function dataTrackingLog(data, color, destination) {
117
118
  );
118
119
  }
119
120
  function pushToDataLayer(event, ecomm, dest) {
120
- dataTrackingLog({ event, ecommerce: ecomm }, "#0b5fff", dest);
121
- if (ecomm.window) {
122
- ecomm.window.dataLayer = ecomm.window.dataLayer || [];
123
- ecomm.window.dataLayer.push({ event, ecommerce: ecomm });
121
+ const { window: targetWindow, ...ecommercePayload } = ecomm;
122
+ dataTrackingLog({ event, ecommerce: ecommercePayload }, "#0b5fff", dest);
123
+ if (targetWindow) {
124
+ targetWindow.dataLayer = targetWindow.dataLayer || [];
125
+ targetWindow.dataLayer.push({ event, ecommerce: ecommercePayload });
124
126
  return;
125
127
  }
126
128
  window.dataLayer = window.dataLayer || [];
127
- window.dataLayer.push({ event, ecommerce: ecomm });
129
+ window.dataLayer.push({ event, ecommerce: ecommercePayload });
128
130
  }
129
131
  function pushToMeta(event, ecomm, dest) {
130
132
  dataTrackingLog({ eventName: event, data: ecomm }, "#8C1007", dest);
@@ -172,7 +174,7 @@ function getItemShippingTier(orderForm, item) {
172
174
  }
173
175
  async function getItemSku(item) {
174
176
  var _a, _b;
175
- const product = await getProductDataById(item.productId);
177
+ const product = await getProductDataById(item.productId || item.productID);
176
178
  if (!product.length) return null;
177
179
  return (_b = (_a = product[0].items.find((i) => i.name === item.skuName)) == null ? void 0 : _a.itemId) != null ? _b : null;
178
180
  }
@@ -190,21 +192,36 @@ function getItemCategory4(item) {
190
192
  const tags = ((_a = item == null ? void 0 : item.additionalInfo) == null ? void 0 : _a.tags) || (item == null ? void 0 : item.tags);
191
193
  return Array.isArray(tags) && tags.length ? tags.join(",") : null;
192
194
  }
193
- var brandMap = { Farm: "farmrio", "Farm Etc": "farmetc" };
195
+ var BRAND_CODES = {
196
+ farm: "farmrio",
197
+ "farm etc": "farmetc",
198
+ "farm rio": "farmrio"
199
+ };
200
+ function getBrandCode(brand) {
201
+ if (!brand) return null;
202
+ const standardized = brand.toLowerCase().trim();
203
+ return BRAND_CODES[standardized] || null;
204
+ }
194
205
  function normalizeBrand(input) {
195
- if (typeof input === "string") {
196
- return brandMap[input] || null;
197
- }
198
- if (Array.isArray(input)) {
199
- const uniqueBrands = new Set(
200
- input.map((i) => {
201
- var _a;
202
- return brandMap[((_a = i.additionalInfo) == null ? void 0 : _a.brandName) || i.brand];
203
- })
204
- );
205
- return uniqueBrands.size ? [...uniqueBrands].join("_") : null;
206
+ var _a;
207
+ let brandStrings = [];
208
+ if (Array.isArray(input) && input.every((item) => typeof item === "string")) {
209
+ brandStrings = input;
210
+ } else if (Array.isArray(input)) {
211
+ brandStrings = input.map((item) => {
212
+ var _a2;
213
+ return ((_a2 = item.additionalInfo) == null ? void 0 : _a2.brandName) || item.brand;
214
+ });
215
+ } else if (typeof input === "object" && input !== null && "brand" in input) {
216
+ brandStrings = [((_a = input.additionalInfo) == null ? void 0 : _a.brandName) || input.brand];
217
+ } else if (typeof input === "string") {
218
+ return getBrandCode(input);
219
+ } else {
220
+ return null;
206
221
  }
207
- return null;
222
+ const brandCodes = brandStrings.map(getBrandCode).filter((code) => code !== null);
223
+ const uniqueSortedCodes = [...new Set(brandCodes)].sort();
224
+ return uniqueSortedCodes.length > 0 ? uniqueSortedCodes.join("_") : null;
208
225
  }
209
226
 
210
227
  // src/params/resolvers/brand/fromOrderForm.ts
@@ -224,7 +241,7 @@ function brandFromItem(context) {
224
241
 
225
242
  // src/params/brand.ts
226
243
  function getBrand(context, eventName) {
227
- if (context == null ? void 0 : context.brand) return context.brand;
244
+ if (context == null ? void 0 : context.brand) return normalizeBrand(context.brand);
228
245
  switch (eventName) {
229
246
  case "VIEW_CART":
230
247
  case "ADD_COUPON":
@@ -291,8 +308,31 @@ async function itemsFromItem(context) {
291
308
  ];
292
309
  }
293
310
 
311
+ // src/params/resolvers/items/fromList.ts
312
+ async function itemsFromList(context) {
313
+ const { item } = context;
314
+ return [
315
+ {
316
+ item_id: item.productID,
317
+ // item_category2: getItemCategory2(item),
318
+ // price: parseFloat((context.item.offers.highPrice / 100).toFixed(2)) || 0,
319
+ quantity: 1,
320
+ item_ref: context.item.additionalProperty.find((i) => i.name === "RefId").value,
321
+ item_brand: normalizeBrand(item.brand.name) || null,
322
+ item_sku: await getItemSku(item) || item.productID || null,
323
+ item_name: item.alternateName || null,
324
+ // item_category: getItemCategory(item) || null,
325
+ // item_variant: item?.skuName?.split('-')[0].trim() || null,
326
+ discount: context.item.offers.highPrice - context.item.offers.lowPrice || null,
327
+ item_list_name: (context == null ? void 0 : context.itemListName) || null,
328
+ index: typeof (context == null ? void 0 : context.index) === "number" ? context.index : null
329
+ }
330
+ ];
331
+ }
332
+
294
333
  // src/params/items.ts
295
334
  function getItems(context, eventName) {
335
+ if (context == null ? void 0 : context.items) return context.items;
296
336
  switch (eventName) {
297
337
  case "VIEW_CART":
298
338
  case "BEGIN_CHECKOUT":
@@ -300,6 +340,8 @@ function getItems(context, eventName) {
300
340
  case "ADD_TO_CART":
301
341
  case "REMOVE_FROM_CART":
302
342
  return itemsFromItem(context);
343
+ case "SELECT_ITEM":
344
+ return itemsFromList(context);
303
345
  default:
304
346
  return null;
305
347
  }
@@ -312,7 +354,7 @@ var paramGetters = {
312
354
  return context.region || null;
313
355
  },
314
356
  line_items: (context, eventName) => {
315
- return (context.orderForm.items || []).map((item) => item.productId).join(",");
357
+ return (context == null ? void 0 : context.lineItems) ? context.lineItems : (context.orderForm.items || []).map((item) => item.productId).join(",");
316
358
  },
317
359
  currency: (context, eventName) => {
318
360
  var _a, _b;
@@ -401,7 +443,13 @@ async function trackWebEvent(event, context = {}) {
401
443
  return console.error(`[DT] Error tracking event ${event}:`, err);
402
444
  }
403
445
  }
446
+ var src_default = {
447
+ trackWebEvent,
448
+ EVENTS
449
+ };
404
450
  export {
451
+ EVENTS,
452
+ src_default as default,
405
453
  trackWebEvent
406
454
  };
407
455
  //# sourceMappingURL=mod.js.map
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 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 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 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[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}\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: event, ecommerce: ecomm })\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 case 'BEGIN_CHECKOUT':\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 case 'BEGIN_CHECKOUT':\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(\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 };\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/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 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 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 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\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 */\nfunction 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}\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 */\nfunction pushToDataLayer(event: string, ecomm: EventContext, dest: string) {\n // spread to separate window prop and avoid to push as payload to dayalayer\n const { window: targetWindow, ...ecommercePayload } = ecomm;\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}\n\n/**\n * Log a Meta tracking event payload for delivery to the Meta destination.\n *\n * @param event - The event name to send to Meta\n * @param ecomm - The event context / ecommerce payload\n * @param dest - Destination identifier (e.g., \"Meta\")\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\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 (\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 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 'BEGIN_CHECKOUT':\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 ];\n}\n","import {\n getItemSku,\n // getDiscount,\n // getItemCategory,\n // getItemCategory2,\n // getItemCategory4,\n normalizeBrand,\n} from '../../utils';\n\nexport async function itemsFromList(context: Record<string, any>) {\n const { item } = context;\n\n return [\n {\n item_id: item.productID,\n // item_category2: getItemCategory2(item),\n // price: parseFloat((context.item.offers.highPrice / 100).toFixed(2)) || 0,\n quantity: 1,\n item_ref: context.item.additionalProperty.find((i: { name: string }) => i.name === \"RefId\").value,\n item_brand: normalizeBrand(item.brand.name) || null,\n item_sku: (await getItemSku(item)) || item.productID || null,\n item_name: item.alternateName || null,\n // item_category: getItemCategory(item) || null,\n // item_variant: item?.skuName?.split('-')[0].trim() || null,\n discount: context.item.offers.highPrice - context.item.offers.lowPrice || null,\n item_list_name: context?.itemListName || null,\n index: typeof context?.index === 'number' ? context.index : 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 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';\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?.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 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\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 './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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@azzas/azzas-tracker-web",
3
- "version": "1.0.9",
3
+ "version": "1.0.11",
4
4
  "type": "module",
5
5
  "main": "./dist/mod.cjs",
6
6
  "module": "./dist/mod.js",
@@ -20,7 +20,10 @@
20
20
  "build": "tsup",
21
21
  "prepublishOnly": "npm run build",
22
22
  "release:homolog": "npm run build && npm version prepatch --preid=beta && npm publish --tag beta --access public",
23
- "release:prod": "npm run build && npm version patch && npm publish --access public"
23
+ "release:prod": "npm run build && npm version patch && npm publish --access public",
24
+ "pack:copy": "VERSION=$(npm pkg get version | tr -d '\"') && npm pack && tar -xzf azzas-azzas-tracker-web-$VERSION.tgz",
25
+ "start:deno": "deno run --allow-net --allow-read https://deno.land/std@0.207.0/http/file_server.ts ./package",
26
+ "dev:deno": "npm run build && npm run pack:copy && npm run start:deno"
24
27
  },
25
28
  "publishConfig": {
26
29
  "access": "public"