@pendo/web-sdk 2.312.0 → 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.0_';
3928
- let PACKAGE_VERSION = '2.312.0';
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
  /**
@@ -10157,6 +10179,14 @@ var _setClass = function (ele, cls) {
10157
10179
  */
10158
10180
  var _getClass = function (ele) {
10159
10181
  try {
10182
+ const { classList } = ele;
10183
+ if (classList && classList.length > 0) {
10184
+ var classes = [];
10185
+ for (var i = 0; i < classList.length; i++) {
10186
+ classes.push(classList[i]);
10187
+ }
10188
+ return classes.join(' ');
10189
+ }
10160
10190
  var className = ele.className;
10161
10191
  className = _.isString(className) || !doesExist(className) ? className : ele.getAttribute('class');
10162
10192
  return className || '';
@@ -12631,7 +12661,6 @@ function eventCreate(type, props, url, name, eventProperties, context) {
12631
12661
  if (type === 'track') {
12632
12662
  eventObj.track_event_name = name || defaultTrackName;
12633
12663
  }
12634
- Events.eventCaptured.trigger(eventObj, context);
12635
12664
  return eventObj;
12636
12665
  }
12637
12666
  function shouldCollectEvent() {
@@ -12651,7 +12680,11 @@ function shouldCollectEvent() {
12651
12680
  function collectEvent(type, props, url, name, eventProperties, context) {
12652
12681
  if (!shouldCollectEvent())
12653
12682
  return;
12654
- 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
+ }
12655
12688
  if (!isURLValid(event.url)) {
12656
12689
  return;
12657
12690
  }
@@ -12843,6 +12876,13 @@ function filterAnalyticsDisabled(silo, next) {
12843
12876
  return;
12844
12877
  next(silo);
12845
12878
  }
12879
+ function fireEventCaptured(silo, next) {
12880
+ var captureEvent = Events.eventCaptured.trigger(silo);
12881
+ if (captureEvent.cancel) {
12882
+ return;
12883
+ }
12884
+ next(silo);
12885
+ }
12846
12886
  function errorLogger() {
12847
12887
  return function (silo, next) {
12848
12888
  if (silo.length === 1 && silo.JZB.length > ENCODED_EVENT_MAX_POST_LENGTH) {
@@ -13736,7 +13776,7 @@ var wirePage = function (eventList) {
13736
13776
  unwire.push(() => { handle_change_event.cancel(); });
13737
13777
  unwire.push(attachEventInternal(document, 'change', handle_change_event, true));
13738
13778
  }
13739
- const interceptElementRemoval = ConfigReader.get('interceptElementRemoval') || ConfigReader.get('syntheticClicks.elementRemoval');
13779
+ const interceptElementRemoval = ConfigReader.get('syntheticClicks.elementRemoval');
13740
13780
  const interceptMouseUp = ConfigReader.get('syntheticClicks.targetChanged');
13741
13781
  unwire.push(wireSyntheticClicks(dom.event.trigger, sniffer.addEventListener, interceptElementRemoval, interceptMouseUp).teardown);
13742
13782
  unwire.push(listenForEvents(eventList));
@@ -23128,7 +23168,7 @@ const Keys = (function () {
23128
23168
  _apiKey = key;
23129
23169
  };
23130
23170
  const discoverApiKey = (apiKey) => {
23131
- apiKey = ConfigReader.get('publicAppId') || ConfigReader.get('apiKey', apiKey);
23171
+ apiKey = ConfigReader.get('publicAppId', apiKey);
23132
23172
  if (apiKey) {
23133
23173
  setApiKey(apiKey);
23134
23174
  }
@@ -25786,7 +25826,6 @@ function createGuideEvent(name, guideId, stepId, visitorId, reason, language) {
25786
25826
  url: pendoDotUrl.externalizeURL(),
25787
25827
  props
25788
25828
  });
25789
- Events.eventCaptured.trigger(event);
25790
25829
  return event;
25791
25830
  }
25792
25831
  var stagedEventsTimer = null;
@@ -26234,7 +26273,7 @@ var loadGuides = function (apiKey, visitorId, page, callback) {
26234
26273
  Events.guidesFailed.trigger();
26235
26274
  deferred.reject(err);
26236
26275
  });
26237
- var guideTimeoutDuration = ConfigReader.get('guideTimeout') || ConfigReader.get('guides.timeout');
26276
+ var guideTimeoutDuration = ConfigReader.get('guides.timeout');
26238
26277
  if (_.isNumber(guideTimeoutDuration)) {
26239
26278
  clearTimeout(loadGuidesTimeout);
26240
26279
  loadGuidesTimeout = setTimeout$1(function () {
@@ -26368,7 +26407,7 @@ var getGuideEventCache = function () {
26368
26407
  };
26369
26408
  function createGuideEventQueue(options) {
26370
26409
  const processSilos = pipeline(filterAnalyticsDisabled, splitSiloOnFieldChange('visitor_id'), splitSiloOnFieldChange('props.guide_id'), splitSiloOnFieldChange('props.source'), compressSilo, errorLogger(), addSiloParams(options), addAccountIdParamIfAdoptPartner, addSourceParamIfPresent, convertSiloToObject);
26371
- 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
26372
26411
  );
26373
26412
  return new EventQueue(_.extend({ processSilos, packageSilos }, options));
26374
26413
  }
@@ -26577,7 +26616,7 @@ var initGuides = function (observer) {
26577
26616
  * pendo.areGuidesDisabled() => true
26578
26617
  */
26579
26618
  var areGuidesDisabled = function () {
26580
- return ConfigReader.get('guides.disabled', false) || ConfigReader.get('disableGuides', false) || !pendoCore;
26619
+ return ConfigReader.get('guides.disabled', false) || !pendoCore;
26581
26620
  };
26582
26621
  /**
26583
26622
  * Returns true or false if the client has delayed guides in the snippet or via a command
@@ -26589,7 +26628,7 @@ var areGuidesDisabled = function () {
26589
26628
  * pendo.areGuidesDelayed() => true
26590
26629
  */
26591
26630
  var areGuidesDelayed = function () {
26592
- return ConfigReader.get('guides.delay', false) || ConfigReader.get('delayGuides', false);
26631
+ return ConfigReader.get('guides.delay', false);
26593
26632
  };
26594
26633
  var setGuidesDisabled = function (areDisabled) {
26595
26634
  var originalOptions = ConfigReader.getLocalConfig();
@@ -32945,7 +32984,8 @@ var FramesModule = (function () {
32945
32984
  isTop,
32946
32985
  visibility: isTop ? 'visible' : 'unknown',
32947
32986
  apiKey: pendo$1.apiKey,
32948
- leaderKey
32987
+ leaderKey,
32988
+ forcedLeader: ConfigReader.get('forcedLeader')
32949
32989
  }, currentFrameState)
32950
32990
  });
32951
32991
  },
@@ -33019,27 +33059,31 @@ var FramesModule = (function () {
33019
33059
  context.dispatch('electLeader');
33020
33060
  }, 50),
33021
33061
  electLeader(context) {
33022
- var state = context.state;
33023
- var candidateFrames = state.frames;
33024
- var leaderKeyPreference = context.getters.leaderKeyPreference();
33062
+ const state = context.state;
33063
+ let candidateFrames = state.frames;
33064
+ const leaderKeyPreference = context.getters.leaderKeyPreference();
33025
33065
  if (leaderKeyPreference.length) {
33026
33066
  while (leaderKeyPreference.length) {
33027
- var leaderKey = leaderKeyPreference.shift();
33028
- var framesWithKey = _.filter(state.frames, (frame) => frame.apiKey === leaderKey);
33067
+ const leaderKey = leaderKeyPreference.shift();
33068
+ const framesWithKey = _.filter(state.frames, (frame) => frame.apiKey === leaderKey);
33029
33069
  if (framesWithKey.length) {
33030
33070
  candidateFrames = framesWithKey;
33031
33071
  break;
33032
33072
  }
33033
33073
  }
33034
33074
  }
33035
- 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);
33036
33080
  if (topFrame) {
33037
33081
  context.dispatch('followLeader', {
33038
33082
  leaderId: topFrame.id
33039
33083
  });
33040
33084
  }
33041
33085
  else {
33042
- var oldestFrame = _.min(candidateFrames, 'joinedAt');
33086
+ const oldestFrame = _.min(candidateFrames, 'joinedAt');
33043
33087
  context.dispatch('followLeader', {
33044
33088
  leaderId: oldestFrame.id
33045
33089
  });
@@ -33686,9 +33730,13 @@ var FramesModule = (function () {
33686
33730
  },
33687
33731
  canShowRCBadge(state, getters) {
33688
33732
  if (getters.leaderKey() !== pendo$1.apiKey) {
33689
- const sameKeyFrames = _.filter(state.frames, function (frame) {
33733
+ let sameKeyFrames = _.filter(state.frames, function (frame) {
33690
33734
  return frame.apiKey === pendo$1.apiKey;
33691
33735
  });
33736
+ const forcedLeaderFrames = _.filter(sameKeyFrames, (frame) => frame.forcedLeader);
33737
+ if (forcedLeaderFrames.length) {
33738
+ sameKeyFrames = forcedLeaderFrames;
33739
+ }
33692
33740
  const topFrame = _.find(sameKeyFrames, function (frame) {
33693
33741
  return frame.isTop;
33694
33742
  });
@@ -33700,12 +33748,6 @@ var FramesModule = (function () {
33700
33748
  });
33701
33749
  return state.frameId === firstJoined.id;
33702
33750
  }
33703
- var hasTopFrame = _.any(state.frames, function (frame) {
33704
- return frame.isTop;
33705
- });
33706
- if (hasTopFrame) {
33707
- return getters.isTop();
33708
- }
33709
33751
  return getters.isLeader();
33710
33752
  },
33711
33753
  leaderKeyPreference(state) {
@@ -37911,7 +37953,7 @@ function startDebuggingModuleIfEnabled() {
37911
37953
  if (dom('#pendo-client-debugger').length)
37912
37954
  return;
37913
37955
  // if debugger launcher function exists on config, run it
37914
- const agentDebuggerPluginLoader = ConfigReader.get('agentDebuggerPluginLoader');
37956
+ const agentDebuggerPluginLoader = ConfigReader.get('webSDKDebuggerPluginLoader');
37915
37957
  if (PluginAPI.restartDebugger) {
37916
37958
  PluginAPI.restartDebugger();
37917
37959
  }
@@ -38607,14 +38649,14 @@ const EmbeddedGuides = (function () {
38607
38649
  // The guideLoopStopped event sometimes is sent when the guide loop is restarted, for example when a guide is advanced.
38608
38650
  // Do not hide embedded guides in these cases.
38609
38651
  // The delayGuides flag is set when guides are manually stopped, and unset when guides are manually started.
38610
- if (pluginApi.ConfigReader.get('delayGuides')) {
38652
+ if (pluginApi.ConfigReader.get('guides.delay')) {
38611
38653
  hideAllEmbeddedGuides();
38612
38654
  }
38613
38655
  }
38614
38656
  function hideGuide(event) {
38615
38657
  const guideId = _.get(event, 'data.0.props.guide_id', null);
38616
38658
  if (guideId) {
38617
- const guide = embeddedGuides.find(({ id }) => id === guideId);
38659
+ const guide = _.find(embeddedGuides, ({ id }) => id === guideId);
38618
38660
  if (guide) {
38619
38661
  guide.hide();
38620
38662
  }
@@ -42239,7 +42281,9 @@ function VocPortal() {
42239
42281
  visitor: metadata.visitor,
42240
42282
  account: metadata.account,
42241
42283
  parentAccount: metadata.parentAccount,
42242
- sandboxMode: sandBoxMode
42284
+ sandboxMode: sandBoxMode,
42285
+ guideId: pendoGlobal._.get(pendoGlobal.getActiveGuide(), 'guide.id'),
42286
+ rcModuleId: pendoGlobal._.get(pendoGlobal.BuildingBlocks.BuildingBlockResourceCenter.getResourceCenter(), 'activeModule.id')
42243
42287
  };
42244
42288
  responseHandler(response);
42245
42289
  }
@@ -56308,9 +56352,10 @@ var ConfigReader = (function () {
56308
56352
  function initializeOptions() {
56309
56353
  // Core
56310
56354
  /**
56311
- * 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
56312
56356
  * only sent to the primary public app ID). This will only function if there are no `additionalPublicAppIds` set on
56313
56357
  * the configuration included in the downloaded web SDK.
56358
+ * Alias: `additionalApiKeys`
56314
56359
  *
56315
56360
  * @access public
56316
56361
  * @category Config/Core
@@ -56318,8 +56363,7 @@ var ConfigReader = (function () {
56318
56363
  * @default []
56319
56364
  * @type {string[]}
56320
56365
  */
56321
- addOption('additionalPublicAppIds', [PENDO_CONFIG_SRC, SNIPPET_SRC]);
56322
- addOption('additionalApiKeys', [PENDO_CONFIG_SRC, SNIPPET_SRC]);
56366
+ addOption('additionalPublicAppIds', [PENDO_CONFIG_SRC, SNIPPET_SRC], undefined, undefined, ['additionalApiKeys']);
56323
56367
  addOption('allowedOriginServers');
56324
56368
  addOption('allowedOriginServerHashes');
56325
56369
  addOption('allowMixedApplicationFrames', [SNIPPET_SRC, PENDO_CONFIG_SRC], true);
@@ -56336,8 +56380,9 @@ var ConfigReader = (function () {
56336
56380
  */
56337
56381
  addOption('annotateUrl', [SNIPPET_SRC]);
56338
56382
  /**
56339
- * 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
56340
56384
  * on the configuration included in the downloaded web SDK.
56385
+ * Alias: `apiKey`
56341
56386
  *
56342
56387
  * @access public
56343
56388
  * @category Config/Core
@@ -56345,8 +56390,7 @@ var ConfigReader = (function () {
56345
56390
  * @default undefined
56346
56391
  * @type {string}
56347
56392
  */
56348
- addOption('publicAppId', [PENDO_CONFIG_SRC, SNIPPET_SRC]);
56349
- addOption('apiKey', [PENDO_CONFIG_SRC, SNIPPET_SRC]);
56393
+ addOption('publicAppId', [PENDO_CONFIG_SRC, SNIPPET_SRC], undefined, undefined, ['apiKey']);
56350
56394
  addOption('assetHost', [SNIPPET_SRC, PENDO_CONFIG_SRC]);
56351
56395
  /**
56352
56396
  * If set to `true`, the web SDK will try to install and initialize in all same-origin frames on the page.
@@ -56359,7 +56403,7 @@ var ConfigReader = (function () {
56359
56403
  * @type {boolean}
56360
56404
  */
56361
56405
  addOption('autoFrameInstall', [SNIPPET_SRC, PENDO_CONFIG_SRC], false);
56362
- addOption('blockAgentMetadata', [PENDO_CONFIG_SRC], false);
56406
+ addOption('blockWebSDKMetadata', [PENDO_CONFIG_SRC], false, undefined, ['blockAgentMetadata']);
56363
56407
  /**
56364
56408
  * An alternate url to load guide content from. This will be used to replace the standard google storage
56365
56409
  * url for your subscription. Usually used for
@@ -56434,6 +56478,37 @@ var ConfigReader = (function () {
56434
56478
  */
56435
56479
  addOption('disablePersistence', [SNIPPET_SRC, PENDO_CONFIG_SRC]);
56436
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);
56437
56512
  /**
56438
56513
  * By default, the identity of a visitor in various iframes on a page are independent from each other.
56439
56514
  * Setting this to `true` will instead have the web SDK make sure all frames use the exact same visitor and
@@ -56458,23 +56533,6 @@ var ConfigReader = (function () {
56458
56533
  * @type {boolean}
56459
56534
  */
56460
56535
  addOption('frameIdentityTopDownOnly', [SNIPPET_SRC, PENDO_CONFIG_SRC], true);
56461
- /**
56462
- * Having identity persisted by default makes it so that a transition from using identified visitor ids
56463
- * to using anonymous visitor ids is challenging. Anyone that used your application with an identified
56464
- * visitor id would have that value persisted to storage and whenever the web SDK is initialized for them,
56465
- * that value would be read from storage treating them as the same identified visitor. When set `true`,
56466
- * this config option will only use persisted identity values if they are an anonymous id. It is meant to
56467
- * be used to smoothly make this transition to using anonymous ids while still retaining the benefit of
56468
- * consistent anonymous ids for visitors. This option will be ignored if you provide an identified
56469
- * visitorId to the initialize call.
56470
- *
56471
- * @access public
56472
- * @category Config/Core
56473
- * @name forceAnonymous
56474
- * @default false
56475
- * @type {boolean}
56476
- */
56477
- addOption('forceAnonymous', [SNIPPET_SRC, PENDO_CONFIG_SRC], false);
56478
56536
  addOption('identityStorageLifetime', [SNIPPET_SRC, PENDO_CONFIG_SRC]);
56479
56537
  addOption('identityStorageSuffix', [SNIPPET_SRC, PENDO_CONFIG_SRC]);
56480
56538
  /**
@@ -56575,7 +56633,7 @@ var ConfigReader = (function () {
56575
56633
  * @type {boolean}
56576
56634
  */
56577
56635
  addOption('preventUnloadListener', [SNIPPET_SRC, PENDO_CONFIG_SRC], false);
56578
- addOption('promotedAgentMetadataConfigurations', [PENDO_CONFIG_SRC]);
56636
+ addOption('promotedWebSDKMetadataConfigurations', [PENDO_CONFIG_SRC], undefined, undefined, ['promotedAgentMetadataConfigurations']);
56579
56637
  /**
56580
56638
  * An array of strings or a function that returns an array of strings. The web SDK will then strip any query
56581
56639
  * string parameters from the url that are not found in the provided array. **Deprecated:** new usages to
@@ -56605,14 +56663,15 @@ var ConfigReader = (function () {
56605
56663
  /**
56606
56664
  * Meant to be used with `autoFrameInstall`. If set, the web SDK will use this as the url to download itself
56607
56665
  * from in child frames. Read more about [frame support](/advanced/auto-frame-install).
56666
+ * Alias: `selfHostedAgentUrl`
56608
56667
  *
56609
56668
  * @access public
56610
56669
  * @category Config/Core
56611
- * @name selfHostedAgentUrl
56670
+ * @name selfHostedWebSDKUrl
56612
56671
  * @default undefined
56613
56672
  * @type {string}
56614
56673
  */
56615
- addOption('selfHostedAgentUrl', [SNIPPET_SRC, PENDO_CONFIG_SRC]);
56674
+ addOption('selfHostedWebSDKUrl', [SNIPPET_SRC, PENDO_CONFIG_SRC], undefined, undefined, ['selfHostedAgentUrl']);
56616
56675
  /**
56617
56676
  * If this option is set to true, event data will only be transmitted using requests of type POST instead
56618
56677
  * of first trying to use GET requests. This can result in fewer requests being sent each time that event data
@@ -56714,7 +56773,6 @@ var ConfigReader = (function () {
56714
56773
  addOption('excludeNonGuideAnalytics', [SNIPPET_SRC, PENDO_CONFIG_SRC], false);
56715
56774
  addOption('htmlAttributeBlacklist');
56716
56775
  addOption('htmlAttributes');
56717
- addOption('interceptElementRemoval', [SNIPPET_SRC, PENDO_CONFIG_SRC], false); // old, use syntheticClicks.elementRemoval instead
56718
56776
  /**
56719
56777
  * By default, the web SDK will attempt to intercept calls to `preventDefault` on `touchend` events in order to
56720
56778
  * ensure that Pendo still tracks the click event. There are cases where your application might prevent these
@@ -56746,6 +56804,7 @@ var ConfigReader = (function () {
56746
56804
  * events. In these cases, Pendo will not be able to capture the `click` event properly for events or guide
56747
56805
  * behavior. Setting this to `true` will have the web SDK intercept these types of element removal to ensure
56748
56806
  * more consistent Pendo behavior (this option has been moved from `interceptElementRemoval`).
56807
+ * Alias: `interceptElementRemoval`
56749
56808
  *
56750
56809
  * @access public
56751
56810
  * @category Config/Analytics
@@ -56753,7 +56812,7 @@ var ConfigReader = (function () {
56753
56812
  * @default false
56754
56813
  * @type {boolean}
56755
56814
  */
56756
- addOption('syntheticClicks.elementRemoval', [SNIPPET_SRC, PENDO_CONFIG_SRC], false);
56815
+ addOption('syntheticClicks.elementRemoval', [SNIPPET_SRC, PENDO_CONFIG_SRC], false, undefined, ['interceptElementRemoval']);
56757
56816
  /**
56758
56817
  * A `click` is classified by the browser as the same element receiving the `mousedown` and `mouseup` events.
56759
56818
  * When `true` this option will allow Pendo to treat cases where a visitor clicks down the mouse, moves the
@@ -56802,7 +56861,6 @@ var ConfigReader = (function () {
56802
56861
  * @type {Number}
56803
56862
  */
56804
56863
  addOption('cacheGuidesTimeout', [PENDO_CONFIG_SRC], 600000);
56805
- addOption('delayGuides', [SNIPPET_SRC]); // old, use guides.delay instead
56806
56864
  /**
56807
56865
  * If `true`, this will prevent the web SDK from attempting to launch the Visual Design Studio.
56808
56866
  *
@@ -56838,7 +56896,6 @@ var ConfigReader = (function () {
56838
56896
  * @type {boolean}
56839
56897
  */
56840
56898
  addOption('disableGuidePseudoStyles', [SNIPPET_SRC, PENDO_CONFIG_SRC], false);
56841
- addOption('disableGuides', [SNIPPET_SRC]); // old, use guides.disabled instead
56842
56899
  /**
56843
56900
  * Content of badge and target element activated guides will be prefetched on load to improve guide display
56844
56901
  * time unless set to `true`.
@@ -56883,7 +56940,7 @@ var ConfigReader = (function () {
56883
56940
  * @type {number}
56884
56941
  */
56885
56942
  addOption('guideSeenTimeoutLength', [PENDO_CONFIG_SRC, SNIPPET_SRC], 10000);
56886
- addOption('guideTimeout', [SNIPPET_SRC]); // old, use guides.timeout instead
56943
+ // addOption('guideTimeout', [SNIPPET_SRC]); // old, use guides.timeout instead
56887
56944
  /**
56888
56945
  * If `true`, guides will be verified against their saved content hash before display to ensure validity of
56889
56946
  * guide content.
@@ -56908,7 +56965,8 @@ var ConfigReader = (function () {
56908
56965
  addOption('guides.attachPoint', [SNIPPET_SRC]);
56909
56966
  /**
56910
56967
  * Guides will be loaded, but not displayed. Call `pendo.startGuides()` to display guides when you choose
56911
- * to do so (this options has been moved from `delayGuides`).
56968
+ * to do so.
56969
+ * Alias: `delayGuides`
56912
56970
  *
56913
56971
  * @access public
56914
56972
  * @category Config/Guides
@@ -56916,9 +56974,10 @@ var ConfigReader = (function () {
56916
56974
  * @default false
56917
56975
  * @type {boolean}
56918
56976
  */
56919
- addOption('guides.delay', [SNIPPET_SRC]);
56977
+ addOption('guides.delay', [SNIPPET_SRC], undefined, undefined, ['delayGuides']);
56920
56978
  /**
56921
56979
  * Completely disables guides (this option has been moved from `disableGuides`).
56980
+ * Alias: `disableGuides`
56922
56981
  *
56923
56982
  * @access public
56924
56983
  * @category Config/Guides
@@ -56926,7 +56985,7 @@ var ConfigReader = (function () {
56926
56985
  * @default false
56927
56986
  * @type {boolean}
56928
56987
  */
56929
- addOption('guides.disabled', [SNIPPET_SRC]);
56988
+ addOption('guides.disabled', [SNIPPET_SRC], undefined, undefined, ['disableGuides']);
56930
56989
  /**
56931
56990
  * If 'true', guides with slow selectors will be removed from guide display processing.
56932
56991
  * This will improve application performance, but slow guides will not be shown to users.
@@ -56952,6 +57011,7 @@ var ConfigReader = (function () {
56952
57011
  /**
56953
57012
  * How long to wait for guides to load in milliseconds (this option has been moved from `guideTimeout`).
56954
57013
  * By default guides will not timeout.
57014
+ * Alias: `guideTimeout`
56955
57015
  *
56956
57016
  * @access public
56957
57017
  * @category Config/Guides
@@ -56959,7 +57019,7 @@ var ConfigReader = (function () {
56959
57019
  * @default undefined
56960
57020
  * @type {number}
56961
57021
  */
56962
- addOption('guides.timeout', [SNIPPET_SRC]);
57022
+ addOption('guides.timeout', [SNIPPET_SRC], undefined, undefined, ['guideTimeout']);
56963
57023
  /**
56964
57024
  * The tooltip arrow size (in pixels). This only affects classic guides.
56965
57025
  *
@@ -57050,10 +57110,10 @@ var ConfigReader = (function () {
57050
57110
  // Adopt
57051
57111
  addOption('adoptHost');
57052
57112
  addOption('adoptAnalyticsForwarding');
57053
- addOption('agentDebuggerPluginLoader');
57113
+ addOption('webSDKDebuggerPluginLoader', [PENDO_CONFIG_SRC], undefined, undefined, ['agentDebuggerPluginLoader']);
57054
57114
  addOption('allowPartnerAnalyticsForwarding', [SNIPPET_SRC], false);
57055
57115
  addOption('adoptPrioritizeAdoptGuides', [PENDO_CONFIG_SRC], false);
57056
- addOption('designerAgentPluginsLoader', [PENDO_CONFIG_SRC, SNIPPET_SRC]);
57116
+ addOption('designerWebSDKPluginsLoader', [PENDO_CONFIG_SRC, SNIPPET_SRC], undefined, undefined, ['designerAgentPluginsLoader']);
57057
57117
  addOption('guideContentLoader', [PENDO_CONFIG_SRC]);
57058
57118
  addOption('trainingPartner');
57059
57119
  addOption('oemAccountId', [SNIPPET_SRC]);
@@ -57092,8 +57152,18 @@ var ConfigReader = (function () {
57092
57152
  function getValueFromSourceGetter(option, sourceGetter) {
57093
57153
  if (!sourceGetter)
57094
57154
  return;
57095
- var source = sourceGetter();
57096
- 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
+ }
57097
57167
  return doesExist(v) ? v : undefined;
57098
57168
  }
57099
57169
  function getValueFromSource(option, src) {
@@ -57110,10 +57180,6 @@ var ConfigReader = (function () {
57110
57180
  var option = findOption(optionName);
57111
57181
  defaultValue = defaultValue || _.get(option, 'defaultValue', null);
57112
57182
  var defaultReturn = new ConfigValue(optionName, defaultValue, DEFAULT_SRC);
57113
- // if (source) {
57114
- // var val = getValueFromSource(option, source);
57115
- // return val;
57116
- // }
57117
57183
  var validOptions = mapSourcesToValues(option, sources);
57118
57184
  // defaultValue must exist in order to use non-ordered sources,
57119
57185
  // otherwise you can't know what value to value over another.