@azzas/azzas-tracker-web 1.0.10 → 1.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -0
- package/dist/mod.cjs +75 -23
- package/dist/mod.cjs.map +1 -1
- package/dist/mod.d.cts +85 -1
- package/dist/mod.d.ts +85 -1
- package/dist/mod.global.js +74 -23
- package/dist/mod.global.js.map +1 -1
- package/dist/mod.js +74 -23
- package/dist/mod.js.map +1 -1
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -82,6 +82,27 @@ Uso básico da função no consumidor:
|
|
|
82
82
|
|
|
83
83
|
***OBS***: atente-se ao adicionar eventos novos e contribua na documentação do NOTION ou apenas DOCUMENTE em algum lugar! Seu futuro EU será grato 👍
|
|
84
84
|
|
|
85
|
+
## Teste Local para Ambientes CDN/DENO
|
|
86
|
+
|
|
87
|
+
Para testar alterações na biblioteca localmente, simulando a forma como ela é carregada por uma CDN (<script src="...">), use o script npm run dev:deno.
|
|
88
|
+
|
|
89
|
+
Este comando realiza o build mais recente da biblioteca, empacota-o e inicia um servidor HTTP local usando o Deno para servir o arquivo
|
|
90
|
+
|
|
91
|
+
1. Aqui nesse repositório, rode o script que inicia o servidor local:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
npm run dev:deno
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
O servidor será iniciado e começará a servir o seu arquivo de build no seguinte endereço: http://localhost:4507/.
|
|
98
|
+
|
|
99
|
+
2. No Projeto Consumidor (DENO/FRONT):
|
|
100
|
+
|
|
101
|
+
Altere o link do <script> no seu projeto para apontar para o servidor local.
|
|
102
|
+
|
|
103
|
+
Você deve usar: <script src="http://localhost:4507/dist/mod.global.js"></script>
|
|
104
|
+
|
|
105
|
+
|
|
85
106
|
## Boas Práticas
|
|
86
107
|
- Sempre garantir que os `requiredParams` de cada evento estejam preenchidos antes de enviar.
|
|
87
108
|
|
package/dist/mod.cjs
CHANGED
|
@@ -20,6 +20,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
20
20
|
// src/index.ts
|
|
21
21
|
var src_exports = {};
|
|
22
22
|
__export(src_exports, {
|
|
23
|
+
EVENTS: () => EVENTS,
|
|
24
|
+
default: () => src_default,
|
|
23
25
|
trackWebEvent: () => trackWebEvent
|
|
24
26
|
});
|
|
25
27
|
module.exports = __toCommonJS(src_exports);
|
|
@@ -95,7 +97,8 @@ var EVENTS = {
|
|
|
95
97
|
},
|
|
96
98
|
SELECT_ITEM: {
|
|
97
99
|
name: "select_item",
|
|
98
|
-
|
|
100
|
+
destinations: ["DataLayer"],
|
|
101
|
+
requiredParams: ["brand", "region", "items", "line_items"]
|
|
99
102
|
},
|
|
100
103
|
VIEW_ITEM_LIST: {
|
|
101
104
|
name: "view_item_list",
|
|
@@ -143,14 +146,17 @@ function dataTrackingLog(data, color, destination) {
|
|
|
143
146
|
);
|
|
144
147
|
}
|
|
145
148
|
function pushToDataLayer(event, ecomm, dest) {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
149
|
+
const targetWindow = ecomm.window;
|
|
150
|
+
const ecommercePayload = Object.assign({}, ecomm);
|
|
151
|
+
delete ecommercePayload.window;
|
|
152
|
+
dataTrackingLog({ event, ecommerce: ecommercePayload }, "#0b5fff", dest);
|
|
153
|
+
if (targetWindow) {
|
|
154
|
+
targetWindow.dataLayer = targetWindow.dataLayer || [];
|
|
155
|
+
targetWindow.dataLayer.push({ event, ecommerce: ecommercePayload });
|
|
150
156
|
return;
|
|
151
157
|
}
|
|
152
158
|
window.dataLayer = window.dataLayer || [];
|
|
153
|
-
window.dataLayer.push({ event, ecommerce:
|
|
159
|
+
window.dataLayer.push({ event, ecommerce: ecommercePayload });
|
|
154
160
|
}
|
|
155
161
|
function pushToMeta(event, ecomm, dest) {
|
|
156
162
|
dataTrackingLog({ eventName: event, data: ecomm }, "#8C1007", dest);
|
|
@@ -198,12 +204,12 @@ function getItemShippingTier(orderForm, item) {
|
|
|
198
204
|
}
|
|
199
205
|
async function getItemSku(item) {
|
|
200
206
|
var _a, _b;
|
|
201
|
-
const product = await getProductDataById(item.productId);
|
|
207
|
+
const product = await getProductDataById(item.productId || item.productID);
|
|
202
208
|
if (!product.length) return null;
|
|
203
209
|
return (_b = (_a = product[0].items.find((i) => i.name === item.skuName)) == null ? void 0 : _a.itemId) != null ? _b : null;
|
|
204
210
|
}
|
|
205
211
|
function getDiscount(item) {
|
|
206
|
-
return parseFloat(Math.max(item.listPrice - item.sellingPrice, 0).toFixed(2)) || 0;
|
|
212
|
+
return item.discount ? item.discount : parseFloat(Math.max(item.listPrice - item.sellingPrice, 0).toFixed(2)) || 0;
|
|
207
213
|
}
|
|
208
214
|
function getItemCategory(item) {
|
|
209
215
|
return "sale";
|
|
@@ -216,21 +222,36 @@ function getItemCategory4(item) {
|
|
|
216
222
|
const tags = ((_a = item == null ? void 0 : item.additionalInfo) == null ? void 0 : _a.tags) || (item == null ? void 0 : item.tags);
|
|
217
223
|
return Array.isArray(tags) && tags.length ? tags.join(",") : null;
|
|
218
224
|
}
|
|
219
|
-
var
|
|
225
|
+
var BRAND_CODES = {
|
|
226
|
+
farm: "farmrio",
|
|
227
|
+
"farm etc": "farmetc",
|
|
228
|
+
"farm rio": "farmrio"
|
|
229
|
+
};
|
|
230
|
+
function getBrandCode(brand) {
|
|
231
|
+
if (!brand) return null;
|
|
232
|
+
const standardized = brand.toLowerCase().trim();
|
|
233
|
+
return BRAND_CODES[standardized] || null;
|
|
234
|
+
}
|
|
220
235
|
function normalizeBrand(input) {
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
236
|
+
var _a;
|
|
237
|
+
let brandStrings = [];
|
|
238
|
+
if (Array.isArray(input) && input.every((item) => typeof item === "string")) {
|
|
239
|
+
brandStrings = input;
|
|
240
|
+
} else if (Array.isArray(input)) {
|
|
241
|
+
brandStrings = input.map((item) => {
|
|
242
|
+
var _a2;
|
|
243
|
+
return ((_a2 = item.additionalInfo) == null ? void 0 : _a2.brandName) || item.brand;
|
|
244
|
+
});
|
|
245
|
+
} else if (typeof input === "object" && input !== null && "brand" in input) {
|
|
246
|
+
brandStrings = [((_a = input.additionalInfo) == null ? void 0 : _a.brandName) || input.brand];
|
|
247
|
+
} else if (typeof input === "string") {
|
|
248
|
+
return getBrandCode(input);
|
|
249
|
+
} else {
|
|
250
|
+
return null;
|
|
232
251
|
}
|
|
233
|
-
|
|
252
|
+
const brandCodes = brandStrings.map(getBrandCode).filter((code) => code !== null);
|
|
253
|
+
const uniqueSortedCodes = [...new Set(brandCodes)].sort();
|
|
254
|
+
return uniqueSortedCodes.length > 0 ? uniqueSortedCodes.join("_") : null;
|
|
234
255
|
}
|
|
235
256
|
|
|
236
257
|
// src/params/resolvers/brand/fromOrderForm.ts
|
|
@@ -250,7 +271,7 @@ function brandFromItem(context) {
|
|
|
250
271
|
|
|
251
272
|
// src/params/brand.ts
|
|
252
273
|
function getBrand(context, eventName) {
|
|
253
|
-
if (context == null ? void 0 : context.brand) return context.brand;
|
|
274
|
+
if (context == null ? void 0 : context.brand) return normalizeBrand(context.brand);
|
|
254
275
|
switch (eventName) {
|
|
255
276
|
case "VIEW_CART":
|
|
256
277
|
case "ADD_COUPON":
|
|
@@ -317,8 +338,32 @@ async function itemsFromItem(context) {
|
|
|
317
338
|
];
|
|
318
339
|
}
|
|
319
340
|
|
|
341
|
+
// src/params/resolvers/items/fromList.ts
|
|
342
|
+
async function itemsFromList(context) {
|
|
343
|
+
var _a, _b;
|
|
344
|
+
const { item } = context;
|
|
345
|
+
return [
|
|
346
|
+
{
|
|
347
|
+
item_id: item.productID || null,
|
|
348
|
+
item_category2: ((_a = item.category.split(">")[1]) == null ? void 0 : _a.trim()) || null,
|
|
349
|
+
price: item.price || 0,
|
|
350
|
+
quantity: 1,
|
|
351
|
+
item_ref: context.item.additionalProperty.find((i) => i.name === "RefId").value,
|
|
352
|
+
item_brand: normalizeBrand(item.brand.name) || null,
|
|
353
|
+
item_sku: await getItemSku(item) || item.productID || null,
|
|
354
|
+
item_name: item.alternateName || null,
|
|
355
|
+
// item_category: null,
|
|
356
|
+
item_variant: ((_b = item == null ? void 0 : item.name) == null ? void 0 : _b.split("-")[0].trim()) || null,
|
|
357
|
+
discount: getDiscount(item) || null,
|
|
358
|
+
item_list_name: (context == null ? void 0 : context.itemListName) || null,
|
|
359
|
+
index: typeof (context == null ? void 0 : context.index) === "number" ? context.index : null
|
|
360
|
+
}
|
|
361
|
+
];
|
|
362
|
+
}
|
|
363
|
+
|
|
320
364
|
// src/params/items.ts
|
|
321
365
|
function getItems(context, eventName) {
|
|
366
|
+
if (context == null ? void 0 : context.items) return context.items;
|
|
322
367
|
switch (eventName) {
|
|
323
368
|
case "VIEW_CART":
|
|
324
369
|
case "BEGIN_CHECKOUT":
|
|
@@ -326,6 +371,8 @@ function getItems(context, eventName) {
|
|
|
326
371
|
case "ADD_TO_CART":
|
|
327
372
|
case "REMOVE_FROM_CART":
|
|
328
373
|
return itemsFromItem(context);
|
|
374
|
+
case "SELECT_ITEM":
|
|
375
|
+
return itemsFromList(context);
|
|
329
376
|
default:
|
|
330
377
|
return null;
|
|
331
378
|
}
|
|
@@ -338,7 +385,7 @@ var paramGetters = {
|
|
|
338
385
|
return context.region || null;
|
|
339
386
|
},
|
|
340
387
|
line_items: (context, eventName) => {
|
|
341
|
-
return (context.orderForm.items || []).map((item) => item.productId).join(",");
|
|
388
|
+
return (context == null ? void 0 : context.lineItems) ? context.lineItems : (context.orderForm.items || []).map((item) => item.productId).join(",");
|
|
342
389
|
},
|
|
343
390
|
currency: (context, eventName) => {
|
|
344
391
|
var _a, _b;
|
|
@@ -427,8 +474,13 @@ async function trackWebEvent(event, context = {}) {
|
|
|
427
474
|
return console.error(`[DT] Error tracking event ${event}:`, err);
|
|
428
475
|
}
|
|
429
476
|
}
|
|
477
|
+
var src_default = {
|
|
478
|
+
trackWebEvent,
|
|
479
|
+
EVENTS
|
|
480
|
+
};
|
|
430
481
|
// Annotate the CommonJS export names for ESM import in node:
|
|
431
482
|
0 && (module.exports = {
|
|
483
|
+
EVENTS,
|
|
432
484
|
trackWebEvent
|
|
433
485
|
});
|
|
434
486
|
//# sourceMappingURL=mod.cjs.map
|
package/dist/mod.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/constants.ts","../src/adapters/index.ts","../src/params/utils/index.ts","../src/params/resolvers/brand/fromOrderForm.ts","../src/params/resolvers/brand/fromItem.ts","../src/params/brand.ts","../src/params/resolvers/items/fromOrderForm.ts","../src/params/resolvers/items/fromItem.ts","../src/params/items.ts","../src/params/index.ts","../src/formatter/index.ts"],"sourcesContent":["import { dispatchTrackEvent } from './adapters';\nimport { getParameters } from './formatter';\nimport type { EventContext, EventName } from './types';\n\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 };\n","export const EVENTS = {\n VIEW_CART: {\n name: 'view_cart',\n destinations: ['Dito', 'DataLayer',],\n requiredParams: [\n 'brand',\n 'region',\n 'line_items',\n 'currency',\n 'value',\n 'total_discount',\n 'subtotal',\n 'items',\n ],\n },\n\n ADD_TO_CART: {\n name: 'add_to_cart',\n destinations: ['DataLayer'],\n requiredParams: [\n 'brand',\n 'region',\n 'line_items',\n 'currency',\n 'value',\n 'items',\n ],\n },\n\n REMOVE_FROM_CART: {\n name: 'remove_from_cart',\n destinations: ['DataLayer'],\n requiredParams: [\n 'brand',\n 'region',\n 'line_items',\n 'currency',\n 'value',\n 'items',\n ],\n },\n\n ADD_COUPON: {\n name: 'add_coupon',\n destinations: ['DataLayer'],\n requiredParams: [\n 'brand',\n 'region',\n 'coupon',\n 'coupon_message',\n 'seller_cod_name',\n ],\n },\n\n SEARCH: {\n name: 'search',\n destinations: ['DataLayer'],\n requiredParams: ['brand', 'search_term', 'search_found', 'search_quantity'],\n },\n\n VIEW_PROMOTION: {\n name: 'view_promotion',\n destinations: ['DataLayer'],\n requiredParams: ['region', 'promotion_name', 'creative_name', 'creative_slot'],\n },\n\n SEARCH_ZIPCODE: {\n name: 'search_zipcode',\n requiredParams: ['region'],\n },\n\n SELECT_CONTENT: {\n name: 'select_content',\n requiredParams: ['region'],\n },\n\n SELECT_ITEM: {\n name: 'select_item',\n requiredParams: ['region'],\n },\n\n VIEW_ITEM_LIST: {\n name: 'view_item_list',\n requiredParams: ['region'],\n },\n\n BEGIN_CHECKOUT: {\n name: 'begin_checkout',\n destinations: ['DataLayer'],\n requiredParams: ['brand', 'line_items', 'currency', 'value', 'total_discount', 'subtotal', 'items'],\n },\n\n AUTH_ACTION: {\n name: 'auth_action',\n requiredParams: ['region'],\n },\n\n ADD_PERSONAL_INFO: {\n name: 'add_personal_info',\n destinations: ['DataLayer'],\n requiredParams: ['brand', 'pre_filled', 'line_items', 'currency', 'value', 'total_discount', 'subtotal'],\n },\n\n ADD_SHIPPING_INFO: {\n name: 'add_shipping_info',\n requiredParams: ['region'],\n },\n\n ADD_PAYMENT_INFO: {\n name: 'add_payment_info',\n requiredParams: ['region'],\n },\n\n ORDER_REVIWED: {\n name: 'order_reviewed',\n requiredParams: ['region'],\n },\n\n PURCHASE: {\n name: 'purchase',\n requiredParams: ['region'],\n },\n};\n","import { EVENTS } from '../constants';\nimport type { EventName, EventContext } from '../types'\n\n\n/**\n * Logs a styled tracking message to the console with the destination and event payload.\n *\n * @param data - The event payload or context to include in the log; if falsy, an empty string is logged\n * @param color - CSS background color used for the log label\n * @param destination - Destination name shown in the log label (prefixed by \"DT - \")\n */\nfunction dataTrackingLog(data: EventContext, color: string, destination: string) {\n console.log(\n `%c[DT - ${destination}] EVENTO DISPARADO:%c `,\n `background: ${color}; color: white; font-weight: bold; padding: 2px 4px; border-radius: 3px;`,\n 'color: #fff;',\n data || ''\n );\n}\n\n/**\n * Pushes an ecommerce tracking event to the appropriate dataLayer and logs the payload.\n *\n * Ensures a dataLayer array exists on the target (prefer `ecomm.window` if present, otherwise the global `window`)\n * and pushes an object containing `event` and the `ecomm` payload. Also logs the pushed payload for debugging.\n *\n * @param event - The tracking event name to push\n * @param ecomm - The ecommerce event context payload; if it contains a `window` property that object's `dataLayer` will be used as the target\n * @param dest - A destination label used by the logger\n */\nfunction pushToDataLayer(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ event: event, ecommerce: ecomm }, '#0b5fff', dest);\n\n if (ecomm.window) {\n ecomm.window.dataLayer = ecomm.window.dataLayer || []\n ecomm.window.dataLayer.push({ event: event, ecommerce: ecomm })\n return;\n }\n\n window.dataLayer = window.dataLayer || []\n window.dataLayer.push({ event: event, ecommerce: ecomm })\n}\n\n/**\n * Log a Meta tracking event payload for delivery to the Meta destination.\n *\n * @param event - The event name to send to Meta\n * @param ecomm - The event context / ecommerce payload\n * @param dest - Destination identifier (e.g., \"Meta\")\n */\nfunction pushToMeta(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ eventName: event, data: ecomm }, '#8C1007', dest);\n}\n\nfunction pushToDito(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ id: event, custom_data: ecomm }, '#00c851', dest);\n}\n\nconst adapters = {\n Meta: pushToMeta,\n DataLayer: pushToDataLayer,\n Dito: pushToDito,\n};\n\ntype AdapterKey = keyof typeof adapters;\n\n/**\n * Dispatches a tracking event to all destinations configured for the given event.\n *\n * Looks up destinations from the EVENTS configuration, calls each destination adapter\n * in parallel (providing the event name in lowercase and the supplied context), and\n * waits for all attempts to settle. Individual adapter failures are logged with the\n * \"[DT]\" prefix but do not prevent other destinations from running.\n *\n * @param eventName - The name of the event to dispatch\n * @param data - The event context/payload to send to adapters\n */\nexport async function dispatchTrackEvent(eventName: EventName, data: EventContext) {\n const eventConfig = EVENTS[eventName] as { destinations: string[] };\n\n if (!eventConfig) return;\n\n await Promise.allSettled(\n eventConfig.destinations.map(async (dest: string) => {\n try {\n // call the adapter function based on the destination mapped in the adapters object\n // eventName is converted to lowercase to match the expected format in all adapters\n await adapters[dest as AdapterKey](eventName.toLowerCase(), data, dest);\n } catch (err) {\n console.error(`[DT] Failed to send ${eventName} to ${dest}:`, err);\n }\n })\n );\n}\n","/**\n * Fetches product data for the given product id from the catalog API.\n *\n * @param id - The product identifier used as the `productId` query filter\n * @returns The parsed JSON response containing product data, or `undefined` if the request fails\n */\nexport async function getProductDataById(id: any) {\n try {\n const response = await fetch(\n `/api/catalog_system/pub/products/search?fq=productId:${id}`\n );\n\n return await response.json();\n } catch (e) {\n console.log('[DT] Erro ao buscar dados do produto', e);\n }\n}\n\nexport function getItemShippingTier(orderForm: any, item: any) {\n const info = orderForm?.shippingData?.logisticsInfo?.find(\n (li: any) => li.itemId === item.id\n );\n\n const selectedSla = info?.slas?.find((sla: any) => sla.id === info.selectedSla);\n return selectedSla?.pickupStoreInfo?.friendlyName\n ? `retirada em loja: ${selectedSla.pickupStoreInfo.friendlyName}`\n : selectedSla?.name\n ? `Receba em casa: ${selectedSla.name}`\n : null;\n}\n\nexport async function getItemSku(item: any) {\n const product = await getProductDataById(item.productId);\n\n if (!product.length) return null;\n\n return product[0].items.find((i: any) => i.name === item.skuName)?.itemId ?? null;\n}\n\nexport function getDiscount(item: any) {\n return (\n parseFloat(Math.max(item.listPrice - item.sellingPrice, 0).toFixed(2)) || 0\n );\n}\n\nexport function getItemCategory(item: any) {\n return 'sale';\n}\n\nexport function getItemCategory2(item: any) {\n return 'sale2';\n}\n\nexport function getItemCategory4(item: any) {\n const tags = item?.additionalInfo?.tags || item?.tags;\n return Array.isArray(tags) && tags.length ? tags.join(',') : null;\n}\n\nconst brandMap = { Farm: 'farmrio', 'Farm Etc': 'farmetc' };\nexport function normalizeBrand(input: any) {\n if (typeof input === 'string') {\n return brandMap[input as keyof typeof brandMap] || null;\n }\n\n if (Array.isArray(input)) {\n const uniqueBrands = new Set(\n input.map((i) => brandMap[i.additionalInfo?.brandName as keyof typeof brandMap || i.brand])\n );\n return uniqueBrands.size ? [...uniqueBrands].join('_') : null;\n }\n\n return null;\n}\n","import { normalizeBrand } from '../../utils';\n\nexport function brandFromOrderForm(context: Record<string, any>) {\n if (!context.orderForm && !context.orderForm.items?.length) return null;\n\n const items = context.orderForm.items;\n\n return normalizeBrand(items);\n}\n","import { normalizeBrand } from '../../utils';\n\nexport function brandFromItem(context: Record<string, any>) {\n const { item } = context;\n\n return normalizeBrand(item.additionalInfo?.brandName || item.brand);\n}\n","import { brandFromOrderForm } from './resolvers/brand/fromOrderForm';\nimport { brandFromItem } from './resolvers/brand/fromItem';\nimport type { EventContext, EventName } from '../types';\n\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 context.brand;\n\n switch (eventName) {\n case 'VIEW_CART':\n case 'ADD_COUPON':\n case 'ADD_PERSONAL_INFO':\n case 'BEGIN_CHECKOUT':\n return brandFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'REMOVE_FROM_CART':\n return brandFromItem(context);\n default:\n return null;\n }\n}\n","import type { EventContext } from '../../../types';\n\nimport {\n getItemSku,\n getDiscount,\n getItemCategory,\n getItemCategory2,\n getItemCategory4,\n getItemShippingTier,\n normalizeBrand,\n} from '../../utils';\n\n/**\n * Builds an array of normalized item objects from the order form contained in the given context.\n *\n * @param context - EventContext containing an orderForm with items to convert\n * @returns An array of item-like objects derived from `context.orderForm.items`, each containing fields such as `item_id`, `price`, `quantity`, `item_sku`, `item_name`, category and variant attributes, and `discount`\n */\nexport async function itemsFromOrderForm(context: EventContext) {\n const items = context.orderForm?.items || [];\n\n if (!items.length) return [];\n\n return await Promise.all(\n items.map(async (item: EventContext) => ({\n item_id: item.productId,\n item_category2: getItemCategory2(item),\n item_category4: getItemCategory4(item),\n item_shipping_tier: getItemShippingTier(context.orderForm, item),\n price: parseFloat((item.price / 100).toFixed(2)) || 0,\n quantity: item.quantity || 1,\n item_ref: item.refId || null,\n item_brand: normalizeBrand(item.additionalInfo?.brandName) || null,\n item_sku: (await getItemSku(item)) || item.id || null,\n item_name: item.name || item.id || null,\n item_category: getItemCategory(item) || null,\n item_variant: item.skuName.split('-')[0].trim(),\n item_variant2: item.skuName.split('-')[1]?.trim() || '',\n discount: getDiscount(item),\n }))\n );\n}\n","import {\n getItemSku,\n getDiscount,\n getItemCategory,\n getItemCategory2,\n getItemCategory4,\n getItemShippingTier,\n} from '../../utils';\n\nexport async function itemsFromItem(context: Record<string, any>) {\n const { item, orderForm } = context;\n return [\n {\n item_id: item.productId,\n item_category2: getItemCategory2(item),\n item_category4: getItemCategory4(item),\n item_shipping_tier: getItemShippingTier(orderForm, item),\n price: parseFloat((item.price / 100).toFixed(2)) || 0,\n quantity: 1,\n item_ref: item.refId || null,\n item_brand: item.additionalInfo?.brandName || null,\n item_sku: (await getItemSku(item)) || item.id || null,\n item_name: item.name || item.id || null,\n item_category: getItemCategory(item) || null,\n item_variant: item.skuName.split('-')[0].trim(),\n item_variant2: item.skuName.split('-')[1]?.trim() || '',\n discount: getDiscount(item),\n },\n ];\n}\n","import { itemsFromOrderForm } from './resolvers/items/fromOrderForm';\nimport { itemsFromItem } from './resolvers/items/fromItem';\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 switch (eventName) {\n case 'VIEW_CART':\n case 'BEGIN_CHECKOUT':\n return itemsFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'REMOVE_FROM_CART':\n return itemsFromItem(context);\n default:\n return null;\n }\n}\n","import type { EventContext, EventName } from '../types';\nimport { getBrand } from './brand';\nimport { getItems } from './items';\n\nexport const paramGetters = {\n brand: getBrand,\n\n region: (context: EventContext, eventName: EventName) => {\n return context.region || null;\n },\n\n line_items: (context: EventContext, eventName: EventName) => {\n return (context.orderForm.items || [])\n .map((item: EventContext) => item.productId)\n .join(',');\n },\n\n currency: (context: EventContext, eventName: EventName) => {\n return context.orderForm?.storePreferencesData?.currencyCode || null;\n },\n\n value: (context: EventContext, eventName: EventName) => {\n return context.item ? context.item.price : context.orderForm?.value != null\n ? context.orderForm.value / 100\n : null;\n },\n\n total_discount: (context: EventContext, eventName: EventName) => {\n return (\n context.orderForm?.totalizers\n ?.filter((t: EventContext) => t.id === 'Discounts')\n .reduce((acc: EventContext, t: EventContext) => acc + t.value, 0) / 100 || 0\n );\n },\n\n subtotal: (context: EventContext, eventName: EventName) => {\n return (\n context.orderForm?.totalizers\n ?.filter((t: EventContext) => t.id === 'Items')\n .reduce((acc: EventContext, t: EventContext) => acc + t.value, 0) / 100 || 0\n );\n },\n\n coupon_message: (context: EventContext, eventName: EventName) => {\n const messages = context.orderForm?.messages || [];\n\n if (messages.length === 0) return null;\n\n const couponMessages = messages.filter((msg: EventContext) =>\n msg.text.toLowerCase().includes('cupom')\n );\n\n if (couponMessages.length === 0) return null;\n\n return couponMessages.map((msg: EventContext) => msg.text).join(' | ');\n },\n\n seller_cod_name: (context: EventContext, eventName: EventName) => {\n return context.appliedSellerCodName || null;\n },\n\n coupon: (context: EventContext, eventName: EventName) => {\n return context.appliedCoupon || null;\n },\n\n pre_filled: (context: EventContext, eventName: EventName) => {\n return !!context.preFilled;\n },\n\n search_term: (context: EventContext, eventName: EventName) => {\n return context.searchTerm || null;\n },\n\n search_found: (context: EventContext, eventName: EventName) => {\n return !!context.searchFound;\n },\n\n search_quantity: (context: EventContext, eventName: EventName) => {\n return context.searchQuantity || 0;\n },\n\n promotion_name: (context: EventContext, eventName: EventName) => {\n return context.promotionName || null;\n },\n\n creative_name: (context: EventContext, eventName: EventName) => {\n return context.creativeName || null;\n },\n\n creative_slot: (context: EventContext, eventName: EventName) => {\n return context.creativeSlot || null;\n },\n\n items: getItems,\n};\n","import { EVENTS } from '../constants';\nimport { paramGetters } from '../params';\nimport type { EventName, EventContext } from '../types'\n\ntype ParamName = keyof typeof paramGetters;\n\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"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/constants.ts","../src/adapters/index.ts","../src/params/utils/index.ts","../src/params/resolvers/brand/fromOrderForm.ts","../src/params/resolvers/brand/fromItem.ts","../src/params/brand.ts","../src/params/resolvers/items/fromOrderForm.ts","../src/params/resolvers/items/fromItem.ts","../src/params/resolvers/items/fromList.ts","../src/params/items.ts","../src/params/index.ts","../src/formatter/index.ts"],"sourcesContent":["import { dispatchTrackEvent } from './adapters';\nimport { getParameters } from './formatter';\nimport { EVENTS } from './constants';\nimport type { EventContext, EventName } from './types';\n\n/**\n * Assembles tracking parameters and sends a web tracking event.\n *\n * @param event - The name of the event to track.\n * @param context - Optional context used to build event parameters; may include a `window` property that will be attached to the dispatched payload.\n * @returns The result returned by `dispatchTrackEvent` when the event is sent successfully, or the value returned by `console.error` (`undefined`) if an error occurs.\n */\nasync function trackWebEvent(event: EventName, context: EventContext = {}) {\n try {\n // object data to be sent\n const parameters = await getParameters(context, event);\n\n // function to send event\n return await dispatchTrackEvent(\n event,\n Object.assign({}, parameters, { window: context.window })\n );\n } catch (err) {\n return console.error(`[DT] Error tracking event ${event}:`, err);\n }\n}\n\nexport { trackWebEvent, EVENTS };\n\nexport default {\n trackWebEvent,\n EVENTS,\n}\n","export const EVENTS = {\n VIEW_CART: {\n name: 'view_cart',\n destinations: ['Dito', 'DataLayer',],\n requiredParams: [\n 'brand',\n 'region',\n 'line_items',\n 'currency',\n 'value',\n 'total_discount',\n 'subtotal',\n 'items',\n ],\n },\n\n ADD_TO_CART: {\n name: 'add_to_cart',\n destinations: ['DataLayer'],\n requiredParams: [\n 'brand',\n 'region',\n 'line_items',\n 'currency',\n 'value',\n 'items',\n ],\n },\n\n REMOVE_FROM_CART: {\n name: 'remove_from_cart',\n destinations: ['DataLayer'],\n requiredParams: [\n 'brand',\n 'region',\n 'line_items',\n 'currency',\n 'value',\n 'items',\n ],\n },\n\n ADD_COUPON: {\n name: 'add_coupon',\n destinations: ['DataLayer'],\n requiredParams: [\n 'brand',\n 'region',\n 'coupon',\n 'coupon_message',\n 'seller_cod_name',\n ],\n },\n\n SEARCH: {\n name: 'search',\n destinations: ['DataLayer'],\n requiredParams: ['brand', 'search_term', 'search_found', 'search_quantity'],\n },\n\n VIEW_PROMOTION: {\n name: 'view_promotion',\n destinations: ['DataLayer'],\n requiredParams: ['region', 'promotion_name', 'creative_name', 'creative_slot'],\n },\n\n SEARCH_ZIPCODE: {\n name: 'search_zipcode',\n requiredParams: ['region'],\n },\n\n SELECT_CONTENT: {\n name: 'select_content',\n requiredParams: ['region'],\n },\n\n SELECT_ITEM: {\n name: 'select_item',\n destinations: ['DataLayer'],\n requiredParams: ['brand', 'region', 'items', 'line_items'],\n },\n\n VIEW_ITEM_LIST: {\n name: 'view_item_list',\n requiredParams: ['region'],\n },\n\n BEGIN_CHECKOUT: {\n name: 'begin_checkout',\n destinations: ['DataLayer'],\n requiredParams: ['brand', 'line_items', 'currency', 'value', 'total_discount', 'subtotal', 'items'],\n },\n\n AUTH_ACTION: {\n name: 'auth_action',\n requiredParams: ['region'],\n },\n\n ADD_PERSONAL_INFO: {\n name: 'add_personal_info',\n destinations: ['DataLayer'],\n requiredParams: ['brand', 'pre_filled', 'line_items', 'currency', 'value', 'total_discount', 'subtotal'],\n },\n\n ADD_SHIPPING_INFO: {\n name: 'add_shipping_info',\n requiredParams: ['region'],\n },\n\n ADD_PAYMENT_INFO: {\n name: 'add_payment_info',\n requiredParams: ['region'],\n },\n\n ORDER_REVIWED: {\n name: 'order_reviewed',\n requiredParams: ['region'],\n },\n\n PURCHASE: {\n name: 'purchase',\n requiredParams: ['region'],\n },\n};\n","import { EVENTS } from '../constants';\nimport type { EventName, EventContext } from '../types'\n\n\n/**\n * Logs a styled tracking message to the console with the destination and event payload.\n *\n * @param data - The event payload or context to include in the log; if falsy, an empty string is logged\n * @param color - CSS background color used for the log label\n * @param destination - Destination name shown in the log label (prefixed by \"DT - \")\n */\nfunction dataTrackingLog(data: EventContext, color: string, destination: string) {\n console.log(\n `%c[DT - ${destination}] EVENTO DISPARADO:%c `,\n `background: ${color}; color: white; font-weight: bold; padding: 2px 4px; border-radius: 3px;`,\n 'color: #fff;',\n data || ''\n );\n}\n\n/**\n * Pushes an ecommerce tracking event to the appropriate dataLayer and logs the payload.\n *\n * Ensures a dataLayer array exists on the target (prefer `ecomm.window` if present, otherwise the global `window`)\n * and pushes an object containing `event` and the `ecomm` payload. Also logs the pushed payload for debugging.\n *\n * @param event - The tracking event name to push\n * @param ecomm - The ecommerce event context payload; if it contains a `window` property that object's `dataLayer` will be used as the target\n * @param dest - A destination label used by the logger\n */\nfunction pushToDataLayer(event: string, ecomm: EventContext, dest: string) {\n 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}\n\n/**\n * Log a Meta tracking event payload for delivery to the Meta destination.\n *\n * @param event - The event name to send to Meta\n * @param ecomm - The event context / ecommerce payload\n * @param dest - Destination identifier (e.g., \"Meta\")\n */\nfunction pushToMeta(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ eventName: event, data: ecomm }, '#8C1007', dest);\n}\n\nfunction pushToDito(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ id: event, custom_data: ecomm }, '#00c851', dest);\n}\n\nconst adapters = {\n Meta: pushToMeta,\n DataLayer: pushToDataLayer,\n Dito: pushToDito,\n};\n\ntype AdapterKey = keyof typeof adapters;\n\n/**\n * Dispatches a tracking event to all destinations configured for the given event.\n *\n * Looks up destinations from the EVENTS configuration, calls each destination adapter\n * in parallel (providing the event name in lowercase and the supplied context), and\n * waits for all attempts to settle. Individual adapter failures are logged with the\n * \"[DT]\" prefix but do not prevent other destinations from running.\n *\n * @param eventName - The name of the event to dispatch\n * @param data - The event context/payload to send to adapters\n */\nexport async function dispatchTrackEvent(eventName: EventName, data: EventContext) {\n const eventConfig = EVENTS[eventName] as { destinations: string[] };\n\n if (!eventConfig) return;\n\n await Promise.allSettled(\n eventConfig.destinations.map(async (dest: string) => {\n try {\n // call the adapter function based on the destination mapped in the adapters object\n // eventName is converted to lowercase to match the expected format in all adapters\n await adapters[dest as AdapterKey](eventName.toLowerCase(), data, dest);\n } catch (err) {\n console.error(`[DT] Failed to send ${eventName} to ${dest}:`, err);\n }\n })\n );\n}\n","/**\n * Fetches product data for the given product id from the catalog API.\n *\n * @param id - The product identifier used as the `productId` query filter\n * @returns The parsed JSON response containing product data, or `undefined` if the request fails\n */\nexport async function getProductDataById(id: any) {\n try {\n const response = await fetch(\n `/api/catalog_system/pub/products/search?fq=productId:${id}`\n );\n\n return await response.json();\n } catch (e) {\n console.log('[DT] Erro ao buscar dados do produto', e);\n }\n}\n\nexport function getItemShippingTier(orderForm: any, item: any) {\n const info = orderForm?.shippingData?.logisticsInfo?.find(\n (li: any) => li.itemId === item.id\n );\n\n const selectedSla = info?.slas?.find((sla: any) => sla.id === info.selectedSla);\n return selectedSla?.pickupStoreInfo?.friendlyName\n ? `retirada em loja: ${selectedSla.pickupStoreInfo.friendlyName}`\n : selectedSla?.name\n ? `Receba em casa: ${selectedSla.name}`\n : null;\n}\n\nexport async function getItemSku(item: any) {\n const product = await getProductDataById(item.productId || item.productID);\n\n if (!product.length) return null;\n\n return product[0].items.find((i: any) => i.name === item.skuName)?.itemId ?? null;\n}\n\nexport function getDiscount(item: any) {\n return item.discount ? item.discount :\n (\n parseFloat(Math.max(item.listPrice - item.sellingPrice, 0).toFixed(2)) || 0\n );\n}\n\nexport function getItemCategory(item: any) {\n return 'sale';\n}\n\nexport function getItemCategory2(item: any) {\n return 'sale2';\n}\n\nexport function getItemCategory4(item: any) {\n const tags = item?.additionalInfo?.tags || item?.tags;\n return Array.isArray(tags) && tags.length ? tags.join(',') : null;\n}\n\nconst BRAND_CODES = {\n farm: 'farmrio',\n 'farm etc': 'farmetc',\n 'farm rio': 'farmrio',\n} as const;\n\ntype Standardized = keyof typeof BRAND_CODES\ninterface BrandItem {\n brand?: string;\n additionalInfo?: {\n brandName?: string;\n };\n}\n\n/**\n * Extrai o código padronizado (ex: 'farmrio') de uma única string de marca.\n * Retorna null se não houver mapeamento.\n */\nfunction getBrandCode(brand: string | undefined): string | null {\n if (!brand) return null;\n const standardized = brand.toLowerCase().trim();\n return BRAND_CODES[standardized as Standardized] || null;\n}\n\n/**\n * Função principal que padroniza a marca ou lista de marcas para o formato final:\n * 'farmrio', 'farmetc', ou 'farmrio_farmetc'.\n */\nexport function normalizeBrand(input: string | BrandItem[] | BrandItem | string[] | undefined | null) {\n let brandStrings = [];\n\n if (Array.isArray(input) && input.every(item => typeof item === 'string')) {\n brandStrings = input as string[];\n } else if (Array.isArray(input)) {\n // Se for um Array, coleta a string da marca de cada item.\n brandStrings = input.map(item => item.additionalInfo?.brandName || item.brand);\n } else if (typeof input === 'object' && input !== null && 'brand' in input) {\n // Se for um Objeto único, trata como um Array de um único item (para reuso de lógica).\n brandStrings = [(input as BrandItem).additionalInfo?.brandName || (input as BrandItem).brand];\n } else if (typeof input === 'string') {\n // Se for uma String (mal formatada ou não), trata diretamente.\n return getBrandCode(input);\n } else {\n // Se for undefined, null, ou outro tipo não esperado.\n return null;\n }\n\n const brandCodes = brandStrings\n .map(getBrandCode)\n .filter((code): code is string => code !== null); // ['farmrio', 'farmetc', 'farmrio']\n\n const uniqueSortedCodes = [...new Set(brandCodes)].sort(); // ['farmetc', 'farmrio']\n\n // Retorna a combinação ('farmrio', 'farmetc', ou 'farmrio_farmetc').\n return uniqueSortedCodes.length > 0 ? uniqueSortedCodes.join('_') : null;\n}\n","import { normalizeBrand } from '../../utils';\n\nexport function brandFromOrderForm(context: Record<string, any>) {\n if (!context.orderForm && !context.orderForm.items?.length) return null;\n\n const items = context.orderForm.items;\n\n return normalizeBrand(items);\n}\n","import { normalizeBrand } from '../../utils';\n\nexport function brandFromItem(context: Record<string, any>) {\n const { item } = context;\n\n return normalizeBrand(item.additionalInfo?.brandName || item.brand);\n}\n","import { brandFromOrderForm } from './resolvers/brand/fromOrderForm';\nimport { brandFromItem } from './resolvers/brand/fromItem';\nimport { normalizeBrand } from './utils';\nimport type { EventContext, EventName } from '../types';\n\n/**\n * Determines the brand for an event by using the context or extracting it based on the event type.\n *\n * Prefers `context.brand` when present; otherwise selects a resolver based on `eventName` to extract the brand.\n *\n * @param context - The event context which may already contain a `brand` or provide data for extraction\n * @param eventName - The event name used to choose the extraction strategy\n * @returns The resolved brand value, or `null` if no brand could be determined\n */\nexport function getBrand(context: EventContext, eventName: EventName) {\n if (context?.brand) return normalizeBrand(context.brand);\n\n switch (eventName) {\n case 'VIEW_CART':\n case 'ADD_COUPON':\n case 'ADD_PERSONAL_INFO':\n case 'BEGIN_CHECKOUT':\n return brandFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'REMOVE_FROM_CART':\n return brandFromItem(context);\n default:\n return null;\n }\n}\n","import type { EventContext } from '../../../types';\n\nimport {\n getItemSku,\n getDiscount,\n getItemCategory,\n getItemCategory2,\n getItemCategory4,\n getItemShippingTier,\n normalizeBrand,\n} from '../../utils';\n\n/**\n * Builds an array of normalized item objects from the order form contained in the given context.\n *\n * @param context - EventContext containing an orderForm with items to convert\n * @returns An array of item-like objects derived from `context.orderForm.items`, each containing fields such as `item_id`, `price`, `quantity`, `item_sku`, `item_name`, category and variant attributes, and `discount`\n */\nexport async function itemsFromOrderForm(context: EventContext) {\n const items = context.orderForm?.items || [];\n\n if (!items.length) return [];\n\n return await Promise.all(\n items.map(async (item: EventContext) => ({\n item_id: item.productId,\n item_category2: getItemCategory2(item),\n item_category4: getItemCategory4(item),\n item_shipping_tier: getItemShippingTier(context.orderForm, item),\n price: parseFloat((item.price / 100).toFixed(2)) || 0,\n quantity: item.quantity || 1,\n item_ref: item.refId || null,\n item_brand: normalizeBrand(item.additionalInfo?.brandName) || null,\n item_sku: (await getItemSku(item)) || item.id || null,\n item_name: item.name || item.id || null,\n item_category: getItemCategory(item) || null,\n item_variant: item.skuName.split('-')[0].trim(),\n item_variant2: item.skuName.split('-')[1]?.trim() || '',\n discount: getDiscount(item),\n }))\n );\n}\n","import {\n getItemSku,\n getDiscount,\n getItemCategory,\n getItemCategory2,\n getItemCategory4,\n getItemShippingTier,\n} from '../../utils';\n\nexport async function itemsFromItem(context: Record<string, any>) {\n const { item, orderForm } = context;\n return [\n {\n item_id: item.productId,\n item_category2: getItemCategory2(item),\n item_category4: getItemCategory4(item),\n item_shipping_tier: getItemShippingTier(orderForm, item),\n price: parseFloat((item.price / 100).toFixed(2)) || 0,\n quantity: 1,\n item_ref: item.refId || null,\n item_brand: item.additionalInfo?.brandName || null,\n item_sku: (await getItemSku(item)) || item.id || null,\n item_name: item.name || item.id || null,\n item_category: getItemCategory(item) || null,\n item_variant: item.skuName.split('-')[0].trim(),\n item_variant2: item.skuName.split('-')[1]?.trim() || '',\n discount: getDiscount(item),\n },\n ];\n}\n","import {\n getItemSku,\n getDiscount,\n // getItemCategory,\n // getItemCategory2,\n // getItemCategory4,\n normalizeBrand,\n} from '../../utils';\n\nexport async function itemsFromList(context: Record<string, any>) {\n const { item } = context;\n\n return [\n {\n item_id: item.productID || null,\n item_category2: item.category.split(\">\")[1]?.trim() || null,\n price: item.price || 0,\n quantity: 1,\n item_ref: context.item.additionalProperty.find((i: { name: string }) => i.name === \"RefId\").value,\n item_brand: normalizeBrand(item.brand.name) || null,\n item_sku: (await getItemSku(item)) || item.productID || null,\n item_name: item.alternateName || null,\n // item_category: null,\n item_variant: item?.name?.split(\"-\")[0].trim() || null,\n discount: getDiscount(item) || null,\n item_list_name: context?.itemListName || null,\n index: typeof context?.index === 'number' ? context.index : null\n },\n ];\n}\n","import { itemsFromOrderForm } from './resolvers/items/fromOrderForm';\nimport { itemsFromItem } from './resolvers/items/fromItem';\nimport { itemsFromList } from './resolvers/items/fromList';\n\n/**\n * Selects the appropriate item resolver based on the event name and returns its result.\n *\n * @param context - Runtime context passed to the selected resolver\n * @param eventName - Event identifier that determines which resolver to use\n * @returns The resolved items for the event, or `null` if the event is not recognized\n */\nexport function getItems(context: Record<string, any>, eventName: string) {\n if (context?.items) return context.items;\n\n switch (eventName) {\n case 'VIEW_CART':\n case 'BEGIN_CHECKOUT':\n return itemsFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'REMOVE_FROM_CART':\n return itemsFromItem(context);\n case 'SELECT_ITEM':\n return itemsFromList(context)\n default:\n return null;\n }\n}\n","import type { EventContext, EventName } from '../types';\nimport { getBrand } from './brand';\nimport { getItems } from './items';\n\nexport const paramGetters = {\n brand: getBrand,\n\n region: (context: EventContext, eventName: EventName) => {\n return context.region || null;\n },\n\n line_items: (context: EventContext, eventName: EventName) => {\n return context?.lineItems ? context.lineItems : (context.orderForm.items || [])\n .map((item: EventContext) => item.productId)\n .join(',');\n },\n\n currency: (context: EventContext, eventName: EventName) => {\n return context.orderForm?.storePreferencesData?.currencyCode || null;\n },\n\n value: (context: EventContext, eventName: EventName) => {\n return context.item ? context.item.price : context.orderForm?.value != null\n ? context.orderForm.value / 100\n : null;\n },\n\n total_discount: (context: EventContext, eventName: EventName) => {\n return (\n context.orderForm?.totalizers\n ?.filter((t: EventContext) => t.id === 'Discounts')\n .reduce((acc: EventContext, t: EventContext) => acc + t.value, 0) / 100 || 0\n );\n },\n\n subtotal: (context: EventContext, eventName: EventName) => {\n return (\n context.orderForm?.totalizers\n ?.filter((t: EventContext) => t.id === 'Items')\n .reduce((acc: EventContext, t: EventContext) => acc + t.value, 0) / 100 || 0\n );\n },\n\n coupon_message: (context: EventContext, eventName: EventName) => {\n const messages = context.orderForm?.messages || [];\n\n if (messages.length === 0) return null;\n\n const couponMessages = messages.filter((msg: EventContext) =>\n msg.text.toLowerCase().includes('cupom')\n );\n\n if (couponMessages.length === 0) return null;\n\n return couponMessages.map((msg: EventContext) => msg.text).join(' | ');\n },\n\n seller_cod_name: (context: EventContext, eventName: EventName) => {\n return context.appliedSellerCodName || null;\n },\n\n coupon: (context: EventContext, eventName: EventName) => {\n return context.appliedCoupon || null;\n },\n\n pre_filled: (context: EventContext, eventName: EventName) => {\n return !!context.preFilled;\n },\n\n search_term: (context: EventContext, eventName: EventName) => {\n return context.searchTerm || null;\n },\n\n search_found: (context: EventContext, eventName: EventName) => {\n return !!context.searchFound;\n },\n\n search_quantity: (context: EventContext, eventName: EventName) => {\n return context.searchQuantity || 0;\n },\n\n promotion_name: (context: EventContext, eventName: EventName) => {\n return context.promotionName || null;\n },\n\n creative_name: (context: EventContext, eventName: EventName) => {\n return context.creativeName || null;\n },\n\n creative_slot: (context: EventContext, eventName: EventName) => {\n return context.creativeSlot || null;\n },\n\n items: getItems,\n};\n","import { EVENTS } from '../constants';\nimport { paramGetters } from '../params';\nimport type { EventName, EventContext } from '../types'\n\ntype ParamName = keyof typeof paramGetters;\n\n/**\n * Resolve and return the required parameters for a given event.\n *\n * @param context - Context passed to each parameter getter (defaults to an empty object)\n * @param eventName - The event whose required parameters should be resolved\n * @returns An object mapping each required parameter name to its resolved value (`null` when a param getter is missing), or `undefined` if the event has no configuration\n */\nexport async function getParameters(context: EventContext = {}, eventName: EventName) {\n const eventConfig = EVENTS[eventName] as { requiredParams: string[] };\n\n if (!eventConfig) return;\n\n const params = Object.fromEntries(\n await Promise.all(\n eventConfig.requiredParams.map(async (param) => {\n const getter = paramGetters[param as ParamName];\n\n if (typeof getter !== 'function') {\n console.error(`[DT] Missing paramGetter for param: ${param}`);\n return [param, null]; // ou undefined\n }\n \n return [param, await getter(context, eventName)];\n })\n )\n );\n\n return params;\n}\n"],"mappings":"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","names":["_a","_a"]}
|
package/dist/mod.d.cts
CHANGED
|
@@ -39,6 +39,7 @@ declare const EVENTS: {
|
|
|
39
39
|
};
|
|
40
40
|
SELECT_ITEM: {
|
|
41
41
|
name: string;
|
|
42
|
+
destinations: string[];
|
|
42
43
|
requiredParams: string[];
|
|
43
44
|
};
|
|
44
45
|
VIEW_ITEM_LIST: {
|
|
@@ -94,4 +95,87 @@ type EventContext = Record<string, any>;
|
|
|
94
95
|
*/
|
|
95
96
|
declare function trackWebEvent(event: EventName, context?: EventContext): Promise<void>;
|
|
96
97
|
|
|
97
|
-
|
|
98
|
+
declare const _default: {
|
|
99
|
+
trackWebEvent: typeof trackWebEvent;
|
|
100
|
+
EVENTS: {
|
|
101
|
+
VIEW_CART: {
|
|
102
|
+
name: string;
|
|
103
|
+
destinations: string[];
|
|
104
|
+
requiredParams: string[];
|
|
105
|
+
};
|
|
106
|
+
ADD_TO_CART: {
|
|
107
|
+
name: string;
|
|
108
|
+
destinations: string[];
|
|
109
|
+
requiredParams: string[];
|
|
110
|
+
};
|
|
111
|
+
REMOVE_FROM_CART: {
|
|
112
|
+
name: string;
|
|
113
|
+
destinations: string[];
|
|
114
|
+
requiredParams: string[];
|
|
115
|
+
};
|
|
116
|
+
ADD_COUPON: {
|
|
117
|
+
name: string;
|
|
118
|
+
destinations: string[];
|
|
119
|
+
requiredParams: string[];
|
|
120
|
+
};
|
|
121
|
+
SEARCH: {
|
|
122
|
+
name: string;
|
|
123
|
+
destinations: string[];
|
|
124
|
+
requiredParams: string[];
|
|
125
|
+
};
|
|
126
|
+
VIEW_PROMOTION: {
|
|
127
|
+
name: string;
|
|
128
|
+
destinations: string[];
|
|
129
|
+
requiredParams: string[];
|
|
130
|
+
};
|
|
131
|
+
SEARCH_ZIPCODE: {
|
|
132
|
+
name: string;
|
|
133
|
+
requiredParams: string[];
|
|
134
|
+
};
|
|
135
|
+
SELECT_CONTENT: {
|
|
136
|
+
name: string;
|
|
137
|
+
requiredParams: string[];
|
|
138
|
+
};
|
|
139
|
+
SELECT_ITEM: {
|
|
140
|
+
name: string;
|
|
141
|
+
destinations: string[];
|
|
142
|
+
requiredParams: string[];
|
|
143
|
+
};
|
|
144
|
+
VIEW_ITEM_LIST: {
|
|
145
|
+
name: string;
|
|
146
|
+
requiredParams: string[];
|
|
147
|
+
};
|
|
148
|
+
BEGIN_CHECKOUT: {
|
|
149
|
+
name: string;
|
|
150
|
+
destinations: string[];
|
|
151
|
+
requiredParams: string[];
|
|
152
|
+
};
|
|
153
|
+
AUTH_ACTION: {
|
|
154
|
+
name: string;
|
|
155
|
+
requiredParams: string[];
|
|
156
|
+
};
|
|
157
|
+
ADD_PERSONAL_INFO: {
|
|
158
|
+
name: string;
|
|
159
|
+
destinations: string[];
|
|
160
|
+
requiredParams: string[];
|
|
161
|
+
};
|
|
162
|
+
ADD_SHIPPING_INFO: {
|
|
163
|
+
name: string;
|
|
164
|
+
requiredParams: string[];
|
|
165
|
+
};
|
|
166
|
+
ADD_PAYMENT_INFO: {
|
|
167
|
+
name: string;
|
|
168
|
+
requiredParams: string[];
|
|
169
|
+
};
|
|
170
|
+
ORDER_REVIWED: {
|
|
171
|
+
name: string;
|
|
172
|
+
requiredParams: string[];
|
|
173
|
+
};
|
|
174
|
+
PURCHASE: {
|
|
175
|
+
name: string;
|
|
176
|
+
requiredParams: string[];
|
|
177
|
+
};
|
|
178
|
+
};
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
export { EVENTS, _default as default, trackWebEvent };
|
package/dist/mod.d.ts
CHANGED
|
@@ -39,6 +39,7 @@ declare const EVENTS: {
|
|
|
39
39
|
};
|
|
40
40
|
SELECT_ITEM: {
|
|
41
41
|
name: string;
|
|
42
|
+
destinations: string[];
|
|
42
43
|
requiredParams: string[];
|
|
43
44
|
};
|
|
44
45
|
VIEW_ITEM_LIST: {
|
|
@@ -94,4 +95,87 @@ type EventContext = Record<string, any>;
|
|
|
94
95
|
*/
|
|
95
96
|
declare function trackWebEvent(event: EventName, context?: EventContext): Promise<void>;
|
|
96
97
|
|
|
97
|
-
|
|
98
|
+
declare const _default: {
|
|
99
|
+
trackWebEvent: typeof trackWebEvent;
|
|
100
|
+
EVENTS: {
|
|
101
|
+
VIEW_CART: {
|
|
102
|
+
name: string;
|
|
103
|
+
destinations: string[];
|
|
104
|
+
requiredParams: string[];
|
|
105
|
+
};
|
|
106
|
+
ADD_TO_CART: {
|
|
107
|
+
name: string;
|
|
108
|
+
destinations: string[];
|
|
109
|
+
requiredParams: string[];
|
|
110
|
+
};
|
|
111
|
+
REMOVE_FROM_CART: {
|
|
112
|
+
name: string;
|
|
113
|
+
destinations: string[];
|
|
114
|
+
requiredParams: string[];
|
|
115
|
+
};
|
|
116
|
+
ADD_COUPON: {
|
|
117
|
+
name: string;
|
|
118
|
+
destinations: string[];
|
|
119
|
+
requiredParams: string[];
|
|
120
|
+
};
|
|
121
|
+
SEARCH: {
|
|
122
|
+
name: string;
|
|
123
|
+
destinations: string[];
|
|
124
|
+
requiredParams: string[];
|
|
125
|
+
};
|
|
126
|
+
VIEW_PROMOTION: {
|
|
127
|
+
name: string;
|
|
128
|
+
destinations: string[];
|
|
129
|
+
requiredParams: string[];
|
|
130
|
+
};
|
|
131
|
+
SEARCH_ZIPCODE: {
|
|
132
|
+
name: string;
|
|
133
|
+
requiredParams: string[];
|
|
134
|
+
};
|
|
135
|
+
SELECT_CONTENT: {
|
|
136
|
+
name: string;
|
|
137
|
+
requiredParams: string[];
|
|
138
|
+
};
|
|
139
|
+
SELECT_ITEM: {
|
|
140
|
+
name: string;
|
|
141
|
+
destinations: string[];
|
|
142
|
+
requiredParams: string[];
|
|
143
|
+
};
|
|
144
|
+
VIEW_ITEM_LIST: {
|
|
145
|
+
name: string;
|
|
146
|
+
requiredParams: string[];
|
|
147
|
+
};
|
|
148
|
+
BEGIN_CHECKOUT: {
|
|
149
|
+
name: string;
|
|
150
|
+
destinations: string[];
|
|
151
|
+
requiredParams: string[];
|
|
152
|
+
};
|
|
153
|
+
AUTH_ACTION: {
|
|
154
|
+
name: string;
|
|
155
|
+
requiredParams: string[];
|
|
156
|
+
};
|
|
157
|
+
ADD_PERSONAL_INFO: {
|
|
158
|
+
name: string;
|
|
159
|
+
destinations: string[];
|
|
160
|
+
requiredParams: string[];
|
|
161
|
+
};
|
|
162
|
+
ADD_SHIPPING_INFO: {
|
|
163
|
+
name: string;
|
|
164
|
+
requiredParams: string[];
|
|
165
|
+
};
|
|
166
|
+
ADD_PAYMENT_INFO: {
|
|
167
|
+
name: string;
|
|
168
|
+
requiredParams: string[];
|
|
169
|
+
};
|
|
170
|
+
ORDER_REVIWED: {
|
|
171
|
+
name: string;
|
|
172
|
+
requiredParams: string[];
|
|
173
|
+
};
|
|
174
|
+
PURCHASE: {
|
|
175
|
+
name: string;
|
|
176
|
+
requiredParams: string[];
|
|
177
|
+
};
|
|
178
|
+
};
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
export { EVENTS, _default as default, trackWebEvent };
|
package/dist/mod.global.js
CHANGED
|
@@ -21,6 +21,8 @@ var AzzasTracker = (() => {
|
|
|
21
21
|
// src/index.ts
|
|
22
22
|
var src_exports = {};
|
|
23
23
|
__export(src_exports, {
|
|
24
|
+
EVENTS: () => EVENTS,
|
|
25
|
+
default: () => src_default,
|
|
24
26
|
trackWebEvent: () => trackWebEvent
|
|
25
27
|
});
|
|
26
28
|
|
|
@@ -95,7 +97,8 @@ var AzzasTracker = (() => {
|
|
|
95
97
|
},
|
|
96
98
|
SELECT_ITEM: {
|
|
97
99
|
name: "select_item",
|
|
98
|
-
|
|
100
|
+
destinations: ["DataLayer"],
|
|
101
|
+
requiredParams: ["brand", "region", "items", "line_items"]
|
|
99
102
|
},
|
|
100
103
|
VIEW_ITEM_LIST: {
|
|
101
104
|
name: "view_item_list",
|
|
@@ -143,14 +146,17 @@ var AzzasTracker = (() => {
|
|
|
143
146
|
);
|
|
144
147
|
}
|
|
145
148
|
function pushToDataLayer(event, ecomm, dest) {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
149
|
+
const targetWindow = ecomm.window;
|
|
150
|
+
const ecommercePayload = Object.assign({}, ecomm);
|
|
151
|
+
delete ecommercePayload.window;
|
|
152
|
+
dataTrackingLog({ event, ecommerce: ecommercePayload }, "#0b5fff", dest);
|
|
153
|
+
if (targetWindow) {
|
|
154
|
+
targetWindow.dataLayer = targetWindow.dataLayer || [];
|
|
155
|
+
targetWindow.dataLayer.push({ event, ecommerce: ecommercePayload });
|
|
150
156
|
return;
|
|
151
157
|
}
|
|
152
158
|
window.dataLayer = window.dataLayer || [];
|
|
153
|
-
window.dataLayer.push({ event, ecommerce:
|
|
159
|
+
window.dataLayer.push({ event, ecommerce: ecommercePayload });
|
|
154
160
|
}
|
|
155
161
|
function pushToMeta(event, ecomm, dest) {
|
|
156
162
|
dataTrackingLog({ eventName: event, data: ecomm }, "#8C1007", dest);
|
|
@@ -198,12 +204,12 @@ var AzzasTracker = (() => {
|
|
|
198
204
|
}
|
|
199
205
|
async function getItemSku(item) {
|
|
200
206
|
var _a, _b;
|
|
201
|
-
const product = await getProductDataById(item.productId);
|
|
207
|
+
const product = await getProductDataById(item.productId || item.productID);
|
|
202
208
|
if (!product.length) return null;
|
|
203
209
|
return (_b = (_a = product[0].items.find((i) => i.name === item.skuName)) == null ? void 0 : _a.itemId) != null ? _b : null;
|
|
204
210
|
}
|
|
205
211
|
function getDiscount(item) {
|
|
206
|
-
return parseFloat(Math.max(item.listPrice - item.sellingPrice, 0).toFixed(2)) || 0;
|
|
212
|
+
return item.discount ? item.discount : parseFloat(Math.max(item.listPrice - item.sellingPrice, 0).toFixed(2)) || 0;
|
|
207
213
|
}
|
|
208
214
|
function getItemCategory(item) {
|
|
209
215
|
return "sale";
|
|
@@ -216,21 +222,36 @@ var AzzasTracker = (() => {
|
|
|
216
222
|
const tags = ((_a = item == null ? void 0 : item.additionalInfo) == null ? void 0 : _a.tags) || (item == null ? void 0 : item.tags);
|
|
217
223
|
return Array.isArray(tags) && tags.length ? tags.join(",") : null;
|
|
218
224
|
}
|
|
219
|
-
var
|
|
225
|
+
var BRAND_CODES = {
|
|
226
|
+
farm: "farmrio",
|
|
227
|
+
"farm etc": "farmetc",
|
|
228
|
+
"farm rio": "farmrio"
|
|
229
|
+
};
|
|
230
|
+
function getBrandCode(brand) {
|
|
231
|
+
if (!brand) return null;
|
|
232
|
+
const standardized = brand.toLowerCase().trim();
|
|
233
|
+
return BRAND_CODES[standardized] || null;
|
|
234
|
+
}
|
|
220
235
|
function normalizeBrand(input) {
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
236
|
+
var _a;
|
|
237
|
+
let brandStrings = [];
|
|
238
|
+
if (Array.isArray(input) && input.every((item) => typeof item === "string")) {
|
|
239
|
+
brandStrings = input;
|
|
240
|
+
} else if (Array.isArray(input)) {
|
|
241
|
+
brandStrings = input.map((item) => {
|
|
242
|
+
var _a2;
|
|
243
|
+
return ((_a2 = item.additionalInfo) == null ? void 0 : _a2.brandName) || item.brand;
|
|
244
|
+
});
|
|
245
|
+
} else if (typeof input === "object" && input !== null && "brand" in input) {
|
|
246
|
+
brandStrings = [((_a = input.additionalInfo) == null ? void 0 : _a.brandName) || input.brand];
|
|
247
|
+
} else if (typeof input === "string") {
|
|
248
|
+
return getBrandCode(input);
|
|
249
|
+
} else {
|
|
250
|
+
return null;
|
|
232
251
|
}
|
|
233
|
-
|
|
252
|
+
const brandCodes = brandStrings.map(getBrandCode).filter((code) => code !== null);
|
|
253
|
+
const uniqueSortedCodes = [...new Set(brandCodes)].sort();
|
|
254
|
+
return uniqueSortedCodes.length > 0 ? uniqueSortedCodes.join("_") : null;
|
|
234
255
|
}
|
|
235
256
|
|
|
236
257
|
// src/params/resolvers/brand/fromOrderForm.ts
|
|
@@ -250,7 +271,7 @@ var AzzasTracker = (() => {
|
|
|
250
271
|
|
|
251
272
|
// src/params/brand.ts
|
|
252
273
|
function getBrand(context, eventName) {
|
|
253
|
-
if (context == null ? void 0 : context.brand) return context.brand;
|
|
274
|
+
if (context == null ? void 0 : context.brand) return normalizeBrand(context.brand);
|
|
254
275
|
switch (eventName) {
|
|
255
276
|
case "VIEW_CART":
|
|
256
277
|
case "ADD_COUPON":
|
|
@@ -317,8 +338,32 @@ var AzzasTracker = (() => {
|
|
|
317
338
|
];
|
|
318
339
|
}
|
|
319
340
|
|
|
341
|
+
// src/params/resolvers/items/fromList.ts
|
|
342
|
+
async function itemsFromList(context) {
|
|
343
|
+
var _a, _b;
|
|
344
|
+
const { item } = context;
|
|
345
|
+
return [
|
|
346
|
+
{
|
|
347
|
+
item_id: item.productID || null,
|
|
348
|
+
item_category2: ((_a = item.category.split(">")[1]) == null ? void 0 : _a.trim()) || null,
|
|
349
|
+
price: item.price || 0,
|
|
350
|
+
quantity: 1,
|
|
351
|
+
item_ref: context.item.additionalProperty.find((i) => i.name === "RefId").value,
|
|
352
|
+
item_brand: normalizeBrand(item.brand.name) || null,
|
|
353
|
+
item_sku: await getItemSku(item) || item.productID || null,
|
|
354
|
+
item_name: item.alternateName || null,
|
|
355
|
+
// item_category: null,
|
|
356
|
+
item_variant: ((_b = item == null ? void 0 : item.name) == null ? void 0 : _b.split("-")[0].trim()) || null,
|
|
357
|
+
discount: getDiscount(item) || null,
|
|
358
|
+
item_list_name: (context == null ? void 0 : context.itemListName) || null,
|
|
359
|
+
index: typeof (context == null ? void 0 : context.index) === "number" ? context.index : null
|
|
360
|
+
}
|
|
361
|
+
];
|
|
362
|
+
}
|
|
363
|
+
|
|
320
364
|
// src/params/items.ts
|
|
321
365
|
function getItems(context, eventName) {
|
|
366
|
+
if (context == null ? void 0 : context.items) return context.items;
|
|
322
367
|
switch (eventName) {
|
|
323
368
|
case "VIEW_CART":
|
|
324
369
|
case "BEGIN_CHECKOUT":
|
|
@@ -326,6 +371,8 @@ var AzzasTracker = (() => {
|
|
|
326
371
|
case "ADD_TO_CART":
|
|
327
372
|
case "REMOVE_FROM_CART":
|
|
328
373
|
return itemsFromItem(context);
|
|
374
|
+
case "SELECT_ITEM":
|
|
375
|
+
return itemsFromList(context);
|
|
329
376
|
default:
|
|
330
377
|
return null;
|
|
331
378
|
}
|
|
@@ -338,7 +385,7 @@ var AzzasTracker = (() => {
|
|
|
338
385
|
return context.region || null;
|
|
339
386
|
},
|
|
340
387
|
line_items: (context, eventName) => {
|
|
341
|
-
return (context.orderForm.items || []).map((item) => item.productId).join(",");
|
|
388
|
+
return (context == null ? void 0 : context.lineItems) ? context.lineItems : (context.orderForm.items || []).map((item) => item.productId).join(",");
|
|
342
389
|
},
|
|
343
390
|
currency: (context, eventName) => {
|
|
344
391
|
var _a, _b;
|
|
@@ -427,6 +474,10 @@ var AzzasTracker = (() => {
|
|
|
427
474
|
return console.error(`[DT] Error tracking event ${event}:`, err);
|
|
428
475
|
}
|
|
429
476
|
}
|
|
477
|
+
var src_default = {
|
|
478
|
+
trackWebEvent,
|
|
479
|
+
EVENTS
|
|
480
|
+
};
|
|
430
481
|
return __toCommonJS(src_exports);
|
|
431
482
|
})();
|
|
432
483
|
//# sourceMappingURL=mod.global.js.map
|
package/dist/mod.global.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/constants.ts","../src/adapters/index.ts","../src/params/utils/index.ts","../src/params/resolvers/brand/fromOrderForm.ts","../src/params/resolvers/brand/fromItem.ts","../src/params/brand.ts","../src/params/resolvers/items/fromOrderForm.ts","../src/params/resolvers/items/fromItem.ts","../src/params/items.ts","../src/params/index.ts","../src/formatter/index.ts"],"sourcesContent":["import { dispatchTrackEvent } from './adapters';\nimport { getParameters } from './formatter';\nimport type { EventContext, EventName } from './types';\n\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 };\n","export const EVENTS = {\n VIEW_CART: {\n name: 'view_cart',\n destinations: ['Dito', 'DataLayer',],\n requiredParams: [\n 'brand',\n 'region',\n 'line_items',\n 'currency',\n 'value',\n 'total_discount',\n 'subtotal',\n 'items',\n ],\n },\n\n ADD_TO_CART: {\n name: 'add_to_cart',\n destinations: ['DataLayer'],\n requiredParams: [\n 'brand',\n 'region',\n 'line_items',\n 'currency',\n 'value',\n 'items',\n ],\n },\n\n REMOVE_FROM_CART: {\n name: 'remove_from_cart',\n destinations: ['DataLayer'],\n requiredParams: [\n 'brand',\n 'region',\n 'line_items',\n 'currency',\n 'value',\n 'items',\n ],\n },\n\n ADD_COUPON: {\n name: 'add_coupon',\n destinations: ['DataLayer'],\n requiredParams: [\n 'brand',\n 'region',\n 'coupon',\n 'coupon_message',\n 'seller_cod_name',\n ],\n },\n\n SEARCH: {\n name: 'search',\n destinations: ['DataLayer'],\n requiredParams: ['brand', 'search_term', 'search_found', 'search_quantity'],\n },\n\n VIEW_PROMOTION: {\n name: 'view_promotion',\n destinations: ['DataLayer'],\n requiredParams: ['region', 'promotion_name', 'creative_name', 'creative_slot'],\n },\n\n SEARCH_ZIPCODE: {\n name: 'search_zipcode',\n requiredParams: ['region'],\n },\n\n SELECT_CONTENT: {\n name: 'select_content',\n requiredParams: ['region'],\n },\n\n SELECT_ITEM: {\n name: 'select_item',\n requiredParams: ['region'],\n },\n\n VIEW_ITEM_LIST: {\n name: 'view_item_list',\n requiredParams: ['region'],\n },\n\n BEGIN_CHECKOUT: {\n name: 'begin_checkout',\n destinations: ['DataLayer'],\n requiredParams: ['brand', 'line_items', 'currency', 'value', 'total_discount', 'subtotal', 'items'],\n },\n\n AUTH_ACTION: {\n name: 'auth_action',\n requiredParams: ['region'],\n },\n\n ADD_PERSONAL_INFO: {\n name: 'add_personal_info',\n destinations: ['DataLayer'],\n requiredParams: ['brand', 'pre_filled', 'line_items', 'currency', 'value', 'total_discount', 'subtotal'],\n },\n\n ADD_SHIPPING_INFO: {\n name: 'add_shipping_info',\n requiredParams: ['region'],\n },\n\n ADD_PAYMENT_INFO: {\n name: 'add_payment_info',\n requiredParams: ['region'],\n },\n\n ORDER_REVIWED: {\n name: 'order_reviewed',\n requiredParams: ['region'],\n },\n\n PURCHASE: {\n name: 'purchase',\n requiredParams: ['region'],\n },\n};\n","import { EVENTS } from '../constants';\nimport type { EventName, EventContext } from '../types'\n\n\n/**\n * Logs a styled tracking message to the console with the destination and event payload.\n *\n * @param data - The event payload or context to include in the log; if falsy, an empty string is logged\n * @param color - CSS background color used for the log label\n * @param destination - Destination name shown in the log label (prefixed by \"DT - \")\n */\nfunction dataTrackingLog(data: EventContext, color: string, destination: string) {\n console.log(\n `%c[DT - ${destination}] EVENTO DISPARADO:%c `,\n `background: ${color}; color: white; font-weight: bold; padding: 2px 4px; border-radius: 3px;`,\n 'color: #fff;',\n data || ''\n );\n}\n\n/**\n * Pushes an ecommerce tracking event to the appropriate dataLayer and logs the payload.\n *\n * Ensures a dataLayer array exists on the target (prefer `ecomm.window` if present, otherwise the global `window`)\n * and pushes an object containing `event` and the `ecomm` payload. Also logs the pushed payload for debugging.\n *\n * @param event - The tracking event name to push\n * @param ecomm - The ecommerce event context payload; if it contains a `window` property that object's `dataLayer` will be used as the target\n * @param dest - A destination label used by the logger\n */\nfunction pushToDataLayer(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ event: event, ecommerce: ecomm }, '#0b5fff', dest);\n\n if (ecomm.window) {\n ecomm.window.dataLayer = ecomm.window.dataLayer || []\n ecomm.window.dataLayer.push({ event: event, ecommerce: ecomm })\n return;\n }\n\n window.dataLayer = window.dataLayer || []\n window.dataLayer.push({ event: event, ecommerce: ecomm })\n}\n\n/**\n * Log a Meta tracking event payload for delivery to the Meta destination.\n *\n * @param event - The event name to send to Meta\n * @param ecomm - The event context / ecommerce payload\n * @param dest - Destination identifier (e.g., \"Meta\")\n */\nfunction pushToMeta(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ eventName: event, data: ecomm }, '#8C1007', dest);\n}\n\nfunction pushToDito(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ id: event, custom_data: ecomm }, '#00c851', dest);\n}\n\nconst adapters = {\n Meta: pushToMeta,\n DataLayer: pushToDataLayer,\n Dito: pushToDito,\n};\n\ntype AdapterKey = keyof typeof adapters;\n\n/**\n * Dispatches a tracking event to all destinations configured for the given event.\n *\n * Looks up destinations from the EVENTS configuration, calls each destination adapter\n * in parallel (providing the event name in lowercase and the supplied context), and\n * waits for all attempts to settle. Individual adapter failures are logged with the\n * \"[DT]\" prefix but do not prevent other destinations from running.\n *\n * @param eventName - The name of the event to dispatch\n * @param data - The event context/payload to send to adapters\n */\nexport async function dispatchTrackEvent(eventName: EventName, data: EventContext) {\n const eventConfig = EVENTS[eventName] as { destinations: string[] };\n\n if (!eventConfig) return;\n\n await Promise.allSettled(\n eventConfig.destinations.map(async (dest: string) => {\n try {\n // call the adapter function based on the destination mapped in the adapters object\n // eventName is converted to lowercase to match the expected format in all adapters\n await adapters[dest as AdapterKey](eventName.toLowerCase(), data, dest);\n } catch (err) {\n console.error(`[DT] Failed to send ${eventName} to ${dest}:`, err);\n }\n })\n );\n}\n","/**\n * Fetches product data for the given product id from the catalog API.\n *\n * @param id - The product identifier used as the `productId` query filter\n * @returns The parsed JSON response containing product data, or `undefined` if the request fails\n */\nexport async function getProductDataById(id: any) {\n try {\n const response = await fetch(\n `/api/catalog_system/pub/products/search?fq=productId:${id}`\n );\n\n return await response.json();\n } catch (e) {\n console.log('[DT] Erro ao buscar dados do produto', e);\n }\n}\n\nexport function getItemShippingTier(orderForm: any, item: any) {\n const info = orderForm?.shippingData?.logisticsInfo?.find(\n (li: any) => li.itemId === item.id\n );\n\n const selectedSla = info?.slas?.find((sla: any) => sla.id === info.selectedSla);\n return selectedSla?.pickupStoreInfo?.friendlyName\n ? `retirada em loja: ${selectedSla.pickupStoreInfo.friendlyName}`\n : selectedSla?.name\n ? `Receba em casa: ${selectedSla.name}`\n : null;\n}\n\nexport async function getItemSku(item: any) {\n const product = await getProductDataById(item.productId);\n\n if (!product.length) return null;\n\n return product[0].items.find((i: any) => i.name === item.skuName)?.itemId ?? null;\n}\n\nexport function getDiscount(item: any) {\n return (\n parseFloat(Math.max(item.listPrice - item.sellingPrice, 0).toFixed(2)) || 0\n );\n}\n\nexport function getItemCategory(item: any) {\n return 'sale';\n}\n\nexport function getItemCategory2(item: any) {\n return 'sale2';\n}\n\nexport function getItemCategory4(item: any) {\n const tags = item?.additionalInfo?.tags || item?.tags;\n return Array.isArray(tags) && tags.length ? tags.join(',') : null;\n}\n\nconst brandMap = { Farm: 'farmrio', 'Farm Etc': 'farmetc' };\nexport function normalizeBrand(input: any) {\n if (typeof input === 'string') {\n return brandMap[input as keyof typeof brandMap] || null;\n }\n\n if (Array.isArray(input)) {\n const uniqueBrands = new Set(\n input.map((i) => brandMap[i.additionalInfo?.brandName as keyof typeof brandMap || i.brand])\n );\n return uniqueBrands.size ? [...uniqueBrands].join('_') : null;\n }\n\n return null;\n}\n","import { normalizeBrand } from '../../utils';\n\nexport function brandFromOrderForm(context: Record<string, any>) {\n if (!context.orderForm && !context.orderForm.items?.length) return null;\n\n const items = context.orderForm.items;\n\n return normalizeBrand(items);\n}\n","import { normalizeBrand } from '../../utils';\n\nexport function brandFromItem(context: Record<string, any>) {\n const { item } = context;\n\n return normalizeBrand(item.additionalInfo?.brandName || item.brand);\n}\n","import { brandFromOrderForm } from './resolvers/brand/fromOrderForm';\nimport { brandFromItem } from './resolvers/brand/fromItem';\nimport type { EventContext, EventName } from '../types';\n\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 context.brand;\n\n switch (eventName) {\n case 'VIEW_CART':\n case 'ADD_COUPON':\n case 'ADD_PERSONAL_INFO':\n case 'BEGIN_CHECKOUT':\n return brandFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'REMOVE_FROM_CART':\n return brandFromItem(context);\n default:\n return null;\n }\n}\n","import type { EventContext } from '../../../types';\n\nimport {\n getItemSku,\n getDiscount,\n getItemCategory,\n getItemCategory2,\n getItemCategory4,\n getItemShippingTier,\n normalizeBrand,\n} from '../../utils';\n\n/**\n * Builds an array of normalized item objects from the order form contained in the given context.\n *\n * @param context - EventContext containing an orderForm with items to convert\n * @returns An array of item-like objects derived from `context.orderForm.items`, each containing fields such as `item_id`, `price`, `quantity`, `item_sku`, `item_name`, category and variant attributes, and `discount`\n */\nexport async function itemsFromOrderForm(context: EventContext) {\n const items = context.orderForm?.items || [];\n\n if (!items.length) return [];\n\n return await Promise.all(\n items.map(async (item: EventContext) => ({\n item_id: item.productId,\n item_category2: getItemCategory2(item),\n item_category4: getItemCategory4(item),\n item_shipping_tier: getItemShippingTier(context.orderForm, item),\n price: parseFloat((item.price / 100).toFixed(2)) || 0,\n quantity: item.quantity || 1,\n item_ref: item.refId || null,\n item_brand: normalizeBrand(item.additionalInfo?.brandName) || null,\n item_sku: (await getItemSku(item)) || item.id || null,\n item_name: item.name || item.id || null,\n item_category: getItemCategory(item) || null,\n item_variant: item.skuName.split('-')[0].trim(),\n item_variant2: item.skuName.split('-')[1]?.trim() || '',\n discount: getDiscount(item),\n }))\n );\n}\n","import {\n getItemSku,\n getDiscount,\n getItemCategory,\n getItemCategory2,\n getItemCategory4,\n getItemShippingTier,\n} from '../../utils';\n\nexport async function itemsFromItem(context: Record<string, any>) {\n const { item, orderForm } = context;\n return [\n {\n item_id: item.productId,\n item_category2: getItemCategory2(item),\n item_category4: getItemCategory4(item),\n item_shipping_tier: getItemShippingTier(orderForm, item),\n price: parseFloat((item.price / 100).toFixed(2)) || 0,\n quantity: 1,\n item_ref: item.refId || null,\n item_brand: item.additionalInfo?.brandName || null,\n item_sku: (await getItemSku(item)) || item.id || null,\n item_name: item.name || item.id || null,\n item_category: getItemCategory(item) || null,\n item_variant: item.skuName.split('-')[0].trim(),\n item_variant2: item.skuName.split('-')[1]?.trim() || '',\n discount: getDiscount(item),\n },\n ];\n}\n","import { itemsFromOrderForm } from './resolvers/items/fromOrderForm';\nimport { itemsFromItem } from './resolvers/items/fromItem';\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 switch (eventName) {\n case 'VIEW_CART':\n case 'BEGIN_CHECKOUT':\n return itemsFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'REMOVE_FROM_CART':\n return itemsFromItem(context);\n default:\n return null;\n }\n}\n","import type { EventContext, EventName } from '../types';\nimport { getBrand } from './brand';\nimport { getItems } from './items';\n\nexport const paramGetters = {\n brand: getBrand,\n\n region: (context: EventContext, eventName: EventName) => {\n return context.region || null;\n },\n\n line_items: (context: EventContext, eventName: EventName) => {\n return (context.orderForm.items || [])\n .map((item: EventContext) => item.productId)\n .join(',');\n },\n\n currency: (context: EventContext, eventName: EventName) => {\n return context.orderForm?.storePreferencesData?.currencyCode || null;\n },\n\n value: (context: EventContext, eventName: EventName) => {\n return context.item ? context.item.price : context.orderForm?.value != null\n ? context.orderForm.value / 100\n : null;\n },\n\n total_discount: (context: EventContext, eventName: EventName) => {\n return (\n context.orderForm?.totalizers\n ?.filter((t: EventContext) => t.id === 'Discounts')\n .reduce((acc: EventContext, t: EventContext) => acc + t.value, 0) / 100 || 0\n );\n },\n\n subtotal: (context: EventContext, eventName: EventName) => {\n return (\n context.orderForm?.totalizers\n ?.filter((t: EventContext) => t.id === 'Items')\n .reduce((acc: EventContext, t: EventContext) => acc + t.value, 0) / 100 || 0\n );\n },\n\n coupon_message: (context: EventContext, eventName: EventName) => {\n const messages = context.orderForm?.messages || [];\n\n if (messages.length === 0) return null;\n\n const couponMessages = messages.filter((msg: EventContext) =>\n msg.text.toLowerCase().includes('cupom')\n );\n\n if (couponMessages.length === 0) return null;\n\n return couponMessages.map((msg: EventContext) => msg.text).join(' | ');\n },\n\n seller_cod_name: (context: EventContext, eventName: EventName) => {\n return context.appliedSellerCodName || null;\n },\n\n coupon: (context: EventContext, eventName: EventName) => {\n return context.appliedCoupon || null;\n },\n\n pre_filled: (context: EventContext, eventName: EventName) => {\n return !!context.preFilled;\n },\n\n search_term: (context: EventContext, eventName: EventName) => {\n return context.searchTerm || null;\n },\n\n search_found: (context: EventContext, eventName: EventName) => {\n return !!context.searchFound;\n },\n\n search_quantity: (context: EventContext, eventName: EventName) => {\n return context.searchQuantity || 0;\n },\n\n promotion_name: (context: EventContext, eventName: EventName) => {\n return context.promotionName || null;\n },\n\n creative_name: (context: EventContext, eventName: EventName) => {\n return context.creativeName || null;\n },\n\n creative_slot: (context: EventContext, eventName: EventName) => {\n return context.creativeSlot || null;\n },\n\n items: getItems,\n};\n","import { EVENTS } from '../constants';\nimport { paramGetters } from '../params';\nimport type { EventName, EventContext } from '../types'\n\ntype ParamName = keyof typeof paramGetters;\n\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"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/constants.ts","../src/adapters/index.ts","../src/params/utils/index.ts","../src/params/resolvers/brand/fromOrderForm.ts","../src/params/resolvers/brand/fromItem.ts","../src/params/brand.ts","../src/params/resolvers/items/fromOrderForm.ts","../src/params/resolvers/items/fromItem.ts","../src/params/resolvers/items/fromList.ts","../src/params/items.ts","../src/params/index.ts","../src/formatter/index.ts"],"sourcesContent":["import { dispatchTrackEvent } from './adapters';\nimport { getParameters } from './formatter';\nimport { EVENTS } from './constants';\nimport type { EventContext, EventName } from './types';\n\n/**\n * Assembles tracking parameters and sends a web tracking event.\n *\n * @param event - The name of the event to track.\n * @param context - Optional context used to build event parameters; may include a `window` property that will be attached to the dispatched payload.\n * @returns The result returned by `dispatchTrackEvent` when the event is sent successfully, or the value returned by `console.error` (`undefined`) if an error occurs.\n */\nasync function trackWebEvent(event: EventName, context: EventContext = {}) {\n try {\n // object data to be sent\n const parameters = await getParameters(context, event);\n\n // function to send event\n return await dispatchTrackEvent(\n event,\n Object.assign({}, parameters, { window: context.window })\n );\n } catch (err) {\n return console.error(`[DT] Error tracking event ${event}:`, err);\n }\n}\n\nexport { trackWebEvent, EVENTS };\n\nexport default {\n trackWebEvent,\n EVENTS,\n}\n","export const EVENTS = {\n VIEW_CART: {\n name: 'view_cart',\n destinations: ['Dito', 'DataLayer',],\n requiredParams: [\n 'brand',\n 'region',\n 'line_items',\n 'currency',\n 'value',\n 'total_discount',\n 'subtotal',\n 'items',\n ],\n },\n\n ADD_TO_CART: {\n name: 'add_to_cart',\n destinations: ['DataLayer'],\n requiredParams: [\n 'brand',\n 'region',\n 'line_items',\n 'currency',\n 'value',\n 'items',\n ],\n },\n\n REMOVE_FROM_CART: {\n name: 'remove_from_cart',\n destinations: ['DataLayer'],\n requiredParams: [\n 'brand',\n 'region',\n 'line_items',\n 'currency',\n 'value',\n 'items',\n ],\n },\n\n ADD_COUPON: {\n name: 'add_coupon',\n destinations: ['DataLayer'],\n requiredParams: [\n 'brand',\n 'region',\n 'coupon',\n 'coupon_message',\n 'seller_cod_name',\n ],\n },\n\n SEARCH: {\n name: 'search',\n destinations: ['DataLayer'],\n requiredParams: ['brand', 'search_term', 'search_found', 'search_quantity'],\n },\n\n VIEW_PROMOTION: {\n name: 'view_promotion',\n destinations: ['DataLayer'],\n requiredParams: ['region', 'promotion_name', 'creative_name', 'creative_slot'],\n },\n\n SEARCH_ZIPCODE: {\n name: 'search_zipcode',\n requiredParams: ['region'],\n },\n\n SELECT_CONTENT: {\n name: 'select_content',\n requiredParams: ['region'],\n },\n\n SELECT_ITEM: {\n name: 'select_item',\n destinations: ['DataLayer'],\n requiredParams: ['brand', 'region', 'items', 'line_items'],\n },\n\n VIEW_ITEM_LIST: {\n name: 'view_item_list',\n requiredParams: ['region'],\n },\n\n BEGIN_CHECKOUT: {\n name: 'begin_checkout',\n destinations: ['DataLayer'],\n requiredParams: ['brand', 'line_items', 'currency', 'value', 'total_discount', 'subtotal', 'items'],\n },\n\n AUTH_ACTION: {\n name: 'auth_action',\n requiredParams: ['region'],\n },\n\n ADD_PERSONAL_INFO: {\n name: 'add_personal_info',\n destinations: ['DataLayer'],\n requiredParams: ['brand', 'pre_filled', 'line_items', 'currency', 'value', 'total_discount', 'subtotal'],\n },\n\n ADD_SHIPPING_INFO: {\n name: 'add_shipping_info',\n requiredParams: ['region'],\n },\n\n ADD_PAYMENT_INFO: {\n name: 'add_payment_info',\n requiredParams: ['region'],\n },\n\n ORDER_REVIWED: {\n name: 'order_reviewed',\n requiredParams: ['region'],\n },\n\n PURCHASE: {\n name: 'purchase',\n requiredParams: ['region'],\n },\n};\n","import { EVENTS } from '../constants';\nimport type { EventName, EventContext } from '../types'\n\n\n/**\n * Logs a styled tracking message to the console with the destination and event payload.\n *\n * @param data - The event payload or context to include in the log; if falsy, an empty string is logged\n * @param color - CSS background color used for the log label\n * @param destination - Destination name shown in the log label (prefixed by \"DT - \")\n */\nfunction dataTrackingLog(data: EventContext, color: string, destination: string) {\n console.log(\n `%c[DT - ${destination}] EVENTO DISPARADO:%c `,\n `background: ${color}; color: white; font-weight: bold; padding: 2px 4px; border-radius: 3px;`,\n 'color: #fff;',\n data || ''\n );\n}\n\n/**\n * Pushes an ecommerce tracking event to the appropriate dataLayer and logs the payload.\n *\n * Ensures a dataLayer array exists on the target (prefer `ecomm.window` if present, otherwise the global `window`)\n * and pushes an object containing `event` and the `ecomm` payload. Also logs the pushed payload for debugging.\n *\n * @param event - The tracking event name to push\n * @param ecomm - The ecommerce event context payload; if it contains a `window` property that object's `dataLayer` will be used as the target\n * @param dest - A destination label used by the logger\n */\nfunction pushToDataLayer(event: string, ecomm: EventContext, dest: string) {\n 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}\n\n/**\n * Log a Meta tracking event payload for delivery to the Meta destination.\n *\n * @param event - The event name to send to Meta\n * @param ecomm - The event context / ecommerce payload\n * @param dest - Destination identifier (e.g., \"Meta\")\n */\nfunction pushToMeta(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ eventName: event, data: ecomm }, '#8C1007', dest);\n}\n\nfunction pushToDito(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ id: event, custom_data: ecomm }, '#00c851', dest);\n}\n\nconst adapters = {\n Meta: pushToMeta,\n DataLayer: pushToDataLayer,\n Dito: pushToDito,\n};\n\ntype AdapterKey = keyof typeof adapters;\n\n/**\n * Dispatches a tracking event to all destinations configured for the given event.\n *\n * Looks up destinations from the EVENTS configuration, calls each destination adapter\n * in parallel (providing the event name in lowercase and the supplied context), and\n * waits for all attempts to settle. Individual adapter failures are logged with the\n * \"[DT]\" prefix but do not prevent other destinations from running.\n *\n * @param eventName - The name of the event to dispatch\n * @param data - The event context/payload to send to adapters\n */\nexport async function dispatchTrackEvent(eventName: EventName, data: EventContext) {\n const eventConfig = EVENTS[eventName] as { destinations: string[] };\n\n if (!eventConfig) return;\n\n await Promise.allSettled(\n eventConfig.destinations.map(async (dest: string) => {\n try {\n // call the adapter function based on the destination mapped in the adapters object\n // eventName is converted to lowercase to match the expected format in all adapters\n await adapters[dest as AdapterKey](eventName.toLowerCase(), data, dest);\n } catch (err) {\n console.error(`[DT] Failed to send ${eventName} to ${dest}:`, err);\n }\n })\n );\n}\n","/**\n * Fetches product data for the given product id from the catalog API.\n *\n * @param id - The product identifier used as the `productId` query filter\n * @returns The parsed JSON response containing product data, or `undefined` if the request fails\n */\nexport async function getProductDataById(id: any) {\n try {\n const response = await fetch(\n `/api/catalog_system/pub/products/search?fq=productId:${id}`\n );\n\n return await response.json();\n } catch (e) {\n console.log('[DT] Erro ao buscar dados do produto', e);\n }\n}\n\nexport function getItemShippingTier(orderForm: any, item: any) {\n const info = orderForm?.shippingData?.logisticsInfo?.find(\n (li: any) => li.itemId === item.id\n );\n\n const selectedSla = info?.slas?.find((sla: any) => sla.id === info.selectedSla);\n return selectedSla?.pickupStoreInfo?.friendlyName\n ? `retirada em loja: ${selectedSla.pickupStoreInfo.friendlyName}`\n : selectedSla?.name\n ? `Receba em casa: ${selectedSla.name}`\n : null;\n}\n\nexport async function getItemSku(item: any) {\n const product = await getProductDataById(item.productId || item.productID);\n\n if (!product.length) return null;\n\n return product[0].items.find((i: any) => i.name === item.skuName)?.itemId ?? null;\n}\n\nexport function getDiscount(item: any) {\n return item.discount ? item.discount :\n (\n parseFloat(Math.max(item.listPrice - item.sellingPrice, 0).toFixed(2)) || 0\n );\n}\n\nexport function getItemCategory(item: any) {\n return 'sale';\n}\n\nexport function getItemCategory2(item: any) {\n return 'sale2';\n}\n\nexport function getItemCategory4(item: any) {\n const tags = item?.additionalInfo?.tags || item?.tags;\n return Array.isArray(tags) && tags.length ? tags.join(',') : null;\n}\n\nconst BRAND_CODES = {\n farm: 'farmrio',\n 'farm etc': 'farmetc',\n 'farm rio': 'farmrio',\n} as const;\n\ntype Standardized = keyof typeof BRAND_CODES\ninterface BrandItem {\n brand?: string;\n additionalInfo?: {\n brandName?: string;\n };\n}\n\n/**\n * Extrai o código padronizado (ex: 'farmrio') de uma única string de marca.\n * Retorna null se não houver mapeamento.\n */\nfunction getBrandCode(brand: string | undefined): string | null {\n if (!brand) return null;\n const standardized = brand.toLowerCase().trim();\n return BRAND_CODES[standardized as Standardized] || null;\n}\n\n/**\n * Função principal que padroniza a marca ou lista de marcas para o formato final:\n * 'farmrio', 'farmetc', ou 'farmrio_farmetc'.\n */\nexport function normalizeBrand(input: string | BrandItem[] | BrandItem | string[] | undefined | null) {\n let brandStrings = [];\n\n if (Array.isArray(input) && input.every(item => typeof item === 'string')) {\n brandStrings = input as string[];\n } else if (Array.isArray(input)) {\n // Se for um Array, coleta a string da marca de cada item.\n brandStrings = input.map(item => item.additionalInfo?.brandName || item.brand);\n } else if (typeof input === 'object' && input !== null && 'brand' in input) {\n // Se for um Objeto único, trata como um Array de um único item (para reuso de lógica).\n brandStrings = [(input as BrandItem).additionalInfo?.brandName || (input as BrandItem).brand];\n } else if (typeof input === 'string') {\n // Se for uma String (mal formatada ou não), trata diretamente.\n return getBrandCode(input);\n } else {\n // Se for undefined, null, ou outro tipo não esperado.\n return null;\n }\n\n const brandCodes = brandStrings\n .map(getBrandCode)\n .filter((code): code is string => code !== null); // ['farmrio', 'farmetc', 'farmrio']\n\n const uniqueSortedCodes = [...new Set(brandCodes)].sort(); // ['farmetc', 'farmrio']\n\n // Retorna a combinação ('farmrio', 'farmetc', ou 'farmrio_farmetc').\n return uniqueSortedCodes.length > 0 ? uniqueSortedCodes.join('_') : null;\n}\n","import { normalizeBrand } from '../../utils';\n\nexport function brandFromOrderForm(context: Record<string, any>) {\n if (!context.orderForm && !context.orderForm.items?.length) return null;\n\n const items = context.orderForm.items;\n\n return normalizeBrand(items);\n}\n","import { normalizeBrand } from '../../utils';\n\nexport function brandFromItem(context: Record<string, any>) {\n const { item } = context;\n\n return normalizeBrand(item.additionalInfo?.brandName || item.brand);\n}\n","import { brandFromOrderForm } from './resolvers/brand/fromOrderForm';\nimport { brandFromItem } from './resolvers/brand/fromItem';\nimport { normalizeBrand } from './utils';\nimport type { EventContext, EventName } from '../types';\n\n/**\n * Determines the brand for an event by using the context or extracting it based on the event type.\n *\n * Prefers `context.brand` when present; otherwise selects a resolver based on `eventName` to extract the brand.\n *\n * @param context - The event context which may already contain a `brand` or provide data for extraction\n * @param eventName - The event name used to choose the extraction strategy\n * @returns The resolved brand value, or `null` if no brand could be determined\n */\nexport function getBrand(context: EventContext, eventName: EventName) {\n if (context?.brand) return normalizeBrand(context.brand);\n\n switch (eventName) {\n case 'VIEW_CART':\n case 'ADD_COUPON':\n case 'ADD_PERSONAL_INFO':\n case 'BEGIN_CHECKOUT':\n return brandFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'REMOVE_FROM_CART':\n return brandFromItem(context);\n default:\n return null;\n }\n}\n","import type { EventContext } from '../../../types';\n\nimport {\n getItemSku,\n getDiscount,\n getItemCategory,\n getItemCategory2,\n getItemCategory4,\n getItemShippingTier,\n normalizeBrand,\n} from '../../utils';\n\n/**\n * Builds an array of normalized item objects from the order form contained in the given context.\n *\n * @param context - EventContext containing an orderForm with items to convert\n * @returns An array of item-like objects derived from `context.orderForm.items`, each containing fields such as `item_id`, `price`, `quantity`, `item_sku`, `item_name`, category and variant attributes, and `discount`\n */\nexport async function itemsFromOrderForm(context: EventContext) {\n const items = context.orderForm?.items || [];\n\n if (!items.length) return [];\n\n return await Promise.all(\n items.map(async (item: EventContext) => ({\n item_id: item.productId,\n item_category2: getItemCategory2(item),\n item_category4: getItemCategory4(item),\n item_shipping_tier: getItemShippingTier(context.orderForm, item),\n price: parseFloat((item.price / 100).toFixed(2)) || 0,\n quantity: item.quantity || 1,\n item_ref: item.refId || null,\n item_brand: normalizeBrand(item.additionalInfo?.brandName) || null,\n item_sku: (await getItemSku(item)) || item.id || null,\n item_name: item.name || item.id || null,\n item_category: getItemCategory(item) || null,\n item_variant: item.skuName.split('-')[0].trim(),\n item_variant2: item.skuName.split('-')[1]?.trim() || '',\n discount: getDiscount(item),\n }))\n );\n}\n","import {\n getItemSku,\n getDiscount,\n getItemCategory,\n getItemCategory2,\n getItemCategory4,\n getItemShippingTier,\n} from '../../utils';\n\nexport async function itemsFromItem(context: Record<string, any>) {\n const { item, orderForm } = context;\n return [\n {\n item_id: item.productId,\n item_category2: getItemCategory2(item),\n item_category4: getItemCategory4(item),\n item_shipping_tier: getItemShippingTier(orderForm, item),\n price: parseFloat((item.price / 100).toFixed(2)) || 0,\n quantity: 1,\n item_ref: item.refId || null,\n item_brand: item.additionalInfo?.brandName || null,\n item_sku: (await getItemSku(item)) || item.id || null,\n item_name: item.name || item.id || null,\n item_category: getItemCategory(item) || null,\n item_variant: item.skuName.split('-')[0].trim(),\n item_variant2: item.skuName.split('-')[1]?.trim() || '',\n discount: getDiscount(item),\n },\n ];\n}\n","import {\n getItemSku,\n getDiscount,\n // getItemCategory,\n // getItemCategory2,\n // getItemCategory4,\n normalizeBrand,\n} from '../../utils';\n\nexport async function itemsFromList(context: Record<string, any>) {\n const { item } = context;\n\n return [\n {\n item_id: item.productID || null,\n item_category2: item.category.split(\">\")[1]?.trim() || null,\n price: item.price || 0,\n quantity: 1,\n item_ref: context.item.additionalProperty.find((i: { name: string }) => i.name === \"RefId\").value,\n item_brand: normalizeBrand(item.brand.name) || null,\n item_sku: (await getItemSku(item)) || item.productID || null,\n item_name: item.alternateName || null,\n // item_category: null,\n item_variant: item?.name?.split(\"-\")[0].trim() || null,\n discount: getDiscount(item) || null,\n item_list_name: context?.itemListName || null,\n index: typeof context?.index === 'number' ? context.index : null\n },\n ];\n}\n","import { itemsFromOrderForm } from './resolvers/items/fromOrderForm';\nimport { itemsFromItem } from './resolvers/items/fromItem';\nimport { itemsFromList } from './resolvers/items/fromList';\n\n/**\n * Selects the appropriate item resolver based on the event name and returns its result.\n *\n * @param context - Runtime context passed to the selected resolver\n * @param eventName - Event identifier that determines which resolver to use\n * @returns The resolved items for the event, or `null` if the event is not recognized\n */\nexport function getItems(context: Record<string, any>, eventName: string) {\n if (context?.items) return context.items;\n\n switch (eventName) {\n case 'VIEW_CART':\n case 'BEGIN_CHECKOUT':\n return itemsFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'REMOVE_FROM_CART':\n return itemsFromItem(context);\n case 'SELECT_ITEM':\n return itemsFromList(context)\n default:\n return null;\n }\n}\n","import type { EventContext, EventName } from '../types';\nimport { getBrand } from './brand';\nimport { getItems } from './items';\n\nexport const paramGetters = {\n brand: getBrand,\n\n region: (context: EventContext, eventName: EventName) => {\n return context.region || null;\n },\n\n line_items: (context: EventContext, eventName: EventName) => {\n return context?.lineItems ? context.lineItems : (context.orderForm.items || [])\n .map((item: EventContext) => item.productId)\n .join(',');\n },\n\n currency: (context: EventContext, eventName: EventName) => {\n return context.orderForm?.storePreferencesData?.currencyCode || null;\n },\n\n value: (context: EventContext, eventName: EventName) => {\n return context.item ? context.item.price : context.orderForm?.value != null\n ? context.orderForm.value / 100\n : null;\n },\n\n total_discount: (context: EventContext, eventName: EventName) => {\n return (\n context.orderForm?.totalizers\n ?.filter((t: EventContext) => t.id === 'Discounts')\n .reduce((acc: EventContext, t: EventContext) => acc + t.value, 0) / 100 || 0\n );\n },\n\n subtotal: (context: EventContext, eventName: EventName) => {\n return (\n context.orderForm?.totalizers\n ?.filter((t: EventContext) => t.id === 'Items')\n .reduce((acc: EventContext, t: EventContext) => acc + t.value, 0) / 100 || 0\n );\n },\n\n coupon_message: (context: EventContext, eventName: EventName) => {\n const messages = context.orderForm?.messages || [];\n\n if (messages.length === 0) return null;\n\n const couponMessages = messages.filter((msg: EventContext) =>\n msg.text.toLowerCase().includes('cupom')\n );\n\n if (couponMessages.length === 0) return null;\n\n return couponMessages.map((msg: EventContext) => msg.text).join(' | ');\n },\n\n seller_cod_name: (context: EventContext, eventName: EventName) => {\n return context.appliedSellerCodName || null;\n },\n\n coupon: (context: EventContext, eventName: EventName) => {\n return context.appliedCoupon || null;\n },\n\n pre_filled: (context: EventContext, eventName: EventName) => {\n return !!context.preFilled;\n },\n\n search_term: (context: EventContext, eventName: EventName) => {\n return context.searchTerm || null;\n },\n\n search_found: (context: EventContext, eventName: EventName) => {\n return !!context.searchFound;\n },\n\n search_quantity: (context: EventContext, eventName: EventName) => {\n return context.searchQuantity || 0;\n },\n\n promotion_name: (context: EventContext, eventName: EventName) => {\n return context.promotionName || null;\n },\n\n creative_name: (context: EventContext, eventName: EventName) => {\n return context.creativeName || null;\n },\n\n creative_slot: (context: EventContext, eventName: EventName) => {\n return context.creativeSlot || null;\n },\n\n items: getItems,\n};\n","import { EVENTS } from '../constants';\nimport { paramGetters } from '../params';\nimport type { EventName, EventContext } from '../types'\n\ntype ParamName = keyof typeof paramGetters;\n\n/**\n * Resolve and return the required parameters for a given event.\n *\n * @param context - Context passed to each parameter getter (defaults to an empty object)\n * @param eventName - The event whose required parameters should be resolved\n * @returns An object mapping each required parameter name to its resolved value (`null` when a param getter is missing), or `undefined` if the event has no configuration\n */\nexport async function getParameters(context: EventContext = {}, eventName: EventName) {\n const eventConfig = EVENTS[eventName] as { requiredParams: string[] };\n\n if (!eventConfig) return;\n\n const params = Object.fromEntries(\n await Promise.all(\n eventConfig.requiredParams.map(async (param) => {\n const getter = paramGetters[param as ParamName];\n\n if (typeof getter !== 'function') {\n console.error(`[DT] Missing paramGetter for param: ${param}`);\n return [param, null]; // ou undefined\n }\n \n return [param, await getter(context, eventName)];\n })\n )\n );\n\n return params;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,MAAM,SAAS;AAAA,IACpB,WAAW;AAAA,MACT,MAAM;AAAA,MACN,cAAc,CAAC,QAAQ,WAAY;AAAA,MACnC,gBAAgB;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IAEA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,cAAc,CAAC,WAAW;AAAA,MAC1B,gBAAgB;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IAEA,kBAAkB;AAAA,MAChB,MAAM;AAAA,MACN,cAAc,CAAC,WAAW;AAAA,MAC1B,gBAAgB;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IAEA,YAAY;AAAA,MACV,MAAM;AAAA,MACN,cAAc,CAAC,WAAW;AAAA,MAC1B,gBAAgB;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IAEA,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,cAAc,CAAC,WAAW;AAAA,MAC1B,gBAAgB,CAAC,SAAS,eAAe,gBAAgB,iBAAiB;AAAA,IAC5E;AAAA,IAEA,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,cAAc,CAAC,WAAW;AAAA,MAC1B,gBAAgB,CAAC,UAAU,kBAAkB,iBAAiB,eAAe;AAAA,IAC/E;AAAA,IAEA,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,gBAAgB,CAAC,QAAQ;AAAA,IAC3B;AAAA,IAEA,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,gBAAgB,CAAC,QAAQ;AAAA,IAC3B;AAAA,IAEA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,cAAc,CAAC,WAAW;AAAA,MAC1B,gBAAgB,CAAC,SAAS,UAAU,SAAS,YAAY;AAAA,IAC3D;AAAA,IAEA,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,gBAAgB,CAAC,QAAQ;AAAA,IAC3B;AAAA,IAEA,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,cAAc,CAAC,WAAW;AAAA,MAC1B,gBAAgB,CAAC,SAAS,cAAc,YAAY,SAAS,kBAAkB,YAAY,OAAO;AAAA,IACpG;AAAA,IAEA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,gBAAgB,CAAC,QAAQ;AAAA,IAC3B;AAAA,IAEA,mBAAmB;AAAA,MACjB,MAAM;AAAA,MACN,cAAc,CAAC,WAAW;AAAA,MAC1B,gBAAgB,CAAC,SAAS,cAAc,cAAc,YAAY,SAAS,kBAAkB,UAAU;AAAA,IACzG;AAAA,IAEA,mBAAmB;AAAA,MACjB,MAAM;AAAA,MACN,gBAAgB,CAAC,QAAQ;AAAA,IAC3B;AAAA,IAEA,kBAAkB;AAAA,MAChB,MAAM;AAAA,MACN,gBAAgB,CAAC,QAAQ;AAAA,IAC3B;AAAA,IAEA,eAAe;AAAA,MACb,MAAM;AAAA,MACN,gBAAgB,CAAC,QAAQ;AAAA,IAC3B;AAAA,IAEA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,gBAAgB,CAAC,QAAQ;AAAA,IAC3B;AAAA,EACF;;;AChHA,WAAS,gBAAgB,MAAoB,OAAe,aAAqB;AAC/E,YAAQ;AAAA,MACN,WAAW,WAAW;AAAA,MACtB,eAAe,KAAK;AAAA,MACpB;AAAA,MACA,QAAQ;AAAA,IACV;AAAA,EACF;AAYA,WAAS,gBAAgB,OAAe,OAAqB,MAAc;AACzE,UAAM,eAAe,MAAM;AAC3B,UAAM,mBAAmB,OAAO,OAAO,CAAC,GAAG,KAAK;AAChD,WAAO,iBAAiB;AAExB,oBAAgB,EAAE,OAAc,WAAW,iBAAiB,GAAG,WAAW,IAAI;AAE9E,QAAI,cAAc;AAChB,mBAAa,YAAY,aAAa,aAAa,CAAC;AACpD,mBAAa,UAAU,KAAK,EAAE,OAAc,WAAW,iBAAiB,CAAC;AACzE;AAAA,IACF;AAEA,WAAO,YAAY,OAAO,aAAa,CAAC;AACxC,WAAO,UAAU,KAAK,EAAE,OAAc,WAAW,iBAAiB,CAAC;AAAA,EACrE;AASA,WAAS,WAAW,OAAe,OAAqB,MAAc;AACpE,oBAAgB,EAAE,WAAW,OAAO,MAAM,MAAM,GAAG,WAAW,IAAI;AAAA,EACpE;AAEA,WAAS,WAAW,OAAe,OAAqB,MAAc;AACpE,oBAAgB,EAAE,IAAI,OAAO,aAAa,MAAM,GAAG,WAAW,IAAI;AAAA,EACpE;AAEA,MAAM,WAAW;AAAA,IACf,MAAM;AAAA,IACN,WAAW;AAAA,IACX,MAAM;AAAA,EACR;AAeA,iBAAsB,mBAAmB,WAAsB,MAAoB;AACjF,UAAM,cAAc,OAAO,SAAS;AAEpC,QAAI,CAAC,YAAa;AAElB,UAAM,QAAQ;AAAA,MACZ,YAAY,aAAa,IAAI,OAAO,SAAiB;AACnD,YAAI;AAGF,gBAAM,SAAS,IAAkB,EAAE,UAAU,YAAY,GAAG,MAAM,IAAI;AAAA,QACxE,SAAS,KAAK;AACZ,kBAAQ,MAAM,uBAAuB,SAAS,OAAO,IAAI,KAAK,GAAG;AAAA,QACnE;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;;;AC3FA,iBAAsB,mBAAmB,IAAS;AAChD,QAAI;AACF,YAAM,WAAW,MAAM;AAAA,QACrB,wDAAwD,EAAE;AAAA,MAC5D;AAEA,aAAO,MAAM,SAAS,KAAK;AAAA,IAC7B,SAAS,GAAG;AACV,cAAQ,IAAI,wCAAwC,CAAC;AAAA,IACvD;AAAA,EACF;AAEO,WAAS,oBAAoB,WAAgB,MAAW;AAlB/D;AAmBE,UAAM,QAAO,kDAAW,iBAAX,mBAAyB,kBAAzB,mBAAwC;AAAA,MACnD,CAAC,OAAY,GAAG,WAAW,KAAK;AAAA;AAGlC,UAAM,eAAc,kCAAM,SAAN,mBAAY,KAAK,CAAC,QAAa,IAAI,OAAO,KAAK;AACnE,aAAO,gDAAa,oBAAb,mBAA8B,gBACjC,qBAAqB,YAAY,gBAAgB,YAAY,MAC7D,2CAAa,QACX,mBAAmB,YAAY,IAAI,KACnC;AAAA,EACR;AAEA,iBAAsB,WAAW,MAAW;AA/B5C;AAgCE,UAAM,UAAU,MAAM,mBAAmB,KAAK,aAAa,KAAK,SAAS;AAEzE,QAAI,CAAC,QAAQ,OAAQ,QAAO;AAE5B,YAAO,mBAAQ,CAAC,EAAE,MAAM,KAAK,CAAC,MAAW,EAAE,SAAS,KAAK,OAAO,MAAzD,mBAA4D,WAA5D,YAAsE;AAAA,EAC/E;AAEO,WAAS,YAAY,MAAW;AACrC,WAAO,KAAK,WAAW,KAAK,WAExB,WAAW,KAAK,IAAI,KAAK,YAAY,KAAK,cAAc,CAAC,EAAE,QAAQ,CAAC,CAAC,KAAK;AAAA,EAEhF;AAEO,WAAS,gBAAgB,MAAW;AACzC,WAAO;AAAA,EACT;AAEO,WAAS,iBAAiB,MAAW;AAC1C,WAAO;AAAA,EACT;AAEO,WAAS,iBAAiB,MAAW;AAtD5C;AAuDE,UAAM,SAAO,kCAAM,mBAAN,mBAAsB,UAAQ,6BAAM;AACjD,WAAO,MAAM,QAAQ,IAAI,KAAK,KAAK,SAAS,KAAK,KAAK,GAAG,IAAI;AAAA,EAC/D;AAEA,MAAM,cAAc;AAAA,IAClB,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,YAAY;AAAA,EACd;AAcA,WAAS,aAAa,OAA0C;AAC9D,QAAI,CAAC,MAAO,QAAO;AACnB,UAAM,eAAe,MAAM,YAAY,EAAE,KAAK;AAC9C,WAAO,YAAY,YAA4B,KAAK;AAAA,EACtD;AAMO,WAAS,eAAe,OAAuE;AAvFtG;AAwFE,QAAI,eAAe,CAAC;AAEpB,QAAI,MAAM,QAAQ,KAAK,KAAK,MAAM,MAAM,UAAQ,OAAO,SAAS,QAAQ,GAAG;AACzE,qBAAe;AAAA,IACjB,WAAW,MAAM,QAAQ,KAAK,GAAG;AAE/B,qBAAe,MAAM,IAAI,UAAK;AA9FlC,YAAAA;AA8FqC,iBAAAA,MAAA,KAAK,mBAAL,gBAAAA,IAAqB,cAAa,KAAK;AAAA,OAAK;AAAA,IAC/E,WAAW,OAAO,UAAU,YAAY,UAAU,QAAQ,WAAW,OAAO;AAE1E,qBAAe,GAAE,WAAoB,mBAApB,mBAAoC,cAAc,MAAoB,KAAK;AAAA,IAC9F,WAAW,OAAO,UAAU,UAAU;AAEpC,aAAO,aAAa,KAAK;AAAA,IAC3B,OAAO;AAEL,aAAO;AAAA,IACT;AAEA,UAAM,aAAa,aAChB,IAAI,YAAY,EAChB,OAAO,CAAC,SAAyB,SAAS,IAAI;AAEjD,UAAM,oBAAoB,CAAC,GAAG,IAAI,IAAI,UAAU,CAAC,EAAE,KAAK;AAGxD,WAAO,kBAAkB,SAAS,IAAI,kBAAkB,KAAK,GAAG,IAAI;AAAA,EACtE;;;AChHO,WAAS,mBAAmB,SAA8B;AAFjE;AAGE,QAAI,CAAC,QAAQ,aAAa,GAAC,aAAQ,UAAU,UAAlB,mBAAyB,QAAQ,QAAO;AAEnE,UAAM,QAAQ,QAAQ,UAAU;AAEhC,WAAO,eAAe,KAAK;AAAA,EAC7B;;;ACNO,WAAS,cAAc,SAA8B;AAF5D;AAGE,UAAM,EAAE,KAAK,IAAI;AAEjB,WAAO,iBAAe,UAAK,mBAAL,mBAAqB,cAAa,KAAK,KAAK;AAAA,EACpE;;;ACQO,WAAS,SAAS,SAAuB,WAAsB;AACpE,QAAI,mCAAS,MAAO,QAAO,eAAe,QAAQ,KAAK;AAEvD,YAAQ,WAAW;AAAA,MACjB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAO,mBAAmB,OAAO;AAAA,MACnC,KAAK;AAAA,MACL,KAAK;AACH,eAAO,cAAc,OAAO;AAAA,MAC9B;AACE,eAAO;AAAA,IACX;AAAA,EACF;;;ACXA,iBAAsB,mBAAmB,SAAuB;AAlBhE;AAmBE,UAAM,UAAQ,aAAQ,cAAR,mBAAmB,UAAS,CAAC;AAE3C,QAAI,CAAC,MAAM,OAAQ,QAAO,CAAC;AAE3B,WAAO,MAAM,QAAQ;AAAA,MACnB,MAAM,IAAI,OAAO,SAAoB;AAxBzC,YAAAC,KAAA;AAwB6C;AAAA,UACvC,SAAS,KAAK;AAAA,UACd,gBAAgB,iBAAiB,IAAI;AAAA,UACrC,gBAAgB,iBAAiB,IAAI;AAAA,UACrC,oBAAoB,oBAAoB,QAAQ,WAAW,IAAI;AAAA,UAC/D,OAAO,YAAY,KAAK,QAAQ,KAAK,QAAQ,CAAC,CAAC,KAAK;AAAA,UACpD,UAAU,KAAK,YAAY;AAAA,UAC3B,UAAU,KAAK,SAAS;AAAA,UACxB,YAAY,gBAAeA,MAAA,KAAK,mBAAL,gBAAAA,IAAqB,SAAS,KAAK;AAAA,UAC9D,UAAW,MAAM,WAAW,IAAI,KAAM,KAAK,MAAM;AAAA,UACjD,WAAW,KAAK,QAAQ,KAAK,MAAM;AAAA,UACnC,eAAe,gBAAgB,IAAI,KAAK;AAAA,UACxC,cAAc,KAAK,QAAQ,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK;AAAA,UAC9C,iBAAe,UAAK,QAAQ,MAAM,GAAG,EAAE,CAAC,MAAzB,mBAA4B,WAAU;AAAA,UACrD,UAAU,YAAY,IAAI;AAAA,QAC5B;AAAA,OAAE;AAAA,IACJ;AAAA,EACF;;;AChCA,iBAAsB,cAAc,SAA8B;AATlE;AAUE,UAAM,EAAE,MAAM,UAAU,IAAI;AAC5B,WAAO;AAAA,MACL;AAAA,QACE,SAAS,KAAK;AAAA,QACd,gBAAgB,iBAAiB,IAAI;AAAA,QACrC,gBAAgB,iBAAiB,IAAI;AAAA,QACrC,oBAAoB,oBAAoB,WAAW,IAAI;AAAA,QACvD,OAAO,YAAY,KAAK,QAAQ,KAAK,QAAQ,CAAC,CAAC,KAAK;AAAA,QACpD,UAAU;AAAA,QACV,UAAU,KAAK,SAAS;AAAA,QACxB,cAAY,UAAK,mBAAL,mBAAqB,cAAa;AAAA,QAC9C,UAAW,MAAM,WAAW,IAAI,KAAM,KAAK,MAAM;AAAA,QACjD,WAAW,KAAK,QAAQ,KAAK,MAAM;AAAA,QACnC,eAAe,gBAAgB,IAAI,KAAK;AAAA,QACxC,cAAc,KAAK,QAAQ,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK;AAAA,QAC9C,iBAAe,UAAK,QAAQ,MAAM,GAAG,EAAE,CAAC,MAAzB,mBAA4B,WAAU;AAAA,QACrD,UAAU,YAAY,IAAI;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;;;ACpBA,iBAAsB,cAAc,SAA8B;AATlE;AAUE,UAAM,EAAE,KAAK,IAAI;AAEjB,WAAO;AAAA,MACL;AAAA,QACE,SAAS,KAAK,aAAa;AAAA,QAC3B,kBAAgB,UAAK,SAAS,MAAM,GAAG,EAAE,CAAC,MAA1B,mBAA6B,WAAU;AAAA,QACvD,OAAO,KAAK,SAAS;AAAA,QACrB,UAAU;AAAA,QACV,UAAU,QAAQ,KAAK,mBAAmB,KAAK,CAAC,MAAwB,EAAE,SAAS,OAAO,EAAE;AAAA,QAC5F,YAAY,eAAe,KAAK,MAAM,IAAI,KAAK;AAAA,QAC/C,UAAW,MAAM,WAAW,IAAI,KAAM,KAAK,aAAa;AAAA,QACxD,WAAW,KAAK,iBAAiB;AAAA;AAAA,QAEjC,gBAAc,kCAAM,SAAN,mBAAY,MAAM,KAAK,GAAG,WAAU;AAAA,QAClD,UAAU,YAAY,IAAI,KAAK;AAAA,QAC/B,iBAAgB,mCAAS,iBAAgB;AAAA,QACzC,OAAO,QAAO,mCAAS,WAAU,WAAW,QAAQ,QAAQ;AAAA,MAC9D;AAAA,IACF;AAAA,EACF;;;AClBO,WAAS,SAAS,SAA8B,WAAmB;AACxE,QAAI,mCAAS,MAAO,QAAO,QAAQ;AAEnC,YAAQ,WAAW;AAAA,MACjB,KAAK;AAAA,MACL,KAAK;AACH,eAAO,mBAAmB,OAAO;AAAA,MACnC,KAAK;AAAA,MACL,KAAK;AACH,eAAO,cAAc,OAAO;AAAA,MAC9B,KAAK;AACH,eAAO,cAAc,OAAO;AAAA,MAC9B;AACE,eAAO;AAAA,IACX;AAAA,EACF;;;ACtBO,MAAM,eAAe;AAAA,IAC1B,OAAO;AAAA,IAEP,QAAQ,CAAC,SAAuB,cAAyB;AACvD,aAAO,QAAQ,UAAU;AAAA,IAC3B;AAAA,IAEA,YAAY,CAAC,SAAuB,cAAyB;AAC3D,cAAO,mCAAS,aAAY,QAAQ,aAAa,QAAQ,UAAU,SAAS,CAAC,GAC1E,IAAI,CAAC,SAAuB,KAAK,SAAS,EAC1C,KAAK,GAAG;AAAA,IACb;AAAA,IAEA,UAAU,CAAC,SAAuB,cAAyB;AAjB7D;AAkBI,eAAO,mBAAQ,cAAR,mBAAmB,yBAAnB,mBAAyC,iBAAgB;AAAA,IAClE;AAAA,IAEA,OAAO,CAAC,SAAuB,cAAyB;AArB1D;AAsBI,aAAO,QAAQ,OAAO,QAAQ,KAAK,UAAQ,aAAQ,cAAR,mBAAmB,UAAS,OACnE,QAAQ,UAAU,QAAQ,MAC1B;AAAA,IACN;AAAA,IAEA,gBAAgB,CAAC,SAAuB,cAAyB;AA3BnE;AA4BI,eACE,mBAAQ,cAAR,mBAAmB,eAAnB,mBACI,OAAO,CAAC,MAAoB,EAAE,OAAO,aACtC,OAAO,CAAC,KAAmB,MAAoB,MAAM,EAAE,OAAO,MAAK,OAAO;AAAA,IAEjF;AAAA,IAEA,UAAU,CAAC,SAAuB,cAAyB;AAnC7D;AAoCI,eACE,mBAAQ,cAAR,mBAAmB,eAAnB,mBACI,OAAO,CAAC,MAAoB,EAAE,OAAO,SACtC,OAAO,CAAC,KAAmB,MAAoB,MAAM,EAAE,OAAO,MAAK,OAAO;AAAA,IAEjF;AAAA,IAEA,gBAAgB,CAAC,SAAuB,cAAyB;AA3CnE;AA4CI,YAAM,aAAW,aAAQ,cAAR,mBAAmB,aAAY,CAAC;AAEjD,UAAI,SAAS,WAAW,EAAG,QAAO;AAElC,YAAM,iBAAiB,SAAS;AAAA,QAAO,CAAC,QACtC,IAAI,KAAK,YAAY,EAAE,SAAS,OAAO;AAAA,MACzC;AAEA,UAAI,eAAe,WAAW,EAAG,QAAO;AAExC,aAAO,eAAe,IAAI,CAAC,QAAsB,IAAI,IAAI,EAAE,KAAK,KAAK;AAAA,IACvE;AAAA,IAEA,iBAAiB,CAAC,SAAuB,cAAyB;AAChE,aAAO,QAAQ,wBAAwB;AAAA,IACzC;AAAA,IAEA,QAAQ,CAAC,SAAuB,cAAyB;AACvD,aAAO,QAAQ,iBAAiB;AAAA,IAClC;AAAA,IAEA,YAAY,CAAC,SAAuB,cAAyB;AAC3D,aAAO,CAAC,CAAC,QAAQ;AAAA,IACnB;AAAA,IAEA,aAAa,CAAC,SAAuB,cAAyB;AAC5D,aAAO,QAAQ,cAAc;AAAA,IAC/B;AAAA,IAEA,cAAc,CAAC,SAAuB,cAAyB;AAC7D,aAAO,CAAC,CAAC,QAAQ;AAAA,IACnB;AAAA,IAEA,iBAAiB,CAAC,SAAuB,cAAyB;AAChE,aAAO,QAAQ,kBAAkB;AAAA,IACnC;AAAA,IAEA,gBAAgB,CAAC,SAAuB,cAAyB;AAC/D,aAAO,QAAQ,iBAAiB;AAAA,IAClC;AAAA,IAEA,eAAe,CAAC,SAAuB,cAAyB;AAC9D,aAAO,QAAQ,gBAAgB;AAAA,IACjC;AAAA,IAEA,eAAe,CAAC,SAAuB,cAAyB;AAC9D,aAAO,QAAQ,gBAAgB;AAAA,IACjC;AAAA,IAEA,OAAO;AAAA,EACT;;;ACjFA,iBAAsB,cAAc,UAAwB,CAAC,GAAG,WAAsB;AACpF,UAAM,cAAc,OAAO,SAAS;AAEpC,QAAI,CAAC,YAAa;AAElB,UAAM,SAAS,OAAO;AAAA,MACpB,MAAM,QAAQ;AAAA,QACZ,YAAY,eAAe,IAAI,OAAO,UAAU;AAC9C,gBAAM,SAAS,aAAa,KAAkB;AAE9C,cAAI,OAAO,WAAW,YAAY;AAChC,oBAAQ,MAAM,uCAAuC,KAAK,EAAE;AAC5D,mBAAO,CAAC,OAAO,IAAI;AAAA,UACrB;AAEA,iBAAO,CAAC,OAAO,MAAM,OAAO,SAAS,SAAS,CAAC;AAAA,QACjD,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,EACT;;;AZtBA,iBAAe,cAAc,OAAkB,UAAwB,CAAC,GAAG;AACzE,QAAI;AAEF,YAAM,aAAa,MAAM,cAAc,SAAS,KAAK;AAGrD,aAAO,MAAM;AAAA,QACX;AAAA,QACA,OAAO,OAAO,CAAC,GAAG,YAAY,EAAE,QAAQ,QAAQ,OAAO,CAAC;AAAA,MAC1D;AAAA,IACF,SAAS,KAAK;AACZ,aAAO,QAAQ,MAAM,6BAA6B,KAAK,KAAK,GAAG;AAAA,IACjE;AAAA,EACF;AAIA,MAAO,cAAQ;AAAA,IACb;AAAA,IACA;AAAA,EACF;","names":["_a","_a"]}
|
package/dist/mod.js
CHANGED
|
@@ -69,7 +69,8 @@ var EVENTS = {
|
|
|
69
69
|
},
|
|
70
70
|
SELECT_ITEM: {
|
|
71
71
|
name: "select_item",
|
|
72
|
-
|
|
72
|
+
destinations: ["DataLayer"],
|
|
73
|
+
requiredParams: ["brand", "region", "items", "line_items"]
|
|
73
74
|
},
|
|
74
75
|
VIEW_ITEM_LIST: {
|
|
75
76
|
name: "view_item_list",
|
|
@@ -117,14 +118,17 @@ function dataTrackingLog(data, color, destination) {
|
|
|
117
118
|
);
|
|
118
119
|
}
|
|
119
120
|
function pushToDataLayer(event, ecomm, dest) {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
121
|
+
const targetWindow = ecomm.window;
|
|
122
|
+
const ecommercePayload = Object.assign({}, ecomm);
|
|
123
|
+
delete ecommercePayload.window;
|
|
124
|
+
dataTrackingLog({ event, ecommerce: ecommercePayload }, "#0b5fff", dest);
|
|
125
|
+
if (targetWindow) {
|
|
126
|
+
targetWindow.dataLayer = targetWindow.dataLayer || [];
|
|
127
|
+
targetWindow.dataLayer.push({ event, ecommerce: ecommercePayload });
|
|
124
128
|
return;
|
|
125
129
|
}
|
|
126
130
|
window.dataLayer = window.dataLayer || [];
|
|
127
|
-
window.dataLayer.push({ event, ecommerce:
|
|
131
|
+
window.dataLayer.push({ event, ecommerce: ecommercePayload });
|
|
128
132
|
}
|
|
129
133
|
function pushToMeta(event, ecomm, dest) {
|
|
130
134
|
dataTrackingLog({ eventName: event, data: ecomm }, "#8C1007", dest);
|
|
@@ -172,12 +176,12 @@ function getItemShippingTier(orderForm, item) {
|
|
|
172
176
|
}
|
|
173
177
|
async function getItemSku(item) {
|
|
174
178
|
var _a, _b;
|
|
175
|
-
const product = await getProductDataById(item.productId);
|
|
179
|
+
const product = await getProductDataById(item.productId || item.productID);
|
|
176
180
|
if (!product.length) return null;
|
|
177
181
|
return (_b = (_a = product[0].items.find((i) => i.name === item.skuName)) == null ? void 0 : _a.itemId) != null ? _b : null;
|
|
178
182
|
}
|
|
179
183
|
function getDiscount(item) {
|
|
180
|
-
return parseFloat(Math.max(item.listPrice - item.sellingPrice, 0).toFixed(2)) || 0;
|
|
184
|
+
return item.discount ? item.discount : parseFloat(Math.max(item.listPrice - item.sellingPrice, 0).toFixed(2)) || 0;
|
|
181
185
|
}
|
|
182
186
|
function getItemCategory(item) {
|
|
183
187
|
return "sale";
|
|
@@ -190,21 +194,36 @@ function getItemCategory4(item) {
|
|
|
190
194
|
const tags = ((_a = item == null ? void 0 : item.additionalInfo) == null ? void 0 : _a.tags) || (item == null ? void 0 : item.tags);
|
|
191
195
|
return Array.isArray(tags) && tags.length ? tags.join(",") : null;
|
|
192
196
|
}
|
|
193
|
-
var
|
|
197
|
+
var BRAND_CODES = {
|
|
198
|
+
farm: "farmrio",
|
|
199
|
+
"farm etc": "farmetc",
|
|
200
|
+
"farm rio": "farmrio"
|
|
201
|
+
};
|
|
202
|
+
function getBrandCode(brand) {
|
|
203
|
+
if (!brand) return null;
|
|
204
|
+
const standardized = brand.toLowerCase().trim();
|
|
205
|
+
return BRAND_CODES[standardized] || null;
|
|
206
|
+
}
|
|
194
207
|
function normalizeBrand(input) {
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
208
|
+
var _a;
|
|
209
|
+
let brandStrings = [];
|
|
210
|
+
if (Array.isArray(input) && input.every((item) => typeof item === "string")) {
|
|
211
|
+
brandStrings = input;
|
|
212
|
+
} else if (Array.isArray(input)) {
|
|
213
|
+
brandStrings = input.map((item) => {
|
|
214
|
+
var _a2;
|
|
215
|
+
return ((_a2 = item.additionalInfo) == null ? void 0 : _a2.brandName) || item.brand;
|
|
216
|
+
});
|
|
217
|
+
} else if (typeof input === "object" && input !== null && "brand" in input) {
|
|
218
|
+
brandStrings = [((_a = input.additionalInfo) == null ? void 0 : _a.brandName) || input.brand];
|
|
219
|
+
} else if (typeof input === "string") {
|
|
220
|
+
return getBrandCode(input);
|
|
221
|
+
} else {
|
|
222
|
+
return null;
|
|
206
223
|
}
|
|
207
|
-
|
|
224
|
+
const brandCodes = brandStrings.map(getBrandCode).filter((code) => code !== null);
|
|
225
|
+
const uniqueSortedCodes = [...new Set(brandCodes)].sort();
|
|
226
|
+
return uniqueSortedCodes.length > 0 ? uniqueSortedCodes.join("_") : null;
|
|
208
227
|
}
|
|
209
228
|
|
|
210
229
|
// src/params/resolvers/brand/fromOrderForm.ts
|
|
@@ -224,7 +243,7 @@ function brandFromItem(context) {
|
|
|
224
243
|
|
|
225
244
|
// src/params/brand.ts
|
|
226
245
|
function getBrand(context, eventName) {
|
|
227
|
-
if (context == null ? void 0 : context.brand) return context.brand;
|
|
246
|
+
if (context == null ? void 0 : context.brand) return normalizeBrand(context.brand);
|
|
228
247
|
switch (eventName) {
|
|
229
248
|
case "VIEW_CART":
|
|
230
249
|
case "ADD_COUPON":
|
|
@@ -291,8 +310,32 @@ async function itemsFromItem(context) {
|
|
|
291
310
|
];
|
|
292
311
|
}
|
|
293
312
|
|
|
313
|
+
// src/params/resolvers/items/fromList.ts
|
|
314
|
+
async function itemsFromList(context) {
|
|
315
|
+
var _a, _b;
|
|
316
|
+
const { item } = context;
|
|
317
|
+
return [
|
|
318
|
+
{
|
|
319
|
+
item_id: item.productID || null,
|
|
320
|
+
item_category2: ((_a = item.category.split(">")[1]) == null ? void 0 : _a.trim()) || null,
|
|
321
|
+
price: item.price || 0,
|
|
322
|
+
quantity: 1,
|
|
323
|
+
item_ref: context.item.additionalProperty.find((i) => i.name === "RefId").value,
|
|
324
|
+
item_brand: normalizeBrand(item.brand.name) || null,
|
|
325
|
+
item_sku: await getItemSku(item) || item.productID || null,
|
|
326
|
+
item_name: item.alternateName || null,
|
|
327
|
+
// item_category: null,
|
|
328
|
+
item_variant: ((_b = item == null ? void 0 : item.name) == null ? void 0 : _b.split("-")[0].trim()) || null,
|
|
329
|
+
discount: getDiscount(item) || null,
|
|
330
|
+
item_list_name: (context == null ? void 0 : context.itemListName) || null,
|
|
331
|
+
index: typeof (context == null ? void 0 : context.index) === "number" ? context.index : null
|
|
332
|
+
}
|
|
333
|
+
];
|
|
334
|
+
}
|
|
335
|
+
|
|
294
336
|
// src/params/items.ts
|
|
295
337
|
function getItems(context, eventName) {
|
|
338
|
+
if (context == null ? void 0 : context.items) return context.items;
|
|
296
339
|
switch (eventName) {
|
|
297
340
|
case "VIEW_CART":
|
|
298
341
|
case "BEGIN_CHECKOUT":
|
|
@@ -300,6 +343,8 @@ function getItems(context, eventName) {
|
|
|
300
343
|
case "ADD_TO_CART":
|
|
301
344
|
case "REMOVE_FROM_CART":
|
|
302
345
|
return itemsFromItem(context);
|
|
346
|
+
case "SELECT_ITEM":
|
|
347
|
+
return itemsFromList(context);
|
|
303
348
|
default:
|
|
304
349
|
return null;
|
|
305
350
|
}
|
|
@@ -312,7 +357,7 @@ var paramGetters = {
|
|
|
312
357
|
return context.region || null;
|
|
313
358
|
},
|
|
314
359
|
line_items: (context, eventName) => {
|
|
315
|
-
return (context.orderForm.items || []).map((item) => item.productId).join(",");
|
|
360
|
+
return (context == null ? void 0 : context.lineItems) ? context.lineItems : (context.orderForm.items || []).map((item) => item.productId).join(",");
|
|
316
361
|
},
|
|
317
362
|
currency: (context, eventName) => {
|
|
318
363
|
var _a, _b;
|
|
@@ -401,7 +446,13 @@ async function trackWebEvent(event, context = {}) {
|
|
|
401
446
|
return console.error(`[DT] Error tracking event ${event}:`, err);
|
|
402
447
|
}
|
|
403
448
|
}
|
|
449
|
+
var src_default = {
|
|
450
|
+
trackWebEvent,
|
|
451
|
+
EVENTS
|
|
452
|
+
};
|
|
404
453
|
export {
|
|
454
|
+
EVENTS,
|
|
455
|
+
src_default as default,
|
|
405
456
|
trackWebEvent
|
|
406
457
|
};
|
|
407
458
|
//# sourceMappingURL=mod.js.map
|
package/dist/mod.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constants.ts","../src/adapters/index.ts","../src/params/utils/index.ts","../src/params/resolvers/brand/fromOrderForm.ts","../src/params/resolvers/brand/fromItem.ts","../src/params/brand.ts","../src/params/resolvers/items/fromOrderForm.ts","../src/params/resolvers/items/fromItem.ts","../src/params/items.ts","../src/params/index.ts","../src/formatter/index.ts","../src/index.ts"],"sourcesContent":["export const EVENTS = {\n VIEW_CART: {\n name: 'view_cart',\n destinations: ['Dito', 'DataLayer',],\n requiredParams: [\n 'brand',\n 'region',\n 'line_items',\n 'currency',\n 'value',\n 'total_discount',\n 'subtotal',\n 'items',\n ],\n },\n\n ADD_TO_CART: {\n name: 'add_to_cart',\n destinations: ['DataLayer'],\n requiredParams: [\n 'brand',\n 'region',\n 'line_items',\n 'currency',\n 'value',\n 'items',\n ],\n },\n\n REMOVE_FROM_CART: {\n name: 'remove_from_cart',\n destinations: ['DataLayer'],\n requiredParams: [\n 'brand',\n 'region',\n 'line_items',\n 'currency',\n 'value',\n 'items',\n ],\n },\n\n ADD_COUPON: {\n name: 'add_coupon',\n destinations: ['DataLayer'],\n requiredParams: [\n 'brand',\n 'region',\n 'coupon',\n 'coupon_message',\n 'seller_cod_name',\n ],\n },\n\n SEARCH: {\n name: 'search',\n destinations: ['DataLayer'],\n requiredParams: ['brand', 'search_term', 'search_found', 'search_quantity'],\n },\n\n VIEW_PROMOTION: {\n name: 'view_promotion',\n destinations: ['DataLayer'],\n requiredParams: ['region', 'promotion_name', 'creative_name', 'creative_slot'],\n },\n\n SEARCH_ZIPCODE: {\n name: 'search_zipcode',\n requiredParams: ['region'],\n },\n\n SELECT_CONTENT: {\n name: 'select_content',\n requiredParams: ['region'],\n },\n\n SELECT_ITEM: {\n name: 'select_item',\n requiredParams: ['region'],\n },\n\n VIEW_ITEM_LIST: {\n name: 'view_item_list',\n requiredParams: ['region'],\n },\n\n BEGIN_CHECKOUT: {\n name: 'begin_checkout',\n destinations: ['DataLayer'],\n requiredParams: ['brand', 'line_items', 'currency', 'value', 'total_discount', 'subtotal', 'items'],\n },\n\n AUTH_ACTION: {\n name: 'auth_action',\n requiredParams: ['region'],\n },\n\n ADD_PERSONAL_INFO: {\n name: 'add_personal_info',\n destinations: ['DataLayer'],\n requiredParams: ['brand', 'pre_filled', 'line_items', 'currency', 'value', 'total_discount', 'subtotal'],\n },\n\n ADD_SHIPPING_INFO: {\n name: 'add_shipping_info',\n requiredParams: ['region'],\n },\n\n ADD_PAYMENT_INFO: {\n name: 'add_payment_info',\n requiredParams: ['region'],\n },\n\n ORDER_REVIWED: {\n name: 'order_reviewed',\n requiredParams: ['region'],\n },\n\n PURCHASE: {\n name: 'purchase',\n requiredParams: ['region'],\n },\n};\n","import { EVENTS } from '../constants';\nimport type { EventName, EventContext } from '../types'\n\n\n/**\n * Logs a styled tracking message to the console with the destination and event payload.\n *\n * @param data - The event payload or context to include in the log; if falsy, an empty string is logged\n * @param color - CSS background color used for the log label\n * @param destination - Destination name shown in the log label (prefixed by \"DT - \")\n */\nfunction dataTrackingLog(data: EventContext, color: string, destination: string) {\n console.log(\n `%c[DT - ${destination}] EVENTO DISPARADO:%c `,\n `background: ${color}; color: white; font-weight: bold; padding: 2px 4px; border-radius: 3px;`,\n 'color: #fff;',\n data || ''\n );\n}\n\n/**\n * Pushes an ecommerce tracking event to the appropriate dataLayer and logs the payload.\n *\n * Ensures a dataLayer array exists on the target (prefer `ecomm.window` if present, otherwise the global `window`)\n * and pushes an object containing `event` and the `ecomm` payload. Also logs the pushed payload for debugging.\n *\n * @param event - The tracking event name to push\n * @param ecomm - The ecommerce event context payload; if it contains a `window` property that object's `dataLayer` will be used as the target\n * @param dest - A destination label used by the logger\n */\nfunction pushToDataLayer(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ event: event, ecommerce: ecomm }, '#0b5fff', dest);\n\n if (ecomm.window) {\n ecomm.window.dataLayer = ecomm.window.dataLayer || []\n ecomm.window.dataLayer.push({ event: event, ecommerce: ecomm })\n return;\n }\n\n window.dataLayer = window.dataLayer || []\n window.dataLayer.push({ event: event, ecommerce: ecomm })\n}\n\n/**\n * Log a Meta tracking event payload for delivery to the Meta destination.\n *\n * @param event - The event name to send to Meta\n * @param ecomm - The event context / ecommerce payload\n * @param dest - Destination identifier (e.g., \"Meta\")\n */\nfunction pushToMeta(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ eventName: event, data: ecomm }, '#8C1007', dest);\n}\n\nfunction pushToDito(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ id: event, custom_data: ecomm }, '#00c851', dest);\n}\n\nconst adapters = {\n Meta: pushToMeta,\n DataLayer: pushToDataLayer,\n Dito: pushToDito,\n};\n\ntype AdapterKey = keyof typeof adapters;\n\n/**\n * Dispatches a tracking event to all destinations configured for the given event.\n *\n * Looks up destinations from the EVENTS configuration, calls each destination adapter\n * in parallel (providing the event name in lowercase and the supplied context), and\n * waits for all attempts to settle. Individual adapter failures are logged with the\n * \"[DT]\" prefix but do not prevent other destinations from running.\n *\n * @param eventName - The name of the event to dispatch\n * @param data - The event context/payload to send to adapters\n */\nexport async function dispatchTrackEvent(eventName: EventName, data: EventContext) {\n const eventConfig = EVENTS[eventName] as { destinations: string[] };\n\n if (!eventConfig) return;\n\n await Promise.allSettled(\n eventConfig.destinations.map(async (dest: string) => {\n try {\n // call the adapter function based on the destination mapped in the adapters object\n // eventName is converted to lowercase to match the expected format in all adapters\n await adapters[dest as AdapterKey](eventName.toLowerCase(), data, dest);\n } catch (err) {\n console.error(`[DT] Failed to send ${eventName} to ${dest}:`, err);\n }\n })\n );\n}\n","/**\n * Fetches product data for the given product id from the catalog API.\n *\n * @param id - The product identifier used as the `productId` query filter\n * @returns The parsed JSON response containing product data, or `undefined` if the request fails\n */\nexport async function getProductDataById(id: any) {\n try {\n const response = await fetch(\n `/api/catalog_system/pub/products/search?fq=productId:${id}`\n );\n\n return await response.json();\n } catch (e) {\n console.log('[DT] Erro ao buscar dados do produto', e);\n }\n}\n\nexport function getItemShippingTier(orderForm: any, item: any) {\n const info = orderForm?.shippingData?.logisticsInfo?.find(\n (li: any) => li.itemId === item.id\n );\n\n const selectedSla = info?.slas?.find((sla: any) => sla.id === info.selectedSla);\n return selectedSla?.pickupStoreInfo?.friendlyName\n ? `retirada em loja: ${selectedSla.pickupStoreInfo.friendlyName}`\n : selectedSla?.name\n ? `Receba em casa: ${selectedSla.name}`\n : null;\n}\n\nexport async function getItemSku(item: any) {\n const product = await getProductDataById(item.productId);\n\n if (!product.length) return null;\n\n return product[0].items.find((i: any) => i.name === item.skuName)?.itemId ?? null;\n}\n\nexport function getDiscount(item: any) {\n return (\n parseFloat(Math.max(item.listPrice - item.sellingPrice, 0).toFixed(2)) || 0\n );\n}\n\nexport function getItemCategory(item: any) {\n return 'sale';\n}\n\nexport function getItemCategory2(item: any) {\n return 'sale2';\n}\n\nexport function getItemCategory4(item: any) {\n const tags = item?.additionalInfo?.tags || item?.tags;\n return Array.isArray(tags) && tags.length ? tags.join(',') : null;\n}\n\nconst brandMap = { Farm: 'farmrio', 'Farm Etc': 'farmetc' };\nexport function normalizeBrand(input: any) {\n if (typeof input === 'string') {\n return brandMap[input as keyof typeof brandMap] || null;\n }\n\n if (Array.isArray(input)) {\n const uniqueBrands = new Set(\n input.map((i) => brandMap[i.additionalInfo?.brandName as keyof typeof brandMap || i.brand])\n );\n return uniqueBrands.size ? [...uniqueBrands].join('_') : null;\n }\n\n return null;\n}\n","import { normalizeBrand } from '../../utils';\n\nexport function brandFromOrderForm(context: Record<string, any>) {\n if (!context.orderForm && !context.orderForm.items?.length) return null;\n\n const items = context.orderForm.items;\n\n return normalizeBrand(items);\n}\n","import { normalizeBrand } from '../../utils';\n\nexport function brandFromItem(context: Record<string, any>) {\n const { item } = context;\n\n return normalizeBrand(item.additionalInfo?.brandName || item.brand);\n}\n","import { brandFromOrderForm } from './resolvers/brand/fromOrderForm';\nimport { brandFromItem } from './resolvers/brand/fromItem';\nimport type { EventContext, EventName } from '../types';\n\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 context.brand;\n\n switch (eventName) {\n case 'VIEW_CART':\n case 'ADD_COUPON':\n case 'ADD_PERSONAL_INFO':\n case 'BEGIN_CHECKOUT':\n return brandFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'REMOVE_FROM_CART':\n return brandFromItem(context);\n default:\n return null;\n }\n}\n","import type { EventContext } from '../../../types';\n\nimport {\n getItemSku,\n getDiscount,\n getItemCategory,\n getItemCategory2,\n getItemCategory4,\n getItemShippingTier,\n normalizeBrand,\n} from '../../utils';\n\n/**\n * Builds an array of normalized item objects from the order form contained in the given context.\n *\n * @param context - EventContext containing an orderForm with items to convert\n * @returns An array of item-like objects derived from `context.orderForm.items`, each containing fields such as `item_id`, `price`, `quantity`, `item_sku`, `item_name`, category and variant attributes, and `discount`\n */\nexport async function itemsFromOrderForm(context: EventContext) {\n const items = context.orderForm?.items || [];\n\n if (!items.length) return [];\n\n return await Promise.all(\n items.map(async (item: EventContext) => ({\n item_id: item.productId,\n item_category2: getItemCategory2(item),\n item_category4: getItemCategory4(item),\n item_shipping_tier: getItemShippingTier(context.orderForm, item),\n price: parseFloat((item.price / 100).toFixed(2)) || 0,\n quantity: item.quantity || 1,\n item_ref: item.refId || null,\n item_brand: normalizeBrand(item.additionalInfo?.brandName) || null,\n item_sku: (await getItemSku(item)) || item.id || null,\n item_name: item.name || item.id || null,\n item_category: getItemCategory(item) || null,\n item_variant: item.skuName.split('-')[0].trim(),\n item_variant2: item.skuName.split('-')[1]?.trim() || '',\n discount: getDiscount(item),\n }))\n );\n}\n","import {\n getItemSku,\n getDiscount,\n getItemCategory,\n getItemCategory2,\n getItemCategory4,\n getItemShippingTier,\n} from '../../utils';\n\nexport async function itemsFromItem(context: Record<string, any>) {\n const { item, orderForm } = context;\n return [\n {\n item_id: item.productId,\n item_category2: getItemCategory2(item),\n item_category4: getItemCategory4(item),\n item_shipping_tier: getItemShippingTier(orderForm, item),\n price: parseFloat((item.price / 100).toFixed(2)) || 0,\n quantity: 1,\n item_ref: item.refId || null,\n item_brand: item.additionalInfo?.brandName || null,\n item_sku: (await getItemSku(item)) || item.id || null,\n item_name: item.name || item.id || null,\n item_category: getItemCategory(item) || null,\n item_variant: item.skuName.split('-')[0].trim(),\n item_variant2: item.skuName.split('-')[1]?.trim() || '',\n discount: getDiscount(item),\n },\n ];\n}\n","import { itemsFromOrderForm } from './resolvers/items/fromOrderForm';\nimport { itemsFromItem } from './resolvers/items/fromItem';\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 switch (eventName) {\n case 'VIEW_CART':\n case 'BEGIN_CHECKOUT':\n return itemsFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'REMOVE_FROM_CART':\n return itemsFromItem(context);\n default:\n return null;\n }\n}\n","import type { EventContext, EventName } from '../types';\nimport { getBrand } from './brand';\nimport { getItems } from './items';\n\nexport const paramGetters = {\n brand: getBrand,\n\n region: (context: EventContext, eventName: EventName) => {\n return context.region || null;\n },\n\n line_items: (context: EventContext, eventName: EventName) => {\n return (context.orderForm.items || [])\n .map((item: EventContext) => item.productId)\n .join(',');\n },\n\n currency: (context: EventContext, eventName: EventName) => {\n return context.orderForm?.storePreferencesData?.currencyCode || null;\n },\n\n value: (context: EventContext, eventName: EventName) => {\n return context.item ? context.item.price : context.orderForm?.value != null\n ? context.orderForm.value / 100\n : null;\n },\n\n total_discount: (context: EventContext, eventName: EventName) => {\n return (\n context.orderForm?.totalizers\n ?.filter((t: EventContext) => t.id === 'Discounts')\n .reduce((acc: EventContext, t: EventContext) => acc + t.value, 0) / 100 || 0\n );\n },\n\n subtotal: (context: EventContext, eventName: EventName) => {\n return (\n context.orderForm?.totalizers\n ?.filter((t: EventContext) => t.id === 'Items')\n .reduce((acc: EventContext, t: EventContext) => acc + t.value, 0) / 100 || 0\n );\n },\n\n coupon_message: (context: EventContext, eventName: EventName) => {\n const messages = context.orderForm?.messages || [];\n\n if (messages.length === 0) return null;\n\n const couponMessages = messages.filter((msg: EventContext) =>\n msg.text.toLowerCase().includes('cupom')\n );\n\n if (couponMessages.length === 0) return null;\n\n return couponMessages.map((msg: EventContext) => msg.text).join(' | ');\n },\n\n seller_cod_name: (context: EventContext, eventName: EventName) => {\n return context.appliedSellerCodName || null;\n },\n\n coupon: (context: EventContext, eventName: EventName) => {\n return context.appliedCoupon || null;\n },\n\n pre_filled: (context: EventContext, eventName: EventName) => {\n return !!context.preFilled;\n },\n\n search_term: (context: EventContext, eventName: EventName) => {\n return context.searchTerm || null;\n },\n\n search_found: (context: EventContext, eventName: EventName) => {\n return !!context.searchFound;\n },\n\n search_quantity: (context: EventContext, eventName: EventName) => {\n return context.searchQuantity || 0;\n },\n\n promotion_name: (context: EventContext, eventName: EventName) => {\n return context.promotionName || null;\n },\n\n creative_name: (context: EventContext, eventName: EventName) => {\n return context.creativeName || null;\n },\n\n creative_slot: (context: EventContext, eventName: EventName) => {\n return context.creativeSlot || null;\n },\n\n items: getItems,\n};\n","import { EVENTS } from '../constants';\nimport { paramGetters } from '../params';\nimport type { EventName, EventContext } from '../types'\n\ntype ParamName = keyof typeof paramGetters;\n\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 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 };\n"],"mappings":"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","names":["_a"]}
|
|
1
|
+
{"version":3,"sources":["../src/constants.ts","../src/adapters/index.ts","../src/params/utils/index.ts","../src/params/resolvers/brand/fromOrderForm.ts","../src/params/resolvers/brand/fromItem.ts","../src/params/brand.ts","../src/params/resolvers/items/fromOrderForm.ts","../src/params/resolvers/items/fromItem.ts","../src/params/resolvers/items/fromList.ts","../src/params/items.ts","../src/params/index.ts","../src/formatter/index.ts","../src/index.ts"],"sourcesContent":["export const EVENTS = {\n VIEW_CART: {\n name: 'view_cart',\n destinations: ['Dito', 'DataLayer',],\n requiredParams: [\n 'brand',\n 'region',\n 'line_items',\n 'currency',\n 'value',\n 'total_discount',\n 'subtotal',\n 'items',\n ],\n },\n\n ADD_TO_CART: {\n name: 'add_to_cart',\n destinations: ['DataLayer'],\n requiredParams: [\n 'brand',\n 'region',\n 'line_items',\n 'currency',\n 'value',\n 'items',\n ],\n },\n\n REMOVE_FROM_CART: {\n name: 'remove_from_cart',\n destinations: ['DataLayer'],\n requiredParams: [\n 'brand',\n 'region',\n 'line_items',\n 'currency',\n 'value',\n 'items',\n ],\n },\n\n ADD_COUPON: {\n name: 'add_coupon',\n destinations: ['DataLayer'],\n requiredParams: [\n 'brand',\n 'region',\n 'coupon',\n 'coupon_message',\n 'seller_cod_name',\n ],\n },\n\n SEARCH: {\n name: 'search',\n destinations: ['DataLayer'],\n requiredParams: ['brand', 'search_term', 'search_found', 'search_quantity'],\n },\n\n VIEW_PROMOTION: {\n name: 'view_promotion',\n destinations: ['DataLayer'],\n requiredParams: ['region', 'promotion_name', 'creative_name', 'creative_slot'],\n },\n\n SEARCH_ZIPCODE: {\n name: 'search_zipcode',\n requiredParams: ['region'],\n },\n\n SELECT_CONTENT: {\n name: 'select_content',\n requiredParams: ['region'],\n },\n\n SELECT_ITEM: {\n name: 'select_item',\n destinations: ['DataLayer'],\n requiredParams: ['brand', 'region', 'items', 'line_items'],\n },\n\n VIEW_ITEM_LIST: {\n name: 'view_item_list',\n requiredParams: ['region'],\n },\n\n BEGIN_CHECKOUT: {\n name: 'begin_checkout',\n destinations: ['DataLayer'],\n requiredParams: ['brand', 'line_items', 'currency', 'value', 'total_discount', 'subtotal', 'items'],\n },\n\n AUTH_ACTION: {\n name: 'auth_action',\n requiredParams: ['region'],\n },\n\n ADD_PERSONAL_INFO: {\n name: 'add_personal_info',\n destinations: ['DataLayer'],\n requiredParams: ['brand', 'pre_filled', 'line_items', 'currency', 'value', 'total_discount', 'subtotal'],\n },\n\n ADD_SHIPPING_INFO: {\n name: 'add_shipping_info',\n requiredParams: ['region'],\n },\n\n ADD_PAYMENT_INFO: {\n name: 'add_payment_info',\n requiredParams: ['region'],\n },\n\n ORDER_REVIWED: {\n name: 'order_reviewed',\n requiredParams: ['region'],\n },\n\n PURCHASE: {\n name: 'purchase',\n requiredParams: ['region'],\n },\n};\n","import { EVENTS } from '../constants';\nimport type { EventName, EventContext } from '../types'\n\n\n/**\n * Logs a styled tracking message to the console with the destination and event payload.\n *\n * @param data - The event payload or context to include in the log; if falsy, an empty string is logged\n * @param color - CSS background color used for the log label\n * @param destination - Destination name shown in the log label (prefixed by \"DT - \")\n */\nfunction dataTrackingLog(data: EventContext, color: string, destination: string) {\n console.log(\n `%c[DT - ${destination}] EVENTO DISPARADO:%c `,\n `background: ${color}; color: white; font-weight: bold; padding: 2px 4px; border-radius: 3px;`,\n 'color: #fff;',\n data || ''\n );\n}\n\n/**\n * Pushes an ecommerce tracking event to the appropriate dataLayer and logs the payload.\n *\n * Ensures a dataLayer array exists on the target (prefer `ecomm.window` if present, otherwise the global `window`)\n * and pushes an object containing `event` and the `ecomm` payload. Also logs the pushed payload for debugging.\n *\n * @param event - The tracking event name to push\n * @param ecomm - The ecommerce event context payload; if it contains a `window` property that object's `dataLayer` will be used as the target\n * @param dest - A destination label used by the logger\n */\nfunction pushToDataLayer(event: string, ecomm: EventContext, dest: string) {\n 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}\n\n/**\n * Log a Meta tracking event payload for delivery to the Meta destination.\n *\n * @param event - The event name to send to Meta\n * @param ecomm - The event context / ecommerce payload\n * @param dest - Destination identifier (e.g., \"Meta\")\n */\nfunction pushToMeta(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ eventName: event, data: ecomm }, '#8C1007', dest);\n}\n\nfunction pushToDito(event: string, ecomm: EventContext, dest: string) {\n dataTrackingLog({ id: event, custom_data: ecomm }, '#00c851', dest);\n}\n\nconst adapters = {\n Meta: pushToMeta,\n DataLayer: pushToDataLayer,\n Dito: pushToDito,\n};\n\ntype AdapterKey = keyof typeof adapters;\n\n/**\n * Dispatches a tracking event to all destinations configured for the given event.\n *\n * Looks up destinations from the EVENTS configuration, calls each destination adapter\n * in parallel (providing the event name in lowercase and the supplied context), and\n * waits for all attempts to settle. Individual adapter failures are logged with the\n * \"[DT]\" prefix but do not prevent other destinations from running.\n *\n * @param eventName - The name of the event to dispatch\n * @param data - The event context/payload to send to adapters\n */\nexport async function dispatchTrackEvent(eventName: EventName, data: EventContext) {\n const eventConfig = EVENTS[eventName] as { destinations: string[] };\n\n if (!eventConfig) return;\n\n await Promise.allSettled(\n eventConfig.destinations.map(async (dest: string) => {\n try {\n // call the adapter function based on the destination mapped in the adapters object\n // eventName is converted to lowercase to match the expected format in all adapters\n await adapters[dest as AdapterKey](eventName.toLowerCase(), data, dest);\n } catch (err) {\n console.error(`[DT] Failed to send ${eventName} to ${dest}:`, err);\n }\n })\n );\n}\n","/**\n * Fetches product data for the given product id from the catalog API.\n *\n * @param id - The product identifier used as the `productId` query filter\n * @returns The parsed JSON response containing product data, or `undefined` if the request fails\n */\nexport async function getProductDataById(id: any) {\n try {\n const response = await fetch(\n `/api/catalog_system/pub/products/search?fq=productId:${id}`\n );\n\n return await response.json();\n } catch (e) {\n console.log('[DT] Erro ao buscar dados do produto', e);\n }\n}\n\nexport function getItemShippingTier(orderForm: any, item: any) {\n const info = orderForm?.shippingData?.logisticsInfo?.find(\n (li: any) => li.itemId === item.id\n );\n\n const selectedSla = info?.slas?.find((sla: any) => sla.id === info.selectedSla);\n return selectedSla?.pickupStoreInfo?.friendlyName\n ? `retirada em loja: ${selectedSla.pickupStoreInfo.friendlyName}`\n : selectedSla?.name\n ? `Receba em casa: ${selectedSla.name}`\n : null;\n}\n\nexport async function getItemSku(item: any) {\n const product = await getProductDataById(item.productId || item.productID);\n\n if (!product.length) return null;\n\n return product[0].items.find((i: any) => i.name === item.skuName)?.itemId ?? null;\n}\n\nexport function getDiscount(item: any) {\n return item.discount ? item.discount :\n (\n parseFloat(Math.max(item.listPrice - item.sellingPrice, 0).toFixed(2)) || 0\n );\n}\n\nexport function getItemCategory(item: any) {\n return 'sale';\n}\n\nexport function getItemCategory2(item: any) {\n return 'sale2';\n}\n\nexport function getItemCategory4(item: any) {\n const tags = item?.additionalInfo?.tags || item?.tags;\n return Array.isArray(tags) && tags.length ? tags.join(',') : null;\n}\n\nconst BRAND_CODES = {\n farm: 'farmrio',\n 'farm etc': 'farmetc',\n 'farm rio': 'farmrio',\n} as const;\n\ntype Standardized = keyof typeof BRAND_CODES\ninterface BrandItem {\n brand?: string;\n additionalInfo?: {\n brandName?: string;\n };\n}\n\n/**\n * Extrai o código padronizado (ex: 'farmrio') de uma única string de marca.\n * Retorna null se não houver mapeamento.\n */\nfunction getBrandCode(brand: string | undefined): string | null {\n if (!brand) return null;\n const standardized = brand.toLowerCase().trim();\n return BRAND_CODES[standardized as Standardized] || null;\n}\n\n/**\n * Função principal que padroniza a marca ou lista de marcas para o formato final:\n * 'farmrio', 'farmetc', ou 'farmrio_farmetc'.\n */\nexport function normalizeBrand(input: string | BrandItem[] | BrandItem | string[] | undefined | null) {\n let brandStrings = [];\n\n if (Array.isArray(input) && input.every(item => typeof item === 'string')) {\n brandStrings = input as string[];\n } else if (Array.isArray(input)) {\n // Se for um Array, coleta a string da marca de cada item.\n brandStrings = input.map(item => item.additionalInfo?.brandName || item.brand);\n } else if (typeof input === 'object' && input !== null && 'brand' in input) {\n // Se for um Objeto único, trata como um Array de um único item (para reuso de lógica).\n brandStrings = [(input as BrandItem).additionalInfo?.brandName || (input as BrandItem).brand];\n } else if (typeof input === 'string') {\n // Se for uma String (mal formatada ou não), trata diretamente.\n return getBrandCode(input);\n } else {\n // Se for undefined, null, ou outro tipo não esperado.\n return null;\n }\n\n const brandCodes = brandStrings\n .map(getBrandCode)\n .filter((code): code is string => code !== null); // ['farmrio', 'farmetc', 'farmrio']\n\n const uniqueSortedCodes = [...new Set(brandCodes)].sort(); // ['farmetc', 'farmrio']\n\n // Retorna a combinação ('farmrio', 'farmetc', ou 'farmrio_farmetc').\n return uniqueSortedCodes.length > 0 ? uniqueSortedCodes.join('_') : null;\n}\n","import { normalizeBrand } from '../../utils';\n\nexport function brandFromOrderForm(context: Record<string, any>) {\n if (!context.orderForm && !context.orderForm.items?.length) return null;\n\n const items = context.orderForm.items;\n\n return normalizeBrand(items);\n}\n","import { normalizeBrand } from '../../utils';\n\nexport function brandFromItem(context: Record<string, any>) {\n const { item } = context;\n\n return normalizeBrand(item.additionalInfo?.brandName || item.brand);\n}\n","import { brandFromOrderForm } from './resolvers/brand/fromOrderForm';\nimport { brandFromItem } from './resolvers/brand/fromItem';\nimport { normalizeBrand } from './utils';\nimport type { EventContext, EventName } from '../types';\n\n/**\n * Determines the brand for an event by using the context or extracting it based on the event type.\n *\n * Prefers `context.brand` when present; otherwise selects a resolver based on `eventName` to extract the brand.\n *\n * @param context - The event context which may already contain a `brand` or provide data for extraction\n * @param eventName - The event name used to choose the extraction strategy\n * @returns The resolved brand value, or `null` if no brand could be determined\n */\nexport function getBrand(context: EventContext, eventName: EventName) {\n if (context?.brand) return normalizeBrand(context.brand);\n\n switch (eventName) {\n case 'VIEW_CART':\n case 'ADD_COUPON':\n case 'ADD_PERSONAL_INFO':\n case 'BEGIN_CHECKOUT':\n return brandFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'REMOVE_FROM_CART':\n return brandFromItem(context);\n default:\n return null;\n }\n}\n","import type { EventContext } from '../../../types';\n\nimport {\n getItemSku,\n getDiscount,\n getItemCategory,\n getItemCategory2,\n getItemCategory4,\n getItemShippingTier,\n normalizeBrand,\n} from '../../utils';\n\n/**\n * Builds an array of normalized item objects from the order form contained in the given context.\n *\n * @param context - EventContext containing an orderForm with items to convert\n * @returns An array of item-like objects derived from `context.orderForm.items`, each containing fields such as `item_id`, `price`, `quantity`, `item_sku`, `item_name`, category and variant attributes, and `discount`\n */\nexport async function itemsFromOrderForm(context: EventContext) {\n const items = context.orderForm?.items || [];\n\n if (!items.length) return [];\n\n return await Promise.all(\n items.map(async (item: EventContext) => ({\n item_id: item.productId,\n item_category2: getItemCategory2(item),\n item_category4: getItemCategory4(item),\n item_shipping_tier: getItemShippingTier(context.orderForm, item),\n price: parseFloat((item.price / 100).toFixed(2)) || 0,\n quantity: item.quantity || 1,\n item_ref: item.refId || null,\n item_brand: normalizeBrand(item.additionalInfo?.brandName) || null,\n item_sku: (await getItemSku(item)) || item.id || null,\n item_name: item.name || item.id || null,\n item_category: getItemCategory(item) || null,\n item_variant: item.skuName.split('-')[0].trim(),\n item_variant2: item.skuName.split('-')[1]?.trim() || '',\n discount: getDiscount(item),\n }))\n );\n}\n","import {\n getItemSku,\n getDiscount,\n getItemCategory,\n getItemCategory2,\n getItemCategory4,\n getItemShippingTier,\n} from '../../utils';\n\nexport async function itemsFromItem(context: Record<string, any>) {\n const { item, orderForm } = context;\n return [\n {\n item_id: item.productId,\n item_category2: getItemCategory2(item),\n item_category4: getItemCategory4(item),\n item_shipping_tier: getItemShippingTier(orderForm, item),\n price: parseFloat((item.price / 100).toFixed(2)) || 0,\n quantity: 1,\n item_ref: item.refId || null,\n item_brand: item.additionalInfo?.brandName || null,\n item_sku: (await getItemSku(item)) || item.id || null,\n item_name: item.name || item.id || null,\n item_category: getItemCategory(item) || null,\n item_variant: item.skuName.split('-')[0].trim(),\n item_variant2: item.skuName.split('-')[1]?.trim() || '',\n discount: getDiscount(item),\n },\n ];\n}\n","import {\n getItemSku,\n getDiscount,\n // getItemCategory,\n // getItemCategory2,\n // getItemCategory4,\n normalizeBrand,\n} from '../../utils';\n\nexport async function itemsFromList(context: Record<string, any>) {\n const { item } = context;\n\n return [\n {\n item_id: item.productID || null,\n item_category2: item.category.split(\">\")[1]?.trim() || null,\n price: item.price || 0,\n quantity: 1,\n item_ref: context.item.additionalProperty.find((i: { name: string }) => i.name === \"RefId\").value,\n item_brand: normalizeBrand(item.brand.name) || null,\n item_sku: (await getItemSku(item)) || item.productID || null,\n item_name: item.alternateName || null,\n // item_category: null,\n item_variant: item?.name?.split(\"-\")[0].trim() || null,\n discount: getDiscount(item) || null,\n item_list_name: context?.itemListName || null,\n index: typeof context?.index === 'number' ? context.index : null\n },\n ];\n}\n","import { itemsFromOrderForm } from './resolvers/items/fromOrderForm';\nimport { itemsFromItem } from './resolvers/items/fromItem';\nimport { itemsFromList } from './resolvers/items/fromList';\n\n/**\n * Selects the appropriate item resolver based on the event name and returns its result.\n *\n * @param context - Runtime context passed to the selected resolver\n * @param eventName - Event identifier that determines which resolver to use\n * @returns The resolved items for the event, or `null` if the event is not recognized\n */\nexport function getItems(context: Record<string, any>, eventName: string) {\n if (context?.items) return context.items;\n\n switch (eventName) {\n case 'VIEW_CART':\n case 'BEGIN_CHECKOUT':\n return itemsFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'REMOVE_FROM_CART':\n return itemsFromItem(context);\n case 'SELECT_ITEM':\n return itemsFromList(context)\n default:\n return null;\n }\n}\n","import type { EventContext, EventName } from '../types';\nimport { getBrand } from './brand';\nimport { getItems } from './items';\n\nexport const paramGetters = {\n brand: getBrand,\n\n region: (context: EventContext, eventName: EventName) => {\n return context.region || null;\n },\n\n line_items: (context: EventContext, eventName: EventName) => {\n return context?.lineItems ? context.lineItems : (context.orderForm.items || [])\n .map((item: EventContext) => item.productId)\n .join(',');\n },\n\n currency: (context: EventContext, eventName: EventName) => {\n return context.orderForm?.storePreferencesData?.currencyCode || null;\n },\n\n value: (context: EventContext, eventName: EventName) => {\n return context.item ? context.item.price : context.orderForm?.value != null\n ? context.orderForm.value / 100\n : null;\n },\n\n total_discount: (context: EventContext, eventName: EventName) => {\n return (\n context.orderForm?.totalizers\n ?.filter((t: EventContext) => t.id === 'Discounts')\n .reduce((acc: EventContext, t: EventContext) => acc + t.value, 0) / 100 || 0\n );\n },\n\n subtotal: (context: EventContext, eventName: EventName) => {\n return (\n context.orderForm?.totalizers\n ?.filter((t: EventContext) => t.id === 'Items')\n .reduce((acc: EventContext, t: EventContext) => acc + t.value, 0) / 100 || 0\n );\n },\n\n coupon_message: (context: EventContext, eventName: EventName) => {\n const messages = context.orderForm?.messages || [];\n\n if (messages.length === 0) return null;\n\n const couponMessages = messages.filter((msg: EventContext) =>\n msg.text.toLowerCase().includes('cupom')\n );\n\n if (couponMessages.length === 0) return null;\n\n return couponMessages.map((msg: EventContext) => msg.text).join(' | ');\n },\n\n seller_cod_name: (context: EventContext, eventName: EventName) => {\n return context.appliedSellerCodName || null;\n },\n\n coupon: (context: EventContext, eventName: EventName) => {\n return context.appliedCoupon || null;\n },\n\n pre_filled: (context: EventContext, eventName: EventName) => {\n return !!context.preFilled;\n },\n\n search_term: (context: EventContext, eventName: EventName) => {\n return context.searchTerm || null;\n },\n\n search_found: (context: EventContext, eventName: EventName) => {\n return !!context.searchFound;\n },\n\n search_quantity: (context: EventContext, eventName: EventName) => {\n return context.searchQuantity || 0;\n },\n\n promotion_name: (context: EventContext, eventName: EventName) => {\n return context.promotionName || null;\n },\n\n creative_name: (context: EventContext, eventName: EventName) => {\n return context.creativeName || null;\n },\n\n creative_slot: (context: EventContext, eventName: EventName) => {\n return context.creativeSlot || null;\n },\n\n items: getItems,\n};\n","import { EVENTS } from '../constants';\nimport { paramGetters } from '../params';\nimport type { EventName, EventContext } from '../types'\n\ntype ParamName = keyof typeof paramGetters;\n\n/**\n * Resolve and return the required parameters for a given event.\n *\n * @param context - Context passed to each parameter getter (defaults to an empty object)\n * @param eventName - The event whose required parameters should be resolved\n * @returns An object mapping each required parameter name to its resolved value (`null` when a param getter is missing), or `undefined` if the event has no configuration\n */\nexport async function getParameters(context: EventContext = {}, eventName: EventName) {\n const eventConfig = EVENTS[eventName] as { requiredParams: string[] };\n\n if (!eventConfig) return;\n\n const params = Object.fromEntries(\n await Promise.all(\n eventConfig.requiredParams.map(async (param) => {\n const getter = paramGetters[param as ParamName];\n\n if (typeof getter !== 'function') {\n console.error(`[DT] Missing paramGetter for param: ${param}`);\n return [param, null]; // ou undefined\n }\n \n return [param, await getter(context, eventName)];\n })\n )\n );\n\n return params;\n}\n","import { dispatchTrackEvent } from './adapters';\nimport { getParameters } from './formatter';\nimport { EVENTS } from './constants';\nimport type { EventContext, EventName } from './types';\n\n/**\n * Assembles tracking parameters and sends a web tracking event.\n *\n * @param event - The name of the event to track.\n * @param context - Optional context used to build event parameters; may include a `window` property that will be attached to the dispatched payload.\n * @returns The result returned by `dispatchTrackEvent` when the event is sent successfully, or the value returned by `console.error` (`undefined`) if an error occurs.\n */\nasync function trackWebEvent(event: EventName, context: EventContext = {}) {\n try {\n // object data to be sent\n const parameters = await getParameters(context, event);\n\n // function to send event\n return await dispatchTrackEvent(\n event,\n Object.assign({}, parameters, { window: context.window })\n );\n } catch (err) {\n return console.error(`[DT] Error tracking event ${event}:`, err);\n }\n}\n\nexport { trackWebEvent, EVENTS };\n\nexport default {\n trackWebEvent,\n EVENTS,\n}\n"],"mappings":"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","names":["_a","_a"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@azzas/azzas-tracker-web",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.12",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/mod.cjs",
|
|
6
6
|
"module": "./dist/mod.js",
|
|
@@ -20,7 +20,10 @@
|
|
|
20
20
|
"build": "tsup",
|
|
21
21
|
"prepublishOnly": "npm run build",
|
|
22
22
|
"release:homolog": "npm run build && npm version prepatch --preid=beta && npm publish --tag beta --access public",
|
|
23
|
-
"release:prod": "npm run build && npm version patch && npm publish --access public"
|
|
23
|
+
"release:prod": "npm run build && npm version patch && npm publish --access public",
|
|
24
|
+
"pack:copy": "VERSION=$(npm pkg get version | tr -d '\"') && npm pack && tar -xzf azzas-azzas-tracker-web-$VERSION.tgz",
|
|
25
|
+
"start:deno": "deno run --allow-net --allow-read https://deno.land/std@0.207.0/http/file_server.ts ./package",
|
|
26
|
+
"dev:deno": "npm run build && npm run pack:copy && npm run start:deno"
|
|
24
27
|
},
|
|
25
28
|
"publishConfig": {
|
|
26
29
|
"access": "public"
|