@pendo/agent 2.348.0 → 2.349.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.
package/dist/dom.esm.js CHANGED
@@ -7555,7 +7555,7 @@ function applyMatrix2dRect(matrix2d, rect) {
7555
7555
  return transformedRect;
7556
7556
  }
7557
7557
 
7558
- var VERSION = '2.348.0_';
7558
+ var VERSION = '2.349.0_';
7559
7559
 
7560
7560
  var decodeURIComponent = _.isFunction(globalScope.decodeURIComponent) ? globalScope.decodeURIComponent : _.identity;
7561
7561
 
@@ -4138,8 +4138,8 @@ let SERVER = '';
4138
4138
  let ASSET_HOST = '';
4139
4139
  let ASSET_PATH = '';
4140
4140
  let DESIGNER_SERVER = '';
4141
- let VERSION = '2.348.0_';
4142
- let PACKAGE_VERSION = '2.348.0';
4141
+ let VERSION = '2.349.0_';
4142
+ let PACKAGE_VERSION = '2.349.0';
4143
4143
  let LOADER = 'xhr';
4144
4144
  /* eslint-enable web-sdk-eslint-rules/no-gulp-env-references */
4145
4145
  /**
@@ -25586,9 +25586,12 @@ function hasLegacyGuides(guides, pendo) {
25586
25586
  if (pendo && pendo.designer)
25587
25587
  return true;
25588
25588
  return _.any(guides, function (guide) {
25589
- if (isForm(guide))
25589
+ if (isForm(guide) || guide.editorType === 'html')
25590
25590
  return false;
25591
25591
  return _.any(guide.steps, function (step) {
25592
+ // HTML steps load their content from htmlContentUrl and ship their own styles
25593
+ if (step.type === 'html')
25594
+ return false;
25592
25595
  return !(step.domUrl || step.domJsonpUrl || step.domJson);
25593
25596
  });
25594
25597
  });
@@ -37093,6 +37096,16 @@ function registerModules(store) {
37093
37096
  store.registerModule('networkUrl', NetworkUrlModule);
37094
37097
  }
37095
37098
 
37099
+ // Shared by guide automations (ActionAutomation) and the agent-workflows invoke_action tool, so an
37100
+ // element is clicked the same way whichever of them drives it.
37101
+ function simulateClick(element) {
37102
+ element.dispatchEvent(new MouseEvent('pointerdown', { bubbles: true, cancelable: true }));
37103
+ element.dispatchEvent(new MouseEvent('mousedown', { bubbles: true, cancelable: true }));
37104
+ element.dispatchEvent(new MouseEvent('pointerup', { bubbles: true, cancelable: true }));
37105
+ element.dispatchEvent(new MouseEvent('mouseup', { bubbles: true, cancelable: true }));
37106
+ element.click();
37107
+ }
37108
+
37096
37109
  var ActionAutomation = (function () {
37097
37110
  let _;
37098
37111
  var pendoGlobal;
@@ -37116,7 +37129,7 @@ var ActionAutomation = (function () {
37116
37129
  getElement,
37117
37130
  getValue,
37118
37131
  injectText,
37119
- simulateClick,
37132
+ simulateClick: simulateClick$1,
37120
37133
  isAutomationInQueue,
37121
37134
  popQueue,
37122
37135
  setActive
@@ -37165,12 +37178,8 @@ var ActionAutomation = (function () {
37165
37178
  changeEvent.simulated = true; // for React ≤ 15.6.0
37166
37179
  element.dispatchEvent(changeEvent);
37167
37180
  }
37168
- function simulateClick(element) {
37169
- element.dispatchEvent(new MouseEvent('pointerdown', { bubbles: true, cancelable: true }));
37170
- element.dispatchEvent(new MouseEvent('mousedown', { bubbles: true, cancelable: true }));
37171
- element.dispatchEvent(new MouseEvent('pointerup', { bubbles: true, cancelable: true }));
37172
- element.dispatchEvent(new MouseEvent('mouseup', { bubbles: true, cancelable: true }));
37173
- element.click();
37181
+ function simulateClick$1(element) {
37182
+ simulateClick(element);
37174
37183
  }
37175
37184
  function isAutomationInQueue(automation) {
37176
37185
  return !!_.find(this.automationQueue, function (item) {
@@ -52871,6 +52880,42 @@ class SessionRecorder {
52871
52880
  return null;
52872
52881
  }
52873
52882
  }
52883
+ /**
52884
+ * Run URL attributes in snapshot and mutation events through the Location API attribute transforms, the same
52885
+ * ones applied to elementPath.
52886
+ *
52887
+ * @access private
52888
+ * @param event The rrweb event being handled
52889
+ */
52890
+ applyAttributeTransforms(event) {
52891
+ const _ = this.pendo._;
52892
+ if (_.isEmpty(_.get(this.api.store.state, 'nodeAttr.transforms')))
52893
+ return;
52894
+ const getAttribute = this.api.store.getters['nodeAttr/getAttribute']();
52895
+ const transformAttributes = (attributes) => {
52896
+ _.each(attributes, (value, name) => {
52897
+ // same as rrweb's absolutizing, leave same-document refs (svg <use href="#id">), data: and blob: URLs alone
52898
+ if (!_.isString(value) || /^(#|data:|blob:)/.test(value))
52899
+ return;
52900
+ // rrweb renames an iframe's src to rr_src when it can't access the frame's document
52901
+ const attrName = name === 'rr_src' ? 'src' : name;
52902
+ attributes[name] = getAttribute({ [attrName]: value }, attrName);
52903
+ });
52904
+ };
52905
+ const transformNode = (node) => {
52906
+ if (!node)
52907
+ return;
52908
+ transformAttributes(node.attributes);
52909
+ _.each(node.childNodes, transformNode);
52910
+ };
52911
+ if (event.type === EVENT_TYPES.FULL_SNAPSHOT) {
52912
+ transformNode(event.data.node);
52913
+ }
52914
+ else if (event.type === EVENT_TYPES.INCREMENTAL_SNAPSHOT && event.data.source === EVENT_TYPES.INCREMENTAL_SOURCE_MUTATION) {
52915
+ _.each(event.data.adds, (add) => transformNode(add.node));
52916
+ _.each(event.data.attributes, (item) => transformAttributes(item.attributes));
52917
+ }
52918
+ }
52874
52919
  /**
52875
52920
  * Handle new rrweb events coming in. This will also make sure that we are properly sending a "keyframe"
52876
52921
  * as the BE expects it. A "keyframe" should consist of only the events needed to start a recording. This includes
@@ -52939,6 +52984,7 @@ class SessionRecorder {
52939
52984
  }
52940
52985
  this.send();
52941
52986
  }
52987
+ this.applyAttributeTransforms(event);
52942
52988
  this.buffer.push(event);
52943
52989
  if (isSnapshot) {
52944
52990
  this.lastKeyFrameTime = event.timestamp;