{"version":3,"file":"chunks/32e47efd1c08b1.js","mappings":"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","sources":["webpack:///./node_modules/@atlassian/ufo-round-number/dist/es2019/index.js","webpack:///./node_modules/@atlassian/ufo-custom-timings/dist/es2019/index.js","webpack:///./node_modules/@atlassian/ufo-initial-page-load-extra-timing/dist/es2019/index.js","webpack:///./node_modules/@atlassian/ufo-resource-timing/dist/es2019/common/utils/resource-timing-buffer.js","webpack:///./node_modules/@atlassian/ufo-resource-timing/dist/es2019/main.js","webpack:///./node_modules/@atlassian/ufo-ssr/dist/es2019/index.js","webpack:///./node_modules/@atlassian/ufo-create-payload/dist/es2019/common/utils/index.js","webpack:///./node_modules/@atlassian/ufo-create-payload/dist/es2019/index.js","webpack:///./node_modules/@atlassian/ufo-bundle-eval-timing/dist/es2019/index.js"],"sourcesContent":["export const roundEpsilon = (num, places = 3) => {\n const factor = Math.pow(10, places);\n return Math.round((num + Number.EPSILON) * factor) / factor;\n};","import { useContext, useMemo } from 'react';\nimport UFOInteractionContext from '@atlassian/ufo-interaction-context';\nimport { getInteractionId } from '@atlassian/ufo-interaction-id-context';\nimport { addCustomTiming, getCurrentInteractionType } from '@atlassian/ufo-interaction-metrics';\nexport function getBm3Timings(marks, timingConfigs) {\n const bm3Timings = {};\n if (!marks || !timingConfigs) {\n return bm3Timings;\n }\n timingConfigs.forEach(item => {\n if (!item.startMark || !item.endMark) {\n return;\n }\n const startTime = marks[item.startMark];\n if (!startTime) {\n return;\n }\n const endTime = marks[item.endMark];\n if (!endTime) {\n return;\n }\n bm3Timings[item.key] = {\n startTime,\n endTime\n };\n });\n return bm3Timings;\n}\nexport function UFOBM3TimingsToUFO({\n marks,\n timings\n}) {\n const interactionContext = useContext(UFOInteractionContext);\n const interactionId = getInteractionId().current;\n useMemo(() => {\n if (interactionContext != null && interactionId != null && marks != null && timings != null) {\n const interactionType = getCurrentInteractionType(interactionId);\n if (interactionType === 'press') {\n return;\n }\n const bm3Timings = getBm3Timings(marks, timings);\n interactionContext.addCustomTimings(bm3Timings);\n }\n }, [interactionContext, interactionId, marks, timings]);\n return null;\n}\nexport function addBM3TimingsToUFO(marks, timingsConfig) {\n const interactionId = getInteractionId().current;\n if (interactionId) {\n const interactionType = getCurrentInteractionType(interactionId);\n if (interactionType === 'press') {\n return;\n }\n const bm3Timings = getBm3Timings(marks, timingsConfig);\n addCustomTiming(interactionId, [], bm3Timings);\n }\n}","const timings = [];\nexport function addTimingFromPerformanceMark(name, startMark, stopMark, cleanStart = false, cleanStop = false) {\n timings.push({\n name,\n startMark,\n stopMark,\n cleanStart,\n cleanStop\n });\n}\nexport function getTimings() {\n const reportedTimingsObj = {};\n timings.forEach(({\n name,\n startMark,\n stopMark,\n cleanStart,\n cleanStop\n }) => {\n const startEntryList = performance.getEntriesByName(startMark);\n const stopEntryList = performance.getEntriesByName(stopMark);\n if ((startEntryList === null || startEntryList === void 0 ? void 0 : startEntryList.length) > 0 && (stopEntryList === null || stopEntryList === void 0 ? void 0 : stopEntryList.length) > 0) {\n const startEntry = startEntryList[startEntryList.length - 1];\n const stopEntry = stopEntryList[stopEntryList.length - 1];\n const {\n startTime\n } = startEntry;\n const duration = stopEntry.startTime - startTime;\n const timing = {\n startTime: Math.round(startTime),\n duration: Math.round(duration)\n };\n reportedTimingsObj[name] = timing;\n }\n if (cleanStart) {\n performance.clearMarks(startMark);\n }\n if (cleanStop) {\n performance.clearMarks(stopMark);\n }\n });\n return reportedTimingsObj;\n}","import { roundEpsilon } from '@atlassian/ufo-round-number';\nconst getPerformanceObject = () => {\n var _window;\n return ((_window = window) !== null && _window !== void 0 ? _window : {}).performance;\n};\nconst getPerformanceObserverObject = () => {\n var _window2;\n return ((_window2 = window) !== null && _window2 !== void 0 ? _window2 : {}).PerformanceObserver;\n};\nexport const resourceTimingBuffer = {\n timings: [],\n maxSize: 1000,\n observer: null,\n transformResource: entry => {\n var _entry$serverTiming;\n const duration = roundEpsilon(entry.duration);\n const totalBackendTimeEntry = (_entry$serverTiming = entry.serverTiming) === null || _entry$serverTiming === void 0 ? void 0 : _entry$serverTiming.find(\n // timing name should come from per-product config in the future\n timing => timing.name === 'total' || timing.name === 'filter-request-papi');\n const serverTime = totalBackendTimeEntry ? roundEpsilon(totalBackendTimeEntry.duration) : undefined;\n const networkTime = serverTime ? duration - serverTime : undefined;\n return {\n name: entry.name,\n initiatorType: entry.initiatorType,\n transferSize: entry.transferSize,\n startTime: roundEpsilon(entry.startTime),\n duration: roundEpsilon(entry.duration),\n fetchStart: roundEpsilon(entry.fetchStart || 0),\n workerStart: roundEpsilon(entry.workerStart || 0),\n responseStart: roundEpsilon(entry.responseStart || 0),\n serverTime,\n networkTime\n };\n },\n start: () => {\n var _performance$getEntri;\n const performance = getPerformanceObject();\n const PerformanceObserver = getPerformanceObserverObject();\n if (!PerformanceObserver || !performance || typeof PerformanceObserver === 'undefined') {\n return;\n }\n if (resourceTimingBuffer.observer) {\n return;\n }\n const resources = (_performance$getEntri = performance.getEntriesByType) === null || _performance$getEntri === void 0 ? void 0 : _performance$getEntri.call(performance, 'resource');\n if (resources) {\n resourceTimingBuffer.timings = resources.map(resource => resourceTimingBuffer.transformResource(resource));\n }\n resourceTimingBuffer.observer = new PerformanceObserver(resourceTimingBuffer.addTimings);\n resourceTimingBuffer.observer.observe({\n entryTypes: ['resource']\n });\n },\n stop: () => {\n if (resourceTimingBuffer.observer) {\n resourceTimingBuffer.observer.disconnect();\n resourceTimingBuffer.observer = null;\n }\n resourceTimingBuffer.timings = [];\n },\n addTimings: list => {\n const entries = list.getEntries().map(entry => resourceTimingBuffer.transformResource(entry));\n const overflow = resourceTimingBuffer.timings.length + entries.length;\n if (overflow > resourceTimingBuffer.maxSize) {\n const fieldsToRemove = overflow - resourceTimingBuffer.maxSize;\n resourceTimingBuffer.timings.splice(0, fieldsToRemove);\n }\n resourceTimingBuffer.timings.push(...entries);\n }\n};\nconst isValidTiming = (timing, startTime, endTime) => timing.startTime >= startTime && timing.startTime + timing.duration <= endTime;\nexport const filterResourceTimings = (startTime, endTime) => {\n const performance = getPerformanceObject();\n const PerformanceObserver = getPerformanceObserverObject();\n if (!PerformanceObserver || !resourceTimingBuffer.observer) {\n const resources = performance === null || performance === void 0 ? void 0 : performance.getEntriesByType('resource');\n if (resources) {\n return resources.filter(timing => isValidTiming(timing, startTime, endTime));\n }\n return null;\n }\n return resourceTimingBuffer.timings.filter(timing => isValidTiming(timing, startTime, endTime));\n};","import { getConfig as getConfigUFO } from '@atlassian/ufo-config';\nimport { roundEpsilon } from '@atlassian/ufo-round-number';\nimport { getConfig } from './common/utils/config';\nimport { filterResourceTimings } from './common/utils/resource-timing-buffer';\nconst cacheableTypes = ['script', 'link'];\nconst resourceTypes = ['fetch', 'xmlhttprequest'];\nconst CACHE_NETWORK = 'network';\nconst CACHE_MEMORY = 'memory';\nconst CACHE_DISK = 'disk';\n\n// eslint-disable-next-line @typescript-eslint/no-invalid-void-type\nconst calculateTransferType = (type, duration, size) => {\n if (!cacheableTypes.includes(type)) {\n return CACHE_NETWORK;\n }\n if ((size === undefined || size === 0) && duration === 0) {\n return CACHE_MEMORY;\n }\n if (size === 0 && duration > 0) {\n return CACHE_DISK;\n }\n if (size === undefined) {\n return null;\n }\n return CACHE_NETWORK;\n};\nconst getWindowObject = () => typeof window !== 'undefined' && !!window ? window : undefined;\nconst hasAccessToResourceSize = (url, type, entry, hasTimingHeaders) => !cacheableTypes.includes(type) || url.includes('localhost') || !!getWindowObject() && url.includes(window.location.hostname) || hasTimingHeaders(url, entry);\nconst getReportedInitiatorTypes = xhrEnabled => {\n const ufoConfig = getConfigUFO();\n if (!(ufoConfig !== null && ufoConfig !== void 0 && ufoConfig.allowedResources)) {\n if (xhrEnabled) {\n return ['script', 'link', 'fetch', 'xmlhttprequest'];\n }\n return ['script', 'link', 'fetch'];\n }\n return ufoConfig.allowedResources;\n};\nconst evaluateAccessToResourceTimings = (url, entry) => !(entry.responseStart === 0 && entry.startTime > entry.responseStart);\n\n// eslint-disable-next-line @typescript-eslint/no-invalid-void-type\nconst getSizeObject = size => size !== undefined ? {\n size\n} : null;\nconst getNetworkData = (item, eventStart, hasTimingHeaders = evaluateAccessToResourceTimings) => {\n const {\n name,\n duration,\n transferSize,\n initiatorType,\n responseStart,\n serverTime,\n networkTime\n } = item;\n const ttfb = roundEpsilon(responseStart - eventStart);\n if (!hasAccessToResourceSize(name, initiatorType, item, hasTimingHeaders)) {\n return {};\n }\n if (cacheableTypes.includes(initiatorType)) {\n const transferType = calculateTransferType(initiatorType, duration, transferSize);\n if (!transferType) {\n return {\n ttfb,\n ...getSizeObject(transferSize)\n };\n }\n if (transferType !== CACHE_NETWORK) {\n return {\n transferType\n };\n }\n return {\n ttfb,\n transferType,\n serverTime,\n networkTime,\n ...getSizeObject(transferSize)\n };\n }\n return {\n ttfb,\n serverTime,\n networkTime,\n ...getSizeObject(transferSize)\n };\n};\nexport const getResourceTimings = (interactionStart, interactionEnd) => {\n const resourceTiming = {};\n if (interactionStart === null) {\n return resourceTiming;\n }\n const resources = filterResourceTimings(interactionStart, interactionEnd);\n if (!(resources !== null && resources !== void 0 && resources.length)) {\n return resourceTiming;\n }\n const {\n xhrFilter,\n sanitiseEndpoints,\n mapResources,\n hasTimingHeaders\n } = getConfig();\n const reportedInitiatorTypes = getReportedInitiatorTypes(!!xhrFilter);\n resources.forEach(item => {\n if (!reportedInitiatorTypes.includes(item.initiatorType)) {\n return;\n }\n const {\n name,\n startTime,\n duration,\n workerStart,\n fetchStart,\n initiatorType\n } = item;\n if (!name) {\n return;\n }\n if (initiatorType === 'xmlhttprequest' && (xhrFilter === undefined || xhrFilter(name) === false)) {\n return;\n }\n const url = resourceTypes.includes(initiatorType) ? sanitiseEndpoints(name) : mapResources(name);\n if (!url || resourceTiming[url]) {\n return;\n }\n resourceTiming[url] = {\n startTime: roundEpsilon(startTime - interactionStart),\n duration: roundEpsilon(duration),\n workerStart: Math.max(roundEpsilon(workerStart - interactionStart), 0),\n fetchStart: Math.max(roundEpsilon(fetchStart - interactionStart), 0),\n type: initiatorType,\n ...getNetworkData(item, interactionStart, hasTimingHeaders)\n };\n });\n return resourceTiming;\n};","const NESTED_METRIC_SEPARATOR = '/';\nconst filterEntry = entry => !(!entry || typeof entry !== 'object' || entry.startTime < 0 || entry.duration < 0);\nconst mapEntry = entry => ({\n startTime: Math.round(entry.startTime),\n duration: Math.round(entry.duration)\n});\nconst SSR_PREFIX = 'ssr';\nconst mapKey = key => {\n if (key === 'total') {\n return SSR_PREFIX;\n }\n return `${SSR_PREFIX}${NESTED_METRIC_SEPARATOR}${key}`;\n};\nlet config;\nexport function configure(ssrConfig) {\n config = ssrConfig;\n}\nexport function getSSRTimings() {\n var _config;\n if (!((_config = config) !== null && _config !== void 0 && _config.getTimings)) {\n return {};\n }\n const timings = config.getTimings();\n if (!timings) {\n return {};\n }\n const ssrTimings = Object.entries(timings).reduce((acc, entry) => {\n if (filterEntry(entry[1])) {\n acc[mapKey(entry[0])] = mapEntry(entry[1]);\n }\n return acc;\n }, {});\n return ssrTimings;\n}\nexport function getSSRSuccess() {\n var _config2;\n return !!((_config2 = config) !== null && _config2 !== void 0 && _config2.getDoneMark());\n}\nexport function getSSRDoneTime() {\n var _config$getDoneMark, _config3;\n return (_config$getDoneMark = (_config3 = config) === null || _config3 === void 0 ? void 0 : _config3.getDoneMark()) !== null && _config$getDoneMark !== void 0 ? _config$getDoneMark : undefined;\n}\nexport function getSSRFeatureFlags() {\n var _config4;\n if (!((_config4 = config) !== null && _config4 !== void 0 && _config4.getFeatureFlags)) {\n return undefined;\n }\n try {\n var _config$getFeatureFla;\n return (_config$getFeatureFla = config.getFeatureFlags()) !== null && _config$getFeatureFla !== void 0 ? _config$getFeatureFla : undefined;\n // eslint-disable-next-line no-empty\n } catch (e) {}\n return undefined;\n}","export const sanitizeUfoName = name => {\n const nameNoUnderscore = name.replace(/_/g, '-');\n return nameNoUnderscore;\n};","import Bowser from 'bowser-ultralight';\nimport { getLighthouseMetrics } from '@atlassian/ufo-additional-payload';\nimport * as bundleEvalTiming from '@atlassian/ufo-bundle-eval-timing';\nimport { getConfig, getUfoNameOverrides } from '@atlassian/ufo-config';\nimport { getBm3Timings } from '@atlassian/ufo-custom-timings';\nimport { getLastVisibleChangeTimestamp } from '@atlassian/ufo-dropbox-ttvc';\nimport { getPageVisibilityState } from '@atlassian/ufo-hidden-timing';\nimport * as initialPageLoadExtraTiming from '@atlassian/ufo-initial-page-load-extra-timing';\nimport * as resourceTiming from '@atlassian/ufo-resource-timing';\nimport { roundEpsilon } from '@atlassian/ufo-round-number';\nimport * as ssr from '@atlassian/ufo-ssr';\nimport { getVCObserver } from '@atlassian/ufo-vc';\nimport { sanitizeUfoName } from './common/utils';\nconst REACT_UFO_VERSION = '1.0.1';\nfunction getUfoNameOverride(interaction) {\n const {\n ufoName,\n apdex\n } = interaction;\n try {\n const ufoNameOverrides = getUfoNameOverrides();\n if (ufoNameOverrides != null) {\n const metricKey = apdex.length > 0 ? apdex[0].key : '';\n if (ufoNameOverrides[ufoName][metricKey]) {\n return ufoNameOverrides[ufoName][metricKey];\n }\n }\n return ufoName;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e) {\n return ufoName;\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction isSegmentLabel(obj) {\n return obj && typeof obj.name === 'string' && typeof obj.segmentId === 'string';\n}\nfunction stringifyLabelStackFully(labelStack) {\n return labelStack.map(l => {\n if (isSegmentLabel(l)) {\n return `${l.name}:${l.segmentId}`;\n }\n return l.name;\n }).join('/');\n}\nfunction labelStackStartWith(labelStack, startWith) {\n return stringifyLabelStackFully(labelStack).startsWith(stringifyLabelStackFully(startWith));\n}\nfunction getEarliestLegacyStopTime(interaction, labelStack) {\n let earliestLegacyStopTime = null;\n interaction.apdex.forEach(a => {\n var _a$labelStack, _earliestLegacyStopTi;\n if (!(a !== null && a !== void 0 && a.stopTime)) {\n return;\n }\n if (!labelStackStartWith((_a$labelStack = a.labelStack) !== null && _a$labelStack !== void 0 ? _a$labelStack : [], labelStack)) {\n return;\n }\n if (a.stopTime > interaction.start && ((_earliestLegacyStopTi = earliestLegacyStopTime) !== null && _earliestLegacyStopTi !== void 0 ? _earliestLegacyStopTi : a.stopTime) >= a.stopTime) {\n earliestLegacyStopTime = a.stopTime;\n }\n });\n return earliestLegacyStopTime;\n}\nfunction getBm3EndTimeOrFallbackValue(interaction, labelStack = [], fallbackValue = interaction.end) {\n var _getEarliestLegacySto;\n if (interaction.type === 'press') {\n return fallbackValue;\n }\n return (_getEarliestLegacySto = getEarliestLegacyStopTime(interaction, labelStack)) !== null && _getEarliestLegacySto !== void 0 ? _getEarliestLegacySto : fallbackValue;\n}\nconst getPageVisibilityUpToTTI = interaction => {\n const {\n start\n } = interaction;\n const bm3EndTimeOrInteractionEndTime = getBm3EndTimeOrFallbackValue(interaction);\n return getPageVisibilityState(start, bm3EndTimeOrInteractionEndTime);\n};\nconst getPageVisibilityUpToTTAI = interaction => {\n const {\n start,\n end\n } = interaction;\n return getPageVisibilityState(start, end);\n};\nconst getVisibilityStateFromPerformance = stop => {\n try {\n const results = performance.getEntriesByType('visibility-state');\n if (!results || results.length === 0) {\n return null;\n }\n return results.reduce((acc = null, {\n name,\n startTime\n }) => {\n if (startTime > stop) {\n return acc;\n }\n if (acc === null && name === null) {\n return null;\n }\n if (acc === null) {\n return name;\n }\n if (acc !== name) {\n return 'mixed';\n }\n return acc;\n }, null);\n } catch (e) {\n return null;\n }\n};\nconst getMoreAccuratePageVisibilityUpToTTI = interaction => {\n const old = getPageVisibilityUpToTTI(interaction);\n const tti = getEarliestLegacyStopTime(interaction, []);\n if (!tti) {\n return old;\n }\n const buffered = getVisibilityStateFromPerformance(tti);\n if (!buffered) {\n return old;\n }\n if (buffered !== old) {\n return 'mixed';\n }\n return old;\n};\nconst getMoreAccuratePageVisibilityUpToTTAI = interaction => {\n const old = getPageVisibilityUpToTTAI(interaction);\n const buffered = getVisibilityStateFromPerformance(interaction.end);\n if (!buffered) {\n return old;\n }\n if (buffered !== old) {\n return 'mixed';\n }\n return old;\n};\nconst getInteractionStatus = interaction => {\n const originalInteractionStatus = interaction.abortReason ? 'ABORTED' : 'SUCCEEDED';\n const hasBm3TTI = interaction.apdex.length > 0;\n const overrideStatus = hasBm3TTI ? 'SUCCEEDED' : originalInteractionStatus;\n return {\n originalInteractionStatus,\n overrideStatus\n };\n};\nconst getResourceTimings = (start, end) => {\n var _resourceTiming$getRe;\n return (_resourceTiming$getRe = resourceTiming.getResourceTimings(start, end)) !== null && _resourceTiming$getRe !== void 0 ? _resourceTiming$getRe : undefined;\n};\nconst getBundleEvalTimings = start => bundleEvalTiming.getBundleEvalTimings(start);\nconst getSSRSuccess = type => type === 'page_load' ? ssr.getSSRSuccess() : undefined;\nconst getSSRFeatureFlags = type => type === 'page_load' ? ssr.getSSRFeatureFlags() : undefined;\nconst getPaintMetrics = type => {\n if (type !== 'page_load') {\n return {};\n }\n const metrics = {};\n performance.getEntriesByType('paint').forEach(entry => {\n if (entry.name === 'first-paint') {\n metrics['metric:fp'] = Math.round(entry.startTime);\n }\n if (entry.name === 'first-contentful-paint') {\n metrics['metric:fcp'] = Math.round(entry.startTime);\n }\n });\n return metrics;\n};\nconst getTTVC = interaction => {\n const config = getConfig();\n if (!(config !== null && config !== void 0 && config.enableTTVC)) {\n return {};\n }\n if (interaction.type !== 'page_load' && interaction.type !== 'transition') {\n return {};\n }\n const ttvc = getLastVisibleChangeTimestamp() - interaction.measureStart;\n if (ttvc < 0) {\n return {};\n }\n return {\n 'custom:metric:ttvc': Math.round(ttvc)\n };\n};\nconst getVCMetrics = interaction => {\n var _config$vc, _interaction$apdex, _interaction$apdex$;\n const config = getConfig();\n if (!(config !== null && config !== void 0 && (_config$vc = config.vc) !== null && _config$vc !== void 0 && _config$vc.enabled)) {\n return {};\n }\n if (interaction.type !== 'page_load' && interaction.type !== 'transition') {\n return {};\n }\n const tti = (_interaction$apdex = interaction.apdex) === null || _interaction$apdex === void 0 ? void 0 : (_interaction$apdex$ = _interaction$apdex[0]) === null || _interaction$apdex$ === void 0 ? void 0 : _interaction$apdex$.stopTime;\n const prefix = 'ufo';\n const result = getVCObserver().getVCResult({\n start: interaction.start,\n stop: interaction.end,\n tti,\n prefix\n });\n const VC = result === null || result === void 0 ? void 0 : result['metrics:vc'];\n if (!VC || !(result !== null && result !== void 0 && result[`${prefix}:vc:clean`])) {\n return result;\n }\n const interactionStatus = getInteractionStatus(interaction);\n const pageVisibilityUpToTTAI = getPageVisibilityUpToTTAI(interaction);\n if (interactionStatus.originalInteractionStatus !== 'SUCCEEDED' || pageVisibilityUpToTTAI !== 'visible') {\n return result;\n }\n return {\n ...result,\n 'metric:vc90': VC['90']\n };\n};\nconst getNavigationMetrics = type => {\n if (type !== 'page_load') {\n return {};\n }\n const entries = performance.getEntriesByType('navigation');\n if (entries.length === 0) {\n return {};\n }\n const navigation = entries[0];\n const metrics = {\n // From https://www.w3.org/TR/resource-timing/\n redirectStart: Math.round(navigation.redirectStart),\n redirectEnd: Math.round(navigation.redirectEnd),\n fetchStart: Math.round(navigation.fetchStart),\n domainLookupStart: Math.round(navigation.domainLookupStart),\n domainLookupEnd: Math.round(navigation.domainLookupEnd),\n connectStart: Math.round(navigation.connectStart),\n connectEnd: Math.round(navigation.connectEnd),\n secureConnectionStart: Math.round(navigation.secureConnectionStart),\n requestStart: Math.round(navigation.requestStart),\n responseStart: Math.round(navigation.responseStart),\n responseEnd: Math.round(navigation.responseEnd),\n encodedBodySize: Math.round(navigation.encodedBodySize),\n decodedBodySize: Math.round(navigation.decodedBodySize),\n transferSize: Math.round(navigation.transferSize),\n // From https://www.w3.org/TR/navigation-timing-2/\n redirectCount: navigation.redirectCount,\n type: navigation.type,\n unloadEventEnd: Math.round(navigation.unloadEventEnd),\n unloadEventStart: Math.round(navigation.unloadEventStart),\n workerStart: Math.round(navigation.workerStart),\n nextHopProtocol: navigation.nextHopProtocol\n\n // The following properties are ignored because they provided limited value on a modern stack (e.g. the content\n // is usually rendered and interactive before the dom is fully parsed, dont't play well with streamed content...)\n // * domComplete\n // * domContentLoadedEventEnd\n // * domContentLoadedEventStart\n // * domInteractive\n // * loadEventEnd\n // * loadEventStart\n };\n return {\n 'metrics:navigation': metrics\n };\n};\nconst getPPSMetrics = interaction => {\n var _interaction$apdex2, _interaction$apdex2$;\n const {\n start,\n end\n } = interaction;\n const interactionStatus = getInteractionStatus(interaction);\n const pageVisibilityUpToTTAI = getPageVisibilityUpToTTAI(interaction);\n const ttai = interactionStatus.originalInteractionStatus === 'SUCCEEDED' && pageVisibilityUpToTTAI === 'visible' ? Math.round(end - start) : undefined;\n const payload = {};\n const PPSMetricsAtTTAI = ttai !== undefined ? {\n 'metrics:@ttai': getLighthouseMetrics({\n start,\n stop: interaction.end\n })\n } : null;\n PPSMetricsAtTTAI !== null && Object.assign(payload, PPSMetricsAtTTAI);\n const tti = (_interaction$apdex2 = interaction.apdex) === null || _interaction$apdex2 === void 0 ? void 0 : (_interaction$apdex2$ = _interaction$apdex2[0]) === null || _interaction$apdex2$ === void 0 ? void 0 : _interaction$apdex2$.stopTime;\n const PPSMetricsAtTTI = tti !== undefined ? getLighthouseMetrics({\n start,\n stop: tti\n }) : null;\n PPSMetricsAtTTI !== null && Object.assign(payload, PPSMetricsAtTTI);\n return payload;\n};\nfunction getSSRProperties(type) {\n return {\n 'ssr:success': getSSRSuccess(type),\n 'ssr:featureFlags': getSSRFeatureFlags(type)\n };\n}\nconst getBrowserMetadata = () => {\n const data = {};\n if (navigator.userAgent != null) {\n const browser = Bowser.getParser(navigator.userAgent);\n data['event:browser:name'] = browser.getBrowserName();\n data['event:browser:version'] = browser.getBrowserVersion();\n }\n if (navigator.hardwareConcurrency != null) {\n data['event:cpus'] = navigator.hardwareConcurrency;\n }\n if (navigator.deviceMemory != null) {\n data['event:memory'] = navigator.deviceMemory;\n }\n\n // eslint-disable-next-line compat/compat\n if (navigator.connection != null) {\n data['event:network:effectiveType'] = navigator.connection.effectiveType;\n data['event:network:rtt'] = navigator.connection.rtt;\n data['event:network:downlink'] = navigator.connection.downlink;\n }\n return data;\n};\nconst getTracingContextData = interaction => {\n const {\n trace,\n start\n } = interaction;\n let tracingContextData = {};\n if (trace) {\n tracingContextData = {\n 'ufo:tracingContext': {\n 'X-B3-TraceId': trace.traceId,\n 'X-B3-SpanId': trace.spanId,\n // eslint-disable-next-line compat/compat\n browserTimeOrigin: +(performance.timeOrigin + start).toFixed(2)\n }\n };\n }\n return tracingContextData;\n};\n\n// interaction metric\n\nfunction optimizeLabelStack(labelStack) {\n return labelStack.map(ls => ({\n n: ls.name,\n ...(ls.segmentId ? {\n s: ls.segmentId\n } : {})\n }));\n}\nfunction optimizeCustomData(interaction) {\n const {\n customData,\n legacyMetrics\n } = interaction;\n const customDataMap = customData.reduce((result, {\n labelStack,\n data\n }) => {\n var _result$get$data, _result$get;\n const label = stringifyLabelStackFully(labelStack);\n const value = (_result$get$data = (_result$get = result.get(label)) === null || _result$get === void 0 ? void 0 : _result$get.data) !== null && _result$get$data !== void 0 ? _result$get$data : {};\n result.set(label, {\n labelStack: optimizeLabelStack(labelStack),\n data: Object.assign(value, data)\n });\n return result;\n }, new Map());\n if (legacyMetrics) {\n const legacyMetricsFiltered = legacyMetrics.filter(item => item.type === 'PAGE_LOAD').reduce((result, currentValue) => {\n for (const [key, value] of Object.entries(currentValue.custom || {})) {\n var _result$get$data2, _result$get2;\n const label = stringifyLabelStackFully([]);\n const labelValue = (_result$get$data2 = (_result$get2 = result.get(label)) === null || _result$get2 === void 0 ? void 0 : _result$get2.data) !== null && _result$get$data2 !== void 0 ? _result$get$data2 : {};\n result.set(label, {\n labelStack: optimizeLabelStack([]),\n data: Object.assign(labelValue, {\n [key]: value\n })\n });\n }\n return result;\n }, new Map());\n return [...customDataMap.values(), ...legacyMetricsFiltered.values()];\n }\n return [...customDataMap.values()];\n}\nfunction optimizeReactProfilerTimings(reactProfilerTimings, interactionStart) {\n const reactProfilerTimingsMap = reactProfilerTimings.reduce((result, {\n labelStack,\n startTime,\n commitTime,\n actualDuration,\n type\n }) => {\n if (labelStack && startTime >= interactionStart) {\n const label = stringifyLabelStackFully(labelStack);\n const start = Math.round(startTime);\n const end = Math.round(commitTime);\n const timing = result.get(label) || {\n labelStack: optimizeLabelStack(labelStack),\n startTime: start,\n endTime: end,\n mountCount: 0,\n rerenderCount: 0,\n renderDuration: 0\n };\n if (start < timing.startTime) {\n timing.startTime = start;\n }\n if (end > timing.endTime) {\n timing.endTime = end;\n }\n if (type === 'mount') {\n timing.mountCount += 1;\n }\n if (type === 'update') {\n timing.rerenderCount += 1;\n }\n timing.renderDuration += Math.round(actualDuration);\n result.set(label, timing);\n }\n return result;\n }, new Map());\n return [...reactProfilerTimingsMap.values()];\n}\nfunction optimizeRedirects(redirects, interactionStart) {\n let lastRedirectTime = interactionStart;\n const updatedRedirects = redirects.sort((a, b) => a.time - b.time).reduce((result, redirect) => {\n const {\n fromInteractionName,\n time\n } = redirect;\n if (lastRedirectTime >= interactionStart) {\n result.push({\n labelStack: [{\n n: fromInteractionName\n }],\n startTime: Math.round(lastRedirectTime),\n endTime: Math.round(time)\n });\n }\n lastRedirectTime = time;\n return result;\n }, []);\n return updatedRedirects;\n}\nfunction optimizeHoldInfo(holdInfo, interactionStart) {\n const holdInfoMap = holdInfo.reduce((result, hold) => {\n const {\n labelStack,\n name,\n start,\n end,\n ignoreOnSubmit\n } = hold;\n if (labelStack && !ignoreOnSubmit && start >= interactionStart) {\n const label = stringifyLabelStackFully([...labelStack, {\n name\n }]);\n const startTime = Math.round(start);\n const endTime = Math.round(end);\n const timing = result.get(label) || {\n labelStack: optimizeLabelStack([...labelStack, {\n name\n }]),\n startTime,\n endTime\n };\n if (startTime < timing.startTime) {\n timing.startTime = startTime;\n }\n if (endTime > timing.endTime) {\n timing.endTime = endTime;\n }\n result.set(label, timing);\n }\n return result;\n }, new Map());\n return [...holdInfoMap.values()];\n}\nfunction optimizeSpans(spans, interactionStart) {\n const updatedSpans = spans.reduce((result, span) => {\n const {\n labelStack,\n type,\n name,\n start,\n end\n } = span;\n if (labelStack && start >= interactionStart) {\n result.push({\n labelStack: optimizeLabelStack([...labelStack, {\n name\n }]),\n startTime: Math.round(start),\n endTime: Math.round(end),\n type\n });\n }\n return result;\n }, []);\n return updatedSpans;\n}\nfunction optimizeRequestInfo(requestInfo, interactionStart) {\n const updatedRequestInfo = requestInfo.reduce((result, reqInfo) => {\n const {\n labelStack,\n name,\n start,\n end,\n networkStart,\n networkComplete\n } = reqInfo;\n const startTime = networkStart !== null && networkStart !== void 0 ? networkStart : start;\n const endTime = networkComplete !== null && networkComplete !== void 0 ? networkComplete : end;\n if (labelStack && start >= interactionStart && endTime) {\n result.push({\n labelStack: optimizeLabelStack([...labelStack, {\n name\n }]),\n startTime: Math.round(startTime),\n endTime: Math.round(endTime)\n });\n }\n return result;\n }, []);\n return updatedRequestInfo;\n}\nfunction optimizeCustomTimings(customTimings, interactionStart) {\n const updatedCustomTimings = customTimings.reduce((result, item) => {\n Object.keys(item.data).forEach(key => {\n if (item.data[key].startTime >= interactionStart) {\n result.push({\n labelStack: [{\n n: key\n }],\n startTime: Math.round(item.data[key].startTime),\n endTime: Math.round(item.data[key].endTime)\n });\n }\n });\n return result;\n }, []);\n return updatedCustomTimings;\n}\nfunction optimizeMarks(marks) {\n return marks.map(({\n labelStack,\n time,\n ...others\n }) => ({\n ...others,\n labelStack: labelStack && optimizeLabelStack(labelStack),\n time: Math.round(time)\n }));\n}\nfunction optimizeApdex(apdex) {\n return apdex.map(({\n stopTime,\n labelStack,\n ...others\n }) => ({\n ...others,\n stopTime: Math.round(stopTime),\n ...(labelStack ? {\n labelStack: optimizeLabelStack(labelStack)\n } : {})\n }));\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction objectToArray(obj = {}) {\n return Object.keys(obj).reduce((result, key) => {\n result.push({\n label: key,\n data: obj[key]\n });\n return result;\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n []);\n}\nfunction getBM3SubmetricsTimings(submetrics) {\n if (!submetrics) {\n return null;\n }\n const submetricsTimings = submetrics.filter(item => {\n return typeof item.stop === 'number' && !!item.key && typeof item.start === 'number';\n }).map(item => {\n let childSubmetrics;\n const newKey = `include/${item.key}`;\n if (item.submetrics) {\n childSubmetrics = getBM3SubmetricsTimings(item.submetrics);\n }\n return {\n [newKey]: {\n endTime: item.stop - item.start,\n startTime: item.start\n },\n ...(childSubmetrics ? childSubmetrics : {})\n };\n });\n return submetricsTimings;\n}\nfunction getBm3TrackerTimings(interaction) {\n const interactionLegacyMetrics = interaction.legacyMetrics;\n if (!interactionLegacyMetrics) {\n return {};\n }\n const legacyMetrics = interactionLegacyMetrics.map(item => {\n var _item$config, _item$marks;\n return {\n key: item.key,\n startTime: item.start,\n stopTime: item.stop,\n type: (_item$config = item.config) === null || _item$config === void 0 ? void 0 : _item$config.type,\n fmp: ((_item$marks = item.marks) === null || _item$marks === void 0 ? void 0 : _item$marks['fmp']) || item.stop,\n source: 'bm3',\n timings: getBm3Timings(item.marks, item.config.timings),\n submetrics: getBM3SubmetricsTimings(item.submetrics),\n pageVisibleState: item.pageVisibleState\n };\n }).filter(item => !!item.type);\n return {\n legacyMetrics\n };\n}\nfunction createInteractionMetricsPayload(interaction, interactionId) {\n var _window$location, _config$additionalPay;\n const interactionPayloadStart = performance.now();\n const config = getConfig();\n if (!config) {\n throw Error('UFO Configuration not provided');\n }\n const {\n end,\n start,\n ufoName,\n knownSegments,\n rate,\n type,\n abortReason,\n routeName,\n featureFlags,\n previousInteractionName,\n isPreviousInteractionAborted,\n abortedByInteractionName\n } = interaction;\n const pageVisibilityAtTTI = getPageVisibilityUpToTTI(interaction);\n const pageVisibilityAtTTAI = getPageVisibilityUpToTTAI(interaction);\n const segments = config.killswitchNestedSegments ? [] : knownSegments;\n const isDetailedPayload = pageVisibilityAtTTAI === 'visible';\n const isPageLoad = type === 'page_load';\n const calculatePageVisibilityFromTheStartOfPageLoad = config.enableBetterPageVisibilityApi && isPageLoad;\n const moreAccuratePageVisibilityAtTTI = calculatePageVisibilityFromTheStartOfPageLoad ? getMoreAccuratePageVisibilityUpToTTI(interaction) : null;\n const moreAccuratePageVisibilityAtTTAI = calculatePageVisibilityFromTheStartOfPageLoad ? getMoreAccuratePageVisibilityUpToTTAI(interaction) : null;\n const labelStack = interaction.labelStack ? {\n labelStack: optimizeLabelStack(interaction.labelStack)\n } : {};\n // Page Load\n const getPageLoadInteractionMetrics = () => {\n var _config$ssr, _config$ssr2, _config$ssr3;\n if (!isPageLoad) {\n return {};\n }\n const config = getConfig();\n const SSRDoneTimeValue = config !== null && config !== void 0 && (_config$ssr = config.ssr) !== null && _config$ssr !== void 0 && _config$ssr.getSSRDoneTime ? config === null || config === void 0 ? void 0 : (_config$ssr2 = config.ssr) === null || _config$ssr2 === void 0 ? void 0 : _config$ssr2.getSSRDoneTime() : ssr.getSSRDoneTime();\n const SSRDoneTime = SSRDoneTimeValue !== undefined ? {\n SSRDoneTime: Math.round(SSRDoneTimeValue)\n } : {};\n return {\n ...SSRDoneTime,\n isBM3ConfigSSRDoneAsFmp: interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp,\n isUFOConfigSSRDoneAsFmp: interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp || !!(config !== null && config !== void 0 && (_config$ssr3 = config.ssr) !== null && _config$ssr3 !== void 0 && _config$ssr3.getSSRDoneTime)\n };\n };\n // Detailed payload. Page visibility = visible\n const getDetailedInteractionMetrics = () => {\n if (!isDetailedPayload) {\n return {};\n }\n return {\n errors: interaction.errors.map(({\n labelStack,\n ...others\n }) => ({\n ...others,\n labelStack: labelStack && optimizeLabelStack(labelStack)\n })),\n holdActive: [...interaction.holdActive.values()],\n redirects: optimizeRedirects(interaction.redirects, start),\n holdInfo: optimizeHoldInfo(interaction.holdInfo, start),\n spans: optimizeSpans(interaction.spans, start),\n requestInfo: optimizeRequestInfo(interaction.requestInfo, start),\n customTimings: optimizeCustomTimings(interaction.customTimings, start),\n bundleEvalTimings: objectToArray(getBundleEvalTimings(start)),\n resourceTimings: objectToArray(getResourceTimings(start, end))\n };\n };\n // Page load & detailed payload\n const getPageLoadDetailedInteractionMetrics = () => {\n var _config$ssr4;\n if (!isPageLoad || !isDetailedPayload) {\n return {};\n }\n const config = getConfig();\n return {\n initialPageLoadExtraTimings: objectToArray(initialPageLoadExtraTiming.getTimings()),\n SSRTimings: config !== null && config !== void 0 && (_config$ssr4 = config.ssr) !== null && _config$ssr4 !== void 0 && _config$ssr4.getSSRTimings ? config.ssr.getSSRTimings() : objectToArray(ssr.getSSRTimings())\n };\n };\n const newUFOName = sanitizeUfoName(ufoName);\n return {\n actionSubject: 'experience',\n action: 'measured',\n eventType: 'operational',\n source: 'measured',\n tags: ['observability'],\n attributes: {\n properties: {\n // basic\n 'event:hostname': ((_window$location = window.location) === null || _window$location === void 0 ? void 0 : _window$location.hostname) || 'unknown',\n 'event:product': config.product,\n 'event:schema': '1.0.0',\n 'event:source': {\n name: 'react-ufo/web',\n version: REACT_UFO_VERSION,\n payloadSource: 'platform'\n },\n 'event:region': config.region || 'unknown',\n 'experience:key': 'custom.interaction-metrics',\n 'experience:name': newUFOName,\n // root\n ...getBrowserMetadata(),\n ...getSSRProperties(type),\n ...getPPSMetrics(interaction),\n ...getPaintMetrics(type),\n ...getTTVC(interaction),\n ...getNavigationMetrics(type),\n ...getVCMetrics(interaction),\n ...((_config$additionalPay = config.additionalPayloadData) === null || _config$additionalPay === void 0 ? void 0 : _config$additionalPay.call(config, interaction)),\n ...getTracingContextData(interaction),\n interactionMetrics: {\n namePrefix: config.namePrefix || '',\n segmentPrefix: config.segmentPrefix || '',\n interactionId,\n pageVisibilityAtTTI,\n pageVisibilityAtTTAI,\n experimental__pageVisibilityAtTTI: moreAccuratePageVisibilityAtTTI,\n experimental__pageVisibilityAtTTAI: moreAccuratePageVisibilityAtTTAI,\n // raw interaction metrics\n rate,\n routeName,\n type,\n abortReason,\n featureFlags,\n previousInteractionName,\n isPreviousInteractionAborted,\n abortedByInteractionName,\n // performance\n apdex: optimizeApdex(interaction.apdex),\n end: Math.round(end),\n start: Math.round(start),\n segments: segments.map(({\n labelStack,\n ...others\n }) => ({\n ...others,\n labelStack: optimizeLabelStack(labelStack)\n })),\n marks: optimizeMarks(interaction.marks),\n customData: optimizeCustomData(interaction),\n reactProfilerTimings: optimizeReactProfilerTimings(interaction.reactProfilerTimings, start),\n ...labelStack,\n ...getPageLoadInteractionMetrics(),\n ...getDetailedInteractionMetrics(),\n ...getPageLoadDetailedInteractionMetrics(),\n ...getBm3TrackerTimings(interaction)\n },\n 'ufo:payloadTime': roundEpsilon(performance.now() - interactionPayloadStart)\n }\n }\n };\n}\nexport function createPayloads(interactionId, interaction) {\n const ufoNameOverride = getUfoNameOverride(interaction);\n const modifiedInteraction = {\n ...interaction,\n ufoName: ufoNameOverride\n };\n const interactionMetricsPayload = createInteractionMetricsPayload(modifiedInteraction, interactionId);\n return [interactionMetricsPayload];\n}","import { roundEpsilon } from '@atlassian/ufo-round-number';\nlet config = null;\nexport function configure(bundleEvalTimingConfiguration) {\n config = bundleEvalTimingConfiguration;\n}\nconst getPerformanceObject = () => {\n var _window;\n return ((_window = window) !== null && _window !== void 0 ? _window : {}).performance;\n};\nexport function getBundleEvalTimings(interactionStartTime) {\n if (config == null) {\n return {};\n }\n const started = {};\n const timings = {};\n const cachedConfig = config;\n const performance = getPerformanceObject();\n performance === null || performance === void 0 ? void 0 : performance.getEntriesByType('mark').forEach(mark => {\n const result = cachedConfig.mapPerformanceMark(mark.name);\n if (!result) {\n return;\n }\n const {\n type,\n name\n } = result;\n if (type === 'start' && mark.startTime >= interactionStartTime) {\n started[name] = mark;\n return;\n }\n if (type === 'end' && started[name]) {\n timings[name] = {\n startTime: roundEpsilon(started[name].startTime - interactionStartTime),\n duration: roundEpsilon(mark.startTime - started[name].startTime)\n };\n delete started[name];\n }\n });\n if (Object.keys(timings).length === 0) {\n return {};\n }\n return timings;\n}"],"names":["roundEpsilon","num","places","factor","Math","pow","round","Number","EPSILON","getBm3Timings","marks","timingConfigs","bm3Timings","forEach","item","startMark","endMark","startTime","endTime","key","timings","getTimings","reportedTimingsObj","name","stopMark","cleanStart","cleanStop","startEntryList","performance","getEntriesByName","stopEntryList","length","startEntry","stopEntry","duration","timing","clearMarks","_window","window","getPerformanceObserverObject","_window2","PerformanceObserver","resourceTimingBuffer","maxSize","observer","transformResource","entry","_entry$serverTiming","totalBackendTimeEntry","serverTiming","find","serverTime","undefined","networkTime","initiatorType","transferSize","fetchStart","workerStart","responseStart","start","_performance$getEntri","resources","getEntriesByType","call","map","resource","addTimings","observe","entryTypes","stop","disconnect","list","entries","getEntries","overflow","fieldsToRemove","splice","push","isValidTiming","cacheableTypes","resourceTypes","CACHE_NETWORK","evaluateAccessToResourceTimings","url","getSizeObject","size","getNetworkData","eventStart","hasTimingHeaders","ttfb","type","includes","location","hostname","hasAccessToResourceSize","transferType","calculateTransferType","filterEntry","mapEntry","mapKey","getSSRTimings","_config","Object","reduce","acc","sanitizeUfoName","replace","REACT_UFO_VERSION","stringifyLabelStackFully","labelStack","l","obj","segmentId","join","getEarliestLegacyStopTime","interaction","earliestLegacyStopTime","apdex","a","_a$labelStack","_earliestLegacyStopTi","stopTime","startWith","startsWith","labelStackStartWith","getPageVisibilityUpToTTI","bm3EndTimeOrInteractionEndTime","fallbackValue","end","_getEarliestLegacySto","getBm3EndTimeOrFallbackValue","getPageVisibilityUpToTTAI","getVisibilityStateFromPerformance","results","e","getMoreAccuratePageVisibilityUpToTTI","old","tti","buffered","getMoreAccuratePageVisibilityUpToTTAI","getInteractionStatus","originalInteractionStatus","abortReason","overrideStatus","_resourceTiming$getRe","interactionStart","interactionEnd","resourceTiming","filter","filterResourceTimings","xhrFilter","sanitiseEndpoints","mapResources","reportedInitiatorTypes","xhrEnabled","ufoConfig","allowedResources","getReportedInitiatorTypes","max","_config2","getDoneMark","_config4","getFeatureFlags","_config$getFeatureFla","getPaintMetrics","metrics","getTTVC","config","enableTTVC","ttvc","measureStart","getVCMetrics","_config$vc","_interaction$apdex","_interaction$apdex$","vc","enabled","result","getVCResult","prefix","VC","interactionStatus","pageVisibilityUpToTTAI","getNavigationMetrics","navigation","redirectStart","redirectEnd","domainLookupStart","domainLookupEnd","connectStart","connectEnd","secureConnectionStart","requestStart","responseEnd","encodedBodySize","decodedBodySize","redirectCount","unloadEventEnd","unloadEventStart","nextHopProtocol","getPPSMetrics","_interaction$apdex2","_interaction$apdex2$","payload","PPSMetricsAtTTAI","assign","PPSMetricsAtTTI","getSSRProperties","getBrowserMetadata","data","navigator","userAgent","browser","getBrowserName","getBrowserVersion","hardwareConcurrency","deviceMemory","connection","effectiveType","rtt","downlink","getTracingContextData","trace","tracingContextData","traceId","spanId","browserTimeOrigin","timeOrigin","toFixed","optimizeLabelStack","ls","n","s","optimizeCustomData","customData","legacyMetrics","customDataMap","_result$get$data","_result$get","label","value","get","set","Map","legacyMetricsFiltered","currentValue","custom","_result$get$data2","_result$get2","labelValue","values","optimizeRedirects","redirects","lastRedirectTime","sort","b","time","redirect","fromInteractionName","optimizeSpans","spans","span","optimizeRequestInfo","requestInfo","reqInfo","networkStart","networkComplete","optimizeCustomTimings","customTimings","keys","objectToArray","getBM3SubmetricsTimings","submetrics","childSubmetrics","newKey","getBm3TrackerTimings","interactionLegacyMetrics","_item$config","_item$marks","fmp","source","pageVisibleState","createInteractionMetricsPayload","interactionId","_window$location","_config$additionalPay","interactionPayloadStart","now","Error","ufoName","knownSegments","rate","routeName","featureFlags","previousInteractionName","isPreviousInteractionAborted","abortedByInteractionName","pageVisibilityAtTTI","pageVisibilityAtTTAI","segments","killswitchNestedSegments","isDetailedPayload","isPageLoad","calculatePageVisibilityFromTheStartOfPageLoad","enableBetterPageVisibilityApi","moreAccuratePageVisibilityAtTTI","moreAccuratePageVisibilityAtTTAI","newUFOName","actionSubject","action","eventType","tags","attributes","properties","product","version","payloadSource","region","additionalPayloadData","interactionMetrics","namePrefix","segmentPrefix","experimental__pageVisibilityAtTTI","experimental__pageVisibilityAtTTAI","others","reactProfilerTimings","commitTime","actualDuration","mountCount","rerenderCount","renderDuration","_config$ssr","_config$ssr2","_config$ssr3","SSRDoneTimeValue","ssr","getSSRDoneTime","_config$getDoneMark","_config3","SSRDoneTime","isBM3ConfigSSRDoneAsFmp","metaData","__legacy__bm3ConfigSSRDoneAsFmp","isUFOConfigSSRDoneAsFmp","getPageLoadInteractionMetrics","errors","holdActive","holdInfo","hold","ignoreOnSubmit","bundleEvalTimings","resourceTimings","getDetailedInteractionMetrics","_config$ssr4","initialPageLoadExtraTimings","SSRTimings","getPageLoadDetailedInteractionMetrics","createPayloads","ufoNameOverride","ufoNameOverrides","metricKey","getUfoNameOverride"],"sourceRoot":""}