@atlaskit/react-ufo 2.4.5 → 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 (71) hide show
  1. package/CHANGELOG.md +25 -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 +49 -85
  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/cjs/vc/vc-observer/observers/index.js +1 -40
  17. package/dist/es2019/config/index.js +22 -0
  18. package/dist/es2019/create-experimental-interaction-metrics-payload/index.js +67 -0
  19. package/dist/es2019/create-payload/common/utils/index.js +86 -1
  20. package/dist/es2019/create-payload/index.js +40 -81
  21. package/dist/es2019/create-post-interaction-log-payload/index.js +1 -4
  22. package/dist/es2019/interaction-metrics/common/constants.js +6 -0
  23. package/dist/es2019/interaction-metrics/common/index.js +103 -0
  24. package/dist/es2019/interaction-metrics/index.js +92 -129
  25. package/dist/es2019/interaction-metrics/post-interaction-log.js +6 -2
  26. package/dist/es2019/interaction-metrics-init/index.js +21 -8
  27. package/dist/es2019/load-hold/UFOLoadHold.js +3 -4
  28. package/dist/es2019/segment/segment.js +6 -12
  29. package/dist/es2019/trace-pageload/index.js +1 -1
  30. package/dist/es2019/vc/vc-observer/observers/index.js +1 -20
  31. package/dist/esm/config/index.js +39 -18
  32. package/dist/esm/create-experimental-interaction-metrics-payload/index.js +81 -0
  33. package/dist/esm/create-payload/common/utils/index.js +80 -1
  34. package/dist/esm/create-payload/index.js +45 -83
  35. package/dist/esm/create-post-interaction-log-payload/index.js +1 -4
  36. package/dist/esm/interaction-metrics/common/constants.js +6 -0
  37. package/dist/esm/interaction-metrics/common/index.js +132 -0
  38. package/dist/esm/interaction-metrics/index.js +87 -156
  39. package/dist/esm/interaction-metrics/post-interaction-log.js +6 -2
  40. package/dist/esm/interaction-metrics-init/index.js +24 -10
  41. package/dist/esm/load-hold/UFOLoadHold.js +3 -4
  42. package/dist/esm/segment/segment.js +7 -9
  43. package/dist/esm/trace-pageload/index.js +1 -1
  44. package/dist/esm/vc/vc-observer/observers/index.js +1 -40
  45. package/dist/types/common/common/types.d.ts +9 -5
  46. package/dist/types/config/index.d.ts +6 -0
  47. package/dist/types/create-experimental-interaction-metrics-payload/index.d.ts +31 -0
  48. package/dist/types/create-payload/common/utils/index.d.ts +12 -0
  49. package/dist/types/create-payload/index.d.ts +13 -5716
  50. package/dist/types/create-post-interaction-log-payload/index.d.ts +2 -0
  51. package/dist/types/interaction-metrics/common/constants.d.ts +31 -1
  52. package/dist/types/interaction-metrics/common/index.d.ts +16 -0
  53. package/dist/types/interaction-metrics/index.d.ts +4 -15
  54. package/dist/types/interaction-metrics/post-interaction-log.d.ts +1 -1
  55. package/dist/types/load-hold/UFOLoadHold.d.ts +1 -2
  56. package/dist/types/trace-pageload/index.d.ts +1 -0
  57. package/dist/types/vc/vc-observer/observers/index.d.ts +0 -1
  58. package/dist/types-ts4.5/common/common/types.d.ts +9 -5
  59. package/dist/types-ts4.5/config/index.d.ts +6 -0
  60. package/dist/types-ts4.5/create-experimental-interaction-metrics-payload/index.d.ts +31 -0
  61. package/dist/types-ts4.5/create-payload/common/utils/index.d.ts +12 -0
  62. package/dist/types-ts4.5/create-payload/index.d.ts +13 -5716
  63. package/dist/types-ts4.5/create-post-interaction-log-payload/index.d.ts +2 -0
  64. package/dist/types-ts4.5/interaction-metrics/common/constants.d.ts +31 -1
  65. package/dist/types-ts4.5/interaction-metrics/common/index.d.ts +16 -0
  66. package/dist/types-ts4.5/interaction-metrics/index.d.ts +4 -15
  67. package/dist/types-ts4.5/interaction-metrics/post-interaction-log.d.ts +1 -1
  68. package/dist/types-ts4.5/load-hold/UFOLoadHold.d.ts +1 -2
  69. package/dist/types-ts4.5/trace-pageload/index.d.ts +1 -0
  70. package/dist/types-ts4.5/vc/vc-observer/observers/index.d.ts +0 -1
  71. package/package.json +2 -1
@@ -64,13 +64,34 @@ export function getInteractionRate(name, interactionKind) {
64
64
  return 0;
65
65
  }
66
66
  }
67
- export function getPostInteractionRate(name, interactionType) {
67
+ export function getExperimentalInteractionRate(name, interactionType) {
68
68
  try {
69
69
  if (!config) {
70
70
  return 0;
71
71
  }
72
72
  var _config2 = config,
73
- postInteractionLog = _config2.postInteractionLog;
73
+ experimentalInteractionMetrics = _config2.experimentalInteractionMetrics;
74
+ if (!(experimentalInteractionMetrics !== null && experimentalInteractionMetrics !== void 0 && experimentalInteractionMetrics.enabled)) {
75
+ return 0;
76
+ }
77
+ if (experimentalInteractionMetrics.rates && typeof experimentalInteractionMetrics.rates[name] === 'number') {
78
+ return experimentalInteractionMetrics.rates[name];
79
+ }
80
+ if (experimentalInteractionMetrics.kind && typeof experimentalInteractionMetrics.kind[interactionType] === 'number') {
81
+ return experimentalInteractionMetrics.kind[interactionType];
82
+ }
83
+ return 0;
84
+ } catch (e) {
85
+ return 0;
86
+ }
87
+ }
88
+ export function getPostInteractionRate(name, interactionType) {
89
+ try {
90
+ if (!config) {
91
+ return 0;
92
+ }
93
+ var _config3 = config,
94
+ postInteractionLog = _config3.postInteractionLog;
74
95
  if (!(postInteractionLog !== null && postInteractionLog !== void 0 && postInteractionLog.enabled)) {
75
96
  return 0;
76
97
  }
@@ -90,8 +111,8 @@ export function getCapabilityRate(capability) {
90
111
  if (!config) {
91
112
  return 0;
92
113
  }
93
- var _config3 = config,
94
- capabilityRate = _config3.capability;
114
+ var _config4 = config,
115
+ capabilityRate = _config4.capability;
95
116
  if (capabilityRate != null) {
96
117
  var rate = capabilityRate[capability];
97
118
  if (rate != null) {
@@ -110,8 +131,8 @@ export function getTypingPerformanceTracingMethod() {
110
131
  if (!config) {
111
132
  return defaultMethod;
112
133
  }
113
- var _config4 = config,
114
- typingMethod = _config4.typingMethod;
134
+ var _config5 = config,
135
+ typingMethod = _config5.typingMethod;
115
136
  if (typingMethod != null && validTypingMethods.find(function (m) {
116
137
  return m === typingMethod;
117
138
  })) {
@@ -130,8 +151,8 @@ export function getAwaitBM3TTIList() {
130
151
  if (!config) {
131
152
  return [];
132
153
  }
133
- var _config5 = config,
134
- awaitBM3TTI = _config5.awaitBM3TTI;
154
+ var _config6 = config,
155
+ awaitBM3TTI = _config6.awaitBM3TTI;
135
156
  if (awaitBM3TTI != null) {
136
157
  return awaitBM3TTI;
137
158
  } else {
@@ -148,8 +169,8 @@ export function getRemovePageSegmentsUFOPrefixes() {
148
169
  if (!config) {
149
170
  return false;
150
171
  }
151
- var _config6 = config,
152
- removePageSegmentsUFOPrefixes = _config6.removePageSegmentsUFOPrefixes;
172
+ var _config7 = config,
173
+ removePageSegmentsUFOPrefixes = _config7.removePageSegmentsUFOPrefixes;
153
174
  if (removePageSegmentsUFOPrefixes != null) {
154
175
  return removePageSegmentsUFOPrefixes;
155
176
  } else {
@@ -166,8 +187,8 @@ export function getRemoveInteractionsUFOPrefixes() {
166
187
  if (!config) {
167
188
  return false;
168
189
  }
169
- var _config7 = config,
170
- removeInteractionsUFOPrefixes = _config7.removeInteractionsUFOPrefixes;
190
+ var _config8 = config,
191
+ removeInteractionsUFOPrefixes = _config8.removeInteractionsUFOPrefixes;
171
192
  if (removeInteractionsUFOPrefixes != null) {
172
193
  return removeInteractionsUFOPrefixes;
173
194
  } else {
@@ -187,8 +208,8 @@ export function getUfoNameOverrides() {
187
208
  if (!config) {
188
209
  return undefined;
189
210
  }
190
- var _config8 = config,
191
- ufoNameOverrides = _config8.ufoNameOverrides;
211
+ var _config9 = config,
212
+ ufoNameOverrides = _config9.ufoNameOverrides;
192
213
  if (ufoNameOverrides != null) {
193
214
  return ufoNameOverrides;
194
215
  }
@@ -204,8 +225,8 @@ export function getDoNotAbortActivePressInteraction() {
204
225
  if (!config) {
205
226
  return undefined;
206
227
  }
207
- var _config9 = config,
208
- doNotAbortActivePressInteraction = _config9.doNotAbortActivePressInteraction;
228
+ var _config10 = config,
229
+ doNotAbortActivePressInteraction = _config10.doNotAbortActivePressInteraction;
209
230
  return doNotAbortActivePressInteraction;
210
231
  } catch (e) {
211
232
  return undefined;
@@ -218,8 +239,8 @@ export function getDoNotAbortActivePressInteractionOnTransition() {
218
239
  if (!config) {
219
240
  return undefined;
220
241
  }
221
- var _config10 = config,
222
- doNotAbortActivePressInteractionOnTransition = _config10.doNotAbortActivePressInteractionOnTransition;
242
+ var _config11 = config,
243
+ doNotAbortActivePressInteractionOnTransition = _config11.doNotAbortActivePressInteractionOnTransition;
223
244
  return doNotAbortActivePressInteractionOnTransition;
224
245
  } catch (e) {
225
246
  return undefined;
@@ -0,0 +1,81 @@
1
+ import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
2
+ import _createClass from "@babel/runtime/helpers/createClass";
3
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
4
+ 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; }
5
+ 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) { _defineProperty(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; }
6
+ import coinflip from '../coinflip';
7
+ import { getConfig, getExperimentalInteractionRate } from '../config';
8
+ import { createInteractionMetricsPayload, getUfoNameOverride } from '../create-payload';
9
+ import { getPageVisibilityState } from '../hidden-timing';
10
+ import { VCObserver } from '../vc/vc-observer';
11
+ export var ExperimentalInteractionMetrics = /*#__PURE__*/function () {
12
+ function ExperimentalInteractionMetrics() {
13
+ _classCallCheck(this, ExperimentalInteractionMetrics);
14
+ /**
15
+ * Handler function to process / send the observation data
16
+ */
17
+ _defineProperty(this, "sinkHandlerFn", function () {});
18
+ /**
19
+ * independent VC observer that observes until `custom.post-interaction-logs` event is sent
20
+ */
21
+ _defineProperty(this, "vcObserver", null);
22
+ }
23
+ _createClass(ExperimentalInteractionMetrics, [{
24
+ key: "sinkHandler",
25
+ value:
26
+ /**
27
+ * Set the fn that would be invoked to process / send the observation data
28
+ */
29
+ function sinkHandler(sinkHandlerFn) {
30
+ this.sinkHandlerFn = sinkHandlerFn;
31
+ }
32
+ }, {
33
+ key: "onInteractionComplete",
34
+ value: function onInteractionComplete(interactionId, data) {
35
+ var endTime = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : performance.now();
36
+ if (data.ufoName) {
37
+ data.end = endTime;
38
+ this.sinkHandlerFn(interactionId, data);
39
+ }
40
+ }
41
+ }, {
42
+ key: "initializeVCObserver",
43
+ value: function initializeVCObserver(options) {
44
+ if (this.vcObserver === null) {
45
+ this.vcObserver = new VCObserver(_objectSpread(_objectSpread({}, options), {}, {
46
+ isPostInteraction: true
47
+ }));
48
+ }
49
+ return this;
50
+ }
51
+ }, {
52
+ key: "startVCObserver",
53
+ value: function startVCObserver(_ref) {
54
+ var _this$vcObserver;
55
+ var startTime = _ref.startTime;
56
+ (_this$vcObserver = this.vcObserver) === null || _this$vcObserver === void 0 || _this$vcObserver.start({
57
+ startTime: startTime
58
+ });
59
+ }
60
+ }]);
61
+ return ExperimentalInteractionMetrics;
62
+ }();
63
+ export function createExperimentalInteractionMetricsPayload(interactionId, interaction) {
64
+ var config = getConfig();
65
+ if (!config) {
66
+ throw Error('UFO Configuration not provided');
67
+ }
68
+ var ufoName = getUfoNameOverride(interaction);
69
+ var modifiedInteraction = _objectSpread(_objectSpread({}, interaction), {}, {
70
+ ufoName: ufoName
71
+ });
72
+ var rate = getExperimentalInteractionRate(ufoName, interaction.type);
73
+ if (!coinflip(rate)) {
74
+ return null;
75
+ }
76
+ var pageVisibilityState = getPageVisibilityState(interaction.start, interaction.end);
77
+ if (pageVisibilityState !== 'visible') {
78
+ return null;
79
+ }
80
+ return createInteractionMetricsPayload(modifiedInteraction, interactionId, true);
81
+ }
@@ -2,7 +2,13 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
2
  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; }
3
3
  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) { _defineProperty(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; }
4
4
  /* eslint-disable @typescript-eslint/no-non-null-asserted-optional-chain */
5
+
5
6
  import { REACT_UFO_VERSION } from '../../../common/constants';
7
+ import { getConfig } from '../../../config';
8
+ import { getPageVisibilityState } from '../../../hidden-timing';
9
+ import { experimentalInteractionLog, postInteractionLog } from '../../../interaction-metrics';
10
+ import * as ssr from '../../../ssr';
11
+ import { getVCObserver } from '../../../vc';
6
12
  export var sanitizeUfoName = function sanitizeUfoName(name) {
7
13
  return name.replace(/_/g, '-');
8
14
  };
@@ -59,4 +65,77 @@ export function optimizeLabelStack(labelStack) {
59
65
  s: ls.segmentId
60
66
  } : {});
61
67
  });
62
- }
68
+ }
69
+ export var getInteractionStatus = function getInteractionStatus(interaction) {
70
+ var originalInteractionStatus = interaction.abortReason ? 'ABORTED' : 'SUCCEEDED';
71
+ var hasBm3TTI = interaction.apdex.length > 0;
72
+ var overrideStatus = hasBm3TTI ? 'SUCCEEDED' : originalInteractionStatus;
73
+ return {
74
+ originalInteractionStatus: originalInteractionStatus,
75
+ overrideStatus: overrideStatus
76
+ };
77
+ };
78
+ export var getPageVisibilityUpToTTAI = function getPageVisibilityUpToTTAI(interaction) {
79
+ var start = interaction.start,
80
+ end = interaction.end;
81
+ return getPageVisibilityState(start, end);
82
+ };
83
+ export var calculateVCMetrics = function calculateVCMetrics(interaction, prefix, getVCResultFn) {
84
+ var _interaction$apdex;
85
+ var result = getVCResultFn({
86
+ start: interaction.start,
87
+ stop: interaction.end,
88
+ 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,
89
+ prefix: prefix,
90
+ vc: interaction.vc
91
+ });
92
+ var VC = result === null || result === void 0 ? void 0 : result['metrics:vc'];
93
+ if (!VC || !(result !== null && result !== void 0 && result["".concat(prefix, ":vc:clean")])) {
94
+ return result;
95
+ }
96
+ var interactionStatus = getInteractionStatus(interaction);
97
+ var pageVisibilityUpToTTAI = getPageVisibilityUpToTTAI(interaction);
98
+ if (interactionStatus.originalInteractionStatus !== 'SUCCEEDED' || pageVisibilityUpToTTAI !== 'visible') {
99
+ return result;
100
+ }
101
+ return result;
102
+ };
103
+ export function getSSRDoneTimeValue(config) {
104
+ var _config$ssr, _config$ssr2;
105
+ 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();
106
+ }
107
+ export var getVCMetrics = function getVCMetrics(interaction) {
108
+ var _config$vc, _result$metricsVc;
109
+ var config = getConfig();
110
+ if (!(config !== null && config !== void 0 && (_config$vc = config.vc) !== null && _config$vc !== void 0 && _config$vc.enabled)) {
111
+ return {};
112
+ }
113
+ if (interaction.type !== 'page_load' && interaction.type !== 'transition') {
114
+ return {};
115
+ }
116
+ var ssr = interaction.type === 'page_load' && config !== null && config !== void 0 && config.ssr ? {
117
+ ssr: getSSRDoneTimeValue(config)
118
+ } : null;
119
+ postInteractionLog.setVCObserverSSRConfig(ssr);
120
+ var result = calculateVCMetrics(interaction, 'ufo', getVCObserver().getVCResult);
121
+ return _objectSpread(_objectSpread({}, result), {}, {
122
+ 'metric:vc90': result === null || result === void 0 || (_result$metricsVc = result['metrics:vc']) === null || _result$metricsVc === void 0 ? void 0 : _result$metricsVc['90']
123
+ });
124
+ };
125
+ export var getExperimentalVCMetrics = function getExperimentalVCMetrics(interaction) {
126
+ if (experimentalInteractionLog.vcObserver) {
127
+ var _result$metricsVc2;
128
+ var result = calculateVCMetrics(interaction, 'ufo-experimental', experimentalInteractionLog.vcObserver.getVCResult);
129
+ return _objectSpread(_objectSpread({}, result), {}, {
130
+ 'metric:experimental:vc90': result === null || result === void 0 || (_result$metricsVc2 = result['metrics:vc']) === null || _result$metricsVc2 === void 0 ? void 0 : _result$metricsVc2['90']
131
+ });
132
+ }
133
+ return null;
134
+ };
135
+ export var getTTAI = function getTTAI(interaction) {
136
+ var start = interaction.start,
137
+ end = interaction.end;
138
+ var interactionStatus = getInteractionStatus(interaction);
139
+ var pageVisibilityUpToTTAI = getPageVisibilityUpToTTAI(interaction);
140
+ return interactionStatus.originalInteractionStatus === 'SUCCEEDED' && pageVisibilityUpToTTAI === 'visible' ? Math.round(end - start) : undefined;
141
+ };
@@ -18,13 +18,12 @@ import { getBm3Timings } from '../custom-timings';
18
18
  import { getGlobalErrorCount } from '../global-error-handler';
19
19
  import { getPageVisibilityState } from '../hidden-timing';
20
20
  import * as initialPageLoadExtraTiming from '../initial-page-load-extra-timing';
21
- import { interactionSpans as atlaskitInteractionSpans, postInteractionLog } from '../interaction-metrics';
21
+ import { interactionSpans as atlaskitInteractionSpans } from '../interaction-metrics';
22
22
  import * as resourceTiming from '../resource-timing';
23
23
  import { roundEpsilon } from '../round-number';
24
24
  import * as ssr from '../ssr';
25
- import { getVCObserver } from '../vc';
26
- import { buildSegmentTree, labelStackStartWith, optimizeLabelStack, sanitizeUfoName, stringifyLabelStackFully } from './common/utils';
27
- function getUfoNameOverride(interaction) {
25
+ import { buildSegmentTree, getExperimentalVCMetrics, getInteractionStatus, getPageVisibilityUpToTTAI, getSSRDoneTimeValue, getTTAI, getVCMetrics, labelStackStartWith, optimizeLabelStack, sanitizeUfoName, stringifyLabelStackFully } from './common/utils';
26
+ export function getUfoNameOverride(interaction) {
28
27
  var ufoName = interaction.ufoName,
29
28
  apdex = interaction.apdex;
30
29
  try {
@@ -36,7 +35,6 @@ function getUfoNameOverride(interaction) {
36
35
  }
37
36
  }
38
37
  return ufoName;
39
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
40
38
  } catch (e) {
41
39
  return ufoName;
42
40
  }
@@ -71,11 +69,6 @@ var getPageVisibilityUpToTTI = function getPageVisibilityUpToTTI(interaction) {
71
69
  var bm3EndTimeOrInteractionEndTime = getBm3EndTimeOrFallbackValue(interaction);
72
70
  return getPageVisibilityState(start, bm3EndTimeOrInteractionEndTime);
73
71
  };
74
- var getPageVisibilityUpToTTAI = function getPageVisibilityUpToTTAI(interaction) {
75
- var start = interaction.start,
76
- end = interaction.end;
77
- return getPageVisibilityState(start, end);
78
- };
79
72
  var getVisibilityStateFromPerformance = function getVisibilityStateFromPerformance(stop) {
80
73
  try {
81
74
  var results = performance.getEntriesByType('visibility-state');
@@ -131,15 +124,6 @@ var getMoreAccuratePageVisibilityUpToTTAI = function getMoreAccuratePageVisibili
131
124
  }
132
125
  return old;
133
126
  };
134
- var getInteractionStatus = function getInteractionStatus(interaction) {
135
- var originalInteractionStatus = interaction.abortReason ? 'ABORTED' : 'SUCCEEDED';
136
- var hasBm3TTI = interaction.apdex.length > 0;
137
- var overrideStatus = hasBm3TTI ? 'SUCCEEDED' : originalInteractionStatus;
138
- return {
139
- originalInteractionStatus: originalInteractionStatus,
140
- overrideStatus: overrideStatus
141
- };
142
- };
143
127
  var getResourceTimings = function getResourceTimings(start, end) {
144
128
  var _resourceTiming$getRe;
145
129
  return (_resourceTiming$getRe = resourceTiming.getResourceTimings(start, end)) !== null && _resourceTiming$getRe !== void 0 ? _resourceTiming$getRe : undefined;
@@ -168,42 +152,6 @@ var getPaintMetrics = function getPaintMetrics(type) {
168
152
  });
169
153
  return metrics;
170
154
  };
171
- var getVCMetrics = function getVCMetrics(interaction) {
172
- var _config$vc, _interaction$apdex;
173
- var config = getConfig();
174
- if (!(config !== null && config !== void 0 && (_config$vc = config.vc) !== null && _config$vc !== void 0 && _config$vc.enabled)) {
175
- return {};
176
- }
177
- if (interaction.type !== 'page_load' && interaction.type !== 'transition') {
178
- return {};
179
- }
180
- var ssr = interaction.type === 'page_load' && config !== null && config !== void 0 && config.ssr ? {
181
- ssr: getSSRDoneTimeValue(config)
182
- } : null;
183
- postInteractionLog.setVCObserverSSRConfig(ssr);
184
- 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;
185
- var prefix = 'ufo';
186
- var result = getVCObserver().getVCResult(_objectSpread({
187
- start: interaction.start,
188
- stop: interaction.end,
189
- tti: tti,
190
- prefix: prefix,
191
- vc: interaction.vc
192
- }, ssr));
193
- postInteractionLog.setLastInteractionFinishVCResult(result);
194
- var VC = result === null || result === void 0 ? void 0 : result['metrics:vc'];
195
- if (!VC || !(result !== null && result !== void 0 && result["".concat(prefix, ":vc:clean")])) {
196
- return result;
197
- }
198
- var interactionStatus = getInteractionStatus(interaction);
199
- var pageVisibilityUpToTTAI = getPageVisibilityUpToTTAI(interaction);
200
- if (interactionStatus.originalInteractionStatus !== 'SUCCEEDED' || pageVisibilityUpToTTAI !== 'visible') {
201
- return result;
202
- }
203
- return _objectSpread(_objectSpread({}, result), {}, {
204
- 'metric:vc90': VC['90']
205
- });
206
- };
207
155
  var getNavigationMetrics = function getNavigationMetrics(type) {
208
156
  if (type !== 'page_load') {
209
157
  return {};
@@ -251,13 +199,13 @@ var getNavigationMetrics = function getNavigationMetrics(type) {
251
199
  };
252
200
  };
253
201
  var getPPSMetrics = function getPPSMetrics(interaction) {
254
- var _interaction$apdex2;
202
+ var _interaction$apdex;
255
203
  var start = interaction.start,
256
204
  end = interaction.end;
257
205
  var config = getConfig();
258
206
  var interactionStatus = getInteractionStatus(interaction);
259
207
  var pageVisibilityUpToTTAI = getPageVisibilityUpToTTAI(interaction);
260
- 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;
208
+ 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;
261
209
  var ttai = interactionStatus.originalInteractionStatus === 'SUCCEEDED' && pageVisibilityUpToTTAI === 'visible' ? Math.round(end - start) : undefined;
262
210
  var PPSMetricsAtTTI = tti !== undefined ? getLighthouseMetrics({
263
211
  start: start,
@@ -348,13 +296,13 @@ function optimizeCustomData(interaction) {
348
296
  for (var _i = 0, _Object$entries = Object.entries(currentValue.custom || {}); _i < _Object$entries.length; _i++) {
349
297
  var _result$get$data2, _result$get2;
350
298
  var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
351
- _key = _Object$entries$_i[0],
299
+ key = _Object$entries$_i[0],
352
300
  value = _Object$entries$_i[1];
353
301
  var label = stringifyLabelStackFully([]);
354
302
  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 : {};
355
303
  result.set(label, {
356
304
  labelStack: optimizeLabelStack([]),
357
- data: Object.assign(labelValue, _defineProperty({}, _key, value))
305
+ data: Object.assign(labelValue, _defineProperty({}, key, value))
358
306
  });
359
307
  }
360
308
  return result;
@@ -592,10 +540,6 @@ function getBm3TrackerTimings(interaction) {
592
540
  legacyMetrics: legacyMetrics
593
541
  };
594
542
  }
595
- function getSSRDoneTimeValue(config) {
596
- var _config$ssr, _config$ssr2;
597
- 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();
598
- }
599
543
  function getPayloadSize(payload) {
600
544
  return Math.round(new TextEncoder().encode(JSON.stringify(payload)).length / 1024);
601
545
  }
@@ -628,17 +572,25 @@ function getStylesheetMetrics() {
628
572
  }
629
573
  }, 0);
630
574
  return {
631
- stylesheets: stylesheetCount,
632
- styleElements: styleElements,
633
- styleProps: styleProps.length,
634
- styleDeclarations: styleDeclarations,
635
- cssrules: cssrules
575
+ 'ufo:stylesheets': stylesheetCount,
576
+ 'ufo:styleElements': styleElements,
577
+ 'ufo:styleProps': styleProps.length,
578
+ 'ufo:styleDeclarations': styleDeclarations,
579
+ 'ufo:cssrules': cssrules
636
580
  };
637
581
  } catch (e) {
638
582
  return {};
639
583
  }
640
584
  }
641
- function createInteractionMetricsPayload(interaction, interactionId) {
585
+ var regularTTAI;
586
+ var expTTAI;
587
+ function getErrorCounts(interaction) {
588
+ return {
589
+ 'ufo:errors:globalCount': getGlobalErrorCount(),
590
+ 'ufo:errors:count': interaction.errors.length
591
+ };
592
+ }
593
+ export function createInteractionMetricsPayload(interaction, interactionId, experimental) {
642
594
  var _window$location, _config$additionalPay;
643
595
  var interactionPayloadStart = performance.now();
644
596
  var config = getConfig();
@@ -673,7 +625,7 @@ function createInteractionMetricsPayload(interaction, interactionId) {
673
625
  } : {};
674
626
  // Page Load
675
627
  var getPageLoadInteractionMetrics = function getPageLoadInteractionMetrics() {
676
- var _config$ssr3;
628
+ var _config$ssr;
677
629
  if (!isPageLoad) {
678
630
  return {};
679
631
  }
@@ -684,12 +636,12 @@ function createInteractionMetricsPayload(interaction, interactionId) {
684
636
  } : {};
685
637
  return _objectSpread(_objectSpread({}, SSRDoneTime), {}, {
686
638
  isBM3ConfigSSRDoneAsFmp: interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp,
687
- isUFOConfigSSRDoneAsFmp: interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp || !!(config !== null && config !== void 0 && (_config$ssr3 = config.ssr) !== null && _config$ssr3 !== void 0 && _config$ssr3.getSSRDoneTime)
639
+ isUFOConfigSSRDoneAsFmp: interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp || !!(config !== null && config !== void 0 && (_config$ssr = config.ssr) !== null && _config$ssr !== void 0 && _config$ssr.getSSRDoneTime)
688
640
  });
689
641
  };
690
642
  // Detailed payload. Page visibility = visible
691
643
  var getDetailedInteractionMetrics = function getDetailedInteractionMetrics() {
692
- if (window.__UFO_COMPACT_PAYLOAD__ || !isDetailedPayload) {
644
+ if (experimental || window.__UFO_COMPACT_PAYLOAD__ || !isDetailedPayload) {
693
645
  return {};
694
646
  }
695
647
  var spans = [].concat(_toConsumableArray(interaction.spans), _toConsumableArray(atlaskitInteractionSpans));
@@ -704,7 +656,7 @@ function createInteractionMetricsPayload(interaction, interactionId) {
704
656
  }),
705
657
  holdActive: _toConsumableArray(interaction.holdActive.values()),
706
658
  redirects: optimizeRedirects(interaction.redirects, start),
707
- holdInfo: optimizeHoldInfo(interaction.holdInfo, start),
659
+ holdInfo: optimizeHoldInfo(experimental ? interaction.holdExpInfo : interaction.holdInfo, start),
708
660
  spans: optimizeSpans(spans, start),
709
661
  requestInfo: optimizeRequestInfo(interaction.requestInfo, start),
710
662
  customTimings: optimizeCustomTimings(interaction.customTimings, start),
@@ -714,16 +666,21 @@ function createInteractionMetricsPayload(interaction, interactionId) {
714
666
  };
715
667
  // Page load & detailed payload
716
668
  var getPageLoadDetailedInteractionMetrics = function getPageLoadDetailedInteractionMetrics() {
717
- var _config$ssr4;
669
+ var _config$ssr2;
718
670
  if (!isPageLoad || !isDetailedPayload) {
719
671
  return {};
720
672
  }
721
673
  var config = getConfig();
722
674
  return {
723
675
  initialPageLoadExtraTimings: objectToArray(initialPageLoadExtraTiming.getTimings()),
724
- SSRTimings: config !== null && config !== void 0 && (_config$ssr4 = config.ssr) !== null && _config$ssr4 !== void 0 && _config$ssr4.getSSRTimings ? config.ssr.getSSRTimings() : objectToArray(ssr.getSSRTimings())
676
+ SSRTimings: config !== null && config !== void 0 && (_config$ssr2 = config.ssr) !== null && _config$ssr2 !== void 0 && _config$ssr2.getSSRTimings ? config.ssr.getSSRTimings() : objectToArray(ssr.getSSRTimings())
725
677
  };
726
678
  };
679
+ if (experimental) {
680
+ expTTAI = getTTAI(interaction);
681
+ } else {
682
+ regularTTAI = getTTAI(interaction);
683
+ }
727
684
  var newUFOName = sanitizeUfoName(ufoName);
728
685
  var payload = {
729
686
  actionSubject: 'experience',
@@ -732,7 +689,7 @@ function createInteractionMetricsPayload(interaction, interactionId) {
732
689
  source: 'measured',
733
690
  tags: ['observability'],
734
691
  attributes: {
735
- properties: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
692
+ properties: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
736
693
  // basic
737
694
  'event:hostname': ((_window$location = window.location) === null || _window$location === void 0 ? void 0 : _window$location.hostname) || 'unknown',
738
695
  'event:product': config.product,
@@ -744,11 +701,10 @@ function createInteractionMetricsPayload(interaction, interactionId) {
744
701
  payloadSource: 'platform'
745
702
  },
746
703
  'event:region': config.region || 'unknown',
747
- 'experience:key': 'custom.interaction-metrics',
704
+ 'experience:key': experimental ? 'custom.experimental-interaction-metrics' : 'custom.interaction-metrics',
748
705
  'experience:name': newUFOName
749
- }, 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()), {}, {
750
- errorCount: getGlobalErrorCount(),
751
- interactionMetrics: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
706
+ }, getBrowserMetadata()), getSSRProperties(type)), getPPSMetrics(interaction)), getPaintMetrics(type)), getNavigationMetrics(type)), getVCMetrics(interaction)), experimental ? getExperimentalVCMetrics(interaction) : undefined), (_config$additionalPay = config.additionalPayloadData) === null || _config$additionalPay === void 0 ? void 0 : _config$additionalPay.call(config, interaction)), getTracingContextData(interaction)), getStylesheetMetrics()), getErrorCounts(interaction)), {}, {
707
+ interactionMetrics: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
752
708
  namePrefix: config.namePrefix || '',
753
709
  segmentPrefix: config.segmentPrefix || '',
754
710
  interactionId: interactionId,
@@ -778,13 +734,19 @@ function createInteractionMetricsPayload(interaction, interactionId) {
778
734
  }),
779
735
  marks: optimizeMarks(interaction.marks),
780
736
  customData: optimizeCustomData(interaction),
781
- reactProfilerTimings: optimizeReactProfilerTimings(interaction.reactProfilerTimings, start),
782
- errorCount: interaction.errors.length
783
- }, labelStack), getPageLoadInteractionMetrics()), getDetailedInteractionMetrics()), getPageLoadDetailedInteractionMetrics()), getBm3TrackerTimings(interaction)),
737
+ reactProfilerTimings: optimizeReactProfilerTimings(interaction.reactProfilerTimings, start)
738
+ }, labelStack), getPageLoadInteractionMetrics()), getDetailedInteractionMetrics()), getPageLoadDetailedInteractionMetrics()), getBm3TrackerTimings(interaction)), {}, {
739
+ 'metric:ttai': experimental ? regularTTAI || expTTAI : undefined,
740
+ 'metric:experimental:ttai': experimental ? expTTAI : undefined
741
+ }),
784
742
  'ufo:payloadTime': roundEpsilon(performance.now() - interactionPayloadStart)
785
743
  })
786
744
  }
787
745
  };
746
+ if (experimental) {
747
+ regularTTAI = undefined;
748
+ expTTAI = undefined;
749
+ }
788
750
  payload.attributes.properties['event:sizeInKb'] = getPayloadSize(payload.attributes.properties);
789
751
  return payload;
790
752
  }
@@ -51,10 +51,7 @@ function removeCascadingParentTimingReport(reactProfilerTimings) {
51
51
  if (parentSegmentId) {
52
52
  var parentTimings = timingIndex.get(parentSegmentId);
53
53
  var filteredParentTimings = parentTimings === null || parentTimings === void 0 ? void 0 : parentTimings.filter(function (parentTiming) {
54
- if (parentTiming.startTime === timing.startTime && parentTiming.actualDuration === timing.actualDuration) {
55
- return false;
56
- }
57
- return true;
54
+ return !(parentTiming.startTime === timing.startTime && parentTiming.actualDuration === timing.actualDuration);
58
55
  });
59
56
  if (filteredParentTimings) {
60
57
  timingIndex.set(parentSegmentId, filteredParentTimings);
@@ -1,2 +1,8 @@
1
1
  var interactions = new Map();
2
+ export var CLEANUP_TIMEOUT = 60 * 1000;
3
+ export var CLEANUP_TIMEOUT_AFTER_APDEX = 15 * 1000;
4
+ export var interactionQueue = [];
5
+ export var segmentCache = new Map();
6
+ export var segmentObservers = [];
7
+ export var moduleLoadingRequests = {};
2
8
  export default interactions;