mixpanel-browser 2.79.0 → 2.80.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 (31) hide show
  1. package/.github/workflows/integration-tests.yml +1 -0
  2. package/CHANGELOG.md +6 -0
  3. package/dist/async-modules/{mixpanel-recorder-D5HJyV2E.min.js → mixpanel-recorder-B61POiHc.min.js} +2 -2
  4. package/dist/async-modules/{mixpanel-recorder-D5HJyV2E.min.js.map → mixpanel-recorder-B61POiHc.min.js.map} +1 -1
  5. package/dist/async-modules/{mixpanel-recorder-P6SEnnPV.js → mixpanel-recorder-C3AW7mPl.js} +7 -3
  6. package/dist/async-modules/{mixpanel-targeting-BBMVbgJF.js → mixpanel-targeting-CBwOQJZw.js} +1 -1
  7. package/dist/async-modules/{mixpanel-targeting-1L9FyetZ.min.js → mixpanel-targeting-kdl-eE-1.min.js} +2 -2
  8. package/dist/async-modules/{mixpanel-targeting-1L9FyetZ.min.js.map → mixpanel-targeting-kdl-eE-1.min.js.map} +1 -1
  9. package/dist/mixpanel-core.cjs.js +13 -13
  10. package/dist/mixpanel-recorder.js +7 -3
  11. package/dist/mixpanel-recorder.min.js +1 -1
  12. package/dist/mixpanel-recorder.min.js.map +1 -1
  13. package/dist/mixpanel-targeting.js +1 -1
  14. package/dist/mixpanel-targeting.min.js +1 -1
  15. package/dist/mixpanel-targeting.min.js.map +1 -1
  16. package/dist/mixpanel-with-async-modules.cjs.js +15 -15
  17. package/dist/mixpanel-with-async-recorder.cjs.js +15 -15
  18. package/dist/mixpanel-with-recorder.js +19 -15
  19. package/dist/mixpanel-with-recorder.min.js +1 -1
  20. package/dist/mixpanel.amd.js +19 -15
  21. package/dist/mixpanel.cjs.js +19 -15
  22. package/dist/mixpanel.globals.js +15 -15
  23. package/dist/mixpanel.min.js +104 -104
  24. package/dist/mixpanel.module.js +19 -15
  25. package/dist/mixpanel.umd.js +19 -15
  26. package/package.json +1 -1
  27. package/src/autocapture/index.js +10 -10
  28. package/src/config.js +1 -1
  29. package/src/flags/index.js +2 -2
  30. package/src/recorder/session-recording.js +6 -2
  31. package/.claude/settings.local.json +0 -11
@@ -2,7 +2,7 @@
2
2
 
3
3
  var Config = {
4
4
  DEBUG: false,
5
- LIB_VERSION: '2.79.0'
5
+ LIB_VERSION: '2.80.0'
6
6
  };
7
7
 
8
8
  // Window global names for async modules
@@ -10,8 +10,8 @@ var TARGETING_GLOBAL_NAME = '__mp_targeting';
10
10
  var RECORDER_GLOBAL_NAME = '__mp_recorder';
11
11
 
12
12
  // Constants that are injected at build-time for the names of async modules.
13
- var RECORDER_FILENAME = 'mixpanel-recorder-P6SEnnPV.js';
14
- var TARGETING_FILENAME = 'mixpanel-targeting-BBMVbgJF.js';
13
+ var RECORDER_FILENAME = 'mixpanel-recorder-C3AW7mPl.js';
14
+ var TARGETING_FILENAME = 'mixpanel-targeting-CBwOQJZw.js';
15
15
 
16
16
  // since es6 imports are static and we run unit tests from the console, window won't be defined when importing this file
17
17
  var win;
@@ -3618,7 +3618,7 @@ Autocapture.prototype._initScrollDepthTracking = function() {
3618
3618
  };
3619
3619
 
3620
3620
  Autocapture.prototype.initClickTracking = function() {
3621
- win.removeEventListener(EV_CLICK, this.listenerClick);
3621
+ win.removeEventListener(EV_CLICK, this.listenerClick, true);
3622
3622
 
3623
3623
  if (!this.getConfig(CONFIG_TRACK_CLICK) && !this.mp.get_config('record_heatmap_data')) {
3624
3624
  return;
@@ -3631,7 +3631,7 @@ Autocapture.prototype.initClickTracking = function() {
3631
3631
  }
3632
3632
  this.trackDomEvent(ev, MP_EV_CLICK);
3633
3633
  }.bind(this);
3634
- win.addEventListener(EV_CLICK, this.listenerClick);
3634
+ win.addEventListener(EV_CLICK, this.listenerClick, true);
3635
3635
  };
3636
3636
 
3637
3637
  Autocapture.prototype.initDeadClickTracking = function() {
@@ -3666,12 +3666,12 @@ Autocapture.prototype.initDeadClickTracking = function() {
3666
3666
  }
3667
3667
  this._deadClickTracker.trackClick(ev, normalizedConfig);
3668
3668
  }.bind(this);
3669
- win.addEventListener(EV_CLICK, this.listenerDeadClick);
3669
+ win.addEventListener(EV_CLICK, this.listenerDeadClick, true);
3670
3670
  }
3671
3671
  };
3672
3672
 
3673
3673
  Autocapture.prototype.initInputTracking = function() {
3674
- win.removeEventListener(EV_CHANGE, this.listenerChange);
3674
+ win.removeEventListener(EV_CHANGE, this.listenerChange, true);
3675
3675
 
3676
3676
  if (!this.getConfig(CONFIG_TRACK_INPUT)) {
3677
3677
  return;
@@ -3684,7 +3684,7 @@ Autocapture.prototype.initInputTracking = function() {
3684
3684
  }
3685
3685
  this.trackDomEvent(ev, MP_EV_INPUT);
3686
3686
  }.bind(this);
3687
- win.addEventListener(EV_CHANGE, this.listenerChange);
3687
+ win.addEventListener(EV_CHANGE, this.listenerChange, true);
3688
3688
  };
3689
3689
 
3690
3690
  Autocapture.prototype.initPageviewTracking = function() {
@@ -3741,7 +3741,7 @@ Autocapture.prototype.initPageviewTracking = function() {
3741
3741
  };
3742
3742
 
3743
3743
  Autocapture.prototype.initRageClickTracking = function() {
3744
- win.removeEventListener(EV_CLICK, this.listenerRageClick);
3744
+ win.removeEventListener(EV_CLICK, this.listenerRageClick, true);
3745
3745
 
3746
3746
  var rageClickConfig = this._getClickTrackingConfig(CONFIG_TRACK_RAGE_CLICK);
3747
3747
  if (!rageClickConfig && !this.mp.get_config('record_heatmap_data')) {
@@ -3767,7 +3767,7 @@ Autocapture.prototype.initRageClickTracking = function() {
3767
3767
  this.trackDomEvent(ev, MP_EV_RAGE_CLICK);
3768
3768
  }
3769
3769
  }.bind(this);
3770
- win.addEventListener(EV_CLICK, this.listenerRageClick);
3770
+ win.addEventListener(EV_CLICK, this.listenerRageClick, true);
3771
3771
  };
3772
3772
 
3773
3773
  Autocapture.prototype.initScrollTracking = function() {
@@ -3828,7 +3828,7 @@ Autocapture.prototype.initScrollTracking = function() {
3828
3828
  };
3829
3829
 
3830
3830
  Autocapture.prototype.initSubmitTracking = function() {
3831
- win.removeEventListener(EV_SUBMIT, this.listenerSubmit);
3831
+ win.removeEventListener(EV_SUBMIT, this.listenerSubmit, true);
3832
3832
 
3833
3833
  if (!this.getConfig(CONFIG_TRACK_SUBMIT)) {
3834
3834
  return;
@@ -3841,7 +3841,7 @@ Autocapture.prototype.initSubmitTracking = function() {
3841
3841
  }
3842
3842
  this.trackDomEvent(ev, MP_EV_SUBMIT);
3843
3843
  }.bind(this);
3844
- win.addEventListener(EV_SUBMIT, this.listenerSubmit);
3844
+ win.addEventListener(EV_SUBMIT, this.listenerSubmit, true);
3845
3845
  };
3846
3846
 
3847
3847
  Autocapture.prototype.initPageLeaveTracking = function() {
@@ -3897,7 +3897,7 @@ Autocapture.prototype.initPageLeaveTracking = function() {
3897
3897
 
3898
3898
  Autocapture.prototype.stopDeadClickTracking = function() {
3899
3899
  if (this.listenerDeadClick) {
3900
- win.removeEventListener(EV_CLICK, this.listenerDeadClick);
3900
+ win.removeEventListener(EV_CLICK, this.listenerDeadClick, true);
3901
3901
  this.listenerDeadClick = null;
3902
3902
  }
3903
3903
 
@@ -4684,8 +4684,8 @@ FeatureFlagManager.prototype._processFirstTimeEventCheck = function(eventName, p
4684
4684
  };
4685
4685
 
4686
4686
  FeatureFlagManager.prototype.getFirstTimeEventApiRoute = function(flagId) {
4687
- // Construct URL: {api_host}/flags/{flagId}/first-time-events
4688
- return this.getFullApiRoute() + '/' + flagId + '/first-time-events';
4687
+ var base = this.getFullApiRoute().replace(/\/$/, '');
4688
+ return base + '/' + flagId + '/first-time-events';
4689
4689
  };
4690
4690
 
4691
4691
  FeatureFlagManager.prototype.recordFirstTimeEvent = function(flagId, projectId, firstTimeEventHash) {
@@ -2,7 +2,7 @@
2
2
 
3
3
  var Config = {
4
4
  DEBUG: false,
5
- LIB_VERSION: '2.79.0'
5
+ LIB_VERSION: '2.80.0'
6
6
  };
7
7
 
8
8
  // Window global names for async modules
@@ -10,8 +10,8 @@ var TARGETING_GLOBAL_NAME = '__mp_targeting';
10
10
  var RECORDER_GLOBAL_NAME = '__mp_recorder';
11
11
 
12
12
  // Constants that are injected at build-time for the names of async modules.
13
- var RECORDER_FILENAME = 'mixpanel-recorder-P6SEnnPV.js';
14
- var TARGETING_FILENAME = 'mixpanel-targeting-BBMVbgJF.js';
13
+ var RECORDER_FILENAME = 'mixpanel-recorder-C3AW7mPl.js';
14
+ var TARGETING_FILENAME = 'mixpanel-targeting-CBwOQJZw.js';
15
15
 
16
16
  // since es6 imports are static and we run unit tests from the console, window won't be defined when importing this file
17
17
  var win;
@@ -3618,7 +3618,7 @@ Autocapture.prototype._initScrollDepthTracking = function() {
3618
3618
  };
3619
3619
 
3620
3620
  Autocapture.prototype.initClickTracking = function() {
3621
- win.removeEventListener(EV_CLICK, this.listenerClick);
3621
+ win.removeEventListener(EV_CLICK, this.listenerClick, true);
3622
3622
 
3623
3623
  if (!this.getConfig(CONFIG_TRACK_CLICK) && !this.mp.get_config('record_heatmap_data')) {
3624
3624
  return;
@@ -3631,7 +3631,7 @@ Autocapture.prototype.initClickTracking = function() {
3631
3631
  }
3632
3632
  this.trackDomEvent(ev, MP_EV_CLICK);
3633
3633
  }.bind(this);
3634
- win.addEventListener(EV_CLICK, this.listenerClick);
3634
+ win.addEventListener(EV_CLICK, this.listenerClick, true);
3635
3635
  };
3636
3636
 
3637
3637
  Autocapture.prototype.initDeadClickTracking = function() {
@@ -3666,12 +3666,12 @@ Autocapture.prototype.initDeadClickTracking = function() {
3666
3666
  }
3667
3667
  this._deadClickTracker.trackClick(ev, normalizedConfig);
3668
3668
  }.bind(this);
3669
- win.addEventListener(EV_CLICK, this.listenerDeadClick);
3669
+ win.addEventListener(EV_CLICK, this.listenerDeadClick, true);
3670
3670
  }
3671
3671
  };
3672
3672
 
3673
3673
  Autocapture.prototype.initInputTracking = function() {
3674
- win.removeEventListener(EV_CHANGE, this.listenerChange);
3674
+ win.removeEventListener(EV_CHANGE, this.listenerChange, true);
3675
3675
 
3676
3676
  if (!this.getConfig(CONFIG_TRACK_INPUT)) {
3677
3677
  return;
@@ -3684,7 +3684,7 @@ Autocapture.prototype.initInputTracking = function() {
3684
3684
  }
3685
3685
  this.trackDomEvent(ev, MP_EV_INPUT);
3686
3686
  }.bind(this);
3687
- win.addEventListener(EV_CHANGE, this.listenerChange);
3687
+ win.addEventListener(EV_CHANGE, this.listenerChange, true);
3688
3688
  };
3689
3689
 
3690
3690
  Autocapture.prototype.initPageviewTracking = function() {
@@ -3741,7 +3741,7 @@ Autocapture.prototype.initPageviewTracking = function() {
3741
3741
  };
3742
3742
 
3743
3743
  Autocapture.prototype.initRageClickTracking = function() {
3744
- win.removeEventListener(EV_CLICK, this.listenerRageClick);
3744
+ win.removeEventListener(EV_CLICK, this.listenerRageClick, true);
3745
3745
 
3746
3746
  var rageClickConfig = this._getClickTrackingConfig(CONFIG_TRACK_RAGE_CLICK);
3747
3747
  if (!rageClickConfig && !this.mp.get_config('record_heatmap_data')) {
@@ -3767,7 +3767,7 @@ Autocapture.prototype.initRageClickTracking = function() {
3767
3767
  this.trackDomEvent(ev, MP_EV_RAGE_CLICK);
3768
3768
  }
3769
3769
  }.bind(this);
3770
- win.addEventListener(EV_CLICK, this.listenerRageClick);
3770
+ win.addEventListener(EV_CLICK, this.listenerRageClick, true);
3771
3771
  };
3772
3772
 
3773
3773
  Autocapture.prototype.initScrollTracking = function() {
@@ -3828,7 +3828,7 @@ Autocapture.prototype.initScrollTracking = function() {
3828
3828
  };
3829
3829
 
3830
3830
  Autocapture.prototype.initSubmitTracking = function() {
3831
- win.removeEventListener(EV_SUBMIT, this.listenerSubmit);
3831
+ win.removeEventListener(EV_SUBMIT, this.listenerSubmit, true);
3832
3832
 
3833
3833
  if (!this.getConfig(CONFIG_TRACK_SUBMIT)) {
3834
3834
  return;
@@ -3841,7 +3841,7 @@ Autocapture.prototype.initSubmitTracking = function() {
3841
3841
  }
3842
3842
  this.trackDomEvent(ev, MP_EV_SUBMIT);
3843
3843
  }.bind(this);
3844
- win.addEventListener(EV_SUBMIT, this.listenerSubmit);
3844
+ win.addEventListener(EV_SUBMIT, this.listenerSubmit, true);
3845
3845
  };
3846
3846
 
3847
3847
  Autocapture.prototype.initPageLeaveTracking = function() {
@@ -3897,7 +3897,7 @@ Autocapture.prototype.initPageLeaveTracking = function() {
3897
3897
 
3898
3898
  Autocapture.prototype.stopDeadClickTracking = function() {
3899
3899
  if (this.listenerDeadClick) {
3900
- win.removeEventListener(EV_CLICK, this.listenerDeadClick);
3900
+ win.removeEventListener(EV_CLICK, this.listenerDeadClick, true);
3901
3901
  this.listenerDeadClick = null;
3902
3902
  }
3903
3903
 
@@ -4684,8 +4684,8 @@ FeatureFlagManager.prototype._processFirstTimeEventCheck = function(eventName, p
4684
4684
  };
4685
4685
 
4686
4686
  FeatureFlagManager.prototype.getFirstTimeEventApiRoute = function(flagId) {
4687
- // Construct URL: {api_host}/flags/{flagId}/first-time-events
4688
- return this.getFullApiRoute() + '/' + flagId + '/first-time-events';
4687
+ var base = this.getFullApiRoute().replace(/\/$/, '');
4688
+ return base + '/' + flagId + '/first-time-events';
4689
4689
  };
4690
4690
 
4691
4691
  FeatureFlagManager.prototype.recordFirstTimeEvent = function(flagId, projectId, firstTimeEventHash) {
@@ -28,7 +28,7 @@
28
28
 
29
29
  var Config = {
30
30
  DEBUG: false,
31
- LIB_VERSION: '2.79.0'
31
+ LIB_VERSION: '2.80.0'
32
32
  };
33
33
 
34
34
  // Window global names for async modules
@@ -23897,6 +23897,7 @@
23897
23897
 
23898
23898
  this.recordMaxMs = MAX_RECORDING_MS;
23899
23899
  this.recordMinMs = 0;
23900
+ this._recordMinMsCheckStart = null;
23900
23901
 
23901
23902
  // disable persistence if localStorage is not supported
23902
23903
  // request-queue will automatically disable persistence if indexedDB fails to initialize
@@ -24012,6 +24013,7 @@
24012
24013
  // this also applies if the minimum recording length has not been hit yet
24013
24014
  // so that we don't send data until we know the recording will be long enough
24014
24015
  this.batcher.stop();
24016
+ this._recordMinMsCheckStart = null;
24015
24017
  } else {
24016
24018
  this.batcher.start();
24017
24019
  }
@@ -24063,9 +24065,11 @@
24063
24065
  this._onIdleTimeout();
24064
24066
  return;
24065
24067
  }
24068
+ if (this._recordMinMsCheckStart === null) {
24069
+ this._recordMinMsCheckStart = ev.timestamp;
24070
+ }
24066
24071
  if (isUserEvent(ev)) {
24067
- if (this.batcher.stopped && new Date().getTime() - this.replayStartTime >= this.recordMinMs) {
24068
- // start flushing again after user activity
24072
+ if (this.batcher.stopped && ev.timestamp - this._recordMinMsCheckStart >= this.recordMinMs) {
24069
24073
  this.batcher.start();
24070
24074
  }
24071
24075
  resetIdleTimeout();
@@ -25322,7 +25326,7 @@
25322
25326
  };
25323
25327
 
25324
25328
  Autocapture.prototype.initClickTracking = function() {
25325
- win.removeEventListener(EV_CLICK, this.listenerClick);
25329
+ win.removeEventListener(EV_CLICK, this.listenerClick, true);
25326
25330
 
25327
25331
  if (!this.getConfig(CONFIG_TRACK_CLICK) && !this.mp.get_config('record_heatmap_data')) {
25328
25332
  return;
@@ -25335,7 +25339,7 @@
25335
25339
  }
25336
25340
  this.trackDomEvent(ev, MP_EV_CLICK);
25337
25341
  }.bind(this);
25338
- win.addEventListener(EV_CLICK, this.listenerClick);
25342
+ win.addEventListener(EV_CLICK, this.listenerClick, true);
25339
25343
  };
25340
25344
 
25341
25345
  Autocapture.prototype.initDeadClickTracking = function() {
@@ -25370,12 +25374,12 @@
25370
25374
  }
25371
25375
  this._deadClickTracker.trackClick(ev, normalizedConfig);
25372
25376
  }.bind(this);
25373
- win.addEventListener(EV_CLICK, this.listenerDeadClick);
25377
+ win.addEventListener(EV_CLICK, this.listenerDeadClick, true);
25374
25378
  }
25375
25379
  };
25376
25380
 
25377
25381
  Autocapture.prototype.initInputTracking = function() {
25378
- win.removeEventListener(EV_CHANGE, this.listenerChange);
25382
+ win.removeEventListener(EV_CHANGE, this.listenerChange, true);
25379
25383
 
25380
25384
  if (!this.getConfig(CONFIG_TRACK_INPUT)) {
25381
25385
  return;
@@ -25388,7 +25392,7 @@
25388
25392
  }
25389
25393
  this.trackDomEvent(ev, MP_EV_INPUT);
25390
25394
  }.bind(this);
25391
- win.addEventListener(EV_CHANGE, this.listenerChange);
25395
+ win.addEventListener(EV_CHANGE, this.listenerChange, true);
25392
25396
  };
25393
25397
 
25394
25398
  Autocapture.prototype.initPageviewTracking = function() {
@@ -25445,7 +25449,7 @@
25445
25449
  };
25446
25450
 
25447
25451
  Autocapture.prototype.initRageClickTracking = function() {
25448
- win.removeEventListener(EV_CLICK, this.listenerRageClick);
25452
+ win.removeEventListener(EV_CLICK, this.listenerRageClick, true);
25449
25453
 
25450
25454
  var rageClickConfig = this._getClickTrackingConfig(CONFIG_TRACK_RAGE_CLICK);
25451
25455
  if (!rageClickConfig && !this.mp.get_config('record_heatmap_data')) {
@@ -25471,7 +25475,7 @@
25471
25475
  this.trackDomEvent(ev, MP_EV_RAGE_CLICK);
25472
25476
  }
25473
25477
  }.bind(this);
25474
- win.addEventListener(EV_CLICK, this.listenerRageClick);
25478
+ win.addEventListener(EV_CLICK, this.listenerRageClick, true);
25475
25479
  };
25476
25480
 
25477
25481
  Autocapture.prototype.initScrollTracking = function() {
@@ -25532,7 +25536,7 @@
25532
25536
  };
25533
25537
 
25534
25538
  Autocapture.prototype.initSubmitTracking = function() {
25535
- win.removeEventListener(EV_SUBMIT, this.listenerSubmit);
25539
+ win.removeEventListener(EV_SUBMIT, this.listenerSubmit, true);
25536
25540
 
25537
25541
  if (!this.getConfig(CONFIG_TRACK_SUBMIT)) {
25538
25542
  return;
@@ -25545,7 +25549,7 @@
25545
25549
  }
25546
25550
  this.trackDomEvent(ev, MP_EV_SUBMIT);
25547
25551
  }.bind(this);
25548
- win.addEventListener(EV_SUBMIT, this.listenerSubmit);
25552
+ win.addEventListener(EV_SUBMIT, this.listenerSubmit, true);
25549
25553
  };
25550
25554
 
25551
25555
  Autocapture.prototype.initPageLeaveTracking = function() {
@@ -25601,7 +25605,7 @@
25601
25605
 
25602
25606
  Autocapture.prototype.stopDeadClickTracking = function() {
25603
25607
  if (this.listenerDeadClick) {
25604
- win.removeEventListener(EV_CLICK, this.listenerDeadClick);
25608
+ win.removeEventListener(EV_CLICK, this.listenerDeadClick, true);
25605
25609
  this.listenerDeadClick = null;
25606
25610
  }
25607
25611
 
@@ -26262,8 +26266,8 @@
26262
26266
  };
26263
26267
 
26264
26268
  FeatureFlagManager.prototype.getFirstTimeEventApiRoute = function(flagId) {
26265
- // Construct URL: {api_host}/flags/{flagId}/first-time-events
26266
- return this.getFullApiRoute() + '/' + flagId + '/first-time-events';
26269
+ var base = this.getFullApiRoute().replace(/\/$/, '');
26270
+ return base + '/' + flagId + '/first-time-events';
26267
26271
  };
26268
26272
 
26269
26273
  FeatureFlagManager.prototype.recordFirstTimeEvent = function(flagId, projectId, firstTimeEventHash) {