@atlaskit/react-ufo 4.17.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/cjs/create-payload/index.js +2 -2
  3. package/dist/cjs/interaction-id-context/index.js +2 -2
  4. package/dist/cjs/typing-performance-tracing/index.js +29 -6
  5. package/dist/cjs/vc/index.js +1 -3
  6. package/dist/cjs/vc/vc-observer-new/index.js +55 -67
  7. package/dist/cjs/vc/vc-observer-new/metric-calculator/fy26_04/index.js +2 -1
  8. package/dist/cjs/vc/vc-observer-new/metric-calculator/vc-next/index.js +42 -0
  9. package/dist/es2019/create-payload/index.js +2 -2
  10. package/dist/es2019/interaction-id-context/index.js +2 -2
  11. package/dist/es2019/typing-performance-tracing/index.js +27 -6
  12. package/dist/es2019/vc/index.js +1 -3
  13. package/dist/es2019/vc/vc-observer-new/index.js +59 -81
  14. package/dist/es2019/vc/vc-observer-new/metric-calculator/fy26_04/index.js +2 -2
  15. package/dist/es2019/vc/vc-observer-new/metric-calculator/vc-next/index.js +21 -0
  16. package/dist/esm/create-payload/index.js +2 -2
  17. package/dist/esm/interaction-id-context/index.js +2 -2
  18. package/dist/esm/typing-performance-tracing/index.js +29 -6
  19. package/dist/esm/vc/index.js +1 -3
  20. package/dist/esm/vc/vc-observer-new/index.js +53 -65
  21. package/dist/esm/vc/vc-observer-new/metric-calculator/fy26_04/index.js +2 -1
  22. package/dist/esm/vc/vc-observer-new/metric-calculator/vc-next/index.js +36 -0
  23. package/dist/types/interaction-id-context/index.d.ts +2 -2
  24. package/dist/types/vc/vc-observer-new/metric-calculator/fy26_04/index.d.ts +1 -1
  25. package/dist/types/vc/vc-observer-new/metric-calculator/vc-next/index.d.ts +6 -0
  26. package/dist/types-ts4.5/interaction-id-context/index.d.ts +2 -2
  27. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/fy26_04/index.d.ts +1 -1
  28. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/vc-next/index.d.ts +6 -0
  29. package/package.json +5 -5
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # @atlaskit/ufo-interaction-ignore
2
2
 
3
+ ## 5.0.0
4
+
5
+ ### Major Changes
6
+
7
+ - [`f06d1289b0fbd`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/f06d1289b0fbd) -
8
+ Decouple fy26.04 and vcNext TTVC revisions, default revision to be fy26.04
9
+
10
+ ## 4.17.1
11
+
12
+ ### Patch Changes
13
+
14
+ - [`0310b1753d4b1`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/0310b1753d4b1) -
15
+ FG cleanup - platform_ufo_enable_trimmed_payload
16
+
3
17
  ## 4.17.0
4
18
 
5
19
  ### Minor Changes
@@ -13,9 +13,9 @@ getPageLoadDetailedInteractionMetrics=function getPageLoadDetailedInteractionMet
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
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}:{}),(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
- 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);}if(!(0,_platformFeatureFlags.fg)('platform_ufo_enable_trimmed_payload')){_context.next=75;break;}// in order of importance, first one being least important
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
18
- interactionMetricsFieldsToTrim=['requestInfo','featureFlags','resourceTimings'];properties=payload.attributes.properties;interactionMetrics=properties.interactionMetrics;if(!interactionMetrics){_context.next=75;break;}_iterator=_createForOfIteratorHelper(interactionMetricsFieldsToTrim);_context.prev=53;_iterator.s();case 55:if((_step=_iterator.n()).done){_context.next=67;break;}field=_step.value;if(!((0,_getPayloadSize.default)(properties)<=MAX_PAYLOAD_SIZE)){_context.next=59;break;}return _context.abrupt("continue",65);case 59:interactionMetrics[field]=undefined;properties['event:isTrimmed']=true;trimmedFields=properties['event:trimmedFields'];if(!Array.isArray(trimmedFields)){trimmedFields=[];}trimmedFields.push("interactionMetrics.".concat(field));properties['event:trimmedFields']=trimmedFields;case 65:_context.next=55;break;case 67:_context.next=72;break;case 69:_context.prev=69;_context.t7=_context["catch"](53);_iterator.e(_context.t7);case 72:_context.prev=72;_iterator.f();return _context.finish(72);case 75:return _context.abrupt("return",payload);case 76:case"end":return _context.stop();}},_callee,null,[[53,69,72,75]]);}));return _createInteractionMetricsPayload.apply(this,arguments);}function createPayloads(_x6,_x7){return _createPayloads.apply(this,arguments);}function _createPayloads(){_createPayloads=(0,_asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee2(interactionId,interaction){var ufoNameOverride,modifiedInteraction,payloads,isCriticalMetricsEnabled,vcMetrics,criticalMetricsPayloads,criticalPayloadCount,interactionMetricsPayload;return _regenerator.default.wrap(function _callee2$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:ufoNameOverride=getUfoNameOverride(interaction);modifiedInteraction=_objectSpread(_objectSpread({},interaction),{},{ufoName:ufoNameOverride});payloads=[];isCriticalMetricsEnabled=(0,_platformFeatureFlags.fg)('platform_ufo_critical_metrics_payload');// Calculate VC metrics once to avoid duplicate expensive calculations
18
+ interactionMetricsFieldsToTrim=['requestInfo','featureFlags','resourceTimings'];properties=payload.attributes.properties;interactionMetrics=properties.interactionMetrics;if(!interactionMetrics){_context.next=74;break;}_iterator=_createForOfIteratorHelper(interactionMetricsFieldsToTrim);_context.prev=52;_iterator.s();case 54:if((_step=_iterator.n()).done){_context.next=66;break;}field=_step.value;if(!((0,_getPayloadSize.default)(properties)<=MAX_PAYLOAD_SIZE)){_context.next=58;break;}return _context.abrupt("continue",64);case 58:interactionMetrics[field]=undefined;properties['event:isTrimmed']=true;trimmedFields=properties['event:trimmedFields'];if(!Array.isArray(trimmedFields)){trimmedFields=[];}trimmedFields.push("interactionMetrics.".concat(field));properties['event:trimmedFields']=trimmedFields;case 64:_context.next=54;break;case 66:_context.next=71;break;case 68:_context.prev=68;_context.t7=_context["catch"](52);_iterator.e(_context.t7);case 71:_context.prev=71;_iterator.f();return _context.finish(71);case 74:return _context.abrupt("return",payload);case 75:case"end":return _context.stop();}},_callee,null,[[52,68,71,74]]);}));return _createInteractionMetricsPayload.apply(this,arguments);}function createPayloads(_x6,_x7){return _createPayloads.apply(this,arguments);}function _createPayloads(){_createPayloads=(0,_asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee2(interactionId,interaction){var ufoNameOverride,modifiedInteraction,payloads,isCriticalMetricsEnabled,vcMetrics,criticalMetricsPayloads,criticalPayloadCount,interactionMetricsPayload;return _regenerator.default.wrap(function _callee2$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:ufoNameOverride=getUfoNameOverride(interaction);modifiedInteraction=_objectSpread(_objectSpread({},interaction),{},{ufoName:ufoNameOverride});payloads=[];isCriticalMetricsEnabled=(0,_platformFeatureFlags.fg)('platform_ufo_critical_metrics_payload');// Calculate VC metrics once to avoid duplicate expensive calculations
19
19
  _context2.next=6;return(0,_getVcMetrics.default)(interaction);case 6:vcMetrics=_context2.sent;if(!isCriticalMetricsEnabled){_context2.next=13;break;}_context2.next=10;return(0,_criticalMetricsPayload.createCriticalMetricsPayloads)(interactionId,interaction,vcMetrics);case 10:_context2.t0=_context2.sent;_context2.next=14;break;case 13:_context2.t0=[];case 14:criticalMetricsPayloads=_context2.t0;payloads.push.apply(payloads,(0,_toConsumableArray2.default)(criticalMetricsPayloads));criticalPayloadCount=isCriticalMetricsEnabled?criticalMetricsPayloads.length:undefined;_context2.next=19;return createInteractionMetricsPayload(modifiedInteraction,interactionId,undefined,criticalPayloadCount,vcMetrics);case 19:interactionMetricsPayload=_context2.sent;payloads.push(interactionMetricsPayload);return _context2.abrupt("return",payloads.filter(Boolean));case 22:case"end":return _context2.stop();}},_callee2);}));return _createPayloads.apply(this,arguments);}function createExperimentalMetricsPayload(_x8,_x9){return _createExperimentalMetricsPayload.apply(this,arguments);}function _createExperimentalMetricsPayload(){_createExperimentalMetricsPayload=(0,_asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee3(interactionId,interaction){var config,ufoName,rate,pageVisibilityState,result;return _regenerator.default.wrap(function _callee3$(_context3){while(1)switch(_context3.prev=_context3.next){case 0:config=(0,_config.getConfig)();if(config){_context3.next=3;break;}throw Error('UFO Configuration not provided');case 3:ufoName=(0,_utils.sanitizeUfoName)(interaction.ufoName);rate=(0,_config.getExperimentalInteractionRate)(ufoName,interaction.type);if((0,_coinflip.default)(rate)){_context3.next=7;break;}return _context3.abrupt("return",null);case 7:pageVisibilityState=(0,_hiddenTiming.getPageVisibilityState)(interaction.start,interaction.end);if(!(pageVisibilityState!=='visible')){_context3.next=10;break;}return _context3.abrupt("return",null);case 10:_context3.next=12;return createInteractionMetricsPayload(interaction,interactionId,true);case 12:result=_context3.sent;return _context3.abrupt("return",result);case 14:case"end":return _context3.stop();}},_callee3);}));return _createExperimentalMetricsPayload.apply(this,arguments);}function createExtraSearchPageInteractionPayload(_x0,_x1){return _createExtraSearchPageInteractionPayload.apply(this,arguments);}function _createExtraSearchPageInteractionPayload(){_createExtraSearchPageInteractionPayload=(0,_asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee4(interactionId,interaction){var SAIN_HOLD_NAMES,NAME_OVERRIDE,SEARCH_PAGE_SMART_ANSWERS_SEGMENT_LABEL,newInteractionId,newEnd,holdInfo,reactProfilerTimings,lastHold,isLastHoldSAIN,lastFilteredTime,filteredReactProfilerTimings,lastTiming,modifiedInteraction,payloads,vcMetrics,interactionMetricsPayload;return _regenerator.default.wrap(function _callee4$(_context4){while(1)switch(_context4.prev=_context4.next){case 0:SAIN_HOLD_NAMES=['search-ai-dialog-visible-text-loading','search-ai-dialog-all-text-loading'];NAME_OVERRIDE='search-page-ignoring-smart-answers';SEARCH_PAGE_SMART_ANSWERS_SEGMENT_LABEL='search-page-smart-answers';newInteractionId="".concat(interactionId,"-ignoring-smart-answers");// Calculate a new end time which excludes SAIN holds
20
20
  holdInfo=interaction.holdInfo,reactProfilerTimings=interaction.reactProfilerTimings;lastHold=holdInfo.at(-1);isLastHoldSAIN=Boolean(lastHold&&SAIN_HOLD_NAMES.includes(lastHold.name));// A new end time is only calculated if the last hold is a SAIN hold
21
21
  if(isLastHoldSAIN){lastFilteredTime=null;filteredReactProfilerTimings=reactProfilerTimings.filter(function(timing){if(timing.commitTime===lastFilteredTime){return false;}var isTimingSmartAnswersInSearch=timing.labelStack.some(function(label){return label.name===SEARCH_PAGE_SMART_ANSWERS_SEGMENT_LABEL;});if(isTimingSmartAnswersInSearch){lastFilteredTime=timing.commitTime;return false;}return true;});lastTiming=filteredReactProfilerTimings.at(-1);if(lastTiming){newEnd=lastTiming.commitTime;}}modifiedInteraction=_objectSpread(_objectSpread({},interaction),{},{end:newEnd!==null&&newEnd!==void 0?newEnd:interaction.end,holdInfo:[],knownSegments:[],reactProfilerTimings:[],ufoName:NAME_OVERRIDE});payloads=[];_context4.next=12;return(0,_getVcMetrics.default)(interaction,false,true);case 12:vcMetrics=_context4.sent;_context4.next=15;return createInteractionMetricsPayload(modifiedInteraction,newInteractionId,undefined,undefined,vcMetrics);case 15:interactionMetricsPayload=_context4.sent;payloads.push(interactionMetricsPayload);return _context4.abrupt("return",payloads.filter(Boolean));case 18:case"end":return _context4.stop();}},_callee4);}));return _createExtraSearchPageInteractionPayload.apply(this,arguments);}
@@ -69,8 +69,8 @@ var subscribeToInteractionIdChanges = exports.subscribeToInteractionIdChanges =
69
69
  };
70
70
 
71
71
  // We use a context to allow modals to have their own lifecycle
72
- var _default_1 = /*#__PURE__*/(0, _react.createContext)(DefaultInteractionID);
73
- var _default = exports.default = _default_1;
72
+ var interactionContext = /*#__PURE__*/(0, _react.createContext)(DefaultInteractionID);
73
+ var _default = exports.default = interactionContext;
74
74
  var getInteractionId = exports.getInteractionId = function getInteractionId() {
75
75
  return DefaultInteractionID;
76
76
  };
@@ -8,6 +8,7 @@ exports.default = useUFOTypingPerformanceTracing;
8
8
  var _react = require("react");
9
9
  var _scheduler = require("scheduler");
10
10
  var _uuid = require("uuid");
11
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
11
12
  var _coinflip = _interopRequireDefault(require("../coinflip"));
12
13
  var _config = require("../config");
13
14
  var _interactionMetrics = require("../interaction-metrics");
@@ -80,10 +81,15 @@ function typingPerformanceTracingTimeout(element, name, rate) {
80
81
  tsubmit = setTimeout(end, 2000); // debounce
81
82
  }, 0);
82
83
  };
83
-
84
+ if (typeof (element === null || element === void 0 ? void 0 : element.addEventListener) !== 'function' && (0, _platformFeatureFlags.fg)('jfp-magma-ufo-event-listener-error')) {
85
+ return;
86
+ }
84
87
  // eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
85
88
  element.addEventListener('keypress', onKeyPressHandler);
86
89
  return function () {
90
+ if (typeof (element === null || element === void 0 ? void 0 : element.removeEventListener) !== 'function' && (0, _platformFeatureFlags.fg)('jfp-magma-ufo-event-listener-error')) {
91
+ return;
92
+ }
87
93
  // eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
88
94
  element.removeEventListener('keypress', onKeyPressHandler);
89
95
  };
@@ -152,10 +158,15 @@ function typingPerformanceTracingTimeoutNoAlloc(element, name, rate) {
152
158
  tsubmit = setTimeout(end, 2000); // debounce
153
159
  }, 0);
154
160
  };
155
-
161
+ if (typeof (element === null || element === void 0 ? void 0 : element.addEventListener) !== 'function' && (0, _platformFeatureFlags.fg)('jfp-magma-ufo-event-listener-error')) {
162
+ return;
163
+ }
156
164
  // eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
157
165
  element.addEventListener('keypress', onKeyPressHandler);
158
166
  return function () {
167
+ if (typeof (element === null || element === void 0 ? void 0 : element.removeEventListener) !== 'function' && (0, _platformFeatureFlags.fg)('jfp-magma-ufo-event-listener-error')) {
168
+ return;
169
+ }
159
170
  // eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
160
171
  element.removeEventListener('keypress', onKeyPressHandler);
161
172
  };
@@ -240,13 +251,25 @@ function typingPerformanceTracingMutationObserver(element, name, rate) {
240
251
  childList: true,
241
252
  subtree: true
242
253
  });
243
-
254
+ if (typeof (element === null || element === void 0 ? void 0 : element.addEventListener) !== 'function' && (0, _platformFeatureFlags.fg)('jfp-magma-ufo-event-listener-error')) {
255
+ return function () {
256
+ return mo.disconnect();
257
+ };
258
+ }
244
259
  // eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
245
260
  element.addEventListener('keypress', onKeyPressHandler);
246
261
  return function () {
247
- // eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
248
- element.removeEventListener('keypress', onKeyPressHandler);
249
- mo.disconnect();
262
+ if ((0, _platformFeatureFlags.fg)('jfp-magma-ufo-event-listener-error')) {
263
+ if (typeof (element === null || element === void 0 ? void 0 : element.removeEventListener) === 'function') {
264
+ // eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
265
+ element.removeEventListener('keypress', onKeyPressHandler);
266
+ }
267
+ mo.disconnect();
268
+ } else {
269
+ // eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
270
+ element.removeEventListener('keypress', onKeyPressHandler);
271
+ mo.disconnect();
272
+ }
250
273
  };
251
274
  }
252
275
  var typingPerformanceTracingMethods = {
@@ -14,7 +14,6 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/
14
14
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
15
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
16
16
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
17
- var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
18
17
  var _config = require("../config");
19
18
  var _noOpVcObserver = require("./no-op-vc-observer");
20
19
  var _vcObserver = require("./vc-observer");
@@ -36,8 +35,7 @@ var VCObserverWrapper = exports.VCObserverWrapper = /*#__PURE__*/function () {
36
35
  this.ssrPlaceholderHandler = new _ssrPlaceholders.SSRPlaceholderHandlers({
37
36
  enablePageLayoutPlaceholder: (_opts$ssrEnablePageLa = opts.ssrEnablePageLayoutPlaceholder) !== null && _opts$ssrEnablePageLa !== void 0 ? _opts$ssrEnablePageLa : false
38
37
  });
39
- var ttvcV4RevisionName = (0, _platformFeatureFlags.fg)('platform_ufo_vcnext_to_fy26_04_revision_update') ? 'fy26.04' : 'next';
40
- if ((0, _config.isVCRevisionEnabled)('fy25.03') || (0, _config.isVCRevisionEnabled)(ttvcV4RevisionName)) {
38
+ if ((0, _config.isVCRevisionEnabled)('fy25.03') || (0, _config.isVCRevisionEnabled)('fy26.04')) {
41
39
  var _opts$ssrEnablePageLa2;
42
40
  this.newVCObserver = new _vcObserverNew.default({
43
41
  selectorConfig: opts.selectorConfig,
@@ -18,13 +18,16 @@ var _interactionMetrics = require("../../interaction-metrics");
18
18
  var _ssrPlaceholders = require("../vc-observer/observers/ssr-placeholders");
19
19
  var _entriesTimeline = _interopRequireDefault(require("./entries-timeline"));
20
20
  var _getElementName2 = _interopRequireDefault(require("./get-element-name"));
21
- var _fy25_2 = _interopRequireDefault(require("./metric-calculator/fy25_03"));
21
+ var _fy25_ = _interopRequireDefault(require("./metric-calculator/fy25_03"));
22
22
  var _fy26_ = _interopRequireDefault(require("./metric-calculator/fy26_04"));
23
23
  var _getViewportHeight = _interopRequireDefault(require("./metric-calculator/utils/get-viewport-height"));
24
24
  var _getViewportWidth = _interopRequireDefault(require("./metric-calculator/utils/get-viewport-width"));
25
+ var _vcNext2 = _interopRequireDefault(require("./metric-calculator/vc-next"));
25
26
  var _rawDataHandler = _interopRequireDefault(require("./raw-data-handler"));
26
27
  var _viewportObserver = _interopRequireDefault(require("./viewport-observer"));
27
28
  var _windowEventObserver = _interopRequireDefault(require("./window-event-observer"));
29
+ 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; }
30
+ 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; }
28
31
  var SSRState = {
29
32
  normal: 1,
30
33
  waitingForFirstRender: 2,
@@ -250,7 +253,7 @@ var VCObserverNew = exports.default = /*#__PURE__*/function () {
250
253
  key: "getVCResult",
251
254
  value: function () {
252
255
  var _getVCResult = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(param) {
253
- var start, stop, interactionId, interactionType, interactionAbortReason, isPageVisible, include3p, includeSSRRatio, excludeSmartAnswersInSearch, includeRawData, rawDataStopTime, results, feVCCalculationStartTime, calculator_fy25_03, orderedEntries, fy25_03, calculator_fy26_04, fy26_04, vcNext, _fy25_, calculator_next, _vcNext, feVCCalculationEndTime, rawVCCalculationStartTime, rawHandler, rawStopTime, rawOrderedEntries, raw;
256
+ var start, stop, interactionId, interactionType, interactionAbortReason, isPageVisible, include3p, includeSSRRatio, excludeSmartAnswersInSearch, includeRawData, rawDataStopTime, results, feVCCalculationStartTime, calculator_fy25_03, orderedEntries, fy25_03, calculator_fy26_04, fy26_04, calculator_next, vcNext, _vcNext, feVCCalculationEndTime, rawVCCalculationStartTime, rawHandler, rawStopTime, rawOrderedEntries, raw;
254
257
  return _regenerator.default.wrap(function _callee$(_context) {
255
258
  while (1) switch (_context.prev = _context.next) {
256
259
  case 0:
@@ -258,7 +261,7 @@ var VCObserverNew = exports.default = /*#__PURE__*/function () {
258
261
  results = [];
259
262
  this.addStartEntry(start);
260
263
  feVCCalculationStartTime = performance.now();
261
- calculator_fy25_03 = new _fy25_2.default();
264
+ calculator_fy25_03 = new _fy25_.default();
262
265
  if (param.includeSSRInV3 && param.ssr) {
263
266
  this.addSSR(param.ssr);
264
267
  }
@@ -266,15 +269,11 @@ var VCObserverNew = exports.default = /*#__PURE__*/function () {
266
269
  start: start,
267
270
  stop: stop
268
271
  });
269
- if (!(0, _platformFeatureFlags.fg)('platform_ufo_vcnext_to_fy26_04_revision_update')) {
270
- _context.next = 30;
271
- break;
272
- }
273
272
  if (!(0, _config.isVCRevisionEnabled)('fy25.03')) {
274
- _context.next = 14;
273
+ _context.next = 13;
275
274
  break;
276
275
  }
277
- _context.next = 11;
276
+ _context.next = 10;
278
277
  return calculator_fy25_03.calculate({
279
278
  orderedEntries: orderedEntries,
280
279
  startTime: start,
@@ -288,13 +287,13 @@ var VCObserverNew = exports.default = /*#__PURE__*/function () {
288
287
  isPageVisible: isPageVisible,
289
288
  interactionAbortReason: interactionAbortReason
290
289
  });
291
- case 11:
290
+ case 10:
292
291
  _context.t0 = _context.sent;
293
- _context.next = 15;
292
+ _context.next = 14;
294
293
  break;
295
- case 14:
294
+ case 13:
296
295
  _context.t0 = null;
297
- case 15:
296
+ case 14:
298
297
  fy25_03 = _context.t0;
299
298
  if (fy25_03) {
300
299
  results.push(fy25_03);
@@ -306,11 +305,11 @@ var VCObserverNew = exports.default = /*#__PURE__*/function () {
306
305
  this.addSSR(param.ssr);
307
306
  }
308
307
  calculator_fy26_04 = new _fy26_.default();
309
- if (!((0, _config.isVCRevisionEnabled)('fy26.04') || (0, _config.isVCRevisionEnabled)('next'))) {
310
- _context.next = 25;
308
+ if (!(0, _config.isVCRevisionEnabled)('fy26.04')) {
309
+ _context.next = 24;
311
310
  break;
312
311
  }
313
- _context.next = 22;
312
+ _context.next = 21;
314
313
  return calculator_fy26_04.calculate({
315
314
  orderedEntries: orderedEntries,
316
315
  startTime: start,
@@ -324,53 +323,29 @@ var VCObserverNew = exports.default = /*#__PURE__*/function () {
324
323
  isPageVisible: isPageVisible,
325
324
  interactionAbortReason: interactionAbortReason
326
325
  });
327
- case 22:
326
+ case 21:
328
327
  _context.t1 = _context.sent;
329
- _context.next = 26;
328
+ _context.next = 25;
330
329
  break;
331
- case 25:
330
+ case 24:
332
331
  _context.t1 = null;
333
- case 26:
332
+ case 25:
334
333
  fy26_04 = _context.t1;
335
- if (fy26_04) {
336
- vcNext = {
337
- revision: 'next',
338
- 'metric:vc90': fy26_04['metric:vc90'],
339
- clean: fy26_04['clean']
340
- };
341
- results.push(fy26_04);
342
- results.push(vcNext);
334
+ if (!fy26_04) {
335
+ _context.next = 43;
336
+ break;
343
337
  }
344
- _context.next = 40;
345
- break;
346
- case 30:
347
- _context.next = 32;
348
- return calculator_fy25_03.calculate({
349
- orderedEntries: orderedEntries,
350
- startTime: start,
351
- stopTime: stop,
352
- interactionId: interactionId,
353
- interactionType: interactionType,
354
- isPostInteraction: this.isPostInteraction,
355
- include3p: include3p,
356
- excludeSmartAnswersInSearch: excludeSmartAnswersInSearch,
357
- includeSSRRatio: includeSSRRatio,
358
- isPageVisible: isPageVisible,
359
- interactionAbortReason: interactionAbortReason
360
- });
361
- case 32:
362
- _fy25_ = _context.sent;
363
- if (_fy25_) {
364
- results.push(_fy25_);
338
+ results.push(fy26_04);
339
+ if (!(0, _platformFeatureFlags.fg)('platform_ufo_vcnext_for_ttvc_v5')) {
340
+ _context.next = 41;
341
+ break;
365
342
  }
366
-
367
- // From TTVC v4 onwards, ensuring that SSR entry is always auto-added, whenever it is configured.
368
- // From the next major version release (where TTVC v4 becomes the default TTVC version), the config for `includeSSRInV3` will be deprecated
369
- if (param.ssr && !param.includeSSRInV3 && (0, _platformFeatureFlags.fg)('platform_ufo_auto_add_ssr_entry_in_ttvc_v4')) {
370
- this.addSSR(param.ssr);
343
+ calculator_next = new _vcNext2.default();
344
+ if (!(0, _config.isVCRevisionEnabled)('next')) {
345
+ _context.next = 36;
346
+ break;
371
347
  }
372
- calculator_next = new _fy26_.default();
373
- _context.next = 38;
348
+ _context.next = 33;
374
349
  return calculator_next.calculate({
375
350
  orderedEntries: orderedEntries,
376
351
  startTime: start,
@@ -379,20 +354,33 @@ var VCObserverNew = exports.default = /*#__PURE__*/function () {
379
354
  interactionType: interactionType,
380
355
  isPostInteraction: this.isPostInteraction,
381
356
  include3p: include3p,
357
+ excludeSmartAnswersInSearch: excludeSmartAnswersInSearch,
382
358
  includeSSRRatio: includeSSRRatio,
383
359
  isPageVisible: isPageVisible,
384
360
  interactionAbortReason: interactionAbortReason
385
361
  });
386
- case 38:
387
- _vcNext = _context.sent;
388
- if (_vcNext) {
389
- _vcNext.revision = 'next';
390
- results.push(_vcNext);
362
+ case 33:
363
+ _context.t2 = _context.sent;
364
+ _context.next = 37;
365
+ break;
366
+ case 36:
367
+ _context.t2 = null;
368
+ case 37:
369
+ vcNext = _context.t2;
370
+ if (vcNext) {
371
+ results.push(vcNext);
391
372
  }
392
- case 40:
373
+ _context.next = 43;
374
+ break;
375
+ case 41:
376
+ _vcNext = _objectSpread(_objectSpread({}, fy26_04), {}, {
377
+ revision: 'next'
378
+ });
379
+ results.push(_vcNext);
380
+ case 43:
393
381
  feVCCalculationEndTime = performance.now();
394
382
  if (!(includeRawData && (0, _platformFeatureFlags.fg)('platform_ufo_enable_vc_raw_data'))) {
395
- _context.next = 51;
383
+ _context.next = 54;
396
384
  break;
397
385
  }
398
386
  rawVCCalculationStartTime = performance.now();
@@ -402,14 +390,14 @@ var VCObserverNew = exports.default = /*#__PURE__*/function () {
402
390
  start: start,
403
391
  stop: rawStopTime
404
392
  }) : orderedEntries;
405
- _context.next = 48;
393
+ _context.next = 51;
406
394
  return rawHandler.getRawData({
407
395
  entries: rawOrderedEntries,
408
396
  startTime: start,
409
397
  stopTime: rawStopTime,
410
398
  isPageVisible: isPageVisible
411
399
  });
412
- case 48:
400
+ case 51:
413
401
  raw = _context.sent;
414
402
  results.forEach(function (result) {
415
403
  delete result.vcDetails;
@@ -420,9 +408,9 @@ var VCObserverNew = exports.default = /*#__PURE__*/function () {
420
408
  raw.feVCTime = Number((feVCCalculationEndTime - feVCCalculationStartTime).toFixed(2));
421
409
  results.push(raw);
422
410
  }
423
- case 51:
411
+ case 54:
424
412
  return _context.abrupt("return", results);
425
- case 52:
413
+ case 55:
426
414
  case "end":
427
415
  return _context.stop();
428
416
  }
@@ -33,8 +33,9 @@ var fy26_04_excluded_attributes = ['data-is-hovered' // non-visual attribute
33
33
  ];
34
34
  var VCCalculator_FY26_04 = exports.default = /*#__PURE__*/function (_VCCalculator_FY25_) {
35
35
  function VCCalculator_FY26_04() {
36
+ var revisionNo = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'fy26.04';
36
37
  (0, _classCallCheck2.default)(this, VCCalculator_FY26_04);
37
- return _callSuper(this, VCCalculator_FY26_04, ['fy26.04']);
38
+ return _callSuper(this, VCCalculator_FY26_04, [revisionNo]);
38
39
  }
39
40
  (0, _inherits2.default)(VCCalculator_FY26_04, _VCCalculator_FY25_);
40
41
  return (0, _createClass2.default)(VCCalculator_FY26_04, [{
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
9
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
11
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
12
+ var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
13
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
14
+ var _fy26_ = _interopRequireDefault(require("../fy26_04"));
15
+ function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
16
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
17
+ function _superPropGet(t, o, e, r) { var p = (0, _get2.default)((0, _getPrototypeOf2.default)(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; }
18
+ var getConsideredEntryTypes = function getConsideredEntryTypes() {
19
+ var consideredEntryTypes = [];
20
+ return consideredEntryTypes;
21
+ };
22
+ var getExcludedEntryTypes = function getExcludedEntryTypes() {
23
+ var excludedEntryTypes = [];
24
+ return excludedEntryTypes;
25
+ };
26
+ var VCCalculator_Next = exports.default = /*#__PURE__*/function (_VCCalculator_FY26_) {
27
+ function VCCalculator_Next() {
28
+ (0, _classCallCheck2.default)(this, VCCalculator_Next);
29
+ return _callSuper(this, VCCalculator_Next, ['next']);
30
+ }
31
+ (0, _inherits2.default)(VCCalculator_Next, _VCCalculator_FY26_);
32
+ return (0, _createClass2.default)(VCCalculator_Next, [{
33
+ key: "isEntryIncluded",
34
+ value: function isEntryIncluded(entry, include3p, excludeSmartAnswersInSearch) {
35
+ var isEntryIncludedInV4 = _superPropGet(VCCalculator_Next, "isEntryIncluded", this, 3)([entry, include3p, excludeSmartAnswersInSearch]);
36
+ if (isEntryIncludedInV4 && !getExcludedEntryTypes().includes(entry.data.type)) {
37
+ return true;
38
+ }
39
+ return getConsideredEntryTypes().includes(entry.data.type);
40
+ }
41
+ }]);
42
+ }(_fy26_.default);
@@ -14,9 +14,9 @@ const getPageLoadDetailedInteractionMetrics=()=>{var _config$ssr2,_config$ssr2$g
14
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}:{}),// 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
- 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);}if(fg('platform_ufo_enable_trimmed_payload')){// in order of importance, first one being least important
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
18
18
  // we can add more fields as necessary
19
- const interactionMetricsFieldsToTrim=['requestInfo','featureFlags','resourceTimings'];const properties=payload.attributes.properties;const interactionMetrics=properties.interactionMetrics;if(interactionMetrics){for(const field of interactionMetricsFieldsToTrim){if(getPayloadSize(properties)<=MAX_PAYLOAD_SIZE){continue;}interactionMetrics[field]=undefined;properties['event:isTrimmed']=true;let trimmedFields=properties['event:trimmedFields'];if(!Array.isArray(trimmedFields)){trimmedFields=[];}trimmedFields.push(`interactionMetrics.${field}`);properties['event:trimmedFields']=trimmedFields;}}}return payload;}export async function createPayloads(interactionId,interaction){const ufoNameOverride=getUfoNameOverride(interaction);const modifiedInteraction={...interaction,ufoName:ufoNameOverride};const payloads=[];const isCriticalMetricsEnabled=fg('platform_ufo_critical_metrics_payload');// Calculate VC metrics once to avoid duplicate expensive calculations
19
+ const interactionMetricsFieldsToTrim=['requestInfo','featureFlags','resourceTimings'];const properties=payload.attributes.properties;const interactionMetrics=properties.interactionMetrics;if(interactionMetrics){for(const field of interactionMetricsFieldsToTrim){if(getPayloadSize(properties)<=MAX_PAYLOAD_SIZE){continue;}interactionMetrics[field]=undefined;properties['event:isTrimmed']=true;let trimmedFields=properties['event:trimmedFields'];if(!Array.isArray(trimmedFields)){trimmedFields=[];}trimmedFields.push(`interactionMetrics.${field}`);properties['event:trimmedFields']=trimmedFields;}}return payload;}export async function createPayloads(interactionId,interaction){const ufoNameOverride=getUfoNameOverride(interaction);const modifiedInteraction={...interaction,ufoName:ufoNameOverride};const payloads=[];const isCriticalMetricsEnabled=fg('platform_ufo_critical_metrics_payload');// Calculate VC metrics once to avoid duplicate expensive calculations
20
20
  const vcMetrics=await getVCMetrics(interaction);// typeof Promise<CriticalMetricsPayload[]>
21
21
  const criticalMetricsPayloads=isCriticalMetricsEnabled?await createCriticalMetricsPayloads(interactionId,interaction,vcMetrics):[];payloads.push(...criticalMetricsPayloads);const criticalPayloadCount=isCriticalMetricsEnabled?criticalMetricsPayloads.length:undefined;const interactionMetricsPayload=await createInteractionMetricsPayload(modifiedInteraction,interactionId,undefined,criticalPayloadCount,vcMetrics);payloads.push(interactionMetricsPayload);return payloads.filter(Boolean);}export async function createExperimentalMetricsPayload(interactionId,interaction){const config=getConfig();if(!config){throw Error('UFO Configuration not provided');}const ufoName=sanitizeUfoName(interaction.ufoName);const rate=getExperimentalInteractionRate(ufoName,interaction.type);if(!coinflip(rate)){return null;}const pageVisibilityState=getPageVisibilityState(interaction.start,interaction.end);if(pageVisibilityState!=='visible'){return null;}const result=await createInteractionMetricsPayload(interaction,interactionId,true);return result;}export async function createExtraSearchPageInteractionPayload(interactionId,interaction){var _newEnd;const SAIN_HOLD_NAMES=['search-ai-dialog-visible-text-loading','search-ai-dialog-all-text-loading'];const NAME_OVERRIDE='search-page-ignoring-smart-answers';const SEARCH_PAGE_SMART_ANSWERS_SEGMENT_LABEL='search-page-smart-answers';const newInteractionId=`${interactionId}-ignoring-smart-answers`;// Calculate a new end time which excludes SAIN holds
22
22
  let newEnd;const{holdInfo,reactProfilerTimings}=interaction;const lastHold=holdInfo.at(-1);const isLastHoldSAIN=Boolean(lastHold&&SAIN_HOLD_NAMES.includes(lastHold.name));// A new end time is only calculated if the last hold is a SAIN hold
@@ -58,7 +58,7 @@ export const subscribeToInteractionIdChanges = listener => {
58
58
  };
59
59
 
60
60
  // We use a context to allow modals to have their own lifecycle
61
- const _default_1 = /*#__PURE__*/createContext(DefaultInteractionID);
62
- export default _default_1;
61
+ const interactionContext = /*#__PURE__*/createContext(DefaultInteractionID);
62
+ export default interactionContext;
63
63
  export const getInteractionId = () => DefaultInteractionID;
64
64
  export const useInteractionId = () => DefaultInteractionID;
@@ -2,6 +2,7 @@ import { useEffect, useRef } from 'react';
2
2
  import { unstable_IdlePriority as idlePriority, unstable_scheduleCallback as scheduleCallback } from 'scheduler';
3
3
  // eslint-disable-next-line @atlaskit/platform/prefer-crypto-random-uuid -- Use crypto.randomUUID instead
4
4
  import { v4 as createUUID } from 'uuid';
5
+ import { fg } from '@atlaskit/platform-feature-flags';
5
6
  import coinflip from '../coinflip';
6
7
  import { getInteractionRate, getTypingPerformanceTracingMethod } from '../config';
7
8
  import { addMetadata, addNewInteraction, tryComplete } from '../interaction-metrics';
@@ -72,10 +73,15 @@ function typingPerformanceTracingTimeout(element, name, rate) {
72
73
  tsubmit = setTimeout(end, 2000); // debounce
73
74
  }, 0);
74
75
  };
75
-
76
+ if (typeof (element === null || element === void 0 ? void 0 : element.addEventListener) !== 'function' && fg('jfp-magma-ufo-event-listener-error')) {
77
+ return;
78
+ }
76
79
  // eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
77
80
  element.addEventListener('keypress', onKeyPressHandler);
78
81
  return () => {
82
+ if (typeof (element === null || element === void 0 ? void 0 : element.removeEventListener) !== 'function' && fg('jfp-magma-ufo-event-listener-error')) {
83
+ return;
84
+ }
79
85
  // eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
80
86
  element.removeEventListener('keypress', onKeyPressHandler);
81
87
  };
@@ -144,10 +150,15 @@ function typingPerformanceTracingTimeoutNoAlloc(element, name, rate) {
144
150
  tsubmit = setTimeout(end, 2000); // debounce
145
151
  }, 0);
146
152
  };
147
-
153
+ if (typeof (element === null || element === void 0 ? void 0 : element.addEventListener) !== 'function' && fg('jfp-magma-ufo-event-listener-error')) {
154
+ return;
155
+ }
148
156
  // eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
149
157
  element.addEventListener('keypress', onKeyPressHandler);
150
158
  return () => {
159
+ if (typeof (element === null || element === void 0 ? void 0 : element.removeEventListener) !== 'function' && fg('jfp-magma-ufo-event-listener-error')) {
160
+ return;
161
+ }
151
162
  // eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
152
163
  element.removeEventListener('keypress', onKeyPressHandler);
153
164
  };
@@ -232,13 +243,23 @@ function typingPerformanceTracingMutationObserver(element, name, rate) {
232
243
  childList: true,
233
244
  subtree: true
234
245
  });
235
-
246
+ if (typeof (element === null || element === void 0 ? void 0 : element.addEventListener) !== 'function' && fg('jfp-magma-ufo-event-listener-error')) {
247
+ return () => mo.disconnect();
248
+ }
236
249
  // eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
237
250
  element.addEventListener('keypress', onKeyPressHandler);
238
251
  return () => {
239
- // eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
240
- element.removeEventListener('keypress', onKeyPressHandler);
241
- mo.disconnect();
252
+ if (fg('jfp-magma-ufo-event-listener-error')) {
253
+ if (typeof (element === null || element === void 0 ? void 0 : element.removeEventListener) === 'function') {
254
+ // eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
255
+ element.removeEventListener('keypress', onKeyPressHandler);
256
+ }
257
+ mo.disconnect();
258
+ } else {
259
+ // eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
260
+ element.removeEventListener('keypress', onKeyPressHandler);
261
+ mo.disconnect();
262
+ }
242
263
  };
243
264
  }
244
265
  const typingPerformanceTracingMethods = {
@@ -1,5 +1,4 @@
1
1
  var _process, _process$env;
2
- import { fg } from '@atlaskit/platform-feature-flags';
3
2
  import { isVCRevisionEnabled } from '../config';
4
3
  import { VCObserverNOOP } from './no-op-vc-observer';
5
4
  import { VCObserver } from './vc-observer';
@@ -16,8 +15,7 @@ export class VCObserverWrapper {
16
15
  this.ssrPlaceholderHandler = new SSRPlaceholderHandlers({
17
16
  enablePageLayoutPlaceholder: (_opts$ssrEnablePageLa = opts.ssrEnablePageLayoutPlaceholder) !== null && _opts$ssrEnablePageLa !== void 0 ? _opts$ssrEnablePageLa : false
18
17
  });
19
- const ttvcV4RevisionName = fg('platform_ufo_vcnext_to_fy26_04_revision_update') ? 'fy26.04' : 'next';
20
- if (isVCRevisionEnabled('fy25.03') || isVCRevisionEnabled(ttvcV4RevisionName)) {
18
+ if (isVCRevisionEnabled('fy25.03') || isVCRevisionEnabled('fy26.04')) {
21
19
  var _opts$ssrEnablePageLa2;
22
20
  this.newVCObserver = new VCObserverNew({
23
21
  selectorConfig: opts.selectorConfig,