mixpanel-browser 2.67.0 → 2.68.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.
@@ -2,7 +2,7 @@
2
2
 
3
3
  var Config = {
4
4
  DEBUG: false,
5
- LIB_VERSION: '2.67.0'
5
+ LIB_VERSION: '2.68.0'
6
6
  };
7
7
 
8
8
  // since es6 imports are static and we run unit tests from the console, window won't be defined when importing this file
@@ -2654,6 +2654,38 @@ function shouldTrackValue(value) {
2654
2654
  return true;
2655
2655
  }
2656
2656
 
2657
+ /** @const */ var DEFAULT_RAGE_CLICK_THRESHOLD_PX = 30;
2658
+ /** @const */ var DEFAULT_RAGE_CLICK_TIMEOUT_MS = 1000;
2659
+ /** @const */ var DEFAULT_RAGE_CLICK_CLICK_COUNT = 4;
2660
+
2661
+ function RageClickTracker() {
2662
+ this.clicks = [];
2663
+ }
2664
+
2665
+ RageClickTracker.prototype.isRageClick = function(x, y, options) {
2666
+ options = options || {};
2667
+ var thresholdPx = options['threshold_px'] || DEFAULT_RAGE_CLICK_THRESHOLD_PX;
2668
+ var timeoutMs = options['timeout_ms'] || DEFAULT_RAGE_CLICK_TIMEOUT_MS;
2669
+ var clickCount = options['click_count'] || DEFAULT_RAGE_CLICK_CLICK_COUNT;
2670
+ var timestamp = Date.now();
2671
+
2672
+ var lastClick = this.clicks[this.clicks.length - 1];
2673
+ if (
2674
+ lastClick &&
2675
+ timestamp - lastClick.timestamp < timeoutMs &&
2676
+ Math.sqrt(Math.pow(x - lastClick.x, 2) + Math.pow(y - lastClick.y, 2)) < thresholdPx
2677
+ ) {
2678
+ this.clicks.push({ x: x, y: y, timestamp: timestamp });
2679
+ if (this.clicks.length >= clickCount) {
2680
+ this.clicks = [];
2681
+ return true;
2682
+ }
2683
+ } else {
2684
+ this.clicks = [{ x: x, y: y, timestamp: timestamp }];
2685
+ }
2686
+ return false;
2687
+ };
2688
+
2657
2689
  var AUTOCAPTURE_CONFIG_KEY = 'autocapture';
2658
2690
  var LEGACY_PAGEVIEW_CONFIG_KEY = 'track_pageview';
2659
2691
 
@@ -2675,6 +2707,7 @@ var CONFIG_SCROLL_CHECKPOINTS = 'scroll_depth_percent_checkpoints';
2675
2707
  var CONFIG_TRACK_CLICK = 'click';
2676
2708
  var CONFIG_TRACK_INPUT = 'input';
2677
2709
  var CONFIG_TRACK_PAGEVIEW = 'pageview';
2710
+ var CONFIG_TRACK_RAGE_CLICK = 'rage_click';
2678
2711
  var CONFIG_TRACK_SCROLL = 'scroll';
2679
2712
  var CONFIG_TRACK_SUBMIT = 'submit';
2680
2713
 
@@ -2692,6 +2725,7 @@ CONFIG_DEFAULTS$1[CONFIG_SCROLL_CHECKPOINTS] = [25, 50, 75, 100];
2692
2725
  CONFIG_DEFAULTS$1[CONFIG_TRACK_CLICK] = true;
2693
2726
  CONFIG_DEFAULTS$1[CONFIG_TRACK_INPUT] = true;
2694
2727
  CONFIG_DEFAULTS$1[CONFIG_TRACK_PAGEVIEW] = PAGEVIEW_OPTION_FULL_URL;
2728
+ CONFIG_DEFAULTS$1[CONFIG_TRACK_RAGE_CLICK] = true;
2695
2729
  CONFIG_DEFAULTS$1[CONFIG_TRACK_SCROLL] = true;
2696
2730
  CONFIG_DEFAULTS$1[CONFIG_TRACK_SUBMIT] = true;
2697
2731
 
@@ -2701,6 +2735,7 @@ var DEFAULT_PROPS = {
2701
2735
 
2702
2736
  var MP_EV_CLICK = '$mp_click';
2703
2737
  var MP_EV_INPUT = '$mp_input_change';
2738
+ var MP_EV_RAGE_CLICK = '$mp_rage_click';
2704
2739
  var MP_EV_SCROLL = '$mp_scroll';
2705
2740
  var MP_EV_SUBMIT = '$mp_submit';
2706
2741
 
@@ -2723,6 +2758,7 @@ Autocapture.prototype.init = function() {
2723
2758
  this.initInputTracking();
2724
2759
  this.initScrollTracking();
2725
2760
  this.initSubmitTracking();
2761
+ this.initRageClickTracking();
2726
2762
  };
2727
2763
 
2728
2764
  Autocapture.prototype.getFullConfig = function() {
@@ -2801,6 +2837,11 @@ Autocapture.prototype.trackDomEvent = function(ev, mpEventName) {
2801
2837
  return;
2802
2838
  }
2803
2839
 
2840
+ var isCapturedForHeatMap = this.mp.is_recording_heatmap_data() && (
2841
+ (mpEventName === MP_EV_CLICK && !this.getConfig(CONFIG_TRACK_CLICK)) ||
2842
+ (mpEventName === MP_EV_RAGE_CLICK && !this._getRageClickConfig())
2843
+ );
2844
+
2804
2845
  var props = getPropsForDOMEvent(ev, {
2805
2846
  allowElementCallback: this.getConfig(CONFIG_ALLOW_ELEMENT_CALLBACK),
2806
2847
  allowSelectors: this.getConfig(CONFIG_ALLOW_SELECTORS),
@@ -2809,7 +2850,7 @@ Autocapture.prototype.trackDomEvent = function(ev, mpEventName) {
2809
2850
  blockSelectors: this.getConfig(CONFIG_BLOCK_SELECTORS),
2810
2851
  captureExtraAttrs: this.getConfig(CONFIG_CAPTURE_EXTRA_ATTRS),
2811
2852
  captureTextContent: this.getConfig(CONFIG_CAPTURE_TEXT_CONTENT),
2812
- capturedForHeatMap: mpEventName === MP_EV_CLICK && !this.getConfig(CONFIG_TRACK_CLICK) && this.mp.is_recording_heatmap_data(),
2853
+ capturedForHeatMap: isCapturedForHeatMap,
2813
2854
  });
2814
2855
  if (props) {
2815
2856
  _.extend(props, DEFAULT_PROPS);
@@ -2817,6 +2858,24 @@ Autocapture.prototype.trackDomEvent = function(ev, mpEventName) {
2817
2858
  }
2818
2859
  };
2819
2860
 
2861
+ Autocapture.prototype._getRageClickConfig = function() {
2862
+ var config = this.getConfig(CONFIG_TRACK_RAGE_CLICK);
2863
+
2864
+ if (!config) {
2865
+ return null; // rage click tracking disabled
2866
+ }
2867
+
2868
+ if (config === true) {
2869
+ return {}; // use defaults
2870
+ }
2871
+
2872
+ if (typeof config === 'object') {
2873
+ return config; // use custom configuration
2874
+ }
2875
+
2876
+ return {}; // fallback to defaults for any other truthy value
2877
+ };
2878
+
2820
2879
  Autocapture.prototype.initClickTracking = function() {
2821
2880
  win.removeEventListener(EV_CLICK, this.listenerClick);
2822
2881
 
@@ -2918,6 +2977,36 @@ Autocapture.prototype.initPageviewTracking = function() {
2918
2977
  }.bind(this)));
2919
2978
  };
2920
2979
 
2980
+ Autocapture.prototype.initRageClickTracking = function() {
2981
+ win.removeEventListener(EV_CLICK, this.listenerRageClick);
2982
+
2983
+ var rageClickConfig = this._getRageClickConfig();
2984
+ if (!rageClickConfig && !this.mp.get_config('record_heatmap_data')) {
2985
+ return;
2986
+ }
2987
+
2988
+ logger$4.log('Initializing rage click tracking');
2989
+ if (!this._rageClickTracker) {
2990
+ this._rageClickTracker = new RageClickTracker();
2991
+ }
2992
+
2993
+ this.listenerRageClick = function(ev) {
2994
+ var currentRageClickConfig = this._getRageClickConfig();
2995
+ if (!currentRageClickConfig && !this.mp.is_recording_heatmap_data()) {
2996
+ return;
2997
+ }
2998
+
2999
+ if (this.currentUrlBlocked()) {
3000
+ return;
3001
+ }
3002
+
3003
+ if (this._rageClickTracker.isRageClick(ev['pageX'], ev['pageY'], currentRageClickConfig)) {
3004
+ this.trackDomEvent(ev, MP_EV_RAGE_CLICK);
3005
+ }
3006
+ }.bind(this);
3007
+ win.addEventListener(EV_CLICK, this.listenerRageClick);
3008
+ };
3009
+
2921
3010
  Autocapture.prototype.initScrollTracking = function() {
2922
3011
  win.removeEventListener(EV_SCROLLEND, this.listenerScroll);
2923
3012
 
@@ -3004,6 +3093,7 @@ CONFIG_DEFAULTS[CONFIG_CONTEXT] = {};
3004
3093
  var FeatureFlagManager = function(initOptions) {
3005
3094
  this.getFullApiRoute = initOptions.getFullApiRoute;
3006
3095
  this.getMpConfig = initOptions.getConfigFunc;
3096
+ this.setMpConfig = initOptions.setConfigFunc;
3007
3097
  this.getMpProperty = initOptions.getPropertyFunc;
3008
3098
  this.track = initOptions.trackingFunc;
3009
3099
  };
@@ -3041,6 +3131,23 @@ FeatureFlagManager.prototype.isSystemEnabled = function() {
3041
3131
  return !!this.getMpConfig(FLAGS_CONFIG_KEY);
3042
3132
  };
3043
3133
 
3134
+ FeatureFlagManager.prototype.updateContext = function(newContext, options) {
3135
+ if (!this.isSystemEnabled()) {
3136
+ logger$3.critical('Feature Flags not enabled, cannot update context');
3137
+ return Promise.resolve();
3138
+ }
3139
+
3140
+ var ffConfig = this.getMpConfig(FLAGS_CONFIG_KEY);
3141
+ if (!_.isObject(ffConfig)) {
3142
+ ffConfig = {};
3143
+ }
3144
+ var oldContext = (options && options['replace']) ? {} : this.getConfig(CONFIG_CONTEXT);
3145
+ ffConfig[CONFIG_CONTEXT] = _.extend({}, oldContext, newContext);
3146
+
3147
+ this.setMpConfig(FLAGS_CONFIG_KEY, ffConfig);
3148
+ return this.fetchFlags();
3149
+ };
3150
+
3044
3151
  FeatureFlagManager.prototype.areFlagsReady = function() {
3045
3152
  if (!this.isSystemEnabled()) {
3046
3153
  logger$3.error('Feature Flags not enabled');
@@ -3050,7 +3157,7 @@ FeatureFlagManager.prototype.areFlagsReady = function() {
3050
3157
 
3051
3158
  FeatureFlagManager.prototype.fetchFlags = function() {
3052
3159
  if (!this.isSystemEnabled()) {
3053
- return;
3160
+ return Promise.resolve();
3054
3161
  }
3055
3162
 
3056
3163
  var distinctId = this.getMpProperty('distinct_id');
@@ -3090,6 +3197,8 @@ FeatureFlagManager.prototype.fetchFlags = function() {
3090
3197
  this.markFetchComplete();
3091
3198
  logger$3.error(error);
3092
3199
  }.bind(this));
3200
+
3201
+ return this.fetchPromise;
3093
3202
  };
3094
3203
 
3095
3204
  FeatureFlagManager.prototype.markFetchComplete = function() {
@@ -3202,6 +3311,7 @@ FeatureFlagManager.prototype['get_variant_value'] = FeatureFlagManager.prototype
3202
3311
  FeatureFlagManager.prototype['get_variant_value_sync'] = FeatureFlagManager.prototype.getVariantValueSync;
3203
3312
  FeatureFlagManager.prototype['is_enabled'] = FeatureFlagManager.prototype.isEnabled;
3204
3313
  FeatureFlagManager.prototype['is_enabled_sync'] = FeatureFlagManager.prototype.isEnabledSync;
3314
+ FeatureFlagManager.prototype['update_context'] = FeatureFlagManager.prototype.updateContext;
3205
3315
 
3206
3316
  // Deprecated method
3207
3317
  FeatureFlagManager.prototype['get_feature_data'] = FeatureFlagManager.prototype.getFeatureData;
@@ -5973,7 +6083,7 @@ var DEFAULT_CONFIG = {
5973
6083
  'batch_autostart': true,
5974
6084
  'hooks': {},
5975
6085
  'record_block_class': new RegExp('^(mp-block|fs-exclude|amp-block|rr-block|ph-no-capture)$'),
5976
- 'record_block_selector': 'img, video',
6086
+ 'record_block_selector': 'img, video, audio',
5977
6087
  'record_canvas': false,
5978
6088
  'record_collect_fonts': false,
5979
6089
  'record_heatmap_data': false,
@@ -6197,6 +6307,7 @@ MixpanelLib.prototype._init = function(token, config, name) {
6197
6307
  return this.get_api_host('flags') + '/' + this.get_config('api_routes')['flags'];
6198
6308
  }, this),
6199
6309
  getConfigFunc: _.bind(this.get_config, this),
6310
+ setConfigFunc: _.bind(this.set_config, this),
6200
6311
  getPropertyFunc: _.bind(this.get_property, this),
6201
6312
  trackingFunc: _.bind(this.track, this)
6202
6313
  });
@@ -13945,7 +13945,7 @@
13945
13945
 
13946
13946
  var Config = {
13947
13947
  DEBUG: false,
13948
- LIB_VERSION: '2.67.0'
13948
+ LIB_VERSION: '2.68.0'
13949
13949
  };
13950
13950
 
13951
13951
  /* eslint camelcase: "off", eqeqeq: "off" */
@@ -18230,6 +18230,38 @@
18230
18230
  return true;
18231
18231
  }
18232
18232
 
18233
+ /** @const */ var DEFAULT_RAGE_CLICK_THRESHOLD_PX = 30;
18234
+ /** @const */ var DEFAULT_RAGE_CLICK_TIMEOUT_MS = 1000;
18235
+ /** @const */ var DEFAULT_RAGE_CLICK_CLICK_COUNT = 4;
18236
+
18237
+ function RageClickTracker() {
18238
+ this.clicks = [];
18239
+ }
18240
+
18241
+ RageClickTracker.prototype.isRageClick = function(x, y, options) {
18242
+ options = options || {};
18243
+ var thresholdPx = options['threshold_px'] || DEFAULT_RAGE_CLICK_THRESHOLD_PX;
18244
+ var timeoutMs = options['timeout_ms'] || DEFAULT_RAGE_CLICK_TIMEOUT_MS;
18245
+ var clickCount = options['click_count'] || DEFAULT_RAGE_CLICK_CLICK_COUNT;
18246
+ var timestamp = Date.now();
18247
+
18248
+ var lastClick = this.clicks[this.clicks.length - 1];
18249
+ if (
18250
+ lastClick &&
18251
+ timestamp - lastClick.timestamp < timeoutMs &&
18252
+ Math.sqrt(Math.pow(x - lastClick.x, 2) + Math.pow(y - lastClick.y, 2)) < thresholdPx
18253
+ ) {
18254
+ this.clicks.push({ x: x, y: y, timestamp: timestamp });
18255
+ if (this.clicks.length >= clickCount) {
18256
+ this.clicks = [];
18257
+ return true;
18258
+ }
18259
+ } else {
18260
+ this.clicks = [{ x: x, y: y, timestamp: timestamp }];
18261
+ }
18262
+ return false;
18263
+ };
18264
+
18233
18265
  var AUTOCAPTURE_CONFIG_KEY = 'autocapture';
18234
18266
  var LEGACY_PAGEVIEW_CONFIG_KEY = 'track_pageview';
18235
18267
 
@@ -18251,6 +18283,7 @@
18251
18283
  var CONFIG_TRACK_CLICK = 'click';
18252
18284
  var CONFIG_TRACK_INPUT = 'input';
18253
18285
  var CONFIG_TRACK_PAGEVIEW = 'pageview';
18286
+ var CONFIG_TRACK_RAGE_CLICK = 'rage_click';
18254
18287
  var CONFIG_TRACK_SCROLL = 'scroll';
18255
18288
  var CONFIG_TRACK_SUBMIT = 'submit';
18256
18289
 
@@ -18268,6 +18301,7 @@
18268
18301
  CONFIG_DEFAULTS$1[CONFIG_TRACK_CLICK] = true;
18269
18302
  CONFIG_DEFAULTS$1[CONFIG_TRACK_INPUT] = true;
18270
18303
  CONFIG_DEFAULTS$1[CONFIG_TRACK_PAGEVIEW] = PAGEVIEW_OPTION_FULL_URL;
18304
+ CONFIG_DEFAULTS$1[CONFIG_TRACK_RAGE_CLICK] = true;
18271
18305
  CONFIG_DEFAULTS$1[CONFIG_TRACK_SCROLL] = true;
18272
18306
  CONFIG_DEFAULTS$1[CONFIG_TRACK_SUBMIT] = true;
18273
18307
 
@@ -18277,6 +18311,7 @@
18277
18311
 
18278
18312
  var MP_EV_CLICK = '$mp_click';
18279
18313
  var MP_EV_INPUT = '$mp_input_change';
18314
+ var MP_EV_RAGE_CLICK = '$mp_rage_click';
18280
18315
  var MP_EV_SCROLL = '$mp_scroll';
18281
18316
  var MP_EV_SUBMIT = '$mp_submit';
18282
18317
 
@@ -18299,6 +18334,7 @@
18299
18334
  this.initInputTracking();
18300
18335
  this.initScrollTracking();
18301
18336
  this.initSubmitTracking();
18337
+ this.initRageClickTracking();
18302
18338
  };
18303
18339
 
18304
18340
  Autocapture.prototype.getFullConfig = function() {
@@ -18377,6 +18413,11 @@
18377
18413
  return;
18378
18414
  }
18379
18415
 
18416
+ var isCapturedForHeatMap = this.mp.is_recording_heatmap_data() && (
18417
+ (mpEventName === MP_EV_CLICK && !this.getConfig(CONFIG_TRACK_CLICK)) ||
18418
+ (mpEventName === MP_EV_RAGE_CLICK && !this._getRageClickConfig())
18419
+ );
18420
+
18380
18421
  var props = getPropsForDOMEvent(ev, {
18381
18422
  allowElementCallback: this.getConfig(CONFIG_ALLOW_ELEMENT_CALLBACK),
18382
18423
  allowSelectors: this.getConfig(CONFIG_ALLOW_SELECTORS),
@@ -18385,7 +18426,7 @@
18385
18426
  blockSelectors: this.getConfig(CONFIG_BLOCK_SELECTORS),
18386
18427
  captureExtraAttrs: this.getConfig(CONFIG_CAPTURE_EXTRA_ATTRS),
18387
18428
  captureTextContent: this.getConfig(CONFIG_CAPTURE_TEXT_CONTENT),
18388
- capturedForHeatMap: mpEventName === MP_EV_CLICK && !this.getConfig(CONFIG_TRACK_CLICK) && this.mp.is_recording_heatmap_data(),
18429
+ capturedForHeatMap: isCapturedForHeatMap,
18389
18430
  });
18390
18431
  if (props) {
18391
18432
  _.extend(props, DEFAULT_PROPS);
@@ -18393,6 +18434,24 @@
18393
18434
  }
18394
18435
  };
18395
18436
 
18437
+ Autocapture.prototype._getRageClickConfig = function() {
18438
+ var config = this.getConfig(CONFIG_TRACK_RAGE_CLICK);
18439
+
18440
+ if (!config) {
18441
+ return null; // rage click tracking disabled
18442
+ }
18443
+
18444
+ if (config === true) {
18445
+ return {}; // use defaults
18446
+ }
18447
+
18448
+ if (typeof config === 'object') {
18449
+ return config; // use custom configuration
18450
+ }
18451
+
18452
+ return {}; // fallback to defaults for any other truthy value
18453
+ };
18454
+
18396
18455
  Autocapture.prototype.initClickTracking = function() {
18397
18456
  win.removeEventListener(EV_CLICK, this.listenerClick);
18398
18457
 
@@ -18494,6 +18553,36 @@
18494
18553
  }.bind(this)));
18495
18554
  };
18496
18555
 
18556
+ Autocapture.prototype.initRageClickTracking = function() {
18557
+ win.removeEventListener(EV_CLICK, this.listenerRageClick);
18558
+
18559
+ var rageClickConfig = this._getRageClickConfig();
18560
+ if (!rageClickConfig && !this.mp.get_config('record_heatmap_data')) {
18561
+ return;
18562
+ }
18563
+
18564
+ logger$1.log('Initializing rage click tracking');
18565
+ if (!this._rageClickTracker) {
18566
+ this._rageClickTracker = new RageClickTracker();
18567
+ }
18568
+
18569
+ this.listenerRageClick = function(ev) {
18570
+ var currentRageClickConfig = this._getRageClickConfig();
18571
+ if (!currentRageClickConfig && !this.mp.is_recording_heatmap_data()) {
18572
+ return;
18573
+ }
18574
+
18575
+ if (this.currentUrlBlocked()) {
18576
+ return;
18577
+ }
18578
+
18579
+ if (this._rageClickTracker.isRageClick(ev['pageX'], ev['pageY'], currentRageClickConfig)) {
18580
+ this.trackDomEvent(ev, MP_EV_RAGE_CLICK);
18581
+ }
18582
+ }.bind(this);
18583
+ win.addEventListener(EV_CLICK, this.listenerRageClick);
18584
+ };
18585
+
18497
18586
  Autocapture.prototype.initScrollTracking = function() {
18498
18587
  win.removeEventListener(EV_SCROLLEND, this.listenerScroll);
18499
18588
 
@@ -18580,6 +18669,7 @@
18580
18669
  var FeatureFlagManager = function(initOptions) {
18581
18670
  this.getFullApiRoute = initOptions.getFullApiRoute;
18582
18671
  this.getMpConfig = initOptions.getConfigFunc;
18672
+ this.setMpConfig = initOptions.setConfigFunc;
18583
18673
  this.getMpProperty = initOptions.getPropertyFunc;
18584
18674
  this.track = initOptions.trackingFunc;
18585
18675
  };
@@ -18617,6 +18707,23 @@
18617
18707
  return !!this.getMpConfig(FLAGS_CONFIG_KEY);
18618
18708
  };
18619
18709
 
18710
+ FeatureFlagManager.prototype.updateContext = function(newContext, options) {
18711
+ if (!this.isSystemEnabled()) {
18712
+ logger.critical('Feature Flags not enabled, cannot update context');
18713
+ return Promise.resolve();
18714
+ }
18715
+
18716
+ var ffConfig = this.getMpConfig(FLAGS_CONFIG_KEY);
18717
+ if (!_.isObject(ffConfig)) {
18718
+ ffConfig = {};
18719
+ }
18720
+ var oldContext = (options && options['replace']) ? {} : this.getConfig(CONFIG_CONTEXT);
18721
+ ffConfig[CONFIG_CONTEXT] = _.extend({}, oldContext, newContext);
18722
+
18723
+ this.setMpConfig(FLAGS_CONFIG_KEY, ffConfig);
18724
+ return this.fetchFlags();
18725
+ };
18726
+
18620
18727
  FeatureFlagManager.prototype.areFlagsReady = function() {
18621
18728
  if (!this.isSystemEnabled()) {
18622
18729
  logger.error('Feature Flags not enabled');
@@ -18626,7 +18733,7 @@
18626
18733
 
18627
18734
  FeatureFlagManager.prototype.fetchFlags = function() {
18628
18735
  if (!this.isSystemEnabled()) {
18629
- return;
18736
+ return Promise.resolve();
18630
18737
  }
18631
18738
 
18632
18739
  var distinctId = this.getMpProperty('distinct_id');
@@ -18666,6 +18773,8 @@
18666
18773
  this.markFetchComplete();
18667
18774
  logger.error(error);
18668
18775
  }.bind(this));
18776
+
18777
+ return this.fetchPromise;
18669
18778
  };
18670
18779
 
18671
18780
  FeatureFlagManager.prototype.markFetchComplete = function() {
@@ -18778,6 +18887,7 @@
18778
18887
  FeatureFlagManager.prototype['get_variant_value_sync'] = FeatureFlagManager.prototype.getVariantValueSync;
18779
18888
  FeatureFlagManager.prototype['is_enabled'] = FeatureFlagManager.prototype.isEnabled;
18780
18889
  FeatureFlagManager.prototype['is_enabled_sync'] = FeatureFlagManager.prototype.isEnabledSync;
18890
+ FeatureFlagManager.prototype['update_context'] = FeatureFlagManager.prototype.updateContext;
18781
18891
 
18782
18892
  // Deprecated method
18783
18893
  FeatureFlagManager.prototype['get_feature_data'] = FeatureFlagManager.prototype.getFeatureData;
@@ -20238,7 +20348,7 @@
20238
20348
  'batch_autostart': true,
20239
20349
  'hooks': {},
20240
20350
  'record_block_class': new RegExp('^(mp-block|fs-exclude|amp-block|rr-block|ph-no-capture)$'),
20241
- 'record_block_selector': 'img, video',
20351
+ 'record_block_selector': 'img, video, audio',
20242
20352
  'record_canvas': false,
20243
20353
  'record_collect_fonts': false,
20244
20354
  'record_heatmap_data': false,
@@ -20462,6 +20572,7 @@
20462
20572
  return this.get_api_host('flags') + '/' + this.get_config('api_routes')['flags'];
20463
20573
  }, this),
20464
20574
  getConfigFunc: _.bind(this.get_config, this),
20575
+ setConfigFunc: _.bind(this.set_config, this),
20465
20576
  getPropertyFunc: _.bind(this.get_property, this),
20466
20577
  trackingFunc: _.bind(this.track, this)
20467
20578
  });