@azzas/azzas-tracker-web 1.0.19 → 1.0.21

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.
@@ -123,6 +123,11 @@ var AzzasTracker = (() => {
123
123
  destinations: ["DataLayer"],
124
124
  requiredParams: ["brand", "line_items", "currency", "value", "total_discount", "subtotal", "items"]
125
125
  },
126
+ CUSTOM_BEGIN_CHECKOUT: {
127
+ name: "custom_begin_checkout",
128
+ destinations: ["DataLayer"],
129
+ requiredParams: ["brand", "line_items", "currency", "value", "total_discount", "subtotal", "items"]
130
+ },
126
131
  AUTH_ACTION: {
127
132
  name: "auth_action",
128
133
  requiredParams: ["region"]
@@ -186,6 +191,25 @@ var AzzasTracker = (() => {
186
191
  "coupon",
187
192
  "items"
188
193
  ]
194
+ },
195
+ CUSTOM_PURCHASE: {
196
+ name: "custom_purchase",
197
+ destinations: ["DataLayer"],
198
+ requiredParams: [
199
+ "brand",
200
+ "shipping_tier",
201
+ "line_items",
202
+ "currency",
203
+ "value",
204
+ "shipping",
205
+ "transaction_id",
206
+ "total_discount",
207
+ "payment_type",
208
+ "seller_cod_name",
209
+ "subtotal",
210
+ "coupon",
211
+ "items"
212
+ ]
189
213
  }
190
214
  };
191
215
 
@@ -198,6 +222,24 @@ var AzzasTracker = (() => {
198
222
  data || ""
199
223
  );
200
224
  }
225
+ var paymentTypeMap = [
226
+ ["vale", "vale cr\xE9dito"],
227
+ ["pagaleve", "pix"],
228
+ ["pix parcel", "pix parcelado"],
229
+ ["pix", "pix"],
230
+ ["apple", "apple pay"],
231
+ ["google", "google pay"],
232
+ ["boleto", "boleto"],
233
+ ["paypal", "paypal"],
234
+ ["cred", "cart\xE3o"],
235
+ ["visa", "cart\xE3o"],
236
+ ["master", "cart\xE3o"],
237
+ ["amex", "cart\xE3o"],
238
+ ["elo", "cart\xE3o"],
239
+ ["hiper", "cart\xE3o"],
240
+ ["diner", "cart\xE3o"],
241
+ ["deb", "cart\xE3o"]
242
+ ];
201
243
 
202
244
  // src/adapters/datalayer.ts
203
245
  function pushToDataLayer(event, ecomm, dest) {
@@ -342,7 +384,7 @@ var AzzasTracker = (() => {
342
384
 
343
385
  // src/params/brand.ts
344
386
  function getBrand(context, eventName) {
345
- if (context == null ? void 0 : context.brand) return normalizeBrand(context.brand);
387
+ if (context == null ? void 0 : context.brand) return normalizeBrand(context.brand) || context.brand || null;
346
388
  switch (eventName) {
347
389
  case "CUSTOM_VIEW_CART":
348
390
  case "ADD_COUPON":
@@ -350,6 +392,7 @@ var AzzasTracker = (() => {
350
392
  case "CUSTOM_ADD_SHIPPING_INFO":
351
393
  case "CUSTOM_ADD_PAYMENT_INFO":
352
394
  case "BEGIN_CHECKOUT":
395
+ case "CUSTOM_BEGIN_CHECKOUT":
353
396
  case "SEARCH_ZIPCODE":
354
397
  case "ORDER_REVIEWED":
355
398
  case "PURCHASE":
@@ -369,7 +412,7 @@ var AzzasTracker = (() => {
369
412
  if (!items.length) return [];
370
413
  return await Promise.all(
371
414
  items.map(async (item) => {
372
- var _a2, _b;
415
+ var _a2, _b, _c;
373
416
  return {
374
417
  item_id: item.productId,
375
418
  item_category2: getItemCategory2(item),
@@ -378,12 +421,12 @@ var AzzasTracker = (() => {
378
421
  price: parseFloat((item.price / 100).toFixed(2)) || 0,
379
422
  quantity: item.quantity || 1,
380
423
  item_ref: item.refId || null,
381
- item_brand: normalizeBrand((_a2 = item.additionalInfo) == null ? void 0 : _a2.brandName) || null,
424
+ item_brand: normalizeBrand((_a2 = item.additionalInfo) == null ? void 0 : _a2.brandName) || ((_b = item.additionalInfo) == null ? void 0 : _b.brandName) || null,
382
425
  item_sku: await getItemSku(item) || item.id || null,
383
426
  item_name: item.name || item.id || null,
384
427
  item_category: getItemCategory(item) || null,
385
- item_variant: item.skuName.split("-")[0].trim(),
386
- item_variant2: ((_b = item.skuName.split("-").pop()) == null ? void 0 : _b.trim()) || "",
428
+ item_variant: item.skuName.split(/[-/]/)[0].trim(),
429
+ item_variant2: ((_c = item.skuName.split(/[-/]/).pop()) == null ? void 0 : _c.trim()) || "",
387
430
  discount: getDiscount(item)
388
431
  };
389
432
  })
@@ -407,8 +450,8 @@ var AzzasTracker = (() => {
407
450
  item_sku: await getItemSku(item) || item.id || null,
408
451
  item_name: item.name || item.id || null,
409
452
  item_category: getItemCategory(item) || null,
410
- item_variant: item.skuName.split("-")[0].trim(),
411
- item_variant2: ((_b = item.skuName.split("-").pop()) == null ? void 0 : _b.trim()) || "",
453
+ item_variant: item.skuName.split(/[-/]/)[0].trim(),
454
+ item_variant2: ((_b = item.skuName.split(/[-/]/).pop()) == null ? void 0 : _b.trim()) || "",
412
455
  discount: getDiscount(item),
413
456
  item_list_name: null,
414
457
  index: 0
@@ -464,6 +507,7 @@ var AzzasTracker = (() => {
464
507
  switch (eventName) {
465
508
  case "CUSTOM_VIEW_CART":
466
509
  case "BEGIN_CHECKOUT":
510
+ case "CUSTOM_BEGIN_CHECKOUT":
467
511
  case "CUSTOM_ADD_SHIPPING_INFO":
468
512
  case "CUSTOM_ADD_PAYMENT_INFO":
469
513
  case "PURCHASE":
@@ -492,22 +536,6 @@ var AzzasTracker = (() => {
492
536
  if (!id) return null;
493
537
  const system = systems.find((s) => String(s.id) === id);
494
538
  const name = ((_c = system == null ? void 0 : system.name) == null ? void 0 : _c.toLowerCase()) || "";
495
- const paymentTypeMap = [
496
- ["pix parcel", "pix parcelado"],
497
- ["pix", "pix"],
498
- ["apple", "apple pay"],
499
- ["google", "google pay"],
500
- ["boleto", "boleto"],
501
- ["paypal", "paypal"],
502
- ["cred", "cart\xE3o"],
503
- ["visa", "cart\xE3o"],
504
- ["master", "cart\xE3o"],
505
- ["amex", "cart\xE3o"],
506
- ["elo", "cart\xE3o"],
507
- ["hiper", "cart\xE3o"],
508
- ["diner", "cart\xE3o"],
509
- ["deb", "cart\xE3o"]
510
- ];
511
539
  const match = paymentTypeMap.find(([key]) => name.includes(key));
512
540
  return match ? match[1] : null;
513
541
  }
@@ -521,22 +549,6 @@ var AzzasTracker = (() => {
521
549
  const payments = ((_b = transactions[0]) == null ? void 0 : _b.payments) || [];
522
550
  if (!payments.length) return null;
523
551
  const name = ((_d = (_c = payments[0]) == null ? void 0 : _c.paymentSystemName) == null ? void 0 : _d.toLowerCase()) || "";
524
- const paymentTypeMap = [
525
- ["pix parcel", "pix parcelado"],
526
- ["pix", "pix"],
527
- ["apple", "apple pay"],
528
- ["google", "google pay"],
529
- ["boleto", "boleto"],
530
- ["paypal", "paypal"],
531
- ["cred", "cart\xE3o"],
532
- ["visa", "cart\xE3o"],
533
- ["master", "cart\xE3o"],
534
- ["amex", "cart\xE3o"],
535
- ["elo", "cart\xE3o"],
536
- ["hiper", "cart\xE3o"],
537
- ["diner", "cart\xE3o"],
538
- ["deb", "cart\xE3o"]
539
- ];
540
552
  const match = paymentTypeMap.find(([key]) => name.includes(key));
541
553
  return match ? match[1] : null;
542
554
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/core/constants.ts","../src/core/utils.ts","../src/adapters/datalayer.ts","../src/adapters/dito.ts","../src/adapters/index.ts","../src/params/utils/index.ts","../src/params/resolvers/brand/fromOrderForm.ts","../src/params/resolvers/brand/fromItem.ts","../src/params/brand.ts","../src/params/resolvers/items/fromOrderForm.ts","../src/params/resolvers/items/fromItem.ts","../src/params/resolvers/items/fromList.ts","../src/params/resolvers/items/fromPdp.ts","../src/params/items.ts","../src/params/resolvers/paymentType/fromOrderForm.ts","../src/params/resolvers/paymentType/fromOrderGroup.ts","../src/params/paymentType.ts","../src/params/index.ts","../src/formatter/index.ts"],"sourcesContent":["import { dispatchTrackEvent } from './adapters';\nimport { getParameters } from './formatter';\nimport { EVENTS } from './core/constants';\nimport type { EventContext, EventName } from './types';\n\n/**\n * Assembles tracking parameters and sends a web tracking event.\n *\n * @param event - The name of the event to track.\n * @param context - Optional context used to build event parameters; may include a `window` property that will be attached to the dispatched payload.\n * @returns The result returned by `dispatchTrackEvent` when the event is sent successfully, or the value returned by `console.error` (`undefined`) if an error occurs.\n */\nasync function trackWebEvent(event: EventName, context: EventContext = {}) {\n try {\n // object data to be sent\n const parameters = await getParameters(context, event);\n\n // function to send event\n return await dispatchTrackEvent(\n event,\n Object.assign({}, parameters, { window: context.window })\n );\n } catch (err) {\n return console.error(`[DT] Error tracking event ${event}:`, err);\n }\n}\n\nexport { trackWebEvent, EVENTS };\n\nexport default {\n trackWebEvent,\n EVENTS,\n}\n","export const EVENTS = {\n CUSTOM_VIEW_CART: {\n name: \"view_cart\",\n destinations: [\"Dito\", \"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"total_discount\",\n \"subtotal\",\n \"items\",\n ],\n },\n\n ADD_TO_CART: {\n name: \"add_to_cart\",\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"items\",\n ],\n },\n\n REMOVE_FROM_CART: {\n name: \"remove_from_cart\",\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"items\",\n ],\n },\n\n ADD_COUPON: {\n name: \"add_coupon\",\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"coupon\",\n \"coupon_message\",\n \"seller_cod_name\",\n ],\n },\n\n SEARCH: {\n name: \"search\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"search_term\", \"search_found\", \"search_quantity\"],\n },\n\n SEARCH_ZIPCODE: {\n name: 'search_zipcode',\n destinations: ['DataLayer'],\n requiredParams: ['brand', 'region', 'shippings', 'zipcode', 'flag_pickup'],\n },\n\n VIEW_PROMOTION: {\n name: \"view_promotion\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"region\", \"promotion_name\", \"creative_name\", \"creative_slot\"],\n },\n\n SELECT_CONTENT: {\n name: \"select_content\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", 'content_type'],\n },\n\n SELECT_ITEM: {\n name: \"select_item\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"region\", \"items\", \"line_items\"],\n },\n\n VIEW_ITEM: {\n name: \"view_item\",\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"available_grid\",\n \"items\",\n ],\n },\n\n VIEW_ITEM_LIST: {\n name: \"view_item_list\",\n requiredParams: [\"region\"],\n },\n\n BEGIN_CHECKOUT: {\n name: \"begin_checkout\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\", \"items\"],\n },\n\n AUTH_ACTION: {\n name: \"auth_action\",\n requiredParams: [\"region\"],\n },\n\n ADD_PERSONAL_INFO: {\n name: \"add_personal_info\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"pre_filled\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\"],\n },\n\n CUSTOM_ADD_SHIPPING_INFO: {\n name: \"add_shipping_info\",\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"pre_filled\",\n \"shipping\",\n \"shipping_tier\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"total_discount\",\n \"subtotal\",\n \"items\"\n ],\n },\n\n CUSTOM_ADD_PAYMENT_INFO: {\n name: \"add_payment_info\",\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"pre_filled\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"total_discount\",\n \"payment_type\",\n \"subtotal\",\n \"items\"\n ],\n },\n\n ORDER_REVIEWED: {\n name: \"order_reviewed\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\", \"payment_type\"],\n },\n\n PURCHASE: {\n name: \"purchase\",\n destinations: [\"DataLayer\"],\n requiredParams: [\n 'brand',\n 'shipping_tier',\n 'line_items',\n 'currency',\n 'value',\n 'shipping',\n 'transaction_id',\n 'total_discount',\n 'payment_type',\n 'seller_cod_name',\n 'subtotal',\n 'coupon',\n 'items'\n ],\n },\n};\n","import { EventContext } from \"../types\";\n\n/**\n * Logs a styled tracking message to the console with the destination and event payload.\n *\n * @param data - The event payload or context to include in the log; if falsy, an empty string is logged\n * @param color - CSS background color used for the log label\n * @param destination - Destination name shown in the log label (prefixed by \"DT - \")\n */\nexport function dataTrackingLog(data: EventContext, color: string, destination: string) {\n console.log(\n `%c[DT - ${destination}] EVENTO DISPARADO:%c `,\n `background: ${color}; color: white; font-weight: bold; padding: 2px 4px; border-radius: 3px;`,\n 'color: #fff;',\n data || ''\n );\n}","import { dataTrackingLog } from \"../core/utils\";\nimport type { EventContext } from \"../types\";\n\n/**\n * Pushes an ecommerce tracking event to the appropriate dataLayer and logs the payload.\n *\n * Ensures a dataLayer array exists on the target (prefer `ecomm.window` if present, otherwise the global `window`)\n * and pushes an object containing `event` and the `ecomm` payload. Also logs the pushed payload for debugging.\n *\n * @param event - The tracking event name to push\n * @param ecomm - The ecommerce event context payload; if it contains a `window` property that object's `dataLayer` will be used as the target\n * @param dest - A destination label used by the logger\n */\nexport function pushToDataLayer(event: string, ecomm: EventContext, dest: string) {\n const targetWindow = ecomm.window;\n const ecommercePayload = Object.assign({}, ecomm);\n delete ecommercePayload.window; // delete window prop and avoid to push as payload to dayalayer\n\n dataTrackingLog({ event: event, ecommerce: ecommercePayload }, '#0b5fff', dest);\n\n if (targetWindow) {\n targetWindow.dataLayer = targetWindow.dataLayer || [];\n targetWindow.dataLayer.push({ event: event, ecommerce: ecommercePayload });\n return;\n }\n\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({ event: event, ecommerce: ecommercePayload });\n}","import { dataTrackingLog } from \"../core/utils\";\nimport type { EventContext } from \"../types\";\n\nexport function pushToDito(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ id: event, custom_data: ecomm }, '#00c851', dest);\n}","import { EVENTS } from '../core/constants';\nimport { pushToDataLayer } from './datalayer';\nimport { pushToDito } from './dito';\n\nimport type { EventName, EventContext } from '../types'\n\nconst adapters = {\n DataLayer: pushToDataLayer,\n Dito: pushToDito,\n};\n\ntype AdapterKey = keyof typeof adapters;\n\n/**\n * Dispatches a tracking event to all destinations configured for the given event.\n *\n * Looks up destinations from the EVENTS configuration, calls each destination adapter\n * in parallel (providing the event name in lowercase and the supplied context), and\n * waits for all attempts to settle. Individual adapter failures are logged with the\n * \"[DT]\" prefix but do not prevent other destinations from running.\n *\n * @param eventName - The name of the event to dispatch\n * @param data - The event context/payload to send to adapters\n */\nexport async function dispatchTrackEvent(eventName: EventName, data: EventContext) {\n const eventConfig = EVENTS[eventName] as { destinations: string[] };\n\n if (!eventConfig) return;\n\n await Promise.allSettled(\n eventConfig.destinations.map(async (dest: string) => {\n try {\n // call the adapter function based on the destination mapped in the adapters object\n // eventName is converted to lowercase to match the expected format in all adapters\n await adapters[dest as AdapterKey](eventName.toLowerCase(), data, dest);\n } catch (err) {\n console.error(`[DT] Failed to send ${eventName} to ${dest}:`, err);\n }\n })\n );\n}\n","/**\n * Fetches product data for the given product id from the catalog API.\n *\n * @param id - The product identifier used as the `productId` query filter\n * @returns The parsed JSON response containing product data, or `undefined` if the request fails\n */\nexport async function getProductDataById(id: any) {\n try {\n const response = await fetch(\n `/api/catalog_system/pub/products/search?fq=productId:${id}`\n );\n\n return await response.json();\n } catch (e) {\n console.log('[DT] Erro ao buscar dados do produto', e);\n }\n}\n\nexport function getItemShippingTier(orderForm: any, item: any) {\n const info = orderForm?.shippingData?.logisticsInfo?.find(\n (li: any) => li.itemId === item.id\n );\n\n const selectedSla = info?.slas?.find((sla: any) => sla.id === info.selectedSla);\n return selectedSla?.pickupStoreInfo?.friendlyName\n ? `retirada em loja: ${selectedSla.pickupStoreInfo.friendlyName}`\n : selectedSla?.name\n ? `Receba em casa: ${selectedSla.name}`\n : null;\n}\n\nexport async function getItemSku(item: any) {\n const product = await getProductDataById(item.productId || item.productID);\n\n if (!product.length) return null;\n\n return product[0].items.find((i: any) => i.name === item.skuName)?.itemId ?? null;\n}\n\nexport function getDiscount(item: any) {\n return item.discount ? item.discount :\n (\n parseFloat(Math.max(item.listPrice - item.sellingPrice, 0).toFixed(2)) / 100 || 0\n );\n}\n\nexport function getItemCategory(item: any) {\n return item?.productCategories?.['39'] === 'BAZAR' ? 'Sale' : 'Coleção'\n}\n\nexport function getItemCategory2(item: any) {\n const strategies = [\n () => Object.values(item?.productCategories || {}).pop(), // checkout select_item context\n () => item?.category?.split?.('>')?.[1]?.trim?.(), // deco select_item context\n ];\n\n for (const getValue of strategies) {\n const value = getValue();\n\n if (value !== null && value !== undefined) {\n return value;\n }\n }\n\n return null;\n}\n\nexport function getItemCategory4(item: any) {\n const tags = item?.additionalInfo?.tags || item?.tags;\n return Array.isArray(tags) && tags.length ? tags.join(',') : null;\n}\n\nconst BRAND_CODES = {\n farm: 'farmrio',\n 'farm etc': 'farmetc',\n 'farm rio': 'farmrio',\n} as const;\n\ntype Standardized = keyof typeof BRAND_CODES\ninterface BrandItem {\n brand?: string;\n additionalInfo?: {\n brandName?: string;\n };\n}\n\n/**\n * Extrai o código padronizado (ex: 'farmrio') de uma única string de marca.\n * Retorna null se não houver mapeamento.\n */\nfunction getBrandCode(brand: string | undefined): string | null {\n if (!brand) return null;\n const standardized = brand.toLowerCase().trim();\n return BRAND_CODES[standardized as Standardized] || null;\n}\n\n/**\n * Função principal que padroniza a marca ou lista de marcas para o formato final:\n * 'farmrio', 'farmetc', ou 'farmrio_farmetc'.\n */\nexport function normalizeBrand(input: string | BrandItem[] | BrandItem | string[] | undefined | null) {\n let brandStrings = [];\n\n if (Array.isArray(input) && input.every(item => typeof item === 'string')) {\n brandStrings = input as string[];\n } else if (Array.isArray(input)) {\n // Se for um Array, coleta a string da marca de cada item.\n brandStrings = input.map(item => item.additionalInfo?.brandName || item.brand);\n } else if (typeof input === 'object' && input !== null && 'brand' in input) {\n // Se for um Objeto único, trata como um Array de um único item (para reuso de lógica).\n brandStrings = [(input as BrandItem).additionalInfo?.brandName || (input as BrandItem).brand];\n } else if (typeof input === 'string') {\n // Se for uma String (mal formatada ou não), trata diretamente.\n return getBrandCode(input);\n } else {\n // Se for undefined, null, ou outro tipo não esperado.\n return null;\n }\n\n const brandCodes = brandStrings\n .map(getBrandCode)\n .filter((code): code is string => code !== null); // ['farmrio', 'farmetc', 'farmrio']\n\n const uniqueSortedCodes = [...new Set(brandCodes)].sort(); // ['farmetc', 'farmrio']\n\n // Retorna a combinação ('farmrio', 'farmetc', ou 'farmrio_farmetc').\n return uniqueSortedCodes.length > 0 ? uniqueSortedCodes.join('_') : null;\n}\n","import { normalizeBrand } from '../../utils';\n\nexport function brandFromOrderForm(context: Record<string, any>) {\n if (!context.orderForm && !context.orderForm.items?.length) return null;\n\n const items = context.orderForm.items;\n\n return normalizeBrand(items);\n}\n","import { normalizeBrand } from '../../utils';\n\nexport function brandFromItem(context: Record<string, any>) {\n const { item } = context;\n\n return normalizeBrand(item.additionalInfo?.brandName || item.brand);\n}\n","import { brandFromOrderForm } from './resolvers/brand/fromOrderForm';\nimport { brandFromItem } from './resolvers/brand/fromItem';\nimport { normalizeBrand } from './utils';\nimport type { EventContext, EventName } from '../types';\n\n/**\n * Determines the brand for an event by using the context or extracting it based on the event type.\n *\n * Prefers `context.brand` when present; otherwise selects a resolver based on `eventName` to extract the brand.\n *\n * @param context - The event context which may already contain a `brand` or provide data for extraction\n * @param eventName - The event name used to choose the extraction strategy\n * @returns The resolved brand value, or `null` if no brand could be determined\n */\nexport function getBrand(context: EventContext, eventName: EventName) {\n if (context?.brand) return normalizeBrand(context.brand);\n\n switch (eventName) {\n case 'CUSTOM_VIEW_CART':\n case 'ADD_COUPON':\n case 'ADD_PERSONAL_INFO':\n case 'CUSTOM_ADD_SHIPPING_INFO':\n case 'CUSTOM_ADD_PAYMENT_INFO':\n case 'BEGIN_CHECKOUT':\n case 'SEARCH_ZIPCODE':\n case 'ORDER_REVIEWED':\n case 'PURCHASE':\n return brandFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'REMOVE_FROM_CART':\n return brandFromItem(context);\n default:\n return null;\n }\n}\n","import type { EventContext } from '../../../types';\n\nimport {\n getItemSku,\n getDiscount,\n getItemCategory,\n getItemCategory2,\n getItemCategory4,\n getItemShippingTier,\n normalizeBrand,\n} from '../../utils';\n\n/**\n * Builds an array of normalized item objects from the order form contained in the given context.\n *\n * @param context - EventContext containing an orderForm with items to convert\n * @returns An array of item-like objects derived from `context.orderForm.items`, each containing fields such as `item_id`, `price`, `quantity`, `item_sku`, `item_name`, category and variant attributes, and `discount`\n */\nexport async function itemsFromOrderForm(context: EventContext) {\n const items = context.orderForm?.items || [];\n\n if (!items.length) return [];\n\n return await Promise.all(\n items.map(async (item: EventContext) => ({\n item_id: item.productId,\n item_category2: getItemCategory2(item),\n item_category4: getItemCategory4(item),\n item_shipping_tier: getItemShippingTier(context.orderForm, item),\n price: parseFloat((item.price / 100).toFixed(2)) || 0,\n quantity: item.quantity || 1,\n item_ref: item.refId || null,\n item_brand: normalizeBrand(item.additionalInfo?.brandName) || null,\n item_sku: (await getItemSku(item)) || item.id || null,\n item_name: item.name || item.id || null,\n item_category: getItemCategory(item) || null,\n item_variant: item.skuName.split('-')[0].trim(),\n item_variant2: item.skuName.split('-').pop()?.trim() || '',\n discount: getDiscount(item),\n }))\n );\n}\n","import {\n getItemSku,\n getDiscount,\n getItemCategory,\n getItemCategory2,\n getItemCategory4,\n getItemShippingTier,\n} from '../../utils';\n\nexport async function itemsFromItem(context: Record<string, any>) {\n const { item, orderForm } = context;\n return [\n {\n item_id: item.productId,\n item_category2: getItemCategory2(item),\n item_category4: getItemCategory4(item),\n item_shipping_tier: getItemShippingTier(orderForm, item),\n price: parseFloat((item.price / 100).toFixed(2)) || 0,\n quantity: 1,\n item_ref: item.refId || null,\n item_brand: item.additionalInfo?.brandName || null,\n item_sku: (await getItemSku(item)) || item.id || null,\n item_name: item.name || item.id || null,\n item_category: getItemCategory(item) || null,\n item_variant: item.skuName.split('-')[0].trim(),\n item_variant2: item.skuName.split('-').pop()?.trim() || '',\n discount: getDiscount(item),\n \n item_list_name: null,\n index: 0\n },\n ];\n}\n","import { getDiscount, getItemCategory, getItemCategory2, normalizeBrand } from '../../utils';\n\nexport async function itemsFromList(context: Record<string, any>) {\n const { item } = context;\n\n return [\n {\n price: item?.price.list || item?.price || 0,\n quantity: 1,\n item_ref: context.item.ref || context.item.additionalProperty.find((i: { name: string }) => i.name === \"RefId\").value || null,\n index: typeof context?.index === 'number' ? context.index : null,\n item_brand: normalizeBrand(item.brand.name) || normalizeBrand(context.brand) || null,\n item_name: item.productName || item.alternateName || null,\n item_category: getItemCategory(item) || null,\n item_variant: item?.name?.split(\"-\")[0].trim() || null,\n item_category2: getItemCategory2(item) || item?.category?.split(\">\")[1]?.trim() || null,\n item_id: item?.productID || item?.productId || null,\n discount: getDiscount(item) || null,\n item_list_name: context?.itemListName || null,\n },\n ];\n}\n","import {\n getDiscount,\n getItemCategory,\n getItemCategory2,\n normalizeBrand,\n} from '../../utils';\n\nexport async function itemsFromPDP(context: Record<string, any>) {\n const { item } = context;\n return [\n {\n price: context.value || 0,\n quantity: 1,\n item_ref: context.item.ref || context.item.additionalProperty.find((i: { name: string }) => i.name === \"RefId\").value || null,\n item_brand: normalizeBrand(item.brand.name) || normalizeBrand(context.brand) || null,\n item_name: item.productName || item.alternateName || null,\n item_category: getItemCategory(item) || null,\n item_variant: item?.name?.split(\"-\")[0].trim() || null,\n item_category2: getItemCategory2(item) || item?.category?.split(\">\")[1]?.trim() || null,\n item_id: item?.productID || item?.productId || null,\n discount: getDiscount(item) || null,\n },\n ];\n}\n","import { itemsFromOrderForm } from './resolvers/items/fromOrderForm';\nimport { itemsFromItem } from './resolvers/items/fromItem';\nimport { itemsFromList } from './resolvers/items/fromList';\nimport { itemsFromPDP } from './resolvers/items/fromPdp';\n\n/**\n * Selects the appropriate item resolver based on the event name and returns its result.\n *\n * @param context - Runtime context passed to the selected resolver\n * @param eventName - Event identifier that determines which resolver to use\n * @returns The resolved items for the event, or `null` if the event is not recognized\n */\nexport function getItems(context: Record<string, any>, eventName: string) {\n if (context?.items) return context.items;\n\n switch (eventName) {\n case 'CUSTOM_VIEW_CART':\n case 'BEGIN_CHECKOUT':\n case 'CUSTOM_ADD_SHIPPING_INFO':\n case 'CUSTOM_ADD_PAYMENT_INFO':\n case 'PURCHASE':\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 case 'VIEW_ITEM':\n return itemsFromPDP(context)\n default:\n return null;\n }\n}\n","export function paymentTypeFromOrderForm(context: Record<string, any>) {\n if (!context.orderForm) return null;\n\n const payments = context.orderForm.paymentData?.payments || [];\n const systems = context.orderForm.paymentData?.paymentSystems || [];\n if (!payments.length || !systems.length) return null;\n\n const selectedPayment = payments.find((p: { paymentSystem: string }) => p?.paymentSystem) || payments[0];\n const id = String(selectedPayment?.paymentSystem || '').trim();\n if (!id) return null;\n\n const system = systems.find((s: { id: string }) => String(s.id) === id);\n const name = system?.name?.toLowerCase() || '';\n\n const paymentTypeMap = [\n ['pix parcel', 'pix parcelado'],\n ['pix', 'pix'],\n ['apple', 'apple pay'],\n ['google', 'google pay'],\n ['boleto', 'boleto'],\n ['paypal', 'paypal'],\n ['cred', 'cartão'],\n ['visa', 'cartão'],\n ['master', 'cartão'],\n ['amex', 'cartão'],\n ['elo', 'cartão'],\n ['hiper', 'cartão'],\n ['diner', 'cartão'],\n ['deb', 'cartão'],\n ];\n\n const match = paymentTypeMap.find(([key]) => name.includes(key));\n\n return match ? match[1] : null;\n}\n","export function paymentTypeFromOrderGroup(context: Record<string, any>) {\n if (!context.orderForm) return null;\n\n const transactions = context.orderForm.paymentData?.transactions || [];\n if (!transactions.length) return null;\n\n const payments = transactions[0]?.payments || [];\n if (!payments.length) return null;\n\n const name = payments[0]?.paymentSystemName?.toLowerCase() || '';\n const paymentTypeMap = [\n ['pix parcel', 'pix parcelado'],\n ['pix', 'pix'],\n ['apple', 'apple pay'],\n ['google', 'google pay'],\n ['boleto', 'boleto'],\n ['paypal', 'paypal'],\n ['cred', 'cartão'],\n ['visa', 'cartão'],\n ['master', 'cartão'],\n ['amex', 'cartão'],\n ['elo', 'cartão'],\n ['hiper', 'cartão'],\n ['diner', 'cartão'],\n ['deb', 'cartão'],\n ];\n\n const match = paymentTypeMap.find(([key]) => name.includes(key));\n\n return match ? match[1] : null;\n}\n","import { paymentTypeFromOrderForm } from './resolvers/paymentType/fromOrderForm';\nimport { paymentTypeFromOrderGroup } from './resolvers/paymentType/fromOrderGroup';\n\n/**\n * Selects the appropriate payment_type resolver based on the event name and returns its result.\n *\n * @param context - Runtime context passed to the selected resolver\n * @param eventName - Event identifier that determines which resolver to use\n * @returns The resolved payment_type for the event, or `null` if the event is not recognized\n */\nexport function getPaymentType(context: Record<string, any>, eventName: string) {\n if (context?.paymentType) return context.paymentType;\n\n switch (eventName) {\n case 'ORDER_REVIEWED':\n case 'CUSTOM_ADD_PAYMENT_INFO':\n return paymentTypeFromOrderForm(context);\n case 'PURCHASE':\n return paymentTypeFromOrderGroup(context)\n default:\n return null;\n }\n}\n","import type { EventContext, EventName, LogisticInfo } from '../types';\nimport { getBrand } from './brand';\nimport { getItems } from './items';\nimport { getPaymentType } from './paymentType';\n\n\nexport const paramGetters = {\n brand: getBrand,\n\n items: getItems,\n\n payment_type: getPaymentType,\n\n content_type: (context: EventContext, eventName: EventName) => {\n return `regiao`\n .concat(':' + context.category)\n .concat(context.subcategory ? ':' + context.subcategory : '')\n .concat(':' + context.componentName) || null\n },\n\n region: (context: EventContext, eventName: EventName) => {\n return context.region || null;\n },\n\n line_items: (context: EventContext, eventName: EventName) => {\n if (context?.lineItems) return context.lineItems;\n\n if (context?.item) {\n return [context.item.productId || context.item.productID];\n }\n\n return (context.orderForm.items || [])\n .map((item: EventContext) => item.productId)\n .join(',');\n },\n\n currency: (context: EventContext, eventName: EventName) => {\n if (context?.currency) return context.currency\n\n if (context?.item) {\n return context.item?.offers.priceCurrency\n }\n\n return context.orderForm?.storePreferencesData?.currencyCode || null;\n },\n\n value: (context: EventContext, eventName: EventName) => {\n if (context?.value) return context.value\n\n return context.item ? context.item.price : context.orderForm?.value != null\n ? context.orderForm.value / 100\n : null;\n },\n\n total_discount: (context: EventContext, eventName: EventName) => {\n const totalsList = context.orderForm?.totalizers || context.orderForm?.totals || []; // totals for ordergroup and orderform have different names\n\n const discounts = totalsList.find((t: { id: string }) => t.id === 'Discounts');\n return discounts ? Math.abs(discounts.value) / 100 : 0;\n },\n\n subtotal: (context: EventContext, eventName: EventName) => {\n const totalsList = context.orderForm?.totalizers || context.orderForm?.totals || []; // totals for ordergroup and orderform have different names\n\n const subtotal =\n totalsList\n .filter((t: EventContext) => t.id === 'Items')\n .reduce((acc: number, t: EventContext) => acc + (t.value || 0), 0) / 100 || 0;\n\n return subtotal\n },\n\n coupon_message: (context: EventContext, eventName: EventName) => {\n if (context.couponMessage) return context.couponMessage;\n\n const messages = context.orderForm?.messages || [];\n\n if (messages.length === 0) return null;\n\n const couponMessages = messages.filter((msg: EventContext) =>\n msg.text.toLowerCase().includes('cupom')\n );\n\n if (couponMessages.length === 0) return null;\n\n return couponMessages.map((msg: EventContext) => msg.text).join(' | ');\n },\n\n seller_cod_name: (context: EventContext, eventName: EventName) => {\n return context.appliedSellerCodName || context?.orderForm.marketingData.utmiCampaign || null;\n },\n\n coupon: (context: EventContext, eventName: EventName) => {\n return context.appliedCoupon || context?.orderForm?.marketingData?.coupon || null;\n },\n\n pre_filled: (context: EventContext, eventName: EventName) => {\n return !!context.preFilled;\n },\n\n search_term: (context: EventContext, eventName: EventName) => {\n return context.searchTerm || null;\n },\n\n search_found: (context: EventContext, eventName: EventName) => {\n return !!context.searchFound;\n },\n\n search_quantity: (context: EventContext, eventName: EventName) => {\n return context.searchQuantity || 0;\n },\n\n promotion_name: (context: EventContext, eventName: EventName) => {\n return context.promotionName || null;\n },\n\n creative_name: (context: EventContext, eventName: EventName) => {\n return context.creativeName || null;\n },\n\n creative_slot: (context: EventContext, eventName: EventName) => {\n return context.creativeSlot || null;\n },\n\n zipcode: (context: EventContext, eventName: EventName) => {\n return context.zipCode || null;\n },\n\n flag_pickup: (context: EventContext, eventName: EventName) => {\n const orderForm = context.orderForm;\n if (!orderForm) return null;\n\n const logisticsInfo = orderForm.shippingData?.logisticsInfo || [];\n const hasPickup = logisticsInfo.some((info: LogisticInfo) =>\n info.slas?.some((sla) => sla.deliveryChannel === 'pickup-in-point')\n );\n\n return hasPickup\n },\n\n shippings: (context: EventContext, eventName: EventName) => {\n const orderForm = context.orderForm;\n if (!orderForm) return null;\n\n const groupShipping: Record<string, any> = {};\n\n for (const info of orderForm.shippingData.logisticsInfo) {\n const item = orderForm.items[info.itemIndex]\n if (!item) continue\n\n for (const sla of info.slas) {\n const key = sla.name\n\n if (!groupShipping[key]) {\n groupShipping[key] = {\n shipping_tier: sla.name,\n delivery_time: parseInt(sla.shippingEstimate),\n shipping: parseFloat((sla.price / 100).toFixed(1)),\n line_items: []\n }\n }\n\n groupShipping[key].line_items.push(item.id)\n }\n }\n\n const shippings = Object.values(groupShipping).map((s) => ({\n shipping: s.shipping,\n shipping_tier: s.shipping_tier,\n delivery_time: s.delivery_time,\n line_items: s.line_items.join(',')\n }))\n\n return shippings || null\n },\n\n shipping: (context: EventContext, eventName: EventName) => {\n const logistics = context?.orderForm?.shippingData?.logisticsInfo ?? []\n return logistics.reduce((total: number, item: any) => {\n const selected = item.slas?.find((sla: any) => sla.id === item.selectedSla)\n return total + (selected?.price ?? 0)\n }, 0)\n },\n\n shipping_tier: (context: EventContext, eventName: EventName) => {\n const logistics = context?.orderForm?.shippingData?.logisticsInfo ?? []\n const selected = logistics.find((item: { selectedSla: string }) => item.selectedSla)\n if (!selected) return null\n\n const sla = selected.slas?.find((s: { id: string }) => s.id === selected.selectedSla)\n if (!sla) return null\n\n const { deliveryChannel, name, pickupStoreInfo } = sla\n\n return deliveryChannel === 'pickup-in-point'\n ? `retirada em loja${pickupStoreInfo?.friendlyName ? `: ${pickupStoreInfo.friendlyName}` : ''}`\n : deliveryChannel === 'delivery'\n ? `receba em casa${name ? `: ${name}` : ''}`\n : null\n },\n\n transaction_id: (context: EventContext, eventName: EventName) => {\n return context.orderForm?.orderGroup?.toString() || null;\n },\n\n available_grid: (context: EventContext, eventName: EventName) => {\n return context.availableGrid || null;\n },\n}\n\n\n\n\n","import { EVENTS } from '../core/constants';\nimport { paramGetters } from '../params';\nimport type { EventName, EventContext } from '../types'\n\ntype ParamName = keyof typeof paramGetters;\n\n/**\n * Resolve and return the required parameters for a given event.\n *\n * @param context - Context passed to each parameter getter (defaults to an empty object)\n * @param eventName - The event whose required parameters should be resolved\n * @returns An object mapping each required parameter name to its resolved value (`null` when a param getter is missing), or `undefined` if the event has no configuration\n */\nexport async function getParameters(context: EventContext = {}, eventName: EventName) {\n const eventConfig = EVENTS[eventName] as { requiredParams: string[] };\n\n if (!eventConfig) return;\n\n const params = Object.fromEntries(\n await Promise.all(\n eventConfig.requiredParams.map(async (param) => {\n const getter = paramGetters[param as ParamName];\n\n if (typeof getter !== 'function') {\n console.error(`[DT] Missing paramGetter for param: ${param}`);\n return [param, null]; // ou undefined\n }\n \n return [param, await getter(context, eventName)];\n })\n )\n );\n\n return params;\n}\n"],"mappings":"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","names":["_a","_a","_a","_b"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/core/constants.ts","../src/core/utils.ts","../src/adapters/datalayer.ts","../src/adapters/dito.ts","../src/adapters/index.ts","../src/params/utils/index.ts","../src/params/resolvers/brand/fromOrderForm.ts","../src/params/resolvers/brand/fromItem.ts","../src/params/brand.ts","../src/params/resolvers/items/fromOrderForm.ts","../src/params/resolvers/items/fromItem.ts","../src/params/resolvers/items/fromList.ts","../src/params/resolvers/items/fromPdp.ts","../src/params/items.ts","../src/params/resolvers/paymentType/fromOrderForm.ts","../src/params/resolvers/paymentType/fromOrderGroup.ts","../src/params/paymentType.ts","../src/params/index.ts","../src/formatter/index.ts"],"sourcesContent":["import { dispatchTrackEvent } from './adapters';\nimport { getParameters } from './formatter';\nimport { EVENTS } from './core/constants';\nimport type { EventContext, EventName } from './types';\n\n/**\n * Assembles tracking parameters and sends a web tracking event.\n *\n * @param event - The name of the event to track.\n * @param context - Optional context used to build event parameters; may include a `window` property that will be attached to the dispatched payload.\n * @returns The result returned by `dispatchTrackEvent` when the event is sent successfully, or the value returned by `console.error` (`undefined`) if an error occurs.\n */\nasync function trackWebEvent(event: EventName, context: EventContext = {}) {\n try {\n // object data to be sent\n const parameters = await getParameters(context, event);\n\n // function to send event\n return await dispatchTrackEvent(\n event,\n Object.assign({}, parameters, { window: context.window })\n );\n } catch (err) {\n return console.error(`[DT] Error tracking event ${event}:`, err);\n }\n}\n\nexport { trackWebEvent, EVENTS };\n\nexport default {\n trackWebEvent,\n EVENTS,\n}\n","export const EVENTS = {\n CUSTOM_VIEW_CART: {\n name: \"view_cart\",\n destinations: [\"Dito\", \"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"total_discount\",\n \"subtotal\",\n \"items\",\n ],\n },\n\n ADD_TO_CART: {\n name: \"add_to_cart\",\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"items\",\n ],\n },\n\n REMOVE_FROM_CART: {\n name: \"remove_from_cart\",\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"items\",\n ],\n },\n\n ADD_COUPON: {\n name: \"add_coupon\",\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"coupon\",\n \"coupon_message\",\n \"seller_cod_name\",\n ],\n },\n\n SEARCH: {\n name: \"search\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"search_term\", \"search_found\", \"search_quantity\"],\n },\n\n SEARCH_ZIPCODE: {\n name: 'search_zipcode',\n destinations: ['DataLayer'],\n requiredParams: ['brand', 'region', 'shippings', 'zipcode', 'flag_pickup'],\n },\n\n VIEW_PROMOTION: {\n name: \"view_promotion\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"region\", \"promotion_name\", \"creative_name\", \"creative_slot\"],\n },\n\n SELECT_CONTENT: {\n name: \"select_content\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", 'content_type'],\n },\n\n SELECT_ITEM: {\n name: \"select_item\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"region\", \"items\", \"line_items\"],\n },\n\n VIEW_ITEM: {\n name: \"view_item\",\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"available_grid\",\n \"items\",\n ],\n },\n\n VIEW_ITEM_LIST: {\n name: \"view_item_list\",\n 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 CUSTOM_BEGIN_CHECKOUT: {\n name: \"custom_begin_checkout\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\", \"items\"],\n },\n\n AUTH_ACTION: {\n name: \"auth_action\",\n requiredParams: [\"region\"],\n },\n\n ADD_PERSONAL_INFO: {\n name: \"add_personal_info\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"pre_filled\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\"],\n },\n\n CUSTOM_ADD_SHIPPING_INFO: {\n name: \"add_shipping_info\",\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"pre_filled\",\n \"shipping\",\n \"shipping_tier\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"total_discount\",\n \"subtotal\",\n \"items\"\n ],\n },\n\n CUSTOM_ADD_PAYMENT_INFO: {\n name: \"add_payment_info\",\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"pre_filled\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"total_discount\",\n \"payment_type\",\n \"subtotal\",\n \"items\"\n ],\n },\n\n ORDER_REVIEWED: {\n name: \"order_reviewed\",\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\", \"payment_type\"],\n },\n\n PURCHASE: {\n name: \"purchase\",\n destinations: [\"DataLayer\"],\n requiredParams: [\n 'brand',\n 'shipping_tier',\n 'line_items',\n 'currency',\n 'value',\n 'shipping',\n 'transaction_id',\n 'total_discount',\n 'payment_type',\n 'seller_cod_name',\n 'subtotal',\n 'coupon',\n 'items'\n ],\n },\n\n CUSTOM_PURCHASE: {\n name: \"custom_purchase\",\n destinations: [\"DataLayer\"],\n requiredParams: [\n 'brand',\n 'shipping_tier',\n 'line_items',\n 'currency',\n 'value',\n 'shipping',\n 'transaction_id',\n 'total_discount',\n 'payment_type',\n 'seller_cod_name',\n 'subtotal',\n 'coupon',\n 'items'\n ],\n },\n};\n","import { EventContext } from \"../types\";\n\nexport function dataTrackingLog(data: EventContext, color: string, destination: string) {\n console.log(\n `%c[DT - ${destination}] EVENTO DISPARADO:%c `,\n `background: ${color}; color: white; font-weight: bold; padding: 2px 4px; border-radius: 3px;`,\n 'color: #fff;',\n data || ''\n );\n}\n\nexport const paymentTypeMap = [\n ['vale', 'vale crédito'],\n ['pagaleve', 'pix'],\n ['pix parcel', 'pix parcelado'],\n ['pix', 'pix'],\n ['apple', 'apple pay'],\n ['google', 'google pay'],\n ['boleto', 'boleto'],\n ['paypal', 'paypal'],\n ['cred', 'cartão'],\n ['visa', 'cartão'],\n ['master', 'cartão'],\n ['amex', 'cartão'],\n ['elo', 'cartão'],\n ['hiper', 'cartão'],\n ['diner', 'cartão'],\n ['deb', 'cartão'],\n];","import { dataTrackingLog } from \"../core/utils\";\nimport type { EventContext } from \"../types\";\n\n/**\n * Pushes an ecommerce tracking event to the appropriate dataLayer and logs the payload.\n *\n * Ensures a dataLayer array exists on the target (prefer `ecomm.window` if present, otherwise the global `window`)\n * and pushes an object containing `event` and the `ecomm` payload. Also logs the pushed payload for debugging.\n *\n * @param event - The tracking event name to push\n * @param ecomm - The ecommerce event context payload; if it contains a `window` property that object's `dataLayer` will be used as the target\n * @param dest - A destination label used by the logger\n */\nexport function pushToDataLayer(event: string, ecomm: EventContext, dest: string) {\n const targetWindow = ecomm.window;\n const ecommercePayload = Object.assign({}, ecomm);\n delete ecommercePayload.window; // delete window prop and avoid to push as payload to dayalayer\n\n dataTrackingLog({ event: event, ecommerce: ecommercePayload }, '#0b5fff', dest);\n\n if (targetWindow) {\n targetWindow.dataLayer = targetWindow.dataLayer || [];\n targetWindow.dataLayer.push({ event: event, ecommerce: ecommercePayload });\n return;\n }\n\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({ event: event, ecommerce: ecommercePayload });\n}","import { dataTrackingLog } from \"../core/utils\";\nimport type { EventContext } from \"../types\";\n\nexport function pushToDito(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ id: event, custom_data: ecomm }, '#00c851', dest);\n}","import { EVENTS } from '../core/constants';\nimport { pushToDataLayer } from './datalayer';\nimport { pushToDito } from './dito';\n\nimport type { EventName, EventContext } from '../types'\n\nconst adapters = {\n DataLayer: pushToDataLayer,\n Dito: pushToDito,\n};\n\ntype AdapterKey = keyof typeof adapters;\n\n/**\n * Dispatches a tracking event to all destinations configured for the given event.\n *\n * Looks up destinations from the EVENTS configuration, calls each destination adapter\n * in parallel (providing the event name in lowercase and the supplied context), and\n * waits for all attempts to settle. Individual adapter failures are logged with the\n * \"[DT]\" prefix but do not prevent other destinations from running.\n *\n * @param eventName - The name of the event to dispatch\n * @param data - The event context/payload to send to adapters\n */\nexport async function dispatchTrackEvent(eventName: EventName, data: EventContext) {\n const eventConfig = EVENTS[eventName] as { destinations: string[] };\n\n if (!eventConfig) return;\n\n await Promise.allSettled(\n eventConfig.destinations.map(async (dest: string) => {\n try {\n // call the adapter function based on the destination mapped in the adapters object\n // eventName is converted to lowercase to match the expected format in all adapters\n await adapters[dest as AdapterKey](eventName.toLowerCase(), data, dest);\n } catch (err) {\n console.error(`[DT] Failed to send ${eventName} to ${dest}:`, err);\n }\n })\n );\n}\n","/**\n * Fetches product data for the given product id from the catalog API.\n *\n * @param id - The product identifier used as the `productId` query filter\n * @returns The parsed JSON response containing product data, or `undefined` if the request fails\n */\nexport async function getProductDataById(id: any) {\n try {\n const response = await fetch(\n `/api/catalog_system/pub/products/search?fq=productId:${id}`\n );\n\n return await response.json();\n } catch (e) {\n console.log('[DT] Erro ao buscar dados do produto', e);\n }\n}\n\nexport function getItemShippingTier(orderForm: any, item: any) {\n const info = orderForm?.shippingData?.logisticsInfo?.find(\n (li: any) => li.itemId === item.id\n );\n\n const selectedSla = info?.slas?.find((sla: any) => sla.id === info.selectedSla);\n return selectedSla?.pickupStoreInfo?.friendlyName\n ? `retirada em loja: ${selectedSla.pickupStoreInfo.friendlyName}`\n : selectedSla?.name\n ? `Receba em casa: ${selectedSla.name}`\n : null;\n}\n\nexport async function getItemSku(item: any) {\n const product = await getProductDataById(item.productId || item.productID);\n\n if (!product.length) return null;\n\n return product[0].items.find((i: any) => i.name === item.skuName)?.itemId ?? null;\n}\n\nexport function getDiscount(item: any) {\n return item.discount ? item.discount :\n (\n parseFloat(Math.max(item.listPrice - item.sellingPrice, 0).toFixed(2)) / 100 || 0\n );\n}\n\nexport function getItemCategory(item: any) {\n return item?.productCategories?.['39'] === 'BAZAR' ? 'Sale' : 'Coleção'\n}\n\nexport function getItemCategory2(item: any) {\n const strategies = [\n () => Object.values(item?.productCategories || {}).pop(), // checkout select_item context\n () => item?.category?.split?.('>')?.[1]?.trim?.(), // deco select_item context\n ];\n\n for (const getValue of strategies) {\n const value = getValue();\n\n if (value !== null && value !== undefined) {\n return value;\n }\n }\n\n return null;\n}\n\nexport function getItemCategory4(item: any) {\n const tags = item?.additionalInfo?.tags || item?.tags;\n return Array.isArray(tags) && tags.length ? tags.join(',') : null;\n}\n\nconst BRAND_CODES = {\n farm: 'farmrio',\n 'farm etc': 'farmetc',\n 'farm rio': 'farmrio',\n} as const;\n\ntype Standardized = keyof typeof BRAND_CODES\ninterface BrandItem {\n brand?: string;\n additionalInfo?: {\n brandName?: string;\n };\n}\n\n/**\n * Extrai o código padronizado (ex: 'farmrio') de uma única string de marca.\n * Retorna null se não houver mapeamento.\n */\nfunction getBrandCode(brand: string | undefined): string | null {\n if (!brand) return null;\n const standardized = brand.toLowerCase().trim();\n return BRAND_CODES[standardized as Standardized] || null;\n}\n\n/**\n * Função principal que padroniza a marca ou lista de marcas para o formato final:\n * 'farmrio', 'farmetc', ou 'farmrio_farmetc'.\n */\nexport function normalizeBrand(input: string | BrandItem[] | BrandItem | string[] | undefined | null) {\n let brandStrings = [];\n\n if (Array.isArray(input) && input.every(item => typeof item === 'string')) {\n brandStrings = input as string[];\n } else if (Array.isArray(input)) {\n // Se for um Array, coleta a string da marca de cada item.\n brandStrings = input.map(item => item.additionalInfo?.brandName || item.brand);\n } else if (typeof input === 'object' && input !== null && 'brand' in input) {\n // Se for um Objeto único, trata como um Array de um único item (para reuso de lógica).\n brandStrings = [(input as BrandItem).additionalInfo?.brandName || (input as BrandItem).brand];\n } else if (typeof input === 'string') {\n // Se for uma String (mal formatada ou não), trata diretamente.\n return getBrandCode(input);\n } else {\n // Se for undefined, null, ou outro tipo não esperado.\n return null;\n }\n\n const brandCodes = brandStrings\n .map(getBrandCode)\n .filter((code): code is string => code !== null); // ['farmrio', 'farmetc', 'farmrio']\n\n const uniqueSortedCodes = [...new Set(brandCodes)].sort(); // ['farmetc', 'farmrio']\n\n // Retorna a combinação ('farmrio', 'farmetc', ou 'farmrio_farmetc').\n return uniqueSortedCodes.length > 0 ? uniqueSortedCodes.join('_') : null;\n}\n","import { normalizeBrand } from '../../utils';\n\nexport function brandFromOrderForm(context: Record<string, any>) {\n if (!context.orderForm && !context.orderForm.items?.length) return null;\n\n const items = context.orderForm.items;\n\n return normalizeBrand(items);\n}\n","import { normalizeBrand } from '../../utils';\n\nexport function brandFromItem(context: Record<string, any>) {\n const { item } = context;\n\n return normalizeBrand(item.additionalInfo?.brandName || item.brand);\n}\n","import { brandFromOrderForm } from './resolvers/brand/fromOrderForm';\nimport { brandFromItem } from './resolvers/brand/fromItem';\nimport { normalizeBrand } from './utils';\nimport type { EventContext, EventName } from '../types';\n\n/**\n * Determines the brand for an event by using the context or extracting it based on the event type.\n *\n * Prefers `context.brand` when present; otherwise selects a resolver based on `eventName` to extract the brand.\n *\n * @param context - The event context which may already contain a `brand` or provide data for extraction\n * @param eventName - The event name used to choose the extraction strategy\n * @returns The resolved brand value, or `null` if no brand could be determined\n */\nexport function getBrand(context: EventContext, eventName: EventName) {\n if (context?.brand) return normalizeBrand(context.brand) || context.brand || null;\n\n switch (eventName) {\n case 'CUSTOM_VIEW_CART':\n case 'ADD_COUPON':\n case 'ADD_PERSONAL_INFO':\n case 'CUSTOM_ADD_SHIPPING_INFO':\n case 'CUSTOM_ADD_PAYMENT_INFO':\n case 'BEGIN_CHECKOUT':\n case 'CUSTOM_BEGIN_CHECKOUT':\n case 'SEARCH_ZIPCODE':\n case 'ORDER_REVIEWED':\n case 'PURCHASE':\n 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) || item.additionalInfo?.brandName || null,\n item_sku: (await getItemSku(item)) || item.id || null,\n item_name: item.name || item.id || null,\n item_category: getItemCategory(item) || null,\n item_variant: item.skuName.split(/[-/]/)[0].trim(),\n item_variant2: item.skuName.split(/[-/]/).pop()?.trim() || '',\n discount: getDiscount(item),\n }))\n );\n}\n","import {\n getItemSku,\n getDiscount,\n getItemCategory,\n getItemCategory2,\n getItemCategory4,\n getItemShippingTier,\n} from '../../utils';\n\nexport async function itemsFromItem(context: Record<string, any>) {\n const { item, orderForm } = context;\n return [\n {\n item_id: item.productId,\n item_category2: getItemCategory2(item),\n item_category4: getItemCategory4(item),\n item_shipping_tier: getItemShippingTier(orderForm, item),\n price: parseFloat((item.price / 100).toFixed(2)) || 0,\n quantity: 1,\n item_ref: item.refId || null,\n item_brand: item.additionalInfo?.brandName || null,\n item_sku: (await getItemSku(item)) || item.id || null,\n item_name: item.name || item.id || null,\n item_category: getItemCategory(item) || null,\n item_variant: item.skuName.split(/[-/]/)[0].trim(),\n item_variant2: item.skuName.split(/[-/]/).pop()?.trim() || '',\n discount: getDiscount(item),\n \n item_list_name: null,\n index: 0\n },\n ];\n}\n","import { getDiscount, getItemCategory, getItemCategory2, normalizeBrand } from '../../utils';\n\nexport async function itemsFromList(context: Record<string, any>) {\n const { item } = context;\n\n return [\n {\n price: item?.price.list || item?.price || 0,\n quantity: 1,\n item_ref: context.item.ref || context.item.additionalProperty.find((i: { name: string }) => i.name === \"RefId\").value || null,\n index: typeof context?.index === 'number' ? context.index : null,\n item_brand: normalizeBrand(item.brand.name) || normalizeBrand(context.brand) || null,\n item_name: item.productName || item.alternateName || null,\n item_category: getItemCategory(item) || null,\n item_variant: item?.name?.split(\"-\")[0].trim() || null,\n item_category2: getItemCategory2(item) || item?.category?.split(\">\")[1]?.trim() || null,\n item_id: item?.productID || item?.productId || null,\n discount: getDiscount(item) || null,\n item_list_name: context?.itemListName || null,\n },\n ];\n}\n","import {\n getDiscount,\n getItemCategory,\n getItemCategory2,\n normalizeBrand,\n} from '../../utils';\n\nexport async function itemsFromPDP(context: Record<string, any>) {\n const { item } = context;\n return [\n {\n price: context.value || 0,\n quantity: 1,\n item_ref: context.item.ref || context.item.additionalProperty.find((i: { name: string }) => i.name === \"RefId\").value || null,\n item_brand: normalizeBrand(item.brand.name) || normalizeBrand(context.brand) || null,\n item_name: item.productName || item.alternateName || null,\n item_category: getItemCategory(item) || null,\n item_variant: item?.name?.split(\"-\")[0].trim() || null,\n item_category2: getItemCategory2(item) || item?.category?.split(\">\")[1]?.trim() || null,\n item_id: item?.productID || item?.productId || null,\n discount: getDiscount(item) || null,\n },\n ];\n}\n","import { itemsFromOrderForm } from './resolvers/items/fromOrderForm';\nimport { itemsFromItem } from './resolvers/items/fromItem';\nimport { itemsFromList } from './resolvers/items/fromList';\nimport { itemsFromPDP } from './resolvers/items/fromPdp';\n\n/**\n * Selects the appropriate item resolver based on the event name and returns its result.\n *\n * @param context - Runtime context passed to the selected resolver\n * @param eventName - Event identifier that determines which resolver to use\n * @returns The resolved items for the event, or `null` if the event is not recognized\n */\nexport function getItems(context: Record<string, any>, eventName: string) {\n if (context?.items) return context.items;\n\n switch (eventName) {\n case 'CUSTOM_VIEW_CART':\n case 'BEGIN_CHECKOUT':\n case 'CUSTOM_BEGIN_CHECKOUT':\n case 'CUSTOM_ADD_SHIPPING_INFO':\n case 'CUSTOM_ADD_PAYMENT_INFO':\n case 'PURCHASE':\n 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 case 'VIEW_ITEM':\n return itemsFromPDP(context)\n default:\n return null;\n }\n}\n","import { paymentTypeMap } from \"../../../core/utils\";\n\nexport function paymentTypeFromOrderForm(context: Record<string, any>) {\n if (!context.orderForm) return null;\n\n const payments = context.orderForm.paymentData?.payments || [];\n const systems = context.orderForm.paymentData?.paymentSystems || [];\n if (!payments.length || !systems.length) return null;\n\n const selectedPayment = payments.find((p: { paymentSystem: string }) => p?.paymentSystem) || payments[0];\n const id = String(selectedPayment?.paymentSystem || '').trim();\n if (!id) return null;\n\n const system = systems.find((s: { id: string }) => String(s.id) === id);\n const name = system?.name?.toLowerCase() || '';\n const match = paymentTypeMap.find(([key]) => name.includes(key));\n\n return match ? match[1] : null;\n}\n","import { paymentTypeMap } from \"../../../core/utils\";\n\nexport function paymentTypeFromOrderGroup(context: Record<string, any>) {\n if (!context.orderForm) return null;\n\n const transactions = context.orderForm.paymentData?.transactions || [];\n if (!transactions.length) return null;\n\n const payments = transactions[0]?.payments || [];\n if (!payments.length) return null;\n\n const name = payments[0]?.paymentSystemName?.toLowerCase() || '';\n const match = paymentTypeMap.find(([key]) => name.includes(key));\n\n return match ? match[1] : null;\n}\n","import { paymentTypeFromOrderForm } from './resolvers/paymentType/fromOrderForm';\nimport { paymentTypeFromOrderGroup } from './resolvers/paymentType/fromOrderGroup';\n\n/**\n * Selects the appropriate payment_type resolver based on the event name and returns its result.\n *\n * @param context - Runtime context passed to the selected resolver\n * @param eventName - Event identifier that determines which resolver to use\n * @returns The resolved payment_type for the event, or `null` if the event is not recognized\n */\nexport function getPaymentType(context: Record<string, any>, eventName: string) {\n if (context?.paymentType) return context.paymentType;\n\n switch (eventName) {\n case 'ORDER_REVIEWED':\n case 'CUSTOM_ADD_PAYMENT_INFO':\n return paymentTypeFromOrderForm(context);\n case 'PURCHASE':\n return paymentTypeFromOrderGroup(context)\n default:\n return null;\n }\n}\n","import type { EventContext, EventName, LogisticInfo } from '../types';\nimport { getBrand } from './brand';\nimport { getItems } from './items';\nimport { getPaymentType } from './paymentType';\n\n\nexport const paramGetters = {\n brand: getBrand,\n\n items: getItems,\n\n payment_type: getPaymentType,\n\n content_type: (context: EventContext, eventName: EventName) => {\n return `regiao`\n .concat(':' + context.category)\n .concat(context.subcategory ? ':' + context.subcategory : '')\n .concat(':' + context.componentName) || null\n },\n\n region: (context: EventContext, eventName: EventName) => {\n return context.region || null;\n },\n\n line_items: (context: EventContext, eventName: EventName) => {\n if (context?.lineItems) return context.lineItems;\n\n if (context?.item) {\n return [context.item.productId || context.item.productID];\n }\n\n return (context.orderForm.items || [])\n .map((item: EventContext) => item.productId)\n .join(',');\n },\n\n currency: (context: EventContext, eventName: EventName) => {\n if (context?.currency) return context.currency\n\n if (context?.item) {\n return context.item?.offers.priceCurrency\n }\n\n return context.orderForm?.storePreferencesData?.currencyCode || null;\n },\n\n value: (context: EventContext, eventName: EventName) => {\n if (context?.value) return context.value\n\n return context.item ? context.item.price : context.orderForm?.value != null\n ? context.orderForm.value / 100\n : null;\n },\n\n total_discount: (context: EventContext, eventName: EventName) => {\n const totalsList = context.orderForm?.totalizers || context.orderForm?.totals || []; // totals for ordergroup and orderform have different names\n\n const discounts = totalsList.find((t: { id: string }) => t.id === 'Discounts');\n return discounts ? Math.abs(discounts.value) / 100 : 0;\n },\n\n subtotal: (context: EventContext, eventName: EventName) => {\n const totalsList = context.orderForm?.totalizers || context.orderForm?.totals || []; // totals for ordergroup and orderform have different names\n\n const subtotal =\n totalsList\n .filter((t: EventContext) => t.id === 'Items')\n .reduce((acc: number, t: EventContext) => acc + (t.value || 0), 0) / 100 || 0;\n\n return subtotal\n },\n\n coupon_message: (context: EventContext, eventName: EventName) => {\n if (context.couponMessage) return context.couponMessage;\n\n const messages = context.orderForm?.messages || [];\n\n if (messages.length === 0) return null;\n\n const couponMessages = messages.filter((msg: EventContext) =>\n msg.text.toLowerCase().includes('cupom')\n );\n\n if (couponMessages.length === 0) return null;\n\n return couponMessages.map((msg: EventContext) => msg.text).join(' | ');\n },\n\n seller_cod_name: (context: EventContext, eventName: EventName) => {\n return context.appliedSellerCodName || context?.orderForm.marketingData.utmiCampaign || null;\n },\n\n coupon: (context: EventContext, eventName: EventName) => {\n return context.appliedCoupon || context?.orderForm?.marketingData?.coupon || null;\n },\n\n pre_filled: (context: EventContext, eventName: EventName) => {\n return !!context.preFilled;\n },\n\n search_term: (context: EventContext, eventName: EventName) => {\n return context.searchTerm || null;\n },\n\n search_found: (context: EventContext, eventName: EventName) => {\n return !!context.searchFound;\n },\n\n search_quantity: (context: EventContext, eventName: EventName) => {\n return context.searchQuantity || 0;\n },\n\n promotion_name: (context: EventContext, eventName: EventName) => {\n return context.promotionName || null;\n },\n\n creative_name: (context: EventContext, eventName: EventName) => {\n return context.creativeName || null;\n },\n\n creative_slot: (context: EventContext, eventName: EventName) => {\n return context.creativeSlot || null;\n },\n\n zipcode: (context: EventContext, eventName: EventName) => {\n return context.zipCode || null;\n },\n\n flag_pickup: (context: EventContext, eventName: EventName) => {\n const orderForm = context.orderForm;\n if (!orderForm) return null;\n\n const logisticsInfo = orderForm.shippingData?.logisticsInfo || [];\n const hasPickup = logisticsInfo.some((info: LogisticInfo) =>\n info.slas?.some((sla) => sla.deliveryChannel === 'pickup-in-point')\n );\n\n return hasPickup\n },\n\n shippings: (context: EventContext, eventName: EventName) => {\n const orderForm = context.orderForm;\n if (!orderForm) return null;\n\n const groupShipping: Record<string, any> = {};\n\n for (const info of orderForm.shippingData.logisticsInfo) {\n const item = orderForm.items[info.itemIndex]\n if (!item) continue\n\n for (const sla of info.slas) {\n const key = sla.name\n\n if (!groupShipping[key]) {\n groupShipping[key] = {\n shipping_tier: sla.name,\n delivery_time: parseInt(sla.shippingEstimate),\n shipping: parseFloat((sla.price / 100).toFixed(1)),\n line_items: []\n }\n }\n\n groupShipping[key].line_items.push(item.id)\n }\n }\n\n const shippings = Object.values(groupShipping).map((s) => ({\n shipping: s.shipping,\n shipping_tier: s.shipping_tier,\n delivery_time: s.delivery_time,\n line_items: s.line_items.join(',')\n }))\n\n return shippings || null\n },\n\n shipping: (context: EventContext, eventName: EventName) => {\n const logistics = context?.orderForm?.shippingData?.logisticsInfo ?? []\n return logistics.reduce((total: number, item: any) => {\n const selected = item.slas?.find((sla: any) => sla.id === item.selectedSla)\n return total + (selected?.price ?? 0)\n }, 0)\n },\n\n shipping_tier: (context: EventContext, eventName: EventName) => {\n const logistics = context?.orderForm?.shippingData?.logisticsInfo ?? []\n const selected = logistics.find((item: { selectedSla: string }) => item.selectedSla)\n if (!selected) return null\n\n const sla = selected.slas?.find((s: { id: string }) => s.id === selected.selectedSla)\n if (!sla) return null\n\n const { deliveryChannel, name, pickupStoreInfo } = sla\n\n return deliveryChannel === 'pickup-in-point'\n ? `retirada em loja${pickupStoreInfo?.friendlyName ? `: ${pickupStoreInfo.friendlyName}` : ''}`\n : deliveryChannel === 'delivery'\n ? `receba em casa${name ? `: ${name}` : ''}`\n : null\n },\n\n transaction_id: (context: EventContext, eventName: EventName) => {\n return context.orderForm?.orderGroup?.toString() || null;\n },\n\n available_grid: (context: EventContext, eventName: EventName) => {\n return context.availableGrid || null;\n },\n}\n\n\n\n\n","import { EVENTS } from '../core/constants';\nimport { paramGetters } from '../params';\nimport type { EventName, EventContext } from '../types'\n\ntype ParamName = keyof typeof paramGetters;\n\n/**\n * Resolve and return the required parameters for a given event.\n *\n * @param context - Context passed to each parameter getter (defaults to an empty object)\n * @param eventName - The event whose required parameters should be resolved\n * @returns An object mapping each required parameter name to its resolved value (`null` when a param getter is missing), or `undefined` if the event has no configuration\n */\nexport async function getParameters(context: EventContext = {}, eventName: EventName) {\n const eventConfig = EVENTS[eventName] as { requiredParams: string[] };\n\n if (!eventConfig) return;\n\n const params = Object.fromEntries(\n await Promise.all(\n eventConfig.requiredParams.map(async (param) => {\n const getter = paramGetters[param as ParamName];\n\n if (typeof getter !== 'function') {\n console.error(`[DT] Missing paramGetter for param: ${param}`);\n return [param, null]; // ou undefined\n }\n \n return [param, await getter(context, eventName)];\n })\n )\n );\n\n return params;\n}\n"],"mappings":"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","names":["_a","_a","_a","_b"]}
package/dist/mod.js CHANGED
@@ -95,6 +95,11 @@ var EVENTS = {
95
95
  destinations: ["DataLayer"],
96
96
  requiredParams: ["brand", "line_items", "currency", "value", "total_discount", "subtotal", "items"]
97
97
  },
98
+ CUSTOM_BEGIN_CHECKOUT: {
99
+ name: "custom_begin_checkout",
100
+ destinations: ["DataLayer"],
101
+ requiredParams: ["brand", "line_items", "currency", "value", "total_discount", "subtotal", "items"]
102
+ },
98
103
  AUTH_ACTION: {
99
104
  name: "auth_action",
100
105
  requiredParams: ["region"]
@@ -158,6 +163,25 @@ var EVENTS = {
158
163
  "coupon",
159
164
  "items"
160
165
  ]
166
+ },
167
+ CUSTOM_PURCHASE: {
168
+ name: "custom_purchase",
169
+ destinations: ["DataLayer"],
170
+ requiredParams: [
171
+ "brand",
172
+ "shipping_tier",
173
+ "line_items",
174
+ "currency",
175
+ "value",
176
+ "shipping",
177
+ "transaction_id",
178
+ "total_discount",
179
+ "payment_type",
180
+ "seller_cod_name",
181
+ "subtotal",
182
+ "coupon",
183
+ "items"
184
+ ]
161
185
  }
162
186
  };
163
187
 
@@ -170,6 +194,24 @@ function dataTrackingLog(data, color, destination) {
170
194
  data || ""
171
195
  );
172
196
  }
197
+ var paymentTypeMap = [
198
+ ["vale", "vale cr\xE9dito"],
199
+ ["pagaleve", "pix"],
200
+ ["pix parcel", "pix parcelado"],
201
+ ["pix", "pix"],
202
+ ["apple", "apple pay"],
203
+ ["google", "google pay"],
204
+ ["boleto", "boleto"],
205
+ ["paypal", "paypal"],
206
+ ["cred", "cart\xE3o"],
207
+ ["visa", "cart\xE3o"],
208
+ ["master", "cart\xE3o"],
209
+ ["amex", "cart\xE3o"],
210
+ ["elo", "cart\xE3o"],
211
+ ["hiper", "cart\xE3o"],
212
+ ["diner", "cart\xE3o"],
213
+ ["deb", "cart\xE3o"]
214
+ ];
173
215
 
174
216
  // src/adapters/datalayer.ts
175
217
  function pushToDataLayer(event, ecomm, dest) {
@@ -314,7 +356,7 @@ function brandFromItem(context) {
314
356
 
315
357
  // src/params/brand.ts
316
358
  function getBrand(context, eventName) {
317
- if (context == null ? void 0 : context.brand) return normalizeBrand(context.brand);
359
+ if (context == null ? void 0 : context.brand) return normalizeBrand(context.brand) || context.brand || null;
318
360
  switch (eventName) {
319
361
  case "CUSTOM_VIEW_CART":
320
362
  case "ADD_COUPON":
@@ -322,6 +364,7 @@ function getBrand(context, eventName) {
322
364
  case "CUSTOM_ADD_SHIPPING_INFO":
323
365
  case "CUSTOM_ADD_PAYMENT_INFO":
324
366
  case "BEGIN_CHECKOUT":
367
+ case "CUSTOM_BEGIN_CHECKOUT":
325
368
  case "SEARCH_ZIPCODE":
326
369
  case "ORDER_REVIEWED":
327
370
  case "PURCHASE":
@@ -341,7 +384,7 @@ async function itemsFromOrderForm(context) {
341
384
  if (!items.length) return [];
342
385
  return await Promise.all(
343
386
  items.map(async (item) => {
344
- var _a2, _b;
387
+ var _a2, _b, _c;
345
388
  return {
346
389
  item_id: item.productId,
347
390
  item_category2: getItemCategory2(item),
@@ -350,12 +393,12 @@ async function itemsFromOrderForm(context) {
350
393
  price: parseFloat((item.price / 100).toFixed(2)) || 0,
351
394
  quantity: item.quantity || 1,
352
395
  item_ref: item.refId || null,
353
- item_brand: normalizeBrand((_a2 = item.additionalInfo) == null ? void 0 : _a2.brandName) || null,
396
+ item_brand: normalizeBrand((_a2 = item.additionalInfo) == null ? void 0 : _a2.brandName) || ((_b = item.additionalInfo) == null ? void 0 : _b.brandName) || null,
354
397
  item_sku: await getItemSku(item) || item.id || null,
355
398
  item_name: item.name || item.id || null,
356
399
  item_category: getItemCategory(item) || null,
357
- item_variant: item.skuName.split("-")[0].trim(),
358
- item_variant2: ((_b = item.skuName.split("-").pop()) == null ? void 0 : _b.trim()) || "",
400
+ item_variant: item.skuName.split(/[-/]/)[0].trim(),
401
+ item_variant2: ((_c = item.skuName.split(/[-/]/).pop()) == null ? void 0 : _c.trim()) || "",
359
402
  discount: getDiscount(item)
360
403
  };
361
404
  })
@@ -379,8 +422,8 @@ async function itemsFromItem(context) {
379
422
  item_sku: await getItemSku(item) || item.id || null,
380
423
  item_name: item.name || item.id || null,
381
424
  item_category: getItemCategory(item) || null,
382
- item_variant: item.skuName.split("-")[0].trim(),
383
- item_variant2: ((_b = item.skuName.split("-").pop()) == null ? void 0 : _b.trim()) || "",
425
+ item_variant: item.skuName.split(/[-/]/)[0].trim(),
426
+ item_variant2: ((_b = item.skuName.split(/[-/]/).pop()) == null ? void 0 : _b.trim()) || "",
384
427
  discount: getDiscount(item),
385
428
  item_list_name: null,
386
429
  index: 0
@@ -436,6 +479,7 @@ function getItems(context, eventName) {
436
479
  switch (eventName) {
437
480
  case "CUSTOM_VIEW_CART":
438
481
  case "BEGIN_CHECKOUT":
482
+ case "CUSTOM_BEGIN_CHECKOUT":
439
483
  case "CUSTOM_ADD_SHIPPING_INFO":
440
484
  case "CUSTOM_ADD_PAYMENT_INFO":
441
485
  case "PURCHASE":
@@ -464,22 +508,6 @@ function paymentTypeFromOrderForm(context) {
464
508
  if (!id) return null;
465
509
  const system = systems.find((s) => String(s.id) === id);
466
510
  const name = ((_c = system == null ? void 0 : system.name) == null ? void 0 : _c.toLowerCase()) || "";
467
- const paymentTypeMap = [
468
- ["pix parcel", "pix parcelado"],
469
- ["pix", "pix"],
470
- ["apple", "apple pay"],
471
- ["google", "google pay"],
472
- ["boleto", "boleto"],
473
- ["paypal", "paypal"],
474
- ["cred", "cart\xE3o"],
475
- ["visa", "cart\xE3o"],
476
- ["master", "cart\xE3o"],
477
- ["amex", "cart\xE3o"],
478
- ["elo", "cart\xE3o"],
479
- ["hiper", "cart\xE3o"],
480
- ["diner", "cart\xE3o"],
481
- ["deb", "cart\xE3o"]
482
- ];
483
511
  const match = paymentTypeMap.find(([key]) => name.includes(key));
484
512
  return match ? match[1] : null;
485
513
  }
@@ -493,22 +521,6 @@ function paymentTypeFromOrderGroup(context) {
493
521
  const payments = ((_b = transactions[0]) == null ? void 0 : _b.payments) || [];
494
522
  if (!payments.length) return null;
495
523
  const name = ((_d = (_c = payments[0]) == null ? void 0 : _c.paymentSystemName) == null ? void 0 : _d.toLowerCase()) || "";
496
- const paymentTypeMap = [
497
- ["pix parcel", "pix parcelado"],
498
- ["pix", "pix"],
499
- ["apple", "apple pay"],
500
- ["google", "google pay"],
501
- ["boleto", "boleto"],
502
- ["paypal", "paypal"],
503
- ["cred", "cart\xE3o"],
504
- ["visa", "cart\xE3o"],
505
- ["master", "cart\xE3o"],
506
- ["amex", "cart\xE3o"],
507
- ["elo", "cart\xE3o"],
508
- ["hiper", "cart\xE3o"],
509
- ["diner", "cart\xE3o"],
510
- ["deb", "cart\xE3o"]
511
- ];
512
524
  const match = paymentTypeMap.find(([key]) => name.includes(key));
513
525
  return match ? match[1] : null;
514
526
  }