@atlaskit/react-ufo 3.14.3 → 3.14.5

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 (114) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cjs/create-payload/critical-metrics-payload/index.js +38 -0
  3. package/dist/cjs/create-payload/critical-metrics-payload/root-metrics.js +180 -0
  4. package/dist/cjs/create-payload/critical-metrics-payload/segment-metrics/create-segment-metrics.js +251 -0
  5. package/dist/cjs/create-payload/critical-metrics-payload/segment-metrics/get-is-root-segment.js +9 -0
  6. package/dist/cjs/create-payload/critical-metrics-payload/segment-metrics/get-segment-id.js +15 -0
  7. package/dist/cjs/create-payload/critical-metrics-payload/segment-metrics/get-segment-status.js +59 -0
  8. package/dist/cjs/create-payload/critical-metrics-payload/segment-metrics/has-segment-failed.js +17 -0
  9. package/dist/cjs/create-payload/critical-metrics-payload/segment-metrics/is-label-stack-under-segment.js +11 -0
  10. package/dist/cjs/create-payload/critical-metrics-payload/types.js +5 -0
  11. package/dist/cjs/create-payload/index.js +122 -214
  12. package/dist/cjs/create-payload/utils/find-matching-legacy-metric.js +15 -0
  13. package/dist/cjs/create-payload/utils/get-browser-metadata.js +87 -0
  14. package/dist/cjs/create-payload/utils/get-fmp.js +52 -0
  15. package/dist/cjs/create-payload/utils/get-navigation-metrics.js +66 -0
  16. package/dist/cjs/create-payload/utils/get-paint-metrics.js +124 -0
  17. package/dist/cjs/create-payload/utils/get-payload-size.js +17 -0
  18. package/dist/cjs/create-payload/utils/get-react-ufo-payload-version.js +3 -1
  19. package/dist/cjs/create-payload/utils/get-ssr-success.js +15 -0
  20. package/dist/cjs/create-payload/utils/get-ttai.js +14 -0
  21. package/dist/cjs/create-payload/utils/get-tti.js +38 -0
  22. package/dist/cjs/interaction-metrics/index.js +25 -0
  23. package/dist/cjs/vc/vc-observer-new/metric-calculator/fy25_03/index.js +3 -0
  24. package/dist/es2019/create-payload/critical-metrics-payload/index.js +6 -0
  25. package/dist/es2019/create-payload/critical-metrics-payload/root-metrics.js +166 -0
  26. package/dist/es2019/create-payload/critical-metrics-payload/segment-metrics/create-segment-metrics.js +155 -0
  27. package/dist/es2019/create-payload/critical-metrics-payload/segment-metrics/get-is-root-segment.js +3 -0
  28. package/dist/es2019/create-payload/critical-metrics-payload/segment-metrics/get-segment-id.js +9 -0
  29. package/dist/es2019/create-payload/critical-metrics-payload/segment-metrics/get-segment-status.js +40 -0
  30. package/dist/es2019/create-payload/critical-metrics-payload/segment-metrics/has-segment-failed.js +10 -0
  31. package/dist/es2019/create-payload/critical-metrics-payload/segment-metrics/is-label-stack-under-segment.js +5 -0
  32. package/dist/es2019/create-payload/critical-metrics-payload/types.js +1 -0
  33. package/dist/es2019/create-payload/index.js +55 -151
  34. package/dist/es2019/create-payload/utils/find-matching-legacy-metric.js +7 -0
  35. package/dist/es2019/create-payload/utils/get-browser-metadata.js +79 -0
  36. package/dist/es2019/create-payload/utils/get-fmp.js +47 -0
  37. package/dist/es2019/create-payload/utils/get-navigation-metrics.js +59 -0
  38. package/dist/es2019/create-payload/utils/get-paint-metrics.js +78 -0
  39. package/dist/es2019/create-payload/utils/get-payload-size.js +11 -0
  40. package/dist/es2019/create-payload/utils/get-react-ufo-payload-version.js +2 -1
  41. package/dist/es2019/create-payload/utils/get-ssr-success.js +7 -0
  42. package/dist/es2019/create-payload/utils/get-ttai.js +9 -0
  43. package/dist/es2019/create-payload/utils/get-tti.js +35 -0
  44. package/dist/es2019/interaction-metrics/index.js +24 -0
  45. package/dist/es2019/vc/vc-observer-new/metric-calculator/fy25_03/index.js +3 -0
  46. package/dist/esm/create-payload/critical-metrics-payload/index.js +31 -0
  47. package/dist/esm/create-payload/critical-metrics-payload/root-metrics.js +174 -0
  48. package/dist/esm/create-payload/critical-metrics-payload/segment-metrics/create-segment-metrics.js +244 -0
  49. package/dist/esm/create-payload/critical-metrics-payload/segment-metrics/get-is-root-segment.js +3 -0
  50. package/dist/esm/create-payload/critical-metrics-payload/segment-metrics/get-segment-id.js +9 -0
  51. package/dist/esm/create-payload/critical-metrics-payload/segment-metrics/get-segment-status.js +52 -0
  52. package/dist/esm/create-payload/critical-metrics-payload/segment-metrics/has-segment-failed.js +10 -0
  53. package/dist/esm/create-payload/critical-metrics-payload/segment-metrics/is-label-stack-under-segment.js +5 -0
  54. package/dist/esm/create-payload/critical-metrics-payload/types.js +1 -0
  55. package/dist/esm/create-payload/index.js +121 -210
  56. package/dist/esm/create-payload/utils/find-matching-legacy-metric.js +9 -0
  57. package/dist/esm/create-payload/utils/get-browser-metadata.js +79 -0
  58. package/dist/esm/create-payload/utils/get-fmp.js +47 -0
  59. package/dist/esm/create-payload/utils/get-navigation-metrics.js +59 -0
  60. package/dist/esm/create-payload/utils/get-paint-metrics.js +119 -0
  61. package/dist/esm/create-payload/utils/get-payload-size.js +11 -0
  62. package/dist/esm/create-payload/utils/get-react-ufo-payload-version.js +2 -1
  63. package/dist/esm/create-payload/utils/get-ssr-success.js +7 -0
  64. package/dist/esm/create-payload/utils/get-ttai.js +7 -0
  65. package/dist/esm/create-payload/utils/get-tti.js +33 -0
  66. package/dist/esm/interaction-metrics/index.js +24 -0
  67. package/dist/esm/vc/vc-observer-new/metric-calculator/fy25_03/index.js +3 -0
  68. package/dist/types/common/common/types.d.ts +1 -1
  69. package/dist/types/common/react-ufo-payload-schema.d.ts +23 -2
  70. package/dist/types/create-payload/critical-metrics-payload/index.d.ts +6 -0
  71. package/dist/types/create-payload/critical-metrics-payload/root-metrics.d.ts +7 -0
  72. package/dist/types/create-payload/critical-metrics-payload/segment-metrics/create-segment-metrics.d.ts +3 -0
  73. package/dist/types/create-payload/critical-metrics-payload/segment-metrics/get-is-root-segment.d.ts +2 -0
  74. package/dist/types/create-payload/critical-metrics-payload/segment-metrics/get-segment-id.d.ts +2 -0
  75. package/dist/types/create-payload/critical-metrics-payload/segment-metrics/get-segment-status.d.ts +7 -0
  76. package/dist/types/create-payload/critical-metrics-payload/segment-metrics/has-segment-failed.d.ts +2 -0
  77. package/dist/types/create-payload/critical-metrics-payload/segment-metrics/is-label-stack-under-segment.d.ts +2 -0
  78. package/dist/types/create-payload/critical-metrics-payload/types.d.ts +128 -0
  79. package/dist/types/create-payload/index.d.ts +339 -834
  80. package/dist/types/create-payload/utils/find-matching-legacy-metric.d.ts +5 -0
  81. package/dist/types/create-payload/utils/get-browser-metadata.d.ts +21 -0
  82. package/dist/types/create-payload/utils/get-fmp.d.ts +6 -0
  83. package/dist/types/create-payload/utils/get-navigation-metrics.d.ts +29 -0
  84. package/dist/types/create-payload/utils/get-paint-metrics.d.ts +13 -0
  85. package/dist/types/create-payload/utils/get-payload-size.d.ts +1 -0
  86. package/dist/types/create-payload/utils/get-react-ufo-payload-version.d.ts +2 -1
  87. package/dist/types/create-payload/utils/get-ssr-success.d.ts +2 -0
  88. package/dist/types/create-payload/utils/get-ttai.d.ts +2 -0
  89. package/dist/types/create-payload/utils/get-tti.d.ts +7 -0
  90. package/dist/types/interaction-metrics/index.d.ts +1 -0
  91. package/dist/types-ts4.5/common/common/types.d.ts +1 -1
  92. package/dist/types-ts4.5/common/react-ufo-payload-schema.d.ts +23 -2
  93. package/dist/types-ts4.5/create-payload/critical-metrics-payload/index.d.ts +6 -0
  94. package/dist/types-ts4.5/create-payload/critical-metrics-payload/root-metrics.d.ts +7 -0
  95. package/dist/types-ts4.5/create-payload/critical-metrics-payload/segment-metrics/create-segment-metrics.d.ts +3 -0
  96. package/dist/types-ts4.5/create-payload/critical-metrics-payload/segment-metrics/get-is-root-segment.d.ts +2 -0
  97. package/dist/types-ts4.5/create-payload/critical-metrics-payload/segment-metrics/get-segment-id.d.ts +2 -0
  98. package/dist/types-ts4.5/create-payload/critical-metrics-payload/segment-metrics/get-segment-status.d.ts +7 -0
  99. package/dist/types-ts4.5/create-payload/critical-metrics-payload/segment-metrics/has-segment-failed.d.ts +2 -0
  100. package/dist/types-ts4.5/create-payload/critical-metrics-payload/segment-metrics/is-label-stack-under-segment.d.ts +2 -0
  101. package/dist/types-ts4.5/create-payload/critical-metrics-payload/types.d.ts +130 -0
  102. package/dist/types-ts4.5/create-payload/index.d.ts +339 -834
  103. package/dist/types-ts4.5/create-payload/utils/find-matching-legacy-metric.d.ts +5 -0
  104. package/dist/types-ts4.5/create-payload/utils/get-browser-metadata.d.ts +21 -0
  105. package/dist/types-ts4.5/create-payload/utils/get-fmp.d.ts +6 -0
  106. package/dist/types-ts4.5/create-payload/utils/get-navigation-metrics.d.ts +29 -0
  107. package/dist/types-ts4.5/create-payload/utils/get-paint-metrics.d.ts +13 -0
  108. package/dist/types-ts4.5/create-payload/utils/get-payload-size.d.ts +1 -0
  109. package/dist/types-ts4.5/create-payload/utils/get-react-ufo-payload-version.d.ts +2 -1
  110. package/dist/types-ts4.5/create-payload/utils/get-ssr-success.d.ts +2 -0
  111. package/dist/types-ts4.5/create-payload/utils/get-ttai.d.ts +2 -0
  112. package/dist/types-ts4.5/create-payload/utils/get-tti.d.ts +7 -0
  113. package/dist/types-ts4.5/interaction-metrics/index.d.ts +1 -0
  114. package/package.json +8 -1
@@ -8,12 +8,12 @@ Object.defineProperty(exports, "__esModule", {
8
8
  exports.createExperimentalMetricsPayload = createExperimentalMetricsPayload;
9
9
  exports.createPayloads = createPayloads;
10
10
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
11
12
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
12
13
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
13
14
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
14
15
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
16
- var _bowserUltralight = _interopRequireDefault(require("bowser-ultralight"));
16
+ var _browserApis = require("@atlaskit/browser-apis");
17
17
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
18
18
  var _additionalPayload = require("../additional-payload");
19
19
  var _assets = require("../assets");
@@ -32,10 +32,17 @@ var _resourceTimingBuffer = require("../resource-timing/common/utils/resource-ti
32
32
  var _roundNumber = require("../round-number");
33
33
  var ssr = _interopRequireWildcard(require("../ssr"));
34
34
  var _utils = require("./common/utils");
35
+ var _criticalMetricsPayload = require("./critical-metrics-payload");
36
+ var _getBrowserMetadata = require("./utils/get-browser-metadata");
35
37
  var _getInteractionStatus = _interopRequireDefault(require("./utils/get-interaction-status"));
38
+ var _getNavigationMetrics = require("./utils/get-navigation-metrics");
36
39
  var _getPageVisibilityUpToTtai = _interopRequireDefault(require("./utils/get-page-visibility-up-to-ttai"));
40
+ var _getPaintMetrics = require("./utils/get-paint-metrics");
41
+ var _getPayloadSize = _interopRequireDefault(require("./utils/get-payload-size"));
37
42
  var _getReactUfoPayloadVersion = require("./utils/get-react-ufo-payload-version");
38
43
  var _getSsrDoneTimeValue = _interopRequireDefault(require("./utils/get-ssr-done-time-value"));
44
+ var _getSsrSuccess = _interopRequireDefault(require("./utils/get-ssr-success"));
45
+ var _getTtai = _interopRequireDefault(require("./utils/get-ttai"));
39
46
  var _getVcMetrics = _interopRequireDefault(require("./utils/get-vc-metrics"));
40
47
  var _excluded = ["labelStack", "time"],
41
48
  _excluded2 = ["stopTime", "labelStack"],
@@ -43,7 +50,7 @@ var _excluded = ["labelStack", "time"],
43
50
  _excluded4 = ["labelStack"];
44
51
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
45
52
  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; }
46
- 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; }
53
+ 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; } // Import common utilities
47
54
  function getUfoNameOverride(interaction) {
48
55
  var ufoName = interaction.ufoName,
49
56
  apdex = interaction.apdex;
@@ -152,138 +159,12 @@ function getResourceTimings(start, end) {
152
159
  function getBundleEvalTimings(start) {
153
160
  return bundleEvalTiming.getBundleEvalTimings(start);
154
161
  }
155
- function getSSRSuccess(type) {
156
- return type === 'page_load' ? ssr.getSSRSuccess() : undefined;
157
- }
158
162
  function getSSRPhaseSuccess(type) {
159
163
  return type === 'page_load' ? ssr.getSSRPhaseSuccess() : undefined;
160
164
  }
161
165
  function getSSRFeatureFlags(type) {
162
166
  return type === 'page_load' ? ssr.getSSRFeatureFlags() : undefined;
163
167
  }
164
- var getLCP = function getLCP(end) {
165
- return new Promise(function (resolve) {
166
- var observer;
167
- var timeout = setTimeout(function () {
168
- var _observer;
169
- (_observer = observer) === null || _observer === void 0 || _observer.disconnect();
170
- resolve(null);
171
- }, 200);
172
- var performanceObserverCallback = function performanceObserverCallback(list) {
173
- var entries = Array.from(list.getEntries());
174
- var lastEntry = entries.reduce(function (agg, entry) {
175
- // Use the latest LCP candidate before TTAI
176
- if (entry.startTime <= end && (agg === null || agg.startTime < entry.startTime)) {
177
- return entry;
178
- }
179
- return agg;
180
- }, null);
181
- clearTimeout(timeout);
182
- if (!lastEntry || lastEntry === null) {
183
- resolve(null);
184
- } else {
185
- resolve(lastEntry.startTime);
186
- }
187
- };
188
- observer = new PerformanceObserver(performanceObserverCallback);
189
- observer.observe({
190
- type: 'largest-contentful-paint',
191
- buffered: true
192
- });
193
- });
194
- };
195
- function getPaintMetrics(_x, _x2) {
196
- return _getPaintMetrics.apply(this, arguments);
197
- }
198
- function _getPaintMetrics() {
199
- _getPaintMetrics = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(type, end) {
200
- var metrics, lcp;
201
- return _regenerator.default.wrap(function _callee$(_context) {
202
- while (1) switch (_context.prev = _context.next) {
203
- case 0:
204
- if (!(type !== 'page_load')) {
205
- _context.next = 2;
206
- break;
207
- }
208
- return _context.abrupt("return", {});
209
- case 2:
210
- metrics = {};
211
- performance.getEntriesByType('paint').forEach(function (entry) {
212
- if (entry.name === 'first-paint') {
213
- metrics['metric:fp'] = Math.round(entry.startTime);
214
- }
215
- if (entry.name === 'first-contentful-paint') {
216
- metrics['metric:fcp'] = Math.round(entry.startTime);
217
- }
218
- });
219
- _context.next = 6;
220
- return getLCP(end);
221
- case 6:
222
- lcp = _context.sent;
223
- if (lcp) {
224
- metrics['metric:lcp'] = Math.round(lcp);
225
- }
226
- return _context.abrupt("return", metrics);
227
- case 9:
228
- case "end":
229
- return _context.stop();
230
- }
231
- }, _callee);
232
- }));
233
- return _getPaintMetrics.apply(this, arguments);
234
- }
235
- function getTTAI(interaction) {
236
- var start = interaction.start,
237
- end = interaction.end;
238
- var pageVisibilityUpToTTAI = (0, _getPageVisibilityUpToTtai.default)(interaction);
239
- return !interaction.abortReason && pageVisibilityUpToTTAI === 'visible' ? Math.round(end - start) : undefined;
240
- }
241
- function getNavigationMetrics(type) {
242
- if (type !== 'page_load') {
243
- return {};
244
- }
245
- var entries = performance.getEntriesByType('navigation');
246
- if (entries.length === 0) {
247
- return {};
248
- }
249
- var navigation = entries[0];
250
- var metrics = {
251
- // From https://www.w3.org/TR/resource-timing/
252
- redirectStart: Math.round(navigation.redirectStart),
253
- redirectEnd: Math.round(navigation.redirectEnd),
254
- fetchStart: Math.round(navigation.fetchStart),
255
- domainLookupStart: Math.round(navigation.domainLookupStart),
256
- domainLookupEnd: Math.round(navigation.domainLookupEnd),
257
- connectStart: Math.round(navigation.connectStart),
258
- connectEnd: Math.round(navigation.connectEnd),
259
- secureConnectionStart: Math.round(navigation.secureConnectionStart),
260
- requestStart: Math.round(navigation.requestStart),
261
- responseStart: Math.round(navigation.responseStart),
262
- responseEnd: Math.round(navigation.responseEnd),
263
- encodedBodySize: Math.round(navigation.encodedBodySize),
264
- decodedBodySize: Math.round(navigation.decodedBodySize),
265
- transferSize: Math.round(navigation.transferSize),
266
- // From https://www.w3.org/TR/navigation-timing-2/
267
- redirectCount: navigation.redirectCount,
268
- type: navigation.type,
269
- unloadEventEnd: Math.round(navigation.unloadEventEnd),
270
- unloadEventStart: Math.round(navigation.unloadEventStart),
271
- workerStart: Math.round(navigation.workerStart),
272
- nextHopProtocol: navigation.nextHopProtocol
273
-
274
- // The following properties are ignored because they provided limited value on a modern stack (e.g. the content
275
- // is usually rendered and interactive before the dom is fully parsed, dont't play well with streamed content...)
276
- // * domComplete
277
- // * domContentLoadedEventEnd
278
- // * domContentLoadedEventStart
279
- // * domInteractive
280
- // * loadEventEnd
281
- // * loadEventStart
282
- };
283
- return {
284
- 'metrics:navigation': metrics
285
- };
286
- }
287
168
  function getPPSMetrics(interaction) {
288
169
  var _interaction$apdex;
289
170
  var start = interaction.start,
@@ -314,7 +195,7 @@ function getPPSMetrics(interaction) {
314
195
  function getSSRProperties(type) {
315
196
  var ssrPhases = getSSRPhaseSuccess(type);
316
197
  return _objectSpread(_objectSpread({
317
- 'ssr:success': getSSRSuccess(type),
198
+ 'ssr:success': (0, _getSsrSuccess.default)(type),
318
199
  'ssr:featureFlags': getSSRFeatureFlags(type)
319
200
  }, (ssrPhases === null || ssrPhases === void 0 ? void 0 : ssrPhases.earlyFlush) != null ? {
320
201
  'ssr:earlyflush:success': ssrPhases.earlyFlush
@@ -347,33 +228,6 @@ function getAssetsMetrics(interaction, SSRDoneTime) {
347
228
  return {};
348
229
  }
349
230
  }
350
- function getBrowserMetadata() {
351
- var data = {};
352
- var now = new Date();
353
- data['event:localHour'] = now.getHours(); // returns the hours for this date according to local time
354
- data['event:localDayOfWeek'] = now.getDay(); // Sunday - Saturday : 0 - 6
355
- data['event:localTimezoneOffset'] = now.getTimezoneOffset(); // A number representing the difference, in minutes, between the date as evaluated in the UTC time zone and as evaluated in the local time zone.
356
-
357
- if (navigator.userAgent != null) {
358
- var browser = _bowserUltralight.default.getParser(navigator.userAgent);
359
- data['event:browser:name'] = browser.getBrowserName();
360
- data['event:browser:version'] = browser.getBrowserVersion();
361
- }
362
- if (navigator.hardwareConcurrency != null) {
363
- data['event:cpus'] = navigator.hardwareConcurrency;
364
- }
365
- if (navigator.deviceMemory != null) {
366
- data['event:memory'] = navigator.deviceMemory;
367
- }
368
-
369
- // eslint-disable-next-line compat/compat
370
- if (navigator.connection != null) {
371
- data['event:network:effectiveType'] = navigator.connection.effectiveType;
372
- data['event:network:rtt'] = navigator.connection.rtt;
373
- data['event:network:downlink'] = navigator.connection.downlink;
374
- }
375
- return data;
376
- }
377
231
  function getTracingContextData(interaction) {
378
232
  var trace = interaction.trace,
379
233
  start = interaction.start;
@@ -392,6 +246,7 @@ function getTracingContextData(interaction) {
392
246
  }
393
247
  function optimizeCustomData(interaction) {
394
248
  var customData = interaction.customData,
249
+ cohortingCustomData = interaction.cohortingCustomData,
395
250
  legacyMetrics = interaction.legacyMetrics;
396
251
  var customDataMap = customData.reduce(function (result, _ref2) {
397
252
  var _result$get$data, _result$get;
@@ -405,6 +260,17 @@ function optimizeCustomData(interaction) {
405
260
  });
406
261
  return result;
407
262
  }, new Map());
263
+
264
+ // Merge cohorting custom data into the same map
265
+ if (cohortingCustomData && cohortingCustomData.size > 0) {
266
+ var _interaction$labelSta, _customDataMap$get$da, _customDataMap$get, _interaction$labelSta2;
267
+ var label = (0, _utils.stringifyLabelStackFully)((_interaction$labelSta = interaction.labelStack) !== null && _interaction$labelSta !== void 0 ? _interaction$labelSta : []);
268
+ var value = (_customDataMap$get$da = (_customDataMap$get = customDataMap.get(label)) === null || _customDataMap$get === void 0 ? void 0 : _customDataMap$get.data) !== null && _customDataMap$get$da !== void 0 ? _customDataMap$get$da : {};
269
+ customDataMap.set(label, {
270
+ labelStack: (0, _utils.optimizeLabelStack)((_interaction$labelSta2 = interaction.labelStack) !== null && _interaction$labelSta2 !== void 0 ? _interaction$labelSta2 : [], (0, _getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),
271
+ data: Object.assign(value, Object.fromEntries(cohortingCustomData))
272
+ });
273
+ }
408
274
  if (legacyMetrics) {
409
275
  var legacyMetricsFiltered = legacyMetrics.filter(function (item) {
410
276
  return item.type === 'PAGE_LOAD';
@@ -413,12 +279,12 @@ function optimizeCustomData(interaction) {
413
279
  var _result$get$data2, _result$get2;
414
280
  var _Object$entries$_i = (0, _slicedToArray2.default)(_Object$entries[_i], 2),
415
281
  key = _Object$entries$_i[0],
416
- value = _Object$entries$_i[1];
417
- var label = (0, _utils.stringifyLabelStackFully)([]);
418
- var labelValue = (_result$get$data2 = (_result$get2 = result.get(label)) === null || _result$get2 === void 0 ? void 0 : _result$get2.data) !== null && _result$get$data2 !== void 0 ? _result$get$data2 : {};
419
- result.set(label, {
282
+ _value = _Object$entries$_i[1];
283
+ var _label = (0, _utils.stringifyLabelStackFully)([]);
284
+ var labelValue = (_result$get$data2 = (_result$get2 = result.get(_label)) === null || _result$get2 === void 0 ? void 0 : _result$get2.data) !== null && _result$get$data2 !== void 0 ? _result$get$data2 : {};
285
+ result.set(_label, {
420
286
  labelStack: (0, _utils.optimizeLabelStack)([], (0, _getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),
421
- data: Object.assign(labelValue, (0, _defineProperty2.default)({}, key, value))
287
+ data: Object.assign(labelValue, (0, _defineProperty2.default)({}, key, _value))
422
288
  });
423
289
  }
424
290
  return result;
@@ -656,14 +522,15 @@ function getBm3TrackerTimings(interaction) {
656
522
  legacyMetrics: legacyMetrics
657
523
  };
658
524
  }
659
- function getPayloadSize(payload) {
660
- return Math.round(new TextEncoder().encode(JSON.stringify(payload)).length / 1024);
661
- }
662
525
  function getStylesheetMetrics() {
663
526
  try {
664
- var stylesheets = Array.from(document.styleSheets);
527
+ var doc = (0, _browserApis.getDocument)();
528
+ if (!doc) {
529
+ return {};
530
+ }
531
+ var stylesheets = Array.from(doc.styleSheets);
665
532
  var stylesheetCount = stylesheets.length;
666
- var cssrules = Array.from(document.styleSheets).reduce(function (acc, item) {
533
+ var cssrules = Array.from(doc.styleSheets).reduce(function (acc, item) {
667
534
  // Other domain stylesheets throw a SecurityError
668
535
  try {
669
536
  return acc + item.cssRules.length;
@@ -671,9 +538,9 @@ function getStylesheetMetrics() {
671
538
  return acc;
672
539
  }
673
540
  }, 0);
674
- var styleElements = document.querySelectorAll('style').length;
675
- var styleProps = document.querySelectorAll('[style]');
676
- var styleDeclarations = Array.from(document.querySelectorAll('[style]')).reduce(function (acc, item) {
541
+ var styleElements = doc.querySelectorAll('style').length;
542
+ var styleProps = doc.querySelectorAll('[style]');
543
+ var styleDeclarations = Array.from(doc.querySelectorAll('[style]')).reduce(function (acc, item) {
677
544
  try {
678
545
  if ('style' in item) {
679
546
  return acc + item.style.length;
@@ -703,20 +570,20 @@ function getErrorCounts(interaction) {
703
570
  'ufo:errors:count': interaction.errors.length
704
571
  };
705
572
  }
706
- function createInteractionMetricsPayload(_x3, _x4, _x5) {
573
+ function createInteractionMetricsPayload(_x, _x2, _x3, _x4, _x5) {
707
574
  return _createInteractionMetricsPayload.apply(this, arguments);
708
575
  }
709
576
  function _createInteractionMetricsPayload() {
710
- _createInteractionMetricsPayload = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(interaction, interactionId, experimental) {
577
+ _createInteractionMetricsPayload = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(interaction, interactionId, experimental, criticalPayloadCount, vcMetrics) {
711
578
  var _window$location, _config$additionalPay;
712
- var interactionPayloadStart, config, end, start, ufoName, knownSegments, rate, type, abortReason, routeName, featureFlags, previousInteractionName, isPreviousInteractionAborted, abortedByInteractionName, responsiveness, unknownElementName, unknownElementHierarchy, pageVisibilityAtTTI, pageVisibilityAtTTAI, segments, segmentTree, isDetailedPayload, isPageLoad, calculatePageVisibilityFromTheStartOfPageLoad, moreAccuratePageVisibilityAtTTI, moreAccuratePageVisibilityAtTTAI, labelStack, getInitialPageLoadSSRMetrics, pageLoadInteractionMetrics, getDetailedInteractionMetrics, getPageLoadDetailedInteractionMetrics, newUFOName, resourceTimings, _yield$Promise$all, _yield$Promise$all2, vcMetrics, experimentalMetrics, paintMetrics, payload;
713
- return _regenerator.default.wrap(function _callee2$(_context2) {
714
- while (1) switch (_context2.prev = _context2.next) {
579
+ var interactionPayloadStart, config, end, start, ufoName, knownSegments, rate, type, abortReason, routeName, featureFlags, previousInteractionName, isPreviousInteractionAborted, abortedByInteractionName, responsiveness, unknownElementName, unknownElementHierarchy, pageVisibilityAtTTI, pageVisibilityAtTTAI, segments, segmentTree, isDetailedPayload, isPageLoad, calculatePageVisibilityFromTheStartOfPageLoad, moreAccuratePageVisibilityAtTTI, moreAccuratePageVisibilityAtTTAI, labelStack, getInitialPageLoadSSRMetrics, pageLoadInteractionMetrics, getDetailedInteractionMetrics, getPageLoadDetailedInteractionMetrics, newUFOName, resourceTimings, _yield$Promise$all, _yield$Promise$all2, finalVCMetrics, experimentalMetrics, paintMetrics, payload;
580
+ return _regenerator.default.wrap(function _callee$(_context) {
581
+ while (1) switch (_context.prev = _context.next) {
715
582
  case 0:
716
583
  interactionPayloadStart = performance.now();
717
584
  config = (0, _config.getConfig)();
718
585
  if (config) {
719
- _context2.next = 4;
586
+ _context.next = 4;
720
587
  break;
721
588
  }
722
589
  throw Error('UFO Configuration not provided');
@@ -788,18 +655,33 @@ function _createInteractionMetricsPayload() {
788
655
  };
789
656
  };
790
657
  if (experimental) {
791
- expTTAI = getTTAI(interaction);
658
+ expTTAI = (0, _getTtai.default)(interaction);
792
659
  } else {
793
- regularTTAI = getTTAI(interaction);
660
+ regularTTAI = (0, _getTtai.default)(interaction);
794
661
  }
795
662
  newUFOName = (0, _utils.sanitizeUfoName)(ufoName);
796
663
  resourceTimings = getResourceTimings(start, end);
797
- _context2.next = 24;
798
- return Promise.all([(0, _getVcMetrics.default)(interaction), experimental ? (0, _createExperimentalInteractionMetricsPayload.getExperimentalVCMetrics)(interaction) : Promise.resolve(undefined), getPaintMetrics(type, end)]);
799
- case 24:
800
- _yield$Promise$all = _context2.sent;
664
+ _context.t0 = Promise;
665
+ _context.t1 = vcMetrics;
666
+ if (_context.t1) {
667
+ _context.next = 28;
668
+ break;
669
+ }
670
+ _context.next = 27;
671
+ return (0, _getVcMetrics.default)(interaction);
672
+ case 27:
673
+ _context.t1 = _context.sent;
674
+ case 28:
675
+ _context.t2 = _context.t1;
676
+ _context.t3 = experimental ? (0, _createExperimentalInteractionMetricsPayload.getExperimentalVCMetrics)(interaction) : Promise.resolve(undefined);
677
+ _context.t4 = (0, _getPaintMetrics.getPaintMetricsToLegacyFormat)(type, end);
678
+ _context.t5 = [_context.t2, _context.t3, _context.t4];
679
+ _context.next = 34;
680
+ return _context.t0.all.call(_context.t0, _context.t5);
681
+ case 34:
682
+ _yield$Promise$all = _context.sent;
801
683
  _yield$Promise$all2 = (0, _slicedToArray2.default)(_yield$Promise$all, 3);
802
- vcMetrics = _yield$Promise$all2[0];
684
+ finalVCMetrics = _yield$Promise$all2[0];
803
685
  experimentalMetrics = _yield$Promise$all2[1];
804
686
  paintMetrics = _yield$Promise$all2[2];
805
687
  payload = {
@@ -809,7 +691,7 @@ function _createInteractionMetricsPayload() {
809
691
  source: 'measured',
810
692
  tags: ['observability'],
811
693
  attributes: {
812
- properties: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
694
+ properties: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
813
695
  // basic
814
696
  'event:hostname': ((_window$location = window.location) === null || _window$location === void 0 ? void 0 : _window$location.hostname) || 'unknown',
815
697
  'event:product': config.product,
@@ -826,7 +708,10 @@ function _createInteractionMetricsPayload() {
826
708
  'event:cpu:usage': (0, _machineUtilisation.createPressureStateReport)(interaction.start, interaction.end)
827
709
  } : {}), (0, _platformFeatureFlags.fg)('platform_ufo_report_memory_usage') ? {
828
710
  'event:memory:usage': (0, _machineUtilisation.createMemoryStateReport)(interaction.start, interaction.end)
829
- } : {}), getBrowserMetadata()), getSSRProperties(type)), getAssetsMetrics(interaction, pageLoadInteractionMetrics === null || pageLoadInteractionMetrics === void 0 ? void 0 : pageLoadInteractionMetrics.SSRDoneTime)), getPPSMetrics(interaction)), paintMetrics), getNavigationMetrics(type)), vcMetrics), experimentalMetrics), (_config$additionalPay = config.additionalPayloadData) === null || _config$additionalPay === void 0 ? void 0 : _config$additionalPay.call(config, interaction)), getTracingContextData(interaction)), getStylesheetMetrics()), getErrorCounts(interaction)), {}, {
711
+ } : {}), criticalPayloadCount !== undefined ? {
712
+ 'ufo:multipayload': true,
713
+ 'ufo:criticalPayloadCount': criticalPayloadCount
714
+ } : {}), (0, _getBrowserMetadata.getBrowserMetadataToLegacyFormat)()), 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)), {}, {
830
715
  interactionMetrics: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
831
716
  namePrefix: config.namePrefix || '',
832
717
  segmentPrefix: config.segmentPrefix || '',
@@ -876,13 +761,13 @@ function _createInteractionMetricsPayload() {
876
761
  regularTTAI = undefined;
877
762
  expTTAI = undefined;
878
763
  }
879
- payload.attributes.properties['event:sizeInKb'] = getPayloadSize(payload.attributes.properties);
880
- return _context2.abrupt("return", payload);
881
- case 33:
764
+ payload.attributes.properties['event:sizeInKb'] = (0, _getPayloadSize.default)(payload.attributes.properties);
765
+ return _context.abrupt("return", payload);
766
+ case 43:
882
767
  case "end":
883
- return _context2.stop();
768
+ return _context.stop();
884
769
  }
885
- }, _callee2);
770
+ }, _callee);
886
771
  }));
887
772
  return _createInteractionMetricsPayload.apply(this, arguments);
888
773
  }
@@ -890,25 +775,48 @@ function createPayloads(_x6, _x7) {
890
775
  return _createPayloads.apply(this, arguments);
891
776
  }
892
777
  function _createPayloads() {
893
- _createPayloads = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(interactionId, interaction) {
894
- var ufoNameOverride, modifiedInteraction, interactionMetricsPayload;
895
- return _regenerator.default.wrap(function _callee3$(_context3) {
896
- while (1) switch (_context3.prev = _context3.next) {
778
+ _createPayloads = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(interactionId, interaction) {
779
+ var ufoNameOverride, modifiedInteraction, payloads, isCriticalMetricsEnabled, vcMetrics, criticalMetricsPayloads, criticalPayloadCount, interactionMetricsPayload;
780
+ return _regenerator.default.wrap(function _callee2$(_context2) {
781
+ while (1) switch (_context2.prev = _context2.next) {
897
782
  case 0:
898
783
  ufoNameOverride = getUfoNameOverride(interaction);
899
784
  modifiedInteraction = _objectSpread(_objectSpread({}, interaction), {}, {
900
785
  ufoName: ufoNameOverride
901
786
  });
902
- _context3.next = 4;
903
- return createInteractionMetricsPayload(modifiedInteraction, interactionId);
904
- case 4:
905
- interactionMetricsPayload = _context3.sent;
906
- return _context3.abrupt("return", [interactionMetricsPayload]);
787
+ payloads = [];
788
+ isCriticalMetricsEnabled = (0, _platformFeatureFlags.fg)('platform_ufo_critical_metrics_payload'); // Calculate VC metrics once to avoid duplicate expensive calculations
789
+ _context2.next = 6;
790
+ return (0, _getVcMetrics.default)(interaction);
907
791
  case 6:
792
+ vcMetrics = _context2.sent;
793
+ if (!isCriticalMetricsEnabled) {
794
+ _context2.next = 13;
795
+ break;
796
+ }
797
+ _context2.next = 10;
798
+ return (0, _criticalMetricsPayload.createCriticalMetricsPayloads)(interactionId, interaction, vcMetrics);
799
+ case 10:
800
+ _context2.t0 = _context2.sent;
801
+ _context2.next = 14;
802
+ break;
803
+ case 13:
804
+ _context2.t0 = [];
805
+ case 14:
806
+ criticalMetricsPayloads = _context2.t0;
807
+ payloads.push.apply(payloads, (0, _toConsumableArray2.default)(criticalMetricsPayloads));
808
+ criticalPayloadCount = isCriticalMetricsEnabled ? criticalMetricsPayloads.length : undefined;
809
+ _context2.next = 19;
810
+ return createInteractionMetricsPayload(modifiedInteraction, interactionId, undefined, criticalPayloadCount, vcMetrics);
811
+ case 19:
812
+ interactionMetricsPayload = _context2.sent;
813
+ payloads.push(interactionMetricsPayload);
814
+ return _context2.abrupt("return", payloads.filter(Boolean));
815
+ case 22:
908
816
  case "end":
909
- return _context3.stop();
817
+ return _context2.stop();
910
818
  }
911
- }, _callee3);
819
+ }, _callee2);
912
820
  }));
913
821
  return _createPayloads.apply(this, arguments);
914
822
  }
@@ -916,14 +824,14 @@ function createExperimentalMetricsPayload(_x8, _x9) {
916
824
  return _createExperimentalMetricsPayload.apply(this, arguments);
917
825
  }
918
826
  function _createExperimentalMetricsPayload() {
919
- _createExperimentalMetricsPayload = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(interactionId, interaction) {
827
+ _createExperimentalMetricsPayload = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(interactionId, interaction) {
920
828
  var config, ufoName, rate, pageVisibilityState, result;
921
- return _regenerator.default.wrap(function _callee4$(_context4) {
922
- while (1) switch (_context4.prev = _context4.next) {
829
+ return _regenerator.default.wrap(function _callee3$(_context3) {
830
+ while (1) switch (_context3.prev = _context3.next) {
923
831
  case 0:
924
832
  config = (0, _config.getConfig)();
925
833
  if (config) {
926
- _context4.next = 3;
834
+ _context3.next = 3;
927
835
  break;
928
836
  }
929
837
  throw Error('UFO Configuration not provided');
@@ -931,28 +839,28 @@ function _createExperimentalMetricsPayload() {
931
839
  ufoName = (0, _utils.sanitizeUfoName)(interaction.ufoName);
932
840
  rate = (0, _config.getExperimentalInteractionRate)(ufoName, interaction.type);
933
841
  if ((0, _coinflip.default)(rate)) {
934
- _context4.next = 7;
842
+ _context3.next = 7;
935
843
  break;
936
844
  }
937
- return _context4.abrupt("return", null);
845
+ return _context3.abrupt("return", null);
938
846
  case 7:
939
847
  pageVisibilityState = (0, _hiddenTiming.getPageVisibilityState)(interaction.start, interaction.end);
940
848
  if (!(pageVisibilityState !== 'visible')) {
941
- _context4.next = 10;
849
+ _context3.next = 10;
942
850
  break;
943
851
  }
944
- return _context4.abrupt("return", null);
852
+ return _context3.abrupt("return", null);
945
853
  case 10:
946
- _context4.next = 12;
854
+ _context3.next = 12;
947
855
  return createInteractionMetricsPayload(interaction, interactionId, true);
948
856
  case 12:
949
- result = _context4.sent;
950
- return _context4.abrupt("return", result);
857
+ result = _context3.sent;
858
+ return _context3.abrupt("return", result);
951
859
  case 14:
952
860
  case "end":
953
- return _context4.stop();
861
+ return _context3.stop();
954
862
  }
955
- }, _callee4);
863
+ }, _callee3);
956
864
  }));
957
865
  return _createExperimentalMetricsPayload.apply(this, arguments);
958
866
  }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.findMatchingLegacyMetric = findMatchingLegacyMetric;
7
+ /**
8
+ * Find matching legacy metric by experience name and type
9
+ */
10
+ function findMatchingLegacyMetric(interaction, experienceName) {
11
+ var _interaction$legacyMe;
12
+ return (_interaction$legacyMe = interaction.legacyMetrics) === null || _interaction$legacyMe === void 0 ? void 0 : _interaction$legacyMe.find(function (metric) {
13
+ return (metric.key === experienceName || metric.config.reactUFOName === experienceName) && metric.type === 'PAGE_LOAD';
14
+ });
15
+ }
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = getBrowserMetadata;
8
+ exports.getBrowserMetadataToLegacyFormat = getBrowserMetadataToLegacyFormat;
9
+ var _bowserUltralight = _interopRequireDefault(require("bowser-ultralight"));
10
+ function getBrowserMetadata() {
11
+ var data = {
12
+ time: {
13
+ localHour: 0,
14
+ localDayOfWeek: 0,
15
+ localTimezoneOffset: 0
16
+ }
17
+ };
18
+ var now = new Date();
19
+ data.time.localHour = now.getHours(); // returns the hours for this date according to local time
20
+ data.time.localDayOfWeek = now.getDay(); // Sunday - Saturday : 0 - 6
21
+ data.time.localTimezoneOffset = now.getTimezoneOffset(); // A number representing the difference, in minutes, between the date as evaluated in the UTC time zone and as evaluated in the local time zone.
22
+
23
+ if (typeof navigator !== 'undefined' && navigator.userAgent != null) {
24
+ var browser = _bowserUltralight.default.getParser(navigator.userAgent);
25
+ data.browser = {
26
+ name: browser.getBrowserName(),
27
+ version: browser.getBrowserVersion()
28
+ };
29
+ }
30
+ if (typeof navigator !== 'undefined' && navigator.hardwareConcurrency != null) {
31
+ if (!data.device) {
32
+ data.device = {};
33
+ }
34
+ data.device.cpus = navigator.hardwareConcurrency;
35
+ }
36
+ if (typeof navigator !== 'undefined' && navigator.deviceMemory != null) {
37
+ if (!data.device) {
38
+ data.device = {};
39
+ }
40
+ data.device.memory = navigator.deviceMemory;
41
+ }
42
+
43
+ // eslint-disable-next-line compat/compat
44
+ if (typeof navigator !== 'undefined' && navigator.connection != null) {
45
+ data.network = {
46
+ effectiveType: navigator.connection.effectiveType,
47
+ rtt: navigator.connection.rtt,
48
+ downlink: navigator.connection.downlink
49
+ };
50
+ }
51
+ return data;
52
+ }
53
+
54
+ // Helper function to get browser metadata in legacy colon format for backward compatibility
55
+ function getBrowserMetadataToLegacyFormat() {
56
+ var metadata = getBrowserMetadata();
57
+ var legacyFormat = {};
58
+
59
+ // Time data
60
+ legacyFormat['event:localHour'] = metadata.time.localHour;
61
+ legacyFormat['event:localDayOfWeek'] = metadata.time.localDayOfWeek;
62
+ legacyFormat['event:localTimezoneOffset'] = metadata.time.localTimezoneOffset;
63
+
64
+ // Browser data
65
+ if (metadata.browser) {
66
+ legacyFormat['event:browser:name'] = metadata.browser.name;
67
+ legacyFormat['event:browser:version'] = metadata.browser.version;
68
+ }
69
+
70
+ // Device data
71
+ if (metadata.device) {
72
+ if (metadata.device.cpus !== undefined) {
73
+ legacyFormat['event:cpus'] = metadata.device.cpus;
74
+ }
75
+ if (metadata.device.memory !== undefined) {
76
+ legacyFormat['event:memory'] = metadata.device.memory;
77
+ }
78
+ }
79
+
80
+ // Network data
81
+ if (metadata.network) {
82
+ legacyFormat['event:network:effectiveType'] = metadata.network.effectiveType;
83
+ legacyFormat['event:network:rtt'] = metadata.network.rtt;
84
+ legacyFormat['event:network:downlink'] = metadata.network.downlink;
85
+ }
86
+ return legacyFormat;
87
+ }