@atlaskit/react-ufo 5.4.0 → 5.4.2

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 (37) hide show
  1. package/AGENTS.md +20 -9
  2. package/CHANGELOG.md +16 -0
  3. package/api-reference.md +899 -456
  4. package/dist/cjs/config/index.js +13 -6
  5. package/dist/cjs/create-interaction-extra-metrics-payload/index.js +19 -18
  6. package/dist/cjs/create-payload/index.js +2 -2
  7. package/dist/cjs/ignore-holds/index.js +5 -3
  8. package/dist/cjs/segment/segment.js +5 -3
  9. package/dist/cjs/segment/third-party-segment.js +4 -3
  10. package/dist/cjs/vc/vc-observer-new/viewport-observer/index.js +23 -18
  11. package/dist/es2019/config/index.js +12 -8
  12. package/dist/es2019/create-interaction-extra-metrics-payload/index.js +6 -5
  13. package/dist/es2019/create-payload/index.js +1 -1
  14. package/dist/es2019/ignore-holds/index.js +5 -3
  15. package/dist/es2019/segment/segment.js +5 -3
  16. package/dist/es2019/segment/third-party-segment.js +3 -2
  17. package/dist/es2019/vc/vc-observer-new/viewport-observer/index.js +7 -2
  18. package/dist/esm/config/index.js +12 -6
  19. package/dist/esm/create-interaction-extra-metrics-payload/index.js +20 -19
  20. package/dist/esm/create-payload/index.js +2 -2
  21. package/dist/esm/ignore-holds/index.js +4 -2
  22. package/dist/esm/segment/segment.js +4 -2
  23. package/dist/esm/segment/third-party-segment.js +3 -2
  24. package/dist/esm/vc/vc-observer-new/viewport-observer/index.js +21 -16
  25. package/dist/types/common/react-ufo-payload-schema.d.ts +1 -1
  26. package/dist/types/config/index.d.ts +2 -1
  27. package/dist/types/ignore-holds/index.d.ts +5 -1
  28. package/dist/types/segment/segment.d.ts +5 -1
  29. package/dist/types/segment/third-party-segment.d.ts +4 -1
  30. package/dist/types/vc/vc-observer-new/viewport-observer/index.d.ts +1 -0
  31. package/dist/types-ts4.5/common/react-ufo-payload-schema.d.ts +1 -1
  32. package/dist/types-ts4.5/config/index.d.ts +2 -1
  33. package/dist/types-ts4.5/ignore-holds/index.d.ts +5 -1
  34. package/dist/types-ts4.5/segment/segment.d.ts +5 -1
  35. package/dist/types-ts4.5/segment/third-party-segment.d.ts +4 -1
  36. package/dist/types-ts4.5/vc/vc-observer-new/viewport-observer/index.d.ts +1 -0
  37. package/package.json +7 -1
@@ -8,6 +8,7 @@ exports.UNKNOWN_INTERACTION_RATE = exports.DEFAULT_TTVC_REVISION = exports.CLEAN
8
8
  exports.getAwaitBM3TTIList = getAwaitBM3TTIList;
9
9
  exports.getCapabilityRate = getCapabilityRate;
10
10
  exports.getConfig = getConfig;
11
+ exports.getDefaultTTVCRevision = getDefaultTTVCRevision;
11
12
  exports.getDoNotAbortActivePressInteraction = getDoNotAbortActivePressInteraction;
12
13
  exports.getDoNotAbortActivePressInteractionOnTransition = getDoNotAbortActivePressInteractionOnTransition;
13
14
  exports.getEnabledVCRevisions = getEnabledVCRevisions;
@@ -34,7 +35,10 @@ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
34
35
  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; }
35
36
  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; }
36
37
  var config;
37
- var DEFAULT_TTVC_REVISION = exports.DEFAULT_TTVC_REVISION = 'fy25.03';
38
+ var DEFAULT_TTVC_REVISION = exports.DEFAULT_TTVC_REVISION = 'fy26.04';
39
+ function getDefaultTTVCRevision() {
40
+ return (0, _platformFeatureFlags.fg)('ufo_update_and_enforce_ttvc_v4_default_version') ? DEFAULT_TTVC_REVISION : 'fy25.03';
41
+ }
38
42
  var UNKNOWN_INTERACTION_RATE = exports.UNKNOWN_INTERACTION_RATE = 1000;
39
43
 
40
44
  // Defensively typed, since this is directly user-editable
@@ -45,13 +49,16 @@ function setUFOConfig(newConfig) {
45
49
  // Handle edge cases with `enabledVCRevisions`
46
50
  var _ref = (_newConfig$vc = newConfig === null || newConfig === void 0 ? void 0 : newConfig.vc) !== null && _newConfig$vc !== void 0 ? _newConfig$vc : {},
47
51
  enabledVCRevisions = _ref.enabledVCRevisions;
48
- if ((0, _typeof2.default)(enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.byExperience) === 'object') {
52
+ if ((0, _platformFeatureFlags.fg)('ufo_update_and_enforce_ttvc_v4_default_version') ? enabledVCRevisions : (0, _typeof2.default)(enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.byExperience) === 'object') {
53
+ var _enabledVCRevisions$a;
54
+ var byExperience = (0, _typeof2.default)(enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.byExperience) === 'object' ? enabledVCRevisions.byExperience : {};
49
55
  config = _objectSpread(_objectSpread({}, newConfig), {}, {
50
56
  vc: _objectSpread(_objectSpread({}, newConfig.vc), {}, {
51
57
  enabledVCRevisions: {
52
- // enforce axiom about `enabledVCRevisions.all` config
53
- all: Array.from(new Set([DEFAULT_TTVC_REVISION].concat((0, _toConsumableArray2.default)(enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.all), (0, _toConsumableArray2.default)(Object.values(enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.byExperience).flat())))),
54
- byExperience: _objectSpread({}, enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.byExperience)
58
+ // enforce axiom about `enabledVCRevisions.all` config:
59
+ // DEFAULT_TTVC_REVISION must always be present in `all`
60
+ all: Array.from(new Set([getDefaultTTVCRevision()].concat((0, _toConsumableArray2.default)((_enabledVCRevisions$a = enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.all) !== null && _enabledVCRevisions$a !== void 0 ? _enabledVCRevisions$a : []), (0, _toConsumableArray2.default)(Object.values(byExperience).flat())))),
61
+ byExperience: byExperience
55
62
  }
56
63
  })
57
64
  });
@@ -102,7 +109,7 @@ function getEnabledVCRevisions() {
102
109
  if (isValidConfigArray(enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.all)) {
103
110
  return enabledVCRevisions.all;
104
111
  }
105
- return [DEFAULT_TTVC_REVISION];
112
+ return [getDefaultTTVCRevision()];
106
113
  }
107
114
  return [];
108
115
  } catch (_unused) {
@@ -36,8 +36,8 @@ function createInteractionExtraLogPayload(_x, _x2, _x3, _x4) {
36
36
  }
37
37
  function _createInteractionExtraLogPayload() {
38
38
  _createInteractionExtraLogPayload = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(interactionId, interaction, lastInteractionFinish, lastInteractionFinishVCResult) {
39
- var _getTTAI, _lastInteractionFinis, _getTTAI2, _window$location;
40
- var config, end, start, ufoName, rate, type, abortReason, routeName, previousInteractionName, isPreviousInteractionAborted, abortedByInteractionName, knownSegments, minorInteractions, sanitisedUfoName, configRate, pageVisibilityAtTTAI, isPageLoad, calculatePageVisibilityFromTheStartOfPageLoad, moreAccuratePageVisibilityAtTTAI, extraTTAI, newUFOName, finalVCMetrics, vcRevisionPayload, effectiveVCRevisionPayload, normalTTAI, lastInteractionFinishStart, lastInteractionFinishEnd, lastInteractionFinishVC90, lastInteractionFinishVCClean, lastInteractionFinishVCRev, lastInteractionFinishRevision, isThirdParty, filteredData, getDetailedInteractionMetrics, segments3p, segmentTree, payload;
39
+ var _getTTAI, _getMostRecentVCRevis, _lastInteractionFinis, _getTTAI2, _window$location;
40
+ var config, end, start, ufoName, rate, type, abortReason, routeName, previousInteractionName, isPreviousInteractionAborted, abortedByInteractionName, knownSegments, minorInteractions, sanitisedUfoName, configRate, pageVisibilityAtTTAI, isPageLoad, calculatePageVisibilityFromTheStartOfPageLoad, moreAccuratePageVisibilityAtTTAI, extraTTAI, newUFOName, finalVCMetrics, vcRevisionPayload, effectiveRevision, effectiveVCRevisionPayload, normalTTAI, lastInteractionFinishStart, lastInteractionFinishEnd, lastInteractionFinishVC90, lastInteractionFinishVCClean, lastInteractionFinishVCRev, lastInteractionFinishRevision, isThirdParty, filteredData, getDetailedInteractionMetrics, segments3p, segmentTree, payload;
41
41
  return _regenerator.default.wrap(function _callee$(_context) {
42
42
  while (1) switch (_context.prev = _context.next) {
43
43
  case 0:
@@ -75,56 +75,57 @@ function _createInteractionExtraLogPayload() {
75
75
  finalVCMetrics = _context.sent;
76
76
  // Check if VC is clean and has valid metric
77
77
  vcRevisionPayload = finalVCMetrics === null || finalVCMetrics === void 0 ? void 0 : finalVCMetrics['ufo:vc:rev'];
78
+ effectiveRevision = (0, _platformFeatureFlags.fg)('ufo_update_and_enforce_ttvc_v4_default_version') ? (_getMostRecentVCRevis = (0, _config.getMostRecentVCRevision)(ufoName)) !== null && _getMostRecentVCRevis !== void 0 ? _getMostRecentVCRevis : _config.DEFAULT_TTVC_REVISION : (0, _config.getDefaultTTVCRevision)();
78
79
  effectiveVCRevisionPayload = vcRevisionPayload === null || vcRevisionPayload === void 0 ? void 0 : vcRevisionPayload.find(function (_ref) {
79
80
  var revision = _ref.revision;
80
- return revision === _config.DEFAULT_TTVC_REVISION;
81
+ return revision === effectiveRevision;
81
82
  });
82
83
  if (!(!(effectiveVCRevisionPayload !== null && effectiveVCRevisionPayload !== void 0 && effectiveVCRevisionPayload.clean) || (effectiveVCRevisionPayload === null || effectiveVCRevisionPayload === void 0 ? void 0 : effectiveVCRevisionPayload['metric:vc90']) === undefined || typeof (effectiveVCRevisionPayload === null || effectiveVCRevisionPayload === void 0 ? void 0 : effectiveVCRevisionPayload['metric:vc90']) !== 'number' || extraTTAI === undefined || typeof extraTTAI !== 'number' || interaction.errors.length > 0)) {
83
- _context.next = 23;
84
+ _context.next = 24;
84
85
  break;
85
86
  }
86
87
  return _context.abrupt("return", null);
87
- case 23:
88
+ case 24:
88
89
  if (!(!lastInteractionFinish || lastInteractionFinish !== null && lastInteractionFinish !== void 0 && lastInteractionFinish.abortReason || lastInteractionFinish !== null && lastInteractionFinish !== void 0 && (_lastInteractionFinis = lastInteractionFinish.errors) !== null && _lastInteractionFinis !== void 0 && _lastInteractionFinis.length)) {
89
- _context.next = 25;
90
+ _context.next = 26;
90
91
  break;
91
92
  }
92
93
  return _context.abrupt("return", null);
93
- case 25:
94
+ case 26:
94
95
  normalTTAI = (_getTTAI2 = (0, _getTtai.default)(lastInteractionFinish)) !== null && _getTTAI2 !== void 0 ? _getTTAI2 : undefined;
95
96
  lastInteractionFinishStart = typeof lastInteractionFinish.start === 'number' ? Math.round(lastInteractionFinish.start) : undefined;
96
97
  lastInteractionFinishEnd = typeof lastInteractionFinish.end === 'number' ? Math.round(lastInteractionFinish.end) : undefined;
97
98
  lastInteractionFinishVC90 = null;
98
99
  lastInteractionFinishVCClean = false;
99
100
  if (!lastInteractionFinishVCResult) {
100
- _context.next = 41;
101
+ _context.next = 42;
101
102
  break;
102
103
  }
103
104
  lastInteractionFinishVCRev = lastInteractionFinishVCResult['ufo:vc:rev'];
104
105
  lastInteractionFinishRevision = lastInteractionFinishVCRev === null || lastInteractionFinishVCRev === void 0 ? void 0 : lastInteractionFinishVCRev.find(function (_ref2) {
105
106
  var revision = _ref2.revision;
106
- return revision === _config.DEFAULT_TTVC_REVISION;
107
+ return revision === effectiveRevision;
107
108
  });
108
109
  if (!(lastInteractionFinishRevision !== null && lastInteractionFinishRevision !== void 0 && lastInteractionFinishRevision.clean)) {
109
- _context.next = 38;
110
+ _context.next = 39;
110
111
  break;
111
112
  }
112
113
  lastInteractionFinishVCClean = true;
113
114
  lastInteractionFinishVC90 = lastInteractionFinishRevision['metric:vc90'];
114
- _context.next = 39;
115
+ _context.next = 40;
115
116
  break;
116
- case 38:
117
- return _context.abrupt("return", null);
118
117
  case 39:
119
- _context.next = 42;
118
+ return _context.abrupt("return", null);
119
+ case 40:
120
+ _context.next = 43;
120
121
  break;
121
- case 41:
122
+ case 42:
122
123
  if (normalTTAI !== undefined && typeof normalTTAI === 'number' && normalTTAI === extraTTAI) {
123
124
  // Because TTAI is equal between with and without 3p, we can assume VC90 is also equal
124
125
  lastInteractionFinishVC90 = effectiveVCRevisionPayload === null || effectiveVCRevisionPayload === void 0 ? void 0 : effectiveVCRevisionPayload['metric:vc90'];
125
126
  lastInteractionFinishVCClean = effectiveVCRevisionPayload === null || effectiveVCRevisionPayload === void 0 ? void 0 : effectiveVCRevisionPayload.clean;
126
127
  }
127
- case 42:
128
+ case 43:
128
129
  // Helper function to check if labelStack contains third-party type
129
130
  isThirdParty = function isThirdParty(labelStack) {
130
131
  var _labelStack$some;
@@ -230,7 +231,7 @@ function _createInteractionExtraLogPayload() {
230
231
  reactProfilerTimings: (0, _optimizeReactProfilerTimings.optimizeReactProfilerTimings)(filteredData.reactProfilerTimings, start, (0, _getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),
231
232
  customData: filteredData.customData
232
233
  }, getDetailedInteractionMetrics()),
233
- 'vc:effective:revision': _config.DEFAULT_TTVC_REVISION,
234
+ 'vc:effective:revision': effectiveRevision,
234
235
  lastInteractionFinish: {
235
236
  start: lastInteractionFinishStart,
236
237
  end: lastInteractionFinishEnd,
@@ -243,7 +244,7 @@ function _createInteractionExtraLogPayload() {
243
244
  };
244
245
  payload.attributes.properties['event:sizeInKb'] = (0, _getPayloadSize.default)(payload.attributes.properties);
245
246
  return _context.abrupt("return", payload);
246
- case 51:
247
+ case 52:
247
248
  case "end":
248
249
  return _context.stop();
249
250
  }
@@ -9,9 +9,9 @@ try{return acc+item.cssRules.length;}catch(_unused3){return acc;}},0);var styleE
9
9
  getInitialPageLoadSSRMetrics=function getInitialPageLoadSSRMetrics(){var _config$ssr;if(!isPageLoad){return{};}var config=(0,_config.getConfig)();var SSRDoneTimeValue=(0,_getSsrDoneTimeValue.default)(config);var SSRDoneTime=SSRDoneTimeValue!==undefined?{SSRDoneTime:Math.round(SSRDoneTimeValue)}:{};var isBM3ConfigSSRDoneAsFmp=interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp;var isUFOConfigSSRDoneAsFmp=interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp||!!(config!==null&&config!==void 0&&(_config$ssr=config.ssr)!==null&&_config$ssr!==void 0&&_config$ssr.getSSRDoneTime);if(!experimental&&(isBM3ConfigSSRDoneAsFmp||isUFOConfigSSRDoneAsFmp)&&SSRDoneTimeValue!==undefined){try{performance.mark("FMP",{startTime:SSRDoneTimeValue,detail:{devtools:{dataType:'marker'}}});}catch(_unused6){}}return _objectSpread(_objectSpread({},SSRDoneTime),{},{isBM3ConfigSSRDoneAsFmp:isBM3ConfigSSRDoneAsFmp,isUFOConfigSSRDoneAsFmp:isUFOConfigSSRDoneAsFmp});};pageLoadInteractionMetrics=getInitialPageLoadSSRMetrics();// Detailed payload. Page visibility = visible
10
10
  getDetailedInteractionMetrics=function getDetailedInteractionMetrics(resourceTimings){if(experimental||window.__UFO_COMPACT_PAYLOAD__||!isDetailedPayload){return{};}var spans=[].concat((0,_toConsumableArray2.default)(interaction.spans),(0,_toConsumableArray2.default)(_interactionMetrics.interactionSpans));_interactionMetrics.interactionSpans.length=0;var shouldInclude3pHolds=(0,_config.shouldUseRawDataThirdPartyBehavior)(ufoName,type);var basePayload={errors:interaction.errors.map(function(_ref2){var labelStack=_ref2.labelStack,others=(0,_objectWithoutProperties2.default)(_ref2,_excluded);return _objectSpread(_objectSpread({},others),{},{labelStack:labelStack&&(0,_utils.optimizeLabelStack)(labelStack,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type))});}),holdActive:(0,_toConsumableArray2.default)(interaction.holdActive.values()),redirects:optimizeRedirects(interaction.redirects,start),holdInfo:(0,_optimizeHoldInfo.optimizeHoldInfo)(experimental?interaction.holdExpInfo:interaction.holdInfo,start,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),spans:(0,_optimizeSpans.optimizeSpans)(spans,start,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),requestInfo:(0,_optimizeRequestInfo.optimizeRequestInfo)(interaction.requestInfo,start,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),customTimings:(0,_optimizeCustomTimings.optimizeCustomTimings)(interaction.customTimings,start),bundleEvalTimings:objectToArray(getBundleEvalTimings(start)),resourceTimings:objectToArray(resourceTimings)};// Include third-party holds when feature flag is active
11
11
  if(shouldInclude3pHolds){var _interaction$hold3pIn;return _objectSpread(_objectSpread({},basePayload),{},{hold3pActive:interaction.hold3pActive?(0,_toConsumableArray2.default)(interaction.hold3pActive.values()):[],hold3pInfo:(0,_optimizeHoldInfo.optimizeHoldInfo)((_interaction$hold3pIn=interaction.hold3pInfo)!==null&&_interaction$hold3pIn!==void 0?_interaction$hold3pIn:[],start,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type))});}return basePayload;};// Page load & detailed payload
12
- getPageLoadDetailedInteractionMetrics=function getPageLoadDetailedInteractionMetrics(){var _config$ssr2,_config$ssr2$getSSRTi;if(!isPageLoad||!isDetailedPayload){return{};}var initialPageLoadExtraTimings=objectToArray(initialPageLoadExtraTiming.getTimings());var config=(0,_config.getConfig)();var defaultSSRTimings=objectToArray(ssr.getSSRTimings());var ssrTimingsFromConfig=config===null||config===void 0||(_config$ssr2=config.ssr)===null||_config$ssr2===void 0||(_config$ssr2$getSSRTi=_config$ssr2.getSSRTimings)===null||_config$ssr2$getSSRTi===void 0?void 0:_config$ssr2$getSSRTi.call(_config$ssr2);return{initialPageLoadExtraTimings:initialPageLoadExtraTimings,SSRTimings:ssrTimingsFromConfig?[].concat((0,_toConsumableArray2.default)(ssrTimingsFromConfig),(0,_toConsumableArray2.default)(defaultSSRTimings)):defaultSSRTimings};};if(experimental){expTTAI=(0,_getTtai.default)(interaction);}else{regularTTAI=(0,_getTtai.default)(interaction);}newUFOName=(0,_utils.sanitizeUfoName)(ufoName);resourceTimings=getResourceTimings(start,end);_context.t0=Promise;_context.t1=vcMetrics;if(_context.t1){_context.next=29;break;}_context.next=28;return(0,_getVcMetrics.default)(interaction);case 28:_context.t1=_context.sent;case 29:_context.t2=_context.t1;_context.t3=experimental?(0,_createExperimentalInteractionMetricsPayload.getExperimentalVCMetrics)(interaction):Promise.resolve(undefined);_context.t4=(0,_getPaintMetrics.getPaintMetricsToLegacyFormat)(type,end);_context.t5=(0,_getBatteryInfo.getBatteryInfoToLegacyFormat)();_context.t6=[_context.t2,_context.t3,_context.t4,_context.t5];_context.next=36;return _context.t0.all.call(_context.t0,_context.t6);case 36:_yield$Promise$all=_context.sent;_yield$Promise$all2=(0,_slicedToArray2.default)(_yield$Promise$all,4);finalVCMetrics=_yield$Promise$all2[0];experimentalMetrics=_yield$Promise$all2[1];paintMetrics=_yield$Promise$all2[2];batteryInfo=_yield$Promise$all2[3];if(!experimental){(0,_addPerformanceMeasures.addPerformanceMeasures)(interaction.start,(0,_toConsumableArray2.default)((finalVCMetrics===null||finalVCMetrics===void 0?void 0:finalVCMetrics['ufo:vc:rev'])||[]));}getReactHydrationStats=function getReactHydrationStats(){if(!hydration){return{};}return{hydration:hydration};};payload={actionSubject:'experience',action:'measured',eventType:'operational',source:'measured',tags:['observability'],attributes:{properties:_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({// basic
12
+ getPageLoadDetailedInteractionMetrics=function getPageLoadDetailedInteractionMetrics(){var _config$ssr2,_config$ssr2$getSSRTi;if(!isPageLoad||!isDetailedPayload){return{};}var initialPageLoadExtraTimings=objectToArray(initialPageLoadExtraTiming.getTimings());var config=(0,_config.getConfig)();var defaultSSRTimings=objectToArray(ssr.getSSRTimings());var ssrTimingsFromConfig=config===null||config===void 0||(_config$ssr2=config.ssr)===null||_config$ssr2===void 0||(_config$ssr2$getSSRTi=_config$ssr2.getSSRTimings)===null||_config$ssr2$getSSRTi===void 0?void 0:_config$ssr2$getSSRTi.call(_config$ssr2);return{initialPageLoadExtraTimings:initialPageLoadExtraTimings,SSRTimings:ssrTimingsFromConfig?[].concat((0,_toConsumableArray2.default)(ssrTimingsFromConfig),(0,_toConsumableArray2.default)(defaultSSRTimings)):defaultSSRTimings};};if(experimental){expTTAI=(0,_getTtai.default)(interaction);}else{regularTTAI=(0,_getTtai.default)(interaction);}newUFOName=(0,_utils.sanitizeUfoName)(ufoName);resourceTimings=getResourceTimings(start,end);_context.t0=Promise;_context.t1=vcMetrics;if(_context.t1){_context.next=29;break;}_context.next=28;return(0,_getVcMetrics.default)(interaction);case 28:_context.t1=_context.sent;case 29:_context.t2=_context.t1;_context.t3=experimental?(0,_createExperimentalInteractionMetricsPayload.getExperimentalVCMetrics)(interaction):Promise.resolve(undefined);_context.t4=(0,_getPaintMetrics.getPaintMetricsToLegacyFormat)(type,end);_context.t5=(0,_getBatteryInfo.getBatteryInfoToLegacyFormat)();_context.t6=[_context.t2,_context.t3,_context.t4,_context.t5];_context.next=36;return _context.t0.all.call(_context.t0,_context.t6);case 36:_yield$Promise$all=_context.sent;_yield$Promise$all2=(0,_slicedToArray2.default)(_yield$Promise$all,4);finalVCMetrics=_yield$Promise$all2[0];experimentalMetrics=_yield$Promise$all2[1];paintMetrics=_yield$Promise$all2[2];batteryInfo=_yield$Promise$all2[3];if(!experimental){(0,_addPerformanceMeasures.addPerformanceMeasures)(interaction.start,(0,_toConsumableArray2.default)((finalVCMetrics===null||finalVCMetrics===void 0?void 0:finalVCMetrics['ufo:vc:rev'])||[]));}getReactHydrationStats=function getReactHydrationStats(){if(!hydration){return{};}return{hydration:hydration};};payload={actionSubject:'experience',action:'measured',eventType:'operational',source:'measured',tags:['observability'],attributes:{properties:_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({// basic
13
13
  'event:hostname':((_window$location=window.location)===null||_window$location===void 0?void 0:_window$location.hostname)||'unknown','event:product':config.product,'event:population':config.population,'event:schema':'1.0.0','event:sizeInKb':0,'event:source':{name:'react-ufo/web',version:(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)},'event:region':config.region||'unknown','experience:key':experimental?'custom.experimental-interaction-metrics':'custom.interaction-metrics','experience:name':newUFOName,// Include CPU usage monitoring data
14
- 'event:cpu:usage':(0,_machineUtilisation.createPressureStateReport)(interaction.start,interaction.end),'event:memory:usage':(0,_machineUtilisation.createMemoryStateReport)(interaction.start,interaction.end)},criticalPayloadCount!==undefined?{'ufo:multipayload':true,'ufo:criticalPayloadCount':criticalPayloadCount}:{}),{},{'ufo:pageVisibilityHiddenTimestamp':(0,_hiddenTiming.getEarliestHiddenTiming)(interaction.start,interaction.end),'ufo:wasPageHiddenBeforeInit':(0,_hiddenTiming.getHasHiddenTimingBeforeSetup)(),'ufo:isOpenedInBackground':(0,_hiddenTiming.isOpenedInBackground)(interaction.type),'ufo:isTabThrottled':(0,_hiddenTiming.isTabThrottled)(start,end)},(0,_platformFeatureFlags.fg)('platform_ufo_page_visibility_timeline')?{'ufo:pageVisibilityTimeline':(0,_hiddenTiming.getPageVisibilityTimeline)(start,end)}:{}),(0,_platformFeatureFlags.fg)('ufo_detect_aborting_interaction_during_ssr')?{'ufo:hasAbortingInteractionDuringSSR':(0,_vcObserverNew.getHasAbortingEventDuringSSR)()}:{}),(0,_getBrowserMetadata.getBrowserMetadataToLegacyFormat)()),batteryInfo),getSSRProperties(type)),getAssetsMetrics(interaction,pageLoadInteractionMetrics===null||pageLoadInteractionMetrics===void 0?void 0:pageLoadInteractionMetrics.SSRDoneTime)),getPPSMetrics(interaction)),paintMetrics),(0,_getNavigationMetrics.getNavigationMetricsToLegacyFormat)(type)),finalVCMetrics),experimentalMetrics),(_config$additionalPay=config.additionalPayloadData)===null||_config$additionalPay===void 0?void 0:_config$additionalPay.call(config,interaction)),getTracingContextData(interaction)),getStylesheetMetrics()),getErrorCounts(interaction)),getReactHydrationStats()),{},{interactionMetrics:_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({namePrefix:config.namePrefix||'',segmentPrefix:config.segmentPrefix||'',interactionId:interactionId,pageVisibilityAtTTI:pageVisibilityAtTTI,pageVisibilityAtTTAI:pageVisibilityAtTTAI,experimental__pageVisibilityAtTTI:moreAccuratePageVisibilityAtTTI,experimental__pageVisibilityAtTTAI:moreAccuratePageVisibilityAtTTAI,// raw interaction metrics
14
+ 'event:cpu:usage':(0,_machineUtilisation.createPressureStateReport)(interaction.start,interaction.end),'event:memory:usage':(0,_machineUtilisation.createMemoryStateReport)(interaction.start,interaction.end)},criticalPayloadCount!==undefined?{'ufo:multipayload':true,'ufo:criticalPayloadCount':criticalPayloadCount}:{}),{},{'ufo:pageVisibilityHiddenTimestamp':(0,_hiddenTiming.getEarliestHiddenTiming)(interaction.start,interaction.end),'ufo:wasPageHiddenBeforeInit':(0,_hiddenTiming.getHasHiddenTimingBeforeSetup)(),'ufo:isOpenedInBackground':(0,_hiddenTiming.isOpenedInBackground)(interaction.type),'ufo:isTabThrottled':(0,_hiddenTiming.isTabThrottled)(start,end),'ufo:pageVisibilityTimeline':(0,_hiddenTiming.getPageVisibilityTimeline)(start,end)},(0,_platformFeatureFlags.fg)('ufo_detect_aborting_interaction_during_ssr')?{'ufo:hasAbortingInteractionDuringSSR':(0,_vcObserverNew.getHasAbortingEventDuringSSR)()}:{}),(0,_getBrowserMetadata.getBrowserMetadataToLegacyFormat)()),batteryInfo),getSSRProperties(type)),getAssetsMetrics(interaction,pageLoadInteractionMetrics===null||pageLoadInteractionMetrics===void 0?void 0:pageLoadInteractionMetrics.SSRDoneTime)),getPPSMetrics(interaction)),paintMetrics),(0,_getNavigationMetrics.getNavigationMetricsToLegacyFormat)(type)),finalVCMetrics),experimentalMetrics),(_config$additionalPay=config.additionalPayloadData)===null||_config$additionalPay===void 0?void 0:_config$additionalPay.call(config,interaction)),getTracingContextData(interaction)),getStylesheetMetrics()),getErrorCounts(interaction)),getReactHydrationStats()),{},{interactionMetrics:_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({namePrefix:config.namePrefix||'',segmentPrefix:config.segmentPrefix||'',interactionId:interactionId,pageVisibilityAtTTI:pageVisibilityAtTTI,pageVisibilityAtTTAI:pageVisibilityAtTTAI,experimental__pageVisibilityAtTTI:moreAccuratePageVisibilityAtTTI,experimental__pageVisibilityAtTTAI:moreAccuratePageVisibilityAtTTAI,// raw interaction metrics
15
15
  rate:rate,routeName:routeName,type:type,abortReason:abortReason,featureFlags:featureFlags,previousInteractionName:previousInteractionName,isPreviousInteractionAborted:isPreviousInteractionAborted,abortedByInteractionName:abortedByInteractionName,// performance
16
16
  apdex:(0,_optimizeApdex.optimizeApdex)(interaction.apdex,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),end:Math.round(end)},interaction.end3p?{end3p:Math.round(interaction.end3p)}:{}),{},{start:Math.round(start),segments:(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)==='2.0.0'?segmentTree:(0,_utils.getOldSegmentsLabelStack)(segments,interaction.type),marks:(0,_optimizeMarks.optimizeMarks)(interaction.marks,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),customData:optimizeCustomData(interaction),reactProfilerTimings:(0,_optimizeReactProfilerTimings.optimizeReactProfilerTimings)(interaction.reactProfilerTimings,start,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),minorInteractions:interaction.minorInteractions},responsiveness?{responsiveness:responsiveness}:{}),labelStack),pageLoadInteractionMetrics),getDetailedInteractionMetrics(resourceTimings)),getPageLoadDetailedInteractionMetrics()),getBm3TrackerTimings(interaction)),{},{'metric:ttai':experimental?regularTTAI||expTTAI:undefined,'metric:experimental:ttai':expTTAI},unknownElementName?{unknownElementName:unknownElementName}:{}),unknownElementHierarchy?{unknownElementHierarchy:unknownElementHierarchy}:{}),'ufo:payloadTime':(0,_roundNumber.roundEpsilon)(performance.now()-interactionPayloadStart)})}};if(experimental){regularTTAI=undefined;expTTAI=undefined;}if((0,_platformFeatureFlags.fg)('platform_ufo_enable_vc_raw_data')){size=(0,_getPayloadSize.default)(payload.attributes.properties);vcRev=payload.attributes.properties['ufo:vc:rev'];rawData=vcRev.find(function(item){return item.revision==='raw-handler';});if(rawData){rawDataSize=(0,_getPayloadSize.default)(rawData);payload.attributes.properties['ufo:vc:raw:size']=rawDataSize;if(size>MAX_PAYLOAD_SIZE&&Array.isArray(vcRev)&&vcRev.length>0){payload.attributes.properties['ufo:vc:rev']=vcRev.filter(function(item){return item.revision!=='raw-handler';});payload.attributes.properties['ufo:vc:raw:removed']=true;}}payload.attributes.properties['event:sizeInKb']=(0,_getPayloadSize.default)(payload.attributes.properties);}else{payload.attributes.properties['event:sizeInKb']=(0,_getPayloadSize.default)(payload.attributes.properties);}// in order of importance, first one being least important
17
17
  // we can add more fields as necessary
@@ -5,7 +5,7 @@ var _typeof = require("@babel/runtime/helpers/typeof");
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = UFOIgnoreHolds;
8
+ exports.default = void 0;
9
9
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
10
  var _react = _interopRequireWildcard(require("react"));
11
11
  var _interactionContext = _interopRequireDefault(require("@atlaskit/interaction-context"));
@@ -31,7 +31,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
31
31
  * Has an `ignore` prop, to allow you to use it conditionally
32
32
  * Has a `reason` prop, to specify why the hold is being ignored
33
33
  */
34
- function UFOIgnoreHolds(_ref) {
34
+ var UFOIgnoreHolds = function UFOIgnoreHolds(_ref) {
35
35
  var children = _ref.children,
36
36
  _ref$ignore = _ref.ignore,
37
37
  ignore = _ref$ignore === void 0 ? true : _ref$ignore;
@@ -57,4 +57,6 @@ function UFOIgnoreHolds(_ref) {
57
57
  return /*#__PURE__*/_react.default.createElement(_interactionContext.default.Provider, {
58
58
  value: ignoredInteractionContext
59
59
  }, kids);
60
- }
60
+ };
61
+ UFOIgnoreHolds.displayName = 'UFOIgnoreHolds';
62
+ var _default = exports.default = UFOIgnoreHolds;
@@ -5,7 +5,7 @@ var _typeof = require("@babel/runtime/helpers/typeof");
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = UFOSegment;
8
+ exports.default = void 0;
9
9
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
10
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
11
  var _react = _interopRequireWildcard(require("react"));
@@ -29,7 +29,7 @@ var tryCompleteHandle;
29
29
  var hasMarkedFirstSegmentLoad = false;
30
30
 
31
31
  /** A portion of the page we apply measurement to */
32
- function UFOSegment(_ref) {
32
+ var UFOSegment = function UFOSegment(_ref) {
33
33
  var segmentName = _ref.name,
34
34
  children = _ref.children,
35
35
  _ref$mode = _ref.mode,
@@ -301,4 +301,6 @@ function UFOSegment(_ref) {
301
301
  }, ufoSegment);
302
302
  }
303
303
  return ufoSegment;
304
- }
304
+ };
305
+ UFOSegment.displayName = 'UFOSegment';
306
+ var _default = exports.default = UFOSegment;
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.UFOThirdPartySegment = UFOThirdPartySegment;
7
+ exports.UFOThirdPartySegment = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
10
10
  var _react = _interopRequireDefault(require("react"));
@@ -12,7 +12,7 @@ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
12
12
  var _ignoreHolds = _interopRequireDefault(require("../ignore-holds"));
13
13
  var _segment = _interopRequireDefault(require("./segment"));
14
14
  var _excluded = ["children"];
15
- function UFOThirdPartySegment(props) {
15
+ var UFOThirdPartySegment = exports.UFOThirdPartySegment = function UFOThirdPartySegment(props) {
16
16
  var children = props.children,
17
17
  otherProps = (0, _objectWithoutProperties2.default)(props, _excluded);
18
18
  return (0, _platformFeatureFlags.fg)('platform_ufo_enable_ttai_with_3p') ? /*#__PURE__*/_react.default.createElement(_segment.default, (0, _extends2.default)({
@@ -23,4 +23,5 @@ function UFOThirdPartySegment(props) {
23
23
  ignore: (0, _platformFeatureFlags.fg)('platform_ufo_exclude_3p_elements_from_ttai'),
24
24
  reason: "third-party-element"
25
25
  }, children));
26
- }
26
+ };
27
+ UFOThirdPartySegment.displayName = 'UFOThirdPartySegment';
@@ -19,7 +19,7 @@ var _rllPlaceholders = require("../../vc-observer/observers/rll-placeholders");
19
19
  var _intersectionObserver = require("./intersection-observer");
20
20
  var _mutationObserver = _interopRequireDefault(require("./mutation-observer"));
21
21
  var _performanceObserver = _interopRequireDefault(require("./performance-observer"));
22
- var _checkWithinComponent3 = _interopRequireWildcard(require("./utils/check-within-component"));
22
+ var _checkWithinComponent = _interopRequireWildcard(require("./utils/check-within-component"));
23
23
  var _isContainedWithinSmartAnswers = require("./utils/is-contained-within-smart-answers");
24
24
  var _isElementVisible = require("./utils/is-element-visible");
25
25
  var _isInVcIgnoreIfNoLayoutShiftMarker = _interopRequireDefault(require("./utils/is-in-vc-ignore-if-no-layout-shift-marker"));
@@ -277,7 +277,7 @@ var ViewportObserver = exports.default = /*#__PURE__*/function () {
277
277
  _context2.prev = 4;
278
278
  _loop = /*#__PURE__*/_regenerator.default.mark(function _loop() {
279
279
  var _this$getSSRState, _this$intersectionObs;
280
- var addedNodeRef, addedNode, hasSameDeletedNode, _checkWithinComponent, isWithinThirdPartySegment, isWithinSmartAnswersSegment, isTargetReactRoot;
280
+ var addedNodeRef, addedNode, hasSameDeletedNode, _ref7, isWithinThirdPartySegment, isWithinSmartAnswersSegment, isTargetReactRoot;
281
281
  return _regenerator.default.wrap(function _loop$(_context) {
282
282
  while (1) switch (_context.prev = _context.next) {
283
283
  case 0:
@@ -296,7 +296,9 @@ var ViewportObserver = exports.default = /*#__PURE__*/function () {
296
296
  }
297
297
  return n.isEqualNode(addedNode);
298
298
  });
299
- _checkWithinComponent = (0, _checkWithinComponent3.default)(addedNode, 'UFOThirdPartySegment', _this.mapIs3pResult), isWithinThirdPartySegment = _checkWithinComponent.isWithin;
299
+ _ref7 = _this.enableThirdPartyTracking ? (0, _checkWithinComponent.default)(addedNode, 'UFOThirdPartySegment', _this.mapIs3pResult) : {
300
+ isWithin: false
301
+ }, isWithinThirdPartySegment = _ref7.isWithin;
300
302
  isWithinSmartAnswersSegment = Boolean(_this.shouldCheckSmartAnswersMutations() && (0, _isContainedWithinSmartAnswers.isContainedWithinSmartAnswers)(addedNode));
301
303
  isTargetReactRoot = targetNode === ((_this$getSSRState = _this.getSSRState) === null || _this$getSSRState === void 0 || (_this$getSSRState = _this$getSSRState.call(_this)) === null || _this$getSSRState === void 0 ? void 0 : _this$getSSRState.reactRootElement);
302
304
  (_this$intersectionObs = _this.intersectionObserver) === null || _this$intersectionObs === void 0 || _this$intersectionObs.watchAndTag(addedNode, (_this.trackLayoutShiftOffenders ? createElementMutationsWatcherNew : createElementMutationsWatcher)(removedNodeRects, isWithinThirdPartySegment, isWithinSmartAnswersSegment, !!hasSameDeletedNode, timestamp, isTargetReactRoot, _this.getSSRState, _this.getSSRPlaceholderHandler));
@@ -343,16 +345,16 @@ var ViewportObserver = exports.default = /*#__PURE__*/function () {
343
345
  return _ref6.apply(this, arguments);
344
346
  };
345
347
  }());
346
- (0, _defineProperty2.default)(this, "handleAttributeMutation", function (_ref7) {
348
+ (0, _defineProperty2.default)(this, "handleAttributeMutation", function (_ref8) {
347
349
  var _this$intersectionObs2;
348
- var target = _ref7.target,
349
- attributeName = _ref7.attributeName,
350
- oldValue = _ref7.oldValue,
351
- newValue = _ref7.newValue,
352
- timestamp = _ref7.timestamp;
353
- (_this$intersectionObs2 = _this.intersectionObserver) === null || _this$intersectionObs2 === void 0 || _this$intersectionObs2.watchAndTag(target, function (_ref8) {
354
- var target = _ref8.target,
355
- rect = _ref8.rect;
350
+ var target = _ref8.target,
351
+ attributeName = _ref8.attributeName,
352
+ oldValue = _ref8.oldValue,
353
+ newValue = _ref8.newValue,
354
+ timestamp = _ref8.timestamp;
355
+ (_this$intersectionObs2 = _this.intersectionObserver) === null || _this$intersectionObs2 === void 0 || _this$intersectionObs2.watchAndTag(target, function (_ref9) {
356
+ var target = _ref9.target,
357
+ rect = _ref9.rect;
356
358
  if ((0, _vcUtils.isContainedWithinMediaWrapper)(target)) {
357
359
  return {
358
360
  type: 'mutation:media',
@@ -365,8 +367,10 @@ var ViewportObserver = exports.default = /*#__PURE__*/function () {
365
367
  };
366
368
  }
367
369
  if ((0, _platformFeatureFlags.fg)('platform_ufo_exclude_3p_attribute_changes')) {
368
- var _checkWithinComponent2 = (0, _checkWithinComponent3.default)(target, 'UFOThirdPartySegment', _this.mapIs3pResult),
369
- isWithinThirdPartySegment = _checkWithinComponent2.isWithin;
370
+ var _ref0 = _this.enableThirdPartyTracking ? (0, _checkWithinComponent.default)(target, 'UFOThirdPartySegment', _this.mapIs3pResult) : {
371
+ isWithin: false
372
+ },
373
+ isWithinThirdPartySegment = _ref0.isWithin;
370
374
  if (isWithinThirdPartySegment) {
371
375
  return {
372
376
  type: 'mutation:third-party-attribute',
@@ -471,9 +475,9 @@ var ViewportObserver = exports.default = /*#__PURE__*/function () {
471
475
  };
472
476
  });
473
477
  });
474
- (0, _defineProperty2.default)(this, "handleLayoutShift", function (_ref9) {
475
- var time = _ref9.time,
476
- changedRects = _ref9.changedRects;
478
+ (0, _defineProperty2.default)(this, "handleLayoutShift", function (_ref1) {
479
+ var time = _ref1.time,
480
+ changedRects = _ref1.changedRects;
477
481
  var _iterator2 = _createForOfIteratorHelper(changedRects),
478
482
  _step2;
479
483
  try {
@@ -515,6 +519,7 @@ var ViewportObserver = exports.default = /*#__PURE__*/function () {
515
519
  this.getSSRState = getSSRState;
516
520
  this.getSSRPlaceholderHandler = getSSRPlaceholderHandler;
517
521
  this.searchPageConfig = searchPageConfig;
522
+ this.enableThirdPartyTracking = (0, _platformFeatureFlags.fg)('platform_ufo_reenable_3p_tracking');
518
523
  }
519
524
  return (0, _createClass2.default)(ViewportObserver, [{
520
525
  key: "initializeObservers",
@@ -567,7 +572,7 @@ var ViewportObserver = exports.default = /*#__PURE__*/function () {
567
572
  (_this$performanceObse2 = this.performanceObserver) === null || _this$performanceObse2 === void 0 || _this$performanceObse2.disconnect();
568
573
  this.isStarted = false;
569
574
  // Clean up caches when stopping
570
- (0, _checkWithinComponent3.cleanupCaches)(this.mapIs3pResult);
575
+ (0, _checkWithinComponent.cleanupCaches)(this.mapIs3pResult);
571
576
  }
572
577
  }]);
573
578
  }();
@@ -1,6 +1,9 @@
1
1
  import { fg } from '@atlaskit/platform-feature-flags';
2
2
  let config;
3
- export const DEFAULT_TTVC_REVISION = 'fy25.03';
3
+ export const DEFAULT_TTVC_REVISION = 'fy26.04';
4
+ export function getDefaultTTVCRevision() {
5
+ return fg('ufo_update_and_enforce_ttvc_v4_default_version') ? DEFAULT_TTVC_REVISION : 'fy25.03';
6
+ }
4
7
  export const UNKNOWN_INTERACTION_RATE = 1000;
5
8
 
6
9
  // Defensively typed, since this is directly user-editable
@@ -12,17 +15,18 @@ export function setUFOConfig(newConfig) {
12
15
  const {
13
16
  enabledVCRevisions
14
17
  } = (_newConfig$vc = newConfig === null || newConfig === void 0 ? void 0 : newConfig.vc) !== null && _newConfig$vc !== void 0 ? _newConfig$vc : {};
15
- if (typeof (enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.byExperience) === 'object') {
18
+ if (fg('ufo_update_and_enforce_ttvc_v4_default_version') ? enabledVCRevisions : typeof (enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.byExperience) === 'object') {
19
+ var _enabledVCRevisions$a;
20
+ const byExperience = typeof (enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.byExperience) === 'object' ? enabledVCRevisions.byExperience : {};
16
21
  config = {
17
22
  ...newConfig,
18
23
  vc: {
19
24
  ...newConfig.vc,
20
25
  enabledVCRevisions: {
21
- // enforce axiom about `enabledVCRevisions.all` config
22
- all: Array.from(new Set([DEFAULT_TTVC_REVISION, ...(enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.all), ...Object.values(enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.byExperience).flat()])),
23
- byExperience: {
24
- ...(enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.byExperience)
25
- }
26
+ // enforce axiom about `enabledVCRevisions.all` config:
27
+ // DEFAULT_TTVC_REVISION must always be present in `all`
28
+ all: Array.from(new Set([getDefaultTTVCRevision(), ...((_enabledVCRevisions$a = enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.all) !== null && _enabledVCRevisions$a !== void 0 ? _enabledVCRevisions$a : []), ...Object.values(byExperience).flat()])),
29
+ byExperience
26
30
  }
27
31
  }
28
32
  };
@@ -73,7 +77,7 @@ export function getEnabledVCRevisions(experienceKey = '') {
73
77
  if (isValidConfigArray(enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.all)) {
74
78
  return enabledVCRevisions.all;
75
79
  }
76
- return [DEFAULT_TTVC_REVISION];
80
+ return [getDefaultTTVCRevision()];
77
81
  }
78
82
  return [];
79
83
  } catch {
@@ -1,6 +1,6 @@
1
1
  import { fg } from '@atlaskit/platform-feature-flags';
2
2
  import coinflip from '../coinflip';
3
- import { DEFAULT_TTVC_REVISION, getConfig, getExtraInteractionRate } from '../config';
3
+ import { DEFAULT_TTVC_REVISION, getConfig, getDefaultTTVCRevision, getExtraInteractionRate, getMostRecentVCRevision } from '../config';
4
4
  import { buildSegmentTree, getOldSegmentsLabelStack, optimizeLabelStack, sanitizeUfoName } from '../create-payload/common/utils';
5
5
  import { getMoreAccuratePageVisibilityUpToTTAI } from '../create-payload/utils/get-more-accurate-page-visibility-up-to-ttai';
6
6
  import getPageVisibilityUpToTTAI from '../create-payload/utils/get-page-visibility-up-to-ttai';
@@ -17,7 +17,7 @@ import { optimizeRequestInfo } from '../create-payload/utils/optimize-request-in
17
17
  import { optimizeSpans } from '../create-payload/utils/optimize-spans';
18
18
  import { interactionSpans as atlaskitInteractionSpans } from '../interaction-metrics';
19
19
  async function createInteractionExtraLogPayload(interactionId, interaction, lastInteractionFinish, lastInteractionFinishVCResult) {
20
- var _getTTAI, _lastInteractionFinis, _getTTAI2, _window$location;
20
+ var _getTTAI, _getMostRecentVCRevis, _lastInteractionFinis, _getTTAI2, _window$location;
21
21
  const config = getConfig();
22
22
  if (!config) {
23
23
  throw Error('UFO Configuration not provided');
@@ -56,9 +56,10 @@ async function createInteractionExtraLogPayload(interactionId, interaction, last
56
56
 
57
57
  // Check if VC is clean and has valid metric
58
58
  const vcRevisionPayload = finalVCMetrics === null || finalVCMetrics === void 0 ? void 0 : finalVCMetrics['ufo:vc:rev'];
59
+ const effectiveRevision = fg('ufo_update_and_enforce_ttvc_v4_default_version') ? (_getMostRecentVCRevis = getMostRecentVCRevision(ufoName)) !== null && _getMostRecentVCRevis !== void 0 ? _getMostRecentVCRevis : DEFAULT_TTVC_REVISION : getDefaultTTVCRevision();
59
60
  const effectiveVCRevisionPayload = vcRevisionPayload === null || vcRevisionPayload === void 0 ? void 0 : vcRevisionPayload.find(({
60
61
  revision
61
- }) => revision === DEFAULT_TTVC_REVISION);
62
+ }) => revision === effectiveRevision);
62
63
  if (!(effectiveVCRevisionPayload !== null && effectiveVCRevisionPayload !== void 0 && effectiveVCRevisionPayload.clean) || (effectiveVCRevisionPayload === null || effectiveVCRevisionPayload === void 0 ? void 0 : effectiveVCRevisionPayload['metric:vc90']) === undefined || typeof (effectiveVCRevisionPayload === null || effectiveVCRevisionPayload === void 0 ? void 0 : effectiveVCRevisionPayload['metric:vc90']) !== 'number' || extraTTAI === undefined || typeof extraTTAI !== 'number' || interaction.errors.length > 0) {
63
64
  return null;
64
65
  }
@@ -76,7 +77,7 @@ async function createInteractionExtraLogPayload(interactionId, interaction, last
76
77
  const lastInteractionFinishVCRev = lastInteractionFinishVCResult['ufo:vc:rev'];
77
78
  const lastInteractionFinishRevision = lastInteractionFinishVCRev === null || lastInteractionFinishVCRev === void 0 ? void 0 : lastInteractionFinishVCRev.find(({
78
79
  revision
79
- }) => revision === DEFAULT_TTVC_REVISION);
80
+ }) => revision === effectiveRevision);
80
81
  if (lastInteractionFinishRevision !== null && lastInteractionFinishRevision !== void 0 && lastInteractionFinishRevision.clean) {
81
82
  lastInteractionFinishVCClean = true;
82
83
  lastInteractionFinishVC90 = lastInteractionFinishRevision['metric:vc90'];
@@ -176,7 +177,7 @@ async function createInteractionExtraLogPayload(interactionId, interaction, last
176
177
  customData: filteredData.customData,
177
178
  ...getDetailedInteractionMetrics()
178
179
  },
179
- 'vc:effective:revision': DEFAULT_TTVC_REVISION,
180
+ 'vc:effective:revision': effectiveRevision,
180
181
  lastInteractionFinish: {
181
182
  start: lastInteractionFinishStart,
182
183
  end: lastInteractionFinishEnd,
@@ -11,7 +11,7 @@ const getDetailedInteractionMetrics=resourceTimings=>{if(experimental||window.__
11
11
  if(shouldInclude3pHolds){var _interaction$hold3pIn;return{...basePayload,hold3pActive:interaction.hold3pActive?[...interaction.hold3pActive.values()]:[],hold3pInfo:optimizeHoldInfo((_interaction$hold3pIn=interaction.hold3pInfo)!==null&&_interaction$hold3pIn!==void 0?_interaction$hold3pIn:[],start,getReactUFOPayloadVersion(interaction.type))};}return basePayload;};// Page load & detailed payload
12
12
  const getPageLoadDetailedInteractionMetrics=()=>{var _config$ssr2,_config$ssr2$getSSRTi;if(!isPageLoad||!isDetailedPayload){return{};}const initialPageLoadExtraTimings=objectToArray(initialPageLoadExtraTiming.getTimings());const config=getConfig();const defaultSSRTimings=objectToArray(ssr.getSSRTimings());const ssrTimingsFromConfig=config===null||config===void 0?void 0:(_config$ssr2=config.ssr)===null||_config$ssr2===void 0?void 0:(_config$ssr2$getSSRTi=_config$ssr2.getSSRTimings)===null||_config$ssr2$getSSRTi===void 0?void 0:_config$ssr2$getSSRTi.call(_config$ssr2);return{initialPageLoadExtraTimings,SSRTimings:ssrTimingsFromConfig?[...ssrTimingsFromConfig,...defaultSSRTimings]:defaultSSRTimings};};if(experimental){expTTAI=getTTAI(interaction);}else{regularTTAI=getTTAI(interaction);}const newUFOName=sanitizeUfoName(ufoName);const resourceTimings=getResourceTimings(start,end);const[finalVCMetrics,experimentalMetrics,paintMetrics,batteryInfo]=await Promise.all([vcMetrics||(await getVCMetrics(interaction)),experimental?getExperimentalVCMetrics(interaction):Promise.resolve(undefined),getPaintMetricsToLegacyFormat(type,end),getBatteryInfoToLegacyFormat()]);if(!experimental){addPerformanceMeasures(interaction.start,[...((finalVCMetrics===null||finalVCMetrics===void 0?void 0:finalVCMetrics['ufo:vc:rev'])||[])]);}const getReactHydrationStats=()=>{if(!hydration){return{};}return{hydration};};const payload={actionSubject:'experience',action:'measured',eventType:'operational',source:'measured',tags:['observability'],attributes:{properties:{// basic
13
13
  'event:hostname':((_window$location=window.location)===null||_window$location===void 0?void 0:_window$location.hostname)||'unknown','event:product':config.product,'event:population':config.population,'event:schema':'1.0.0','event:sizeInKb':0,'event:source':{name:'react-ufo/web',version:getReactUFOPayloadVersion(interaction.type)},'event:region':config.region||'unknown','experience:key':experimental?'custom.experimental-interaction-metrics':'custom.interaction-metrics','experience:name':newUFOName,// Include CPU usage monitoring data
14
- 'event:cpu:usage':createPressureStateReport(interaction.start,interaction.end),'event:memory:usage':createMemoryStateReport(interaction.start,interaction.end),...(criticalPayloadCount!==undefined?{'ufo:multipayload':true,'ufo:criticalPayloadCount':criticalPayloadCount}:{}),'ufo:pageVisibilityHiddenTimestamp':getEarliestHiddenTiming(interaction.start,interaction.end),'ufo:wasPageHiddenBeforeInit':getHasHiddenTimingBeforeSetup(),'ufo:isOpenedInBackground':isOpenedInBackground(interaction.type),'ufo:isTabThrottled':isTabThrottled(start,end),...(fg('platform_ufo_page_visibility_timeline')?{'ufo:pageVisibilityTimeline':getPageVisibilityTimeline(start,end)}:{}),...(fg('ufo_detect_aborting_interaction_during_ssr')?{'ufo:hasAbortingInteractionDuringSSR':getHasAbortingEventDuringSSR()}:{}),// root
14
+ 'event:cpu:usage':createPressureStateReport(interaction.start,interaction.end),'event:memory:usage':createMemoryStateReport(interaction.start,interaction.end),...(criticalPayloadCount!==undefined?{'ufo:multipayload':true,'ufo:criticalPayloadCount':criticalPayloadCount}:{}),'ufo:pageVisibilityHiddenTimestamp':getEarliestHiddenTiming(interaction.start,interaction.end),'ufo:wasPageHiddenBeforeInit':getHasHiddenTimingBeforeSetup(),'ufo:isOpenedInBackground':isOpenedInBackground(interaction.type),'ufo:isTabThrottled':isTabThrottled(start,end),'ufo:pageVisibilityTimeline':getPageVisibilityTimeline(start,end),...(fg('ufo_detect_aborting_interaction_during_ssr')?{'ufo:hasAbortingInteractionDuringSSR':getHasAbortingEventDuringSSR()}:{}),// root
15
15
  ...getBrowserMetadataToLegacyFormat(),...batteryInfo,...getSSRProperties(type),...getAssetsMetrics(interaction,pageLoadInteractionMetrics===null||pageLoadInteractionMetrics===void 0?void 0:pageLoadInteractionMetrics.SSRDoneTime),...getPPSMetrics(interaction),...paintMetrics,...getNavigationMetricsToLegacyFormat(type),...finalVCMetrics,...experimentalMetrics,...((_config$additionalPay=config.additionalPayloadData)===null||_config$additionalPay===void 0?void 0:_config$additionalPay.call(config,interaction)),...getTracingContextData(interaction),...getStylesheetMetrics(),...getErrorCounts(interaction),...getReactHydrationStats(),interactionMetrics:{namePrefix:config.namePrefix||'',segmentPrefix:config.segmentPrefix||'',interactionId,pageVisibilityAtTTI,pageVisibilityAtTTAI,experimental__pageVisibilityAtTTI:moreAccuratePageVisibilityAtTTI,experimental__pageVisibilityAtTTAI:moreAccuratePageVisibilityAtTTAI,// raw interaction metrics
16
16
  rate,routeName,type,abortReason,featureFlags,previousInteractionName,isPreviousInteractionAborted,abortedByInteractionName,// performance
17
17
  apdex:optimizeApdex(interaction.apdex,getReactUFOPayloadVersion(interaction.type)),end:Math.round(end),...(interaction.end3p?{end3p:Math.round(interaction.end3p)}:{}),start:Math.round(start),segments:getReactUFOPayloadVersion(interaction.type)==='2.0.0'?segmentTree:getOldSegmentsLabelStack(segments,interaction.type),marks:optimizeMarks(interaction.marks,getReactUFOPayloadVersion(interaction.type)),customData:optimizeCustomData(interaction),reactProfilerTimings:optimizeReactProfilerTimings(interaction.reactProfilerTimings,start,getReactUFOPayloadVersion(interaction.type)),minorInteractions:interaction.minorInteractions,...(responsiveness?{responsiveness}:{}),...labelStack,...pageLoadInteractionMetrics,...getDetailedInteractionMetrics(resourceTimings),...getPageLoadDetailedInteractionMetrics(),...getBm3TrackerTimings(interaction),'metric:ttai':experimental?regularTTAI||expTTAI:undefined,'metric:experimental:ttai':expTTAI,...(unknownElementName?{unknownElementName}:{}),...(unknownElementHierarchy?{unknownElementHierarchy}:{})},'ufo:payloadTime':roundEpsilon(performance.now()-interactionPayloadStart)}}};if(experimental){regularTTAI=undefined;expTTAI=undefined;}if(fg('platform_ufo_enable_vc_raw_data')){const size=getPayloadSize(payload.attributes.properties);const vcRev=payload.attributes.properties['ufo:vc:rev'];const rawData=vcRev.find(item=>item.revision==='raw-handler');if(rawData){const rawDataSize=getPayloadSize(rawData);payload.attributes.properties['ufo:vc:raw:size']=rawDataSize;if(size>MAX_PAYLOAD_SIZE&&Array.isArray(vcRev)&&vcRev.length>0){payload.attributes.properties['ufo:vc:rev']=vcRev.filter(item=>item.revision!=='raw-handler');payload.attributes.properties['ufo:vc:raw:removed']=true;}}payload.attributes.properties['event:sizeInKb']=getPayloadSize(payload.attributes.properties);}else{payload.attributes.properties['event:sizeInKb']=getPayloadSize(payload.attributes.properties);}// in order of importance, first one being least important
@@ -19,10 +19,10 @@ import InteractionContext from '@atlaskit/interaction-context';
19
19
  * Has an `ignore` prop, to allow you to use it conditionally
20
20
  * Has a `reason` prop, to specify why the hold is being ignored
21
21
  */
22
- export default function UFOIgnoreHolds({
22
+ const UFOIgnoreHolds = ({
23
23
  children,
24
24
  ignore = true
25
- }) {
25
+ }) => {
26
26
  const parentContext = useContext(InteractionContext);
27
27
  const ignoredInteractionContext = useMemo(() => {
28
28
  if (!parentContext) {
@@ -46,4 +46,6 @@ export default function UFOIgnoreHolds({
46
46
  return /*#__PURE__*/React.createElement(InteractionContext.Provider, {
47
47
  value: ignoredInteractionContext
48
48
  }, kids);
49
- }
49
+ };
50
+ UFOIgnoreHolds.displayName = 'UFOIgnoreHolds';
51
+ export default UFOIgnoreHolds;
@@ -17,12 +17,12 @@ let tryCompleteHandle;
17
17
  let hasMarkedFirstSegmentLoad = false;
18
18
 
19
19
  /** A portion of the page we apply measurement to */
20
- export default function UFOSegment({
20
+ const UFOSegment = ({
21
21
  name: segmentName,
22
22
  children,
23
23
  mode = 'single',
24
24
  type = 'first-party'
25
- }) {
25
+ }) => {
26
26
  // If UFO is disabled, render children without any tracking overhead
27
27
  // This is gated behind platform_ufo_enable_killswitch_config feature flag
28
28
  // Note: isUFOEnabled() returns a stable value based on config, so it's safe to call before hooks
@@ -279,4 +279,6 @@ export default function UFOSegment({
279
279
  }, ufoSegment);
280
280
  }
281
281
  return ufoSegment;
282
- }
282
+ };
283
+ UFOSegment.displayName = 'UFOSegment';
284
+ export default UFOSegment;
@@ -3,7 +3,7 @@ import React from 'react';
3
3
  import { fg } from '@atlaskit/platform-feature-flags';
4
4
  import UFOIgnoreHolds from '../ignore-holds';
5
5
  import UFOSegment from './segment';
6
- export function UFOThirdPartySegment(props) {
6
+ export const UFOThirdPartySegment = props => {
7
7
  const {
8
8
  children,
9
9
  ...otherProps
@@ -16,4 +16,5 @@ export function UFOThirdPartySegment(props) {
16
16
  ignore: fg('platform_ufo_exclude_3p_elements_from_ttai'),
17
17
  reason: "third-party-element"
18
18
  }, children));
19
- }
19
+ };
20
+ UFOThirdPartySegment.displayName = 'UFOThirdPartySegment';
@@ -264,7 +264,9 @@ export default class ViewportObserver {
264
264
  });
265
265
  const {
266
266
  isWithin: isWithinThirdPartySegment
267
- } = checkWithinComponent(addedNode, 'UFOThirdPartySegment', this.mapIs3pResult);
267
+ } = this.enableThirdPartyTracking ? checkWithinComponent(addedNode, 'UFOThirdPartySegment', this.mapIs3pResult) : {
268
+ isWithin: false
269
+ };
268
270
  const isWithinSmartAnswersSegment = Boolean(this.shouldCheckSmartAnswersMutations() && isContainedWithinSmartAnswers(addedNode));
269
271
  const isTargetReactRoot = targetNode === ((_this$getSSRState = this.getSSRState) === null || _this$getSSRState === void 0 ? void 0 : (_this$getSSRState$cal = _this$getSSRState.call(this)) === null || _this$getSSRState$cal === void 0 ? void 0 : _this$getSSRState$cal.reactRootElement);
270
272
  (_this$intersectionObs = this.intersectionObserver) === null || _this$intersectionObs === void 0 ? void 0 : _this$intersectionObs.watchAndTag(addedNode, (this.trackLayoutShiftOffenders ? createElementMutationsWatcherNew : createElementMutationsWatcher)(removedNodeRects, isWithinThirdPartySegment, isWithinSmartAnswersSegment, !!hasSameDeletedNode, timestamp, isTargetReactRoot, this.getSSRState, this.getSSRPlaceholderHandler));
@@ -296,7 +298,9 @@ export default class ViewportObserver {
296
298
  if (fg('platform_ufo_exclude_3p_attribute_changes')) {
297
299
  const {
298
300
  isWithin: isWithinThirdPartySegment
299
- } = checkWithinComponent(target, 'UFOThirdPartySegment', this.mapIs3pResult);
301
+ } = this.enableThirdPartyTracking ? checkWithinComponent(target, 'UFOThirdPartySegment', this.mapIs3pResult) : {
302
+ isWithin: false
303
+ };
300
304
  if (isWithinThirdPartySegment) {
301
305
  return {
302
306
  type: 'mutation:third-party-attribute',
@@ -437,6 +441,7 @@ export default class ViewportObserver {
437
441
  this.getSSRState = getSSRState;
438
442
  this.getSSRPlaceholderHandler = getSSRPlaceholderHandler;
439
443
  this.searchPageConfig = searchPageConfig;
444
+ this.enableThirdPartyTracking = fg('platform_ufo_reenable_3p_tracking');
440
445
  }
441
446
  initializeObservers() {
442
447
  if (this.isStarted) {