shopkit-analytics 1.0.28 → 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.
Files changed (40) hide show
  1. package/README.md +1 -0
  2. package/dist/adapters/index.d.mts +1 -1
  3. package/dist/adapters/index.d.ts +1 -1
  4. package/dist/adapters/index.js +7 -220
  5. package/dist/adapters/index.js.map +1 -1
  6. package/dist/adapters/index.mjs +2 -4
  7. package/dist/affiliate/index.d.mts +2 -2
  8. package/dist/affiliate/index.d.ts +2 -2
  9. package/dist/{affiliate-tracker-BgHwibPv.d.mts → affiliate-tracker-B9nV3E9y.d.mts} +1 -1
  10. package/dist/{affiliate-tracker-BgHwibPv.d.ts → affiliate-tracker-B9nV3E9y.d.ts} +1 -1
  11. package/dist/{chunk-2MGNBM2B.mjs → chunk-FKXTDMY6.mjs} +11 -8
  12. package/dist/chunk-FKXTDMY6.mjs.map +1 -0
  13. package/dist/{chunk-ZH2JR3YQ.mjs → chunk-JGMSIY6U.mjs} +4 -216
  14. package/dist/chunk-JGMSIY6U.mjs.map +1 -0
  15. package/dist/{chunk-2YXPYXKI.mjs → chunk-UFDN3A6M.mjs} +6 -6
  16. package/dist/chunk-UFDN3A6M.mjs.map +1 -0
  17. package/dist/events/index.d.mts +1 -0
  18. package/dist/events/index.d.ts +1 -0
  19. package/dist/events/index.js +81 -37
  20. package/dist/events/index.js.map +1 -1
  21. package/dist/events/index.mjs +3 -3
  22. package/dist/{index-CLrdnmbT.d.mts → index-BgLdfy-M.d.mts} +3 -60
  23. package/dist/{index-Byk6ujDb.d.ts → index-C3YOamdo.d.ts} +3 -60
  24. package/dist/index.d.mts +190 -6
  25. package/dist/index.d.ts +190 -6
  26. package/dist/index.js +337 -233
  27. package/dist/index.js.map +1 -1
  28. package/dist/index.mjs +322 -13
  29. package/dist/index.mjs.map +1 -1
  30. package/dist/utils/index.js +5 -5
  31. package/dist/utils/index.js.map +1 -1
  32. package/dist/utils/index.mjs +1 -1
  33. package/package.json +9 -2
  34. package/templates/nextjs/api-events-multi-route.ts +224 -223
  35. package/templates/nextjs/api-events-route.ts +87 -110
  36. package/templates/nextjs/pages-api-events-multi.ts +231 -224
  37. package/templates/nextjs/pages-api-events.ts +96 -114
  38. package/dist/chunk-2MGNBM2B.mjs.map +0 -1
  39. package/dist/chunk-2YXPYXKI.mjs.map +0 -1
  40. package/dist/chunk-ZH2JR3YQ.mjs.map +0 -1
package/README.md CHANGED
@@ -369,6 +369,7 @@ FACEBOOK_MULTI_CAPI_ACCESS_TOKENS="token1,token2,token3"
369
369
  shopify: {
370
370
  shopId: "your-shop-id",
371
371
  domain: "your-shop.myshopify.com",
372
+ merchantName: "your-merchant-name",
372
373
  currency: "USD",
373
374
  },
374
375
  }}
@@ -1,4 +1,4 @@
1
- export { B as BaseAdapter, f as GoogleAdapter, G as GoogleAdapterConfig, k as KwikCheckoutAdapter, c as KwikCheckoutConfig, j as KwikPassAdapter, K as KwikPassConfig, g as MoengageAdapter, a as MoengageAdapterConfig, e as MultiPixelAdapter, M as MultiPixelAdapterConfig, d as PixelAdapter, P as PixelAdapterConfig, h as PostHogAdapter, b as PostHogAdapterConfig, i as ShopifyAdapter, S as ShopifyAdapterConfig } from '../index-CLrdnmbT.mjs';
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';
@@ -1,4 +1,4 @@
1
- export { B as BaseAdapter, f as GoogleAdapter, G as GoogleAdapterConfig, k as KwikCheckoutAdapter, c as KwikCheckoutConfig, j as KwikPassAdapter, K as KwikPassConfig, g as MoengageAdapter, a as MoengageAdapterConfig, e as MultiPixelAdapter, M as MultiPixelAdapterConfig, d as PixelAdapter, P as PixelAdapterConfig, h as PostHogAdapter, b as PostHogAdapterConfig, i as ShopifyAdapter, S as ShopifyAdapterConfig } from '../index-Byk6ujDb.js';
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';
@@ -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() {
@@ -401,218 +400,6 @@ var SKIP_GOKWIK_EVENT = [
401
400
  "purchase" /* PURCHASE */
402
401
  ];
403
402
 
404
- // src/adapters/pixel-adapter.ts
405
- var PixelAdapter = class extends BaseAdapter {
406
- constructor(config) {
407
- super(config);
408
- this.name = "FacebookPixel";
409
- this.initializeLogger();
410
- }
411
- /**
412
- * Initialize the Facebook Pixel
413
- */
414
- async initialize() {
415
- if (this.initialized) {
416
- return;
417
- }
418
- if (typeof window === "undefined") {
419
- return;
420
- }
421
- if (!window.fbq) {
422
- this.logger.warn(
423
- "Facebook Pixel fbq not found. Make sure the script is loaded."
424
- );
425
- return;
426
- } else {
427
- const pixelId = this.getConfig("pixelId");
428
- if (!pixelId) {
429
- this.logger.warn("Pixel ID not provided. Skipping fbq init.");
430
- }
431
- }
432
- this.initialized = true;
433
- }
434
- shouldSkipEvent(eventType) {
435
- const gokwikActive = this.getConfig("gokwikEnabled", false);
436
- if (gokwikActive) {
437
- return SKIP_GOKWIK_EVENT.includes(eventType);
438
- }
439
- return false;
440
- }
441
- /**
442
- * Track an event with Facebook Pixel
443
- * @param event The event to track
444
- * @param adapterParams Optional adapter-specific parameters
445
- */
446
- async trackEvent(event, adapterParams) {
447
- if (this.shouldSkipEvent(event.type)) {
448
- return;
449
- }
450
- if (!event.eventId) {
451
- event.eventId = generateEventId(event.type);
452
- }
453
- if (!event.timestamp) {
454
- event.timestamp = Date.now();
455
- }
456
- await this.trackClientSide(event, adapterParams);
457
- if (this.getConfig("enableCAPI", true)) {
458
- await this.trackServerSide(event, adapterParams);
459
- }
460
- }
461
- /**
462
- * Track event on client-side (browser pixel)
463
- */
464
- async trackClientSide(event, adapterParams) {
465
- if (!this.initialized || typeof window === "undefined" || !window.fbq) {
466
- this.logger.warn(
467
- "Cannot track client-side event, adapter not initialized or fbq not available",
468
- {
469
- eventType: event.type
470
- }
471
- );
472
- return;
473
- }
474
- const { eventName, enhancedParams } = this.formatEventPayload(
475
- event,
476
- adapterParams
477
- );
478
- if (!eventName) {
479
- return;
480
- }
481
- if (event.eventId) {
482
- window.fbq?.("track", eventName, enhancedParams, {
483
- eventID: event.eventId
484
- });
485
- } else {
486
- window.fbq?.("track", eventName, enhancedParams);
487
- }
488
- }
489
- /**
490
- * Track event on server-side (CAPI) as backup
491
- */
492
- async trackServerSide(event, adapterParams) {
493
- try {
494
- const { eventName, enhancedParams } = this.formatEventPayload(
495
- event,
496
- adapterParams
497
- );
498
- if (!eventName) {
499
- return;
500
- }
501
- const browserInfo = getBrowserInfo();
502
- const payload = {
503
- eventName,
504
- eventId: event.eventId,
505
- timestamp: event.timestamp,
506
- enhancedParams,
507
- userInfo: browserInfo
508
- };
509
- const response = await fetch("/api/events", {
510
- method: "POST",
511
- headers: {
512
- "Content-Type": "application/json"
513
- },
514
- body: JSON.stringify(payload)
515
- });
516
- if (!response.ok) {
517
- throw new Error(`Server-side tracking failed: ${response.status}`);
518
- }
519
- } catch (error) {
520
- this.logger.error(
521
- `FB Pixel: Server-side tracking failed for event ${event.type}: ${error instanceof Error ? error.message : String(error)}`
522
- );
523
- }
524
- }
525
- /**
526
- * Utility function to format event payload for both client and server-side tracking
527
- */
528
- formatEventPayload(event, adapterParams) {
529
- let baseParams = {};
530
- let eventName = "";
531
- switch (event.type) {
532
- case "page_view" /* PAGE_VIEW */:
533
- const pageViewEvent = event;
534
- eventName = this.getEventName(adapterParams, "PageView");
535
- baseParams = {
536
- // Facebook-compatible parameters
537
- content_name: pageViewEvent.page_title || pageViewEvent.title,
538
- content_category: pageViewEvent.event_category,
539
- // Custom parameters that Facebook will accept in custom_data
540
- page_location: pageViewEvent.page_location || pageViewEvent.path,
541
- page_title: pageViewEvent.page_title || pageViewEvent.title,
542
- page_referrer: pageViewEvent.page_referrer || pageViewEvent.referrer,
543
- page_path: pageViewEvent.page_path || pageViewEvent.path
544
- };
545
- break;
546
- case "view_content" /* VIEW_CONTENT */:
547
- const viewContentEvent = event;
548
- eventName = this.getEventName(adapterParams, "ViewContent");
549
- baseParams = {
550
- content_type: viewContentEvent.content_type || "product",
551
- content_ids: viewContentEvent.content_ids || [],
552
- content_name: viewContentEvent.content_name || "",
553
- content_category: viewContentEvent.content_category || "",
554
- value: viewContentEvent.value || 0,
555
- currency: viewContentEvent.currency || "INR"
556
- };
557
- break;
558
- case "add_to_cart" /* ADD_TO_CART */:
559
- const cartEvent = event;
560
- eventName = this.getEventName(adapterParams, "AddToCart");
561
- baseParams = {
562
- content_type: "product_group",
563
- content_ids: [cartEvent.productId],
564
- content_name: cartEvent.productName,
565
- value: cartEvent.price,
566
- currency: cartEvent.currency || "INR"
567
- };
568
- break;
569
- case "search" /* SEARCH */:
570
- const searchEvent = event;
571
- eventName = this.getEventName(adapterParams, "Search");
572
- baseParams = {
573
- search_string: searchEvent.searchTerm,
574
- content_category: "product",
575
- content_ids: searchEvent.content_ids || []
576
- };
577
- break;
578
- case "initiate_checkout" /* INITIATE_CHECKOUT */:
579
- const checkoutEvent = event;
580
- eventName = this.getEventName(adapterParams, "InitiateCheckout");
581
- baseParams = {
582
- content_type: "product",
583
- currency: checkoutEvent.currency || "INR",
584
- value: checkoutEvent.cartValue,
585
- num_items: checkoutEvent.itemCount || checkoutEvent.items?.length || 0,
586
- contents: checkoutEvent.items?.map((item) => ({
587
- id: item.productId,
588
- quantity: item.quantity || 1,
589
- item_price: item.price
590
- })) || []
591
- };
592
- break;
593
- case "purchase" /* PURCHASE */:
594
- const purchaseEvent = event;
595
- eventName = this.getEventName(adapterParams, "Purchase");
596
- baseParams = {
597
- content_type: purchaseEvent.content_type || "product",
598
- content_ids: purchaseEvent.content_ids || [],
599
- currency: purchaseEvent.currency || "INR",
600
- value: purchaseEvent.value,
601
- num_items: purchaseEvent.num_items || purchaseEvent.contents?.length || 0,
602
- contents: purchaseEvent.contents || []
603
- };
604
- break;
605
- default:
606
- this.logger.warn(`Skipping unknown event type: ${event.type}`);
607
- return { eventName: "", enhancedParams: {} };
608
- }
609
- const affiliateParams = this.enhanceWithAffiliateParams(baseParams);
610
- const experimentParams = this.enhanceWithExperimentParams(affiliateParams);
611
- const enhancedParams = this.mergeEventData(experimentParams, adapterParams);
612
- return { eventName, enhancedParams };
613
- }
614
- };
615
-
616
403
  // src/adapters/multi-pixel-adapter.ts
617
404
  var MultiPixelAdapter = class extends BaseAdapter {
618
405
  constructor(config) {
@@ -1601,6 +1388,7 @@ var ShopifyAdapter = class extends BaseAdapter {
1601
1388
  this.shopId = config.shopId;
1602
1389
  this.domain = config.domain;
1603
1390
  this.currency = config.currency || DEFAULT_CURRENCY2;
1391
+ this.merchantName = config.merchantName;
1604
1392
  }
1605
1393
  /**
1606
1394
  * Initialize the Shopify Analytics adapter
@@ -1757,7 +1545,7 @@ var ShopifyAdapter = class extends BaseAdapter {
1757
1545
  }
1758
1546
  try {
1759
1547
  const productGid = this.formatProductGid(event.productId);
1760
- const cartKey = `merchant_${process.env.NEXT_PUBLIC_MERCHANT_NAME}_cartId`;
1548
+ const cartKey = `merchant_${this.merchantName}_cartId`;
1761
1549
  const cartId = localStorage.getItem(cartKey) || "";
1762
1550
  if (!cartId) {
1763
1551
  this.logger.warn("No cart ID found, creating anonymous session");
@@ -2156,7 +1944,6 @@ var KwikCheckoutAdapter = class extends BaseAdapter {
2156
1944
  KwikPassAdapter,
2157
1945
  MoengageAdapter,
2158
1946
  MultiPixelAdapter,
2159
- PixelAdapter,
2160
1947
  PostHogAdapter,
2161
1948
  ShopifyAdapter
2162
1949
  });