@azzas/azzas-tracker-web 1.0.59 → 1.0.61

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/mod.js CHANGED
@@ -2,6 +2,7 @@
2
2
  var EVENTS = {
3
3
  CUSTOM_VIEW_CART: {
4
4
  name: "custom_view_cart",
5
+ hasEcommerce: true,
5
6
  destinations: ["DataLayer"],
6
7
  requiredParams: [
7
8
  "brand",
@@ -16,6 +17,7 @@ var EVENTS = {
16
17
  },
17
18
  ADD_TO_WISHLIST: {
18
19
  name: "add_to_wishlist",
20
+ hasEcommerce: true,
19
21
  destinations: ["DataLayer"],
20
22
  requiredParams: [
21
23
  "brand",
@@ -28,6 +30,7 @@ var EVENTS = {
28
30
  },
29
31
  ADD_TO_CART: {
30
32
  name: "add_to_cart",
33
+ hasEcommerce: true,
31
34
  destinations: ["DataLayer"],
32
35
  requiredParams: [
33
36
  "brand",
@@ -40,6 +43,7 @@ var EVENTS = {
40
43
  },
41
44
  REMOVE_FROM_CART: {
42
45
  name: "remove_from_cart",
46
+ hasEcommerce: true,
43
47
  destinations: ["DataLayer"],
44
48
  requiredParams: [
45
49
  "brand",
@@ -52,6 +56,7 @@ var EVENTS = {
52
56
  },
53
57
  ADD_COUPON: {
54
58
  name: "add_coupon",
59
+ hasEcommerce: true,
55
60
  destinations: ["DataLayer"],
56
61
  requiredParams: [
57
62
  "brand",
@@ -63,11 +68,13 @@ var EVENTS = {
63
68
  },
64
69
  SEARCH: {
65
70
  name: "search",
71
+ hasEcommerce: false,
66
72
  destinations: ["DataLayer"],
67
73
  requiredParams: ["brand", "search_term", "search_found", "search_quantity"]
68
74
  },
69
75
  SEARCH_ZIPCODE: {
70
76
  name: "search_zipcode",
77
+ hasEcommerce: false,
71
78
  destinations: ["DataLayer"],
72
79
  requiredParams: ["brand", "region", "shippings", "zipcode", "flag_pickup"]
73
80
  },
@@ -86,6 +93,7 @@ var EVENTS = {
86
93
  },
87
94
  SELECT_PROMOTION: {
88
95
  name: "select_promotion",
96
+ hasEcommerce: true,
89
97
  destinations: ["DataLayer"],
90
98
  requiredParams: [
91
99
  "brand",
@@ -99,16 +107,19 @@ var EVENTS = {
99
107
  },
100
108
  SELECT_CONTENT: {
101
109
  name: "select_content",
110
+ hasEcommerce: true,
102
111
  destinations: ["DataLayer"],
103
112
  requiredParams: ["brand", "content_type"]
104
113
  },
105
114
  SELECT_ITEM: {
106
115
  name: "select_item",
116
+ hasEcommerce: true,
107
117
  destinations: ["DataLayer"],
108
118
  requiredParams: ["brand", "region", "items", "line_items"]
109
119
  },
110
120
  VIEW_ITEM: {
111
121
  name: "view_item",
122
+ hasEcommerce: true,
112
123
  destinations: ["DataLayer"],
113
124
  requiredParams: [
114
125
  "brand",
@@ -122,6 +133,7 @@ var EVENTS = {
122
133
  CUSTOM_VIEW_ITEM: {
123
134
  // IO STORES
124
135
  name: "custom_view_item",
136
+ hasEcommerce: true,
125
137
  destinations: ["DataLayer"],
126
138
  requiredParams: [
127
139
  "brand",
@@ -134,30 +146,36 @@ var EVENTS = {
134
146
  },
135
147
  VIEW_ITEM_LIST: {
136
148
  name: "view_item_list",
149
+ hasEcommerce: true,
137
150
  destinations: ["DataLayer"],
138
151
  requiredParams: ["region", "brand", "line_items", "items"]
139
152
  },
140
153
  BEGIN_CHECKOUT: {
141
154
  name: "begin_checkout",
155
+ hasEcommerce: true,
142
156
  destinations: ["DataLayer"],
143
157
  requiredParams: ["brand", "line_items", "currency", "value", "total_discount", "subtotal", "items"]
144
158
  },
145
159
  CUSTOM_BEGIN_CHECKOUT: {
146
160
  name: "custom_begin_checkout",
161
+ hasEcommerce: true,
147
162
  destinations: ["DataLayer"],
148
163
  requiredParams: ["brand", "line_items", "currency", "value", "total_discount", "subtotal", "items"]
149
164
  },
150
165
  AUTH_ACTION: {
151
166
  name: "auth_action",
167
+ hasEcommerce: false,
152
168
  requiredParams: ["region"]
153
169
  },
154
170
  ADD_PERSONAL_INFO: {
155
171
  name: "add_personal_info",
172
+ hasEcommerce: true,
156
173
  destinations: ["DataLayer"],
157
174
  requiredParams: ["brand", "pre_filled", "line_items", "currency", "value", "total_discount", "subtotal"]
158
175
  },
159
176
  CUSTOM_ADD_SHIPPING_INFO: {
160
177
  name: "add_shipping_info",
178
+ hasEcommerce: true,
161
179
  destinations: ["DataLayer"],
162
180
  requiredParams: [
163
181
  "brand",
@@ -174,6 +192,7 @@ var EVENTS = {
174
192
  },
175
193
  CUSTOM_ADD_PAYMENT_INFO: {
176
194
  name: "add_payment_info",
195
+ hasEcommerce: true,
177
196
  destinations: ["DataLayer"],
178
197
  requiredParams: [
179
198
  "brand",
@@ -189,11 +208,13 @@ var EVENTS = {
189
208
  },
190
209
  ORDER_REVIEWED: {
191
210
  name: "order_reviewed",
211
+ hasEcommerce: true,
192
212
  destinations: ["DataLayer"],
193
213
  requiredParams: ["brand", "line_items", "currency", "value", "total_discount", "subtotal", "payment_type"]
194
214
  },
195
215
  PURCHASE: {
196
216
  name: "purchase",
217
+ hasEcommerce: true,
197
218
  destinations: ["DataLayer"],
198
219
  requiredParams: [
199
220
  "brand",
@@ -213,6 +234,7 @@ var EVENTS = {
213
234
  },
214
235
  CUSTOM_PURCHASE: {
215
236
  name: "custom_purchase",
237
+ hasEcommerce: true,
216
238
  destinations: ["DataLayer"],
217
239
  requiredParams: [
218
240
  "brand",
@@ -232,36 +254,39 @@ var EVENTS = {
232
254
  },
233
255
  CUSTOM_USER_INFO: {
234
256
  name: "custom_user_info",
257
+ hasEcommerce: false,
235
258
  destinations: ["DataLayer"],
236
259
  requiredParams: ["user_info"]
237
260
  },
238
261
  NOTIFY_ME: {
239
262
  name: "notify_me",
263
+ hasEcommerce: false,
240
264
  destinations: ["DataLayer"],
241
265
  requiredParams: ["brand", "line_items", "size", "item_ref"]
242
266
  }
243
267
  };
244
268
 
245
269
  // src/adapters/datalayer.ts
246
- function pushToDataLayer(event, ecomm, dest) {
247
- const targetWindow = ecomm.window;
248
- const ecommercePayload = Object.assign({}, ecomm);
249
- delete ecommercePayload.window;
250
- if (targetWindow) {
251
- targetWindow.dataLayer = targetWindow.dataLayer || [];
270
+ function pushToDataLayer(event, context) {
271
+ const targetWindow = context.window || (typeof window !== "undefined" ? window : null);
272
+ if (!targetWindow) return;
273
+ const payload = Object.assign({}, context);
274
+ delete payload.window;
275
+ const eventName = event.toUpperCase();
276
+ const eventConfig = EVENTS[eventName];
277
+ targetWindow.dataLayer = targetWindow.dataLayer || [];
278
+ if (eventConfig == null ? void 0 : eventConfig.hasEcommerce) {
252
279
  targetWindow.dataLayer.push({ ecommerce: null });
253
- targetWindow.dataLayer.push({ event, ecommerce: ecommercePayload });
254
- return;
280
+ targetWindow.dataLayer.push({ event, ecommerce: payload });
281
+ } else {
282
+ targetWindow.dataLayer.push({ event, ...payload });
255
283
  }
256
- window.dataLayer = window.dataLayer || [];
257
- window.dataLayer.push({ ecommerce: null });
258
- window.dataLayer.push({ event, ecommerce: ecommercePayload });
259
284
  }
260
285
 
261
286
  // src/core/utils.ts
262
- function dataTrackingLog(data, color, destination) {
287
+ function dataTrackingLog(data, color) {
263
288
  console.log(
264
- `%c[DT - ${destination}] EVENTO DISPARADO:%c `,
289
+ `%c[DT] EVENTO DISPARADO:%c `,
265
290
  `background: ${color}; color: white; font-weight: bold; padding: 2px 4px; border-radius: 3px;`,
266
291
  "color: #fff;",
267
292
  data || ""
@@ -285,10 +310,11 @@ var paymentTypeMap = [
285
310
  ["diner", "cart\xE3o"],
286
311
  ["deb", "cart\xE3o"]
287
312
  ];
313
+ var toNum = (val) => typeof val === "string" ? Number(val.replace(/[^\d,]/g, "").replace(",", ".")) : val;
288
314
 
289
315
  // src/adapters/dito.ts
290
- function pushToDito(event, ecomm, dest) {
291
- dataTrackingLog({ id: event, custom_data: ecomm }, "#00c851", dest);
316
+ function pushToDito(event, ecomm) {
317
+ dataTrackingLog({ id: event, custom_data: ecomm }, "#00c851");
292
318
  }
293
319
 
294
320
  // src/adapters/index.ts
@@ -302,7 +328,7 @@ async function dispatchTrackEvent(eventName, data) {
302
328
  await Promise.allSettled(
303
329
  eventConfig.destinations.map(async (dest) => {
304
330
  try {
305
- await adapters[dest](eventName.toLowerCase(), data, dest);
331
+ await adapters[dest](eventName.toLowerCase(), data);
306
332
  } catch (err) {
307
333
  console.error(`[DT] Failed to send ${eventName} to ${dest}:`, err);
308
334
  }
@@ -520,27 +546,27 @@ async function itemsFromOrderForm(context) {
520
546
 
521
547
  // src/params/resolvers/items/fromItem.ts
522
548
  async function itemsFromItem(context, event) {
523
- var _a, _b, _c;
549
+ var _a, _b, _c, _d, _e, _f;
524
550
  const { item, orderForm } = context;
525
551
  return [
526
552
  {
527
553
  index: 0,
528
554
  quantity: 1,
529
- item_id: item.productId || item.item_group_id || item.sku || null,
555
+ item_id: (item == null ? void 0 : item.productId) || (item == null ? void 0 : item.item_group_id) || (item == null ? void 0 : item.sku) || null,
530
556
  item_category2: getItemCategory2(item),
531
557
  item_category4: getItemCategory4(item),
532
558
  item_shipping_tier: event === "REMOVE_FROM_CART" ? getItemShippingTier(orderForm, item) : null,
533
- price: item.listPrice || parseFloat((item.price / 100).toFixed(2)) || 0,
534
- item_ref: item.refId || item.item_ref || (item == null ? void 0 : item.additionalProperty.find((i) => i.name === "RefId").value) || null,
535
- item_brand: ((_a = item.additionalInfo) == null ? void 0 : _a.brandName) || item.item_brand || item.brand.name || null,
536
- item_sku: item.sku || item.id || item.item_id || await getItemSku(item) || null,
537
- item_name: item.name || item.item_name || null,
559
+ price: (item == null ? void 0 : item.listPrice) || (item == null ? void 0 : item.price) || 0,
560
+ item_ref: (item == null ? void 0 : item.refId) || (item == null ? void 0 : item.item_ref) || ((_a = item == null ? void 0 : item.additionalProperty) == null ? void 0 : _a.find((i) => i.name === "RefId").value) || null,
561
+ item_brand: ((_b = item == null ? void 0 : item.additionalInfo) == null ? void 0 : _b.brandName) || (item == null ? void 0 : item.item_brand) || ((_c = item == null ? void 0 : item.brand) == null ? void 0 : _c.name) || null,
562
+ item_sku: (item == null ? void 0 : item.sku) || (item == null ? void 0 : item.id) || (item == null ? void 0 : item.item_id) || await getItemSku(item) || null,
563
+ item_name: (item == null ? void 0 : item.name) || (item == null ? void 0 : item.item_name) || null,
538
564
  item_category: getItemCategory(item) || null,
539
- item_variant: (item.skuName || item.item_variant || item.name).split(/[-/]/)[0].trim() || null,
540
- item_variant2: item.size || ((_b = item == null ? void 0 : item.itemAttributes) == null ? void 0 : _b.size) || ((_c = (item.skuName || item.name).split(/[-/]/).pop()) == null ? void 0 : _c.trim()) || null,
565
+ item_variant: ((item == null ? void 0 : item.skuName) || (item == null ? void 0 : item.item_variant) || (item == null ? void 0 : item.name)).split(/[-/]/)[0].trim() || null,
566
+ item_variant2: (item == null ? void 0 : item.size) || ((_d = item == null ? void 0 : item.itemAttributes) == null ? void 0 : _d.size) || ((_f = (_e = (item == null ? void 0 : item.skuName) || (item == null ? void 0 : item.name)) == null ? void 0 : _e.split(/[-/]/).pop()) == null ? void 0 : _f.trim()) || null,
541
567
  discount: getDiscount(item),
542
568
  item_list_name: getItemCategory(item) || null,
543
- item_url: item.item_url || null
569
+ item_url: (item == null ? void 0 : item.item_url) || null
544
570
  // add_to_cart dito
545
571
  }
546
572
  ];
@@ -756,9 +782,9 @@ var paramGetters = {
756
782
  return ((_d = (_c = context.orderForm) == null ? void 0 : _c.storePreferencesData) == null ? void 0 : _d.currencyCode) || null;
757
783
  },
758
784
  value: (context, eventName) => {
759
- var _a;
760
- if (context == null ? void 0 : context.value) return context.value;
761
- return context.item ? context.item.price : ((_a = context.orderForm) == null ? void 0 : _a.value) != null ? context.orderForm.value / 100 : null;
785
+ var _a, _b;
786
+ if (context == null ? void 0 : context.value) return toNum(context.value);
787
+ return context.item ? toNum((_a = context.item) == null ? void 0 : _a.price) : ((_b = context.orderForm) == null ? void 0 : _b.value) != null ? context.orderForm.value / 100 : null;
762
788
  },
763
789
  total_discount: (context, eventName) => {
764
790
  var _a, _b;
package/dist/mod.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/constants.ts","../src/adapters/datalayer.ts","../src/core/utils.ts","../src/adapters/dito.ts","../src/adapters/index.ts","../src/params/utils/index.ts","../src/params/resolvers/brand/fromOrderForm.ts","../src/params/resolvers/brand/fromItem.ts","../src/params/brand.ts","../src/params/resolvers/items/fromOrderForm.ts","../src/params/resolvers/items/fromItem.ts","../src/params/resolvers/items/fromList.ts","../src/params/resolvers/items/fromPdp.ts","../src/params/resolvers/items/fromBanner.ts","../src/params/items.ts","../src/params/resolvers/paymentType/fromOrderForm.ts","../src/params/resolvers/paymentType/fromOrderGroup.ts","../src/params/paymentType.ts","../src/params/index.ts","../src/formatter/index.ts","../src/index.ts"],"sourcesContent":["export const EVENTS = {\n CUSTOM_VIEW_CART: {\n name: \"custom_view_cart\",\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"total_discount\",\n \"subtotal\",\n \"items\",\n ],\n },\n\n ADD_TO_WISHLIST: {\n name: \"add_to_wishlist\",\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"items\",\n ],\n },\n\n ADD_TO_CART: {\n name: \"add_to_cart\",\n 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: [\n \"brand\",\n \"region\",\n \"currency\",\n \"promotion_name\",\n \"creative_slot\",\n \"creative_name\",\n \"items\",\n ],\n },\n\n SELECT_PROMOTION: {\n name: \"select_promotion\",\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"currency\",\n \"promotion_name\",\n \"creative_slot\",\n \"creative_name\",\n \"items\",\n ],\n },\n\n SELECT_CONTENT: {\n name: \"select_content\",\n 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 CUSTOM_VIEW_ITEM: { // IO STORES\n name: \"custom_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 destinations: [\"DataLayer\"],\n requiredParams: [\"region\", \"brand\", \"line_items\", \"items\"],\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 CUSTOM_USER_INFO: {\n name: 'custom_user_info',\n destinations: [\"DataLayer\"],\n requiredParams: ['user_info']\n },\n\n NOTIFY_ME: {\n name: 'notify_me',\n destinations: [\"DataLayer\"],\n requiredParams: ['brand', 'line_items', 'size', 'item_ref']\n }\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 \n targetWindow.dataLayer.push({ ecommerce: null })\n targetWindow.dataLayer.push({ event: event, ecommerce: ecommercePayload });\n return;\n }\n\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({ ecommerce: null })\n window.dataLayer.push({ event: event, ecommerce: ecommercePayload });\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 function setCookie(name: string, value: string, days = 7) {\n const encodedValue = encodeURIComponent(value);\n\n let expires = \"\";\n if (days) {\n const date = new Date();\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n expires = \"; expires=\" + date.toUTCString();\n }\n\n document.cookie = `${name}=${encodedValue}${expires}; path=/;`;\n}\n\nexport const paymentTypeMap = [\n ['vale', 'vale crédito'],\n ['pagaleve', 'pix'],\n ['pix parcel', 'pix parcelado'],\n ['pix', 'pix'],\n ['apple', 'apple pay'],\n ['google', 'google pay'],\n ['boleto', 'boleto'],\n ['paypal', 'paypal'],\n ['cred', 'cartão'],\n ['visa', 'cartão'],\n ['master', 'cartão'],\n ['amex', 'cartão'],\n ['elo', 'cartão'],\n ['hiper', 'cartão'],\n ['diner', 'cartão'],\n ['deb', 'cartão'],\n];","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 isPDP(url: string) {\n try {\n const { pathname } = new URL(url, window.location.origin);\n return /\\/p\\/?$/.test(pathname);\n } catch {\n return false;\n }\n}\n\nexport function extractRefIdFromUrl(url: string | null) {\n if (!url) return null;\n\n const path = (() => {\n try { return new URL(url, location.origin).pathname }\n catch { return url.split('?')[0] }\n })();\n\n const match = decodeURIComponent(path).match(/(\\d+-\\d+)(?=\\/p|$)/);\n return match ? match[1].replace('-', '_') : null;\n}\n\nexport async function getProductByRefId(url: string | null) {\n const refId = extractRefIdFromUrl(url);\n if (!refId) return console.error('Não foi possível extrair o RefId da URL'), null;\n\n try {\n const res = await fetch(`/api/catalog_system/pub/products/search?fq=alternateIds_RefId:${refId}`);\n if (!res.ok) throw new Error(`Erro na API: ${res.status}`);\n\n const products = await res.json();\n return products?.[0] || null;\n } catch (err) {\n console.error('Erro ao buscar dados do produto:', err);\n return null;\n }\n}\n\nexport function getItemShippingTier(orderForm: any, item: any) {\n const info = orderForm?.shippingData?.logisticsInfo?.find(\n (li: any) => li.itemId === item.id\n );\n\n const selectedSla = info?.slas?.find((sla: any) => sla.id === info.selectedSla);\n return selectedSla?.pickupStoreInfo?.friendlyName\n ? `retirada em loja: ${selectedSla.pickupStoreInfo.friendlyName}`\n : selectedSla?.name\n ? `Receba em casa: ${selectedSla.name}`\n : null;\n}\n\nexport async function getItemSku(item: any) {\n const product = await getProductDataById(item.productId || item.productID || item.item_group_id);\n\n if (!product.length) return null;\n\n return product[0].items.find((i: any) => i.name === item.skuName)?.itemId ?? null;\n}\n\nexport function getDiscount(item: any) {\n return item.discount || item.discount === 0 ? 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\n const strategies = [\n () => item?.productCategories?.['39'] === 'BAZAR' ? 'Sale' : 'Coleção',\n () => item.item_category || item.category, // deco select_item context\n () => item.categories[0],\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}\n\nexport function getItemCategory2(item: any) {\n const strategies = [\n () => Object.values(item?.productCategories || {}).pop(), // checkout select_item context\n () => (Object.values(item?.categories || {}).pop() as string | undefined)?.slice(1, -1).replace(/\\//g, ','), // \n () => item?.category?.split?.('>')?.[1]?.trim?.(), // deco select_item context\n () => item.item_category2, // deco add_to_cart context PDP\n ];\n\n for (const getValue of strategies) {\n const value = getValue();\n\n if (value !== null && value !== undefined) {\n return value;\n }\n }\n\n return null;\n}\n\nexport function getItemCategory4(item: any) {\n const tags = item?.additionalInfo?.tags || item?.tags;\n return Array.isArray(tags) && tags.length ? tags.join(',') : null;\n}\n\nconst BRAND_CODES = {\n farm: 'farmrio',\n 'farm etc': 'farmetc',\n 'farm rio': 'farmrio',\n} as const;\n\ntype Standardized = keyof typeof BRAND_CODES\ninterface BrandItem {\n brand?: string;\n additionalInfo?: {\n brandName?: string;\n };\n}\n\n/**\n * Extrai o código padronizado (ex: 'farmrio') de uma única string de marca.\n * Retorna null se não houver mapeamento.\n */\nfunction getBrandCode(brand: string | undefined): string | null {\n if (!brand) return null;\n const standardized = brand.toLowerCase().trim();\n return BRAND_CODES[standardized as Standardized] || null;\n}\n\n/**\n * Função principal que padroniza a marca ou lista de marcas para o formato final:\n * 'farmrio', 'farmetc', ou 'farmrio_farmetc'.\n */\nexport function normalizeBrand(input: string | BrandItem[] | BrandItem | string[] | undefined | null) {\n let brandStrings = [];\n\n if (Array.isArray(input) && input.every(item => typeof item === 'string')) {\n brandStrings = input as string[];\n } else if (Array.isArray(input)) {\n // Se for um Array, coleta a string da marca de cada item.\n brandStrings = input.map(item => item.additionalInfo?.brandName || item.brand);\n } else if (typeof input === 'object' && input !== null && 'brand' in input) {\n // Se for um Objeto único, trata como um Array de um único item (para reuso de lógica).\n brandStrings = [(input as BrandItem).additionalInfo?.brandName || (input as BrandItem).brand];\n } else if (typeof input === 'string') {\n // Se for uma String (mal formatada ou não), trata diretamente.\n return getBrandCode(input);\n } else {\n // Se for undefined, null, ou outro tipo não esperado.\n return null;\n }\n\n const brandCodes = brandStrings\n .map(getBrandCode)\n .filter((code): code is string => code !== null); // ['farmrio', 'farmetc', 'farmrio']\n\n const uniqueSortedCodes = [...new Set(brandCodes)].sort(); // ['farmetc', 'farmrio']\n\n // Retorna a combinação ('farmrio', 'farmetc', ou 'farmrio_farmetc').\n return uniqueSortedCodes.length > 0 ? uniqueSortedCodes.join('_') : null;\n}\n","import { normalizeBrand } from '../../utils';\n\nexport function brandFromOrderForm(context: Record<string, any>) {\n if (!context.orderForm && !context.orderForm.items?.length) return null;\n\n const items = context.orderForm.items;\n\n return normalizeBrand(items);\n}\n","import { normalizeBrand } from '../../utils';\n\nexport function brandFromItem(context: Record<string, any>) {\n const { item } = context;\n\n return normalizeBrand(item?.additionalInfo?.brandName || item.brand || item.item_brand);\n}\n","import { brandFromOrderForm } from './resolvers/brand/fromOrderForm';\nimport { brandFromItem } from './resolvers/brand/fromItem';\nimport { normalizeBrand } from './utils';\nimport type { EventContext, EventName } from '../types';\n\n/**\n * Determines the brand for an event by using the context or extracting it based on the event type.\n *\n * Prefers `context.brand` when present; otherwise selects a resolver based on `eventName` to extract the brand.\n *\n * @param context - The event context which may already contain a `brand` or provide data for extraction\n * @param eventName - The event name used to choose the extraction strategy\n * @returns The resolved brand value, or `null` if no brand could be determined\n */\nexport function getBrand(context: EventContext, eventName: EventName) {\n if (context?.brand) return normalizeBrand(context.brand) || context.brand || null;\n\n switch (eventName) {\n case 'CUSTOM_VIEW_CART':\n case 'ADD_COUPON':\n case 'ADD_PERSONAL_INFO':\n case 'CUSTOM_ADD_SHIPPING_INFO':\n case 'CUSTOM_ADD_PAYMENT_INFO':\n case 'BEGIN_CHECKOUT':\n case 'CUSTOM_BEGIN_CHECKOUT':\n case 'SEARCH_ZIPCODE':\n case 'ORDER_REVIEWED':\n case 'PURCHASE':\n case 'CUSTOM_PURCHASE':\n return brandFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'REMOVE_FROM_CART':\n return brandFromItem(context);\n default:\n return null;\n }\n}\n","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.split(' - ').shift() || 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>, event: string) {\n const { item, orderForm } = context;\n return [\n {\n index: 0,\n quantity: 1,\n item_id: item.productId || item.item_group_id || item.sku || null,\n item_category2: getItemCategory2(item),\n item_category4: getItemCategory4(item),\n item_shipping_tier: event === 'REMOVE_FROM_CART' ? getItemShippingTier(orderForm, item) : null,\n price: item.listPrice || parseFloat((item.price / 100).toFixed(2)) || 0,\n item_ref: item.refId || item.item_ref ||item?.additionalProperty.find((i: { name: string }) => i.name === \"RefId\").value || null,\n item_brand: item.additionalInfo?.brandName || item.item_brand || item.brand.name || null,\n item_sku: item.sku || item.id || item.item_id || (await getItemSku(item)) || null,\n item_name: item.name || item.item_name || null,\n item_category: getItemCategory(item) || null,\n item_variant: (item.skuName || item.item_variant || item.name).split(/[-/]/)[0].trim() || null,\n item_variant2: item.size || item?.itemAttributes?.size || (item.skuName || item.name).split(/[-/]/).pop()?.trim() || null,\n discount: getDiscount(item),\n item_list_name: getItemCategory(item) || null,\n\n item_url: item.item_url || null, // add_to_cart dito\n },\n ];\n}\n","import { getDiscount, getItemCategory, getItemCategory2, normalizeBrand } from '../../utils';\n\nexport async function itemsFromList(context: Record<string, any>) {\n return (context?.list || []).map((item: any) => {\n return {\n price: item?.price?.list || item?.price || item?.offers?.lowPrice || item?.priceRange?.listPrice?.highPrice || null,\n quantity: 1,\n item_ref: item?.ref || item?.item_ref || item?.referenceId?.[0].Value || item?.productReference || item?.additionalProperty.find((i: { name: string }) => i.name === \"RefId\").value || null,\n index: typeof context?.index === 'number' ? context.index : Number(item?.index),\n item_brand: item.isNotFarm ? item?.item_brand : normalizeBrand(item?.brand?.name) || normalizeBrand(context.brand) || normalizeBrand(item?.item_brand) || null,\n item_name: item?.productName?.split(' - ').shift() || item?.alternateName?.split(' - ').shift() || item?.item_name?.split(' - ').shift() || item?.seo?.title?.split(' - ').shift() || null,\n item_category: getItemCategory(item) || null,\n item_variant: item?.name?.split(\"-\")?.[0].trim() || item?.item_variant || item?.productName?.split(\"-\")?.[1].trim() || null,\n item_category2: getItemCategory2(item) || null,\n item_id: item?.productID || item?.productId || item?.item_id || item?.id || null,\n discount: getDiscount(item) || null,\n item_list_name: context?.itemListName || getItemCategory(item) || 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, value, brand } = context;\n\n return [\n {\n price: value || 0,\n quantity: 1,\n item_ref: item?.ref || item?.additionalProperty?.find((i: { name: string }) => i.name === \"RefId\").value || item?.productReference || null,\n item_brand: item.isNotFarm ? item?.item_brand : normalizeBrand(item?.brand.name) || normalizeBrand(brand) || null,\n item_name: item?.productName || item?.alternateName || null,\n item_category: getItemCategory(item) || null,\n item_variant: item?.name?.split(\"-\")[0].trim() || null,\n item_category2: getItemCategory2(item) || item?.category?.split(\">\")[1]?.trim() || null,\n item_id: item?.productID || item?.productId || item?.item_group_id || null,\n discount: getDiscount(item) || null,\n\n // dito params view_item\n item_sku: item?.sku || item?.productId || null,\n item_url: item?.url || item?.item_url || item?.link || null,\n seller_id: item?.seller || null\n },\n ];\n}\n","import {\n isPDP,\n normalizeBrand,\n getItemCategory,\n getItemCategory2,\n getProductByRefId,\n extractRefIdFromUrl,\n} from '../../utils';\n\nexport async function itemsFromBanner(context: Record<string, any>) {\n const isUrlFromPDP = isPDP(context?.bannerUrl);\n\n if (!isUrlFromPDP) return [];\n\n const product = await getProductByRefId(context?.bannerUrl);\n\n const item = product?.items[0];\n\n return {\n price: item?.sellers[0].commertialOffer.Price || 0,\n quantity: 1,\n item_ref: extractRefIdFromUrl(context?.bannerUrl),\n item_brand: normalizeBrand(product.brand) || null,\n item_name: product?.productName || product?.alternateName || product?.item_name || null,\n item_category: getItemCategory(product) || null,\n item_variant: item?.name?.split(\"-\").pop().trim() || null,\n item_category2: getItemCategory2(product) || null,\n item_id: product?.productId || null,\n discount: item?.sellers[0].commertialOffer.ListPrice - item?.sellers[0].commertialOffer.Price || null,\n }\n}\n","import { itemsFromOrderForm } from './resolvers/items/fromOrderForm';\nimport { itemsFromItem } from './resolvers/items/fromItem';\nimport { itemsFromList } from './resolvers/items/fromList';\nimport { itemsFromPDP } from './resolvers/items/fromPdp';\nimport { itemsFromBanner } from './resolvers/items/fromBanner';\n\n/**\n * Selects the appropriate item resolver based on the event name and returns its result.\n *\n * @param context - Runtime context passed to the selected resolver\n * @param eventName - Event identifier that determines which resolver to use\n * @returns The resolved items for the event, or `null` if the event is not recognized\n */\nexport function getItems(context: Record<string, any>, eventName: string) {\n if (context?.items) return context.items;\n\n switch (eventName) {\n case 'CUSTOM_VIEW_CART':\n case 'BEGIN_CHECKOUT':\n case 'CUSTOM_BEGIN_CHECKOUT':\n case 'CUSTOM_ADD_SHIPPING_INFO':\n case 'CUSTOM_ADD_PAYMENT_INFO':\n case 'PURCHASE':\n case 'CUSTOM_PURCHASE':\n return itemsFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'ADD_TO_WISHLIST':\n case 'REMOVE_FROM_CART':\n return itemsFromItem(context, eventName);\n case 'SELECT_ITEM':\n case 'VIEW_ITEM_LIST':\n return itemsFromList(context)\n case 'VIEW_ITEM':\n case 'CUSTOM_VIEW_ITEM':\n return itemsFromPDP(context)\n case 'VIEW_PROMOTION':\n case 'SELECT_PROMOTION':\n return itemsFromBanner(context)\n default:\n return null;\n }\n}\n","import { paymentTypeMap } from \"../../../core/utils\";\n\nexport function paymentTypeFromOrderForm(context: Record<string, any>) {\n if (!context.orderForm) return null;\n\n const payments = context.orderForm.paymentData?.payments || [];\n const systems = context.orderForm.paymentData?.paymentSystems || [];\n if (!payments.length || !systems.length) return null;\n\n const selectedPayment = payments.find((p: { paymentSystem: string }) => p?.paymentSystem) || payments[0];\n const id = String(selectedPayment?.paymentSystem || '').trim();\n if (!id) return null;\n\n const system = systems.find((s: { id: string }) => String(s.id) === id);\n const name = system?.name?.toLowerCase() || '';\n const match = paymentTypeMap.find(([key]) => name.includes(key));\n\n return match ? match[1] : null;\n}\n","import { paymentTypeMap } from \"../../../core/utils\";\n\nexport function paymentTypeFromOrderGroup(context: Record<string, any>) {\n if (!context.orderForm) return null;\n\n const transactions = context.orderForm.paymentData?.transactions || [];\n if (!transactions.length) return null;\n\n const payments = transactions[0]?.payments || [];\n if (!payments.length) return null;\n\n const name = payments[0]?.paymentSystemName?.toLowerCase() || '';\n const match = paymentTypeMap.find(([key]) => name.includes(key));\n\n return match ? match[1] : null;\n}\n","import { paymentTypeFromOrderForm } from './resolvers/paymentType/fromOrderForm';\nimport { paymentTypeFromOrderGroup } from './resolvers/paymentType/fromOrderGroup';\n\n/**\n * Selects the appropriate payment_type resolver based on the event name and returns its result.\n *\n * @param context - Runtime context passed to the selected resolver\n * @param eventName - Event identifier that determines which resolver to use\n * @returns The resolved payment_type for the event, or `null` if the event is not recognized\n */\nexport function getPaymentType(context: Record<string, any>, eventName: string) {\n if (context?.paymentType) return context.paymentType;\n\n switch (eventName) {\n case 'ORDER_REVIEWED':\n case 'CUSTOM_ADD_PAYMENT_INFO':\n return paymentTypeFromOrderForm(context);\n case 'PURCHASE':\n case 'CUSTOM_PURCHASE':\n return paymentTypeFromOrderGroup(context)\n default:\n return null;\n }\n}\n","import 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 user_info: async (context: EventContext, eventName: EventName) => {\n const PROD_DOMAINS: Record<string, Record<string, string>> = {\n \"animale\": {\n \"store\": \"https://www.animale.com.br\",\n \"checkout\": \"https://secure.animale.com.br\",\n },\n \"farm\": {\n \"store\": \"https://lojafarm.myvtex.com\"\n },\n \"mariafilo\": {\n \"store\": \"https://mariafilo.myvtex.com\",\n \"checkout\": \"https://secure.mariafilo.com.br\",\n },\n \"lojacrisbarros\": {\n \"store\": \"https://lojacrisbarros.myvtex.com\",\n \"checkout\": \"https://secure.crisbarros.com.br\",\n },\n \"lojaoffpremium\": {\n \"store\": \"https://lojaoffpremium.myvtex.com\",\n \"checkout\": \"https://secure.lojaoffpremium.com.br\",\n },\n };\n\n const domain = PROD_DOMAINS[context.account || 'https://www.animale.com.br']?.[context.platform || 'store'];\n\n if (!domain) return { customer: { email: context.userEmail, id: context?.userId }, address: null };\n\n try {\n const api = `${domain}/_v/user-info`;\n const response = await fetch(api, {\n method: 'POST',\n body: JSON.stringify({ email: context.userEmail })\n });\n\n if (response.status !== 200) {\n return { customer: { email: context.userEmail, id: context?.userId }, address: null };\n }\n\n return await response.json();\n } catch (_) {\n return { customer: { email: context.userEmail, id: context?.userId }, address: null };\n }\n },\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 || context.item.item_id];\n }\n\n if (context?.list) {\n return context.list.map((item: { productID: string, id: string, productId: string }) => item?.productID || item?.id || item?.productId)\n }\n\n return (context.orderForm.items || [])\n .map((item: EventContext) => item.productId)\n .join(',');\n },\n\n currency: (context: EventContext, eventName: EventName) => {\n if (context?.currency) return context.currency\n\n if (context?.bannerUrl) return 'BRL'\n\n if (context?.item) {\n return context.item?.offers?.priceCurrency || 'BRL'\n }\n\n return context.orderForm?.storePreferencesData?.currencyCode || null;\n },\n\n value: (context: EventContext, eventName: EventName) => {\n if (context?.value) return 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 items = context.orderForm.items;\n\n const totalDiscount = items.reduce((acc: number, item: { quantity: number, listPrice: number, sellingPrice: number }) => {\n const unitDiscount = Math.max(0, item.listPrice - item.sellingPrice);\n return acc + (unitDiscount * item.quantity);\n }, 0);\n\n const discounts = totalsList.find((t: { id: string }) => t.id === 'Discounts');\n return Math.abs((discounts?.value || 0) + totalDiscount) / 100 || null;\n },\n\n subtotal: (context: EventContext, eventName: EventName) => {\n const totalsList = context.orderForm?.totalizers || context.orderForm?.totals || []; // totals for ordergroup and orderform have different names\n\n const subtotal =\n totalsList\n .filter((t: EventContext) => t.id === 'Items')\n .reduce((acc: number, t: EventContext) => acc + (t.value || 0), 0) / 100 || 0;\n\n return subtotal\n },\n\n coupon_message: (context: EventContext, eventName: EventName) => {\n if (context.couponMessage) return context.couponMessage;\n\n const messages = context.orderForm?.messages || [];\n\n if (messages.length === 0) return null;\n\n const couponMessages = messages.filter((msg: EventContext) =>\n msg.text.toLowerCase().includes('cupom')\n );\n\n if (couponMessages.length === 0) return null;\n\n return couponMessages.map((msg: EventContext) => msg.text).join(' | ');\n },\n\n seller_cod_name: (context: EventContext, eventName: EventName) => {\n return context.appliedSellerCodName || context?.orderForm.marketingData.utmiCampaign || null;\n },\n\n coupon: (context: EventContext, eventName: EventName) => {\n return context.appliedCoupon || context?.orderForm?.marketingData?.coupon || null;\n },\n\n pre_filled: (context: EventContext, eventName: EventName) => {\n return !!context.preFilled;\n },\n\n search_term: (context: EventContext, eventName: EventName) => {\n return context.searchTerm || null;\n },\n\n search_found: (context: EventContext, eventName: EventName) => {\n return !!context.searchFound;\n },\n\n search_quantity: (context: EventContext, eventName: EventName) => {\n return context.searchQuantity || 0;\n },\n\n promotion_name: (context: EventContext, eventName: EventName) => {\n return context.promotionName || null;\n },\n\n creative_name: (context: EventContext, eventName: EventName) => {\n return context.creativeName || null;\n },\n\n creative_slot: (context: EventContext, eventName: EventName) => {\n return context.creativeSlot || null;\n },\n\n zipcode: (context: EventContext, eventName: EventName) => {\n return context.zipCode || null;\n },\n\n size: (context: EventContext, eventName: EventName) => {\n return context.size || null;\n },\n\n item_ref: (context: EventContext, eventName: EventName) => {\n return context.itemRef || null;\n },\n\n flag_pickup: (context: EventContext, eventName: EventName) => {\n const orderForm = context.orderForm;\n if (!orderForm) return null;\n\n const logisticsInfo = orderForm.shippingData?.logisticsInfo || [];\n const hasPickup = logisticsInfo.some((info: LogisticInfo) =>\n info.slas?.some((sla) => sla.deliveryChannel === 'pickup-in-point')\n );\n\n return hasPickup\n },\n\n shippings: (context: EventContext, eventName: EventName) => {\n const orderForm = context.orderForm;\n if (!orderForm) return null;\n\n const groupShipping: Record<string, any> = {};\n\n for (const info of orderForm.shippingData.logisticsInfo) {\n const item = orderForm.items[info.itemIndex]\n if (!item) continue\n\n for (const sla of info.slas) {\n const key = sla.name\n\n if (!groupShipping[key]) {\n groupShipping[key] = {\n shipping_tier: sla.name,\n delivery_time: parseInt(sla.shippingEstimate),\n shipping: parseFloat((sla.price / 100).toFixed(1)),\n line_items: []\n }\n }\n\n groupShipping[key].line_items.push(item.id)\n }\n }\n\n const shippings = Object.values(groupShipping).map((s) => ({\n shipping: s.shipping,\n shipping_tier: s.shipping_tier,\n delivery_time: s.delivery_time,\n line_items: s.line_items.join(',')\n }))\n\n return shippings || null\n },\n\n shipping: (context: EventContext, eventName: EventName) => {\n const logistics = context?.orderForm?.shippingData?.logisticsInfo ?? []\n return logistics.reduce((total: number, item: any) => {\n const selected = item.slas?.find((sla: any) => sla.id === item.selectedSla)\n return total + (selected?.price ?? 0)\n }, 0)\n },\n\n shipping_tier: (context: EventContext, eventName: EventName) => {\n const logistics = context?.orderForm?.shippingData?.logisticsInfo ?? []\n const 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","import { dispatchTrackEvent } from './adapters';\nimport { getParameters } from './formatter';\nimport { EVENTS } from './core/constants';\nimport type { EventContext, EventName } from './types';\n\n/**\n * Assembles tracking parameters and sends a web tracking event.\n *\n * @param event - The name of the event to track.\n * @param context - Optional context used to build event parameters; may include a `window` property that will be attached to the dispatched payload.\n * @returns The result returned by `dispatchTrackEvent` when the event is sent successfully, or the value returned by `console.error` (`undefined`) if an error occurs.\n */\nasync function trackWebEvent(event: EventName, context: EventContext = {}) {\n try {\n // object data to be sent\n const parameters = await getParameters(context, event);\n\n // function to send event\n return await dispatchTrackEvent(\n event,\n Object.assign({}, parameters, { window: context.window })\n );\n } catch (err) {\n return console.error(`[DT] Error tracking event ${event}:`, err);\n }\n}\n\nexport { trackWebEvent, EVENTS };\n\nexport default {\n trackWebEvent,\n EVENTS,\n}\n"],"mappings":"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","names":["_a","_a","_a","_b"]}
1
+ {"version":3,"sources":["../src/core/constants.ts","../src/adapters/datalayer.ts","../src/core/utils.ts","../src/adapters/dito.ts","../src/adapters/index.ts","../src/params/utils/index.ts","../src/params/resolvers/brand/fromOrderForm.ts","../src/params/resolvers/brand/fromItem.ts","../src/params/brand.ts","../src/params/resolvers/items/fromOrderForm.ts","../src/params/resolvers/items/fromItem.ts","../src/params/resolvers/items/fromList.ts","../src/params/resolvers/items/fromPdp.ts","../src/params/resolvers/items/fromBanner.ts","../src/params/items.ts","../src/params/resolvers/paymentType/fromOrderForm.ts","../src/params/resolvers/paymentType/fromOrderGroup.ts","../src/params/paymentType.ts","../src/params/index.ts","../src/formatter/index.ts","../src/index.ts"],"sourcesContent":["export const EVENTS = {\n CUSTOM_VIEW_CART: {\n name: \"custom_view_cart\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"total_discount\",\n \"subtotal\",\n \"items\",\n ],\n },\n\n ADD_TO_WISHLIST: {\n name: \"add_to_wishlist\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"items\",\n ],\n },\n\n ADD_TO_CART: {\n name: \"add_to_cart\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"items\",\n ],\n },\n\n REMOVE_FROM_CART: {\n name: \"remove_from_cart\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"items\",\n ],\n },\n\n ADD_COUPON: {\n name: \"add_coupon\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"coupon\",\n \"coupon_message\",\n \"seller_cod_name\",\n ],\n },\n\n SEARCH: {\n name: \"search\",\n hasEcommerce: false,\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"search_term\", \"search_found\", \"search_quantity\"],\n },\n\n SEARCH_ZIPCODE: {\n name: 'search_zipcode',\n hasEcommerce: false,\n destinations: ['DataLayer'],\n requiredParams: ['brand', 'region', 'shippings', 'zipcode', 'flag_pickup'],\n },\n\n VIEW_PROMOTION: {\n name: \"view_promotion\",\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"currency\",\n \"promotion_name\",\n \"creative_slot\",\n \"creative_name\",\n \"items\",\n ],\n },\n\n SELECT_PROMOTION: {\n name: \"select_promotion\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"currency\",\n \"promotion_name\",\n \"creative_slot\",\n \"creative_name\",\n \"items\",\n ],\n },\n\n SELECT_CONTENT: {\n name: \"select_content\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", 'content_type'],\n },\n\n SELECT_ITEM: {\n name: \"select_item\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"region\", \"items\", \"line_items\"],\n },\n\n VIEW_ITEM: {\n name: \"view_item\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"available_grid\",\n \"items\",\n ],\n },\n\n CUSTOM_VIEW_ITEM: { // IO STORES\n name: \"custom_view_item\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"available_grid\",\n \"items\",\n ],\n },\n\n VIEW_ITEM_LIST: {\n name: \"view_item_list\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\"region\", \"brand\", \"line_items\", \"items\"],\n },\n\n BEGIN_CHECKOUT: {\n name: \"begin_checkout\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\", \"items\"],\n },\n\n CUSTOM_BEGIN_CHECKOUT: {\n name: \"custom_begin_checkout\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\", \"items\"],\n },\n\n AUTH_ACTION: {\n name: \"auth_action\",\n hasEcommerce: false,\n requiredParams: [\"region\"],\n },\n\n ADD_PERSONAL_INFO: {\n name: \"add_personal_info\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"pre_filled\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\"],\n },\n\n CUSTOM_ADD_SHIPPING_INFO: {\n name: \"add_shipping_info\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"pre_filled\",\n \"shipping\",\n \"shipping_tier\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"total_discount\",\n \"subtotal\",\n \"items\"\n ],\n },\n\n CUSTOM_ADD_PAYMENT_INFO: {\n name: \"add_payment_info\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"pre_filled\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"total_discount\",\n \"payment_type\",\n \"subtotal\",\n \"items\"\n ],\n },\n\n ORDER_REVIEWED: {\n name: \"order_reviewed\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\", \"payment_type\"],\n },\n\n PURCHASE: {\n name: \"purchase\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n 'brand',\n 'shipping_tier',\n 'line_items',\n 'currency',\n 'value',\n 'shipping',\n 'transaction_id',\n 'total_discount',\n 'payment_type',\n 'seller_cod_name',\n 'subtotal',\n 'coupon',\n 'items'\n ],\n },\n\n CUSTOM_PURCHASE: {\n name: \"custom_purchase\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n 'brand',\n 'shipping_tier',\n 'line_items',\n 'currency',\n 'value',\n 'shipping',\n 'transaction_id',\n 'total_discount',\n 'payment_type',\n 'seller_cod_name',\n 'subtotal',\n 'coupon',\n 'items'\n ],\n },\n\n CUSTOM_USER_INFO: {\n name: 'custom_user_info',\n hasEcommerce: false,\n destinations: [\"DataLayer\"],\n requiredParams: ['user_info']\n },\n\n NOTIFY_ME: {\n name: 'notify_me',\n hasEcommerce: false,\n destinations: [\"DataLayer\"],\n requiredParams: ['brand', 'line_items', 'size', 'item_ref']\n }\n};\n","import type { EventContext, EventName } from \"../types\";\nimport { EVENTS } from \"../core/constants\";\n\n/**\n * Pushes an ecommerce tracking event to the appropriate dataLayer and logs the payload.\n *\n * Ensures a dataLayer array exists on the target (prefer `ecomm.window` if present, otherwise the global `window`)\n * and pushes an object containing `event` and the `ecomm` payload. Also logs the pushed payload for debugging.\n *\n * @param event - The tracking event name to push\n * @param context - The event context payload; if it contains a `window` property that object's `dataLayer` will be used as the target\n */\nexport function pushToDataLayer(event: string, context: EventContext) {\n const targetWindow = context.window || (typeof window !== 'undefined' ? window : null);\n if (!targetWindow) return;\n\n const payload = Object.assign({}, context);\n delete payload.window; // delete window prop and avoid to push as payload to dayalayer\n\n const eventName = event.toUpperCase() as EventName;\n const eventConfig = EVENTS[eventName] as { hasEcommerce: boolean };\n\n targetWindow.dataLayer = targetWindow.dataLayer || [];\n\n if (eventConfig?.hasEcommerce) {\n targetWindow.dataLayer.push({ ecommerce: null });\n targetWindow.dataLayer.push({ event: event, ecommerce: payload });\n } else {\n targetWindow.dataLayer.push({ event: event, ...payload });\n }\n}","import { EventContext } from \"../types\";\n\nexport function dataTrackingLog(data: EventContext, color: string) {\n console.log(\n `%c[DT] EVENTO DISPARADO:%c `,\n `background: ${color}; color: white; font-weight: bold; padding: 2px 4px; border-radius: 3px;`,\n 'color: #fff;',\n data || ''\n );\n}\n\nexport function setCookie(name: string, value: string, days = 7) {\n const encodedValue = encodeURIComponent(value);\n\n let expires = \"\";\n if (days) {\n const date = new Date();\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n expires = \"; expires=\" + date.toUTCString();\n }\n\n document.cookie = `${name}=${encodedValue}${expires}; path=/;`;\n}\n\nexport const paymentTypeMap = [\n ['vale', 'vale crédito'],\n ['pagaleve', 'pix'],\n ['pix parcel', 'pix parcelado'],\n ['pix', 'pix'],\n ['apple', 'apple pay'],\n ['google', 'google pay'],\n ['boleto', 'boleto'],\n ['paypal', 'paypal'],\n ['cred', 'cartão'],\n ['visa', 'cartão'],\n ['master', 'cartão'],\n ['amex', 'cartão'],\n ['elo', 'cartão'],\n ['hiper', 'cartão'],\n ['diner', 'cartão'],\n ['deb', 'cartão'],\n];\n\n\nexport const toNum = (val: unknown) => typeof val === 'string' ? Number(val.replace(/[^\\d,]/g, '').replace(',', '.')) : val","import { dataTrackingLog } from \"../core/utils\";\nimport type { EventContext } from \"../types\";\n\nexport function pushToDito(event: string, ecomm: EventContext) {\n dataTrackingLog({ id: event, custom_data: ecomm }, '#00c851');\n}","import { EVENTS } from '../core/constants';\nimport { pushToDataLayer } from './datalayer';\nimport { pushToDito } from './dito';\n\nimport type { EventName, EventContext } from '../types'\n\nconst adapters = {\n DataLayer: pushToDataLayer,\n Dito: pushToDito,\n};\n\ntype AdapterKey = keyof typeof adapters;\n\n/**\n * Dispatches a tracking event to all destinations configured for the given event.\n *\n * Looks up destinations from the EVENTS configuration, calls each destination adapter\n * in parallel (providing the event name in lowercase and the supplied context), and\n * waits for all attempts to settle. Individual adapter failures are logged with the\n * \"[DT]\" prefix but do not prevent other destinations from running.\n *\n * @param eventName - The name of the event to dispatch\n * @param data - The event context/payload to send to adapters\n */\nexport async function dispatchTrackEvent(eventName: EventName, data: EventContext) {\n const eventConfig = EVENTS[eventName] as { destinations: string[] };\n\n if (!eventConfig) return;\n\n await Promise.allSettled(\n eventConfig.destinations.map(async (dest: string) => {\n try {\n // call the adapter function based on the destination mapped in the adapters object\n // eventName is converted to lowercase to match the expected format in all adapters\n await adapters[dest as AdapterKey](eventName.toLowerCase(), data);\n } catch (err) {\n console.error(`[DT] Failed to send ${eventName} to ${dest}:`, err);\n }\n })\n );\n}\n","/**\n * Fetches product data for the given product id from the catalog API.\n *\n * @param id - The product identifier used as the `productId` query filter\n * @returns The parsed JSON response containing product data, or `undefined` if the request fails\n */\nexport async function getProductDataById(id: any) {\n try {\n const response = await fetch(\n `/api/catalog_system/pub/products/search?fq=productId:${id}`\n );\n\n return await response.json();\n } catch (e) {\n console.log('[DT] Erro ao buscar dados do produto', e);\n }\n}\n\nexport function isPDP(url: string) {\n try {\n const { pathname } = new URL(url, window.location.origin);\n return /\\/p\\/?$/.test(pathname);\n } catch {\n return false;\n }\n}\n\nexport function extractRefIdFromUrl(url: string | null) {\n if (!url) return null;\n\n const path = (() => {\n try { return new URL(url, location.origin).pathname }\n catch { return url.split('?')[0] }\n })();\n\n const match = decodeURIComponent(path).match(/(\\d+-\\d+)(?=\\/p|$)/);\n return match ? match[1].replace('-', '_') : null;\n}\n\nexport async function getProductByRefId(url: string | null) {\n const refId = extractRefIdFromUrl(url);\n if (!refId) return console.error('Não foi possível extrair o RefId da URL'), null;\n\n try {\n const res = await fetch(`/api/catalog_system/pub/products/search?fq=alternateIds_RefId:${refId}`);\n if (!res.ok) throw new Error(`Erro na API: ${res.status}`);\n\n const products = await res.json();\n return products?.[0] || null;\n } catch (err) {\n console.error('Erro ao buscar dados do produto:', err);\n return null;\n }\n}\n\nexport function getItemShippingTier(orderForm: any, item: any) {\n const info = orderForm?.shippingData?.logisticsInfo?.find(\n (li: any) => li.itemId === item.id\n );\n\n const selectedSla = info?.slas?.find((sla: any) => sla.id === info.selectedSla);\n return selectedSla?.pickupStoreInfo?.friendlyName\n ? `retirada em loja: ${selectedSla.pickupStoreInfo.friendlyName}`\n : selectedSla?.name\n ? `Receba em casa: ${selectedSla.name}`\n : null;\n}\n\nexport async function getItemSku(item: any) {\n const product = await getProductDataById(item.productId || item.productID || item.item_group_id);\n\n if (!product.length) return null;\n\n return product[0].items.find((i: any) => i.name === item.skuName)?.itemId ?? null;\n}\n\nexport function getDiscount(item: any) {\n return item.discount || item.discount === 0 ? 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\n const strategies = [\n () => item?.productCategories?.['39'] === 'BAZAR' ? 'Sale' : 'Coleção',\n () => item.item_category || item.category, // deco select_item context\n () => item.categories[0],\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}\n\nexport function getItemCategory2(item: any) {\n const strategies = [\n () => Object.values(item?.productCategories || {}).pop(), // checkout select_item context\n () => (Object.values(item?.categories || {}).pop() as string | undefined)?.slice(1, -1).replace(/\\//g, ','), // \n () => item?.category?.split?.('>')?.[1]?.trim?.(), // deco select_item context\n () => item.item_category2, // deco add_to_cart context PDP\n ];\n\n for (const getValue of strategies) {\n const value = getValue();\n\n if (value !== null && value !== undefined) {\n return value;\n }\n }\n\n return null;\n}\n\nexport function getItemCategory4(item: any) {\n const tags = item?.additionalInfo?.tags || item?.tags;\n return Array.isArray(tags) && tags.length ? tags.join(',') : null;\n}\n\nconst BRAND_CODES = {\n farm: 'farmrio',\n 'farm etc': 'farmetc',\n 'farm rio': 'farmrio',\n} as const;\n\ntype Standardized = keyof typeof BRAND_CODES\ninterface BrandItem {\n brand?: string;\n additionalInfo?: {\n brandName?: string;\n };\n}\n\n/**\n * Extrai o código padronizado (ex: 'farmrio') de uma única string de marca.\n * Retorna null se não houver mapeamento.\n */\nfunction getBrandCode(brand: string | undefined): string | null {\n if (!brand) return null;\n const standardized = brand.toLowerCase().trim();\n return BRAND_CODES[standardized as Standardized] || null;\n}\n\n/**\n * Função principal que padroniza a marca ou lista de marcas para o formato final:\n * 'farmrio', 'farmetc', ou 'farmrio_farmetc'.\n */\nexport function normalizeBrand(input: string | BrandItem[] | BrandItem | string[] | undefined | null) {\n let brandStrings = [];\n\n if (Array.isArray(input) && input.every(item => typeof item === 'string')) {\n brandStrings = input as string[];\n } else if (Array.isArray(input)) {\n // Se for um Array, coleta a string da marca de cada item.\n brandStrings = input.map(item => item.additionalInfo?.brandName || item.brand);\n } else if (typeof input === 'object' && input !== null && 'brand' in input) {\n // Se for um Objeto único, trata como um Array de um único item (para reuso de lógica).\n brandStrings = [(input as BrandItem).additionalInfo?.brandName || (input as BrandItem).brand];\n } else if (typeof input === 'string') {\n // Se for uma String (mal formatada ou não), trata diretamente.\n return getBrandCode(input);\n } else {\n // Se for undefined, null, ou outro tipo não esperado.\n return null;\n }\n\n const brandCodes = brandStrings\n .map(getBrandCode)\n .filter((code): code is string => code !== null); // ['farmrio', 'farmetc', 'farmrio']\n\n const uniqueSortedCodes = [...new Set(brandCodes)].sort(); // ['farmetc', 'farmrio']\n\n // Retorna a combinação ('farmrio', 'farmetc', ou 'farmrio_farmetc').\n return uniqueSortedCodes.length > 0 ? uniqueSortedCodes.join('_') : null;\n}\n","import { normalizeBrand } from '../../utils';\n\nexport function brandFromOrderForm(context: Record<string, any>) {\n if (!context.orderForm && !context.orderForm.items?.length) return null;\n\n const items = context.orderForm.items;\n\n return normalizeBrand(items);\n}\n","import { normalizeBrand } from '../../utils';\n\nexport function brandFromItem(context: Record<string, any>) {\n const { item } = context;\n\n return normalizeBrand(item?.additionalInfo?.brandName || item.brand || item.item_brand);\n}\n","import { brandFromOrderForm } from './resolvers/brand/fromOrderForm';\nimport { brandFromItem } from './resolvers/brand/fromItem';\nimport { normalizeBrand } from './utils';\nimport type { EventContext, EventName } from '../types';\n\n/**\n * Determines the brand for an event by using the context or extracting it based on the event type.\n *\n * Prefers `context.brand` when present; otherwise selects a resolver based on `eventName` to extract the brand.\n *\n * @param context - The event context which may already contain a `brand` or provide data for extraction\n * @param eventName - The event name used to choose the extraction strategy\n * @returns The resolved brand value, or `null` if no brand could be determined\n */\nexport function getBrand(context: EventContext, eventName: EventName) {\n if (context?.brand) return normalizeBrand(context.brand) || context.brand || null;\n\n switch (eventName) {\n case 'CUSTOM_VIEW_CART':\n case 'ADD_COUPON':\n case 'ADD_PERSONAL_INFO':\n case 'CUSTOM_ADD_SHIPPING_INFO':\n case 'CUSTOM_ADD_PAYMENT_INFO':\n case 'BEGIN_CHECKOUT':\n case 'CUSTOM_BEGIN_CHECKOUT':\n case 'SEARCH_ZIPCODE':\n case 'ORDER_REVIEWED':\n case 'PURCHASE':\n case 'CUSTOM_PURCHASE':\n return brandFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'REMOVE_FROM_CART':\n return brandFromItem(context);\n default:\n return null;\n }\n}\n","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.split(' - ').shift() || 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>, event: string) {\n const { item, orderForm } = context;\n return [\n {\n index: 0,\n quantity: 1,\n item_id: item?.productId || item?.item_group_id || item?.sku || null,\n item_category2: getItemCategory2(item),\n item_category4: getItemCategory4(item),\n item_shipping_tier: event === 'REMOVE_FROM_CART' ? getItemShippingTier(orderForm, item) : null,\n price: item?.listPrice || item?.price || 0,\n item_ref: item?.refId || item?.item_ref || item?.additionalProperty?.find((i: { name: string }) => i.name === \"RefId\").value || null,\n item_brand: item?.additionalInfo?.brandName || item?.item_brand || item?.brand?.name || null,\n item_sku: item?.sku || item?.id || item?.item_id || (await getItemSku(item)) || null,\n item_name: item?.name || item?.item_name || null,\n item_category: getItemCategory(item) || null,\n item_variant: (item?.skuName || item?.item_variant || item?.name).split(/[-/]/)[0].trim() || null,\n item_variant2: item?.size || item?.itemAttributes?.size || (item?.skuName || item?.name)?.split(/[-/]/).pop()?.trim() || null,\n discount: getDiscount(item),\n item_list_name: getItemCategory(item) || null,\n\n item_url: item?.item_url || null, // add_to_cart dito\n },\n ];\n}\n","import { getDiscount, getItemCategory, getItemCategory2, normalizeBrand } from '../../utils';\n\nexport async function itemsFromList(context: Record<string, any>) {\n return (context?.list || []).map((item: any) => {\n return {\n price: item?.price?.list || item?.price || item?.offers?.lowPrice || item?.priceRange?.listPrice?.highPrice || null,\n quantity: 1,\n item_ref: item?.ref || item?.item_ref || item?.referenceId?.[0].Value || item?.productReference || item?.additionalProperty.find((i: { name: string }) => i.name === \"RefId\").value || null,\n index: typeof context?.index === 'number' ? context.index : Number(item?.index),\n item_brand: item.isNotFarm ? item?.item_brand : normalizeBrand(item?.brand?.name) || normalizeBrand(context.brand) || normalizeBrand(item?.item_brand) || null,\n item_name: item?.productName?.split(' - ').shift() || item?.alternateName?.split(' - ').shift() || item?.item_name?.split(' - ').shift() || item?.seo?.title?.split(' - ').shift() || null,\n item_category: getItemCategory(item) || null,\n item_variant: item?.name?.split(\"-\")?.[0].trim() || item?.item_variant || item?.productName?.split(\"-\")?.[1].trim() || null,\n item_category2: getItemCategory2(item) || null,\n item_id: item?.productID || item?.productId || item?.item_id || item?.id || null,\n discount: getDiscount(item) || null,\n item_list_name: context?.itemListName || getItemCategory(item) || 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, value, brand } = context;\n\n return [\n {\n price: value || 0,\n quantity: 1,\n item_ref: item?.ref || item?.additionalProperty?.find((i: { name: string }) => i.name === \"RefId\").value || item?.productReference || null,\n item_brand: item.isNotFarm ? item?.item_brand : normalizeBrand(item?.brand.name) || normalizeBrand(brand) || null,\n item_name: item?.productName || item?.alternateName || null,\n item_category: getItemCategory(item) || null,\n item_variant: item?.name?.split(\"-\")[0].trim() || null,\n item_category2: getItemCategory2(item) || item?.category?.split(\">\")[1]?.trim() || null,\n item_id: item?.productID || item?.productId || item?.item_group_id || null,\n discount: getDiscount(item) || null,\n\n // dito params view_item\n item_sku: item?.sku || item?.productId || null,\n item_url: item?.url || item?.item_url || item?.link || null,\n seller_id: item?.seller || null\n },\n ];\n}\n","import {\n isPDP,\n normalizeBrand,\n getItemCategory,\n getItemCategory2,\n getProductByRefId,\n extractRefIdFromUrl,\n} from '../../utils';\n\nexport async function itemsFromBanner(context: Record<string, any>) {\n const isUrlFromPDP = isPDP(context?.bannerUrl);\n\n if (!isUrlFromPDP) return [];\n\n const product = await getProductByRefId(context?.bannerUrl);\n\n const item = product?.items[0];\n\n return {\n price: item?.sellers[0].commertialOffer.Price || 0,\n quantity: 1,\n item_ref: extractRefIdFromUrl(context?.bannerUrl),\n item_brand: normalizeBrand(product.brand) || null,\n item_name: product?.productName || product?.alternateName || product?.item_name || null,\n item_category: getItemCategory(product) || null,\n item_variant: item?.name?.split(\"-\").pop().trim() || null,\n item_category2: getItemCategory2(product) || null,\n item_id: product?.productId || null,\n discount: item?.sellers[0].commertialOffer.ListPrice - item?.sellers[0].commertialOffer.Price || null,\n }\n}\n","import { itemsFromOrderForm } from './resolvers/items/fromOrderForm';\nimport { itemsFromItem } from './resolvers/items/fromItem';\nimport { itemsFromList } from './resolvers/items/fromList';\nimport { itemsFromPDP } from './resolvers/items/fromPdp';\nimport { itemsFromBanner } from './resolvers/items/fromBanner';\n\n/**\n * Selects the appropriate item resolver based on the event name and returns its result.\n *\n * @param context - Runtime context passed to the selected resolver\n * @param eventName - Event identifier that determines which resolver to use\n * @returns The resolved items for the event, or `null` if the event is not recognized\n */\nexport function getItems(context: Record<string, any>, eventName: string) {\n if (context?.items) return context.items;\n\n switch (eventName) {\n case 'CUSTOM_VIEW_CART':\n case 'BEGIN_CHECKOUT':\n case 'CUSTOM_BEGIN_CHECKOUT':\n case 'CUSTOM_ADD_SHIPPING_INFO':\n case 'CUSTOM_ADD_PAYMENT_INFO':\n case 'PURCHASE':\n case 'CUSTOM_PURCHASE':\n return itemsFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'ADD_TO_WISHLIST':\n case 'REMOVE_FROM_CART':\n return itemsFromItem(context, eventName);\n case 'SELECT_ITEM':\n case 'VIEW_ITEM_LIST':\n return itemsFromList(context)\n case 'VIEW_ITEM':\n case 'CUSTOM_VIEW_ITEM':\n return itemsFromPDP(context)\n case 'VIEW_PROMOTION':\n case 'SELECT_PROMOTION':\n return itemsFromBanner(context)\n default:\n return null;\n }\n}\n","import { paymentTypeMap } from \"../../../core/utils\";\n\nexport function paymentTypeFromOrderForm(context: Record<string, any>) {\n if (!context.orderForm) return null;\n\n const payments = context.orderForm.paymentData?.payments || [];\n const systems = context.orderForm.paymentData?.paymentSystems || [];\n if (!payments.length || !systems.length) return null;\n\n const selectedPayment = payments.find((p: { paymentSystem: string }) => p?.paymentSystem) || payments[0];\n const id = String(selectedPayment?.paymentSystem || '').trim();\n if (!id) return null;\n\n const system = systems.find((s: { id: string }) => String(s.id) === id);\n const name = system?.name?.toLowerCase() || '';\n const match = paymentTypeMap.find(([key]) => name.includes(key));\n\n return match ? match[1] : null;\n}\n","import { paymentTypeMap } from \"../../../core/utils\";\n\nexport function paymentTypeFromOrderGroup(context: Record<string, any>) {\n if (!context.orderForm) return null;\n\n const transactions = context.orderForm.paymentData?.transactions || [];\n if (!transactions.length) return null;\n\n const payments = transactions[0]?.payments || [];\n if (!payments.length) return null;\n\n const name = payments[0]?.paymentSystemName?.toLowerCase() || '';\n const match = paymentTypeMap.find(([key]) => name.includes(key));\n\n return match ? match[1] : null;\n}\n","import { paymentTypeFromOrderForm } from './resolvers/paymentType/fromOrderForm';\nimport { paymentTypeFromOrderGroup } from './resolvers/paymentType/fromOrderGroup';\n\n/**\n * Selects the appropriate payment_type resolver based on the event name and returns its result.\n *\n * @param context - Runtime context passed to the selected resolver\n * @param eventName - Event identifier that determines which resolver to use\n * @returns The resolved payment_type for the event, or `null` if the event is not recognized\n */\nexport function getPaymentType(context: Record<string, any>, eventName: string) {\n if (context?.paymentType) return context.paymentType;\n\n switch (eventName) {\n case 'ORDER_REVIEWED':\n case 'CUSTOM_ADD_PAYMENT_INFO':\n return paymentTypeFromOrderForm(context);\n case 'PURCHASE':\n case 'CUSTOM_PURCHASE':\n return paymentTypeFromOrderGroup(context)\n default:\n return null;\n }\n}\n","import type { EventContext, EventName, LogisticInfo } from '../types';\nimport { getBrand } from './brand';\nimport { getItems } from './items';\nimport { getPaymentType } from './paymentType';\nimport { toNum } from '../core/utils';\n\n\nexport const paramGetters = {\n brand: getBrand,\n\n items: getItems,\n\n payment_type: getPaymentType,\n\n user_info: async (context: EventContext, eventName: EventName) => {\n const PROD_DOMAINS: Record<string, Record<string, string>> = {\n \"animale\": {\n \"store\": \"https://www.animale.com.br\",\n \"checkout\": \"https://secure.animale.com.br\",\n },\n \"farm\": {\n \"store\": \"https://lojafarm.myvtex.com\"\n },\n \"mariafilo\": {\n \"store\": \"https://mariafilo.myvtex.com\",\n \"checkout\": \"https://secure.mariafilo.com.br\",\n },\n \"lojacrisbarros\": {\n \"store\": \"https://lojacrisbarros.myvtex.com\",\n \"checkout\": \"https://secure.crisbarros.com.br\",\n },\n \"lojaoffpremium\": {\n \"store\": \"https://lojaoffpremium.myvtex.com\",\n \"checkout\": \"https://secure.lojaoffpremium.com.br\",\n },\n };\n\n const domain = PROD_DOMAINS[context.account || 'https://www.animale.com.br']?.[context.platform || 'store'];\n\n if (!domain) return { customer: { email: context.userEmail, id: context?.userId }, address: null };\n\n try {\n const api = `${domain}/_v/user-info`;\n const response = await fetch(api, {\n method: 'POST',\n body: JSON.stringify({ email: context.userEmail })\n });\n\n if (response.status !== 200) {\n return { customer: { email: context.userEmail, id: context?.userId }, address: null };\n }\n\n return await response.json();\n } catch (_) {\n return { customer: { email: context.userEmail, id: context?.userId }, address: null };\n }\n },\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 || context.item.item_id];\n }\n\n if (context?.list) {\n return context.list.map((item: { productID: string, id: string, productId: string }) => item?.productID || item?.id || item?.productId)\n }\n\n return (context.orderForm.items || [])\n .map((item: EventContext) => item.productId)\n .join(',');\n },\n\n currency: (context: EventContext, eventName: EventName) => {\n if (context?.currency) return context.currency\n\n if (context?.bannerUrl) return 'BRL'\n\n if (context?.item) {\n return context.item?.offers?.priceCurrency || 'BRL'\n }\n\n return context.orderForm?.storePreferencesData?.currencyCode || null;\n },\n\n value: (context: EventContext, eventName: EventName) => {\n if (context?.value) return toNum(context.value)\n\n return context.item ? toNum(context.item?.price) : context.orderForm?.value != null\n ? context.orderForm.value / 100\n : null;\n },\n\n total_discount: (context: EventContext, eventName: EventName) => {\n const totalsList = context.orderForm?.totalizers || context.orderForm?.totals || []; // totals for ordergroup and orderform have different names\n\n const items = context.orderForm.items;\n\n const totalDiscount = items.reduce((acc: number, item: { quantity: number, listPrice: number, sellingPrice: number }) => {\n const unitDiscount = Math.max(0, item.listPrice - item.sellingPrice);\n return acc + (unitDiscount * item.quantity);\n }, 0);\n\n const discounts = totalsList.find((t: { id: string }) => t.id === 'Discounts');\n return Math.abs((discounts?.value || 0) + totalDiscount) / 100 || null;\n },\n\n subtotal: (context: EventContext, eventName: EventName) => {\n const totalsList = context.orderForm?.totalizers || context.orderForm?.totals || []; // totals for ordergroup and orderform have different names\n\n const subtotal =\n totalsList\n .filter((t: EventContext) => t.id === 'Items')\n .reduce((acc: number, t: EventContext) => acc + (t.value || 0), 0) / 100 || 0;\n\n return subtotal\n },\n\n coupon_message: (context: EventContext, eventName: EventName) => {\n if (context.couponMessage) return context.couponMessage;\n\n const messages = context.orderForm?.messages || [];\n\n if (messages.length === 0) return null;\n\n const couponMessages = messages.filter((msg: EventContext) =>\n msg.text.toLowerCase().includes('cupom')\n );\n\n if (couponMessages.length === 0) return null;\n\n return couponMessages.map((msg: EventContext) => msg.text).join(' | ');\n },\n\n seller_cod_name: (context: EventContext, eventName: EventName) => {\n return context.appliedSellerCodName || context?.orderForm.marketingData.utmiCampaign || null;\n },\n\n coupon: (context: EventContext, eventName: EventName) => {\n return context.appliedCoupon || context?.orderForm?.marketingData?.coupon || null;\n },\n\n pre_filled: (context: EventContext, eventName: EventName) => {\n return !!context.preFilled;\n },\n\n search_term: (context: EventContext, eventName: EventName) => {\n return context.searchTerm || null;\n },\n\n search_found: (context: EventContext, eventName: EventName) => {\n return !!context.searchFound;\n },\n\n search_quantity: (context: EventContext, eventName: EventName) => {\n return context.searchQuantity || 0;\n },\n\n promotion_name: (context: EventContext, eventName: EventName) => {\n return context.promotionName || null;\n },\n\n creative_name: (context: EventContext, eventName: EventName) => {\n return context.creativeName || null;\n },\n\n creative_slot: (context: EventContext, eventName: EventName) => {\n return context.creativeSlot || null;\n },\n\n zipcode: (context: EventContext, eventName: EventName) => {\n return context.zipCode || null;\n },\n\n size: (context: EventContext, eventName: EventName) => {\n return context.size || null;\n },\n\n item_ref: (context: EventContext, eventName: EventName) => {\n return context.itemRef || null;\n },\n\n flag_pickup: (context: EventContext, eventName: EventName) => {\n const orderForm = context.orderForm;\n if (!orderForm) return null;\n\n const logisticsInfo = orderForm.shippingData?.logisticsInfo || [];\n const hasPickup = logisticsInfo.some((info: LogisticInfo) =>\n info.slas?.some((sla) => sla.deliveryChannel === 'pickup-in-point')\n );\n\n return hasPickup\n },\n\n shippings: (context: EventContext, eventName: EventName) => {\n const orderForm = context.orderForm;\n if (!orderForm) return null;\n\n const groupShipping: Record<string, any> = {};\n\n for (const info of orderForm.shippingData.logisticsInfo) {\n const item = orderForm.items[info.itemIndex]\n if (!item) continue\n\n for (const sla of info.slas) {\n const key = sla.name\n\n if (!groupShipping[key]) {\n groupShipping[key] = {\n shipping_tier: sla.name,\n delivery_time: parseInt(sla.shippingEstimate),\n shipping: parseFloat((sla.price / 100).toFixed(1)),\n line_items: []\n }\n }\n\n groupShipping[key].line_items.push(item.id)\n }\n }\n\n const shippings = Object.values(groupShipping).map((s) => ({\n shipping: s.shipping,\n shipping_tier: s.shipping_tier,\n delivery_time: s.delivery_time,\n line_items: s.line_items.join(',')\n }))\n\n return shippings || null\n },\n\n shipping: (context: EventContext, eventName: EventName) => {\n const logistics = context?.orderForm?.shippingData?.logisticsInfo ?? []\n return logistics.reduce((total: number, item: any) => {\n const selected = item.slas?.find((sla: any) => sla.id === item.selectedSla)\n return total + (selected?.price ?? 0)\n }, 0)\n },\n\n shipping_tier: (context: EventContext, eventName: EventName) => {\n const logistics = context?.orderForm?.shippingData?.logisticsInfo ?? []\n const 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","import { dispatchTrackEvent } from './adapters';\nimport { getParameters } from './formatter';\nimport { EVENTS } from './core/constants';\nimport type { EventContext, EventName } from './types';\n\n/**\n * Assembles tracking parameters and sends a web tracking event.\n *\n * @param event - The name of the event to track.\n * @param context - Optional context used to build event parameters; may include a `window` property that will be attached to the dispatched payload.\n * @returns The result returned by `dispatchTrackEvent` when the event is sent successfully, or the value returned by `console.error` (`undefined`) if an error occurs.\n */\nasync function trackWebEvent(event: EventName, context: EventContext = {}) {\n try {\n // object data to be sent\n const parameters = await getParameters(context, event);\n\n // function to send event\n return await dispatchTrackEvent(\n event,\n Object.assign({}, parameters, { window: context.window })\n );\n } catch (err) {\n return console.error(`[DT] Error tracking event ${event}:`, err);\n }\n}\n\nexport { trackWebEvent, EVENTS };\n\nexport default {\n trackWebEvent,\n EVENTS,\n}\n"],"mappings":"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","names":["_a","_a","_a","_b"]}