@pendo/agent 2.312.1 → 2.313.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.
@@ -2801,9 +2801,10 @@ var ConfigReader = (function () {
2801
2801
  function initializeOptions() {
2802
2802
  // Core
2803
2803
  /**
2804
- * Formerly `additionalApiKeys`. When included, all analytics events will be sent to each of the public app IDs in the list (guide events are
2804
+ * When included, all analytics events will be sent to each of the public app IDs in the list (guide events are
2805
2805
  * only sent to the primary public app ID). This will only function if there are no `additionalPublicAppIds` set on
2806
2806
  * the configuration included in the downloaded web SDK.
2807
+ * Alias: `additionalApiKeys`
2807
2808
  *
2808
2809
  * @access public
2809
2810
  * @category Config/Core
@@ -2811,8 +2812,7 @@ var ConfigReader = (function () {
2811
2812
  * @default []
2812
2813
  * @type {string[]}
2813
2814
  */
2814
- addOption('additionalPublicAppIds', [PENDO_CONFIG_SRC, SNIPPET_SRC]);
2815
- addOption('additionalApiKeys', [PENDO_CONFIG_SRC, SNIPPET_SRC]);
2815
+ addOption('additionalPublicAppIds', [PENDO_CONFIG_SRC, SNIPPET_SRC], undefined, undefined, ['additionalApiKeys']);
2816
2816
  addOption('allowedOriginServers');
2817
2817
  addOption('allowedOriginServerHashes');
2818
2818
  addOption('allowMixedApplicationFrames', [SNIPPET_SRC, PENDO_CONFIG_SRC], true);
@@ -2829,8 +2829,9 @@ var ConfigReader = (function () {
2829
2829
  */
2830
2830
  addOption('annotateUrl', [SNIPPET_SRC]);
2831
2831
  /**
2832
- * Formerly `apiKey`. A primary public app ID to send data to from the web SDK. This will only function if there is no `publicAppId` set
2832
+ * A primary public app ID to send data to from the web SDK. This will only function if there is no `publicAppId` set
2833
2833
  * on the configuration included in the downloaded web SDK.
2834
+ * Alias: `apiKey`
2834
2835
  *
2835
2836
  * @access public
2836
2837
  * @category Config/Core
@@ -2838,8 +2839,7 @@ var ConfigReader = (function () {
2838
2839
  * @default undefined
2839
2840
  * @type {string}
2840
2841
  */
2841
- addOption('publicAppId', [PENDO_CONFIG_SRC, SNIPPET_SRC]);
2842
- addOption('apiKey', [PENDO_CONFIG_SRC, SNIPPET_SRC]);
2842
+ addOption('publicAppId', [PENDO_CONFIG_SRC, SNIPPET_SRC], undefined, undefined, ['apiKey']);
2843
2843
  addOption('assetHost', [SNIPPET_SRC, PENDO_CONFIG_SRC]);
2844
2844
  /**
2845
2845
  * If set to `true`, the web SDK will try to install and initialize in all same-origin frames on the page.
@@ -2852,7 +2852,7 @@ var ConfigReader = (function () {
2852
2852
  * @type {boolean}
2853
2853
  */
2854
2854
  addOption('autoFrameInstall', [SNIPPET_SRC, PENDO_CONFIG_SRC], false);
2855
- addOption('blockAgentMetadata', [PENDO_CONFIG_SRC], false);
2855
+ addOption('blockWebSDKMetadata', [PENDO_CONFIG_SRC], false, undefined, ['blockAgentMetadata']);
2856
2856
  /**
2857
2857
  * An alternate url to load guide content from. This will be used to replace the standard google storage
2858
2858
  * url for your subscription. Usually used for
@@ -2927,6 +2927,37 @@ var ConfigReader = (function () {
2927
2927
  */
2928
2928
  addOption('disablePersistence', [SNIPPET_SRC, PENDO_CONFIG_SRC]);
2929
2929
  addOption('enableSignedMetadata', [PENDO_CONFIG_SRC], false);
2930
+ /**
2931
+ * Having identity persisted by default makes it so that a transition from using identified visitor ids
2932
+ * to using anonymous visitor ids is challenging. Anyone that used your application with an identified
2933
+ * visitor id would have that value persisted to storage and whenever the web SDK is initialized for them,
2934
+ * that value would be read from storage treating them as the same identified visitor. When set `true`,
2935
+ * this config option will only use persisted identity values if they are an anonymous id. It is meant to
2936
+ * be used to smoothly make this transition to using anonymous ids while still retaining the benefit of
2937
+ * consistent anonymous ids for visitors. This option will be ignored if you provide an identified
2938
+ * visitorId to the initialize call.
2939
+ *
2940
+ * @access public
2941
+ * @category Config/Core
2942
+ * @name forceAnonymous
2943
+ * @default false
2944
+ * @type {boolean}
2945
+ */
2946
+ addOption('forceAnonymous', [SNIPPET_SRC, PENDO_CONFIG_SRC], false);
2947
+ /**
2948
+ * If set to `true`, the web SDK will prioritize this frame to use as the leader frame that will coordinate
2949
+ * the display of guides and the resource center. The leader frame is usually the "top" frame if the SDK is initialized
2950
+ * there and this option is meant to be used when that condition is not met or the leader should be some other
2951
+ * specific frame. Sitewide guides and the resource center will always attempt to be shown in the leader frame
2952
+ * first.
2953
+ *
2954
+ * @access public
2955
+ * @category Config/Core
2956
+ * @name forceLeader
2957
+ * @default false
2958
+ * @type {boolean}
2959
+ */
2960
+ addOption('forcedLeader', [SNIPPET_SRC, PENDO_CONFIG_SRC], false);
2930
2961
  /**
2931
2962
  * By default, the identity of a visitor in various iframes on a page are independent from each other.
2932
2963
  * Setting this to `true` will instead have the web SDK make sure all frames use the exact same visitor and
@@ -2951,23 +2982,6 @@ var ConfigReader = (function () {
2951
2982
  * @type {boolean}
2952
2983
  */
2953
2984
  addOption('frameIdentityTopDownOnly', [SNIPPET_SRC, PENDO_CONFIG_SRC], true);
2954
- /**
2955
- * Having identity persisted by default makes it so that a transition from using identified visitor ids
2956
- * to using anonymous visitor ids is challenging. Anyone that used your application with an identified
2957
- * visitor id would have that value persisted to storage and whenever the web SDK is initialized for them,
2958
- * that value would be read from storage treating them as the same identified visitor. When set `true`,
2959
- * this config option will only use persisted identity values if they are an anonymous id. It is meant to
2960
- * be used to smoothly make this transition to using anonymous ids while still retaining the benefit of
2961
- * consistent anonymous ids for visitors. This option will be ignored if you provide an identified
2962
- * visitorId to the initialize call.
2963
- *
2964
- * @access public
2965
- * @category Config/Core
2966
- * @name forceAnonymous
2967
- * @default false
2968
- * @type {boolean}
2969
- */
2970
- addOption('forceAnonymous', [SNIPPET_SRC, PENDO_CONFIG_SRC], false);
2971
2985
  addOption('identityStorageLifetime', [SNIPPET_SRC, PENDO_CONFIG_SRC]);
2972
2986
  addOption('identityStorageSuffix', [SNIPPET_SRC, PENDO_CONFIG_SRC]);
2973
2987
  /**
@@ -3068,7 +3082,7 @@ var ConfigReader = (function () {
3068
3082
  * @type {boolean}
3069
3083
  */
3070
3084
  addOption('preventUnloadListener', [SNIPPET_SRC, PENDO_CONFIG_SRC], false);
3071
- addOption('promotedAgentMetadataConfigurations', [PENDO_CONFIG_SRC]);
3085
+ addOption('promotedWebSDKMetadataConfigurations', [PENDO_CONFIG_SRC], undefined, undefined, ['promotedAgentMetadataConfigurations']);
3072
3086
  /**
3073
3087
  * An array of strings or a function that returns an array of strings. The web SDK will then strip any query
3074
3088
  * string parameters from the url that are not found in the provided array. **Deprecated:** new usages to
@@ -3098,14 +3112,15 @@ var ConfigReader = (function () {
3098
3112
  /**
3099
3113
  * Meant to be used with `autoFrameInstall`. If set, the web SDK will use this as the url to download itself
3100
3114
  * from in child frames. Read more about [frame support](/advanced/auto-frame-install).
3115
+ * Alias: `selfHostedAgentUrl`
3101
3116
  *
3102
3117
  * @access public
3103
3118
  * @category Config/Core
3104
- * @name selfHostedAgentUrl
3119
+ * @name selfHostedWebSDKUrl
3105
3120
  * @default undefined
3106
3121
  * @type {string}
3107
3122
  */
3108
- addOption('selfHostedAgentUrl', [SNIPPET_SRC, PENDO_CONFIG_SRC]);
3123
+ addOption('selfHostedWebSDKUrl', [SNIPPET_SRC, PENDO_CONFIG_SRC], undefined, undefined, ['selfHostedAgentUrl']);
3109
3124
  /**
3110
3125
  * If this option is set to true, event data will only be transmitted using requests of type POST instead
3111
3126
  * of first trying to use GET requests. This can result in fewer requests being sent each time that event data
@@ -3207,7 +3222,6 @@ var ConfigReader = (function () {
3207
3222
  addOption('excludeNonGuideAnalytics', [SNIPPET_SRC, PENDO_CONFIG_SRC], false);
3208
3223
  addOption('htmlAttributeBlacklist');
3209
3224
  addOption('htmlAttributes');
3210
- addOption('interceptElementRemoval', [SNIPPET_SRC, PENDO_CONFIG_SRC], false); // old, use syntheticClicks.elementRemoval instead
3211
3225
  /**
3212
3226
  * By default, the web SDK will attempt to intercept calls to `preventDefault` on `touchend` events in order to
3213
3227
  * ensure that Pendo still tracks the click event. There are cases where your application might prevent these
@@ -3239,6 +3253,7 @@ var ConfigReader = (function () {
3239
3253
  * events. In these cases, Pendo will not be able to capture the `click` event properly for events or guide
3240
3254
  * behavior. Setting this to `true` will have the web SDK intercept these types of element removal to ensure
3241
3255
  * more consistent Pendo behavior (this option has been moved from `interceptElementRemoval`).
3256
+ * Alias: `interceptElementRemoval`
3242
3257
  *
3243
3258
  * @access public
3244
3259
  * @category Config/Analytics
@@ -3246,7 +3261,7 @@ var ConfigReader = (function () {
3246
3261
  * @default false
3247
3262
  * @type {boolean}
3248
3263
  */
3249
- addOption('syntheticClicks.elementRemoval', [SNIPPET_SRC, PENDO_CONFIG_SRC], false);
3264
+ addOption('syntheticClicks.elementRemoval', [SNIPPET_SRC, PENDO_CONFIG_SRC], false, undefined, ['interceptElementRemoval']);
3250
3265
  /**
3251
3266
  * A `click` is classified by the browser as the same element receiving the `mousedown` and `mouseup` events.
3252
3267
  * When `true` this option will allow Pendo to treat cases where a visitor clicks down the mouse, moves the
@@ -3295,7 +3310,6 @@ var ConfigReader = (function () {
3295
3310
  * @type {Number}
3296
3311
  */
3297
3312
  addOption('cacheGuidesTimeout', [PENDO_CONFIG_SRC], 600000);
3298
- addOption('delayGuides', [SNIPPET_SRC]); // old, use guides.delay instead
3299
3313
  /**
3300
3314
  * If `true`, this will prevent the web SDK from attempting to launch the Visual Design Studio.
3301
3315
  *
@@ -3331,7 +3345,6 @@ var ConfigReader = (function () {
3331
3345
  * @type {boolean}
3332
3346
  */
3333
3347
  addOption('disableGuidePseudoStyles', [SNIPPET_SRC, PENDO_CONFIG_SRC], false);
3334
- addOption('disableGuides', [SNIPPET_SRC]); // old, use guides.disabled instead
3335
3348
  /**
3336
3349
  * Content of badge and target element activated guides will be prefetched on load to improve guide display
3337
3350
  * time unless set to `true`.
@@ -3376,7 +3389,7 @@ var ConfigReader = (function () {
3376
3389
  * @type {number}
3377
3390
  */
3378
3391
  addOption('guideSeenTimeoutLength', [PENDO_CONFIG_SRC, SNIPPET_SRC], 10000);
3379
- addOption('guideTimeout', [SNIPPET_SRC]); // old, use guides.timeout instead
3392
+ // addOption('guideTimeout', [SNIPPET_SRC]); // old, use guides.timeout instead
3380
3393
  /**
3381
3394
  * If `true`, guides will be verified against their saved content hash before display to ensure validity of
3382
3395
  * guide content.
@@ -3401,7 +3414,8 @@ var ConfigReader = (function () {
3401
3414
  addOption('guides.attachPoint', [SNIPPET_SRC]);
3402
3415
  /**
3403
3416
  * Guides will be loaded, but not displayed. Call `pendo.startGuides()` to display guides when you choose
3404
- * to do so (this options has been moved from `delayGuides`).
3417
+ * to do so.
3418
+ * Alias: `delayGuides`
3405
3419
  *
3406
3420
  * @access public
3407
3421
  * @category Config/Guides
@@ -3409,9 +3423,10 @@ var ConfigReader = (function () {
3409
3423
  * @default false
3410
3424
  * @type {boolean}
3411
3425
  */
3412
- addOption('guides.delay', [SNIPPET_SRC]);
3426
+ addOption('guides.delay', [SNIPPET_SRC], undefined, undefined, ['delayGuides']);
3413
3427
  /**
3414
3428
  * Completely disables guides (this option has been moved from `disableGuides`).
3429
+ * Alias: `disableGuides`
3415
3430
  *
3416
3431
  * @access public
3417
3432
  * @category Config/Guides
@@ -3419,7 +3434,7 @@ var ConfigReader = (function () {
3419
3434
  * @default false
3420
3435
  * @type {boolean}
3421
3436
  */
3422
- addOption('guides.disabled', [SNIPPET_SRC]);
3437
+ addOption('guides.disabled', [SNIPPET_SRC], undefined, undefined, ['disableGuides']);
3423
3438
  /**
3424
3439
  * If 'true', guides with slow selectors will be removed from guide display processing.
3425
3440
  * This will improve application performance, but slow guides will not be shown to users.
@@ -3445,6 +3460,7 @@ var ConfigReader = (function () {
3445
3460
  /**
3446
3461
  * How long to wait for guides to load in milliseconds (this option has been moved from `guideTimeout`).
3447
3462
  * By default guides will not timeout.
3463
+ * Alias: `guideTimeout`
3448
3464
  *
3449
3465
  * @access public
3450
3466
  * @category Config/Guides
@@ -3452,7 +3468,7 @@ var ConfigReader = (function () {
3452
3468
  * @default undefined
3453
3469
  * @type {number}
3454
3470
  */
3455
- addOption('guides.timeout', [SNIPPET_SRC]);
3471
+ addOption('guides.timeout', [SNIPPET_SRC], undefined, undefined, ['guideTimeout']);
3456
3472
  /**
3457
3473
  * The tooltip arrow size (in pixels). This only affects classic guides.
3458
3474
  *
@@ -3543,10 +3559,10 @@ var ConfigReader = (function () {
3543
3559
  // Adopt
3544
3560
  addOption('adoptHost');
3545
3561
  addOption('adoptAnalyticsForwarding');
3546
- addOption('agentDebuggerPluginLoader');
3562
+ addOption('webSDKDebuggerPluginLoader', [PENDO_CONFIG_SRC], undefined, undefined, ['agentDebuggerPluginLoader']);
3547
3563
  addOption('allowPartnerAnalyticsForwarding', [SNIPPET_SRC], false);
3548
3564
  addOption('adoptPrioritizeAdoptGuides', [PENDO_CONFIG_SRC], false);
3549
- addOption('designerAgentPluginsLoader', [PENDO_CONFIG_SRC, SNIPPET_SRC]);
3565
+ addOption('designerWebSDKPluginsLoader', [PENDO_CONFIG_SRC, SNIPPET_SRC], undefined, undefined, ['designerAgentPluginsLoader']);
3550
3566
  addOption('guideContentLoader', [PENDO_CONFIG_SRC]);
3551
3567
  addOption('trainingPartner');
3552
3568
  addOption('oemAccountId', [SNIPPET_SRC]);
@@ -3585,8 +3601,18 @@ var ConfigReader = (function () {
3585
3601
  function getValueFromSourceGetter(option, sourceGetter) {
3586
3602
  if (!sourceGetter)
3587
3603
  return;
3588
- var source = sourceGetter();
3589
- var v = _.get(source.lookup, getConfigKey(option));
3604
+ const source = sourceGetter();
3605
+ let v = _.get(source.lookup, getConfigKey(option));
3606
+ // need to also check option aliases if the option.name key is not found in the source
3607
+ if (!doesExist(v)) {
3608
+ const aliasWithValue = _.find(option.aliases || [], function (alias) {
3609
+ const val = _.get(source.lookup, alias);
3610
+ if (doesExist(val))
3611
+ return val;
3612
+ });
3613
+ if (aliasWithValue)
3614
+ v = _.get(source.lookup, aliasWithValue);
3615
+ }
3590
3616
  return doesExist(v) ? v : undefined;
3591
3617
  }
3592
3618
  function getValueFromSource(option, src) {
@@ -3603,10 +3629,6 @@ var ConfigReader = (function () {
3603
3629
  var option = findOption(optionName);
3604
3630
  defaultValue = defaultValue || _.get(option, 'defaultValue', null);
3605
3631
  var defaultReturn = new ConfigValue(optionName, defaultValue, DEFAULT_SRC);
3606
- // if (source) {
3607
- // var val = getValueFromSource(option, source);
3608
- // return val;
3609
- // }
3610
3632
  var validOptions = mapSourcesToValues(option, sources);
3611
3633
  // defaultValue must exist in order to use non-ordered sources,
3612
3634
  // otherwise you can't know what value to value over another.
@@ -3924,8 +3946,8 @@ let SERVER = '';
3924
3946
  let ASSET_HOST = '';
3925
3947
  let ASSET_PATH = '';
3926
3948
  let DESIGNER_SERVER = '';
3927
- let VERSION = '2.312.1_';
3928
- let PACKAGE_VERSION = '2.312.1';
3949
+ let VERSION = '2.313.0_';
3950
+ let PACKAGE_VERSION = '2.313.0';
3929
3951
  let LOADER = 'xhr';
3930
3952
  /* eslint-enable web-sdk-eslint-rules/no-gulp-env-references */
3931
3953
  /**
@@ -12639,7 +12661,6 @@ function eventCreate(type, props, url, name, eventProperties, context) {
12639
12661
  if (type === 'track') {
12640
12662
  eventObj.track_event_name = name || defaultTrackName;
12641
12663
  }
12642
- Events.eventCaptured.trigger(eventObj, context);
12643
12664
  return eventObj;
12644
12665
  }
12645
12666
  function shouldCollectEvent() {
@@ -12659,7 +12680,11 @@ function shouldCollectEvent() {
12659
12680
  function collectEvent(type, props, url, name, eventProperties, context) {
12660
12681
  if (!shouldCollectEvent())
12661
12682
  return;
12662
- var event = eventCreate(type, props, url, name, eventProperties, context);
12683
+ var event = eventCreate(type, props, url, name, eventProperties);
12684
+ var captureEvent = Events.eventCaptured.trigger(event, context);
12685
+ if (captureEvent.cancel) {
12686
+ return;
12687
+ }
12663
12688
  if (!isURLValid(event.url)) {
12664
12689
  return;
12665
12690
  }
@@ -12851,6 +12876,13 @@ function filterAnalyticsDisabled(silo, next) {
12851
12876
  return;
12852
12877
  next(silo);
12853
12878
  }
12879
+ function fireEventCaptured(silo, next) {
12880
+ var captureEvent = Events.eventCaptured.trigger(silo);
12881
+ if (captureEvent.cancel) {
12882
+ return;
12883
+ }
12884
+ next(silo);
12885
+ }
12854
12886
  function errorLogger() {
12855
12887
  return function (silo, next) {
12856
12888
  if (silo.length === 1 && silo.JZB.length > ENCODED_EVENT_MAX_POST_LENGTH) {
@@ -13744,7 +13776,7 @@ var wirePage = function (eventList) {
13744
13776
  unwire.push(() => { handle_change_event.cancel(); });
13745
13777
  unwire.push(attachEventInternal(document, 'change', handle_change_event, true));
13746
13778
  }
13747
- const interceptElementRemoval = ConfigReader.get('interceptElementRemoval') || ConfigReader.get('syntheticClicks.elementRemoval');
13779
+ const interceptElementRemoval = ConfigReader.get('syntheticClicks.elementRemoval');
13748
13780
  const interceptMouseUp = ConfigReader.get('syntheticClicks.targetChanged');
13749
13781
  unwire.push(wireSyntheticClicks(dom.event.trigger, sniffer.addEventListener, interceptElementRemoval, interceptMouseUp).teardown);
13750
13782
  unwire.push(listenForEvents(eventList));
@@ -23136,7 +23168,7 @@ const Keys = (function () {
23136
23168
  _apiKey = key;
23137
23169
  };
23138
23170
  const discoverApiKey = (apiKey) => {
23139
- apiKey = ConfigReader.get('publicAppId') || ConfigReader.get('apiKey', apiKey);
23171
+ apiKey = ConfigReader.get('publicAppId', apiKey);
23140
23172
  if (apiKey) {
23141
23173
  setApiKey(apiKey);
23142
23174
  }
@@ -25794,7 +25826,6 @@ function createGuideEvent(name, guideId, stepId, visitorId, reason, language) {
25794
25826
  url: pendoDotUrl.externalizeURL(),
25795
25827
  props
25796
25828
  });
25797
- Events.eventCaptured.trigger(event);
25798
25829
  return event;
25799
25830
  }
25800
25831
  var stagedEventsTimer = null;
@@ -26242,7 +26273,7 @@ var loadGuides = function (apiKey, visitorId, page, callback) {
26242
26273
  Events.guidesFailed.trigger();
26243
26274
  deferred.reject(err);
26244
26275
  });
26245
- var guideTimeoutDuration = ConfigReader.get('guideTimeout') || ConfigReader.get('guides.timeout');
26276
+ var guideTimeoutDuration = ConfigReader.get('guides.timeout');
26246
26277
  if (_.isNumber(guideTimeoutDuration)) {
26247
26278
  clearTimeout(loadGuidesTimeout);
26248
26279
  loadGuidesTimeout = setTimeout$1(function () {
@@ -26376,7 +26407,7 @@ var getGuideEventCache = function () {
26376
26407
  };
26377
26408
  function createGuideEventQueue(options) {
26378
26409
  const processSilos = pipeline(filterAnalyticsDisabled, splitSiloOnFieldChange('visitor_id'), splitSiloOnFieldChange('props.guide_id'), splitSiloOnFieldChange('props.source'), compressSilo, errorLogger(), addSiloParams(options), addAccountIdParamIfAdoptPartner, addSourceParamIfPresent, convertSiloToObject);
26379
- const packageSilos = pipeline(eventSequence, siloReducer(options.cache), _.noop // do not move to the silo queue until manual flush
26410
+ const packageSilos = pipeline(fireEventCaptured, eventSequence, siloReducer(options.cache), _.noop // do not move to the silo queue until manual flush
26380
26411
  );
26381
26412
  return new EventQueue(_.extend({ processSilos, packageSilos }, options));
26382
26413
  }
@@ -26585,7 +26616,7 @@ var initGuides = function (observer) {
26585
26616
  * pendo.areGuidesDisabled() => true
26586
26617
  */
26587
26618
  var areGuidesDisabled = function () {
26588
- return ConfigReader.get('guides.disabled', false) || ConfigReader.get('disableGuides', false) || !pendoCore;
26619
+ return ConfigReader.get('guides.disabled', false) || !pendoCore;
26589
26620
  };
26590
26621
  /**
26591
26622
  * Returns true or false if the client has delayed guides in the snippet or via a command
@@ -26597,7 +26628,7 @@ var areGuidesDisabled = function () {
26597
26628
  * pendo.areGuidesDelayed() => true
26598
26629
  */
26599
26630
  var areGuidesDelayed = function () {
26600
- return ConfigReader.get('guides.delay', false) || ConfigReader.get('delayGuides', false);
26631
+ return ConfigReader.get('guides.delay', false);
26601
26632
  };
26602
26633
  var setGuidesDisabled = function (areDisabled) {
26603
26634
  var originalOptions = ConfigReader.getLocalConfig();
@@ -32953,7 +32984,8 @@ var FramesModule = (function () {
32953
32984
  isTop,
32954
32985
  visibility: isTop ? 'visible' : 'unknown',
32955
32986
  apiKey: pendo$1.apiKey,
32956
- leaderKey
32987
+ leaderKey,
32988
+ forcedLeader: ConfigReader.get('forcedLeader')
32957
32989
  }, currentFrameState)
32958
32990
  });
32959
32991
  },
@@ -33027,27 +33059,31 @@ var FramesModule = (function () {
33027
33059
  context.dispatch('electLeader');
33028
33060
  }, 50),
33029
33061
  electLeader(context) {
33030
- var state = context.state;
33031
- var candidateFrames = state.frames;
33032
- var leaderKeyPreference = context.getters.leaderKeyPreference();
33062
+ const state = context.state;
33063
+ let candidateFrames = state.frames;
33064
+ const leaderKeyPreference = context.getters.leaderKeyPreference();
33033
33065
  if (leaderKeyPreference.length) {
33034
33066
  while (leaderKeyPreference.length) {
33035
- var leaderKey = leaderKeyPreference.shift();
33036
- var framesWithKey = _.filter(state.frames, (frame) => frame.apiKey === leaderKey);
33067
+ const leaderKey = leaderKeyPreference.shift();
33068
+ const framesWithKey = _.filter(state.frames, (frame) => frame.apiKey === leaderKey);
33037
33069
  if (framesWithKey.length) {
33038
33070
  candidateFrames = framesWithKey;
33039
33071
  break;
33040
33072
  }
33041
33073
  }
33042
33074
  }
33043
- var topFrame = _.find(candidateFrames, (frame) => frame.isTop);
33075
+ const forcedLeaderFrames = _.filter(candidateFrames, (frame) => frame.forcedLeader);
33076
+ if (forcedLeaderFrames.length) {
33077
+ candidateFrames = forcedLeaderFrames;
33078
+ }
33079
+ const topFrame = _.find(candidateFrames, (frame) => frame.isTop);
33044
33080
  if (topFrame) {
33045
33081
  context.dispatch('followLeader', {
33046
33082
  leaderId: topFrame.id
33047
33083
  });
33048
33084
  }
33049
33085
  else {
33050
- var oldestFrame = _.min(candidateFrames, 'joinedAt');
33086
+ const oldestFrame = _.min(candidateFrames, 'joinedAt');
33051
33087
  context.dispatch('followLeader', {
33052
33088
  leaderId: oldestFrame.id
33053
33089
  });
@@ -33694,9 +33730,13 @@ var FramesModule = (function () {
33694
33730
  },
33695
33731
  canShowRCBadge(state, getters) {
33696
33732
  if (getters.leaderKey() !== pendo$1.apiKey) {
33697
- const sameKeyFrames = _.filter(state.frames, function (frame) {
33733
+ let sameKeyFrames = _.filter(state.frames, function (frame) {
33698
33734
  return frame.apiKey === pendo$1.apiKey;
33699
33735
  });
33736
+ const forcedLeaderFrames = _.filter(sameKeyFrames, (frame) => frame.forcedLeader);
33737
+ if (forcedLeaderFrames.length) {
33738
+ sameKeyFrames = forcedLeaderFrames;
33739
+ }
33700
33740
  const topFrame = _.find(sameKeyFrames, function (frame) {
33701
33741
  return frame.isTop;
33702
33742
  });
@@ -33708,12 +33748,6 @@ var FramesModule = (function () {
33708
33748
  });
33709
33749
  return state.frameId === firstJoined.id;
33710
33750
  }
33711
- var hasTopFrame = _.any(state.frames, function (frame) {
33712
- return frame.isTop;
33713
- });
33714
- if (hasTopFrame) {
33715
- return getters.isTop();
33716
- }
33717
33751
  return getters.isLeader();
33718
33752
  },
33719
33753
  leaderKeyPreference(state) {
@@ -37919,7 +37953,7 @@ function startDebuggingModuleIfEnabled() {
37919
37953
  if (dom('#pendo-client-debugger').length)
37920
37954
  return;
37921
37955
  // if debugger launcher function exists on config, run it
37922
- const agentDebuggerPluginLoader = ConfigReader.get('agentDebuggerPluginLoader');
37956
+ const agentDebuggerPluginLoader = ConfigReader.get('webSDKDebuggerPluginLoader');
37923
37957
  if (PluginAPI.restartDebugger) {
37924
37958
  PluginAPI.restartDebugger();
37925
37959
  }
@@ -38615,14 +38649,14 @@ const EmbeddedGuides = (function () {
38615
38649
  // The guideLoopStopped event sometimes is sent when the guide loop is restarted, for example when a guide is advanced.
38616
38650
  // Do not hide embedded guides in these cases.
38617
38651
  // The delayGuides flag is set when guides are manually stopped, and unset when guides are manually started.
38618
- if (pluginApi.ConfigReader.get('delayGuides')) {
38652
+ if (pluginApi.ConfigReader.get('guides.delay')) {
38619
38653
  hideAllEmbeddedGuides();
38620
38654
  }
38621
38655
  }
38622
38656
  function hideGuide(event) {
38623
38657
  const guideId = _.get(event, 'data.0.props.guide_id', null);
38624
38658
  if (guideId) {
38625
- const guide = embeddedGuides.find(({ id }) => id === guideId);
38659
+ const guide = _.find(embeddedGuides, ({ id }) => id === guideId);
38626
38660
  if (guide) {
38627
38661
  guide.hide();
38628
38662
  }
@@ -42247,7 +42281,9 @@ function VocPortal() {
42247
42281
  visitor: metadata.visitor,
42248
42282
  account: metadata.account,
42249
42283
  parentAccount: metadata.parentAccount,
42250
- sandboxMode: sandBoxMode
42284
+ sandboxMode: sandBoxMode,
42285
+ guideId: pendoGlobal._.get(pendoGlobal.getActiveGuide(), 'guide.id'),
42286
+ rcModuleId: pendoGlobal._.get(pendoGlobal.BuildingBlocks.BuildingBlockResourceCenter.getResourceCenter(), 'activeModule.id')
42251
42287
  };
42252
42288
  responseHandler(response);
42253
42289
  }
@@ -56316,9 +56352,10 @@ var ConfigReader = (function () {
56316
56352
  function initializeOptions() {
56317
56353
  // Core
56318
56354
  /**
56319
- * Formerly `additionalApiKeys`. When included, all analytics events will be sent to each of the public app IDs in the list (guide events are
56355
+ * When included, all analytics events will be sent to each of the public app IDs in the list (guide events are
56320
56356
  * only sent to the primary public app ID). This will only function if there are no `additionalPublicAppIds` set on
56321
56357
  * the configuration included in the downloaded web SDK.
56358
+ * Alias: `additionalApiKeys`
56322
56359
  *
56323
56360
  * @access public
56324
56361
  * @category Config/Core
@@ -56326,8 +56363,7 @@ var ConfigReader = (function () {
56326
56363
  * @default []
56327
56364
  * @type {string[]}
56328
56365
  */
56329
- addOption('additionalPublicAppIds', [PENDO_CONFIG_SRC, SNIPPET_SRC]);
56330
- addOption('additionalApiKeys', [PENDO_CONFIG_SRC, SNIPPET_SRC]);
56366
+ addOption('additionalPublicAppIds', [PENDO_CONFIG_SRC, SNIPPET_SRC], undefined, undefined, ['additionalApiKeys']);
56331
56367
  addOption('allowedOriginServers');
56332
56368
  addOption('allowedOriginServerHashes');
56333
56369
  addOption('allowMixedApplicationFrames', [SNIPPET_SRC, PENDO_CONFIG_SRC], true);
@@ -56344,8 +56380,9 @@ var ConfigReader = (function () {
56344
56380
  */
56345
56381
  addOption('annotateUrl', [SNIPPET_SRC]);
56346
56382
  /**
56347
- * Formerly `apiKey`. A primary public app ID to send data to from the web SDK. This will only function if there is no `publicAppId` set
56383
+ * A primary public app ID to send data to from the web SDK. This will only function if there is no `publicAppId` set
56348
56384
  * on the configuration included in the downloaded web SDK.
56385
+ * Alias: `apiKey`
56349
56386
  *
56350
56387
  * @access public
56351
56388
  * @category Config/Core
@@ -56353,8 +56390,7 @@ var ConfigReader = (function () {
56353
56390
  * @default undefined
56354
56391
  * @type {string}
56355
56392
  */
56356
- addOption('publicAppId', [PENDO_CONFIG_SRC, SNIPPET_SRC]);
56357
- addOption('apiKey', [PENDO_CONFIG_SRC, SNIPPET_SRC]);
56393
+ addOption('publicAppId', [PENDO_CONFIG_SRC, SNIPPET_SRC], undefined, undefined, ['apiKey']);
56358
56394
  addOption('assetHost', [SNIPPET_SRC, PENDO_CONFIG_SRC]);
56359
56395
  /**
56360
56396
  * If set to `true`, the web SDK will try to install and initialize in all same-origin frames on the page.
@@ -56367,7 +56403,7 @@ var ConfigReader = (function () {
56367
56403
  * @type {boolean}
56368
56404
  */
56369
56405
  addOption('autoFrameInstall', [SNIPPET_SRC, PENDO_CONFIG_SRC], false);
56370
- addOption('blockAgentMetadata', [PENDO_CONFIG_SRC], false);
56406
+ addOption('blockWebSDKMetadata', [PENDO_CONFIG_SRC], false, undefined, ['blockAgentMetadata']);
56371
56407
  /**
56372
56408
  * An alternate url to load guide content from. This will be used to replace the standard google storage
56373
56409
  * url for your subscription. Usually used for
@@ -56442,6 +56478,37 @@ var ConfigReader = (function () {
56442
56478
  */
56443
56479
  addOption('disablePersistence', [SNIPPET_SRC, PENDO_CONFIG_SRC]);
56444
56480
  addOption('enableSignedMetadata', [PENDO_CONFIG_SRC], false);
56481
+ /**
56482
+ * Having identity persisted by default makes it so that a transition from using identified visitor ids
56483
+ * to using anonymous visitor ids is challenging. Anyone that used your application with an identified
56484
+ * visitor id would have that value persisted to storage and whenever the web SDK is initialized for them,
56485
+ * that value would be read from storage treating them as the same identified visitor. When set `true`,
56486
+ * this config option will only use persisted identity values if they are an anonymous id. It is meant to
56487
+ * be used to smoothly make this transition to using anonymous ids while still retaining the benefit of
56488
+ * consistent anonymous ids for visitors. This option will be ignored if you provide an identified
56489
+ * visitorId to the initialize call.
56490
+ *
56491
+ * @access public
56492
+ * @category Config/Core
56493
+ * @name forceAnonymous
56494
+ * @default false
56495
+ * @type {boolean}
56496
+ */
56497
+ addOption('forceAnonymous', [SNIPPET_SRC, PENDO_CONFIG_SRC], false);
56498
+ /**
56499
+ * If set to `true`, the web SDK will prioritize this frame to use as the leader frame that will coordinate
56500
+ * the display of guides and the resource center. The leader frame is usually the "top" frame if the SDK is initialized
56501
+ * there and this option is meant to be used when that condition is not met or the leader should be some other
56502
+ * specific frame. Sitewide guides and the resource center will always attempt to be shown in the leader frame
56503
+ * first.
56504
+ *
56505
+ * @access public
56506
+ * @category Config/Core
56507
+ * @name forceLeader
56508
+ * @default false
56509
+ * @type {boolean}
56510
+ */
56511
+ addOption('forcedLeader', [SNIPPET_SRC, PENDO_CONFIG_SRC], false);
56445
56512
  /**
56446
56513
  * By default, the identity of a visitor in various iframes on a page are independent from each other.
56447
56514
  * Setting this to `true` will instead have the web SDK make sure all frames use the exact same visitor and
@@ -56466,23 +56533,6 @@ var ConfigReader = (function () {
56466
56533
  * @type {boolean}
56467
56534
  */
56468
56535
  addOption('frameIdentityTopDownOnly', [SNIPPET_SRC, PENDO_CONFIG_SRC], true);
56469
- /**
56470
- * Having identity persisted by default makes it so that a transition from using identified visitor ids
56471
- * to using anonymous visitor ids is challenging. Anyone that used your application with an identified
56472
- * visitor id would have that value persisted to storage and whenever the web SDK is initialized for them,
56473
- * that value would be read from storage treating them as the same identified visitor. When set `true`,
56474
- * this config option will only use persisted identity values if they are an anonymous id. It is meant to
56475
- * be used to smoothly make this transition to using anonymous ids while still retaining the benefit of
56476
- * consistent anonymous ids for visitors. This option will be ignored if you provide an identified
56477
- * visitorId to the initialize call.
56478
- *
56479
- * @access public
56480
- * @category Config/Core
56481
- * @name forceAnonymous
56482
- * @default false
56483
- * @type {boolean}
56484
- */
56485
- addOption('forceAnonymous', [SNIPPET_SRC, PENDO_CONFIG_SRC], false);
56486
56536
  addOption('identityStorageLifetime', [SNIPPET_SRC, PENDO_CONFIG_SRC]);
56487
56537
  addOption('identityStorageSuffix', [SNIPPET_SRC, PENDO_CONFIG_SRC]);
56488
56538
  /**
@@ -56583,7 +56633,7 @@ var ConfigReader = (function () {
56583
56633
  * @type {boolean}
56584
56634
  */
56585
56635
  addOption('preventUnloadListener', [SNIPPET_SRC, PENDO_CONFIG_SRC], false);
56586
- addOption('promotedAgentMetadataConfigurations', [PENDO_CONFIG_SRC]);
56636
+ addOption('promotedWebSDKMetadataConfigurations', [PENDO_CONFIG_SRC], undefined, undefined, ['promotedAgentMetadataConfigurations']);
56587
56637
  /**
56588
56638
  * An array of strings or a function that returns an array of strings. The web SDK will then strip any query
56589
56639
  * string parameters from the url that are not found in the provided array. **Deprecated:** new usages to
@@ -56613,14 +56663,15 @@ var ConfigReader = (function () {
56613
56663
  /**
56614
56664
  * Meant to be used with `autoFrameInstall`. If set, the web SDK will use this as the url to download itself
56615
56665
  * from in child frames. Read more about [frame support](/advanced/auto-frame-install).
56666
+ * Alias: `selfHostedAgentUrl`
56616
56667
  *
56617
56668
  * @access public
56618
56669
  * @category Config/Core
56619
- * @name selfHostedAgentUrl
56670
+ * @name selfHostedWebSDKUrl
56620
56671
  * @default undefined
56621
56672
  * @type {string}
56622
56673
  */
56623
- addOption('selfHostedAgentUrl', [SNIPPET_SRC, PENDO_CONFIG_SRC]);
56674
+ addOption('selfHostedWebSDKUrl', [SNIPPET_SRC, PENDO_CONFIG_SRC], undefined, undefined, ['selfHostedAgentUrl']);
56624
56675
  /**
56625
56676
  * If this option is set to true, event data will only be transmitted using requests of type POST instead
56626
56677
  * of first trying to use GET requests. This can result in fewer requests being sent each time that event data
@@ -56722,7 +56773,6 @@ var ConfigReader = (function () {
56722
56773
  addOption('excludeNonGuideAnalytics', [SNIPPET_SRC, PENDO_CONFIG_SRC], false);
56723
56774
  addOption('htmlAttributeBlacklist');
56724
56775
  addOption('htmlAttributes');
56725
- addOption('interceptElementRemoval', [SNIPPET_SRC, PENDO_CONFIG_SRC], false); // old, use syntheticClicks.elementRemoval instead
56726
56776
  /**
56727
56777
  * By default, the web SDK will attempt to intercept calls to `preventDefault` on `touchend` events in order to
56728
56778
  * ensure that Pendo still tracks the click event. There are cases where your application might prevent these
@@ -56754,6 +56804,7 @@ var ConfigReader = (function () {
56754
56804
  * events. In these cases, Pendo will not be able to capture the `click` event properly for events or guide
56755
56805
  * behavior. Setting this to `true` will have the web SDK intercept these types of element removal to ensure
56756
56806
  * more consistent Pendo behavior (this option has been moved from `interceptElementRemoval`).
56807
+ * Alias: `interceptElementRemoval`
56757
56808
  *
56758
56809
  * @access public
56759
56810
  * @category Config/Analytics
@@ -56761,7 +56812,7 @@ var ConfigReader = (function () {
56761
56812
  * @default false
56762
56813
  * @type {boolean}
56763
56814
  */
56764
- addOption('syntheticClicks.elementRemoval', [SNIPPET_SRC, PENDO_CONFIG_SRC], false);
56815
+ addOption('syntheticClicks.elementRemoval', [SNIPPET_SRC, PENDO_CONFIG_SRC], false, undefined, ['interceptElementRemoval']);
56765
56816
  /**
56766
56817
  * A `click` is classified by the browser as the same element receiving the `mousedown` and `mouseup` events.
56767
56818
  * When `true` this option will allow Pendo to treat cases where a visitor clicks down the mouse, moves the
@@ -56810,7 +56861,6 @@ var ConfigReader = (function () {
56810
56861
  * @type {Number}
56811
56862
  */
56812
56863
  addOption('cacheGuidesTimeout', [PENDO_CONFIG_SRC], 600000);
56813
- addOption('delayGuides', [SNIPPET_SRC]); // old, use guides.delay instead
56814
56864
  /**
56815
56865
  * If `true`, this will prevent the web SDK from attempting to launch the Visual Design Studio.
56816
56866
  *
@@ -56846,7 +56896,6 @@ var ConfigReader = (function () {
56846
56896
  * @type {boolean}
56847
56897
  */
56848
56898
  addOption('disableGuidePseudoStyles', [SNIPPET_SRC, PENDO_CONFIG_SRC], false);
56849
- addOption('disableGuides', [SNIPPET_SRC]); // old, use guides.disabled instead
56850
56899
  /**
56851
56900
  * Content of badge and target element activated guides will be prefetched on load to improve guide display
56852
56901
  * time unless set to `true`.
@@ -56891,7 +56940,7 @@ var ConfigReader = (function () {
56891
56940
  * @type {number}
56892
56941
  */
56893
56942
  addOption('guideSeenTimeoutLength', [PENDO_CONFIG_SRC, SNIPPET_SRC], 10000);
56894
- addOption('guideTimeout', [SNIPPET_SRC]); // old, use guides.timeout instead
56943
+ // addOption('guideTimeout', [SNIPPET_SRC]); // old, use guides.timeout instead
56895
56944
  /**
56896
56945
  * If `true`, guides will be verified against their saved content hash before display to ensure validity of
56897
56946
  * guide content.
@@ -56916,7 +56965,8 @@ var ConfigReader = (function () {
56916
56965
  addOption('guides.attachPoint', [SNIPPET_SRC]);
56917
56966
  /**
56918
56967
  * Guides will be loaded, but not displayed. Call `pendo.startGuides()` to display guides when you choose
56919
- * to do so (this options has been moved from `delayGuides`).
56968
+ * to do so.
56969
+ * Alias: `delayGuides`
56920
56970
  *
56921
56971
  * @access public
56922
56972
  * @category Config/Guides
@@ -56924,9 +56974,10 @@ var ConfigReader = (function () {
56924
56974
  * @default false
56925
56975
  * @type {boolean}
56926
56976
  */
56927
- addOption('guides.delay', [SNIPPET_SRC]);
56977
+ addOption('guides.delay', [SNIPPET_SRC], undefined, undefined, ['delayGuides']);
56928
56978
  /**
56929
56979
  * Completely disables guides (this option has been moved from `disableGuides`).
56980
+ * Alias: `disableGuides`
56930
56981
  *
56931
56982
  * @access public
56932
56983
  * @category Config/Guides
@@ -56934,7 +56985,7 @@ var ConfigReader = (function () {
56934
56985
  * @default false
56935
56986
  * @type {boolean}
56936
56987
  */
56937
- addOption('guides.disabled', [SNIPPET_SRC]);
56988
+ addOption('guides.disabled', [SNIPPET_SRC], undefined, undefined, ['disableGuides']);
56938
56989
  /**
56939
56990
  * If 'true', guides with slow selectors will be removed from guide display processing.
56940
56991
  * This will improve application performance, but slow guides will not be shown to users.
@@ -56960,6 +57011,7 @@ var ConfigReader = (function () {
56960
57011
  /**
56961
57012
  * How long to wait for guides to load in milliseconds (this option has been moved from `guideTimeout`).
56962
57013
  * By default guides will not timeout.
57014
+ * Alias: `guideTimeout`
56963
57015
  *
56964
57016
  * @access public
56965
57017
  * @category Config/Guides
@@ -56967,7 +57019,7 @@ var ConfigReader = (function () {
56967
57019
  * @default undefined
56968
57020
  * @type {number}
56969
57021
  */
56970
- addOption('guides.timeout', [SNIPPET_SRC]);
57022
+ addOption('guides.timeout', [SNIPPET_SRC], undefined, undefined, ['guideTimeout']);
56971
57023
  /**
56972
57024
  * The tooltip arrow size (in pixels). This only affects classic guides.
56973
57025
  *
@@ -57058,10 +57110,10 @@ var ConfigReader = (function () {
57058
57110
  // Adopt
57059
57111
  addOption('adoptHost');
57060
57112
  addOption('adoptAnalyticsForwarding');
57061
- addOption('agentDebuggerPluginLoader');
57113
+ addOption('webSDKDebuggerPluginLoader', [PENDO_CONFIG_SRC], undefined, undefined, ['agentDebuggerPluginLoader']);
57062
57114
  addOption('allowPartnerAnalyticsForwarding', [SNIPPET_SRC], false);
57063
57115
  addOption('adoptPrioritizeAdoptGuides', [PENDO_CONFIG_SRC], false);
57064
- addOption('designerAgentPluginsLoader', [PENDO_CONFIG_SRC, SNIPPET_SRC]);
57116
+ addOption('designerWebSDKPluginsLoader', [PENDO_CONFIG_SRC, SNIPPET_SRC], undefined, undefined, ['designerAgentPluginsLoader']);
57065
57117
  addOption('guideContentLoader', [PENDO_CONFIG_SRC]);
57066
57118
  addOption('trainingPartner');
57067
57119
  addOption('oemAccountId', [SNIPPET_SRC]);
@@ -57100,8 +57152,18 @@ var ConfigReader = (function () {
57100
57152
  function getValueFromSourceGetter(option, sourceGetter) {
57101
57153
  if (!sourceGetter)
57102
57154
  return;
57103
- var source = sourceGetter();
57104
- var v = _.get(source.lookup, getConfigKey(option));
57155
+ const source = sourceGetter();
57156
+ let v = _.get(source.lookup, getConfigKey(option));
57157
+ // need to also check option aliases if the option.name key is not found in the source
57158
+ if (!doesExist(v)) {
57159
+ const aliasWithValue = _.find(option.aliases || [], function (alias) {
57160
+ const val = _.get(source.lookup, alias);
57161
+ if (doesExist(val))
57162
+ return val;
57163
+ });
57164
+ if (aliasWithValue)
57165
+ v = _.get(source.lookup, aliasWithValue);
57166
+ }
57105
57167
  return doesExist(v) ? v : undefined;
57106
57168
  }
57107
57169
  function getValueFromSource(option, src) {
@@ -57118,10 +57180,6 @@ var ConfigReader = (function () {
57118
57180
  var option = findOption(optionName);
57119
57181
  defaultValue = defaultValue || _.get(option, 'defaultValue', null);
57120
57182
  var defaultReturn = new ConfigValue(optionName, defaultValue, DEFAULT_SRC);
57121
- // if (source) {
57122
- // var val = getValueFromSource(option, source);
57123
- // return val;
57124
- // }
57125
57183
  var validOptions = mapSourcesToValues(option, sources);
57126
57184
  // defaultValue must exist in order to use non-ordered sources,
57127
57185
  // otherwise you can't know what value to value over another.