shopkit-analytics 1.0.27 → 1.1.0
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 +69 -6
- package/dist/adapters/index.d.mts +1 -1
- package/dist/adapters/index.d.ts +1 -1
- package/dist/adapters/index.js +42 -285
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/index.mjs +3 -5
- package/dist/affiliate/index.d.mts +2 -2
- package/dist/affiliate/index.d.ts +2 -2
- package/dist/{affiliate-tracker-BgHwibPv.d.mts → affiliate-tracker-B9nV3E9y.d.mts} +1 -1
- package/dist/{affiliate-tracker-BgHwibPv.d.ts → affiliate-tracker-B9nV3E9y.d.ts} +1 -1
- package/dist/{chunk-KM7BFXAJ.mjs → chunk-FKXTDMY6.mjs} +11 -8
- package/dist/chunk-FKXTDMY6.mjs.map +1 -0
- package/dist/{chunk-YLHB4WX7.mjs → chunk-FXJKI3KV.mjs} +1 -3
- package/dist/chunk-FXJKI3KV.mjs.map +1 -0
- package/dist/{chunk-NYLN6L75.mjs → chunk-JGMSIY6U.mjs} +39 -281
- package/dist/chunk-JGMSIY6U.mjs.map +1 -0
- package/dist/{chunk-2YXPYXKI.mjs → chunk-UFDN3A6M.mjs} +6 -6
- package/dist/chunk-UFDN3A6M.mjs.map +1 -0
- package/dist/events/index.d.mts +2 -1
- package/dist/events/index.d.ts +2 -1
- package/dist/events/index.js +115 -112
- package/dist/events/index.js.map +1 -1
- package/dist/events/index.mjs +4 -4
- package/dist/{index-BPSePEZq.d.mts → index-BgLdfy-M.d.mts} +18 -54
- package/dist/{index-CvfegLNy.d.ts → index-C3YOamdo.d.ts} +18 -54
- package/dist/index.d.mts +191 -7
- package/dist/index.d.ts +191 -7
- package/dist/index.js +372 -300
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +323 -14
- package/dist/index.mjs.map +1 -1
- package/dist/types.d.mts +11 -47
- package/dist/types.d.ts +11 -47
- package/dist/types.js +0 -2
- package/dist/types.js.map +1 -1
- package/dist/types.mjs +1 -1
- package/dist/utils/index.js +5 -5
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/index.mjs +1 -1
- package/package.json +9 -2
- package/templates/nextjs/api-events-multi-route.ts +224 -223
- package/templates/nextjs/api-events-route.ts +87 -110
- package/templates/nextjs/pages-api-events-multi.ts +231 -224
- package/templates/nextjs/pages-api-events.ts +96 -114
- package/dist/chunk-2YXPYXKI.mjs.map +0 -1
- package/dist/chunk-KM7BFXAJ.mjs.map +0 -1
- package/dist/chunk-NYLN6L75.mjs.map +0 -1
- package/dist/chunk-YLHB4WX7.mjs.map +0 -1
package/README.md
CHANGED
|
@@ -85,10 +85,8 @@ The following table shows which events are supported by each analytics platform:
|
|
|
85
85
|
| **Search** | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
|
|
86
86
|
| **View Search Results** | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ |
|
|
87
87
|
| **Cart Viewed** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
|
|
88
|
-
| **Checkout Started** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
|
|
89
88
|
| **Initiate Checkout** | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ |
|
|
90
89
|
| **Add Payment Info** | ✅ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ |
|
|
91
|
-
| **Checkout Completed** | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ |
|
|
92
90
|
| **Purchase** | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
|
|
93
91
|
| **User Signup** | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ |
|
|
94
92
|
| **User Login** | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ |
|
|
@@ -155,10 +153,8 @@ EventType.REMOVE_FROM_CART // Remove from cart
|
|
|
155
153
|
EventType.CART_VIEWED // Cart page view
|
|
156
154
|
|
|
157
155
|
// Checkout flow
|
|
158
|
-
EventType.CHECKOUT_STARTED // Checkout initiation
|
|
159
156
|
EventType.INITIATE_CHECKOUT // Begin checkout (GA4)
|
|
160
157
|
EventType.ADD_PAYMENT_INFO // Payment info added
|
|
161
|
-
EventType.CHECKOUT_COMPLETED // Checkout completion
|
|
162
158
|
EventType.PURCHASE // Purchase completed
|
|
163
159
|
|
|
164
160
|
// Discovery
|
|
@@ -220,6 +216,7 @@ EventType.SPECIFIC // Specific event with predefined structure
|
|
|
220
216
|
googleAnalytics: {
|
|
221
217
|
measurementId: "G-XXXXXXXXXX",
|
|
222
218
|
enableDebugLogs: true,
|
|
219
|
+
gokwikEnabled: false, // Skip checkout events when GoKwik is handling them
|
|
223
220
|
customDimensions: {
|
|
224
221
|
user_type: "premium",
|
|
225
222
|
},
|
|
@@ -228,6 +225,26 @@ EventType.SPECIFIC // Specific event with predefined structure
|
|
|
228
225
|
/>
|
|
229
226
|
```
|
|
230
227
|
|
|
228
|
+
#### GoKwik Conflict Prevention
|
|
229
|
+
|
|
230
|
+
When using GoKwik checkout alongside Google Analytics, you can prevent duplicate event tracking by enabling the `gokwikEnabled` flag:
|
|
231
|
+
|
|
232
|
+
```tsx
|
|
233
|
+
<ShopkitAnalytics
|
|
234
|
+
config={{
|
|
235
|
+
googleAnalytics: {
|
|
236
|
+
measurementId: "G-XXXXXXXXXX",
|
|
237
|
+
gokwikEnabled: true, // Prevents duplicate tracking of checkout events
|
|
238
|
+
},
|
|
239
|
+
}}
|
|
240
|
+
/>
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
**Events skipped when `gokwikEnabled: true`:**
|
|
244
|
+
- `PURCHASE` - Purchase completion
|
|
245
|
+
|
|
246
|
+
This prevents duplicate tracking since GoKwik already sends these events to Google Analytics and Meta when enabled.
|
|
247
|
+
|
|
231
248
|
### Facebook Pixel (Single)
|
|
232
249
|
|
|
233
250
|
```tsx
|
|
@@ -236,12 +253,33 @@ EventType.SPECIFIC // Specific event with predefined structure
|
|
|
236
253
|
facebookPixel: {
|
|
237
254
|
pixelId: "123456789",
|
|
238
255
|
enableCAPI: true, // Server-side tracking (default: true)
|
|
256
|
+
gokwikEnabled: false, // Skip checkout events when GoKwik is handling them
|
|
239
257
|
enableAdvancedMatching: true,
|
|
240
258
|
},
|
|
241
259
|
}}
|
|
242
260
|
/>
|
|
243
261
|
```
|
|
244
262
|
|
|
263
|
+
#### GoKwik Conflict Prevention
|
|
264
|
+
|
|
265
|
+
When using GoKwik checkout alongside Facebook Pixel, you can prevent duplicate event tracking by enabling the `gokwikEnabled` flag:
|
|
266
|
+
|
|
267
|
+
```tsx
|
|
268
|
+
<ShopkitAnalytics
|
|
269
|
+
config={{
|
|
270
|
+
facebookPixel: {
|
|
271
|
+
pixelId: "123456789",
|
|
272
|
+
gokwikEnabled: true, // Prevents duplicate tracking of checkout events
|
|
273
|
+
},
|
|
274
|
+
}}
|
|
275
|
+
/>
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
**Events skipped when `gokwikEnabled: true`:**
|
|
279
|
+
- `PURCHASE` - Purchase completion
|
|
280
|
+
|
|
281
|
+
This prevents duplicate tracking since GoKwik already sends these events to Meta and Google Analytics when enabled.
|
|
282
|
+
|
|
245
283
|
**Environment Variables:**
|
|
246
284
|
```bash
|
|
247
285
|
FACEBOOK_CAPI_ACCESS_TOKEN="your_access_token"
|
|
@@ -260,12 +298,36 @@ NEXT_PUBLIC_PIXEL_ID="123456789"
|
|
|
260
298
|
{ pixelId: "555666777", name: "Retargeting", enableCAPI: false },
|
|
261
299
|
],
|
|
262
300
|
enableCAPI: true,
|
|
301
|
+
gokwikEnabled: false, // Skip checkout events when GoKwik is handling them
|
|
263
302
|
capiEndpoint: "/api/events/multi",
|
|
264
303
|
},
|
|
265
304
|
}}
|
|
266
305
|
/>
|
|
267
306
|
```
|
|
268
307
|
|
|
308
|
+
#### GoKwik Conflict Prevention
|
|
309
|
+
|
|
310
|
+
When using GoKwik checkout alongside Facebook Multi-Pixel, you can prevent duplicate event tracking by enabling the `gokwikEnabled` flag:
|
|
311
|
+
|
|
312
|
+
```tsx
|
|
313
|
+
<ShopkitAnalytics
|
|
314
|
+
config={{
|
|
315
|
+
facebookMultiPixel: {
|
|
316
|
+
pixels: [
|
|
317
|
+
{ pixelId: "123456789", name: "Primary", enableCAPI: true },
|
|
318
|
+
{ pixelId: "987654321", name: "Secondary", enableCAPI: true },
|
|
319
|
+
],
|
|
320
|
+
gokwikEnabled: true, // Prevents duplicate tracking across all pixels
|
|
321
|
+
},
|
|
322
|
+
}}
|
|
323
|
+
/>
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
**Events skipped when `gokwikEnabled: true`:**
|
|
327
|
+
- `PURCHASE` - Purchase completion
|
|
328
|
+
|
|
329
|
+
This prevents duplicate tracking across all configured pixels since GoKwik already sends these events to Meta and Google Analytics when enabled.
|
|
330
|
+
|
|
269
331
|
**Environment Variables:**
|
|
270
332
|
```bash
|
|
271
333
|
NEXT_PUBLIC_MULTI_PIXEL_IDS="123456789,987654321,555666777"
|
|
@@ -307,6 +369,7 @@ FACEBOOK_MULTI_CAPI_ACCESS_TOKENS="token1,token2,token3"
|
|
|
307
369
|
shopify: {
|
|
308
370
|
shopId: "your-shop-id",
|
|
309
371
|
domain: "your-shop.myshopify.com",
|
|
372
|
+
merchantName: "your-merchant-name",
|
|
310
373
|
currency: "USD",
|
|
311
374
|
},
|
|
312
375
|
}}
|
|
@@ -636,9 +699,9 @@ publishEvent({
|
|
|
636
699
|
variant: "Black",
|
|
637
700
|
});
|
|
638
701
|
|
|
639
|
-
//
|
|
702
|
+
// Begin checkout
|
|
640
703
|
publishEvent({
|
|
641
|
-
type: EventType.
|
|
704
|
+
type: EventType.INITIATE_CHECKOUT,
|
|
642
705
|
cartValue: 199.99,
|
|
643
706
|
currency: "USD",
|
|
644
707
|
itemCount: 1,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { B as BaseAdapter,
|
|
1
|
+
export { B as BaseAdapter, d as GoogleAdapter, G as GoogleAdapterConfig, i as KwikCheckoutAdapter, b as KwikCheckoutConfig, h as KwikPassAdapter, K as KwikPassConfig, e as MoengageAdapter, a as MoengageAdapterConfig, c as MultiPixelAdapter, M as MultiPixelAdapterConfig, f as PostHogAdapter, P as PostHogAdapterConfig, g as ShopifyAdapter, S as ShopifyAdapterConfig } from '../index-BgLdfy-M.mjs';
|
|
2
2
|
import '../types.mjs';
|
|
3
3
|
import '../subscriber-90r_t90W.mjs';
|
|
4
4
|
import '../types-BBZbvq9-.mjs';
|
package/dist/adapters/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { B as BaseAdapter,
|
|
1
|
+
export { B as BaseAdapter, d as GoogleAdapter, G as GoogleAdapterConfig, i as KwikCheckoutAdapter, b as KwikCheckoutConfig, h as KwikPassAdapter, K as KwikPassConfig, e as MoengageAdapter, a as MoengageAdapterConfig, c as MultiPixelAdapter, M as MultiPixelAdapterConfig, f as PostHogAdapter, P as PostHogAdapterConfig, g as ShopifyAdapter, S as ShopifyAdapterConfig } from '../index-C3YOamdo.js';
|
|
2
2
|
import '../types.js';
|
|
3
3
|
import '../subscriber-AtiHiP3i.js';
|
|
4
4
|
import '../types-BBZbvq9-.js';
|
package/dist/adapters/index.js
CHANGED
|
@@ -36,7 +36,6 @@ __export(adapters_exports, {
|
|
|
36
36
|
KwikPassAdapter: () => KwikPassAdapter,
|
|
37
37
|
MoengageAdapter: () => MoengageAdapter,
|
|
38
38
|
MultiPixelAdapter: () => MultiPixelAdapter,
|
|
39
|
-
PixelAdapter: () => PixelAdapter,
|
|
40
39
|
PostHogAdapter: () => PostHogAdapter,
|
|
41
40
|
ShopifyAdapter: () => ShopifyAdapter
|
|
42
41
|
});
|
|
@@ -366,11 +365,6 @@ function getFacebookClickId() {
|
|
|
366
365
|
if (typeof window === "undefined") {
|
|
367
366
|
return void 0;
|
|
368
367
|
}
|
|
369
|
-
const urlParams = new URLSearchParams(window.location.search);
|
|
370
|
-
const fbclid = urlParams.get("fbclid");
|
|
371
|
-
if (fbclid) {
|
|
372
|
-
return `fb.1.${Date.now()}.${fbclid}`;
|
|
373
|
-
}
|
|
374
368
|
const cookies = document.cookie.split(";");
|
|
375
369
|
for (const cookie of cookies) {
|
|
376
370
|
const [name, value] = cookie.trim().split("=");
|
|
@@ -378,6 +372,11 @@ function getFacebookClickId() {
|
|
|
378
372
|
return value;
|
|
379
373
|
}
|
|
380
374
|
}
|
|
375
|
+
const urlParams = new URLSearchParams(window.location.search);
|
|
376
|
+
const fbclid = urlParams.get("fbclid");
|
|
377
|
+
if (fbclid) {
|
|
378
|
+
return fbclid;
|
|
379
|
+
}
|
|
381
380
|
return void 0;
|
|
382
381
|
}
|
|
383
382
|
function getFacebookBrowserId() {
|
|
@@ -394,207 +393,12 @@ function getFacebookBrowserId() {
|
|
|
394
393
|
return void 0;
|
|
395
394
|
}
|
|
396
395
|
|
|
397
|
-
// src/adapters/
|
|
398
|
-
var
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
}
|
|
404
|
-
/**
|
|
405
|
-
* Initialize the Facebook Pixel
|
|
406
|
-
*/
|
|
407
|
-
async initialize() {
|
|
408
|
-
if (this.initialized) {
|
|
409
|
-
return;
|
|
410
|
-
}
|
|
411
|
-
if (typeof window === "undefined") {
|
|
412
|
-
return;
|
|
413
|
-
}
|
|
414
|
-
if (!window.fbq) {
|
|
415
|
-
this.logger.warn(
|
|
416
|
-
"Facebook Pixel fbq not found. Make sure the script is loaded."
|
|
417
|
-
);
|
|
418
|
-
return;
|
|
419
|
-
} else {
|
|
420
|
-
const pixelId = this.getConfig("pixelId");
|
|
421
|
-
if (!pixelId) {
|
|
422
|
-
this.logger.warn("Pixel ID not provided. Skipping fbq init.");
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
this.initialized = true;
|
|
426
|
-
}
|
|
427
|
-
/**
|
|
428
|
-
* Track an event with Facebook Pixel
|
|
429
|
-
* @param event The event to track
|
|
430
|
-
* @param adapterParams Optional adapter-specific parameters
|
|
431
|
-
*/
|
|
432
|
-
async trackEvent(event, adapterParams) {
|
|
433
|
-
if (!event.eventId) {
|
|
434
|
-
event.eventId = generateEventId(event.type);
|
|
435
|
-
}
|
|
436
|
-
if (!event.timestamp) {
|
|
437
|
-
event.timestamp = Date.now();
|
|
438
|
-
}
|
|
439
|
-
await this.trackClientSide(event, adapterParams);
|
|
440
|
-
if (this.getConfig("enableCAPI", true)) {
|
|
441
|
-
await this.trackServerSide(event, adapterParams);
|
|
442
|
-
}
|
|
443
|
-
}
|
|
444
|
-
/**
|
|
445
|
-
* Track event on client-side (browser pixel)
|
|
446
|
-
*/
|
|
447
|
-
async trackClientSide(event, adapterParams) {
|
|
448
|
-
if (!this.initialized || typeof window === "undefined" || !window.fbq) {
|
|
449
|
-
this.logger.warn(
|
|
450
|
-
"Cannot track client-side event, adapter not initialized or fbq not available",
|
|
451
|
-
{
|
|
452
|
-
eventType: event.type
|
|
453
|
-
}
|
|
454
|
-
);
|
|
455
|
-
return;
|
|
456
|
-
}
|
|
457
|
-
const { eventName, enhancedParams } = this.formatEventPayload(
|
|
458
|
-
event,
|
|
459
|
-
adapterParams
|
|
460
|
-
);
|
|
461
|
-
if (!eventName) {
|
|
462
|
-
return;
|
|
463
|
-
}
|
|
464
|
-
if (event.eventId) {
|
|
465
|
-
window.fbq?.("track", eventName, enhancedParams, {
|
|
466
|
-
eventID: event.eventId
|
|
467
|
-
});
|
|
468
|
-
} else {
|
|
469
|
-
window.fbq?.("track", eventName, enhancedParams);
|
|
470
|
-
}
|
|
471
|
-
}
|
|
472
|
-
/**
|
|
473
|
-
* Track event on server-side (CAPI) as backup
|
|
474
|
-
*/
|
|
475
|
-
async trackServerSide(event, adapterParams) {
|
|
476
|
-
try {
|
|
477
|
-
const { eventName, enhancedParams } = this.formatEventPayload(
|
|
478
|
-
event,
|
|
479
|
-
adapterParams
|
|
480
|
-
);
|
|
481
|
-
if (!eventName) {
|
|
482
|
-
return;
|
|
483
|
-
}
|
|
484
|
-
const browserInfo = getBrowserInfo();
|
|
485
|
-
const payload = {
|
|
486
|
-
eventName,
|
|
487
|
-
eventId: event.eventId,
|
|
488
|
-
timestamp: event.timestamp,
|
|
489
|
-
enhancedParams,
|
|
490
|
-
userInfo: browserInfo
|
|
491
|
-
};
|
|
492
|
-
const response = await fetch("/api/events", {
|
|
493
|
-
method: "POST",
|
|
494
|
-
headers: {
|
|
495
|
-
"Content-Type": "application/json"
|
|
496
|
-
},
|
|
497
|
-
body: JSON.stringify(payload)
|
|
498
|
-
});
|
|
499
|
-
if (!response.ok) {
|
|
500
|
-
throw new Error(`Server-side tracking failed: ${response.status}`);
|
|
501
|
-
}
|
|
502
|
-
} catch (error) {
|
|
503
|
-
this.logger.error(
|
|
504
|
-
`FB Pixel: Server-side tracking failed for event ${event.type}: ${error instanceof Error ? error.message : String(error)}`
|
|
505
|
-
);
|
|
506
|
-
}
|
|
507
|
-
}
|
|
508
|
-
/**
|
|
509
|
-
* Utility function to format event payload for both client and server-side tracking
|
|
510
|
-
*/
|
|
511
|
-
formatEventPayload(event, adapterParams) {
|
|
512
|
-
let baseParams = {};
|
|
513
|
-
let eventName = "";
|
|
514
|
-
switch (event.type) {
|
|
515
|
-
case "page_view" /* PAGE_VIEW */:
|
|
516
|
-
const pageViewEvent = event;
|
|
517
|
-
eventName = this.getEventName(adapterParams, "PageView");
|
|
518
|
-
baseParams = {
|
|
519
|
-
// Facebook-compatible parameters
|
|
520
|
-
content_name: pageViewEvent.page_title || pageViewEvent.title,
|
|
521
|
-
content_category: pageViewEvent.event_category,
|
|
522
|
-
// Custom parameters that Facebook will accept in custom_data
|
|
523
|
-
page_location: pageViewEvent.page_location || pageViewEvent.path,
|
|
524
|
-
page_title: pageViewEvent.page_title || pageViewEvent.title,
|
|
525
|
-
page_referrer: pageViewEvent.page_referrer || pageViewEvent.referrer,
|
|
526
|
-
page_path: pageViewEvent.page_path || pageViewEvent.path
|
|
527
|
-
};
|
|
528
|
-
break;
|
|
529
|
-
case "view_content" /* VIEW_CONTENT */:
|
|
530
|
-
const viewContentEvent = event;
|
|
531
|
-
eventName = this.getEventName(adapterParams, "ViewContent");
|
|
532
|
-
baseParams = {
|
|
533
|
-
content_type: viewContentEvent.content_type || "product",
|
|
534
|
-
content_ids: viewContentEvent.content_ids || [],
|
|
535
|
-
content_name: viewContentEvent.content_name || "",
|
|
536
|
-
content_category: viewContentEvent.content_category || "",
|
|
537
|
-
value: viewContentEvent.value || 0,
|
|
538
|
-
currency: viewContentEvent.currency || "INR"
|
|
539
|
-
};
|
|
540
|
-
break;
|
|
541
|
-
case "add_to_cart" /* ADD_TO_CART */:
|
|
542
|
-
const cartEvent = event;
|
|
543
|
-
eventName = this.getEventName(adapterParams, "AddToCart");
|
|
544
|
-
baseParams = {
|
|
545
|
-
content_type: "product_group",
|
|
546
|
-
content_ids: [cartEvent.productId],
|
|
547
|
-
content_name: cartEvent.productName,
|
|
548
|
-
value: cartEvent.price,
|
|
549
|
-
currency: cartEvent.currency || "INR"
|
|
550
|
-
};
|
|
551
|
-
break;
|
|
552
|
-
case "search" /* SEARCH */:
|
|
553
|
-
const searchEvent = event;
|
|
554
|
-
eventName = this.getEventName(adapterParams, "Search");
|
|
555
|
-
baseParams = {
|
|
556
|
-
search_string: searchEvent.searchTerm,
|
|
557
|
-
content_category: "product",
|
|
558
|
-
content_ids: searchEvent.content_ids || []
|
|
559
|
-
};
|
|
560
|
-
break;
|
|
561
|
-
case "initiate_checkout" /* INITIATE_CHECKOUT */:
|
|
562
|
-
const checkoutEvent = event;
|
|
563
|
-
eventName = this.getEventName(adapterParams, "InitiateCheckout");
|
|
564
|
-
baseParams = {
|
|
565
|
-
content_type: "product",
|
|
566
|
-
currency: checkoutEvent.currency || "INR",
|
|
567
|
-
value: checkoutEvent.cartValue,
|
|
568
|
-
num_items: checkoutEvent.itemCount || checkoutEvent.items?.length || 0,
|
|
569
|
-
contents: checkoutEvent.items?.map((item) => ({
|
|
570
|
-
id: item.productId,
|
|
571
|
-
quantity: item.quantity || 1,
|
|
572
|
-
item_price: item.price
|
|
573
|
-
})) || []
|
|
574
|
-
};
|
|
575
|
-
break;
|
|
576
|
-
case "purchase" /* PURCHASE */:
|
|
577
|
-
const purchaseEvent = event;
|
|
578
|
-
eventName = this.getEventName(adapterParams, "Purchase");
|
|
579
|
-
baseParams = {
|
|
580
|
-
content_type: purchaseEvent.content_type || "product",
|
|
581
|
-
content_ids: purchaseEvent.content_ids || [],
|
|
582
|
-
currency: purchaseEvent.currency || "INR",
|
|
583
|
-
value: purchaseEvent.value,
|
|
584
|
-
num_items: purchaseEvent.num_items || purchaseEvent.contents?.length || 0,
|
|
585
|
-
contents: purchaseEvent.contents || []
|
|
586
|
-
};
|
|
587
|
-
break;
|
|
588
|
-
default:
|
|
589
|
-
this.logger.warn(`Skipping unknown event type: ${event.type}`);
|
|
590
|
-
return { eventName: "", enhancedParams: {} };
|
|
591
|
-
}
|
|
592
|
-
const affiliateParams = this.enhanceWithAffiliateParams(baseParams);
|
|
593
|
-
const experimentParams = this.enhanceWithExperimentParams(affiliateParams);
|
|
594
|
-
const enhancedParams = this.mergeEventData(experimentParams, adapterParams);
|
|
595
|
-
return { eventName, enhancedParams };
|
|
596
|
-
}
|
|
597
|
-
};
|
|
396
|
+
// src/adapters/constants.ts
|
|
397
|
+
var SKIP_GOKWIK_EVENT = [
|
|
398
|
+
"initiate_checkout" /* INITIATE_CHECKOUT */,
|
|
399
|
+
"add_payment_info" /* ADD_PAYMENT_INFO */,
|
|
400
|
+
"purchase" /* PURCHASE */
|
|
401
|
+
];
|
|
598
402
|
|
|
599
403
|
// src/adapters/multi-pixel-adapter.ts
|
|
600
404
|
var MultiPixelAdapter = class extends BaseAdapter {
|
|
@@ -647,10 +451,20 @@ var MultiPixelAdapter = class extends BaseAdapter {
|
|
|
647
451
|
}
|
|
648
452
|
this.initialized = true;
|
|
649
453
|
}
|
|
454
|
+
shouldSkipEvent(eventType) {
|
|
455
|
+
const gokwikActive = this.getConfig("gokwikEnabled", false);
|
|
456
|
+
if (gokwikActive) {
|
|
457
|
+
return SKIP_GOKWIK_EVENT.includes(eventType);
|
|
458
|
+
}
|
|
459
|
+
return false;
|
|
460
|
+
}
|
|
650
461
|
/**
|
|
651
462
|
* Track an event across all configured pixels
|
|
652
463
|
*/
|
|
653
464
|
async trackEvent(event, adapterParams) {
|
|
465
|
+
if (this.shouldSkipEvent(event.type)) {
|
|
466
|
+
return;
|
|
467
|
+
}
|
|
654
468
|
if (!event.eventId) {
|
|
655
469
|
event.eventId = generateEventId(event.type);
|
|
656
470
|
}
|
|
@@ -864,12 +678,22 @@ var GoogleAdapter = class extends BaseAdapter {
|
|
|
864
678
|
}
|
|
865
679
|
this.initialized = true;
|
|
866
680
|
}
|
|
681
|
+
shouldSkipEvent(eventType) {
|
|
682
|
+
const gokwikActive = this.getConfig("gokwikEnabled", false);
|
|
683
|
+
if (gokwikActive) {
|
|
684
|
+
return SKIP_GOKWIK_EVENT.includes(eventType);
|
|
685
|
+
}
|
|
686
|
+
return false;
|
|
687
|
+
}
|
|
867
688
|
/**
|
|
868
689
|
* Track an event with Google Analytics
|
|
869
690
|
* @param event The event to track
|
|
870
691
|
* @param adapterParams Optional adapter-specific parameters
|
|
871
692
|
*/
|
|
872
693
|
async trackEvent(event, adapterParams) {
|
|
694
|
+
if (this.shouldSkipEvent(event.type)) {
|
|
695
|
+
return;
|
|
696
|
+
}
|
|
873
697
|
if (!event.eventId) {
|
|
874
698
|
event.eventId = generateEventId(event.type);
|
|
875
699
|
}
|
|
@@ -990,24 +814,6 @@ var GoogleAdapter = class extends BaseAdapter {
|
|
|
990
814
|
search_term: viewSearchResultsEvent.search_term
|
|
991
815
|
};
|
|
992
816
|
break;
|
|
993
|
-
case "checkout_started" /* CHECKOUT_STARTED */:
|
|
994
|
-
const checkoutStartedEvent = event;
|
|
995
|
-
eventName = this.getEventName(adapterParams, "begin_checkout");
|
|
996
|
-
baseParams = {
|
|
997
|
-
currency: checkoutStartedEvent.currency || "INR",
|
|
998
|
-
value: checkoutStartedEvent.cartValue,
|
|
999
|
-
items: checkoutStartedEvent.items?.map((item) => ({
|
|
1000
|
-
item_id: item.productId,
|
|
1001
|
-
item_name: item.productName,
|
|
1002
|
-
price: item.price,
|
|
1003
|
-
quantity: item.quantity,
|
|
1004
|
-
item_variant: item.variant
|
|
1005
|
-
})) || [],
|
|
1006
|
-
page_location: typeof window !== "undefined" ? window.location.href : "",
|
|
1007
|
-
page_referrer: typeof document !== "undefined" ? document.referrer : "",
|
|
1008
|
-
page_title: typeof document !== "undefined" ? document.title : ""
|
|
1009
|
-
};
|
|
1010
|
-
break;
|
|
1011
817
|
case "initiate_checkout" /* INITIATE_CHECKOUT */:
|
|
1012
818
|
const checkoutEvent = event;
|
|
1013
819
|
eventName = this.getEventName(adapterParams, "begin_checkout");
|
|
@@ -1027,7 +833,10 @@ var GoogleAdapter = class extends BaseAdapter {
|
|
|
1027
833
|
item_variant: item.item_variant,
|
|
1028
834
|
price: item.price,
|
|
1029
835
|
quantity: item.quantity
|
|
1030
|
-
})) || []
|
|
836
|
+
})) || [],
|
|
837
|
+
page_location: typeof window !== "undefined" ? window.location.href : "",
|
|
838
|
+
page_referrer: typeof document !== "undefined" ? document.referrer : "",
|
|
839
|
+
page_title: typeof document !== "undefined" ? document.title : ""
|
|
1031
840
|
};
|
|
1032
841
|
break;
|
|
1033
842
|
case "add_payment_info" /* ADD_PAYMENT_INFO */:
|
|
@@ -1046,22 +855,6 @@ var GoogleAdapter = class extends BaseAdapter {
|
|
|
1046
855
|
})) || []
|
|
1047
856
|
};
|
|
1048
857
|
break;
|
|
1049
|
-
case "checkout_completed" /* CHECKOUT_COMPLETED */:
|
|
1050
|
-
const checkoutCompletedEvent = event;
|
|
1051
|
-
eventName = this.getEventName(adapterParams, "purchase");
|
|
1052
|
-
baseParams = {
|
|
1053
|
-
transaction_id: checkoutCompletedEvent.orderId,
|
|
1054
|
-
currency: checkoutCompletedEvent.currency || "INR",
|
|
1055
|
-
value: checkoutCompletedEvent.cartValue,
|
|
1056
|
-
items: checkoutCompletedEvent.items?.map((item) => ({
|
|
1057
|
-
item_id: item.productId,
|
|
1058
|
-
item_name: item.productName,
|
|
1059
|
-
price: item.price,
|
|
1060
|
-
quantity: item.quantity,
|
|
1061
|
-
item_variant: item.variant
|
|
1062
|
-
})) || []
|
|
1063
|
-
};
|
|
1064
|
-
break;
|
|
1065
858
|
case "purchase" /* PURCHASE */:
|
|
1066
859
|
const purchaseEvent = event;
|
|
1067
860
|
eventName = this.getEventName(adapterParams, "purchase");
|
|
@@ -1120,7 +913,7 @@ var EventNames = {
|
|
|
1120
913
|
ADDED_TO_CART: "Added To Cart",
|
|
1121
914
|
REMOVED_FROM_CART: "Removed From Cart",
|
|
1122
915
|
// Checkout events
|
|
1123
|
-
|
|
916
|
+
CHECKOUT_INITIATED: "Checkout Started",
|
|
1124
917
|
PURCHASE_COMPLETED: "Purchase Completed",
|
|
1125
918
|
// Search events
|
|
1126
919
|
SEARCH: "Search",
|
|
@@ -1281,12 +1074,11 @@ var MoengageAdapter = class extends BaseAdapter {
|
|
|
1281
1074
|
total_value: removeCartEvent.price * removeCartEvent.quantity
|
|
1282
1075
|
};
|
|
1283
1076
|
break;
|
|
1284
|
-
case "checkout_started" /* CHECKOUT_STARTED */:
|
|
1285
1077
|
case "initiate_checkout" /* INITIATE_CHECKOUT */:
|
|
1286
1078
|
const checkoutStartedEvent = event;
|
|
1287
1079
|
eventName = this.getEventName(
|
|
1288
1080
|
adapterParams,
|
|
1289
|
-
EventNames.
|
|
1081
|
+
EventNames.CHECKOUT_INITIATED
|
|
1290
1082
|
);
|
|
1291
1083
|
baseParams = {
|
|
1292
1084
|
cart_value: checkoutStartedEvent.cartValue,
|
|
@@ -1301,7 +1093,6 @@ var MoengageAdapter = class extends BaseAdapter {
|
|
|
1301
1093
|
})) || []
|
|
1302
1094
|
};
|
|
1303
1095
|
break;
|
|
1304
|
-
case "checkout_completed" /* CHECKOUT_COMPLETED */:
|
|
1305
1096
|
case "purchase" /* PURCHASE */:
|
|
1306
1097
|
const checkoutCompletedEvent = event;
|
|
1307
1098
|
eventName = this.getEventName(
|
|
@@ -1507,25 +1298,6 @@ var PostHogAdapter = class extends BaseAdapter {
|
|
|
1507
1298
|
$quantity: cartEvent.quantity
|
|
1508
1299
|
};
|
|
1509
1300
|
break;
|
|
1510
|
-
case "checkout_started" /* CHECKOUT_STARTED */:
|
|
1511
|
-
const checkoutStartedEvent = event;
|
|
1512
|
-
eventName = this.getEventName(adapterParams, "checkout_started");
|
|
1513
|
-
baseParams = {
|
|
1514
|
-
currency: checkoutStartedEvent.currency || "INR",
|
|
1515
|
-
value: checkoutStartedEvent.cartValue,
|
|
1516
|
-
num_items: checkoutStartedEvent.itemCount || checkoutStartedEvent.items?.length || 0,
|
|
1517
|
-
items: checkoutStartedEvent.items?.map((item) => ({
|
|
1518
|
-
product_id: item.productId,
|
|
1519
|
-
product_name: item.productName,
|
|
1520
|
-
price: item.price,
|
|
1521
|
-
quantity: item.quantity || 1,
|
|
1522
|
-
variant: item.variant
|
|
1523
|
-
})) || [],
|
|
1524
|
-
// PostHog specific format
|
|
1525
|
-
$cart_value: checkoutStartedEvent.cartValue,
|
|
1526
|
-
$item_count: checkoutStartedEvent.itemCount || checkoutStartedEvent.items?.length || 0
|
|
1527
|
-
};
|
|
1528
|
-
break;
|
|
1529
1301
|
case "initiate_checkout" /* INITIATE_CHECKOUT */:
|
|
1530
1302
|
const checkoutEvent = event;
|
|
1531
1303
|
eventName = this.getEventName(adapterParams, "checkout_started");
|
|
@@ -1545,7 +1317,7 @@ var PostHogAdapter = class extends BaseAdapter {
|
|
|
1545
1317
|
$item_count: checkoutEvent.itemCount || checkoutEvent.items?.length || 0
|
|
1546
1318
|
};
|
|
1547
1319
|
break;
|
|
1548
|
-
case "
|
|
1320
|
+
case "purchase" /* PURCHASE */:
|
|
1549
1321
|
const checkoutCompletedEvent = event;
|
|
1550
1322
|
eventName = this.getEventName(adapterParams, "purchase");
|
|
1551
1323
|
baseParams = {
|
|
@@ -1567,20 +1339,6 @@ var PostHogAdapter = class extends BaseAdapter {
|
|
|
1567
1339
|
$order_items_count: checkoutCompletedEvent.itemCount || checkoutCompletedEvent.items?.length || 0
|
|
1568
1340
|
};
|
|
1569
1341
|
break;
|
|
1570
|
-
case "purchase" /* PURCHASE */:
|
|
1571
|
-
const purchaseEvent = event;
|
|
1572
|
-
eventName = this.getEventName(adapterParams, "purchase");
|
|
1573
|
-
baseParams = {
|
|
1574
|
-
currency: purchaseEvent.currency || "INR",
|
|
1575
|
-
value: purchaseEvent.value,
|
|
1576
|
-
num_items: purchaseEvent.num_items || purchaseEvent.contents?.length || 0,
|
|
1577
|
-
contents: purchaseEvent.contents || [],
|
|
1578
|
-
// PostHog specific format
|
|
1579
|
-
$order_value: purchaseEvent.value,
|
|
1580
|
-
$order_currency: purchaseEvent.currency || "INR",
|
|
1581
|
-
$order_items_count: purchaseEvent.num_items || purchaseEvent.contents?.length || 0
|
|
1582
|
-
};
|
|
1583
|
-
break;
|
|
1584
1342
|
default:
|
|
1585
1343
|
this.logger.warn(`Skipping unknown event type: ${event.type}`);
|
|
1586
1344
|
return { eventName: "", enhancedParams: {} };
|
|
@@ -1630,6 +1388,7 @@ var ShopifyAdapter = class extends BaseAdapter {
|
|
|
1630
1388
|
this.shopId = config.shopId;
|
|
1631
1389
|
this.domain = config.domain;
|
|
1632
1390
|
this.currency = config.currency || DEFAULT_CURRENCY2;
|
|
1391
|
+
this.merchantName = config.merchantName;
|
|
1633
1392
|
}
|
|
1634
1393
|
/**
|
|
1635
1394
|
* Initialize the Shopify Analytics adapter
|
|
@@ -1729,7 +1488,6 @@ var ShopifyAdapter = class extends BaseAdapter {
|
|
|
1729
1488
|
const addToCartPayload = this.mergeEventData(enhancedEvent, params);
|
|
1730
1489
|
this.trackAddToCart(addToCartPayload);
|
|
1731
1490
|
break;
|
|
1732
|
-
case "checkout_started" /* CHECKOUT_STARTED */:
|
|
1733
1491
|
case "initiate_checkout" /* INITIATE_CHECKOUT */:
|
|
1734
1492
|
const checkoutPayload = this.mergeEventData(
|
|
1735
1493
|
{ ...enhancedEvent, pageType: "checkout" },
|
|
@@ -1787,7 +1545,7 @@ var ShopifyAdapter = class extends BaseAdapter {
|
|
|
1787
1545
|
}
|
|
1788
1546
|
try {
|
|
1789
1547
|
const productGid = this.formatProductGid(event.productId);
|
|
1790
|
-
const cartKey = `merchant_${
|
|
1548
|
+
const cartKey = `merchant_${this.merchantName}_cartId`;
|
|
1791
1549
|
const cartId = localStorage.getItem(cartKey) || "";
|
|
1792
1550
|
if (!cartId) {
|
|
1793
1551
|
this.logger.warn("No cart ID found, creating anonymous session");
|
|
@@ -2114,7 +1872,7 @@ var KwikCheckoutAdapter = class extends BaseAdapter {
|
|
|
2114
1872
|
timestamp: event.timestamp || Date.now()
|
|
2115
1873
|
};
|
|
2116
1874
|
break;
|
|
2117
|
-
case "
|
|
1875
|
+
case "initiate_checkout" /* INITIATE_CHECKOUT */:
|
|
2118
1876
|
eventName = this.getEventName(adapterParams, "checkout_started");
|
|
2119
1877
|
baseParams = {
|
|
2120
1878
|
cart_value: event.cartValue,
|
|
@@ -2124,7 +1882,7 @@ var KwikCheckoutAdapter = class extends BaseAdapter {
|
|
|
2124
1882
|
timestamp: event.timestamp || Date.now()
|
|
2125
1883
|
};
|
|
2126
1884
|
break;
|
|
2127
|
-
case "
|
|
1885
|
+
case "purchase" /* PURCHASE */:
|
|
2128
1886
|
eventName = this.getEventName(adapterParams, "checkout_completed");
|
|
2129
1887
|
baseParams = {
|
|
2130
1888
|
order_id: event.orderId,
|
|
@@ -2186,7 +1944,6 @@ var KwikCheckoutAdapter = class extends BaseAdapter {
|
|
|
2186
1944
|
KwikPassAdapter,
|
|
2187
1945
|
MoengageAdapter,
|
|
2188
1946
|
MultiPixelAdapter,
|
|
2189
|
-
PixelAdapter,
|
|
2190
1947
|
PostHogAdapter,
|
|
2191
1948
|
ShopifyAdapter
|
|
2192
1949
|
});
|