@atlaskit/react-ufo 2.5.3 → 2.6.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.
Files changed (53) hide show
  1. package/CHANGELOG.md +12 -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 +100 -0
  5. package/dist/cjs/create-payload/common/utils/index.js +65 -2
  6. package/dist/cjs/create-payload/index.js +55 -78
  7. package/dist/cjs/interaction-metrics/common/constants.js +8 -3
  8. package/dist/cjs/interaction-metrics/common/index.js +151 -0
  9. package/dist/cjs/interaction-metrics/index.js +166 -238
  10. package/dist/cjs/interaction-metrics-init/index.js +31 -9
  11. package/dist/cjs/load-hold/UFOLoadHold.js +5 -3
  12. package/dist/cjs/segment/segment.js +9 -8
  13. package/dist/es2019/config/index.js +22 -0
  14. package/dist/es2019/create-experimental-interaction-metrics-payload/index.js +71 -0
  15. package/dist/es2019/create-payload/common/utils/index.js +67 -1
  16. package/dist/es2019/create-payload/index.js +48 -77
  17. package/dist/es2019/interaction-metrics/common/constants.js +7 -2
  18. package/dist/es2019/interaction-metrics/common/index.js +103 -0
  19. package/dist/es2019/interaction-metrics/index.js +91 -131
  20. package/dist/es2019/interaction-metrics-init/index.js +28 -8
  21. package/dist/es2019/load-hold/UFOLoadHold.js +5 -3
  22. package/dist/es2019/segment/segment.js +8 -11
  23. package/dist/esm/config/index.js +39 -18
  24. package/dist/esm/create-experimental-interaction-metrics-payload/index.js +90 -0
  25. package/dist/esm/create-payload/common/utils/index.js +62 -1
  26. package/dist/esm/create-payload/index.js +53 -78
  27. package/dist/esm/interaction-metrics/common/constants.js +7 -2
  28. package/dist/esm/interaction-metrics/common/index.js +132 -0
  29. package/dist/esm/interaction-metrics/index.js +86 -158
  30. package/dist/esm/interaction-metrics-init/index.js +28 -8
  31. package/dist/esm/load-hold/UFOLoadHold.js +5 -3
  32. package/dist/esm/segment/segment.js +9 -8
  33. package/dist/types/common/common/types.d.ts +6 -4
  34. package/dist/types/config/index.d.ts +6 -0
  35. package/dist/types/create-experimental-interaction-metrics-payload/index.d.ts +16 -0
  36. package/dist/types/create-payload/common/utils/index.d.ts +9 -0
  37. package/dist/types/create-payload/index.d.ts +13 -5660
  38. package/dist/types/interaction-context/index.d.ts +1 -0
  39. package/dist/types/interaction-metrics/common/constants.d.ts +32 -3
  40. package/dist/types/interaction-metrics/common/index.d.ts +16 -0
  41. package/dist/types/interaction-metrics/index.d.ts +1 -17
  42. package/dist/types/load-hold/UFOLoadHold.d.ts +1 -2
  43. package/dist/types-ts4.5/common/common/types.d.ts +6 -4
  44. package/dist/types-ts4.5/config/index.d.ts +6 -0
  45. package/dist/types-ts4.5/create-experimental-interaction-metrics-payload/index.d.ts +16 -0
  46. package/dist/types-ts4.5/create-payload/common/utils/index.d.ts +9 -0
  47. package/dist/types-ts4.5/create-payload/index.d.ts +13 -5660
  48. package/dist/types-ts4.5/interaction-context/index.d.ts +1 -0
  49. package/dist/types-ts4.5/interaction-metrics/common/constants.d.ts +32 -3
  50. package/dist/types-ts4.5/interaction-metrics/common/index.d.ts +16 -0
  51. package/dist/types-ts4.5/interaction-metrics/index.d.ts +1 -17
  52. package/dist/types-ts4.5/load-hold/UFOLoadHold.d.ts +1 -2
  53. package/package.json +3 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @atlaskit/ufo-interaction-ignore
2
2
 
3
+ ## 2.6.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#180750](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/180750)
8
+ [`a876090daed20`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/a876090daed20) -
9
+ Experimental UFO holds the third iteration
10
+
11
+ ### Patch Changes
12
+
13
+ - Updated dependencies
14
+
3
15
  ## 2.5.3
4
16
 
5
17
  ### 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,100 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.getExperimentalVCMetrics = exports.experimentalVC = exports.ExperimentalVCMetrics = void 0;
8
+ exports.installInteractionSink = installInteractionSink;
9
+ exports.onExperimentalInteractionComplete = onExperimentalInteractionComplete;
10
+ exports.sinkExperimentalHandler = sinkExperimentalHandler;
11
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
12
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
14
+ var _utils = require("../create-payload/common/utils");
15
+ var _vcObserver = require("../vc/vc-observer");
16
+ 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; }
17
+ 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; }
18
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
19
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
20
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
21
+ var interactionBuffer = [];
22
+ var bufferInteractionData = function bufferInteractionData(interactionId, data) {
23
+ interactionBuffer.push({
24
+ interactionId: interactionId,
25
+ data: data
26
+ });
27
+ };
28
+ function clearInteractionBuffer() {
29
+ interactionBuffer.length = 0;
30
+ }
31
+ function appendInteractionData(interactionId, data) {
32
+ bufferInteractionData(interactionId, data);
33
+ }
34
+ function installInteractionSink(handler) {
35
+ var _iterator = _createForOfIteratorHelper(interactionBuffer),
36
+ _step;
37
+ try {
38
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
39
+ var _step$value = _step.value,
40
+ _interactionId = _step$value.interactionId,
41
+ data = _step$value.data;
42
+ handler(_interactionId, data);
43
+ }
44
+ } catch (err) {
45
+ _iterator.e(err);
46
+ } finally {
47
+ _iterator.f();
48
+ }
49
+ clearInteractionBuffer();
50
+ bufferInteractionData = handler;
51
+ }
52
+ function sinkExperimentalHandler(sinkFn) {
53
+ installInteractionSink(sinkFn);
54
+ }
55
+ function onExperimentalInteractionComplete(interactionId, data) {
56
+ var endTime = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : performance.now();
57
+ if (data.ufoName) {
58
+ data.end = endTime;
59
+ appendInteractionData(interactionId, data);
60
+ clearInteractionBuffer();
61
+ }
62
+ }
63
+ var ExperimentalVCMetrics = exports.ExperimentalVCMetrics = /*#__PURE__*/function () {
64
+ function ExperimentalVCMetrics() {
65
+ (0, _classCallCheck2.default)(this, ExperimentalVCMetrics);
66
+ (0, _defineProperty2.default)(this, "vcObserver", null);
67
+ }
68
+ return (0, _createClass2.default)(ExperimentalVCMetrics, [{
69
+ key: "initialize",
70
+ value: function initialize(options) {
71
+ if (this.vcObserver === null) {
72
+ this.vcObserver = new _vcObserver.VCObserver(_objectSpread(_objectSpread({}, options), {}, {
73
+ isPostInteraction: true
74
+ }));
75
+ }
76
+ return this;
77
+ }
78
+ }, {
79
+ key: "start",
80
+ value: function start(_ref) {
81
+ var _this$vcObserver;
82
+ var startTime = _ref.startTime;
83
+ (_this$vcObserver = this.vcObserver) === null || _this$vcObserver === void 0 || _this$vcObserver.start({
84
+ startTime: startTime
85
+ });
86
+ }
87
+ }]);
88
+ }();
89
+ var experimentalVC = exports.experimentalVC = new ExperimentalVCMetrics();
90
+ var getExperimentalVCMetrics = exports.getExperimentalVCMetrics = function getExperimentalVCMetrics(interaction) {
91
+ if (experimentalVC.vcObserver) {
92
+ var _result$metricsVc;
93
+ var result = (0, _utils.calculateVCMetrics)(interaction, 'ufo-experimental', experimentalVC.vcObserver.getVCResult);
94
+ experimentalVC.vcObserver.stop();
95
+ return _objectSpread(_objectSpread({}, result), {}, {
96
+ 'metric:experimental:vc90': result === null || result === void 0 || (_result$metricsVc = result['metrics:vc']) === null || _result$metricsVc === void 0 ? void 0 : _result$metricsVc['90']
97
+ });
98
+ }
99
+ return null;
100
+ };
@@ -5,15 +5,24 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.buildSegmentTree = buildSegmentTree;
8
+ exports.getPageVisibilityUpToTTAI = exports.calculateVCMetrics = void 0;
9
+ exports.getSSRDoneTimeValue = getSSRDoneTimeValue;
10
+ exports.getVCMetrics = exports.getTTAI = void 0;
8
11
  exports.isSegmentLabel = isSegmentLabel;
9
12
  exports.labelStackStartWith = labelStackStartWith;
10
13
  exports.optimizeLabelStack = optimizeLabelStack;
11
- exports.sanitizeUfoName = void 0;
14
+ exports.sanitizeUfoName = exports.postInteractionLog = void 0;
12
15
  exports.stringifyLabelStackFully = stringifyLabelStackFully;
13
16
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
14
17
  var _constants = require("../../../common/constants");
18
+ var _config = require("../../../config");
19
+ var _hiddenTiming = require("../../../hidden-timing");
20
+ var _postInteractionLog = _interopRequireDefault(require("../../../interaction-metrics/post-interaction-log"));
21
+ var _ssr = require("../../../ssr");
22
+ var _vc = require("../../../vc");
15
23
  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
24
  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 */
25
+ var postInteractionLog = exports.postInteractionLog = new _postInteractionLog.default();
17
26
  var sanitizeUfoName = exports.sanitizeUfoName = function sanitizeUfoName(name) {
18
27
  return name.replace(/_/g, '-');
19
28
  };
@@ -70,4 +79,58 @@ function optimizeLabelStack(labelStack) {
70
79
  s: ls.segmentId
71
80
  } : {});
72
81
  });
73
- }
82
+ }
83
+ var getPageVisibilityUpToTTAI = exports.getPageVisibilityUpToTTAI = function getPageVisibilityUpToTTAI(interaction) {
84
+ var start = interaction.start,
85
+ end = interaction.end;
86
+ return (0, _hiddenTiming.getPageVisibilityState)(start, end);
87
+ };
88
+ var calculateVCMetrics = exports.calculateVCMetrics = function calculateVCMetrics(interaction, prefix, getVCResultFn) {
89
+ var _interaction$apdex;
90
+ var result = getVCResultFn({
91
+ start: interaction.start,
92
+ stop: interaction.end,
93
+ 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,
94
+ prefix: prefix,
95
+ vc: interaction.vc
96
+ });
97
+ var VC = result === null || result === void 0 ? void 0 : result['metrics:vc'];
98
+ if (!VC || !(result !== null && result !== void 0 && result["".concat(prefix, ":vc:clean")])) {
99
+ return result;
100
+ }
101
+ var pageVisibilityUpToTTAI = getPageVisibilityUpToTTAI(interaction);
102
+ if (interaction.abortReason || pageVisibilityUpToTTAI !== 'visible') {
103
+ return result;
104
+ }
105
+ return result;
106
+ };
107
+ function getSSRDoneTimeValue(config) {
108
+ var _config$ssr, _config$ssr2;
109
+ 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() : (0, _ssr.getSSRDoneTime)();
110
+ }
111
+ var getVCMetrics = exports.getVCMetrics = function getVCMetrics(interaction) {
112
+ var _config$vc, _result$metricsVc;
113
+ var config = (0, _config.getConfig)();
114
+ if (!(config !== null && config !== void 0 && (_config$vc = config.vc) !== null && _config$vc !== void 0 && _config$vc.enabled)) {
115
+ return {};
116
+ }
117
+ if (interaction.type !== 'page_load' && interaction.type !== 'transition') {
118
+ return {};
119
+ }
120
+ var ssr = interaction.type === 'page_load' && config !== null && config !== void 0 && config.ssr ? {
121
+ ssr: getSSRDoneTimeValue(config)
122
+ } : null;
123
+ postInteractionLog.setVCObserverSSRConfig(ssr);
124
+ var result = calculateVCMetrics(interaction, 'ufo', (0, _vc.getVCObserver)().getVCResult);
125
+ (0, _vc.getVCObserver)().stop();
126
+ postInteractionLog.setLastInteractionFinishVCResult(result);
127
+ return _objectSpread(_objectSpread({}, result), {}, {
128
+ 'metric:vc90': result === null || result === void 0 || (_result$metricsVc = result['metrics:vc']) === null || _result$metricsVc === void 0 ? void 0 : _result$metricsVc['90']
129
+ });
130
+ };
131
+ var getTTAI = exports.getTTAI = function getTTAI(interaction) {
132
+ var start = interaction.start,
133
+ end = interaction.end;
134
+ var pageVisibilityUpToTTAI = getPageVisibilityUpToTTAI(interaction);
135
+ return !interaction.abortReason && pageVisibilityUpToTTAI === 'visible' ? Math.round(end - start) : undefined;
136
+ };
@@ -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.createExperimentalMetricsPayload = createExperimentalMetricsPayload;
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"));
@@ -14,8 +16,10 @@ var _bowserUltralight = _interopRequireDefault(require("bowser-ultralight"));
14
16
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
15
17
  var _additionalPayload = require("../additional-payload");
16
18
  var bundleEvalTiming = _interopRequireWildcard(require("../bundle-eval-timing"));
19
+ var _coinflip = _interopRequireDefault(require("../coinflip"));
17
20
  var _constants = require("../common/constants");
18
21
  var _config = require("../config");
22
+ var _createExperimentalInteractionMetricsPayload = require("../create-experimental-interaction-metrics-payload");
19
23
  var _customTimings = require("../custom-timings");
20
24
  var _globalErrorHandler = require("../global-error-handler");
21
25
  var _hiddenTiming = require("../hidden-timing");
@@ -24,7 +28,6 @@ var _interactionMetrics = require("../interaction-metrics");
24
28
  var resourceTiming = _interopRequireWildcard(require("../resource-timing"));
25
29
  var _roundNumber = require("../round-number");
26
30
  var ssr = _interopRequireWildcard(require("../ssr"));
27
- var _vc = require("../vc");
28
31
  var _utils = require("./common/utils");
29
32
  var _excluded = ["labelStack", "time"],
30
33
  _excluded2 = ["stopTime", "labelStack"],
@@ -46,7 +49,6 @@ function getUfoNameOverride(interaction) {
46
49
  }
47
50
  }
48
51
  return ufoName;
49
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
52
  } catch (e) {
51
53
  return ufoName;
52
54
  }
@@ -81,11 +83,6 @@ var getPageVisibilityUpToTTI = function getPageVisibilityUpToTTI(interaction) {
81
83
  var bm3EndTimeOrInteractionEndTime = getBm3EndTimeOrFallbackValue(interaction);
82
84
  return (0, _hiddenTiming.getPageVisibilityState)(start, bm3EndTimeOrInteractionEndTime);
83
85
  };
84
- var getPageVisibilityUpToTTAI = function getPageVisibilityUpToTTAI(interaction) {
85
- var start = interaction.start,
86
- end = interaction.end;
87
- return (0, _hiddenTiming.getPageVisibilityState)(start, end);
88
- };
89
86
  var getVisibilityStateFromPerformance = function getVisibilityStateFromPerformance(stop) {
90
87
  try {
91
88
  var results = performance.getEntriesByType('visibility-state');
@@ -131,7 +128,7 @@ var getMoreAccuratePageVisibilityUpToTTI = function getMoreAccuratePageVisibilit
131
128
  return old;
132
129
  };
133
130
  var getMoreAccuratePageVisibilityUpToTTAI = function getMoreAccuratePageVisibilityUpToTTAI(interaction) {
134
- var old = getPageVisibilityUpToTTAI(interaction);
131
+ var old = (0, _utils.getPageVisibilityUpToTTAI)(interaction);
135
132
  var buffered = getVisibilityStateFromPerformance(interaction.end);
136
133
  if (!buffered) {
137
134
  return old;
@@ -141,15 +138,6 @@ var getMoreAccuratePageVisibilityUpToTTAI = function getMoreAccuratePageVisibili
141
138
  }
142
139
  return old;
143
140
  };
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
141
  var getResourceTimings = function getResourceTimings(start, end) {
154
142
  var _resourceTiming$getRe;
155
143
  return (_resourceTiming$getRe = resourceTiming.getResourceTimings(start, end)) !== null && _resourceTiming$getRe !== void 0 ? _resourceTiming$getRe : undefined;
@@ -178,42 +166,6 @@ var getPaintMetrics = function getPaintMetrics(type) {
178
166
  });
179
167
  return metrics;
180
168
  };
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
169
  var getNavigationMetrics = function getNavigationMetrics(type) {
218
170
  if (type !== 'page_load') {
219
171
  return {};
@@ -261,14 +213,13 @@ var getNavigationMetrics = function getNavigationMetrics(type) {
261
213
  };
262
214
  };
263
215
  var getPPSMetrics = function getPPSMetrics(interaction) {
264
- var _interaction$apdex2;
216
+ var _interaction$apdex;
265
217
  var start = interaction.start,
266
218
  end = interaction.end;
267
219
  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;
271
- var ttai = interactionStatus.originalInteractionStatus === 'SUCCEEDED' && pageVisibilityUpToTTAI === 'visible' ? Math.round(end - start) : undefined;
220
+ var pageVisibilityUpToTTAI = (0, _utils.getPageVisibilityUpToTTAI)(interaction);
221
+ 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;
222
+ var ttai = !interaction.abortReason && pageVisibilityUpToTTAI === 'visible' ? Math.round(end - start) : undefined;
272
223
  var PPSMetricsAtTTI = tti !== undefined ? (0, _additionalPayload.getLighthouseMetrics)({
273
224
  start: start,
274
225
  stop: tti
@@ -358,13 +309,13 @@ function optimizeCustomData(interaction) {
358
309
  for (var _i = 0, _Object$entries = Object.entries(currentValue.custom || {}); _i < _Object$entries.length; _i++) {
359
310
  var _result$get$data2, _result$get2;
360
311
  var _Object$entries$_i = (0, _slicedToArray2.default)(_Object$entries[_i], 2),
361
- _key = _Object$entries$_i[0],
312
+ key = _Object$entries$_i[0],
362
313
  value = _Object$entries$_i[1];
363
314
  var label = (0, _utils.stringifyLabelStackFully)([]);
364
315
  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
316
  result.set(label, {
366
317
  labelStack: (0, _utils.optimizeLabelStack)([]),
367
- data: Object.assign(labelValue, (0, _defineProperty2.default)({}, _key, value))
318
+ data: Object.assign(labelValue, (0, _defineProperty2.default)({}, key, value))
368
319
  });
369
320
  }
370
321
  return result;
@@ -602,10 +553,6 @@ function getBm3TrackerTimings(interaction) {
602
553
  legacyMetrics: legacyMetrics
603
554
  };
604
555
  }
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
556
  function getPayloadSize(payload) {
610
557
  return Math.round(new TextEncoder().encode(JSON.stringify(payload)).length / 1024);
611
558
  }
@@ -648,13 +595,15 @@ function getStylesheetMetrics() {
648
595
  return {};
649
596
  }
650
597
  }
598
+ var regularTTAI;
599
+ var expTTAI;
651
600
  function getErrorCounts(interaction) {
652
601
  return {
653
602
  'ufo:errors:globalCount': (0, _globalErrorHandler.getGlobalErrorCount)(),
654
603
  'ufo:errors:count': interaction.errors.length
655
604
  };
656
605
  }
657
- function createInteractionMetricsPayload(interaction, interactionId) {
606
+ function createInteractionMetricsPayload(interaction, interactionId, experimental) {
658
607
  var _window$location, _config$additionalPay;
659
608
  var interactionPayloadStart = performance.now();
660
609
  var config = (0, _config.getConfig)();
@@ -674,7 +623,7 @@ function createInteractionMetricsPayload(interaction, interactionId) {
674
623
  isPreviousInteractionAborted = interaction.isPreviousInteractionAborted,
675
624
  abortedByInteractionName = interaction.abortedByInteractionName;
676
625
  var pageVisibilityAtTTI = getPageVisibilityUpToTTI(interaction);
677
- var pageVisibilityAtTTAI = getPageVisibilityUpToTTAI(interaction);
626
+ var pageVisibilityAtTTAI = (0, _utils.getPageVisibilityUpToTTAI)(interaction);
678
627
  var segments = config.killswitchNestedSegments ? [] : knownSegments;
679
628
  var segmentTree = _constants.REACT_UFO_VERSION === '2.0.0' ? (0, _utils.buildSegmentTree)(segments.map(function (segment) {
680
629
  return segment.labelStack;
@@ -689,23 +638,23 @@ function createInteractionMetricsPayload(interaction, interactionId) {
689
638
  } : {};
690
639
  // Page Load
691
640
  var getPageLoadInteractionMetrics = function getPageLoadInteractionMetrics() {
692
- var _config$ssr3;
641
+ var _config$ssr;
693
642
  if (!isPageLoad) {
694
643
  return {};
695
644
  }
696
645
  var config = (0, _config.getConfig)();
697
- var SSRDoneTimeValue = getSSRDoneTimeValue(config);
646
+ var SSRDoneTimeValue = (0, _utils.getSSRDoneTimeValue)(config);
698
647
  var SSRDoneTime = SSRDoneTimeValue !== undefined ? {
699
648
  SSRDoneTime: Math.round(SSRDoneTimeValue)
700
649
  } : {};
701
650
  return _objectSpread(_objectSpread({}, SSRDoneTime), {}, {
702
651
  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)
652
+ isUFOConfigSSRDoneAsFmp: interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp || !!(config !== null && config !== void 0 && (_config$ssr = config.ssr) !== null && _config$ssr !== void 0 && _config$ssr.getSSRDoneTime)
704
653
  });
705
654
  };
706
655
  // Detailed payload. Page visibility = visible
707
656
  var getDetailedInteractionMetrics = function getDetailedInteractionMetrics() {
708
- if (window.__UFO_COMPACT_PAYLOAD__ || !isDetailedPayload) {
657
+ if (experimental || window.__UFO_COMPACT_PAYLOAD__ || !isDetailedPayload) {
709
658
  return {};
710
659
  }
711
660
  var spans = [].concat((0, _toConsumableArray2.default)(interaction.spans), (0, _toConsumableArray2.default)(_interactionMetrics.interactionSpans));
@@ -720,7 +669,7 @@ function createInteractionMetricsPayload(interaction, interactionId) {
720
669
  }),
721
670
  holdActive: (0, _toConsumableArray2.default)(interaction.holdActive.values()),
722
671
  redirects: optimizeRedirects(interaction.redirects, start),
723
- holdInfo: optimizeHoldInfo(interaction.holdInfo, start),
672
+ holdInfo: optimizeHoldInfo(experimental ? interaction.holdExpInfo : interaction.holdInfo, start),
724
673
  spans: optimizeSpans(spans, start),
725
674
  requestInfo: optimizeRequestInfo(interaction.requestInfo, start),
726
675
  customTimings: optimizeCustomTimings(interaction.customTimings, start),
@@ -730,16 +679,21 @@ function createInteractionMetricsPayload(interaction, interactionId) {
730
679
  };
731
680
  // Page load & detailed payload
732
681
  var getPageLoadDetailedInteractionMetrics = function getPageLoadDetailedInteractionMetrics() {
733
- var _config$ssr4;
682
+ var _config$ssr2;
734
683
  if (!isPageLoad || !isDetailedPayload) {
735
684
  return {};
736
685
  }
737
686
  var config = (0, _config.getConfig)();
738
687
  return {
739
688
  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())
689
+ 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
690
  };
742
691
  };
692
+ if (experimental) {
693
+ expTTAI = (0, _utils.getTTAI)(interaction);
694
+ } else {
695
+ regularTTAI = (0, _utils.getTTAI)(interaction);
696
+ }
743
697
  var newUFOName = (0, _utils.sanitizeUfoName)(ufoName);
744
698
  var payload = {
745
699
  actionSubject: 'experience',
@@ -748,7 +702,7 @@ function createInteractionMetricsPayload(interaction, interactionId) {
748
702
  source: 'measured',
749
703
  tags: ['observability'],
750
704
  attributes: {
751
- properties: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
705
+ properties: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
752
706
  // basic
753
707
  'event:hostname': ((_window$location = window.location) === null || _window$location === void 0 ? void 0 : _window$location.hostname) || 'unknown',
754
708
  'event:product': config.product,
@@ -760,10 +714,10 @@ function createInteractionMetricsPayload(interaction, interactionId) {
760
714
  payloadSource: 'platform'
761
715
  },
762
716
  'event:region': config.region || 'unknown',
763
- 'experience:key': 'custom.interaction-metrics',
717
+ 'experience:key': experimental ? 'custom.experimental-interaction-metrics' : 'custom.interaction-metrics',
764
718
  '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({
719
+ }, getBrowserMetadata()), getSSRProperties(type)), getPPSMetrics(interaction)), getPaintMetrics(type)), getNavigationMetrics(type)), (0, _utils.getVCMetrics)(interaction)), experimental ? (0, _createExperimentalInteractionMetricsPayload.getExperimentalVCMetrics)(interaction) : undefined), (_config$additionalPay = config.additionalPayloadData) === null || _config$additionalPay === void 0 ? void 0 : _config$additionalPay.call(config, interaction)), getTracingContextData(interaction)), getStylesheetMetrics()), getErrorCounts(interaction)), {}, {
720
+ interactionMetrics: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
767
721
  namePrefix: config.namePrefix || '',
768
722
  segmentPrefix: config.segmentPrefix || '',
769
723
  interactionId: interactionId,
@@ -794,11 +748,18 @@ function createInteractionMetricsPayload(interaction, interactionId) {
794
748
  marks: optimizeMarks(interaction.marks),
795
749
  customData: optimizeCustomData(interaction),
796
750
  reactProfilerTimings: optimizeReactProfilerTimings(interaction.reactProfilerTimings, start)
797
- }, labelStack), getPageLoadInteractionMetrics()), getDetailedInteractionMetrics()), getPageLoadDetailedInteractionMetrics()), getBm3TrackerTimings(interaction)),
751
+ }, labelStack), getPageLoadInteractionMetrics()), getDetailedInteractionMetrics()), getPageLoadDetailedInteractionMetrics()), getBm3TrackerTimings(interaction)), {}, {
752
+ 'metric:ttai': experimental ? regularTTAI || expTTAI : undefined,
753
+ 'metric:experimental:ttai': expTTAI
754
+ }),
798
755
  'ufo:payloadTime': (0, _roundNumber.roundEpsilon)(performance.now() - interactionPayloadStart)
799
756
  })
800
757
  }
801
758
  };
759
+ if (experimental) {
760
+ regularTTAI = undefined;
761
+ expTTAI = undefined;
762
+ }
802
763
  payload.attributes.properties['event:sizeInKb'] = getPayloadSize(payload.attributes.properties);
803
764
  return payload;
804
765
  }
@@ -809,4 +770,20 @@ function createPayloads(interactionId, interaction) {
809
770
  });
810
771
  var interactionMetricsPayload = createInteractionMetricsPayload(modifiedInteraction, interactionId);
811
772
  return [interactionMetricsPayload];
773
+ }
774
+ function createExperimentalMetricsPayload(interactionId, interaction) {
775
+ var config = (0, _config.getConfig)();
776
+ if (!config) {
777
+ throw Error('UFO Configuration not provided');
778
+ }
779
+ var ufoName = (0, _utils.sanitizeUfoName)(interaction.ufoName);
780
+ var rate = (0, _config.getExperimentalInteractionRate)(ufoName, interaction.type);
781
+ if (!(0, _coinflip.default)(rate)) {
782
+ return null;
783
+ }
784
+ var pageVisibilityState = (0, _hiddenTiming.getPageVisibilityState)(interaction.start, interaction.end);
785
+ if (pageVisibilityState !== 'visible') {
786
+ return null;
787
+ }
788
+ return createInteractionMetricsPayload(interaction, interactionId, true);
812
789
  }