@zaplier/sdk 1.7.9 → 1.8.1

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 (126) hide show
  1. package/dist/core-ultra.min.js +10 -0
  2. package/dist/index.cjs +59 -12
  3. package/dist/index.d.ts +5 -1
  4. package/dist/index.esm.js +59 -12
  5. package/dist/v2/core.d.ts +88 -0
  6. package/dist/v2/core.js +245 -0
  7. package/dist/v2/core.min.js +6 -0
  8. package/dist/v2/modules/anti-adblock.js +6 -0
  9. package/dist/v2/modules/browser-apis-C32PGYAh.js +6 -0
  10. package/dist/v2/modules/browser-apis-uFUJ09Rq.js +6 -0
  11. package/dist/v2/modules/confidence-CQp4GgvX.js +6 -0
  12. package/dist/v2/modules/device-signals-B35sK6Ly.js +6 -0
  13. package/dist/v2/modules/device-signals-ChNkNSJR.js +6 -0
  14. package/dist/v2/modules/dom-blockers-BamKJxCs.js +6 -0
  15. package/dist/v2/modules/dom-blockers-Dv-oD-zS.js +6 -0
  16. package/dist/v2/modules/fingerprint-CRCL21-p.js +6 -0
  17. package/dist/v2/modules/fingerprint-Cx012xiQ.js +6 -0
  18. package/dist/v2/modules/fingerprint.js +6 -0
  19. package/dist/v2/modules/hardware-B-ewb7VY.js +6 -0
  20. package/dist/v2/modules/heatmap.js +6 -0
  21. package/dist/v2/modules/incognito-B-8zH3xS.js +6 -0
  22. package/dist/v2/modules/incognito-CBxUhUOT.js +6 -0
  23. package/dist/v2/modules/math-BLnUnJG8.js +6 -0
  24. package/dist/v2/modules/plugins-enhanced-BNnyFJad.js +6 -0
  25. package/dist/v2/modules/plugins-enhanced-CnBdC9_k.js +6 -0
  26. package/dist/v2/modules/replay.js +6 -0
  27. package/dist/v2/modules/storage-iGy4i5YE.js +6 -0
  28. package/dist/v2/modules/system-Dcygxavm.js +6 -0
  29. package/package.json +41 -12
  30. package/dist/index.cjs.map +0 -1
  31. package/dist/index.esm.js.map +0 -1
  32. package/dist/index.js +0 -3517
  33. package/dist/index.js.map +0 -1
  34. package/dist/sdk.js +0 -26913
  35. package/dist/sdk.js.map +0 -1
  36. package/dist/sdk.min.js +0 -7
  37. package/dist/src/index.d.ts +0 -15
  38. package/dist/src/index.d.ts.map +0 -1
  39. package/dist/src/modules/anti-adblock.d.ts +0 -113
  40. package/dist/src/modules/anti-adblock.d.ts.map +0 -1
  41. package/dist/src/modules/auto-tracker.d.ts +0 -240
  42. package/dist/src/modules/auto-tracker.d.ts.map +0 -1
  43. package/dist/src/modules/bot-detection.d.ts +0 -15
  44. package/dist/src/modules/bot-detection.d.ts.map +0 -1
  45. package/dist/src/modules/fingerprint/accessibility.d.ts +0 -155
  46. package/dist/src/modules/fingerprint/accessibility.d.ts.map +0 -1
  47. package/dist/src/modules/fingerprint/audio.d.ts +0 -15
  48. package/dist/src/modules/fingerprint/audio.d.ts.map +0 -1
  49. package/dist/src/modules/fingerprint/browser-apis.d.ts +0 -108
  50. package/dist/src/modules/fingerprint/browser-apis.d.ts.map +0 -1
  51. package/dist/src/modules/fingerprint/browser.d.ts +0 -14
  52. package/dist/src/modules/fingerprint/browser.d.ts.map +0 -1
  53. package/dist/src/modules/fingerprint/canvas.d.ts +0 -14
  54. package/dist/src/modules/fingerprint/canvas.d.ts.map +0 -1
  55. package/dist/src/modules/fingerprint/confidence.d.ts +0 -89
  56. package/dist/src/modules/fingerprint/confidence.d.ts.map +0 -1
  57. package/dist/src/modules/fingerprint/datetime-locale.d.ts +0 -76
  58. package/dist/src/modules/fingerprint/datetime-locale.d.ts.map +0 -1
  59. package/dist/src/modules/fingerprint/device-signals.d.ts +0 -29
  60. package/dist/src/modules/fingerprint/device-signals.d.ts.map +0 -1
  61. package/dist/src/modules/fingerprint/dom-blockers.d.ts +0 -56
  62. package/dist/src/modules/fingerprint/dom-blockers.d.ts.map +0 -1
  63. package/dist/src/modules/fingerprint/font-preferences.d.ts +0 -70
  64. package/dist/src/modules/fingerprint/font-preferences.d.ts.map +0 -1
  65. package/dist/src/modules/fingerprint/fonts-enhanced.d.ts +0 -43
  66. package/dist/src/modules/fingerprint/fonts-enhanced.d.ts.map +0 -1
  67. package/dist/src/modules/fingerprint/fonts.d.ts +0 -14
  68. package/dist/src/modules/fingerprint/fonts.d.ts.map +0 -1
  69. package/dist/src/modules/fingerprint/hardware.d.ts +0 -40
  70. package/dist/src/modules/fingerprint/hardware.d.ts.map +0 -1
  71. package/dist/src/modules/fingerprint/hashing.d.ts +0 -29
  72. package/dist/src/modules/fingerprint/hashing.d.ts.map +0 -1
  73. package/dist/src/modules/fingerprint/incognito.d.ts +0 -6
  74. package/dist/src/modules/fingerprint/incognito.d.ts.map +0 -1
  75. package/dist/src/modules/fingerprint/math-enhanced.d.ts +0 -70
  76. package/dist/src/modules/fingerprint/math-enhanced.d.ts.map +0 -1
  77. package/dist/src/modules/fingerprint/math.d.ts +0 -32
  78. package/dist/src/modules/fingerprint/math.d.ts.map +0 -1
  79. package/dist/src/modules/fingerprint/plugins-enhanced.d.ts +0 -97
  80. package/dist/src/modules/fingerprint/plugins-enhanced.d.ts.map +0 -1
  81. package/dist/src/modules/fingerprint/screen.d.ts +0 -15
  82. package/dist/src/modules/fingerprint/screen.d.ts.map +0 -1
  83. package/dist/src/modules/fingerprint/storage.d.ts +0 -45
  84. package/dist/src/modules/fingerprint/storage.d.ts.map +0 -1
  85. package/dist/src/modules/fingerprint/system.d.ts +0 -40
  86. package/dist/src/modules/fingerprint/system.d.ts.map +0 -1
  87. package/dist/src/modules/fingerprint/webgl.d.ts +0 -15
  88. package/dist/src/modules/fingerprint/webgl.d.ts.map +0 -1
  89. package/dist/src/modules/fingerprint.d.ts +0 -35
  90. package/dist/src/modules/fingerprint.d.ts.map +0 -1
  91. package/dist/src/modules/global-interface.d.ts +0 -157
  92. package/dist/src/modules/global-interface.d.ts.map +0 -1
  93. package/dist/src/modules/heatmap.d.ts +0 -145
  94. package/dist/src/modules/heatmap.d.ts.map +0 -1
  95. package/dist/src/modules/incognito-detection.d.ts +0 -23
  96. package/dist/src/modules/incognito-detection.d.ts.map +0 -1
  97. package/dist/src/modules/session-replay.d.ts +0 -93
  98. package/dist/src/modules/session-replay.d.ts.map +0 -1
  99. package/dist/src/modules/user-agent.d.ts +0 -35
  100. package/dist/src/modules/user-agent.d.ts.map +0 -1
  101. package/dist/src/modules/visitor-persistence.d.ts +0 -51
  102. package/dist/src/modules/visitor-persistence.d.ts.map +0 -1
  103. package/dist/src/sdk.d.ts +0 -285
  104. package/dist/src/sdk.d.ts.map +0 -1
  105. package/dist/src/types/config.d.ts +0 -44
  106. package/dist/src/types/config.d.ts.map +0 -1
  107. package/dist/src/types/detection.d.ts +0 -114
  108. package/dist/src/types/detection.d.ts.map +0 -1
  109. package/dist/src/types/events.d.ts +0 -174
  110. package/dist/src/types/events.d.ts.map +0 -1
  111. package/dist/src/types/fingerprint.d.ts +0 -252
  112. package/dist/src/types/fingerprint.d.ts.map +0 -1
  113. package/dist/src/types/index.d.ts +0 -83
  114. package/dist/src/types/index.d.ts.map +0 -1
  115. package/dist/src/types/methods.d.ts +0 -83
  116. package/dist/src/types/methods.d.ts.map +0 -1
  117. package/dist/src/types/visitor.d.ts +0 -90
  118. package/dist/src/types/visitor.d.ts.map +0 -1
  119. package/dist/src/utils/browser.d.ts +0 -114
  120. package/dist/src/utils/browser.d.ts.map +0 -1
  121. package/dist/src/utils/lazy-loader.d.ts +0 -60
  122. package/dist/src/utils/lazy-loader.d.ts.map +0 -1
  123. package/dist/src/utils/session-utils.d.ts +0 -58
  124. package/dist/src/utils/session-utils.d.ts.map +0 -1
  125. package/dist/src/utils/webgl-cache.d.ts +0 -43
  126. package/dist/src/utils/webgl-cache.d.ts.map +0 -1
@@ -0,0 +1,10 @@
1
+ /*!
2
+ * Zaplier SDK v2.0.0 - Ultra Minimal
3
+ * (c) 2025 Zaplier Team
4
+ */
5
+ function e(){const e=document.createElement("canvas"),t=e.getContext("2d")
6
+ t&&(t.textBaseline="top",t.font="14px Arial",t.fillText("Zaplier",2,2))
7
+ const n=[navigator.userAgent,navigator.language,screen.width+"x"+screen.height,(new Date).getTimezoneOffset(),e.toDataURL(),navigator.hardwareConcurrency||0,navigator.maxTouchPoints||0]
8
+ return btoa(n.join("|")).slice(0,32)}function t(e){return new n(e)}class n{constructor(t){this.config=t,this.visitorId=e(),this.sessionId=(()=>{const t=new Date,n=t.getFullYear()+(t.getMonth()+1+"").padStart(2,"0")+(t.getDate()+"").padStart(2,"0"),i=(t.getHours()+"").padStart(2,"0")
9
+ return`${e()}_${n}_${i}`})(),this.track("page_view",{url:location.href,referrer:document.referrer})}track(e,t={}){(async(e,t)=>{try{await fetch(`${e.endpoint||"https://api.zaplier.com"}/events?token=${encodeURIComponent(e.token)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t),keepalive:1})}catch(t){e.debug}})(this.config,{eventType:"page_view"===e?"page_view":"custom",eventName:e,sessionId:this.sessionId,visitorId:this.visitorId,timestamp:(new Date).toISOString(),...t})}getVisitor(){return{visitorId:this.visitorId,sessionId:this.sessionId}}}"undefined"!=typeof window&&(window.ZaplierMinimal={ZaplierMinimal:n,init:t})
10
+ export{n as ZaplierMinimal,t as init}
package/dist/index.cjs CHANGED
@@ -21386,7 +21386,7 @@ class ZaplierSDK {
21386
21386
  }
21387
21387
  }
21388
21388
  /**
21389
- * Initialize SDK
21389
+ * Initialize SDK - Non-blocking approach
21390
21390
  */
21391
21391
  async initialize() {
21392
21392
  try {
@@ -21400,21 +21400,19 @@ class ZaplierSDK {
21400
21400
  }
21401
21401
  return;
21402
21402
  }
21403
- // Collect fingerprint
21404
- await this.collectFingerprint();
21405
- // Auto-track page view if enabled
21403
+ // CRITICAL: Initialize basic tracking immediately (non-blocking)
21404
+ this.isInitialized = true;
21405
+ // Auto-track page view if enabled (immediate, before fingerprinting)
21406
21406
  if (this.config.autoTrack) {
21407
21407
  this.trackPageView();
21408
21408
  }
21409
- this.isInitialized = true;
21410
- // Initialize anti-adblock system first
21411
- this.initializeAntiAdblock();
21412
- // Then initialize tracking engines (they'll connect to anti-adblock)
21413
- this.initializeTrackingEngines();
21414
- // Initialize auto tracker
21415
- this.initializeAutoTracker();
21416
- // Process queued events
21409
+ // Process any queued events immediately
21417
21410
  this.processEventQueue();
21411
+ // PERFORMANCE: Defer heavy operations to avoid blocking main thread
21412
+ this.deferHeavyOperations();
21413
+ if (this.config.debug) {
21414
+ console.log("[Zaplier] Core SDK initialized (deferring heavy operations)");
21415
+ }
21418
21416
  if (this.config.debug) {
21419
21417
  console.log("[Zaplier] SDK initialized successfully", {
21420
21418
  visitorId: this.visitorId,
@@ -21426,6 +21424,55 @@ class ZaplierSDK {
21426
21424
  console.error("[Zaplier] Initialization failed:", error);
21427
21425
  }
21428
21426
  }
21427
+ /**
21428
+ * Defer heavy operations to avoid blocking main thread
21429
+ */
21430
+ deferHeavyOperations() {
21431
+ // Use requestIdleCallback for optimal performance, fallback to setTimeout
21432
+ const scheduleWork = (callback, timeout = 5000) => {
21433
+ if (typeof requestIdleCallback !== 'undefined') {
21434
+ requestIdleCallback(callback, { timeout });
21435
+ }
21436
+ else {
21437
+ setTimeout(callback, 100); // Small delay fallback
21438
+ }
21439
+ };
21440
+ // Schedule fingerprinting when browser is idle
21441
+ scheduleWork(async () => {
21442
+ try {
21443
+ await this.collectFingerprint();
21444
+ if (this.config.debug) {
21445
+ console.log("[Zaplier] Fingerprint collected (deferred)");
21446
+ }
21447
+ }
21448
+ catch (error) {
21449
+ if (this.config.debug) {
21450
+ console.error("[Zaplier] Deferred fingerprinting failed:", error);
21451
+ }
21452
+ }
21453
+ }, 3000);
21454
+ // Schedule anti-adblock initialization
21455
+ scheduleWork(() => {
21456
+ this.initializeAntiAdblock();
21457
+ if (this.config.debug) {
21458
+ console.log("[Zaplier] Anti-adblock initialized (deferred)");
21459
+ }
21460
+ }, 1000);
21461
+ // Schedule tracking engines initialization
21462
+ scheduleWork(() => {
21463
+ this.initializeTrackingEngines();
21464
+ if (this.config.debug) {
21465
+ console.log("[Zaplier] Tracking engines initialized (deferred)");
21466
+ }
21467
+ }, 2000);
21468
+ // Schedule auto tracker initialization
21469
+ scheduleWork(() => {
21470
+ this.initializeAutoTracker();
21471
+ if (this.config.debug) {
21472
+ console.log("[Zaplier] Auto tracker initialized (deferred)");
21473
+ }
21474
+ }, 1500);
21475
+ }
21429
21476
  /**
21430
21477
  * Initialize tracking engines (Session Replay & Heatmap)
21431
21478
  */
package/dist/index.d.ts CHANGED
@@ -751,9 +751,13 @@ declare class ZaplierSDK implements ZaplierSDK$1 {
751
751
  private visitorIdentityManager?;
752
752
  constructor(userConfig: SDKConfig);
753
753
  /**
754
- * Initialize SDK
754
+ * Initialize SDK - Non-blocking approach
755
755
  */
756
756
  private initialize;
757
+ /**
758
+ * Defer heavy operations to avoid blocking main thread
759
+ */
760
+ private deferHeavyOperations;
757
761
  /**
758
762
  * Initialize tracking engines (Session Replay & Heatmap)
759
763
  */
package/dist/index.esm.js CHANGED
@@ -21382,7 +21382,7 @@ class ZaplierSDK {
21382
21382
  }
21383
21383
  }
21384
21384
  /**
21385
- * Initialize SDK
21385
+ * Initialize SDK - Non-blocking approach
21386
21386
  */
21387
21387
  async initialize() {
21388
21388
  try {
@@ -21396,21 +21396,19 @@ class ZaplierSDK {
21396
21396
  }
21397
21397
  return;
21398
21398
  }
21399
- // Collect fingerprint
21400
- await this.collectFingerprint();
21401
- // Auto-track page view if enabled
21399
+ // CRITICAL: Initialize basic tracking immediately (non-blocking)
21400
+ this.isInitialized = true;
21401
+ // Auto-track page view if enabled (immediate, before fingerprinting)
21402
21402
  if (this.config.autoTrack) {
21403
21403
  this.trackPageView();
21404
21404
  }
21405
- this.isInitialized = true;
21406
- // Initialize anti-adblock system first
21407
- this.initializeAntiAdblock();
21408
- // Then initialize tracking engines (they'll connect to anti-adblock)
21409
- this.initializeTrackingEngines();
21410
- // Initialize auto tracker
21411
- this.initializeAutoTracker();
21412
- // Process queued events
21405
+ // Process any queued events immediately
21413
21406
  this.processEventQueue();
21407
+ // PERFORMANCE: Defer heavy operations to avoid blocking main thread
21408
+ this.deferHeavyOperations();
21409
+ if (this.config.debug) {
21410
+ console.log("[Zaplier] Core SDK initialized (deferring heavy operations)");
21411
+ }
21414
21412
  if (this.config.debug) {
21415
21413
  console.log("[Zaplier] SDK initialized successfully", {
21416
21414
  visitorId: this.visitorId,
@@ -21422,6 +21420,55 @@ class ZaplierSDK {
21422
21420
  console.error("[Zaplier] Initialization failed:", error);
21423
21421
  }
21424
21422
  }
21423
+ /**
21424
+ * Defer heavy operations to avoid blocking main thread
21425
+ */
21426
+ deferHeavyOperations() {
21427
+ // Use requestIdleCallback for optimal performance, fallback to setTimeout
21428
+ const scheduleWork = (callback, timeout = 5000) => {
21429
+ if (typeof requestIdleCallback !== 'undefined') {
21430
+ requestIdleCallback(callback, { timeout });
21431
+ }
21432
+ else {
21433
+ setTimeout(callback, 100); // Small delay fallback
21434
+ }
21435
+ };
21436
+ // Schedule fingerprinting when browser is idle
21437
+ scheduleWork(async () => {
21438
+ try {
21439
+ await this.collectFingerprint();
21440
+ if (this.config.debug) {
21441
+ console.log("[Zaplier] Fingerprint collected (deferred)");
21442
+ }
21443
+ }
21444
+ catch (error) {
21445
+ if (this.config.debug) {
21446
+ console.error("[Zaplier] Deferred fingerprinting failed:", error);
21447
+ }
21448
+ }
21449
+ }, 3000);
21450
+ // Schedule anti-adblock initialization
21451
+ scheduleWork(() => {
21452
+ this.initializeAntiAdblock();
21453
+ if (this.config.debug) {
21454
+ console.log("[Zaplier] Anti-adblock initialized (deferred)");
21455
+ }
21456
+ }, 1000);
21457
+ // Schedule tracking engines initialization
21458
+ scheduleWork(() => {
21459
+ this.initializeTrackingEngines();
21460
+ if (this.config.debug) {
21461
+ console.log("[Zaplier] Tracking engines initialized (deferred)");
21462
+ }
21463
+ }, 2000);
21464
+ // Schedule auto tracker initialization
21465
+ scheduleWork(() => {
21466
+ this.initializeAutoTracker();
21467
+ if (this.config.debug) {
21468
+ console.log("[Zaplier] Auto tracker initialized (deferred)");
21469
+ }
21470
+ }, 1500);
21471
+ }
21425
21472
  /**
21426
21473
  * Initialize tracking engines (Session Replay & Heatmap)
21427
21474
  */
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Zaplier SDK Core v2.0.0 - Performance Optimized
3
+ * Minimal core for instant initialization with lazy loading
4
+ */
5
+ interface CoreConfig {
6
+ token: string;
7
+ debug?: boolean;
8
+ apiEndpoint?: string;
9
+ allow_localhost?: boolean;
10
+ replay?: boolean;
11
+ replaySampling?: number;
12
+ deferAdvanced?: boolean;
13
+ loadTimeout?: number;
14
+ }
15
+ /**
16
+ * Minimal SDK Core - Only essential tracking functionality
17
+ * Heavy operations are lazy-loaded to avoid blocking main thread
18
+ */
19
+ declare class ZaplierCore {
20
+ private config;
21
+ private eventQueue;
22
+ private isInitialized;
23
+ private sessionId?;
24
+ private visitorId?;
25
+ private modules;
26
+ private readonly version;
27
+ constructor(config: CoreConfig);
28
+ /**
29
+ * Instant core initialization - only essential setup
30
+ */
31
+ private initializeCore;
32
+ /**
33
+ * Track page view immediately (core functionality)
34
+ */
35
+ trackPageView(data?: any): void;
36
+ /**
37
+ * Track custom event immediately
38
+ */
39
+ track(eventName: string, data?: any): void;
40
+ /**
41
+ * Enable advanced features (lazy loading)
42
+ */
43
+ enableAdvancedFeatures(): Promise<void>;
44
+ /**
45
+ * Load fingerprinting module
46
+ */
47
+ private loadFingerprinting;
48
+ /**
49
+ * Load replay module
50
+ */
51
+ private loadReplayModule;
52
+ /**
53
+ * Schedule advanced loading when browser is idle
54
+ */
55
+ private scheduleAdvancedLoading;
56
+ /**
57
+ * Send event to backend (simplified)
58
+ */
59
+ private sendEvent;
60
+ /**
61
+ * Process queued events
62
+ */
63
+ private processEventQueue;
64
+ /**
65
+ * Generate temporary session ID
66
+ */
67
+ private generateTempSessionId;
68
+ /**
69
+ * Generate temporary visitor ID
70
+ */
71
+ private generateTempVisitorId;
72
+ /**
73
+ * Get visitor info (for compatibility)
74
+ */
75
+ getVisitorInfo(): {
76
+ visitorId: string | undefined;
77
+ sessionId: string | undefined;
78
+ isReady: boolean;
79
+ hasFingerprint: boolean;
80
+ };
81
+ }
82
+ /**
83
+ * Factory function for easy initialization
84
+ */
85
+ declare function initZaplierCore(config: CoreConfig): ZaplierCore;
86
+
87
+ export { ZaplierCore, ZaplierCore as default, initZaplierCore };
88
+ export type { CoreConfig };
@@ -0,0 +1,245 @@
1
+ /*!
2
+ * Zaplier SDK v2.0.0 - Performance Optimized
3
+ * Advanced privacy-first tracking with code splitting
4
+ * (c) 2025 Zaplier Team
5
+ */
6
+ /**
7
+ * Zaplier SDK Core v2.0.0 - Performance Optimized
8
+ * Minimal core for instant initialization with lazy loading
9
+ */
10
+ /**
11
+ * Minimal SDK Core - Only essential tracking functionality
12
+ * Heavy operations are lazy-loaded to avoid blocking main thread
13
+ */
14
+ class ZaplierCore {
15
+ constructor(config) {
16
+ this.eventQueue = [];
17
+ this.isInitialized = false;
18
+ this.modules = new Map();
19
+ this.version = "2.0.0";
20
+ this.config = {
21
+ deferAdvanced: true,
22
+ loadTimeout: 5000,
23
+ debug: false,
24
+ ...config
25
+ };
26
+ // Immediate initialization (< 1ms)
27
+ this.initializeCore();
28
+ }
29
+ /**
30
+ * Instant core initialization - only essential setup
31
+ */
32
+ initializeCore() {
33
+ try {
34
+ if (this.config.debug) {
35
+ console.log(`[Zaplier Core] v${this.version} initializing...`);
36
+ }
37
+ // Generate temporary IDs immediately
38
+ this.sessionId = this.generateTempSessionId();
39
+ this.visitorId = this.generateTempVisitorId();
40
+ this.isInitialized = true;
41
+ // Process any queued events
42
+ this.processEventQueue();
43
+ if (this.config.debug) {
44
+ console.log(`[Zaplier Core] Initialized in < 1ms (modules will load lazily)`);
45
+ }
46
+ // Schedule advanced features if not deferred
47
+ if (!this.config.deferAdvanced) {
48
+ this.scheduleAdvancedLoading();
49
+ }
50
+ }
51
+ catch (error) {
52
+ console.error("[Zaplier Core] Initialization failed:", error);
53
+ }
54
+ }
55
+ /**
56
+ * Track page view immediately (core functionality)
57
+ */
58
+ trackPageView(data = {}) {
59
+ if (this.config.debug) {
60
+ console.log("[Zaplier Core] Tracking page view (immediate)");
61
+ }
62
+ const event = {
63
+ eventType: 'page_view',
64
+ eventName: 'page_view',
65
+ sessionId: this.sessionId,
66
+ visitorId: this.visitorId,
67
+ url: window.location.href,
68
+ referrer: document.referrer,
69
+ timestamp: new Date().toISOString(),
70
+ ...data
71
+ };
72
+ // Send immediately without heavy processing
73
+ this.sendEvent(event);
74
+ }
75
+ /**
76
+ * Track custom event immediately
77
+ */
78
+ track(eventName, data = {}) {
79
+ if (this.config.debug) {
80
+ console.log(`[Zaplier Core] Tracking event: ${eventName}`);
81
+ }
82
+ const event = {
83
+ eventType: 'custom',
84
+ eventName,
85
+ sessionId: this.sessionId,
86
+ visitorId: this.visitorId,
87
+ timestamp: new Date().toISOString(),
88
+ ...data
89
+ };
90
+ this.sendEvent(event);
91
+ }
92
+ /**
93
+ * Enable advanced features (lazy loading)
94
+ */
95
+ async enableAdvancedFeatures() {
96
+ if (this.config.debug) {
97
+ console.log("[Zaplier Core] Loading advanced features...");
98
+ }
99
+ try {
100
+ // Load fingerprinting
101
+ await this.loadFingerprinting();
102
+ // Load other modules based on config
103
+ if (this.config.replay) {
104
+ await this.loadReplayModule();
105
+ }
106
+ // Add other modules as needed
107
+ if (this.config.debug) {
108
+ console.log("[Zaplier Core] Advanced features loaded");
109
+ }
110
+ }
111
+ catch (error) {
112
+ console.error("[Zaplier Core] Failed to load advanced features:", error);
113
+ }
114
+ }
115
+ /**
116
+ * Load fingerprinting module
117
+ */
118
+ async loadFingerprinting() {
119
+ if (this.modules.has('fingerprint'))
120
+ return;
121
+ try {
122
+ const { getCompleteFingerprint } = await import('./chunks/fingerprint-BpVzoJ8I.js');
123
+ const fingerprint = await getCompleteFingerprint();
124
+ if (fingerprint.success && fingerprint.data) {
125
+ // Update visitor ID with real fingerprint hash
126
+ this.visitorId = fingerprint.data.hash || this.visitorId;
127
+ this.modules.set('fingerprint', fingerprint.data);
128
+ if (this.config.debug) {
129
+ console.log("[Zaplier Core] Fingerprinting loaded");
130
+ }
131
+ }
132
+ }
133
+ catch (error) {
134
+ console.error("[Zaplier Core] Fingerprinting failed:", error);
135
+ }
136
+ }
137
+ /**
138
+ * Load replay module
139
+ */
140
+ async loadReplayModule() {
141
+ if (this.modules.has('replay'))
142
+ return;
143
+ try {
144
+ const { SessionReplayEngine } = await import('./chunks/session-replay-_79DdSl3.js');
145
+ const replayEngine = new SessionReplayEngine(this.sessionId, this.visitorId, {
146
+ sampleRate: this.config.replaySampling || 0.1,
147
+ });
148
+ if (replayEngine.start()) {
149
+ this.modules.set('replay', replayEngine);
150
+ if (this.config.debug) {
151
+ console.log("[Zaplier Core] Session replay loaded");
152
+ }
153
+ }
154
+ }
155
+ catch (error) {
156
+ console.error("[Zaplier Core] Replay loading failed:", error);
157
+ }
158
+ }
159
+ /**
160
+ * Schedule advanced loading when browser is idle
161
+ */
162
+ scheduleAdvancedLoading() {
163
+ const scheduleWork = (callback, delay = 100) => {
164
+ if (typeof requestIdleCallback !== 'undefined') {
165
+ requestIdleCallback(callback, { timeout: this.config.loadTimeout });
166
+ }
167
+ else {
168
+ setTimeout(callback, delay);
169
+ }
170
+ };
171
+ scheduleWork(() => this.enableAdvancedFeatures());
172
+ }
173
+ /**
174
+ * Send event to backend (simplified)
175
+ */
176
+ async sendEvent(event) {
177
+ try {
178
+ // Simple fetch without heavy processing
179
+ const response = await fetch(`${this.config.apiEndpoint || 'https://api.zaplier.com'}/events?token=${encodeURIComponent(this.config.token)}`, {
180
+ method: 'POST',
181
+ headers: {
182
+ 'Content-Type': 'application/json',
183
+ },
184
+ body: JSON.stringify(event),
185
+ keepalive: true, // Important for page unload events
186
+ });
187
+ if (this.config.debug && !response.ok) {
188
+ console.warn(`[Zaplier Core] Event sending failed: ${response.status}`);
189
+ }
190
+ }
191
+ catch (error) {
192
+ // Queue for retry if needed
193
+ this.eventQueue.push(event);
194
+ if (this.config.debug) {
195
+ console.warn("[Zaplier Core] Event queued for retry:", error);
196
+ }
197
+ }
198
+ }
199
+ /**
200
+ * Process queued events
201
+ */
202
+ processEventQueue() {
203
+ if (this.eventQueue.length === 0)
204
+ return;
205
+ const events = [...this.eventQueue];
206
+ this.eventQueue = [];
207
+ events.forEach(event => this.sendEvent(event));
208
+ }
209
+ /**
210
+ * Generate temporary session ID
211
+ */
212
+ generateTempSessionId() {
213
+ const now = new Date();
214
+ const dateStr = now.getFullYear() +
215
+ (now.getMonth() + 1).toString().padStart(2, '0') +
216
+ now.getDate().toString().padStart(2, '0');
217
+ const hour = now.getHours().toString().padStart(2, '0');
218
+ return `temp_${Date.now()}_${dateStr}_${hour}`;
219
+ }
220
+ /**
221
+ * Generate temporary visitor ID
222
+ */
223
+ generateTempVisitorId() {
224
+ return `temp_visitor_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
225
+ }
226
+ /**
227
+ * Get visitor info (for compatibility)
228
+ */
229
+ getVisitorInfo() {
230
+ return {
231
+ visitorId: this.visitorId,
232
+ sessionId: this.sessionId,
233
+ isReady: this.isInitialized,
234
+ hasFingerprint: this.modules.has('fingerprint'),
235
+ };
236
+ }
237
+ }
238
+ /**
239
+ * Factory function for easy initialization
240
+ */
241
+ function initZaplierCore(config) {
242
+ return new ZaplierCore(config);
243
+ }
244
+
245
+ export { ZaplierCore, ZaplierCore as default, initZaplierCore };