shopkit-analytics 1.0.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 (51) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +769 -0
  3. package/dist/adapters/index.d.mts +4 -0
  4. package/dist/adapters/index.d.ts +4 -0
  5. package/dist/adapters/index.js +2405 -0
  6. package/dist/adapters/index.js.map +1 -0
  7. package/dist/adapters/index.mjs +23 -0
  8. package/dist/adapters/index.mjs.map +1 -0
  9. package/dist/affiliate/index.d.mts +138 -0
  10. package/dist/affiliate/index.d.ts +138 -0
  11. package/dist/affiliate/index.js +816 -0
  12. package/dist/affiliate/index.js.map +1 -0
  13. package/dist/affiliate/index.mjs +74 -0
  14. package/dist/affiliate/index.mjs.map +1 -0
  15. package/dist/affiliate-tracker-BgHwibPv.d.mts +144 -0
  16. package/dist/affiliate-tracker-BgHwibPv.d.ts +144 -0
  17. package/dist/chunk-3TQR5DOP.mjs +79 -0
  18. package/dist/chunk-3TQR5DOP.mjs.map +1 -0
  19. package/dist/chunk-4MZH5OLR.mjs +2375 -0
  20. package/dist/chunk-4MZH5OLR.mjs.map +1 -0
  21. package/dist/chunk-JVEGG6JV.mjs +213 -0
  22. package/dist/chunk-JVEGG6JV.mjs.map +1 -0
  23. package/dist/chunk-P4OJDCEZ.mjs +57 -0
  24. package/dist/chunk-P4OJDCEZ.mjs.map +1 -0
  25. package/dist/chunk-TNXTKEGS.mjs +758 -0
  26. package/dist/chunk-TNXTKEGS.mjs.map +1 -0
  27. package/dist/events/index.d.mts +112 -0
  28. package/dist/events/index.d.ts +112 -0
  29. package/dist/events/index.js +2131 -0
  30. package/dist/events/index.js.map +1 -0
  31. package/dist/events/index.mjs +30 -0
  32. package/dist/events/index.mjs.map +1 -0
  33. package/dist/index-BnNRgdUv.d.ts +676 -0
  34. package/dist/index-GODWc1s6.d.mts +676 -0
  35. package/dist/index.d.mts +38 -0
  36. package/dist/index.d.ts +38 -0
  37. package/dist/index.js +3269 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/index.mjs +190 -0
  40. package/dist/index.mjs.map +1 -0
  41. package/dist/subscriber-43gnCKWe.d.ts +80 -0
  42. package/dist/subscriber-IFZJU57V.mjs +8 -0
  43. package/dist/subscriber-IFZJU57V.mjs.map +1 -0
  44. package/dist/subscriber-sWesj_5p.d.mts +80 -0
  45. package/dist/types.d.mts +991 -0
  46. package/dist/types.d.ts +991 -0
  47. package/dist/types.js +102 -0
  48. package/dist/types.js.map +1 -0
  49. package/dist/types.mjs +8 -0
  50. package/dist/types.mjs.map +1 -0
  51. package/package.json +110 -0
@@ -0,0 +1,2375 @@
1
+ "use client";
2
+
3
+ // src/logger/index.ts
4
+ import pino from "pino";
5
+ var NoOpLogger = class _NoOpLogger {
6
+ trace() {
7
+ }
8
+ debug() {
9
+ }
10
+ info() {
11
+ }
12
+ warn() {
13
+ }
14
+ error() {
15
+ }
16
+ fatal() {
17
+ }
18
+ child() {
19
+ return new _NoOpLogger();
20
+ }
21
+ };
22
+ var PinoLogger = class _PinoLogger {
23
+ constructor(logger2) {
24
+ this.logger = logger2;
25
+ }
26
+ trace(message, ...args) {
27
+ this.logger.trace({ args }, message);
28
+ }
29
+ debug(message, ...args) {
30
+ this.logger.debug({ args }, message);
31
+ }
32
+ info(message, ...args) {
33
+ this.logger.info({ args }, message);
34
+ }
35
+ warn(message, ...args) {
36
+ this.logger.warn({ args }, message);
37
+ }
38
+ error(message, error, ...args) {
39
+ this.logger.error({ error, args }, message);
40
+ }
41
+ fatal(message, error, ...args) {
42
+ this.logger.fatal({ error, args }, message);
43
+ }
44
+ child(bindings) {
45
+ return new _PinoLogger(this.logger.child(bindings));
46
+ }
47
+ };
48
+ function createLogger(config = {}) {
49
+ const {
50
+ level = "info",
51
+ enabled = true,
52
+ name = "@shopkit/analytics",
53
+ prettyPrint = false,
54
+ redact = []
55
+ } = config;
56
+ if (!enabled) {
57
+ return new NoOpLogger();
58
+ }
59
+ const pinoConfig = {
60
+ name,
61
+ level,
62
+ redact,
63
+ browser: {
64
+ asObject: true,
65
+ serialize: true,
66
+ write: {
67
+ trace: (o) => console.trace(formatBrowserLog(o)),
68
+ debug: (o) => console.debug(formatBrowserLog(o)),
69
+ info: (o) => console.info(formatBrowserLog(o)),
70
+ warn: (o) => console.warn(formatBrowserLog(o)),
71
+ error: (o) => console.error(formatBrowserLog(o)),
72
+ fatal: (o) => console.error(formatBrowserLog(o))
73
+ }
74
+ }
75
+ };
76
+ if (prettyPrint && typeof window === "undefined") {
77
+ pinoConfig.transport = {
78
+ target: "pino-pretty",
79
+ options: {
80
+ colorize: true,
81
+ translateTime: "HH:MM:ss Z",
82
+ ignore: "pid,hostname"
83
+ }
84
+ };
85
+ }
86
+ const pinoLogger = pino(pinoConfig);
87
+ return new PinoLogger(pinoLogger);
88
+ }
89
+ function formatBrowserLog(logObj) {
90
+ const { level, time, msg, name, args, error, ...rest } = logObj;
91
+ let message = `[${name}] ${msg}`;
92
+ if (args && args.length > 0) {
93
+ message += ` ${args.map(
94
+ (arg) => typeof arg === "object" ? JSON.stringify(arg) : String(arg)
95
+ ).join(" ")}`;
96
+ }
97
+ if (error) {
98
+ message += ` Error: ${error.message}`;
99
+ if (error.stack) {
100
+ message += `
101
+ ${error.stack}`;
102
+ }
103
+ }
104
+ if (Object.keys(rest).length > 0) {
105
+ message += ` ${JSON.stringify(rest)}`;
106
+ }
107
+ return message;
108
+ }
109
+ var logger = createLogger({
110
+ enabled: true,
111
+ level: "info",
112
+ prettyPrint: false
113
+ });
114
+ function createAdapterLogger(adapterName, config = {}) {
115
+ const baseLogger = createLogger(config);
116
+ return baseLogger.child({ adapter: adapterName });
117
+ }
118
+
119
+ // src/adapters/base-adapter.ts
120
+ var BaseAdapter = class {
121
+ /**
122
+ * Constructor
123
+ * @param config Configuration for the adapter
124
+ */
125
+ constructor(config = {}) {
126
+ /**
127
+ * Whether the adapter has been initialized
128
+ */
129
+ this.initialized = false;
130
+ this.config = config;
131
+ const loggerConfig = {
132
+ enabled: config.enableDebugLogs ?? true,
133
+ level: config.logLevel ?? "info",
134
+ name: "@shopkit/analytics"
135
+ };
136
+ this.logger = createAdapterLogger("BaseAdapter", loggerConfig);
137
+ }
138
+ /**
139
+ * Initialize logger with proper adapter name
140
+ * Should be called by subclasses after name is available
141
+ */
142
+ initializeLogger() {
143
+ const loggerConfig = {
144
+ enabled: this.config.enableDebugLogs ?? true,
145
+ level: this.config.logLevel ?? "info",
146
+ name: "@shopkit/analytics"
147
+ };
148
+ this.logger = createAdapterLogger(this.name, loggerConfig);
149
+ }
150
+ /**
151
+ * Check if the adapter is enabled
152
+ */
153
+ isEnabled() {
154
+ return this.initialized;
155
+ }
156
+ /**
157
+ * Get a configuration value
158
+ * @param key The configuration key
159
+ * @param defaultValue The default value if the key is not found
160
+ */
161
+ getConfig(key, defaultValue) {
162
+ return key in this.config ? this.config[key] : defaultValue;
163
+ }
164
+ /**
165
+ * Get affiliate parameters from session storage or custom implementation
166
+ * Override this method to provide your own affiliate tracking implementation
167
+ * @returns Affiliate parameters or null if not available
168
+ */
169
+ getAffiliateParams() {
170
+ return null;
171
+ }
172
+ /**
173
+ * Enhance event parameters with affiliate data
174
+ * @param params The original parameters
175
+ * @returns Parameters enhanced with affiliate data
176
+ */
177
+ enhanceWithAffiliateParams(params) {
178
+ const affiliateParams = this.getAffiliateParams();
179
+ if (!affiliateParams) return params;
180
+ return {
181
+ ...params,
182
+ // Add affiliate parameters
183
+ ...affiliateParams
184
+ };
185
+ }
186
+ };
187
+
188
+ // src/adapters/pixel-adapter.ts
189
+ var PixelAdapter = class extends BaseAdapter {
190
+ constructor(config) {
191
+ super(config);
192
+ this.name = "FacebookPixel";
193
+ this.initializeLogger();
194
+ }
195
+ /**
196
+ * Initialize the Facebook Pixel
197
+ */
198
+ async initialize() {
199
+ if (this.initialized) {
200
+ this.logger.debug("Already initialized");
201
+ return;
202
+ }
203
+ if (typeof window === "undefined") {
204
+ this.logger.debug("Skipping initialization on server");
205
+ return;
206
+ }
207
+ if (!window.fbq) {
208
+ this.logger.warn(
209
+ "Facebook Pixel fbq not found. Make sure the script is loaded."
210
+ );
211
+ return;
212
+ }
213
+ const pixelId = this.getConfig("pixelId");
214
+ this.logger.info("Successfully initialized", { pixelId: "***" });
215
+ this.initialized = true;
216
+ }
217
+ /**
218
+ * Track an event with Facebook Pixel
219
+ * @param event The event to track
220
+ */
221
+ async trackEvent(event) {
222
+ if (!this.initialized || typeof window === "undefined" || !window.fbq) {
223
+ this.logger.warn(
224
+ "Cannot track event, adapter not initialized or fbq not available",
225
+ {
226
+ eventType: event.type,
227
+ initialized: this.initialized,
228
+ hasWindow: typeof window !== "undefined",
229
+ hasFbq: !!window?.fbq
230
+ }
231
+ );
232
+ return;
233
+ }
234
+ this.logger.debug("Tracking event", { eventType: event.type });
235
+ switch (event.type) {
236
+ case "page_view" /* PAGE_VIEW */:
237
+ this.trackPageView(event);
238
+ break;
239
+ case "view_content" /* VIEW_CONTENT */:
240
+ this.trackViewContent(event);
241
+ break;
242
+ case "product_view" /* PRODUCT_VIEW */:
243
+ this.trackProductView(event);
244
+ break;
245
+ case "add_to_cart" /* ADD_TO_CART */:
246
+ this.trackAddToCart(event);
247
+ break;
248
+ case "checkout_started" /* CHECKOUT_STARTED */:
249
+ this.trackCheckoutStarted(event);
250
+ break;
251
+ case "checkout_completed" /* CHECKOUT_COMPLETED */:
252
+ this.trackCheckoutCompleted(event);
253
+ break;
254
+ case "purchase" /* PURCHASE */:
255
+ this.trackPurchase(event);
256
+ break;
257
+ case "add_payment_info" /* ADD_PAYMENT_INFO */:
258
+ this.trackAddPaymentInfo(event);
259
+ break;
260
+ case "search" /* SEARCH */:
261
+ this.trackSearch(event);
262
+ break;
263
+ default:
264
+ this.logger.debug("Unhandled event type", { eventType: event.type });
265
+ break;
266
+ }
267
+ }
268
+ /**
269
+ * Track a page view event
270
+ * @param event The page view event
271
+ */
272
+ trackPageView(event) {
273
+ const params = this.enhanceWithAffiliateParams({});
274
+ window.fbq?.("track", "PageView", params);
275
+ this.logger.debug("PageView event tracked", { params });
276
+ }
277
+ /**
278
+ * Track a product view event
279
+ * @param event The product view event
280
+ */
281
+ trackProductView(event) {
282
+ const params = {
283
+ content_type: "product_group",
284
+ content_ids: [event.productId],
285
+ content_name: event.productName,
286
+ content_category: event.category,
287
+ value: event.price,
288
+ currency: event.currency || "INR"
289
+ };
290
+ window.fbq?.(
291
+ "track",
292
+ "ViewContent",
293
+ this.enhanceWithAffiliateParams(params)
294
+ );
295
+ }
296
+ /**
297
+ * Track an add to cart event
298
+ * @param event The add to cart event
299
+ */
300
+ trackAddToCart(event) {
301
+ const params = {
302
+ content_type: "product_group",
303
+ content_ids: [event.productId],
304
+ content_name: event.productName,
305
+ value: event.price,
306
+ currency: event.currency || "INR"
307
+ };
308
+ const enhancedParams = this.enhanceWithAffiliateParams(params);
309
+ window.fbq?.("track", "AddToCart", enhancedParams);
310
+ this.logger.debug("AddToCart event tracked", { params: enhancedParams });
311
+ }
312
+ /**
313
+ * Track a checkout started event
314
+ * @param event The checkout started event
315
+ */
316
+ trackCheckoutStarted(event) {
317
+ const params = {
318
+ content_ids: event.items.map((item) => item.productId),
319
+ content_type: "product_group",
320
+ value: event.cartValue,
321
+ currency: event.currency || "INR",
322
+ num_items: event.itemCount,
323
+ contents: event.items.map((item) => ({
324
+ id: item.productId,
325
+ quantity: item.quantity,
326
+ item_price: item.price
327
+ }))
328
+ };
329
+ window.fbq?.(
330
+ "track",
331
+ "InitiateCheckout",
332
+ this.enhanceWithAffiliateParams(params)
333
+ );
334
+ }
335
+ /**
336
+ * Track a checkout completed event
337
+ * @param event The checkout completed event
338
+ */
339
+ trackCheckoutCompleted(event) {
340
+ const params = {
341
+ value: event.cartValue,
342
+ currency: event.currency || "INR",
343
+ content_type: "product_group",
344
+ content_ids: event.items.map((item) => item.productId),
345
+ num_items: event.itemCount,
346
+ contents: event.items.map((item) => ({
347
+ id: item.productId,
348
+ quantity: item.quantity,
349
+ item_price: item.price
350
+ }))
351
+ };
352
+ window.fbq?.("track", "Purchase", this.enhanceWithAffiliateParams(params));
353
+ }
354
+ /**
355
+ * Track a search event
356
+ * @param event The search event
357
+ */
358
+ trackSearch(event) {
359
+ const params = {
360
+ search_string: event.searchTerm,
361
+ content_category: "product",
362
+ content_ids: event.content_ids || []
363
+ };
364
+ window.fbq?.("track", "Search", this.enhanceWithAffiliateParams(params));
365
+ }
366
+ /**
367
+ * Track an add payment info event
368
+ * @param event The add payment info event
369
+ */
370
+ trackAddPaymentInfo(event) {
371
+ const params = {
372
+ value: event.cartValue,
373
+ currency: event.currency || "INR",
374
+ content_type: "product_group",
375
+ content_ids: event.items.map((item) => item.productId),
376
+ contents: event.items.map((item) => ({
377
+ id: item.productId,
378
+ quantity: item.quantity,
379
+ item_price: item.price
380
+ })),
381
+ payment_type: event.paymentType || ""
382
+ };
383
+ window.fbq?.(
384
+ "track",
385
+ "AddPaymentInfo",
386
+ this.enhanceWithAffiliateParams(params)
387
+ );
388
+ }
389
+ /**
390
+ * Track a view content event
391
+ * @param event The view content event
392
+ */
393
+ trackViewContent(event) {
394
+ const params = {
395
+ content_type: event.content_type || "product",
396
+ content_ids: event.content_ids || [],
397
+ content_name: event.content_name || "",
398
+ content_category: event.content_category || "",
399
+ value: event.value || 0,
400
+ currency: event.currency || "INR"
401
+ };
402
+ window.fbq?.(
403
+ "track",
404
+ "ViewContent",
405
+ this.enhanceWithAffiliateParams(params)
406
+ );
407
+ }
408
+ /**
409
+ * Track a purchase event
410
+ * @param event The purchase event
411
+ */
412
+ trackPurchase(event) {
413
+ const params = {
414
+ value: event.value,
415
+ currency: event.currency || "INR",
416
+ content_type: event.content_type || "product_group",
417
+ content_ids: event.content_ids || [],
418
+ num_items: event.num_items || 1,
419
+ contents: event.contents || []
420
+ };
421
+ window.fbq?.("track", "Purchase", this.enhanceWithAffiliateParams(params));
422
+ }
423
+ /**
424
+ * Convert an event to Facebook Pixel parameters
425
+ * @param event The event to convert
426
+ */
427
+ eventToParams(event) {
428
+ const { type, timestamp, ...params } = event;
429
+ return this.enhanceWithAffiliateParams(params);
430
+ }
431
+ };
432
+
433
+ // src/adapters/google-adapter.ts
434
+ var GoogleAdapter = class extends BaseAdapter {
435
+ constructor(config) {
436
+ super(config);
437
+ this.name = "GoogleAnalytics";
438
+ this.initializeLogger();
439
+ }
440
+ /**
441
+ * Initialize Google Analytics adapter
442
+ * This just checks if gtag is available
443
+ */
444
+ isEnabled() {
445
+ const enabled = this.initialized && typeof window !== "undefined" && !!window.gtag;
446
+ this.logger.debug("Checking if enabled", {
447
+ initialized: this.initialized,
448
+ hasWindow: typeof window !== "undefined",
449
+ hasGtag: !!window?.gtag,
450
+ enabled
451
+ });
452
+ return enabled;
453
+ }
454
+ async initialize() {
455
+ this.logger.info("Starting initialization");
456
+ if (this.initialized) {
457
+ this.logger.debug("Already initialized");
458
+ return;
459
+ }
460
+ if (typeof window === "undefined") {
461
+ this.logger.debug("Skipping initialization on server");
462
+ return;
463
+ }
464
+ const measurementId = this.getConfig("measurementId");
465
+ this.logger.info("Using measurement ID", { measurementId });
466
+ if (!window.gtag) {
467
+ this.logger.warn(
468
+ "Google Analytics gtag not found. Make sure the script is loaded."
469
+ );
470
+ return;
471
+ }
472
+ this.initialized = true;
473
+ this.logger.info("Successfully initialized", { measurementId });
474
+ }
475
+ /**
476
+ * Track an event with Google Analytics
477
+ * @param event The event to track
478
+ */
479
+ async trackEvent(event) {
480
+ this.logger.debug("Attempting to track event", {
481
+ initialized: this.initialized,
482
+ hasWindow: typeof window !== "undefined",
483
+ hasGtag: !!window?.gtag,
484
+ eventType: event.type
485
+ });
486
+ if (!this.initialized || typeof window === "undefined" || !window.gtag) {
487
+ this.logger.warn(
488
+ "Cannot track event, adapter not initialized or gtag not available",
489
+ {
490
+ eventType: event.type,
491
+ initialized: this.initialized,
492
+ hasWindow: typeof window !== "undefined",
493
+ hasGtag: !!window?.gtag
494
+ }
495
+ );
496
+ return;
497
+ }
498
+ const measurementId = this.getConfig("measurementId");
499
+ this.logger.info("Tracking event", {
500
+ eventType: event.type,
501
+ measurementId
502
+ });
503
+ switch (event.type) {
504
+ case "page_view" /* PAGE_VIEW */:
505
+ this.trackPageView(event, measurementId);
506
+ break;
507
+ case "user_engagement" /* USER_ENGAGEMENT */:
508
+ this.trackUserEngagement();
509
+ break;
510
+ case "session_start" /* SESSION_START */:
511
+ this.trackSessionStart();
512
+ break;
513
+ case "first_visit" /* FIRST_VISIT */:
514
+ this.trackFirstVisit();
515
+ break;
516
+ case "view_item" /* VIEW_ITEM */:
517
+ this.trackViewItem(event);
518
+ break;
519
+ case "viewed_product" /* VIEWED_PRODUCT */:
520
+ this.trackViewedProduct(event);
521
+ break;
522
+ case "checkout_payment" /* CHECKOUT_PAYMENT */:
523
+ this.trackCheckoutPayment(event);
524
+ break;
525
+ case "scroll" /* SCROLL */:
526
+ this.trackScroll();
527
+ break;
528
+ case "add_to_cart" /* ADD_TO_CART */:
529
+ case "shopify_add_to_cart" /* SHOPIFY_ADD_TO_CART */:
530
+ this.trackAddToCart(event);
531
+ break;
532
+ case "form_start" /* FORM_START */:
533
+ this.trackFormStart();
534
+ break;
535
+ case "checkout_started" /* CHECKOUT_STARTED */:
536
+ this.trackCheckoutStarted(event);
537
+ break;
538
+ case "form_submission" /* FORM_SUBMISSION */:
539
+ this.trackFormSubmission(event);
540
+ break;
541
+ case "search" /* SEARCH */:
542
+ this.trackSearch(event);
543
+ break;
544
+ case "checkout_completed" /* CHECKOUT_COMPLETED */:
545
+ this.trackCheckoutCompleted(event);
546
+ break;
547
+ case "add_payment_info" /* ADD_PAYMENT_INFO */:
548
+ this.trackAddPaymentInfo(event);
549
+ break;
550
+ case "view_content" /* VIEW_CONTENT */:
551
+ this.trackViewContent(event);
552
+ break;
553
+ case "purchase" /* PURCHASE */:
554
+ this.trackPurchase(event);
555
+ break;
556
+ case "view_search_results" /* VIEW_SEARCH_RESULTS */:
557
+ this.trackViewSearchResults(event);
558
+ break;
559
+ case "order_placed" /* ORDER_PLACED */:
560
+ this.trackOrderPlaced(event);
561
+ break;
562
+ case "begin_checkout" /* BEGIN_CHECKOUT */:
563
+ this.trackBeginCheckout(event);
564
+ break;
565
+ case "custom" /* CUSTOM */:
566
+ this.trackCustomEvent(event);
567
+ break;
568
+ default: {
569
+ const params = this.eventToParams(event);
570
+ window.gtag(
571
+ "event",
572
+ event.type,
573
+ this.enhanceWithAffiliateParams(params)
574
+ );
575
+ break;
576
+ }
577
+ }
578
+ }
579
+ /**
580
+ * Track a page view event
581
+ * @param event The page view event
582
+ * @param measurementId The Google Analytics measurement ID
583
+ */
584
+ trackPageView(event, measurementId) {
585
+ const params = {
586
+ page_path: event.path,
587
+ page_title: event.title || document.title,
588
+ page_location: event.page_location || window.location.href,
589
+ page_referrer: event.page_referrer || document.referrer || void 0,
590
+ ga_session_id: event.ga_session_id || "",
591
+ ga_session_number: event.ga_session_number || "",
592
+ gclid: event.gclid || "",
593
+ engagement_time_msec: event.engagement_time_msec,
594
+ campaign: event.campaign || "",
595
+ campaign_id: event.campaign_id || "",
596
+ content: event.content || "",
597
+ debug_mode: event.debug_mode,
598
+ medium: event.medium || "",
599
+ source: event.page_source || "",
600
+ page_term: event.page_term || "",
601
+ ignore_referrer: event.ignore_referrer,
602
+ batch_ordering_id: event.batch_ordering_id || "",
603
+ batch_page_id: event.batch_page_id || "",
604
+ user_id: event.user_id,
605
+ user_properties: event.user_properties,
606
+ session_engaged: event.session_engaged
607
+ };
608
+ window.gtag?.(
609
+ "event",
610
+ "page_view",
611
+ this.enhanceWithAffiliateParams(params)
612
+ );
613
+ }
614
+ trackUserEngagement() {
615
+ const params = {
616
+ batch_ordering_id: "",
617
+ batch_page_id: "",
618
+ campaign: "",
619
+ ga_session_id: "",
620
+ ga_session_number: "",
621
+ gclid: "",
622
+ ignore_referrer: "",
623
+ medium: "",
624
+ page_location: window.location.href,
625
+ page_path: window.location.pathname,
626
+ page_referrer: document.referrer,
627
+ page_title: document.title,
628
+ source: "",
629
+ srsltid: "",
630
+ term: ""
631
+ };
632
+ window.gtag?.(
633
+ "event",
634
+ "user_engagement",
635
+ this.enhanceWithAffiliateParams(params)
636
+ );
637
+ }
638
+ trackSessionStart() {
639
+ const params = {
640
+ batch_ordering_id: "",
641
+ batch_page_id: "",
642
+ campaign: "",
643
+ campaign_id: "",
644
+ content: "",
645
+ ga_session_id: "",
646
+ ga_session_number: "",
647
+ gclid: "",
648
+ ignore_referrer: "",
649
+ medium: "",
650
+ page_location: window.location.href,
651
+ page_path: window.location.pathname,
652
+ page_referrer: document.referrer,
653
+ page_title: document.title,
654
+ source: "",
655
+ srsltid: "",
656
+ term: ""
657
+ };
658
+ window.gtag?.(
659
+ "event",
660
+ "session_start",
661
+ this.enhanceWithAffiliateParams(params)
662
+ );
663
+ }
664
+ trackFirstVisit() {
665
+ const params = {
666
+ batch_ordering_id: "",
667
+ batch_page_id: "",
668
+ campaign: "",
669
+ campaign_id: "",
670
+ content: "",
671
+ debug_mode: "",
672
+ engagement_time_msec: 0,
673
+ entrances: 1,
674
+ ga_session_id: "",
675
+ ga_session_number: "",
676
+ gclid: "",
677
+ ignore_referrer: "",
678
+ medium: "",
679
+ page_location: window.location.href,
680
+ page_path: window.location.pathname,
681
+ page_referrer: document.referrer,
682
+ page_title: document.title,
683
+ page_source: "",
684
+ page_term: ""
685
+ };
686
+ window.gtag?.(
687
+ "event",
688
+ "first_visit",
689
+ this.enhanceWithAffiliateParams(params)
690
+ );
691
+ }
692
+ trackViewItem(event) {
693
+ window.gtag?.(
694
+ "event",
695
+ "view_item",
696
+ this.enhanceWithAffiliateParams({
697
+ currency: event.currency,
698
+ value: event.value,
699
+ items: event.items
700
+ })
701
+ );
702
+ }
703
+ trackScroll() {
704
+ const params = {
705
+ batch_ordering_id: "",
706
+ batch_page_id: "",
707
+ engagement_time_msec: void 0,
708
+ ga_session_id: "",
709
+ ga_session_number: "",
710
+ ignore_referrer: void 0,
711
+ page_location: window.location.href,
712
+ page_path: window.location.pathname,
713
+ page_referrer: document.referrer,
714
+ page_title: document.title,
715
+ percent_scrolled: 90
716
+ // or dynamically captured
717
+ };
718
+ window.gtag?.("event", "scroll", this.enhanceWithAffiliateParams(params));
719
+ }
720
+ trackCheckoutPayment(event) {
721
+ window.gtag?.(
722
+ "event",
723
+ "checkout_payment",
724
+ this.enhanceWithAffiliateParams({
725
+ currency: event.currency,
726
+ value: event.cartValue,
727
+ items: event.items.map((item) => ({
728
+ item_id: item.productId,
729
+ item_name: item.productName,
730
+ price: item.price,
731
+ quantity: item.quantity
732
+ }))
733
+ })
734
+ );
735
+ }
736
+ trackViewedProduct(event) {
737
+ window.gtag?.(
738
+ "event",
739
+ "viewed_product",
740
+ this.enhanceWithAffiliateParams({
741
+ currency: event.currency,
742
+ value: event.price,
743
+ items: [
744
+ {
745
+ item_id: event.productId,
746
+ item_name: event.productName,
747
+ price: event.price,
748
+ currency: event.currency
749
+ }
750
+ ],
751
+ view_duration: event.viewDuration
752
+ })
753
+ );
754
+ }
755
+ trackAddToCart(event) {
756
+ this.logger.debug("Processing add_to_cart event", { event });
757
+ const params = {
758
+ currency: event.currency || "INR",
759
+ value: event.price * (event.quantity || 1),
760
+ // Calculate total value
761
+ items: [
762
+ {
763
+ item_id: event.productId,
764
+ item_name: event.productName,
765
+ price: event.price,
766
+ quantity: event.quantity || 1,
767
+ item_variant: event.variant
768
+ }
769
+ ],
770
+ // GA4-specific parameters
771
+ batch_ordering_id: event.batch_ordering_id || "",
772
+ batch_page_id: event.batch_page_id || "",
773
+ campaign: event.campaign || "",
774
+ ga_session_id: event.ga_session_id || "",
775
+ engagement_time_msec: event.engagement_time_msec,
776
+ session_engaged: event.session_engaged,
777
+ page_title: event.page_title || document.title,
778
+ page_location: event.page_location || window.location.href,
779
+ page_referrer: event.page_referrer || document.referrer,
780
+ user_id: event.user_id,
781
+ user_properties: event.user_properties
782
+ };
783
+ const enhancedParams = this.enhanceWithAffiliateParams(params);
784
+ this.logger.debug("Sending add_to_cart event to gtag", {
785
+ params: enhancedParams
786
+ });
787
+ window.gtag?.("event", "add_to_cart", enhancedParams);
788
+ }
789
+ trackFormStart() {
790
+ const params = {
791
+ batch_ordering_id: "",
792
+ batch_page_id: "",
793
+ engagement_time_msec: void 0,
794
+ first_field_id: "",
795
+ first_field_name: "",
796
+ first_field_position: "",
797
+ first_field_type: "",
798
+ form_destination: "",
799
+ form_length: "",
800
+ form_id: "",
801
+ ga_session_id: "",
802
+ ga_session_number: "",
803
+ ignore_referrer: void 0,
804
+ page_location: window.location.href,
805
+ page_referrer: document.referrer,
806
+ page_title: document.title
807
+ };
808
+ window.gtag?.(
809
+ "event",
810
+ "form_start",
811
+ this.enhanceWithAffiliateParams(params)
812
+ );
813
+ }
814
+ trackCheckoutStarted(event) {
815
+ const params = {
816
+ batch_ordering_id: "",
817
+ batch_page_id: "",
818
+ currency: event.currency || "INR",
819
+ ecomm_pagetype: "",
820
+ ecomm_prodid: "",
821
+ ecomm_totalvalue: event.cartValue,
822
+ value: event.cartValue,
823
+ engagement_time_msec: void 0,
824
+ ga_session_id: "",
825
+ ga_session_number: "",
826
+ ignore_referrer: void 0,
827
+ page_location: window.location.href,
828
+ page_referrer: document.referrer,
829
+ page_title: document.title,
830
+ items: event.items.map((item) => ({
831
+ item_id: item.productId,
832
+ item_name: item.productName,
833
+ price: item.price,
834
+ quantity: item.quantity,
835
+ item_variant: item.variant
836
+ }))
837
+ };
838
+ window.gtag?.(
839
+ "event",
840
+ "begin_checkout",
841
+ this.enhanceWithAffiliateParams(params)
842
+ );
843
+ }
844
+ trackFormSubmission(event) {
845
+ const params = {
846
+ batch_ordering_id: "",
847
+ batch_page_id: "",
848
+ engagement_time_msec: void 0,
849
+ form_destination: "",
850
+ form_length: "",
851
+ form_id: event.formId,
852
+ ga_session_id: "",
853
+ ga_session_number: "",
854
+ ignore_referrer: void 0,
855
+ page_location: window.location.href,
856
+ page_referrer: document.referrer,
857
+ page_title: document.title
858
+ };
859
+ window.gtag?.(
860
+ "event",
861
+ "form_submit",
862
+ this.enhanceWithAffiliateParams(params)
863
+ );
864
+ }
865
+ trackSearch(event) {
866
+ const params = {
867
+ batch_ordering_id: "",
868
+ batch_page_id: "",
869
+ engagement_time_msec: void 0,
870
+ ga_session_id: "",
871
+ ga_session_number: "",
872
+ ignore_referrer: void 0,
873
+ page_location: window.location.href,
874
+ page_referrer: document.referrer,
875
+ page_title: document.title,
876
+ search_term: event.searchTerm
877
+ };
878
+ window.gtag?.("event", "search", this.enhanceWithAffiliateParams(params));
879
+ }
880
+ /**
881
+ * Track a checkout completed event
882
+ * @param event The checkout completed event
883
+ */
884
+ trackCheckoutCompleted(event) {
885
+ const params = {
886
+ transaction_id: event.orderId,
887
+ currency: event.currency || "INR",
888
+ value: event.cartValue,
889
+ items: event.items.map((item) => ({
890
+ item_id: item.productId,
891
+ item_name: item.productName,
892
+ price: item.price,
893
+ quantity: item.quantity,
894
+ item_variant: item.variant
895
+ }))
896
+ };
897
+ window.gtag?.("event", "purchase", this.enhanceWithAffiliateParams(params));
898
+ }
899
+ /**
900
+ * Track a custom event
901
+ * @param event The custom event
902
+ */
903
+ trackCustomEvent(event) {
904
+ const params = event.properties || {};
905
+ window.gtag?.("event", event.name, this.enhanceWithAffiliateParams(params));
906
+ }
907
+ /**
908
+ * Track an add payment info event
909
+ * @param event The add payment info event
910
+ */
911
+ trackAddPaymentInfo(event) {
912
+ const params = {
913
+ currency: event.currency || "INR",
914
+ value: event.cartValue,
915
+ payment_type: event.paymentType || "",
916
+ items: event.items.map((item) => ({
917
+ item_id: item.productId,
918
+ item_name: item.productName,
919
+ price: item.price,
920
+ quantity: item.quantity,
921
+ item_variant: item.variant
922
+ }))
923
+ };
924
+ window.gtag?.(
925
+ "event",
926
+ "add_payment_info",
927
+ this.enhanceWithAffiliateParams(params)
928
+ );
929
+ }
930
+ /**
931
+ * Track a view content event
932
+ * @param event The view content event
933
+ */
934
+ trackViewContent(event) {
935
+ const params = {
936
+ currency: event.currency || "USD",
937
+ value: event.value || 0,
938
+ items: event.items?.map((item) => ({
939
+ item_id: item.item_id,
940
+ item_name: item.item_name,
941
+ item_category: item.item_category,
942
+ item_category2: item.item_category2,
943
+ item_category3: item.item_category3,
944
+ item_category4: item.item_category4,
945
+ item_category5: item.item_category5,
946
+ item_brand: item.item_brand,
947
+ item_variant: item.item_variant,
948
+ price: item.price,
949
+ quantity: item.quantity
950
+ })) || [],
951
+ // GA4-specific parameters
952
+ batch_ordering_id: event.batch_ordering_id || "",
953
+ batch_page_id: event.batch_page_id || "",
954
+ campaign: event.campaign || "",
955
+ ga_session_id: event.ga_session_id || "",
956
+ engagement_time_msec: event.engagement_time_msec,
957
+ session_engaged: event.session_engaged,
958
+ page_title: event.page_title || document.title,
959
+ page_location: event.page_location || window.location.href,
960
+ page_referrer: event.page_referrer || document.referrer,
961
+ user_id: event.user_id,
962
+ user_properties: event.user_properties
963
+ };
964
+ window.gtag?.(
965
+ "event",
966
+ "view_item",
967
+ this.enhanceWithAffiliateParams(params)
968
+ );
969
+ }
970
+ /**
971
+ * Track a purchase event
972
+ * @param event The purchase event
973
+ */
974
+ trackPurchase(event) {
975
+ const params = {
976
+ transaction_id: event.transaction_id,
977
+ value: event.value,
978
+ currency: event.currency || "USD",
979
+ coupon: event.coupon,
980
+ shipping: event.shipping,
981
+ tax: event.tax,
982
+ items: event.items?.map((item) => ({
983
+ item_id: item.item_id,
984
+ item_name: item.item_name,
985
+ item_category: item.item_category,
986
+ item_category2: item.item_category2,
987
+ item_category3: item.item_category3,
988
+ item_category4: item.item_category4,
989
+ item_category5: item.item_category5,
990
+ item_brand: item.item_brand,
991
+ item_variant: item.item_variant,
992
+ price: item.price,
993
+ quantity: item.quantity
994
+ })) || [],
995
+ // GA4-specific parameters
996
+ batch_ordering_id: event.batch_ordering_id || "",
997
+ batch_page_id: event.batch_page_id || "",
998
+ campaign: event.campaign || "",
999
+ ga_session_id: event.ga_session_id || "",
1000
+ engagement_time_msec: event.engagement_time_msec,
1001
+ session_engaged: event.session_engaged,
1002
+ page_title: event.page_title || document.title,
1003
+ page_location: event.page_location || window.location.href,
1004
+ page_referrer: event.page_referrer || document.referrer,
1005
+ user_id: event.user_id,
1006
+ user_properties: event.user_properties
1007
+ };
1008
+ window.gtag?.("event", "purchase", this.enhanceWithAffiliateParams(params));
1009
+ }
1010
+ /**
1011
+ * Track a view search results event
1012
+ * @param event The view search results event
1013
+ */
1014
+ trackViewSearchResults(event) {
1015
+ const params = {
1016
+ search_term: event.search_term,
1017
+ // GA4-specific parameters
1018
+ batch_ordering_id: event.batch_ordering_id || "",
1019
+ batch_page_id: event.batch_page_id || "",
1020
+ campaign: event.campaign || "",
1021
+ ga_session_id: event.ga_session_id || "",
1022
+ engagement_time_msec: event.engagement_time_msec,
1023
+ session_engaged: event.session_engaged,
1024
+ page_title: event.page_title || document.title,
1025
+ page_location: event.page_location || window.location.href,
1026
+ page_referrer: event.page_referrer || document.referrer,
1027
+ user_id: event.user_id,
1028
+ user_properties: event.user_properties
1029
+ };
1030
+ window.gtag?.(
1031
+ "event",
1032
+ "view_search_results",
1033
+ this.enhanceWithAffiliateParams(params)
1034
+ );
1035
+ }
1036
+ /**
1037
+ * Track an order placed event
1038
+ * @param event The order placed event
1039
+ */
1040
+ trackOrderPlaced(event) {
1041
+ const params = {
1042
+ transaction_id: event.order_id,
1043
+ value: event.total_amount,
1044
+ currency: event.currency || "USD",
1045
+ items: event.items?.map((item) => ({
1046
+ item_id: item.product_id,
1047
+ item_name: item.product_name,
1048
+ item_category: item.category,
1049
+ item_brand: item.brand,
1050
+ item_variant: item.variant,
1051
+ price: item.price,
1052
+ quantity: item.quantity
1053
+ })) || [],
1054
+ // GA4-specific parameters
1055
+ batch_ordering_id: event.batch_ordering_id || "",
1056
+ batch_page_id: event.batch_page_id || "",
1057
+ campaign: event.campaign || "",
1058
+ ga_session_id: event.ga_session_id || "",
1059
+ engagement_time_msec: event.engagement_time_msec,
1060
+ session_engaged: event.session_engaged,
1061
+ page_title: event.page_title || document.title,
1062
+ page_location: event.page_location || window.location.href,
1063
+ page_referrer: event.page_referrer || document.referrer,
1064
+ user_id: event.user_id,
1065
+ user_properties: event.user_properties
1066
+ };
1067
+ window.gtag?.("event", "purchase", this.enhanceWithAffiliateParams(params));
1068
+ }
1069
+ /**
1070
+ * Track a begin checkout event
1071
+ * @param event The begin checkout event
1072
+ */
1073
+ trackBeginCheckout(event) {
1074
+ const params = {
1075
+ currency: event.currency || "USD",
1076
+ value: event.value || 0,
1077
+ coupon: event.coupon,
1078
+ items: event.items?.map((item) => ({
1079
+ item_id: item.item_id,
1080
+ item_name: item.item_name,
1081
+ item_category: item.item_category,
1082
+ item_category2: item.item_category2,
1083
+ item_category3: item.item_category3,
1084
+ item_category4: item.item_category4,
1085
+ item_category5: item.item_category5,
1086
+ item_brand: item.item_brand,
1087
+ item_variant: item.item_variant,
1088
+ price: item.price,
1089
+ quantity: item.quantity
1090
+ })) || [],
1091
+ // GA4-specific parameters
1092
+ batch_ordering_id: event.batch_ordering_id || "",
1093
+ batch_page_id: event.batch_page_id || "",
1094
+ campaign: event.campaign || "",
1095
+ ga_session_id: event.ga_session_id || "",
1096
+ engagement_time_msec: event.engagement_time_msec,
1097
+ session_engaged: event.session_engaged,
1098
+ page_title: event.page_title || document.title,
1099
+ page_location: event.page_location || window.location.href,
1100
+ page_referrer: event.page_referrer || document.referrer,
1101
+ user_id: event.user_id,
1102
+ user_properties: event.user_properties
1103
+ };
1104
+ window.gtag?.(
1105
+ "event",
1106
+ "begin_checkout",
1107
+ this.enhanceWithAffiliateParams(params)
1108
+ );
1109
+ }
1110
+ /**
1111
+ * Convert an event to Google Analytics parameters
1112
+ * @param event The event to convert
1113
+ */
1114
+ eventToParams(event) {
1115
+ const { type, timestamp, ...params } = event;
1116
+ return this.enhanceWithAffiliateParams(params);
1117
+ }
1118
+ };
1119
+
1120
+ // src/constants.ts
1121
+ var EventNames = {
1122
+ // Page events
1123
+ PAGE_VIEWED: "Page Viewed",
1124
+ // Interaction events
1125
+ BUTTON_CLICKED: "Button Clicked",
1126
+ FORM_SUBMITTED: "Form Submitted",
1127
+ // Product events
1128
+ PRODUCT_VIEWED: "Product Viewed",
1129
+ ADDED_TO_CART: "Added To Cart",
1130
+ REMOVED_FROM_CART: "Removed From Cart",
1131
+ // Checkout events
1132
+ CHECKOUT_STARTED: "Checkout Started",
1133
+ PURCHASE_COMPLETED: "Purchase Completed",
1134
+ // Search events
1135
+ SEARCH: "Search",
1136
+ // User events
1137
+ USER_SIGNED_UP: "User Signed Up",
1138
+ USER_LOGGED_IN: "User Logged In",
1139
+ // MoEngage events
1140
+ ITEM_PURCHASED: "Item Purchased",
1141
+ UPDATE_CART: "Update Cart",
1142
+ CUSTOMER_REGISTERED: "Customer Registered",
1143
+ CUSTOMER_LOGGED_IN: "Customer Logged In",
1144
+ SHOPIFY_CHECKOUT_UPDATED: "Shopify - Checkout Updated",
1145
+ SHOPIFY_ABANDONED_CHECKOUT: "Shopify - Abandoned Checkout",
1146
+ SHOPIFY_ORDER_FULFILLED: "Shopify - Order Fulfilled",
1147
+ SHOPIFY_CHECKOUT_STARTED: "Shopify - Checkout Started",
1148
+ SHOPIFY_ADD_TO_CART: "Shopify - Add To Cart",
1149
+ SHOPIFY_REMOVED_FROM_CART: "Shopify - Removed From Cart",
1150
+ SHOPIFY_UPDATE_CART: "Shopify - Update Cart",
1151
+ SPINFORM_RESULT: "Spinform Result",
1152
+ COUPON_COPIED: "Coupon Copied",
1153
+ STARTED_CHECKOUT_GK: "Started Checkout GK",
1154
+ MOBILE_ADDED_GK: "Mobile Added GK",
1155
+ ADDRESS_SELECTED_GK: "Address Selected GK",
1156
+ ADDRESS_COMPLETED_GK: "Address Completed GK",
1157
+ PAYMENT_METHOD_SELECTED_GK: "Payment Method Selected GK",
1158
+ PAYMENT_COMPLETED_GK: "Payment Completed GK",
1159
+ ORDER_SUCCESS: "Order Success",
1160
+ ORDER_COMPLETED: "Order Completed",
1161
+ PIN_CODE_ADDED_GK: "PIN Code Added GK",
1162
+ ADDRESS_ADDED_GK: "Address Added GK",
1163
+ KP_MP_PHONE_NUMBER_LOGGED_IN: "KP MP Phone Number Logged In",
1164
+ KP_PHONE_NUMBER_LOGGED_IN: "KP Phone Number Logged In",
1165
+ KP_MP_SHOPIFY_LOGGED_IN: "KP MP Shopify Logged In",
1166
+ KP_MP_SUCCESSFULLY_LOGGED_OUT: "KP MP Successfully Logged Out",
1167
+ KP_WHATSAPP_LOGGED_IN: "KP Whatsapp Logged In",
1168
+ KP_MP_TRUECALLER_LOGGED_IN: "KP MP Truecaller Logged In",
1169
+ KP_MP_WHATSAPP_LOGGED_IN: "KP MP Whatsapp Logged In",
1170
+ KP_TRUECALLER_LOGGED_IN: "KP Truecaller Logged In",
1171
+ KP_SHOPIFY_LOGGED_IN: "KP Shopify Logged In",
1172
+ KP_SUCCESSFULLY_LOGGED_OUT: "KP Successfully Logged Out"
1173
+ };
1174
+ var DEFAULT_CURRENCY = "INR";
1175
+ var HARDCODED_HANDLE = "ryze-gums";
1176
+
1177
+ // src/adapters/moengage-adapter.ts
1178
+ import moengage from "@moengage/web-sdk";
1179
+ var MoengageAdapter = class extends BaseAdapter {
1180
+ constructor(config) {
1181
+ super(config);
1182
+ this.name = "MoEngage";
1183
+ this.sdk = null;
1184
+ this.initializeLogger();
1185
+ }
1186
+ /**
1187
+ * Initialize the MoenGage adapter using the Web SDK
1188
+ */
1189
+ async initialize() {
1190
+ if (this.initialized) {
1191
+ this.logger.debug("Already initialized");
1192
+ return;
1193
+ }
1194
+ if (typeof window === "undefined") {
1195
+ this.logger.debug("Skipping initialization on server");
1196
+ return;
1197
+ }
1198
+ try {
1199
+ const appId = this.getConfig("appId");
1200
+ if (!appId) {
1201
+ this.logger.warn("App ID is required for initialization");
1202
+ return;
1203
+ }
1204
+ const region = this.getConfig("region", "dc_01");
1205
+ const config = {
1206
+ app_id: appId,
1207
+ debug_logs: this.getConfig("debug", false) ? 1 : 0,
1208
+ cluster: region
1209
+ };
1210
+ this.logger.info("Initializing with config", {
1211
+ region,
1212
+ debug: this.getConfig("debug", false),
1213
+ appId: "***"
1214
+ // Hide sensitive data
1215
+ });
1216
+ moengage.initialize(config);
1217
+ this.sdk = window.Moengage;
1218
+ this.logger.info("Successfully initialized with SDK");
1219
+ this.initialized = true;
1220
+ } catch (error) {
1221
+ this.logger.error("Failed to initialize", error);
1222
+ }
1223
+ }
1224
+ /**
1225
+ * Track an event with MoenGage SDK
1226
+ * @param event The event to track
1227
+ */
1228
+ async trackEvent(event) {
1229
+ if (!this.initialized || typeof window === "undefined" || !this.sdk) {
1230
+ this.logger.warn(
1231
+ "Cannot track event, adapter not initialized or SDK not available",
1232
+ {
1233
+ eventType: event.type,
1234
+ initialized: this.initialized,
1235
+ hasWindow: typeof window !== "undefined",
1236
+ hasSdk: !!this.sdk
1237
+ }
1238
+ );
1239
+ return;
1240
+ }
1241
+ this.logger.debug("Tracking event", { eventType: event.type });
1242
+ switch (event.type) {
1243
+ case "page_view" /* PAGE_VIEW */:
1244
+ this.trackPageView(event);
1245
+ break;
1246
+ case "button_click" /* BUTTON_CLICK */:
1247
+ this.trackButtonClick(event);
1248
+ break;
1249
+ case "form_submission" /* FORM_SUBMISSION */:
1250
+ this.trackFormSubmission(event);
1251
+ break;
1252
+ case "product_view" /* PRODUCT_VIEW */:
1253
+ this.trackProductView(event);
1254
+ break;
1255
+ case "add_to_cart" /* ADD_TO_CART */:
1256
+ this.trackAddToCart(event);
1257
+ break;
1258
+ case "remove_from_cart" /* REMOVE_FROM_CART */:
1259
+ this.trackRemoveFromCart(event);
1260
+ break;
1261
+ case "checkout_started" /* CHECKOUT_STARTED */:
1262
+ this.trackCheckoutStarted(event);
1263
+ break;
1264
+ case "checkout_completed" /* CHECKOUT_COMPLETED */:
1265
+ this.trackCheckoutCompleted(event);
1266
+ break;
1267
+ case "search" /* SEARCH */:
1268
+ this.trackSearch(event);
1269
+ break;
1270
+ case "user_signup" /* USER_SIGNUP */:
1271
+ this.trackUserSignup(event);
1272
+ break;
1273
+ case "user_login" /* USER_LOGIN */:
1274
+ this.trackUserLogin(event);
1275
+ break;
1276
+ case "custom" /* CUSTOM */:
1277
+ this.trackCustomEvent(event);
1278
+ break;
1279
+ default:
1280
+ this.sdk.track_event(event.type, this.eventToParams(event));
1281
+ break;
1282
+ }
1283
+ }
1284
+ /**
1285
+ * Track a page view event
1286
+ * @param event The page view event
1287
+ */
1288
+ trackPageView(event) {
1289
+ if (!this.sdk?.track_event) {
1290
+ this.logger.warn("track_event not available for PageView event");
1291
+ return;
1292
+ }
1293
+ const eventData = {
1294
+ page_path: event.path,
1295
+ page_title: event.title,
1296
+ page_url: window.location.href,
1297
+ referrer: event.referrer || document.referrer
1298
+ };
1299
+ this.sdk.track_event(EventNames.PAGE_VIEWED, eventData);
1300
+ this.logger.debug("PageView event tracked", { eventData });
1301
+ }
1302
+ /**
1303
+ * Track a button click event
1304
+ * @param event The button click event
1305
+ */
1306
+ trackButtonClick(event) {
1307
+ this.sdk?.track_event(EventNames.BUTTON_CLICKED, {
1308
+ button_id: event.buttonId,
1309
+ button_text: event.buttonText,
1310
+ location: event.location
1311
+ });
1312
+ }
1313
+ /**
1314
+ * Track a form submission event
1315
+ * @param event The form submission event
1316
+ */
1317
+ trackFormSubmission(event) {
1318
+ this.sdk?.track_event(EventNames.FORM_SUBMITTED, {
1319
+ form_id: event.formId,
1320
+ form_name: event.formName,
1321
+ success: event.success
1322
+ });
1323
+ }
1324
+ /**
1325
+ * Track a product view event
1326
+ * @param event The product view event
1327
+ */
1328
+ trackProductView(event) {
1329
+ this.sdk?.track_event(EventNames.PRODUCT_VIEWED, {
1330
+ product_id: event.productId,
1331
+ product_name: event.productName,
1332
+ price: event.price,
1333
+ currency: event.currency || DEFAULT_CURRENCY,
1334
+ category: event.category
1335
+ });
1336
+ }
1337
+ /**
1338
+ * Track an add to cart event
1339
+ * @param event The add to cart event
1340
+ */
1341
+ trackAddToCart(event) {
1342
+ const quantity = event.quantity ?? 1;
1343
+ this.sdk?.track_event(EventNames.ADDED_TO_CART, {
1344
+ product_id: event.productId,
1345
+ product_name: event.productName,
1346
+ price: event.price,
1347
+ currency: event.currency || DEFAULT_CURRENCY,
1348
+ quantity,
1349
+ variant: event.variant,
1350
+ total_value: event.price * quantity
1351
+ });
1352
+ }
1353
+ /**
1354
+ * Track a remove from cart event
1355
+ * @param event The remove from cart event
1356
+ */
1357
+ trackRemoveFromCart(event) {
1358
+ this.sdk?.track_event(EventNames.REMOVED_FROM_CART, {
1359
+ product_id: event.productId,
1360
+ product_name: event.productName,
1361
+ price: event.price,
1362
+ currency: event.currency || DEFAULT_CURRENCY,
1363
+ quantity: event.quantity,
1364
+ variant: event.variant,
1365
+ total_value: event.price * event.quantity
1366
+ });
1367
+ }
1368
+ /**
1369
+ * Track a checkout started event
1370
+ * @param event The checkout started event
1371
+ */
1372
+ trackCheckoutStarted(event) {
1373
+ this.sdk?.track_event(EventNames.CHECKOUT_STARTED, {
1374
+ cart_value: event.cartValue,
1375
+ currency: event.currency || DEFAULT_CURRENCY,
1376
+ item_count: event.itemCount,
1377
+ items: event.items.map((item) => ({
1378
+ product_id: item.productId,
1379
+ product_name: item.productName,
1380
+ price: item.price,
1381
+ quantity: item.quantity,
1382
+ variant: item.variant
1383
+ }))
1384
+ });
1385
+ }
1386
+ /**
1387
+ * Track a checkout completed event
1388
+ * @param event The checkout completed event
1389
+ */
1390
+ trackCheckoutCompleted(event) {
1391
+ this.sdk?.track_event(EventNames.PURCHASE_COMPLETED, {
1392
+ order_id: event.orderId,
1393
+ cart_value: event.cartValue,
1394
+ currency: event.currency || DEFAULT_CURRENCY,
1395
+ item_count: event.itemCount,
1396
+ items: event.items.map((item) => ({
1397
+ product_id: item.productId,
1398
+ product_name: item.productName,
1399
+ price: item.price,
1400
+ quantity: item.quantity,
1401
+ variant: item.variant
1402
+ }))
1403
+ });
1404
+ }
1405
+ /**
1406
+ * Track a search event
1407
+ * @param event The search event
1408
+ */
1409
+ trackSearch(event) {
1410
+ this.sdk?.track_event(EventNames.SEARCH, {
1411
+ search_term: event.searchTerm,
1412
+ results_count: event.resultsCount
1413
+ });
1414
+ }
1415
+ /**
1416
+ * Track a user signup event
1417
+ * @param event The user signup event
1418
+ */
1419
+ trackUserSignup(event) {
1420
+ this.sdk?.track_event(EventNames.USER_SIGNED_UP, {
1421
+ user_id: event.userId,
1422
+ method: event.method,
1423
+ success: event.success
1424
+ });
1425
+ if (event.userId && this.getConfig("enableUserIdentification", true)) {
1426
+ this.sdk?.add_unique_user_id(event.userId);
1427
+ }
1428
+ }
1429
+ /**
1430
+ * Track a user login event
1431
+ * @param event The user login event
1432
+ */
1433
+ trackUserLogin(event) {
1434
+ this.sdk?.track_event(EventNames.USER_LOGGED_IN, {
1435
+ user_id: event.userId,
1436
+ method: event.method,
1437
+ success: event.success
1438
+ });
1439
+ if (event.userId && this.getConfig("enableUserIdentification", true)) {
1440
+ this.sdk?.add_unique_user_id(event.userId);
1441
+ }
1442
+ }
1443
+ /**
1444
+ * Track a custom event
1445
+ * @param event The custom event
1446
+ */
1447
+ trackCustomEvent(event) {
1448
+ this.sdk?.track_event(event.name, event.properties);
1449
+ }
1450
+ /**
1451
+ * Convert an event to MoenGage parameters
1452
+ * @param event The event to convert
1453
+ */
1454
+ eventToParams(event) {
1455
+ const { type, timestamp, ...params } = event;
1456
+ return params;
1457
+ }
1458
+ /**
1459
+ * Set user attributes in MoenGage
1460
+ * @param attributes User attributes to set
1461
+ */
1462
+ setUserAttributes(attributes) {
1463
+ if (!this.initialized || typeof window === "undefined" || !this.sdk) {
1464
+ this.logger.warn("Cannot set user attributes, adapter not initialized");
1465
+ return;
1466
+ }
1467
+ this.logger.debug("Setting user attributes", {
1468
+ attributeKeys: Object.keys(attributes)
1469
+ });
1470
+ for (const [key, value] of Object.entries(attributes)) {
1471
+ switch (key) {
1472
+ case "firstName":
1473
+ this.sdk?.add_first_name(value);
1474
+ break;
1475
+ case "lastName":
1476
+ this.sdk?.add_last_name(value);
1477
+ break;
1478
+ case "email":
1479
+ this.sdk?.add_email(value);
1480
+ break;
1481
+ case "mobile":
1482
+ this.sdk?.add_mobile(value);
1483
+ break;
1484
+ case "username":
1485
+ this.sdk?.add_user_name(value);
1486
+ break;
1487
+ case "gender":
1488
+ this.sdk?.add_gender(value);
1489
+ break;
1490
+ case "birthday":
1491
+ this.sdk?.add_birthday(value);
1492
+ break;
1493
+ case "userId":
1494
+ this.sdk?.add_unique_user_id(value);
1495
+ break;
1496
+ default:
1497
+ this.sdk?.add_user_attribute(key, value);
1498
+ break;
1499
+ }
1500
+ }
1501
+ }
1502
+ };
1503
+
1504
+ // src/adapters/posthog-adapter.ts
1505
+ var PostHogAdapter = class extends BaseAdapter {
1506
+ constructor(config = {}) {
1507
+ super(config);
1508
+ this.name = "PostHog";
1509
+ this.initializeLogger();
1510
+ }
1511
+ /**
1512
+ * Initialize PostHog
1513
+ */
1514
+ async initialize() {
1515
+ if (this.initialized) {
1516
+ this.logger.debug("Already initialized");
1517
+ return;
1518
+ }
1519
+ if (typeof window === "undefined") {
1520
+ this.logger.debug("Skipping initialization on server");
1521
+ return;
1522
+ }
1523
+ if (!window.posthog) {
1524
+ this.logger.warn(
1525
+ "PostHog object not found. Make sure the script is loaded."
1526
+ );
1527
+ return;
1528
+ }
1529
+ this.logger.info("Successfully initialized");
1530
+ this.initialized = true;
1531
+ }
1532
+ /**
1533
+ * Track an event with PostHog
1534
+ * @param event The event to track
1535
+ */
1536
+ async trackEvent(event) {
1537
+ if (!this.initialized || typeof window === "undefined" || !window.posthog) {
1538
+ this.logger.warn(
1539
+ "Cannot track event, adapter not initialized or posthog not available",
1540
+ {
1541
+ eventType: event.type,
1542
+ initialized: this.initialized,
1543
+ hasWindow: typeof window !== "undefined",
1544
+ hasPosthog: !!window?.posthog
1545
+ }
1546
+ );
1547
+ return;
1548
+ }
1549
+ this.logger.debug("Tracking event", { eventType: event.type });
1550
+ switch (event.type) {
1551
+ case "page_view" /* PAGE_VIEW */:
1552
+ this.trackPageView(event);
1553
+ break;
1554
+ case "product_view" /* PRODUCT_VIEW */:
1555
+ this.trackProductView(event);
1556
+ break;
1557
+ case "add_to_cart" /* ADD_TO_CART */:
1558
+ this.trackAddToCart(event);
1559
+ break;
1560
+ case "checkout_started" /* CHECKOUT_STARTED */:
1561
+ this.trackCheckoutStarted(event);
1562
+ break;
1563
+ case "checkout_completed" /* CHECKOUT_COMPLETED */:
1564
+ this.trackCheckoutCompleted(event);
1565
+ break;
1566
+ case "add_payment_info" /* ADD_PAYMENT_INFO */:
1567
+ this.trackAddPaymentInfo(event);
1568
+ break;
1569
+ case "search" /* SEARCH */:
1570
+ this.trackSearch(event);
1571
+ break;
1572
+ default:
1573
+ const params = this.eventToParams(event);
1574
+ window.posthog?.capture(
1575
+ event.type,
1576
+ this.enhanceWithAffiliateParams(params)
1577
+ );
1578
+ break;
1579
+ }
1580
+ }
1581
+ /**
1582
+ * Track a page view event
1583
+ * @param event The page view event
1584
+ */
1585
+ trackPageView(event) {
1586
+ const params = {
1587
+ path: event.path,
1588
+ title: event.title,
1589
+ referrer: event.referrer
1590
+ };
1591
+ window.posthog?.capture(
1592
+ "$pageview",
1593
+ this.enhanceWithAffiliateParams(params)
1594
+ );
1595
+ }
1596
+ /**
1597
+ * Track a product view event
1598
+ * @param event The product view event
1599
+ */
1600
+ trackProductView(event) {
1601
+ const params = {
1602
+ product_id: event.productId,
1603
+ product_name: event.productName,
1604
+ category: event.category,
1605
+ price: event.price,
1606
+ currency: event.currency || "INR"
1607
+ };
1608
+ window.posthog?.capture(
1609
+ "product_viewed",
1610
+ this.enhanceWithAffiliateParams(params)
1611
+ );
1612
+ }
1613
+ /**
1614
+ * Track an add to cart event
1615
+ * @param event The add to cart event
1616
+ */
1617
+ trackAddToCart(event) {
1618
+ this.logger.debug("Handling ADD_TO_CART event", { event });
1619
+ const params = {
1620
+ product_id: event.productId,
1621
+ product_name: event.productName,
1622
+ price: event.price,
1623
+ currency: event.currency || "INR",
1624
+ quantity: event.quantity,
1625
+ variant: event.variant
1626
+ };
1627
+ this.logger.debug("Sending to PostHog with params", { params });
1628
+ if (!window.posthog) {
1629
+ this.logger.error("window.posthog is not available");
1630
+ return;
1631
+ }
1632
+ window.posthog.capture(
1633
+ "add_to_cart",
1634
+ this.enhanceWithAffiliateParams(params)
1635
+ );
1636
+ this.logger.debug("Event sent to PostHog successfully");
1637
+ }
1638
+ /**
1639
+ * Track a checkout started event
1640
+ * @param event The checkout started event
1641
+ */
1642
+ trackCheckoutStarted(event) {
1643
+ const params = {
1644
+ cart_value: event.cartValue,
1645
+ currency: event.currency || "INR",
1646
+ item_count: event.itemCount,
1647
+ items: event.items.map((item) => ({
1648
+ product_id: item.productId,
1649
+ product_name: item.productName,
1650
+ price: item.price,
1651
+ quantity: item.quantity,
1652
+ variant: item.variant
1653
+ }))
1654
+ };
1655
+ window.posthog?.capture(
1656
+ "checkout_started",
1657
+ this.enhanceWithAffiliateParams(params)
1658
+ );
1659
+ }
1660
+ /**
1661
+ * Track a checkout completed event
1662
+ * @param event The checkout completed event
1663
+ */
1664
+ trackCheckoutCompleted(event) {
1665
+ const params = {
1666
+ order_id: event.orderId,
1667
+ cart_value: event.cartValue,
1668
+ currency: event.currency || "INR",
1669
+ item_count: event.itemCount,
1670
+ items: event.items.map((item) => ({
1671
+ product_id: item.productId,
1672
+ product_name: item.productName,
1673
+ price: item.price,
1674
+ quantity: item.quantity,
1675
+ variant: item.variant
1676
+ }))
1677
+ };
1678
+ window.posthog?.capture(
1679
+ "purchase",
1680
+ this.enhanceWithAffiliateParams(params)
1681
+ );
1682
+ }
1683
+ /**
1684
+ * Track a search event
1685
+ * @param event The search event
1686
+ */
1687
+ trackSearch(event) {
1688
+ const params = {
1689
+ search_term: event.searchTerm,
1690
+ results_count: event.resultsCount,
1691
+ content_ids: event.content_ids
1692
+ };
1693
+ window.posthog?.capture("search", this.enhanceWithAffiliateParams(params));
1694
+ }
1695
+ /**
1696
+ * Track an add payment info event
1697
+ * @param event The add payment info event
1698
+ */
1699
+ trackAddPaymentInfo(event) {
1700
+ const params = {
1701
+ cart_value: event.cartValue,
1702
+ currency: event.currency || "INR",
1703
+ payment_type: event.paymentType,
1704
+ item_count: event.itemCount,
1705
+ items: event.items.map((item) => ({
1706
+ product_id: item.productId,
1707
+ product_name: item.productName,
1708
+ price: item.price,
1709
+ quantity: item.quantity,
1710
+ variant: item.variant
1711
+ }))
1712
+ };
1713
+ window.posthog?.capture(
1714
+ "add_payment_info",
1715
+ this.enhanceWithAffiliateParams(params)
1716
+ );
1717
+ }
1718
+ /**
1719
+ * Convert an event to PostHog parameters
1720
+ * @param event The event to convert
1721
+ */
1722
+ eventToParams(event) {
1723
+ const { type, timestamp, ...params } = event;
1724
+ return params;
1725
+ }
1726
+ };
1727
+
1728
+ // src/adapters/shopify-adapter.ts
1729
+ import {
1730
+ sendShopifyAnalytics,
1731
+ getClientBrowserParameters,
1732
+ AnalyticsEventName,
1733
+ ShopifySalesChannel
1734
+ } from "@shopify/hydrogen-react";
1735
+ var DEFAULT_CURRENCY2 = "INR";
1736
+ var DEFAULT_LANGUAGE = "en";
1737
+ var ShopifyAdapter = class extends BaseAdapter {
1738
+ constructor(config) {
1739
+ super(config);
1740
+ this.name = "ShopifyAnalytics";
1741
+ /**
1742
+ * Send page view event using the enhanced functionality
1743
+ */
1744
+ this.sendPageView = (eventName, payload) => {
1745
+ const enhancedPayload = {
1746
+ ...this.createBasePayload(),
1747
+ ...payload
1748
+ };
1749
+ return sendShopifyAnalytics({
1750
+ eventName,
1751
+ payload: enhancedPayload
1752
+ });
1753
+ };
1754
+ /**
1755
+ * Send add to cart event using the enhanced functionality
1756
+ */
1757
+ this.sendAddToCart = ({
1758
+ cartId,
1759
+ totalValue,
1760
+ products
1761
+ }) => {
1762
+ return this.sendPageView(AnalyticsEventName.ADD_TO_CART, {
1763
+ cartId,
1764
+ totalValue,
1765
+ products
1766
+ });
1767
+ };
1768
+ this.shopId = config.shopId;
1769
+ this.domain = config.domain;
1770
+ this.currency = config.currency || DEFAULT_CURRENCY2;
1771
+ }
1772
+ /**
1773
+ * Initialize the Shopify Analytics adapter
1774
+ */
1775
+ async initialize() {
1776
+ this.initializeLogger();
1777
+ try {
1778
+ if (typeof window !== "undefined") {
1779
+ this.logger.info("Shopify Analytics adapter initialized successfully", {
1780
+ shopId: this.shopId,
1781
+ domain: this.domain,
1782
+ currency: this.currency
1783
+ });
1784
+ }
1785
+ this.initialized = true;
1786
+ } catch (error) {
1787
+ this.logger.error(
1788
+ "Failed to initialize Shopify Analytics",
1789
+ error instanceof Error ? error : new Error(String(error))
1790
+ );
1791
+ throw error;
1792
+ }
1793
+ }
1794
+ /**
1795
+ * Convert product ID to Shopify GID format if it's not already
1796
+ */
1797
+ formatProductGid(productId) {
1798
+ return productId.startsWith("gid://shopify/Product/") ? productId : `gid://shopify/Product/${productId}`;
1799
+ }
1800
+ /**
1801
+ * Get user consent status from your consent management system
1802
+ */
1803
+ getUserConsent() {
1804
+ const hasConsent = this.checkUserConsent();
1805
+ return {
1806
+ hasUserConsent: hasConsent,
1807
+ analyticsAllowed: hasConsent && this.checkAnalyticsConsent(),
1808
+ marketingAllowed: hasConsent && this.checkMarketingConsent(),
1809
+ saleOfDataAllowed: hasConsent && this.checkSaleOfDataConsent()
1810
+ };
1811
+ }
1812
+ /**
1813
+ * Check user consent (implement based on your consent management)
1814
+ */
1815
+ checkUserConsent() {
1816
+ return true;
1817
+ }
1818
+ checkAnalyticsConsent() {
1819
+ return true;
1820
+ }
1821
+ checkMarketingConsent() {
1822
+ return true;
1823
+ }
1824
+ checkSaleOfDataConsent() {
1825
+ return true;
1826
+ }
1827
+ /**
1828
+ * Create base payload for all events
1829
+ */
1830
+ createBasePayload() {
1831
+ const consent = this.getUserConsent();
1832
+ return {
1833
+ ...getClientBrowserParameters(),
1834
+ ...consent,
1835
+ storefrontId: this.domain,
1836
+ shopifySalesChannel: ShopifySalesChannel.headless,
1837
+ shopId: `gid://shopify/Shop/${this.shopId}`,
1838
+ currency: this.currency,
1839
+ acceptedLanguage: DEFAULT_LANGUAGE,
1840
+ ...this.enhanceWithAffiliateParams({})
1841
+ };
1842
+ }
1843
+ /**
1844
+ * Track an event using Shopify Analytics
1845
+ */
1846
+ async trackEvent(event) {
1847
+ if (!this.initialized || typeof window === "undefined") {
1848
+ this.logger.warn(
1849
+ "Shopify Analytics not initialized or not in browser environment"
1850
+ );
1851
+ return;
1852
+ }
1853
+ this.logger.debug("Processing Shopify Analytics event", {
1854
+ eventType: event.type,
1855
+ eventData: event
1856
+ });
1857
+ try {
1858
+ switch (event.type) {
1859
+ case "page_view" /* PAGE_VIEW */:
1860
+ this.sendPageView(AnalyticsEventName.PAGE_VIEW);
1861
+ this.logger.debug("Sent PAGE_VIEW event to Shopify Analytics");
1862
+ break;
1863
+ case "view_content" /* VIEW_CONTENT */:
1864
+ this.sendPageView(AnalyticsEventName.PRODUCT_VIEW);
1865
+ this.logger.debug("Sent PRODUCT_VIEW event to Shopify Analytics");
1866
+ break;
1867
+ case "add_to_cart" /* ADD_TO_CART */:
1868
+ this.trackAddToCart(event);
1869
+ break;
1870
+ case "checkout_started" /* CHECKOUT_STARTED */:
1871
+ case "begin_checkout" /* BEGIN_CHECKOUT */:
1872
+ this.sendPageView(AnalyticsEventName.PAGE_VIEW, {
1873
+ pageType: "checkout"
1874
+ });
1875
+ this.logger.debug(
1876
+ "Sent checkout PAGE_VIEW event to Shopify Analytics"
1877
+ );
1878
+ break;
1879
+ default:
1880
+ this.logger.debug("Event not supported by Shopify Analytics", {
1881
+ eventType: event.type
1882
+ });
1883
+ break;
1884
+ }
1885
+ } catch (error) {
1886
+ this.logger.error(
1887
+ "Error tracking Shopify Analytics event",
1888
+ error instanceof Error ? error : new Error(String(error)),
1889
+ { eventType: event.type }
1890
+ );
1891
+ }
1892
+ }
1893
+ /**
1894
+ * Check if Shopify session is properly established
1895
+ */
1896
+ isSessionValid() {
1897
+ if (typeof window === "undefined") return false;
1898
+ const shopifyY = document.cookie.includes("_shopify_y=");
1899
+ const shopifyS = document.cookie.includes("_shopify_s=");
1900
+ return shopifyY && shopifyS;
1901
+ }
1902
+ /**
1903
+ * Get session debug information
1904
+ */
1905
+ getSessionDebugInfo() {
1906
+ if (typeof window === "undefined")
1907
+ return { error: "Not in browser environment" };
1908
+ return {
1909
+ sessionValid: this.isSessionValid(),
1910
+ cookies: {
1911
+ shopify_y: document.cookie.includes("_shopify_y="),
1912
+ shopify_s: document.cookie.includes("_shopify_s="),
1913
+ all: document.cookie
1914
+ },
1915
+ shopId: this.shopId,
1916
+ initialized: this.initialized
1917
+ };
1918
+ }
1919
+ /**
1920
+ * Track add to cart event with enhanced error handling
1921
+ */
1922
+ trackAddToCart(event) {
1923
+ if (!event.productId) {
1924
+ this.logger.warn("ADD_TO_CART event missing productId");
1925
+ return;
1926
+ }
1927
+ try {
1928
+ const productGid = this.formatProductGid(event.productId);
1929
+ const cartKey = `merchant_${process.env.NEXT_PUBLIC_MERCHANT_NAME}_cartId`;
1930
+ const cartId = localStorage.getItem(cartKey) || "";
1931
+ if (!cartId) {
1932
+ this.logger.warn("No cart ID found, creating anonymous session");
1933
+ }
1934
+ if (!event.price || event.price <= 0) {
1935
+ this.logger.warn("Invalid or missing price for ADD_TO_CART", {
1936
+ price: event.price
1937
+ });
1938
+ }
1939
+ const productPrice = Math.max(0, event.price || 0);
1940
+ const productQuantity = Math.max(1, event.quantity || 1);
1941
+ const products = [
1942
+ {
1943
+ productGid,
1944
+ variantGid: event.variantId || productGid.replace("Product", "ProductVariant"),
1945
+ quantity: productQuantity,
1946
+ price: productPrice.toString(),
1947
+ // Convert to string as required by ShopifyAnalyticsProduct
1948
+ name: event.productName || "Unknown Product",
1949
+ brand: event.brand || "Unknown Brand"
1950
+ }
1951
+ ];
1952
+ const totalValue = productPrice * productQuantity;
1953
+ this.logger.debug("ADD_TO_CART event tracked successfully", {
1954
+ productGid,
1955
+ quantity: productQuantity,
1956
+ price: productPrice,
1957
+ totalValue
1958
+ });
1959
+ this.sendAddToCart({
1960
+ cartId,
1961
+ products,
1962
+ totalValue
1963
+ });
1964
+ } catch (error) {
1965
+ this.logger.error(
1966
+ "Error in trackAddToCart",
1967
+ error instanceof Error ? error : new Error(String(error))
1968
+ );
1969
+ }
1970
+ }
1971
+ };
1972
+
1973
+ // src/adapters/kwikpass-adapter.ts
1974
+ var KwikPassAdapter = class extends BaseAdapter {
1975
+ constructor(config = {}) {
1976
+ super(config);
1977
+ this.name = "KwikPass";
1978
+ this.enableKwikPassEvents = config.enableKwikPassEvents ?? true;
1979
+ this.initializeLogger();
1980
+ }
1981
+ /**
1982
+ * Initialize the KwikPass adapter
1983
+ */
1984
+ async initialize() {
1985
+ try {
1986
+ if (typeof window !== "undefined") {
1987
+ this.logger.info("KwikPass adapter initialized successfully", {
1988
+ eventsEnabled: this.enableKwikPassEvents
1989
+ });
1990
+ }
1991
+ this.initialized = true;
1992
+ } catch (error) {
1993
+ this.logger.error(
1994
+ "Failed to initialize KwikPass adapter",
1995
+ error
1996
+ );
1997
+ throw error;
1998
+ }
1999
+ }
2000
+ /**
2001
+ * Track an event using KwikPass
2002
+ */
2003
+ async trackEvent(event) {
2004
+ if (!this.initialized || typeof window === "undefined") {
2005
+ this.logger.warn(
2006
+ "KwikPass adapter not initialized or not in browser environment"
2007
+ );
2008
+ return;
2009
+ }
2010
+ if (!this.enableKwikPassEvents) {
2011
+ this.logger.debug("KwikPass events disabled, skipping event", {
2012
+ eventType: event.type
2013
+ });
2014
+ return;
2015
+ }
2016
+ try {
2017
+ this.logger.debug("Processing event", { eventType: event.type });
2018
+ const enhancedEvent = this.enhanceWithAffiliateParams(event);
2019
+ switch (event.type) {
2020
+ case "product_view" /* PRODUCT_VIEW */:
2021
+ this.trackProductView(enhancedEvent);
2022
+ break;
2023
+ case "collection_view" /* COLLECTION_VIEW */:
2024
+ this.trackCollectionView(enhancedEvent);
2025
+ break;
2026
+ case "page_view" /* PAGE_VIEW */:
2027
+ this.trackPageView(enhancedEvent);
2028
+ break;
2029
+ default:
2030
+ this.logger.debug("Event not supported", { eventType: event.type });
2031
+ break;
2032
+ }
2033
+ } catch (error) {
2034
+ this.logger.error("Error tracking KwikPass event", error, {
2035
+ eventType: event.type
2036
+ });
2037
+ }
2038
+ }
2039
+ /**
2040
+ * Send event to KwikPass platform
2041
+ */
2042
+ sendKwikPassEvent(type, eventData) {
2043
+ this.logger.debug(`Sending ${type}`, { eventData });
2044
+ if (typeof window !== "undefined") {
2045
+ const customEvent = new CustomEvent(`page_view_kp`, {
2046
+ detail: {
2047
+ type,
2048
+ detail: eventData
2049
+ }
2050
+ });
2051
+ window.dispatchEvent(customEvent);
2052
+ this.logger.debug(`${type} sent successfully`);
2053
+ }
2054
+ }
2055
+ /**
2056
+ * Track product view event
2057
+ */
2058
+ trackCollectionView(event) {
2059
+ this.sendKwikPassEvent("collection", {
2060
+ product_id: event.productId,
2061
+ product_name: event.productName,
2062
+ price: event.price,
2063
+ currency: event.currency,
2064
+ category: event.category,
2065
+ timestamp: event.timestamp || Date.now()
2066
+ });
2067
+ }
2068
+ /**
2069
+ * Track collection view event
2070
+ */
2071
+ trackProductView(event) {
2072
+ this.sendKwikPassEvent("product", {
2073
+ product_id: event.productId,
2074
+ product_name: event.productName,
2075
+ price: event.price,
2076
+ currency: event.currency,
2077
+ category: event.category,
2078
+ timestamp: event.timestamp || Date.now()
2079
+ });
2080
+ }
2081
+ /**
2082
+ * Track page view event
2083
+ */
2084
+ trackPageView(event) {
2085
+ this.sendKwikPassEvent("other", {
2086
+ path: event.path,
2087
+ title: event.title,
2088
+ referrer: event.referrer,
2089
+ timestamp: event.timestamp || Date.now()
2090
+ });
2091
+ }
2092
+ };
2093
+
2094
+ // src/adapters/kwik-checkout-adapter.ts
2095
+ var KwikCheckoutAdapter = class extends BaseAdapter {
2096
+ constructor(config) {
2097
+ super(config);
2098
+ this.name = "KwikCheckout";
2099
+ this.mid = config.mid || "";
2100
+ this.environment = config.environment || "production";
2101
+ this.storeId = config.storeId || "";
2102
+ this.initializeLogger();
2103
+ }
2104
+ /**
2105
+ * Initialize the GoKwik adapter
2106
+ */
2107
+ async initialize() {
2108
+ try {
2109
+ if (typeof window !== "undefined") {
2110
+ this.logger.info("GoKwik adapter initialized successfully", {
2111
+ mid: this.mid,
2112
+ environment: this.environment,
2113
+ storeId: this.storeId
2114
+ });
2115
+ }
2116
+ this.initialized = true;
2117
+ } catch (error) {
2118
+ this.logger.error("Failed to initialize GoKwik adapter", error);
2119
+ throw error;
2120
+ }
2121
+ }
2122
+ /**
2123
+ * Track an event using GoKwik
2124
+ */
2125
+ async trackEvent(event) {
2126
+ if (!this.initialized || typeof window === "undefined") {
2127
+ this.logger.warn(
2128
+ "GoKwik adapter not initialized or not in browser environment"
2129
+ );
2130
+ return;
2131
+ }
2132
+ try {
2133
+ this.logger.debug("Processing event", { eventType: event.type });
2134
+ const enhancedEvent = this.enhanceWithAffiliateParams(event);
2135
+ switch (event.type) {
2136
+ case "started_checkout_gk" /* STARTED_CHECKOUT_GK */:
2137
+ this.trackStartedCheckoutGK(enhancedEvent);
2138
+ break;
2139
+ case "mobile_added_gk" /* MOBILE_ADDED_GK */:
2140
+ this.trackMobileAddedGK(enhancedEvent);
2141
+ break;
2142
+ case "address_selected_gk" /* ADDRESS_SELECTED_GK */:
2143
+ this.trackAddressSelectedGK(enhancedEvent);
2144
+ break;
2145
+ case "address_completed_gk" /* ADDRESS_COMPLETED_GK */:
2146
+ this.trackAddressCompletedGK(enhancedEvent);
2147
+ break;
2148
+ case "address_added_gk" /* ADDRESS_ADDED_GK */:
2149
+ this.trackAddressAddedGK(enhancedEvent);
2150
+ break;
2151
+ case "pin_code_added_gk" /* PIN_CODE_ADDED_GK */:
2152
+ this.trackPinCodeAddedGK(enhancedEvent);
2153
+ break;
2154
+ case "payment_method_selected_gk" /* PAYMENT_METHOD_SELECTED_GK */:
2155
+ this.trackPaymentMethodSelectedGK(enhancedEvent);
2156
+ break;
2157
+ case "payment_completed_gk" /* PAYMENT_COMPLETED_GK */:
2158
+ this.trackPaymentCompletedGK(enhancedEvent);
2159
+ break;
2160
+ case "order_success" /* ORDER_SUCCESS */:
2161
+ this.trackOrderSuccess(enhancedEvent);
2162
+ break;
2163
+ case "order_completed" /* ORDER_COMPLETED */:
2164
+ this.trackOrderCompleted(enhancedEvent);
2165
+ break;
2166
+ case "cart_viewed" /* CART_VIEWED */:
2167
+ this.trackCartViewed(enhancedEvent);
2168
+ break;
2169
+ case "checkout_started" /* CHECKOUT_STARTED */:
2170
+ this.trackCheckoutStarted(enhancedEvent);
2171
+ break;
2172
+ case "checkout_completed" /* CHECKOUT_COMPLETED */:
2173
+ this.trackCheckoutCompleted(enhancedEvent);
2174
+ break;
2175
+ case "add_payment_info" /* ADD_PAYMENT_INFO */:
2176
+ this.trackAddPaymentInfo(enhancedEvent);
2177
+ break;
2178
+ default:
2179
+ this.logger.debug("Event not supported", { eventType: event.type });
2180
+ break;
2181
+ }
2182
+ } catch (error) {
2183
+ this.logger.error("Error tracking GoKwik event", error, {
2184
+ eventType: event.type
2185
+ });
2186
+ }
2187
+ }
2188
+ /**
2189
+ * Send event to GoKwik platform
2190
+ */
2191
+ sendGoKwikEvent(eventName, eventData) {
2192
+ this.logger.debug(`Sending ${eventName}`, { eventData });
2193
+ if (typeof window !== "undefined" && window.gokwikSdk) {
2194
+ try {
2195
+ window.gokwikSdk.track?.(eventName, eventData);
2196
+ this.logger.debug(`${eventName} sent via SDK successfully`);
2197
+ } catch (error) {
2198
+ this.logger.error(
2199
+ `Error sending GoKwik event ${eventName} via SDK`,
2200
+ error
2201
+ );
2202
+ }
2203
+ } else {
2204
+ if (typeof window !== "undefined") {
2205
+ const customEvent = new CustomEvent(`gokwik_${eventName}`, {
2206
+ detail: eventData
2207
+ });
2208
+ window.dispatchEvent(customEvent);
2209
+ this.logger.debug(`${eventName} sent via custom event successfully`);
2210
+ }
2211
+ }
2212
+ }
2213
+ /**
2214
+ * Track started checkout GK event
2215
+ */
2216
+ trackStartedCheckoutGK(event) {
2217
+ this.sendGoKwikEvent("started_checkout", {
2218
+ cart_value: event.cartValue,
2219
+ currency: event.currency,
2220
+ timestamp: event.timestamp || Date.now()
2221
+ });
2222
+ }
2223
+ /**
2224
+ * Track mobile added GK event
2225
+ */
2226
+ trackMobileAddedGK(event) {
2227
+ this.sendGoKwikEvent("mobile_added", {
2228
+ mobile: event.mobile,
2229
+ timestamp: event.timestamp || Date.now()
2230
+ });
2231
+ }
2232
+ /**
2233
+ * Track address selected GK event
2234
+ */
2235
+ trackAddressSelectedGK(event) {
2236
+ this.sendGoKwikEvent("address_selected", {
2237
+ address_id: event.addressId,
2238
+ timestamp: event.timestamp || Date.now()
2239
+ });
2240
+ }
2241
+ /**
2242
+ * Track address completed GK event
2243
+ */
2244
+ trackAddressCompletedGK(event) {
2245
+ this.sendGoKwikEvent("address_completed", {
2246
+ address_id: event.addressId,
2247
+ timestamp: event.timestamp || Date.now()
2248
+ });
2249
+ }
2250
+ /**
2251
+ * Track address added GK event
2252
+ */
2253
+ trackAddressAddedGK(event) {
2254
+ this.sendGoKwikEvent("address_added", {
2255
+ address_id: event.addressId,
2256
+ timestamp: event.timestamp || Date.now()
2257
+ });
2258
+ }
2259
+ /**
2260
+ * Track PIN code added GK event
2261
+ */
2262
+ trackPinCodeAddedGK(event) {
2263
+ this.sendGoKwikEvent("pin_code_added", {
2264
+ pin_code: event.pinCode,
2265
+ timestamp: event.timestamp || Date.now()
2266
+ });
2267
+ }
2268
+ /**
2269
+ * Track payment method selected GK event
2270
+ */
2271
+ trackPaymentMethodSelectedGK(event) {
2272
+ this.sendGoKwikEvent("payment_method_selected", {
2273
+ payment_method: event.paymentMethod,
2274
+ timestamp: event.timestamp || Date.now()
2275
+ });
2276
+ }
2277
+ /**
2278
+ * Track payment completed GK event
2279
+ */
2280
+ trackPaymentCompletedGK(event) {
2281
+ this.sendGoKwikEvent("payment_completed", {
2282
+ amount: event.amount,
2283
+ currency: event.currency,
2284
+ timestamp: event.timestamp || Date.now()
2285
+ });
2286
+ }
2287
+ /**
2288
+ * Track order success event
2289
+ */
2290
+ trackOrderSuccess(event) {
2291
+ this.sendGoKwikEvent("order_success", {
2292
+ order_id: event.orderId,
2293
+ amount: event.amount,
2294
+ currency: event.currency,
2295
+ timestamp: event.timestamp || Date.now()
2296
+ });
2297
+ }
2298
+ /**
2299
+ * Track order completed event
2300
+ */
2301
+ trackOrderCompleted(event) {
2302
+ this.sendGoKwikEvent("order_completed", {
2303
+ order_id: event.orderId,
2304
+ amount: event.amount,
2305
+ currency: event.currency,
2306
+ timestamp: event.timestamp || Date.now()
2307
+ });
2308
+ }
2309
+ /**
2310
+ * Track cart viewed event
2311
+ */
2312
+ trackCartViewed(event) {
2313
+ this.sendGoKwikEvent("cart_viewed", {
2314
+ cart_id: event.cartId,
2315
+ products: event.products,
2316
+ timestamp: event.timestamp || Date.now()
2317
+ });
2318
+ }
2319
+ /**
2320
+ * Track checkout started event
2321
+ */
2322
+ trackCheckoutStarted(event) {
2323
+ this.sendGoKwikEvent("checkout_started", {
2324
+ cart_value: event.cartValue,
2325
+ currency: event.currency,
2326
+ item_count: event.itemCount,
2327
+ items: event.items,
2328
+ timestamp: event.timestamp || Date.now()
2329
+ });
2330
+ }
2331
+ /**
2332
+ * Track checkout completed event
2333
+ */
2334
+ trackCheckoutCompleted(event) {
2335
+ this.sendGoKwikEvent("checkout_completed", {
2336
+ order_id: event.orderId,
2337
+ cart_value: event.cartValue,
2338
+ currency: event.currency,
2339
+ item_count: event.itemCount,
2340
+ items: event.items,
2341
+ timestamp: event.timestamp || Date.now()
2342
+ });
2343
+ }
2344
+ /**
2345
+ * Track add payment info event
2346
+ */
2347
+ trackAddPaymentInfo(event) {
2348
+ this.sendGoKwikEvent("add_payment_info", {
2349
+ cart_value: event.cartValue,
2350
+ currency: event.currency,
2351
+ item_count: event.itemCount,
2352
+ payment_type: event.paymentType,
2353
+ items: event.items,
2354
+ timestamp: event.timestamp || Date.now()
2355
+ });
2356
+ }
2357
+ };
2358
+
2359
+ export {
2360
+ createLogger,
2361
+ logger,
2362
+ createAdapterLogger,
2363
+ BaseAdapter,
2364
+ PixelAdapter,
2365
+ GoogleAdapter,
2366
+ EventNames,
2367
+ DEFAULT_CURRENCY,
2368
+ HARDCODED_HANDLE,
2369
+ MoengageAdapter,
2370
+ PostHogAdapter,
2371
+ ShopifyAdapter,
2372
+ KwikPassAdapter,
2373
+ KwikCheckoutAdapter
2374
+ };
2375
+ //# sourceMappingURL=chunk-4MZH5OLR.mjs.map