@atlaskit/react-ufo 2.4.6 → 2.4.7

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.
Files changed (66) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/create-experimental-interaction-metrics-payload/package.json +15 -0
  3. package/dist/cjs/config/index.js +40 -18
  4. package/dist/cjs/create-experimental-interaction-metrics-payload/index.js +89 -0
  5. package/dist/cjs/create-payload/common/utils/index.js +85 -1
  6. package/dist/cjs/create-payload/index.js +37 -77
  7. package/dist/cjs/create-post-interaction-log-payload/index.js +1 -4
  8. package/dist/cjs/interaction-metrics/common/constants.js +7 -1
  9. package/dist/cjs/interaction-metrics/common/index.js +151 -0
  10. package/dist/cjs/interaction-metrics/index.js +139 -204
  11. package/dist/cjs/interaction-metrics/post-interaction-log.js +6 -2
  12. package/dist/cjs/interaction-metrics-init/index.js +27 -9
  13. package/dist/cjs/load-hold/UFOLoadHold.js +3 -4
  14. package/dist/cjs/segment/segment.js +7 -9
  15. package/dist/cjs/trace-pageload/index.js +2 -1
  16. package/dist/es2019/config/index.js +22 -0
  17. package/dist/es2019/create-experimental-interaction-metrics-payload/index.js +67 -0
  18. package/dist/es2019/create-payload/common/utils/index.js +86 -1
  19. package/dist/es2019/create-payload/index.js +28 -74
  20. package/dist/es2019/create-post-interaction-log-payload/index.js +1 -4
  21. package/dist/es2019/interaction-metrics/common/constants.js +6 -0
  22. package/dist/es2019/interaction-metrics/common/index.js +103 -0
  23. package/dist/es2019/interaction-metrics/index.js +92 -129
  24. package/dist/es2019/interaction-metrics/post-interaction-log.js +6 -2
  25. package/dist/es2019/interaction-metrics-init/index.js +21 -8
  26. package/dist/es2019/load-hold/UFOLoadHold.js +3 -4
  27. package/dist/es2019/segment/segment.js +6 -12
  28. package/dist/es2019/trace-pageload/index.js +1 -1
  29. package/dist/esm/config/index.js +39 -18
  30. package/dist/esm/create-experimental-interaction-metrics-payload/index.js +81 -0
  31. package/dist/esm/create-payload/common/utils/index.js +80 -1
  32. package/dist/esm/create-payload/index.js +33 -75
  33. package/dist/esm/create-post-interaction-log-payload/index.js +1 -4
  34. package/dist/esm/interaction-metrics/common/constants.js +6 -0
  35. package/dist/esm/interaction-metrics/common/index.js +132 -0
  36. package/dist/esm/interaction-metrics/index.js +87 -156
  37. package/dist/esm/interaction-metrics/post-interaction-log.js +6 -2
  38. package/dist/esm/interaction-metrics-init/index.js +24 -10
  39. package/dist/esm/load-hold/UFOLoadHold.js +3 -4
  40. package/dist/esm/segment/segment.js +7 -9
  41. package/dist/esm/trace-pageload/index.js +1 -1
  42. package/dist/types/common/common/types.d.ts +9 -5
  43. package/dist/types/config/index.d.ts +6 -0
  44. package/dist/types/create-experimental-interaction-metrics-payload/index.d.ts +31 -0
  45. package/dist/types/create-payload/common/utils/index.d.ts +12 -0
  46. package/dist/types/create-payload/index.d.ts +13 -5660
  47. package/dist/types/create-post-interaction-log-payload/index.d.ts +2 -0
  48. package/dist/types/interaction-metrics/common/constants.d.ts +31 -1
  49. package/dist/types/interaction-metrics/common/index.d.ts +16 -0
  50. package/dist/types/interaction-metrics/index.d.ts +4 -15
  51. package/dist/types/interaction-metrics/post-interaction-log.d.ts +1 -1
  52. package/dist/types/load-hold/UFOLoadHold.d.ts +1 -2
  53. package/dist/types/trace-pageload/index.d.ts +1 -0
  54. package/dist/types-ts4.5/common/common/types.d.ts +9 -5
  55. package/dist/types-ts4.5/config/index.d.ts +6 -0
  56. package/dist/types-ts4.5/create-experimental-interaction-metrics-payload/index.d.ts +31 -0
  57. package/dist/types-ts4.5/create-payload/common/utils/index.d.ts +12 -0
  58. package/dist/types-ts4.5/create-payload/index.d.ts +13 -5660
  59. package/dist/types-ts4.5/create-post-interaction-log-payload/index.d.ts +2 -0
  60. package/dist/types-ts4.5/interaction-metrics/common/constants.d.ts +31 -1
  61. package/dist/types-ts4.5/interaction-metrics/common/index.d.ts +16 -0
  62. package/dist/types-ts4.5/interaction-metrics/index.d.ts +4 -15
  63. package/dist/types-ts4.5/interaction-metrics/post-interaction-log.d.ts +1 -1
  64. package/dist/types-ts4.5/load-hold/UFOLoadHold.d.ts +1 -2
  65. package/dist/types-ts4.5/trace-pageload/index.d.ts +1 -0
  66. package/package.json +2 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # @atlaskit/ufo-interaction-ignore
2
2
 
3
+ ## 2.4.7
4
+
5
+ ### Patch Changes
6
+
7
+ - [#175818](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/175818)
8
+ [`1401a5646d271`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/1401a5646d271) -
9
+ Add experimentalTTAI and experimentalVC90 to custom.post-interaction-log
10
+ - [#173211](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/173211)
11
+ [`202bc8df0c75a`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/202bc8df0c75a) -
12
+ Experimental UFO holds, VC90 and TTAI metrics
13
+ - [#175826](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/175826)
14
+ [`b5c5bf59d1cff`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/b5c5bf59d1cff) -
15
+ add rate limiting to experimental interaction metrics
16
+
3
17
  ## 2.4.6
4
18
 
5
19
  ### Patch Changes
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "@atlaskit/react-ufo/create-experimental-interaction-metrics-payload",
3
+ "main": "../dist/cjs/create-experimental-interaction-metrics-payload/index.js",
4
+ "module": "../dist/esm/create-experimental-interaction-metrics-payload/index.js",
5
+ "module:es2019": "../dist/es2019/create-experimental-interaction-metrics-payload/index.js",
6
+ "sideEffects": false,
7
+ "types": "../dist/types/create-experimental-interaction-metrics-payload/index.d.ts",
8
+ "typesVersions": {
9
+ ">=4.5 <5.4": {
10
+ "*": [
11
+ "../dist/types-ts4.5/create-experimental-interaction-metrics-payload/index.d.ts"
12
+ ]
13
+ }
14
+ }
15
+ }
@@ -8,6 +8,7 @@ exports.getCapabilityRate = getCapabilityRate;
8
8
  exports.getConfig = getConfig;
9
9
  exports.getDoNotAbortActivePressInteraction = getDoNotAbortActivePressInteraction;
10
10
  exports.getDoNotAbortActivePressInteractionOnTransition = getDoNotAbortActivePressInteractionOnTransition;
11
+ exports.getExperimentalInteractionRate = getExperimentalInteractionRate;
11
12
  exports.getInteractionRate = getInteractionRate;
12
13
  exports.getPostInteractionRate = getPostInteractionRate;
13
14
  exports.getRemoveInteractionsUFOPrefixes = getRemoveInteractionsUFOPrefixes;
@@ -81,13 +82,34 @@ function getInteractionRate(name, interactionKind) {
81
82
  return 0;
82
83
  }
83
84
  }
84
- function getPostInteractionRate(name, interactionType) {
85
+ function getExperimentalInteractionRate(name, interactionType) {
85
86
  try {
86
87
  if (!config) {
87
88
  return 0;
88
89
  }
89
90
  var _config2 = config,
90
- postInteractionLog = _config2.postInteractionLog;
91
+ experimentalInteractionMetrics = _config2.experimentalInteractionMetrics;
92
+ if (!(experimentalInteractionMetrics !== null && experimentalInteractionMetrics !== void 0 && experimentalInteractionMetrics.enabled)) {
93
+ return 0;
94
+ }
95
+ if (experimentalInteractionMetrics.rates && typeof experimentalInteractionMetrics.rates[name] === 'number') {
96
+ return experimentalInteractionMetrics.rates[name];
97
+ }
98
+ if (experimentalInteractionMetrics.kind && typeof experimentalInteractionMetrics.kind[interactionType] === 'number') {
99
+ return experimentalInteractionMetrics.kind[interactionType];
100
+ }
101
+ return 0;
102
+ } catch (e) {
103
+ return 0;
104
+ }
105
+ }
106
+ function getPostInteractionRate(name, interactionType) {
107
+ try {
108
+ if (!config) {
109
+ return 0;
110
+ }
111
+ var _config3 = config,
112
+ postInteractionLog = _config3.postInteractionLog;
91
113
  if (!(postInteractionLog !== null && postInteractionLog !== void 0 && postInteractionLog.enabled)) {
92
114
  return 0;
93
115
  }
@@ -107,8 +129,8 @@ function getCapabilityRate(capability) {
107
129
  if (!config) {
108
130
  return 0;
109
131
  }
110
- var _config3 = config,
111
- capabilityRate = _config3.capability;
132
+ var _config4 = config,
133
+ capabilityRate = _config4.capability;
112
134
  if (capabilityRate != null) {
113
135
  var rate = capabilityRate[capability];
114
136
  if (rate != null) {
@@ -127,8 +149,8 @@ function getTypingPerformanceTracingMethod() {
127
149
  if (!config) {
128
150
  return defaultMethod;
129
151
  }
130
- var _config4 = config,
131
- typingMethod = _config4.typingMethod;
152
+ var _config5 = config,
153
+ typingMethod = _config5.typingMethod;
132
154
  if (typingMethod != null && validTypingMethods.find(function (m) {
133
155
  return m === typingMethod;
134
156
  })) {
@@ -147,8 +169,8 @@ function getAwaitBM3TTIList() {
147
169
  if (!config) {
148
170
  return [];
149
171
  }
150
- var _config5 = config,
151
- awaitBM3TTI = _config5.awaitBM3TTI;
172
+ var _config6 = config,
173
+ awaitBM3TTI = _config6.awaitBM3TTI;
152
174
  if (awaitBM3TTI != null) {
153
175
  return awaitBM3TTI;
154
176
  } else {
@@ -165,8 +187,8 @@ function getRemovePageSegmentsUFOPrefixes() {
165
187
  if (!config) {
166
188
  return false;
167
189
  }
168
- var _config6 = config,
169
- removePageSegmentsUFOPrefixes = _config6.removePageSegmentsUFOPrefixes;
190
+ var _config7 = config,
191
+ removePageSegmentsUFOPrefixes = _config7.removePageSegmentsUFOPrefixes;
170
192
  if (removePageSegmentsUFOPrefixes != null) {
171
193
  return removePageSegmentsUFOPrefixes;
172
194
  } else {
@@ -183,8 +205,8 @@ function getRemoveInteractionsUFOPrefixes() {
183
205
  if (!config) {
184
206
  return false;
185
207
  }
186
- var _config7 = config,
187
- removeInteractionsUFOPrefixes = _config7.removeInteractionsUFOPrefixes;
208
+ var _config8 = config,
209
+ removeInteractionsUFOPrefixes = _config8.removeInteractionsUFOPrefixes;
188
210
  if (removeInteractionsUFOPrefixes != null) {
189
211
  return removeInteractionsUFOPrefixes;
190
212
  } else {
@@ -204,8 +226,8 @@ function getUfoNameOverrides() {
204
226
  if (!config) {
205
227
  return undefined;
206
228
  }
207
- var _config8 = config,
208
- ufoNameOverrides = _config8.ufoNameOverrides;
229
+ var _config9 = config,
230
+ ufoNameOverrides = _config9.ufoNameOverrides;
209
231
  if (ufoNameOverrides != null) {
210
232
  return ufoNameOverrides;
211
233
  }
@@ -221,8 +243,8 @@ function getDoNotAbortActivePressInteraction() {
221
243
  if (!config) {
222
244
  return undefined;
223
245
  }
224
- var _config9 = config,
225
- doNotAbortActivePressInteraction = _config9.doNotAbortActivePressInteraction;
246
+ var _config10 = config,
247
+ doNotAbortActivePressInteraction = _config10.doNotAbortActivePressInteraction;
226
248
  return doNotAbortActivePressInteraction;
227
249
  } catch (e) {
228
250
  return undefined;
@@ -235,8 +257,8 @@ function getDoNotAbortActivePressInteractionOnTransition() {
235
257
  if (!config) {
236
258
  return undefined;
237
259
  }
238
- var _config10 = config,
239
- doNotAbortActivePressInteractionOnTransition = _config10.doNotAbortActivePressInteractionOnTransition;
260
+ var _config11 = config,
261
+ doNotAbortActivePressInteractionOnTransition = _config11.doNotAbortActivePressInteractionOnTransition;
240
262
  return doNotAbortActivePressInteractionOnTransition;
241
263
  } catch (e) {
242
264
  return undefined;
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.ExperimentalInteractionMetrics = void 0;
8
+ exports.createExperimentalInteractionMetricsPayload = createExperimentalInteractionMetricsPayload;
9
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
10
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
11
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
+ var _coinflip = _interopRequireDefault(require("../coinflip"));
13
+ var _config = require("../config");
14
+ var _createPayload = require("../create-payload");
15
+ var _hiddenTiming = require("../hidden-timing");
16
+ var _vcObserver = require("../vc/vc-observer");
17
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
18
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
19
+ var ExperimentalInteractionMetrics = exports.ExperimentalInteractionMetrics = /*#__PURE__*/function () {
20
+ function ExperimentalInteractionMetrics() {
21
+ (0, _classCallCheck2.default)(this, ExperimentalInteractionMetrics);
22
+ /**
23
+ * Handler function to process / send the observation data
24
+ */
25
+ (0, _defineProperty2.default)(this, "sinkHandlerFn", function () {});
26
+ /**
27
+ * independent VC observer that observes until `custom.post-interaction-logs` event is sent
28
+ */
29
+ (0, _defineProperty2.default)(this, "vcObserver", null);
30
+ }
31
+ (0, _createClass2.default)(ExperimentalInteractionMetrics, [{
32
+ key: "sinkHandler",
33
+ value:
34
+ /**
35
+ * Set the fn that would be invoked to process / send the observation data
36
+ */
37
+ function sinkHandler(sinkHandlerFn) {
38
+ this.sinkHandlerFn = sinkHandlerFn;
39
+ }
40
+ }, {
41
+ key: "onInteractionComplete",
42
+ value: function onInteractionComplete(interactionId, data) {
43
+ var endTime = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : performance.now();
44
+ if (data.ufoName) {
45
+ data.end = endTime;
46
+ this.sinkHandlerFn(interactionId, data);
47
+ }
48
+ }
49
+ }, {
50
+ key: "initializeVCObserver",
51
+ value: function initializeVCObserver(options) {
52
+ if (this.vcObserver === null) {
53
+ this.vcObserver = new _vcObserver.VCObserver(_objectSpread(_objectSpread({}, options), {}, {
54
+ isPostInteraction: true
55
+ }));
56
+ }
57
+ return this;
58
+ }
59
+ }, {
60
+ key: "startVCObserver",
61
+ value: function startVCObserver(_ref) {
62
+ var _this$vcObserver;
63
+ var startTime = _ref.startTime;
64
+ (_this$vcObserver = this.vcObserver) === null || _this$vcObserver === void 0 || _this$vcObserver.start({
65
+ startTime: startTime
66
+ });
67
+ }
68
+ }]);
69
+ return ExperimentalInteractionMetrics;
70
+ }();
71
+ function createExperimentalInteractionMetricsPayload(interactionId, interaction) {
72
+ var config = (0, _config.getConfig)();
73
+ if (!config) {
74
+ throw Error('UFO Configuration not provided');
75
+ }
76
+ var ufoName = (0, _createPayload.getUfoNameOverride)(interaction);
77
+ var modifiedInteraction = _objectSpread(_objectSpread({}, interaction), {}, {
78
+ ufoName: ufoName
79
+ });
80
+ var rate = (0, _config.getExperimentalInteractionRate)(ufoName, interaction.type);
81
+ if (!(0, _coinflip.default)(rate)) {
82
+ return null;
83
+ }
84
+ var pageVisibilityState = (0, _hiddenTiming.getPageVisibilityState)(interaction.start, interaction.end);
85
+ if (pageVisibilityState !== 'visible') {
86
+ return null;
87
+ }
88
+ return (0, _createPayload.createInteractionMetricsPayload)(modifiedInteraction, interactionId, true);
89
+ }
@@ -1,10 +1,14 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
7
8
  exports.buildSegmentTree = buildSegmentTree;
9
+ exports.getPageVisibilityUpToTTAI = exports.getInteractionStatus = exports.getExperimentalVCMetrics = exports.calculateVCMetrics = void 0;
10
+ exports.getSSRDoneTimeValue = getSSRDoneTimeValue;
11
+ exports.getVCMetrics = exports.getTTAI = void 0;
8
12
  exports.isSegmentLabel = isSegmentLabel;
9
13
  exports.labelStackStartWith = labelStackStartWith;
10
14
  exports.optimizeLabelStack = optimizeLabelStack;
@@ -12,6 +16,13 @@ exports.sanitizeUfoName = void 0;
12
16
  exports.stringifyLabelStackFully = stringifyLabelStackFully;
13
17
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
14
18
  var _constants = require("../../../common/constants");
19
+ var _config = require("../../../config");
20
+ var _hiddenTiming = require("../../../hidden-timing");
21
+ var _interactionMetrics = require("../../../interaction-metrics");
22
+ var ssr = _interopRequireWildcard(require("../../../ssr"));
23
+ var _vc = require("../../../vc");
24
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
25
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
15
26
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
16
27
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } /* eslint-disable @typescript-eslint/no-non-null-asserted-optional-chain */
17
28
  var sanitizeUfoName = exports.sanitizeUfoName = function sanitizeUfoName(name) {
@@ -70,4 +81,77 @@ function optimizeLabelStack(labelStack) {
70
81
  s: ls.segmentId
71
82
  } : {});
72
83
  });
73
- }
84
+ }
85
+ var getInteractionStatus = exports.getInteractionStatus = function getInteractionStatus(interaction) {
86
+ var originalInteractionStatus = interaction.abortReason ? 'ABORTED' : 'SUCCEEDED';
87
+ var hasBm3TTI = interaction.apdex.length > 0;
88
+ var overrideStatus = hasBm3TTI ? 'SUCCEEDED' : originalInteractionStatus;
89
+ return {
90
+ originalInteractionStatus: originalInteractionStatus,
91
+ overrideStatus: overrideStatus
92
+ };
93
+ };
94
+ var getPageVisibilityUpToTTAI = exports.getPageVisibilityUpToTTAI = function getPageVisibilityUpToTTAI(interaction) {
95
+ var start = interaction.start,
96
+ end = interaction.end;
97
+ return (0, _hiddenTiming.getPageVisibilityState)(start, end);
98
+ };
99
+ var calculateVCMetrics = exports.calculateVCMetrics = function calculateVCMetrics(interaction, prefix, getVCResultFn) {
100
+ var _interaction$apdex;
101
+ var result = getVCResultFn({
102
+ start: interaction.start,
103
+ stop: interaction.end,
104
+ tti: (_interaction$apdex = interaction.apdex) === null || _interaction$apdex === void 0 || (_interaction$apdex = _interaction$apdex[0]) === null || _interaction$apdex === void 0 ? void 0 : _interaction$apdex.stopTime,
105
+ prefix: prefix,
106
+ vc: interaction.vc
107
+ });
108
+ var VC = result === null || result === void 0 ? void 0 : result['metrics:vc'];
109
+ if (!VC || !(result !== null && result !== void 0 && result["".concat(prefix, ":vc:clean")])) {
110
+ return result;
111
+ }
112
+ var interactionStatus = getInteractionStatus(interaction);
113
+ var pageVisibilityUpToTTAI = getPageVisibilityUpToTTAI(interaction);
114
+ if (interactionStatus.originalInteractionStatus !== 'SUCCEEDED' || pageVisibilityUpToTTAI !== 'visible') {
115
+ return result;
116
+ }
117
+ return result;
118
+ };
119
+ function getSSRDoneTimeValue(config) {
120
+ var _config$ssr, _config$ssr2;
121
+ return config !== null && config !== void 0 && (_config$ssr = config.ssr) !== null && _config$ssr !== void 0 && _config$ssr.getSSRDoneTime ? config === null || config === void 0 || (_config$ssr2 = config.ssr) === null || _config$ssr2 === void 0 ? void 0 : _config$ssr2.getSSRDoneTime() : ssr.getSSRDoneTime();
122
+ }
123
+ var getVCMetrics = exports.getVCMetrics = function getVCMetrics(interaction) {
124
+ var _config$vc, _result$metricsVc;
125
+ var config = (0, _config.getConfig)();
126
+ if (!(config !== null && config !== void 0 && (_config$vc = config.vc) !== null && _config$vc !== void 0 && _config$vc.enabled)) {
127
+ return {};
128
+ }
129
+ if (interaction.type !== 'page_load' && interaction.type !== 'transition') {
130
+ return {};
131
+ }
132
+ var ssr = interaction.type === 'page_load' && config !== null && config !== void 0 && config.ssr ? {
133
+ ssr: getSSRDoneTimeValue(config)
134
+ } : null;
135
+ _interactionMetrics.postInteractionLog.setVCObserverSSRConfig(ssr);
136
+ var result = calculateVCMetrics(interaction, 'ufo', (0, _vc.getVCObserver)().getVCResult);
137
+ return _objectSpread(_objectSpread({}, result), {}, {
138
+ 'metric:vc90': result === null || result === void 0 || (_result$metricsVc = result['metrics:vc']) === null || _result$metricsVc === void 0 ? void 0 : _result$metricsVc['90']
139
+ });
140
+ };
141
+ var getExperimentalVCMetrics = exports.getExperimentalVCMetrics = function getExperimentalVCMetrics(interaction) {
142
+ if (_interactionMetrics.experimentalInteractionLog.vcObserver) {
143
+ var _result$metricsVc2;
144
+ var result = calculateVCMetrics(interaction, 'ufo-experimental', _interactionMetrics.experimentalInteractionLog.vcObserver.getVCResult);
145
+ return _objectSpread(_objectSpread({}, result), {}, {
146
+ 'metric:experimental:vc90': result === null || result === void 0 || (_result$metricsVc2 = result['metrics:vc']) === null || _result$metricsVc2 === void 0 ? void 0 : _result$metricsVc2['90']
147
+ });
148
+ }
149
+ return null;
150
+ };
151
+ var getTTAI = exports.getTTAI = function getTTAI(interaction) {
152
+ var start = interaction.start,
153
+ end = interaction.end;
154
+ var interactionStatus = getInteractionStatus(interaction);
155
+ var pageVisibilityUpToTTAI = getPageVisibilityUpToTTAI(interaction);
156
+ return interactionStatus.originalInteractionStatus === 'SUCCEEDED' && pageVisibilityUpToTTAI === 'visible' ? Math.round(end - start) : undefined;
157
+ };
@@ -5,7 +5,9 @@ var _typeof = require("@babel/runtime/helpers/typeof");
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
+ exports.createInteractionMetricsPayload = createInteractionMetricsPayload;
8
9
  exports.createPayloads = createPayloads;
10
+ exports.getUfoNameOverride = getUfoNameOverride;
9
11
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
10
12
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
13
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
@@ -24,7 +26,6 @@ var _interactionMetrics = require("../interaction-metrics");
24
26
  var resourceTiming = _interopRequireWildcard(require("../resource-timing"));
25
27
  var _roundNumber = require("../round-number");
26
28
  var ssr = _interopRequireWildcard(require("../ssr"));
27
- var _vc = require("../vc");
28
29
  var _utils = require("./common/utils");
29
30
  var _excluded = ["labelStack", "time"],
30
31
  _excluded2 = ["stopTime", "labelStack"],
@@ -46,7 +47,6 @@ function getUfoNameOverride(interaction) {
46
47
  }
47
48
  }
48
49
  return ufoName;
49
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
50
  } catch (e) {
51
51
  return ufoName;
52
52
  }
@@ -81,11 +81,6 @@ var getPageVisibilityUpToTTI = function getPageVisibilityUpToTTI(interaction) {
81
81
  var bm3EndTimeOrInteractionEndTime = getBm3EndTimeOrFallbackValue(interaction);
82
82
  return (0, _hiddenTiming.getPageVisibilityState)(start, bm3EndTimeOrInteractionEndTime);
83
83
  };
84
- var getPageVisibilityUpToTTAI = function getPageVisibilityUpToTTAI(interaction) {
85
- var start = interaction.start,
86
- end = interaction.end;
87
- return (0, _hiddenTiming.getPageVisibilityState)(start, end);
88
- };
89
84
  var getVisibilityStateFromPerformance = function getVisibilityStateFromPerformance(stop) {
90
85
  try {
91
86
  var results = performance.getEntriesByType('visibility-state');
@@ -131,7 +126,7 @@ var getMoreAccuratePageVisibilityUpToTTI = function getMoreAccuratePageVisibilit
131
126
  return old;
132
127
  };
133
128
  var getMoreAccuratePageVisibilityUpToTTAI = function getMoreAccuratePageVisibilityUpToTTAI(interaction) {
134
- var old = getPageVisibilityUpToTTAI(interaction);
129
+ var old = (0, _utils.getPageVisibilityUpToTTAI)(interaction);
135
130
  var buffered = getVisibilityStateFromPerformance(interaction.end);
136
131
  if (!buffered) {
137
132
  return old;
@@ -141,15 +136,6 @@ var getMoreAccuratePageVisibilityUpToTTAI = function getMoreAccuratePageVisibili
141
136
  }
142
137
  return old;
143
138
  };
144
- var getInteractionStatus = function getInteractionStatus(interaction) {
145
- var originalInteractionStatus = interaction.abortReason ? 'ABORTED' : 'SUCCEEDED';
146
- var hasBm3TTI = interaction.apdex.length > 0;
147
- var overrideStatus = hasBm3TTI ? 'SUCCEEDED' : originalInteractionStatus;
148
- return {
149
- originalInteractionStatus: originalInteractionStatus,
150
- overrideStatus: overrideStatus
151
- };
152
- };
153
139
  var getResourceTimings = function getResourceTimings(start, end) {
154
140
  var _resourceTiming$getRe;
155
141
  return (_resourceTiming$getRe = resourceTiming.getResourceTimings(start, end)) !== null && _resourceTiming$getRe !== void 0 ? _resourceTiming$getRe : undefined;
@@ -178,42 +164,6 @@ var getPaintMetrics = function getPaintMetrics(type) {
178
164
  });
179
165
  return metrics;
180
166
  };
181
- var getVCMetrics = function getVCMetrics(interaction) {
182
- var _config$vc, _interaction$apdex;
183
- var config = (0, _config.getConfig)();
184
- if (!(config !== null && config !== void 0 && (_config$vc = config.vc) !== null && _config$vc !== void 0 && _config$vc.enabled)) {
185
- return {};
186
- }
187
- if (interaction.type !== 'page_load' && interaction.type !== 'transition') {
188
- return {};
189
- }
190
- var ssr = interaction.type === 'page_load' && config !== null && config !== void 0 && config.ssr ? {
191
- ssr: getSSRDoneTimeValue(config)
192
- } : null;
193
- _interactionMetrics.postInteractionLog.setVCObserverSSRConfig(ssr);
194
- var tti = (_interaction$apdex = interaction.apdex) === null || _interaction$apdex === void 0 || (_interaction$apdex = _interaction$apdex[0]) === null || _interaction$apdex === void 0 ? void 0 : _interaction$apdex.stopTime;
195
- var prefix = 'ufo';
196
- var result = (0, _vc.getVCObserver)().getVCResult(_objectSpread({
197
- start: interaction.start,
198
- stop: interaction.end,
199
- tti: tti,
200
- prefix: prefix,
201
- vc: interaction.vc
202
- }, ssr));
203
- _interactionMetrics.postInteractionLog.setLastInteractionFinishVCResult(result);
204
- var VC = result === null || result === void 0 ? void 0 : result['metrics:vc'];
205
- if (!VC || !(result !== null && result !== void 0 && result["".concat(prefix, ":vc:clean")])) {
206
- return result;
207
- }
208
- var interactionStatus = getInteractionStatus(interaction);
209
- var pageVisibilityUpToTTAI = getPageVisibilityUpToTTAI(interaction);
210
- if (interactionStatus.originalInteractionStatus !== 'SUCCEEDED' || pageVisibilityUpToTTAI !== 'visible') {
211
- return result;
212
- }
213
- return _objectSpread(_objectSpread({}, result), {}, {
214
- 'metric:vc90': VC['90']
215
- });
216
- };
217
167
  var getNavigationMetrics = function getNavigationMetrics(type) {
218
168
  if (type !== 'page_load') {
219
169
  return {};
@@ -261,13 +211,13 @@ var getNavigationMetrics = function getNavigationMetrics(type) {
261
211
  };
262
212
  };
263
213
  var getPPSMetrics = function getPPSMetrics(interaction) {
264
- var _interaction$apdex2;
214
+ var _interaction$apdex;
265
215
  var start = interaction.start,
266
216
  end = interaction.end;
267
217
  var config = (0, _config.getConfig)();
268
- var interactionStatus = getInteractionStatus(interaction);
269
- var pageVisibilityUpToTTAI = getPageVisibilityUpToTTAI(interaction);
270
- var tti = (_interaction$apdex2 = interaction.apdex) === null || _interaction$apdex2 === void 0 || (_interaction$apdex2 = _interaction$apdex2[0]) === null || _interaction$apdex2 === void 0 ? void 0 : _interaction$apdex2.stopTime;
218
+ var interactionStatus = (0, _utils.getInteractionStatus)(interaction);
219
+ var pageVisibilityUpToTTAI = (0, _utils.getPageVisibilityUpToTTAI)(interaction);
220
+ var tti = (_interaction$apdex = interaction.apdex) === null || _interaction$apdex === void 0 || (_interaction$apdex = _interaction$apdex[0]) === null || _interaction$apdex === void 0 ? void 0 : _interaction$apdex.stopTime;
271
221
  var ttai = interactionStatus.originalInteractionStatus === 'SUCCEEDED' && pageVisibilityUpToTTAI === 'visible' ? Math.round(end - start) : undefined;
272
222
  var PPSMetricsAtTTI = tti !== undefined ? (0, _additionalPayload.getLighthouseMetrics)({
273
223
  start: start,
@@ -358,13 +308,13 @@ function optimizeCustomData(interaction) {
358
308
  for (var _i = 0, _Object$entries = Object.entries(currentValue.custom || {}); _i < _Object$entries.length; _i++) {
359
309
  var _result$get$data2, _result$get2;
360
310
  var _Object$entries$_i = (0, _slicedToArray2.default)(_Object$entries[_i], 2),
361
- _key = _Object$entries$_i[0],
311
+ key = _Object$entries$_i[0],
362
312
  value = _Object$entries$_i[1];
363
313
  var label = (0, _utils.stringifyLabelStackFully)([]);
364
314
  var labelValue = (_result$get$data2 = (_result$get2 = result.get(label)) === null || _result$get2 === void 0 ? void 0 : _result$get2.data) !== null && _result$get$data2 !== void 0 ? _result$get$data2 : {};
365
315
  result.set(label, {
366
316
  labelStack: (0, _utils.optimizeLabelStack)([]),
367
- data: Object.assign(labelValue, (0, _defineProperty2.default)({}, _key, value))
317
+ data: Object.assign(labelValue, (0, _defineProperty2.default)({}, key, value))
368
318
  });
369
319
  }
370
320
  return result;
@@ -602,10 +552,6 @@ function getBm3TrackerTimings(interaction) {
602
552
  legacyMetrics: legacyMetrics
603
553
  };
604
554
  }
605
- function getSSRDoneTimeValue(config) {
606
- var _config$ssr, _config$ssr2;
607
- return config !== null && config !== void 0 && (_config$ssr = config.ssr) !== null && _config$ssr !== void 0 && _config$ssr.getSSRDoneTime ? config === null || config === void 0 || (_config$ssr2 = config.ssr) === null || _config$ssr2 === void 0 ? void 0 : _config$ssr2.getSSRDoneTime() : ssr.getSSRDoneTime();
608
- }
609
555
  function getPayloadSize(payload) {
610
556
  return Math.round(new TextEncoder().encode(JSON.stringify(payload)).length / 1024);
611
557
  }
@@ -648,13 +594,15 @@ function getStylesheetMetrics() {
648
594
  return {};
649
595
  }
650
596
  }
597
+ var regularTTAI;
598
+ var expTTAI;
651
599
  function getErrorCounts(interaction) {
652
600
  return {
653
601
  'ufo:errors:globalCount': (0, _globalErrorHandler.getGlobalErrorCount)(),
654
602
  'ufo:errors:count': interaction.errors.length
655
603
  };
656
604
  }
657
- function createInteractionMetricsPayload(interaction, interactionId) {
605
+ function createInteractionMetricsPayload(interaction, interactionId, experimental) {
658
606
  var _window$location, _config$additionalPay;
659
607
  var interactionPayloadStart = performance.now();
660
608
  var config = (0, _config.getConfig)();
@@ -674,7 +622,7 @@ function createInteractionMetricsPayload(interaction, interactionId) {
674
622
  isPreviousInteractionAborted = interaction.isPreviousInteractionAborted,
675
623
  abortedByInteractionName = interaction.abortedByInteractionName;
676
624
  var pageVisibilityAtTTI = getPageVisibilityUpToTTI(interaction);
677
- var pageVisibilityAtTTAI = getPageVisibilityUpToTTAI(interaction);
625
+ var pageVisibilityAtTTAI = (0, _utils.getPageVisibilityUpToTTAI)(interaction);
678
626
  var segments = config.killswitchNestedSegments ? [] : knownSegments;
679
627
  var segmentTree = _constants.REACT_UFO_VERSION === '2.0.0' ? (0, _utils.buildSegmentTree)(segments.map(function (segment) {
680
628
  return segment.labelStack;
@@ -689,23 +637,23 @@ function createInteractionMetricsPayload(interaction, interactionId) {
689
637
  } : {};
690
638
  // Page Load
691
639
  var getPageLoadInteractionMetrics = function getPageLoadInteractionMetrics() {
692
- var _config$ssr3;
640
+ var _config$ssr;
693
641
  if (!isPageLoad) {
694
642
  return {};
695
643
  }
696
644
  var config = (0, _config.getConfig)();
697
- var SSRDoneTimeValue = getSSRDoneTimeValue(config);
645
+ var SSRDoneTimeValue = (0, _utils.getSSRDoneTimeValue)(config);
698
646
  var SSRDoneTime = SSRDoneTimeValue !== undefined ? {
699
647
  SSRDoneTime: Math.round(SSRDoneTimeValue)
700
648
  } : {};
701
649
  return _objectSpread(_objectSpread({}, SSRDoneTime), {}, {
702
650
  isBM3ConfigSSRDoneAsFmp: interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp,
703
- isUFOConfigSSRDoneAsFmp: interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp || !!(config !== null && config !== void 0 && (_config$ssr3 = config.ssr) !== null && _config$ssr3 !== void 0 && _config$ssr3.getSSRDoneTime)
651
+ isUFOConfigSSRDoneAsFmp: interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp || !!(config !== null && config !== void 0 && (_config$ssr = config.ssr) !== null && _config$ssr !== void 0 && _config$ssr.getSSRDoneTime)
704
652
  });
705
653
  };
706
654
  // Detailed payload. Page visibility = visible
707
655
  var getDetailedInteractionMetrics = function getDetailedInteractionMetrics() {
708
- if (window.__UFO_COMPACT_PAYLOAD__ || !isDetailedPayload) {
656
+ if (experimental || window.__UFO_COMPACT_PAYLOAD__ || !isDetailedPayload) {
709
657
  return {};
710
658
  }
711
659
  var spans = [].concat((0, _toConsumableArray2.default)(interaction.spans), (0, _toConsumableArray2.default)(_interactionMetrics.interactionSpans));
@@ -720,7 +668,7 @@ function createInteractionMetricsPayload(interaction, interactionId) {
720
668
  }),
721
669
  holdActive: (0, _toConsumableArray2.default)(interaction.holdActive.values()),
722
670
  redirects: optimizeRedirects(interaction.redirects, start),
723
- holdInfo: optimizeHoldInfo(interaction.holdInfo, start),
671
+ holdInfo: optimizeHoldInfo(experimental ? interaction.holdExpInfo : interaction.holdInfo, start),
724
672
  spans: optimizeSpans(spans, start),
725
673
  requestInfo: optimizeRequestInfo(interaction.requestInfo, start),
726
674
  customTimings: optimizeCustomTimings(interaction.customTimings, start),
@@ -730,16 +678,21 @@ function createInteractionMetricsPayload(interaction, interactionId) {
730
678
  };
731
679
  // Page load & detailed payload
732
680
  var getPageLoadDetailedInteractionMetrics = function getPageLoadDetailedInteractionMetrics() {
733
- var _config$ssr4;
681
+ var _config$ssr2;
734
682
  if (!isPageLoad || !isDetailedPayload) {
735
683
  return {};
736
684
  }
737
685
  var config = (0, _config.getConfig)();
738
686
  return {
739
687
  initialPageLoadExtraTimings: objectToArray(initialPageLoadExtraTiming.getTimings()),
740
- SSRTimings: config !== null && config !== void 0 && (_config$ssr4 = config.ssr) !== null && _config$ssr4 !== void 0 && _config$ssr4.getSSRTimings ? config.ssr.getSSRTimings() : objectToArray(ssr.getSSRTimings())
688
+ SSRTimings: config !== null && config !== void 0 && (_config$ssr2 = config.ssr) !== null && _config$ssr2 !== void 0 && _config$ssr2.getSSRTimings ? config.ssr.getSSRTimings() : objectToArray(ssr.getSSRTimings())
741
689
  };
742
690
  };
691
+ if (experimental) {
692
+ expTTAI = (0, _utils.getTTAI)(interaction);
693
+ } else {
694
+ regularTTAI = (0, _utils.getTTAI)(interaction);
695
+ }
743
696
  var newUFOName = (0, _utils.sanitizeUfoName)(ufoName);
744
697
  var payload = {
745
698
  actionSubject: 'experience',
@@ -748,7 +701,7 @@ function createInteractionMetricsPayload(interaction, interactionId) {
748
701
  source: 'measured',
749
702
  tags: ['observability'],
750
703
  attributes: {
751
- properties: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
704
+ properties: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
752
705
  // basic
753
706
  'event:hostname': ((_window$location = window.location) === null || _window$location === void 0 ? void 0 : _window$location.hostname) || 'unknown',
754
707
  'event:product': config.product,
@@ -760,10 +713,10 @@ function createInteractionMetricsPayload(interaction, interactionId) {
760
713
  payloadSource: 'platform'
761
714
  },
762
715
  'event:region': config.region || 'unknown',
763
- 'experience:key': 'custom.interaction-metrics',
716
+ 'experience:key': experimental ? 'custom.experimental-interaction-metrics' : 'custom.interaction-metrics',
764
717
  'experience:name': newUFOName
765
- }, getBrowserMetadata()), getSSRProperties(type)), getPPSMetrics(interaction)), getPaintMetrics(type)), getNavigationMetrics(type)), getVCMetrics(interaction)), (_config$additionalPay = config.additionalPayloadData) === null || _config$additionalPay === void 0 ? void 0 : _config$additionalPay.call(config, interaction)), getTracingContextData(interaction)), getStylesheetMetrics()), getErrorCounts(interaction)), {}, {
766
- interactionMetrics: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
718
+ }, getBrowserMetadata()), getSSRProperties(type)), getPPSMetrics(interaction)), getPaintMetrics(type)), getNavigationMetrics(type)), (0, _utils.getVCMetrics)(interaction)), experimental ? (0, _utils.getExperimentalVCMetrics)(interaction) : undefined), (_config$additionalPay = config.additionalPayloadData) === null || _config$additionalPay === void 0 ? void 0 : _config$additionalPay.call(config, interaction)), getTracingContextData(interaction)), getStylesheetMetrics()), getErrorCounts(interaction)), {}, {
719
+ interactionMetrics: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
767
720
  namePrefix: config.namePrefix || '',
768
721
  segmentPrefix: config.segmentPrefix || '',
769
722
  interactionId: interactionId,
@@ -794,11 +747,18 @@ function createInteractionMetricsPayload(interaction, interactionId) {
794
747
  marks: optimizeMarks(interaction.marks),
795
748
  customData: optimizeCustomData(interaction),
796
749
  reactProfilerTimings: optimizeReactProfilerTimings(interaction.reactProfilerTimings, start)
797
- }, labelStack), getPageLoadInteractionMetrics()), getDetailedInteractionMetrics()), getPageLoadDetailedInteractionMetrics()), getBm3TrackerTimings(interaction)),
750
+ }, labelStack), getPageLoadInteractionMetrics()), getDetailedInteractionMetrics()), getPageLoadDetailedInteractionMetrics()), getBm3TrackerTimings(interaction)), {}, {
751
+ 'metric:ttai': experimental ? regularTTAI || expTTAI : undefined,
752
+ 'metric:experimental:ttai': experimental ? expTTAI : undefined
753
+ }),
798
754
  'ufo:payloadTime': (0, _roundNumber.roundEpsilon)(performance.now() - interactionPayloadStart)
799
755
  })
800
756
  }
801
757
  };
758
+ if (experimental) {
759
+ regularTTAI = undefined;
760
+ expTTAI = undefined;
761
+ }
802
762
  payload.attributes.properties['event:sizeInKb'] = getPayloadSize(payload.attributes.properties);
803
763
  return payload;
804
764
  }
@@ -58,10 +58,7 @@ function removeCascadingParentTimingReport(reactProfilerTimings) {
58
58
  if (parentSegmentId) {
59
59
  var parentTimings = timingIndex.get(parentSegmentId);
60
60
  var filteredParentTimings = parentTimings === null || parentTimings === void 0 ? void 0 : parentTimings.filter(function (parentTiming) {
61
- if (parentTiming.startTime === timing.startTime && parentTiming.actualDuration === timing.actualDuration) {
62
- return false;
63
- }
64
- return true;
61
+ return !(parentTiming.startTime === timing.startTime && parentTiming.actualDuration === timing.actualDuration);
65
62
  });
66
63
  if (filteredParentTimings) {
67
64
  timingIndex.set(parentSegmentId, filteredParentTimings);