@pendo/agent 2.297.2 → 2.298.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/dom.esm.js CHANGED
@@ -7314,7 +7314,7 @@ function getScreenPosition(element) {
7314
7314
  };
7315
7315
  }
7316
7316
 
7317
- var VERSION = '2.297.2_';
7317
+ var VERSION = '2.298.1_';
7318
7318
 
7319
7319
  var decodeURIComponent = _.isFunction(window.decodeURIComponent) ? window.decodeURIComponent : _.identity;
7320
7320
 
@@ -7334,7 +7334,7 @@ function allowKey(storageKey) {
7334
7334
  // Handles cases where localStorage is either not defined or inaccessible
7335
7335
  // by providing a do-nothing implementation
7336
7336
  // NOTE: Recently added a LocalStorage preference over cookies that is implemented
7337
- // `agentStorage` in `browserStorage.js`. These two should be reconciled but for
7337
+ // `agentStorage` in `browser-storage.js`. These two should be reconciled but for
7338
7338
  // now this shim was only used from Designer related parts of the Agent so the
7339
7339
  // separation was an easy thing to maintain.
7340
7340
  function wrapStorageMethod(storage, storageMethod, errorReturnValue) {
@@ -3904,8 +3904,8 @@ let SERVER = '';
3904
3904
  let ASSET_HOST = '';
3905
3905
  let ASSET_PATH = '';
3906
3906
  let DESIGNER_SERVER = '';
3907
- let VERSION = '2.297.2_';
3908
- let PACKAGE_VERSION = '2.297.2';
3907
+ let VERSION = '2.298.1_';
3908
+ let PACKAGE_VERSION = '2.298.1';
3909
3909
  let LOADER = 'xhr';
3910
3910
  /* eslint-enable agent-eslint-rules/no-gulp-env-references */
3911
3911
  /**
@@ -4336,7 +4336,7 @@ function allowKey(storageKey) {
4336
4336
  // Handles cases where localStorage is either not defined or inaccessible
4337
4337
  // by providing a do-nothing implementation
4338
4338
  // NOTE: Recently added a LocalStorage preference over cookies that is implemented
4339
- // `agentStorage` in `browserStorage.js`. These two should be reconciled but for
4339
+ // `agentStorage` in `browser-storage.js`. These two should be reconciled but for
4340
4340
  // now this shim was only used from Designer related parts of the Agent so the
4341
4341
  // separation was an easy thing to maintain.
4342
4342
  function wrapStorageMethod(storage, storageMethod, errorReturnValue) {
@@ -15351,6 +15351,8 @@ function addInlineStyles(config, id, styles, element = document.head) {
15351
15351
  }
15352
15352
 
15353
15353
  var BuildingBlockTemplates = (function () {
15354
+ var textElementTypes = ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'span', 'div',
15355
+ 'li', 'ul', 'ol', 'strong', 'em', 'b', 'i', 'small', 'label'];
15354
15356
  return {
15355
15357
  buildNodesFromTemplate,
15356
15358
  generateUnreadAnnouncementMiniBubble,
@@ -15482,6 +15484,21 @@ var BuildingBlockTemplates = (function () {
15482
15484
  var notificationBubbleConfig = _.get(homeView, 'attributes.notificationBubble');
15483
15485
  var notificationsObj = _.get(homeView, 'attributes.notifications');
15484
15486
  if (notificationBubbleConfig && notificationsObj) {
15487
+ // Check for dark mode and use dark mode colors if available
15488
+ if (homeView.steps && homeView.steps[0] && homeView.steps[0].isDarkMode) {
15489
+ var darkModeBackgroundColor = _.get(homeView, 'attributes.darkMode.notificationBubble.background-color');
15490
+ var darkModeTextColor = _.get(homeView, 'attributes.darkMode.notificationBubble.color');
15491
+ if (darkModeBackgroundColor || darkModeTextColor) {
15492
+ // Create a copy of the config with dark mode colors
15493
+ notificationBubbleConfig = _.clone(notificationBubbleConfig);
15494
+ if (darkModeBackgroundColor) {
15495
+ notificationBubbleConfig['background-color'] = darkModeBackgroundColor;
15496
+ }
15497
+ if (darkModeTextColor) {
15498
+ notificationBubbleConfig.color = darkModeTextColor;
15499
+ }
15500
+ }
15501
+ }
15485
15502
  var notificationId;
15486
15503
  if (_.get(guide, 'attributes.resourceCenter.moduleId') === 'AnnouncementsModule') {
15487
15504
  notificationId = guide.id;
@@ -15720,6 +15737,7 @@ var BuildingBlockTemplates = (function () {
15720
15737
  bubbleConfig.dir = 'rtl';
15721
15738
  }
15722
15739
  }
15740
+ var announcementsModule = step.getGuide();
15723
15741
  return _.map(announcementGuides, function (guide, index) {
15724
15742
  var isP1WhatsNewGuide = _.get(guide, 'attributes.type') === 'whatsnew';
15725
15743
  var listItem = JSON.parse(JSON.stringify(templateJson)); // underscore doesn't have deep clone
@@ -15729,15 +15747,54 @@ var BuildingBlockTemplates = (function () {
15729
15747
  if (isP1WhatsNewGuide) {
15730
15748
  return renderWhatsNew(guide, listItem, bubbleConfig, buildNodeFromJSON);
15731
15749
  }
15732
- return renderAnnouncement(guide, listItem, bubbleConfig, buildNodeFromJSON);
15750
+ return renderAnnouncement(guide, listItem, bubbleConfig, buildNodeFromJSON, announcementsModule);
15733
15751
  });
15734
15752
  }
15735
- function renderAnnouncement(guide, listItem, bubbleConfig, buildNodeFromJSON) {
15753
+ function renderAnnouncement(guide, listItem, bubbleConfig, buildNodeFromJSON, announcementsModule) {
15736
15754
  var miniBubble;
15737
15755
  var processedGuide = GuideFactory(guide);
15738
15756
  var announcementStep = guide.steps[0];
15739
15757
  GuideRuntime.runCustomScripts(announcementStep, processedGuide);
15740
15758
  var announcementDomJson = JSON.parse(JSON.stringify(announcementStep.domJson)); // underscore doesn't have deep clone
15759
+ // Apply dark mode color overrides if enabled
15760
+ var darkModeOverrides = _.get(announcementsModule, 'attributes.darkModeColorOverrides');
15761
+ if (darkModeOverrides && darkModeOverrides.enabled) {
15762
+ // Cache frequently accessed objects
15763
+ var announcementStepAttrs = announcementStep.attributes;
15764
+ var announcementStepDarkMode = _.get(announcementStepAttrs, 'darkMode');
15765
+ var announcementsModuleDarkMode = _.get(announcementsModule, 'attributes.darkMode');
15766
+ var darkModeSelector = _.get(announcementsModuleDarkMode, 'selector', '');
15767
+ // Cascade dark mode selector from announcements module to announcement guide
15768
+ if (darkModeSelector && announcementStepAttrs) {
15769
+ if (!announcementStepDarkMode) {
15770
+ announcementStepAttrs.darkMode = { selector: '' };
15771
+ announcementStepDarkMode = announcementStepAttrs.darkMode;
15772
+ }
15773
+ announcementStepDarkMode.selector = darkModeSelector;
15774
+ }
15775
+ // Determine if dark mode is active
15776
+ var isDarkModeActive = false;
15777
+ var effectiveSelector = _.get(announcementStepDarkMode, 'selector', '') || darkModeSelector;
15778
+ if (pendo$1.designerEnabled) {
15779
+ // In designer mode, check override values
15780
+ isDarkModeActive = _.get(announcementStepDarkMode, 'override') ||
15781
+ _.get(announcementsModule, 'steps.0.attributes.darkMode.override', false);
15782
+ }
15783
+ else if (effectiveSelector) {
15784
+ // In client mode, detect based on selector
15785
+ isDarkModeActive = pendo$1.Sizzle(effectiveSelector).length > 0;
15786
+ }
15787
+ if (isDarkModeActive) {
15788
+ // Only apply overrides if we have actual color values to apply
15789
+ var hasValidOverrides = darkModeOverrides.guideBackground ||
15790
+ darkModeOverrides.textColor ||
15791
+ darkModeOverrides.linkColor ||
15792
+ darkModeOverrides.borderColor;
15793
+ if (hasValidOverrides) {
15794
+ applyDarkModeColorOverrides(announcementDomJson, darkModeOverrides);
15795
+ }
15796
+ }
15797
+ }
15741
15798
  listItem.children = [announcementDomJson];
15742
15799
  if (bubbleConfig) {
15743
15800
  miniBubble = generateUnreadAnnouncementMiniBubble(bubbleConfig);
@@ -15874,6 +15931,41 @@ var BuildingBlockTemplates = (function () {
15874
15931
  };
15875
15932
  listItemRow.children.splice(textContainerIndex + 1, 0, notificationBubble);
15876
15933
  }
15934
+ function applyDarkModeColorOverrides(domJson, overrides) {
15935
+ var props = _.get(domJson, 'props');
15936
+ if (!domJson || !props)
15937
+ return;
15938
+ if (!props.style)
15939
+ props.style = {};
15940
+ var style = props.style;
15941
+ var elementId = _.get(props, 'id', '');
15942
+ if (elementId.indexOf('pendo-guide-container') !== -1) {
15943
+ if (overrides.guideBackground) {
15944
+ style['background-color'] = overrides.guideBackground;
15945
+ }
15946
+ if (overrides.borderColor) {
15947
+ style['border-color'] = overrides.borderColor;
15948
+ }
15949
+ }
15950
+ var isLink = domJson.type === 'a';
15951
+ if (isLink && overrides.linkColor) {
15952
+ style.color = overrides.linkColor;
15953
+ }
15954
+ var textColor = overrides.textColor;
15955
+ if (!isLink && textColor) {
15956
+ var content = _.get(domJson, 'content', '');
15957
+ var hasTextContent = content && typeof content === 'string' && content.trim().length > 0;
15958
+ if (textElementTypes.indexOf(domJson.type) !== -1 || hasTextContent) {
15959
+ style.color = textColor;
15960
+ }
15961
+ }
15962
+ var children = _.get(domJson, 'children', []);
15963
+ if (_.isArray(children)) {
15964
+ _.each(children, function (child) {
15965
+ applyDarkModeColorOverrides(child, overrides);
15966
+ });
15967
+ }
15968
+ }
15877
15969
  })();
15878
15970
 
15879
15971
  var BuildingBlockSvgs = (function () {
@@ -15881,18 +15973,18 @@ var BuildingBlockSvgs = (function () {
15881
15973
  buildSvgNode,
15882
15974
  createProgressCircleSvg
15883
15975
  };
15884
- function buildSvgNode(widgetId, json) {
15976
+ function buildSvgNode(widgetId, json, isDarkMode) {
15885
15977
  // eslint-disable-next-line default-case
15886
15978
  switch (widgetId) {
15887
15979
  case 'onboardingProgressCircle':
15888
15980
  case 'taskListProgressCircle':
15889
- return createProgressCircleSvg(json);
15981
+ return createProgressCircleSvg(json, isDarkMode);
15890
15982
  }
15891
15983
  }
15892
- function createProgressCircleSvg(bbJson) {
15984
+ function createProgressCircleSvg(bbJson, isDarkMode) {
15893
15985
  if (isOldIE(9))
15894
- return createProgressCircleIEFallback(bbJson);
15895
- var svgAttributes = bbJson.svgAttributes;
15986
+ return createProgressCircleIEFallback(bbJson, isDarkMode);
15987
+ var svgAttributes = getSvgAttributes(bbJson, isDarkMode);
15896
15988
  var percentComplete = svgAttributes.fillCircle.percentComplete || 0;
15897
15989
  var isComplete = percentComplete >= 100;
15898
15990
  if (isComplete) {
@@ -15936,8 +16028,8 @@ var BuildingBlockSvgs = (function () {
15936
16028
  }
15937
16029
  return svgElement;
15938
16030
  }
15939
- function createProgressCircleIEFallback(bbJson) {
15940
- var svgAttributes = bbJson.svgAttributes;
16031
+ function createProgressCircleIEFallback(bbJson, isDarkMode) {
16032
+ var svgAttributes = getSvgAttributes(bbJson, isDarkMode);
15941
16033
  var fillColor = svgAttributes.fillCircle.stroke;
15942
16034
  var backgroundColor = svgAttributes.backgroundCircle.stroke;
15943
16035
  var percentComplete = svgAttributes.fillCircle.percentComplete || 0;
@@ -15963,6 +16055,22 @@ var BuildingBlockSvgs = (function () {
15963
16055
  }
15964
16056
  return fallbackSquare;
15965
16057
  }
16058
+ function getSvgAttributes(bbJson, isDarkMode) {
16059
+ // Always start with the regular SVG attributes
16060
+ var svgAttributes = _.clone(bbJson.svgAttributes);
16061
+ // If dark mode is active and dark mode attributes exist, override only the stroke colors
16062
+ if (isDarkMode && bbJson.darkModeSvgAttributes) {
16063
+ var backgroundCircleStroke = _.get(bbJson.darkModeSvgAttributes, 'backgroundCircle.stroke');
16064
+ if (backgroundCircleStroke) {
16065
+ svgAttributes.backgroundCircle.stroke = backgroundCircleStroke;
16066
+ }
16067
+ var fillCircleStroke = _.get(bbJson.darkModeSvgAttributes, 'fillCircle.stroke');
16068
+ if (fillCircleStroke) {
16069
+ svgAttributes.fillCircle.stroke = fillCircleStroke;
16070
+ }
16071
+ }
16072
+ return svgAttributes;
16073
+ }
15966
16074
  })();
15967
16075
 
15968
16076
  var isLessThan = function (x, y) { return x < y; };
@@ -16187,7 +16295,11 @@ function addStylesToBackdrops(backdrops, step) {
16187
16295
  _.each(originalBackdrop.props, function (propValue, propKey) {
16188
16296
  _.each(backdrops, function (backdrop, index) {
16189
16297
  if (propKey === 'style') {
16190
- backdrop.css(originalBackdrop.props.style);
16298
+ let nodeStyle = originalBackdrop.props.style;
16299
+ if (step.isDarkMode && originalBackdrop.darkModeProps) {
16300
+ nodeStyle = Object.assign(Object.assign({}, originalBackdrop.props.style), originalBackdrop.darkModeProps.style);
16301
+ }
16302
+ backdrop.css(nodeStyle);
16191
16303
  }
16192
16304
  else if (propKey === 'class') {
16193
16305
  backdrop.addClass(propValue);
@@ -18021,7 +18133,7 @@ function buildNodeFromJSON(json, step, guides) {
18021
18133
  }
18022
18134
  }
18023
18135
  if (json.svgWidgetId) {
18024
- var svg = BuildingBlockSvgs.buildSvgNode(json.svgWidgetId, json);
18136
+ var svg = BuildingBlockSvgs.buildSvgNode(json.svgWidgetId, json, step.isDarkMode);
18025
18137
  svg.appendTo(curNode);
18026
18138
  }
18027
18139
  if (json.actions && json.actions.length) {
@@ -20719,10 +20831,19 @@ function syncColorMode(step, rerender = false) {
20719
20831
  const darkModeSelector = _.get(step, 'attributes.darkMode.selector', '');
20720
20832
  if (!darkModeSelector)
20721
20833
  return;
20722
- const isDarkMode = pendo$1.Sizzle(darkModeSelector).length > 0;
20723
- const darkModeChanged = step.isDarkMode !== isDarkMode;
20724
- if (darkModeChanged) {
20725
- step.isDarkMode = isDarkMode;
20834
+ // Determine the target dark mode state
20835
+ let targetDarkMode;
20836
+ if (pendo$1.designerEnabled && _.has(step, 'attributes.darkMode.override')) {
20837
+ // In designer mode, use the override value
20838
+ targetDarkMode = step.attributes.darkMode.override;
20839
+ }
20840
+ else {
20841
+ // In client mode, detect based on selector
20842
+ targetDarkMode = pendo$1.Sizzle(darkModeSelector).length > 0;
20843
+ }
20844
+ // Update and rerender if the state changed
20845
+ if (step.isDarkMode !== targetDarkMode) {
20846
+ step.isDarkMode = targetDarkMode;
20726
20847
  if (rerender) {
20727
20848
  step.hide();
20728
20849
  step.show(step.seenReason);
@@ -26477,15 +26598,15 @@ class NetworkRequestIntercept {
26477
26598
  const $stringLength = 8;
26478
26599
  return 'req_' + Date.now() + '_' + pendo$1.randomString($stringLength);
26479
26600
  }
26480
- safelyReadResponse(response) {
26601
+ safelyReadBody(config, type) {
26481
26602
  return __awaiter(this, void 0, void 0, function* () {
26482
26603
  try {
26483
- const contentType = response.headers.get('content-type') || '';
26604
+ const contentType = config.headers.get('content-type') || '';
26484
26605
  if (contentType.indexOf('application/json') !== -1) {
26485
- return yield response.json();
26606
+ return yield config.json();
26486
26607
  }
26487
26608
  else if (contentType.indexOf('text/') !== -1) {
26488
- return yield response.text();
26609
+ return yield config.text();
26489
26610
  }
26490
26611
  else {
26491
26612
  // For binary or unknown content types, just capture metadata
@@ -26493,14 +26614,14 @@ class NetworkRequestIntercept {
26493
26614
  }
26494
26615
  }
26495
26616
  catch (e) {
26496
- return '[Unable to read response body]';
26617
+ return `[Unable to read ${type} body]`;
26497
26618
  }
26498
26619
  });
26499
26620
  }
26500
- extractResponseHeaders(response) {
26621
+ extractConfigHeaders(config) {
26501
26622
  let headers = {};
26502
- if (response.headers) {
26503
- const headerEntries = Array.from(response.headers.entries());
26623
+ if (config.headers) {
26624
+ const headerEntries = Array.from(config.headers.entries());
26504
26625
  headers = this.entriesToObject(headerEntries);
26505
26626
  }
26506
26627
  return headers;
@@ -26518,19 +26639,44 @@ class NetworkRequestIntercept {
26518
26639
  });
26519
26640
  return headers;
26520
26641
  }
26642
+ safelyReadRequestBody(request, isRequestObject) {
26643
+ return __awaiter(this, void 0, void 0, function* () {
26644
+ if (!request)
26645
+ return '';
26646
+ const networkInterceptor = this;
26647
+ if (isRequestObject) {
26648
+ return networkInterceptor.safelyReadBody(request, 'request');
26649
+ }
26650
+ return networkInterceptor.safelySerializeBody(request.body);
26651
+ });
26652
+ }
26653
+ extractRequestHeaders(request, isRequestObject) {
26654
+ const networkInterceptor = this;
26655
+ if (isRequestObject) {
26656
+ return networkInterceptor.extractConfigHeaders(request);
26657
+ }
26658
+ return networkInterceptor.extractHeaders(request.headers);
26659
+ }
26521
26660
  patchFetch() {
26522
26661
  const networkInterceptor = this;
26523
26662
  networkInterceptor._originalFetch = window.fetch;
26524
26663
  window.fetch = function (...args) {
26525
26664
  return __awaiter(this, void 0, void 0, function* () {
26526
- const [url, config = {}] = args;
26665
+ let [url, config = {}] = args;
26666
+ let isRequestObject = false;
26667
+ if (_.isObject(args[0])) {
26668
+ isRequestObject = true;
26669
+ url = args[0].url;
26670
+ // Clone the Request object to avoid consuming the body
26671
+ config = args[0].clone();
26672
+ }
26527
26673
  const transformedUrl = getTransformedUrl(url);
26528
26674
  const method = config.method || 'GET';
26529
26675
  const requestId = networkInterceptor.generateRequestId();
26530
26676
  // Capture request data
26531
26677
  try {
26532
- const headers = networkInterceptor.extractHeaders(config.headers);
26533
- const body = networkInterceptor.safelySerializeBody(config.body);
26678
+ const headers = networkInterceptor.extractRequestHeaders(config, isRequestObject);
26679
+ const body = yield networkInterceptor.safelyReadRequestBody(config, isRequestObject);
26534
26680
  _.each(networkInterceptor.callbackFns, ({ request }) => {
26535
26681
  if (_.isFunction(request))
26536
26682
  request({ requestId, method, url: transformedUrl, body, headers });
@@ -26549,9 +26695,9 @@ class NetworkRequestIntercept {
26549
26695
  const responseClone = res.clone();
26550
26696
  try {
26551
26697
  // Capture response data
26552
- const responseBody = yield networkInterceptor.safelyReadResponse(responseClone);
26698
+ const responseBody = yield networkInterceptor.safelyReadBody(responseClone, 'response');
26553
26699
  const { status, statusText } = res;
26554
- const headers = networkInterceptor.extractResponseHeaders(res);
26700
+ const headers = networkInterceptor.extractConfigHeaders(res);
26555
26701
  _.each(networkInterceptor.callbackFns, ({ response }) => {
26556
26702
  if (_.isFunction(response)) {
26557
26703
  response({
@@ -39203,6 +39349,8 @@ class DOMPrompt {
39203
39349
  constructor(pendo, PluginAPI, id, privacyFilters, inputCssSelectors, submitCssSelectors) {
39204
39350
  this.listeners = [];
39205
39351
  this.latestPromptValue = '';
39352
+ this.isActive = true;
39353
+ this.lastSubmitTime = 0;
39206
39354
  this.dom = pendo.dom;
39207
39355
  this._ = pendo._;
39208
39356
  this.api = PluginAPI;
@@ -39293,9 +39441,15 @@ class DOMPrompt {
39293
39441
  return candidateValue.replace(filtersToUse, 'redacted');
39294
39442
  }
39295
39443
  submit(origVal) {
39296
- if (!origVal) {
39444
+ if (!origVal || !this.isActive) {
39445
+ return;
39446
+ }
39447
+ // Prevent duplicate submissions within 2ms
39448
+ const now = Date.now();
39449
+ if (now - this.lastSubmitTime < 2) {
39297
39450
  return;
39298
39451
  }
39452
+ this.lastSubmitTime = now;
39299
39453
  const val = this.applyPrivacyFilter(origVal);
39300
39454
  const payload = {
39301
39455
  agentId: this.id,
@@ -39341,6 +39495,22 @@ class DOMPrompt {
39341
39495
  onSubmit(callback) {
39342
39496
  this.listeners.push(callback);
39343
39497
  }
39498
+ suspend() {
39499
+ this.isActive = false;
39500
+ }
39501
+ resume() {
39502
+ this.isActive = true;
39503
+ this._.each(this.inputEls, (inputEl) => {
39504
+ if (inputEl) {
39505
+ inputEl.get();
39506
+ }
39507
+ });
39508
+ this._.each(this.submitEls, (submitEl) => {
39509
+ if (submitEl) {
39510
+ submitEl.get();
39511
+ }
39512
+ });
39513
+ }
39344
39514
  teardown() {
39345
39515
  if (this.promptContainer) {
39346
39516
  this.promptContainer.teardown();
@@ -39429,13 +39599,17 @@ class PromptPlugin {
39429
39599
  reEvaluatePageRules() {
39430
39600
  const currentUrl = getNormalizedUrl();
39431
39601
  const allAgents = this.api.ConfigReader.get(this.configName) || [];
39432
- const currentlyActiveIds = this._.map(this.prompts, prompt => prompt.id);
39433
- // Remove agents that no longer match from active tracking
39434
- this.prompts = this._.filter(this.prompts, prompt => {
39602
+ this._.each(this.prompts, prompt => {
39435
39603
  const agent = this.findAgentById(prompt.id);
39436
- return agent && this.testPageRule(agent.pageRule, currentUrl, agent.id);
39604
+ const shouldBeActive = agent && this.testPageRule(agent.pageRule, currentUrl, agent.id);
39605
+ if (shouldBeActive) {
39606
+ prompt.resume();
39607
+ }
39608
+ else {
39609
+ prompt.suspend();
39610
+ }
39437
39611
  });
39438
- // Set up new agents that should now match
39612
+ const currentlyActiveIds = this._.map(this._.filter(this.prompts, prompt => prompt.isActive), prompt => prompt.id);
39439
39613
  this._.each(allAgents, aiAgent => {
39440
39614
  const isCurrentlyActive = this._.contains(currentlyActiveIds, aiAgent.id);
39441
39615
  const shouldBeActive = this.testPageRule(aiAgent.pageRule, currentUrl, aiAgent.id);
@@ -39534,14 +39708,14 @@ class PromptPlugin {
39534
39708
  return selectors;
39535
39709
  }
39536
39710
  sendEvent(promptEvent) {
39537
- const currentUrl = getNormalizedUrl();
39538
- const agent = this.findAgentById(promptEvent.agentId);
39539
- // Block event if page rule doesn't match
39540
- if (agent && !this.testPageRule(agent.pageRule, currentUrl, agent.id)) {
39711
+ // Block event if the prompt is suspended
39712
+ const prompt = this._.find(this.prompts, p => p.id === promptEvent.agentId);
39713
+ if (prompt && !prompt.isActive) {
39541
39714
  return;
39542
39715
  }
39543
39716
  const event = this._.extend({
39544
- promptType: 'request'
39717
+ promptType: 'request',
39718
+ agentType: 'prompt'
39545
39719
  }, promptEvent);
39546
39720
  this.api.analytics.collectEvent('prompt', event);
39547
39721
  }