From e966dc535bd38b8c9e6cfc6807b3cad421cff79e Mon Sep 17 00:00:00 2001
From: Godfrey Chan <godfreykfc@gmail.com>
Date: Wed, 29 Jan 2025 01:57:47 -0800
Subject: [PATCH 01/16] refactor(sdk-metrics): fix eslint warning (#5386)

---
 packages/sdk-metrics/src/state/DeltaMetricProcessor.ts | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/packages/sdk-metrics/src/state/DeltaMetricProcessor.ts b/packages/sdk-metrics/src/state/DeltaMetricProcessor.ts
index 288885f8f93..926bbf952ff 100644
--- a/packages/sdk-metrics/src/state/DeltaMetricProcessor.ts
+++ b/packages/sdk-metrics/src/state/DeltaMetricProcessor.ts
@@ -93,6 +93,8 @@ export class DeltaMetricProcessor<T extends Maybe<Accumulation>> {
             attributes = this._overflowAttributes;
             hashCode = this._overflowHashCode;
             if (this._cumulativeMemoStorage.has(attributes, hashCode)) {
+              // has() returned true, previous is present.
+              // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
               const previous = this._cumulativeMemoStorage.get(
                 attributes,
                 hashCode
@@ -103,7 +105,7 @@ export class DeltaMetricProcessor<T extends Maybe<Accumulation>> {
         }
         // Merge with uncollected active delta.
         if (this._activeCollectionStorage.has(attributes, hashCode)) {
-          // has() returned true, previous is present.
+          // has() returned true, active is present.
           // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
           const active = this._activeCollectionStorage.get(
             attributes,

From d2812d2810a812f069f7d40fb9c6c870e30fb8e0 Mon Sep 17 00:00:00 2001
From: Godfrey Chan <godfreykfc@gmail.com>
Date: Wed, 29 Jan 2025 02:08:18 -0800
Subject: [PATCH 02/16] refactor(instrumentation): fix eslint warnings (#5389)

---
 .../opentelemetry-instrumentation/src/types.ts        | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/experimental/packages/opentelemetry-instrumentation/src/types.ts b/experimental/packages/opentelemetry-instrumentation/src/types.ts
index 27a8574fcd1..6df94e6c39a 100644
--- a/experimental/packages/opentelemetry-instrumentation/src/types.ts
+++ b/experimental/packages/opentelemetry-instrumentation/src/types.ts
@@ -135,15 +135,12 @@ export interface InstrumentationModuleDefinition {
   includePrerelease?: boolean;
 
   /** Method to patch the instrumentation  */
-  // eslint-disable-next-line @typescript-eslint/no-explicit-any
-  patch?:
-    | ((moduleExports: any, moduleVersion?: string | undefined) => any)
-    | undefined;
+  patch?: // eslint-disable-next-line @typescript-eslint/no-explicit-any
+  ((moduleExports: any, moduleVersion?: string | undefined) => any) | undefined;
 
   /** Method to unpatch the instrumentation  */
-  // eslint-disable-next-line @typescript-eslint/no-explicit-any
-  unpatch?:
-    | ((moduleExports: any, moduleVersion?: string | undefined) => void)
+  unpatch?: // eslint-disable-next-line @typescript-eslint/no-explicit-any
+  | ((moduleExports: any, moduleVersion?: string | undefined) => void)
     | undefined;
 }
 

From 682ab65f7ce3971064f8f27b4118c5338e4c98ca Mon Sep 17 00:00:00 2001
From: Godfrey Chan <godfreykfc@gmail.com>
Date: Wed, 29 Jan 2025 02:12:21 -0800
Subject: [PATCH 03/16] refactor(sdk-trace-web): fix eslint warning (#5388)

---
 packages/opentelemetry-sdk-trace-web/src/utils.ts | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/packages/opentelemetry-sdk-trace-web/src/utils.ts b/packages/opentelemetry-sdk-trace-web/src/utils.ts
index e8fe4ef1d69..fb6df1d5cb6 100644
--- a/packages/opentelemetry-sdk-trace-web/src/utils.ts
+++ b/packages/opentelemetry-sdk-trace-web/src/utils.ts
@@ -46,10 +46,9 @@ function getUrlNormalizingAnchor(): HTMLAnchorElement {
  * @param obj
  * @param key
  */
-// eslint-disable-next-line @typescript-eslint/no-explicit-any
 export function hasKey<O extends object>(
   obj: O,
-  key: keyof any
+  key: PropertyKey
 ): key is keyof O {
   return key in obj;
 }
@@ -67,8 +66,8 @@ export function addSpanNetworkEvent(
   entries: PerformanceEntries,
   refPerfName?: string
 ): api.Span | undefined {
-  let perfTime = undefined;
-  let refTime = undefined;
+  let perfTime: number | undefined;
+  let refTime: number | undefined;
   if (
     hasKey(entries, performanceName) &&
     typeof entries[performanceName] === 'number'

From 23adb2bdc57b9ef6935b9c07504017fef6da7baa Mon Sep 17 00:00:00 2001
From: Marc Pichler <marc.pichler@dynatrace.com>
Date: Wed, 29 Jan 2025 11:12:46 +0100
Subject: [PATCH 04/16] docs(instrumenation-http): reword documentation about
 what is geneated (#5378)

---
 .../packages/opentelemetry-instrumentation-http/README.md       | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/experimental/packages/opentelemetry-instrumentation-http/README.md b/experimental/packages/opentelemetry-instrumentation-http/README.md
index 8237f30d1bc..5d00dcaecc8 100644
--- a/experimental/packages/opentelemetry-instrumentation-http/README.md
+++ b/experimental/packages/opentelemetry-instrumentation-http/README.md
@@ -22,7 +22,7 @@ npm install --save @opentelemetry/instrumentation-http
 
 ## Usage
 
-OpenTelemetry HTTP Instrumentation allows the user to automatically collect trace data and export them to their backend of choice, to give observability to distributed systems.
+OpenTelemetry HTTP Instrumentation allows the user to automatically collect telemetry and export it to their backend of choice, to give observability to distributed systems.
 
 To load a specific instrumentation (HTTP in this case), specify it in the Node Tracer's configuration.
 

From 2759d73ed56c0ecce6de5ad66a30b0fc6048e386 Mon Sep 17 00:00:00 2001
From: Godfrey Chan <godfreykfc@gmail.com>
Date: Wed, 29 Jan 2025 02:17:47 -0800
Subject: [PATCH 05/16] refactor(sdk-trace-node): fix eslint warning (#5387)

---
 .../test/registration.test.ts                            | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/packages/opentelemetry-sdk-trace-node/test/registration.test.ts b/packages/opentelemetry-sdk-trace-node/test/registration.test.ts
index 2b1466b1791..0a185b60763 100644
--- a/packages/opentelemetry-sdk-trace-node/test/registration.test.ts
+++ b/packages/opentelemetry-sdk-trace-node/test/registration.test.ts
@@ -27,10 +27,13 @@ import { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-ho
 import { CompositePropagator } from '@opentelemetry/core';
 import { NodeTracerProvider } from '../src';
 
-const assertInstanceOf = (actual: object, ExpectedInstance: Function) => {
+// Here we are looking for a `AnyConstructor` type, and `Function` is a close
+// enough approximation that exists in the standard library.
+// eslint-disable-next-line @typescript-eslint/ban-types
+const assertInstanceOf = (actual: object, ExpectedConstructor: Function) => {
   assert.ok(
-    actual instanceof ExpectedInstance,
-    `Expected ${inspect(actual)} to be instance of ${ExpectedInstance.name}`
+    actual instanceof ExpectedConstructor,
+    `Expected ${inspect(actual)} to be instance of ${ExpectedConstructor.name}`
   );
 };
 

From 22569aca32284d549101c930940ee14db6cadf6e Mon Sep 17 00:00:00 2001
From: Godfrey Chan <godfreykfc@gmail.com>
Date: Wed, 29 Jan 2025 03:53:18 -0800
Subject: [PATCH 06/16] fix(exporter-zipkin): remove deprecated `url.parse`
 usage (#5390)

---
 CHANGELOG.md                                  |  1 +
 .../src/platform/node/util.ts                 | 22 ++++++++-----------
 2 files changed, 10 insertions(+), 13 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index f1925505a06..a0c9f2ea360 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -61,6 +61,7 @@ For semantic convention package changes, see the [semconv CHANGELOG](packages/se
 
 ### :bug: (Bug Fix)
 
+* fix(exporter-zipkin): remove usages of deprecated `url.parse` from `node:url` [#5390](https://github.com/open-telemetry/opentelemetry-js/pull/5390) @chancancode
 * fix(sdk-metrics): do not export from `PeriodicExportingMetricReader` when there are no metrics to export. [#5288](https://github.com/open-telemetry/opentelemetry-js/pull/5288) @jacksonweber
 
 ### :books: (Refine Doc)
diff --git a/packages/opentelemetry-exporter-zipkin/src/platform/node/util.ts b/packages/opentelemetry-exporter-zipkin/src/platform/node/util.ts
index 8835177ccda..93d29ccd0da 100644
--- a/packages/opentelemetry-exporter-zipkin/src/platform/node/util.ts
+++ b/packages/opentelemetry-exporter-zipkin/src/platform/node/util.ts
@@ -18,7 +18,6 @@ import { diag } from '@opentelemetry/api';
 import { ExportResult, ExportResultCode } from '@opentelemetry/core';
 import * as http from 'http';
 import * as https from 'https';
-import * as url from 'url';
 import * as zipkinTypes from '../../types';
 
 /**
@@ -31,18 +30,15 @@ export function prepareSend(
   urlStr: string,
   headers?: Record<string, string>
 ): zipkinTypes.SendFn {
-  const urlOpts = url.parse(urlStr);
+  const url = new URL(urlStr);
 
-  const reqOpts: http.RequestOptions = Object.assign(
-    {
-      method: 'POST',
-      headers: {
-        'Content-Type': 'application/json',
-        ...headers,
-      },
+  const reqOpts: http.RequestOptions = Object.assign({
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json',
+      ...headers,
     },
-    urlOpts
-  );
+  });
 
   /**
    * Send spans to the remote Zipkin service.
@@ -56,8 +52,8 @@ export function prepareSend(
       return done({ code: ExportResultCode.SUCCESS });
     }
 
-    const { request } = reqOpts.protocol === 'http:' ? http : https;
-    const req = request(reqOpts, (res: http.IncomingMessage) => {
+    const { request } = url.protocol === 'http:' ? http : https;
+    const req = request(url, reqOpts, (res: http.IncomingMessage) => {
       let rawData = '';
       res.on('data', chunk => {
         rawData += chunk;

From a686b88bf562c074a14fc346ef94828e2928a7ad Mon Sep 17 00:00:00 2001
From: Godfrey Chan <godfreykfc@gmail.com>
Date: Wed, 29 Jan 2025 03:54:56 -0800
Subject: [PATCH 07/16] refactor(browser-detector): fix eslint warning (#5384)

---
 .../opentelemetry-browser-detector/src/BrowserDetector.ts    | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/experimental/packages/opentelemetry-browser-detector/src/BrowserDetector.ts b/experimental/packages/opentelemetry-browser-detector/src/BrowserDetector.ts
index 5d82f5be717..041781490f5 100644
--- a/experimental/packages/opentelemetry-browser-detector/src/BrowserDetector.ts
+++ b/experimental/packages/opentelemetry-browser-detector/src/BrowserDetector.ts
@@ -63,8 +63,9 @@ class BrowserDetector implements Detector {
 // Add Browser related attributes to resources
 function getBrowserAttributes(): Attributes {
   const browserAttribs: Attributes = {};
-  const userAgentData: UserAgentData | undefined = (navigator as any)
-    .userAgentData;
+  const userAgentData = (
+    navigator as Navigator & { userAgentData?: UserAgentData }
+  ).userAgentData;
   if (userAgentData) {
     browserAttribs[BROWSER_ATTRIBUTES.PLATFORM] = userAgentData.platform;
     browserAttribs[BROWSER_ATTRIBUTES.BRANDS] = userAgentData.brands.map(

From 1c6c39b45451b0603074bfabb2352ae56541fa8c Mon Sep 17 00:00:00 2001
From: Godfrey Chan <godfreykfc@gmail.com>
Date: Wed, 29 Jan 2025 03:57:53 -0800
Subject: [PATCH 08/16] refactor(core): fix eslint warning (#5382)

---
 .../src/utils/lodash.merge.ts                  | 18 ++----------------
 1 file changed, 2 insertions(+), 16 deletions(-)

diff --git a/packages/opentelemetry-core/src/utils/lodash.merge.ts b/packages/opentelemetry-core/src/utils/lodash.merge.ts
index 25e092b8d6b..8aa649d6848 100644
--- a/packages/opentelemetry-core/src/utils/lodash.merge.ts
+++ b/packages/opentelemetry-core/src/utils/lodash.merge.ts
@@ -27,26 +27,12 @@ const undefinedTag = '[object Undefined]';
 const funcProto = Function.prototype;
 const funcToString = funcProto.toString;
 const objectCtorString = funcToString.call(Object);
-const getPrototype = overArg(Object.getPrototypeOf, Object);
+const getPrototypeOf = Object.getPrototypeOf;
 const objectProto = Object.prototype;
 const hasOwnProperty = objectProto.hasOwnProperty;
 const symToStringTag = Symbol ? Symbol.toStringTag : undefined;
 const nativeObjectToString = objectProto.toString;
 
-/**
- * Creates a unary function that invokes `func` with its argument transformed.
- *
- * @private
- * @param {Function} func The function to wrap.
- * @param {Function} transform The argument transform.
- * @returns {Function} Returns the new function.
- */
-function overArg(func: Function, transform: any): any {
-  return function (arg: any) {
-    return func(transform(arg));
-  };
-}
-
 /**
  * Checks if `value` is a plain object, that is, an object created by the
  * `Object` constructor or one with a `[[Prototype]]` of `null`.
@@ -79,7 +65,7 @@ export function isPlainObject(value: any) {
   if (!isObjectLike(value) || baseGetTag(value) !== objectTag) {
     return false;
   }
-  const proto = getPrototype(value);
+  const proto = getPrototypeOf(value);
   if (proto === null) {
     return true;
   }

From 3c040c4ef0ca372dcab9c76693ea5de3e3e79b52 Mon Sep 17 00:00:00 2001
From: Godfrey Chan <godfreykfc@gmail.com>
Date: Wed, 29 Jan 2025 09:49:04 -0800
Subject: [PATCH 09/16] fix(inst-fetch,inst-xhr) Ignore network events with
 zero-timing (#5332)

---
 experimental/CHANGELOG.md                     |   1 +
 .../test/fetch.test.ts                        |  48 +++--
 .../test/xhr.test.ts                          |  53 +++--
 .../src/enums/PerformanceTimingNames.ts       |   1 +
 .../opentelemetry-sdk-trace-web/src/types.ts  |   1 +
 .../opentelemetry-sdk-trace-web/src/utils.ts  |  60 +++---
 .../test/utils.test.ts                        | 195 +++++++++++-------
 7 files changed, 208 insertions(+), 151 deletions(-)

diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md
index 78474085545..d19f5000370 100644
--- a/experimental/CHANGELOG.md
+++ b/experimental/CHANGELOG.md
@@ -25,6 +25,7 @@ All notable changes to experimental packages in this project will be documented
 
 * fix(instrumentation-grpc): monitor error events with events.errorMonitor [#5369](https://github.com/open-telemetry/opentelemetry-js/pull/5369) @cjihrig
 * fix(exporter-metrics-otlp-http): browser OTLPMetricExporter was not passing config to OTLPMetricExporterBase super class [#5331](https://github.com/open-telemetry/opentelemetry-js/pull/5331) @trentm
+* fix(instrumentation-fetch, instrumentation-xhr): Ignore network events with zero-timings [#5332](https://github.com/open-telemetry/opentelemetry-js/pull/5332) @chancancode
 
 ### :books: (Refine Doc)
 
diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/test/fetch.test.ts b/experimental/packages/opentelemetry-instrumentation-fetch/test/fetch.test.ts
index f81336ae4f6..faf2f6b6502 100644
--- a/experimental/packages/opentelemetry-instrumentation-fetch/test/fetch.test.ts
+++ b/experimental/packages/opentelemetry-instrumentation-fetch/test/fetch.test.ts
@@ -90,27 +90,27 @@ const textToReadableStream = (msg: string): ReadableStream => {
 
 const CUSTOM_ATTRIBUTE_KEY = 'span kind';
 const defaultResource = {
-  connectEnd: 15,
-  connectStart: 13,
-  decodedBodySize: 0,
-  domainLookupEnd: 12,
-  domainLookupStart: 11,
-  encodedBodySize: 0,
-  fetchStart: 10.1,
+  entryType: 'resource',
+  name: '',
   initiatorType: 'fetch',
-  nextHopProtocol: '',
-  redirectEnd: 0,
+  startTime: 10.1,
   redirectStart: 0,
+  redirectEnd: 0,
+  workerStart: 0,
+  fetchStart: 10.1,
+  domainLookupStart: 11,
+  domainLookupEnd: 12,
+  connectStart: 13,
+  secureConnectionStart: 0,
+  connectEnd: 15,
   requestStart: 16,
-  responseEnd: 20.5,
   responseStart: 17,
-  secureConnectionStart: 14,
+  responseEnd: 20.5,
+  duration: 10.4,
+  decodedBodySize: 30,
+  encodedBodySize: 30,
   transferSize: 0,
-  workerStart: 0,
-  duration: 0,
-  entryType: '',
-  name: '',
-  startTime: 0,
+  nextHopProtocol: '',
 };
 
 function createResource(resource = {}): PerformanceResourceTiming {
@@ -124,7 +124,7 @@ function createResource(resource = {}): PerformanceResourceTiming {
 function createMainResource(resource = {}): PerformanceResourceTiming {
   const mainResource: any = createResource(resource);
   Object.keys(mainResource).forEach((key: string) => {
-    if (typeof mainResource[key] === 'number') {
+    if (typeof mainResource[key] === 'number' && mainResource[key] !== 0) {
       mainResource[key] = mainResource[key] + 30;
     }
   });
@@ -139,8 +139,14 @@ function createFakePerformanceObs(url: string) {
       const resources: PerformanceObserverEntryList = {
         getEntries(): PerformanceEntryList {
           return [
-            createResource({ name: absoluteUrl }) as any,
-            createMainResource({ name: absoluteUrl }) as any,
+            createResource({
+              name: absoluteUrl,
+              [PTN.SECURE_CONNECTION_START]: url.startsWith('https:') ? 14 : 0,
+            }) as any,
+            createMainResource({
+              name: absoluteUrl,
+              [PTN.SECURE_CONNECTION_START]: url.startsWith('https:') ? 14 : 0,
+            }) as any,
           ];
         },
         getEntriesByName(): PerformanceEntryList {
@@ -458,7 +464,7 @@ describe('fetch', () => {
       ] as number;
       assert.strictEqual(
         responseContentLength,
-        30,
+        60,
         `attributes ${SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH} is <= 0`
       );
 
@@ -1217,7 +1223,7 @@ describe('fetch', () => {
       ] as number;
       assert.strictEqual(
         responseContentLength,
-        30,
+        60,
         `attributes ${SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH} is <= 0`
       );
     });
diff --git a/experimental/packages/opentelemetry-instrumentation-xml-http-request/test/xhr.test.ts b/experimental/packages/opentelemetry-instrumentation-xml-http-request/test/xhr.test.ts
index cd9d18e84b7..823d6f942e9 100644
--- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/test/xhr.test.ts
+++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/test/xhr.test.ts
@@ -134,28 +134,37 @@ const postData = (
 
 function createResource(resource = {}): PerformanceResourceTiming {
   const defaultResource = {
-    connectEnd: 15,
-    connectStart: 13,
-    decodedBodySize: 0,
-    domainLookupEnd: 12,
-    domainLookupStart: 11,
-    encodedBodySize: 0,
-    fetchStart: 10.1,
+    entryType: 'resource',
+    name: '',
     initiatorType: 'xmlhttprequest',
-    nextHopProtocol: '',
-    redirectEnd: 0,
+    startTime: 10.1,
     redirectStart: 0,
+    redirectEnd: 0,
+    workerStart: 0,
+    fetchStart: 10.1,
+    domainLookupStart: 11,
+    domainLookupEnd: 12,
+    connectStart: 13,
+    secureConnectionStart: 0,
+    connectEnd: 15,
     requestStart: 16,
-    responseEnd: 20.5,
     responseStart: 17,
-    secureConnectionStart: 14,
+    responseEnd: 20.5,
+    duration: 10.4,
+    decodedBodySize: 30,
+    encodedBodySize: 30,
     transferSize: 0,
-    workerStart: 0,
-    duration: 0,
-    entryType: '',
-    name: '',
-    startTime: 0,
+    nextHopProtocol: '',
   };
+
+  if (
+    'name' in resource &&
+    typeof resource.name === 'string' &&
+    resource.name.startsWith('https:')
+  ) {
+    defaultResource.secureConnectionStart = 14;
+  }
+
   return Object.assign(
     {},
     defaultResource,
@@ -166,7 +175,7 @@ function createResource(resource = {}): PerformanceResourceTiming {
 function createMainResource(resource = {}): PerformanceResourceTiming {
   const mainResource: any = createResource(resource);
   Object.keys(mainResource).forEach((key: string) => {
-    if (typeof mainResource[key] === 'number') {
+    if (typeof mainResource[key] === 'number' && mainResource[key] !== 0) {
       mainResource[key] = mainResource[key] + 30;
     }
   });
@@ -424,7 +433,7 @@ describe('xhr', () => {
           ] as number;
           assert.strictEqual(
             responseContentLength,
-            30,
+            60,
             `attributes ${SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH} <= 0`
           );
           assert.strictEqual(
@@ -868,7 +877,7 @@ describe('xhr', () => {
             ] as number;
             assert.strictEqual(
               responseContentLength,
-              30,
+              60,
               `attributes ${SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH} is <= 0`
             );
           });
@@ -1052,7 +1061,7 @@ describe('xhr', () => {
             ] as number;
             assert.strictEqual(
               responseContentLength,
-              0,
+              30,
               `attributes ${SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH} <= 0`
             );
             assert.strictEqual(
@@ -1622,7 +1631,7 @@ describe('xhr', () => {
           ] as number;
           assert.strictEqual(
             responseContentLength,
-            30,
+            60,
             `attributes ${SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH} <= 0`
           );
           assert.strictEqual(
@@ -2236,7 +2245,7 @@ describe('xhr', () => {
             ] as number;
             assert.strictEqual(
               responseContentLength,
-              0,
+              30,
               `attributes ${SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH} <= 0`
             );
             assert.strictEqual(
diff --git a/packages/opentelemetry-sdk-trace-web/src/enums/PerformanceTimingNames.ts b/packages/opentelemetry-sdk-trace-web/src/enums/PerformanceTimingNames.ts
index 6730e5e2c11..252562af981 100644
--- a/packages/opentelemetry-sdk-trace-web/src/enums/PerformanceTimingNames.ts
+++ b/packages/opentelemetry-sdk-trace-web/src/enums/PerformanceTimingNames.ts
@@ -35,6 +35,7 @@ export enum PerformanceTimingNames {
   RESPONSE_END = 'responseEnd',
   RESPONSE_START = 'responseStart',
   SECURE_CONNECTION_START = 'secureConnectionStart',
+  START_TIME = 'startTime',
   UNLOAD_EVENT_END = 'unloadEventEnd',
   UNLOAD_EVENT_START = 'unloadEventStart',
 }
diff --git a/packages/opentelemetry-sdk-trace-web/src/types.ts b/packages/opentelemetry-sdk-trace-web/src/types.ts
index 076665cc3f6..00664234d08 100644
--- a/packages/opentelemetry-sdk-trace-web/src/types.ts
+++ b/packages/opentelemetry-sdk-trace-web/src/types.ts
@@ -35,6 +35,7 @@ export type PerformanceEntries = {
   [PerformanceTimingNames.RESPONSE_END]?: number;
   [PerformanceTimingNames.RESPONSE_START]?: number;
   [PerformanceTimingNames.SECURE_CONNECTION_START]?: number;
+  [PerformanceTimingNames.START_TIME]?: number;
   [PerformanceTimingNames.UNLOAD_EVENT_END]?: number;
   [PerformanceTimingNames.UNLOAD_EVENT_START]?: number;
 };
diff --git a/packages/opentelemetry-sdk-trace-web/src/utils.ts b/packages/opentelemetry-sdk-trace-web/src/utils.ts
index fb6df1d5cb6..2767b3ea5d3 100644
--- a/packages/opentelemetry-sdk-trace-web/src/utils.ts
+++ b/packages/opentelemetry-sdk-trace-web/src/utils.ts
@@ -58,32 +58,22 @@ export function hasKey<O extends object>(
  * @param span
  * @param performanceName name of performance entry for time start
  * @param entries
- * @param refPerfName name of performance entry to use for reference
+ * @param ignoreZeros
  */
 export function addSpanNetworkEvent(
   span: api.Span,
   performanceName: string,
   entries: PerformanceEntries,
-  refPerfName?: string
+  ignoreZeros = true
 ): api.Span | undefined {
-  let perfTime: number | undefined;
-  let refTime: number | undefined;
   if (
     hasKey(entries, performanceName) &&
-    typeof entries[performanceName] === 'number'
+    typeof entries[performanceName] === 'number' &&
+    !(ignoreZeros && entries[performanceName] === 0)
   ) {
-    perfTime = entries[performanceName];
-  }
-  const refName = refPerfName || PTN.FETCH_START;
-  // Use a reference time which is the earliest possible value so that the performance timings that are earlier should not be added
-  // using FETCH START time in case no reference is provided
-  if (hasKey(entries, refName) && typeof entries[refName] === 'number') {
-    refTime = entries[refName];
-  }
-  if (perfTime !== undefined && refTime !== undefined && perfTime >= refTime) {
-    span.addEvent(performanceName, perfTime);
-    return span;
+    return span.addEvent(performanceName, entries[performanceName]);
   }
+
   return undefined;
 }
 
@@ -92,32 +82,40 @@ export function addSpanNetworkEvent(
  * @param span
  * @param resource
  * @param ignoreNetworkEvents
+ * @param ignoreZeros
  */
 export function addSpanNetworkEvents(
   span: api.Span,
   resource: PerformanceEntries,
-  ignoreNetworkEvents = false
+  ignoreNetworkEvents = false,
+  ignoreZeros?: boolean
 ): void {
+  if (ignoreZeros === undefined) {
+    ignoreZeros = resource[PTN.START_TIME] !== 0;
+  }
+
   if (!ignoreNetworkEvents) {
-    addSpanNetworkEvent(span, PTN.FETCH_START, resource);
-    addSpanNetworkEvent(span, PTN.DOMAIN_LOOKUP_START, resource);
-    addSpanNetworkEvent(span, PTN.DOMAIN_LOOKUP_END, resource);
-    addSpanNetworkEvent(span, PTN.CONNECT_START, resource);
-    if (
-      hasKey(resource as PerformanceResourceTiming, 'name') &&
-      (resource as PerformanceResourceTiming)['name'].startsWith('https:')
-    ) {
-      addSpanNetworkEvent(span, PTN.SECURE_CONNECTION_START, resource);
-    }
-    addSpanNetworkEvent(span, PTN.CONNECT_END, resource);
-    addSpanNetworkEvent(span, PTN.REQUEST_START, resource);
-    addSpanNetworkEvent(span, PTN.RESPONSE_START, resource);
-    addSpanNetworkEvent(span, PTN.RESPONSE_END, resource);
+    addSpanNetworkEvent(span, PTN.FETCH_START, resource, ignoreZeros);
+    addSpanNetworkEvent(span, PTN.DOMAIN_LOOKUP_START, resource, ignoreZeros);
+    addSpanNetworkEvent(span, PTN.DOMAIN_LOOKUP_END, resource, ignoreZeros);
+    addSpanNetworkEvent(span, PTN.CONNECT_START, resource, ignoreZeros);
+    addSpanNetworkEvent(
+      span,
+      PTN.SECURE_CONNECTION_START,
+      resource,
+      ignoreZeros
+    );
+    addSpanNetworkEvent(span, PTN.CONNECT_END, resource, ignoreZeros);
+    addSpanNetworkEvent(span, PTN.REQUEST_START, resource, ignoreZeros);
+    addSpanNetworkEvent(span, PTN.RESPONSE_START, resource, ignoreZeros);
+    addSpanNetworkEvent(span, PTN.RESPONSE_END, resource, ignoreZeros);
   }
+
   const encodedLength = resource[PTN.ENCODED_BODY_SIZE];
   if (encodedLength !== undefined) {
     span.setAttribute(SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH, encodedLength);
   }
+
   const decodedLength = resource[PTN.DECODED_BODY_SIZE];
   // Spec: Not set if transport encoding not used (in which case encoded and decoded sizes match)
   if (decodedLength !== undefined && encodedLength !== decodedLength) {
diff --git a/packages/opentelemetry-sdk-trace-web/test/utils.test.ts b/packages/opentelemetry-sdk-trace-web/test/utils.test.ts
index 0011dde1485..46e9ed33c26 100644
--- a/packages/opentelemetry-sdk-trace-web/test/utils.test.ts
+++ b/packages/opentelemetry-sdk-trace-web/test/utils.test.ts
@@ -100,6 +100,7 @@ describe('utils', () => {
         setAttribute: setAttributeSpy,
       } as unknown as tracing.Span;
       const entries = {
+        [PTN.START_TIME]: 123,
         [PTN.FETCH_START]: 123,
         [PTN.DOMAIN_LOOKUP_START]: 123,
         [PTN.DOMAIN_LOOKUP_END]: 123,
@@ -113,21 +114,13 @@ describe('utils', () => {
         [PTN.ENCODED_BODY_SIZE]: 61,
       } as PerformanceEntries;
 
+      assert.strictEqual(setAttributeSpy.callCount, 0);
       assert.strictEqual(addEventSpy.callCount, 0);
 
       addSpanNetworkEvents(span, entries);
       assert.strictEqual(setAttributeSpy.callCount, 2);
-      //secure connect start should not be added to non-https resource
-      assert.strictEqual(addEventSpy.callCount, 8);
-      //secure connect start should be added to an https resource
-      addEventSpy.resetHistory();
-      addSpanNetworkEvents(span, {
-        ...entries,
-        name: 'https://foo',
-      } as PerformanceResourceTiming);
       assert.strictEqual(addEventSpy.callCount, 9);
     });
-
     it('should ignore network events when ignoreNetworkEvents is true', () => {
       const addEventSpy = sinon.spy();
       const setAttributeSpy = sinon.spy();
@@ -136,6 +129,7 @@ describe('utils', () => {
         setAttribute: setAttributeSpy,
       } as unknown as tracing.Span;
       const entries = {
+        [PTN.START_TIME]: 123,
         [PTN.FETCH_START]: 123,
         [PTN.DOMAIN_LOOKUP_START]: 123,
         [PTN.DOMAIN_LOOKUP_END]: 123,
@@ -149,13 +143,100 @@ describe('utils', () => {
         [PTN.ENCODED_BODY_SIZE]: 61,
       } as PerformanceEntries;
 
+      assert.strictEqual(setAttributeSpy.callCount, 0);
       assert.strictEqual(addEventSpy.callCount, 0);
 
       addSpanNetworkEvents(span, entries, true);
       assert.strictEqual(setAttributeSpy.callCount, 2);
-      //secure connect start should not be added to non-https resource
       assert.strictEqual(addEventSpy.callCount, 0);
     });
+    it('should ignore zero timings by default', () => {
+      const addEventSpy = sinon.spy();
+      const setAttributeSpy = sinon.spy();
+      const span = {
+        addEvent: addEventSpy,
+        setAttribute: setAttributeSpy,
+      } as unknown as tracing.Span;
+      const entries = {
+        [PTN.START_TIME]: 123,
+        [PTN.FETCH_START]: 123,
+        [PTN.DOMAIN_LOOKUP_START]: 0,
+        [PTN.DOMAIN_LOOKUP_END]: 0,
+        [PTN.CONNECT_START]: 0,
+        [PTN.SECURE_CONNECTION_START]: 0,
+        [PTN.CONNECT_END]: 0,
+        [PTN.REQUEST_START]: 0,
+        [PTN.RESPONSE_START]: 0,
+        [PTN.RESPONSE_END]: 130,
+        [PTN.DECODED_BODY_SIZE]: 0,
+        [PTN.ENCODED_BODY_SIZE]: 0,
+      } as PerformanceEntries;
+
+      assert.strictEqual(setAttributeSpy.callCount, 0);
+      assert.strictEqual(addEventSpy.callCount, 0);
+
+      addSpanNetworkEvents(span, entries);
+      assert.strictEqual(setAttributeSpy.callCount, 1);
+      assert.strictEqual(addEventSpy.callCount, 2);
+    });
+    it('should not ignore zero timings by default if startTime = 0', () => {
+      const addEventSpy = sinon.spy();
+      const setAttributeSpy = sinon.spy();
+      const span = {
+        addEvent: addEventSpy,
+        setAttribute: setAttributeSpy,
+      } as unknown as tracing.Span;
+      const entries = {
+        [PTN.START_TIME]: 0,
+        [PTN.FETCH_START]: 0,
+        [PTN.DOMAIN_LOOKUP_START]: 0,
+        [PTN.DOMAIN_LOOKUP_END]: 0,
+        [PTN.CONNECT_START]: 0,
+        [PTN.SECURE_CONNECTION_START]: 0,
+        [PTN.CONNECT_END]: 1,
+        [PTN.REQUEST_START]: 2,
+        [PTN.RESPONSE_START]: 3,
+        [PTN.RESPONSE_END]: 4,
+        [PTN.DECODED_BODY_SIZE]: 123,
+        [PTN.ENCODED_BODY_SIZE]: 61,
+      } as PerformanceEntries;
+
+      assert.strictEqual(setAttributeSpy.callCount, 0);
+      assert.strictEqual(addEventSpy.callCount, 0);
+
+      addSpanNetworkEvents(span, entries);
+      assert.strictEqual(setAttributeSpy.callCount, 2);
+      assert.strictEqual(addEventSpy.callCount, 9);
+    });
+    it('should not ignore zero timings if ignoreZeros = false', () => {
+      const addEventSpy = sinon.spy();
+      const setAttributeSpy = sinon.spy();
+      const span = {
+        addEvent: addEventSpy,
+        setAttribute: setAttributeSpy,
+      } as unknown as tracing.Span;
+      const entries = {
+        [PTN.START_TIME]: 123,
+        [PTN.FETCH_START]: 123,
+        [PTN.DOMAIN_LOOKUP_START]: 0,
+        [PTN.DOMAIN_LOOKUP_END]: 0,
+        [PTN.CONNECT_START]: 0,
+        [PTN.SECURE_CONNECTION_START]: 0,
+        [PTN.CONNECT_END]: 0,
+        [PTN.REQUEST_START]: 0,
+        [PTN.RESPONSE_START]: 0,
+        [PTN.RESPONSE_END]: 130,
+        [PTN.DECODED_BODY_SIZE]: 0,
+        [PTN.ENCODED_BODY_SIZE]: 0,
+      } as PerformanceEntries;
+
+      assert.strictEqual(setAttributeSpy.callCount, 0);
+      assert.strictEqual(addEventSpy.callCount, 0);
+
+      addSpanNetworkEvents(span, entries, false, false);
+      assert.strictEqual(setAttributeSpy.callCount, 1);
+      assert.strictEqual(addEventSpy.callCount, 9);
+    });
     it('should only include encoded size when content encoding is being used', () => {
       const addEventSpy = sinon.spy();
       const setAttributeSpy = sinon.spy();
@@ -177,7 +258,7 @@ describe('utils', () => {
     });
   });
   describe('addSpanNetworkEvent', () => {
-    [0, -2, 123].forEach(value => {
+    [-2, 123].forEach(value => {
       describe(`when entry is ${value}`, () => {
         it('should add event to span', () => {
           const addEventSpy = sinon.spy();
@@ -200,122 +281,82 @@ describe('utils', () => {
         });
       });
     });
-    describe('when entry is not numeric', () => {
-      it('should NOT add event to span', () => {
+    describe(`when entry is zero`, () => {
+      it('should not add event to span by default', () => {
         const addEventSpy = sinon.spy();
         const span = {
           addEvent: addEventSpy,
         } as unknown as tracing.Span;
         const entries = {
-          [PTN.FETCH_START]: 'non-numeric',
-        } as unknown;
+          [PTN.SECURE_CONNECTION_START]: 0,
+        } as PerformanceEntries;
 
         assert.strictEqual(addEventSpy.callCount, 0);
 
-        addSpanNetworkEvent(
-          span,
-          PTN.FETCH_START,
-          entries as PerformanceEntries
-        );
+        addSpanNetworkEvent(span, PTN.SECURE_CONNECTION_START, entries);
 
         assert.strictEqual(addEventSpy.callCount, 0);
       });
-    });
-    describe('when entries does NOT contain the performance', () => {
-      it('should NOT add event to span', () => {
+      it('should add event to span if ignoreZeros = false', () => {
         const addEventSpy = sinon.spy();
         const span = {
           addEvent: addEventSpy,
         } as unknown as tracing.Span;
         const entries = {
-          [PTN.FETCH_START]: 123,
+          [PTN.SECURE_CONNECTION_START]: 0,
         } as PerformanceEntries;
 
         assert.strictEqual(addEventSpy.callCount, 0);
 
-        addSpanNetworkEvent(span, 'foo', entries);
+        addSpanNetworkEvent(span, PTN.SECURE_CONNECTION_START, entries, false);
 
-        assert.strictEqual(
-          addEventSpy.callCount,
-          0,
-          'should not call addEvent'
-        );
+        assert.strictEqual(addEventSpy.callCount, 1);
+        const args = addEventSpy.args[0];
+
+        assert.strictEqual(args[0], 'secureConnectionStart');
+        assert.strictEqual(args[1], 0);
       });
     });
-    describe('when entries contain invalid performance timing', () => {
-      it('should only add events with time greater that or equal to reference value to span', () => {
+    describe('when entry is not numeric', () => {
+      it('should NOT add event to span', () => {
         const addEventSpy = sinon.spy();
         const span = {
           addEvent: addEventSpy,
         } as unknown as tracing.Span;
         const entries = {
-          [PTN.FETCH_START]: 123, // default reference time
-          [PTN.CONNECT_START]: 0,
-          [PTN.REQUEST_START]: 140,
-        } as PerformanceEntries;
+          [PTN.FETCH_START]: 'non-numeric',
+        } as unknown;
 
         assert.strictEqual(addEventSpy.callCount, 0);
 
-        addSpanNetworkEvent(span, PTN.CONNECT_START, entries);
-
-        assert.strictEqual(
-          addEventSpy.callCount,
-          0,
-          'should not call addEvent'
+        addSpanNetworkEvent(
+          span,
+          PTN.FETCH_START,
+          entries as PerformanceEntries
         );
 
-        addSpanNetworkEvent(span, PTN.REQUEST_START, entries);
-
-        assert.strictEqual(
-          addEventSpy.callCount,
-          1,
-          'should call addEvent for valid value'
-        );
+        assert.strictEqual(addEventSpy.callCount, 0);
       });
     });
-
-    describe('when entries contain invalid performance timing and a reference event', () => {
-      it('should only add events with time greater that or equal to reference value to span', () => {
+    describe('when entries does NOT contain the performance', () => {
+      it('should NOT add event to span', () => {
         const addEventSpy = sinon.spy();
         const span = {
           addEvent: addEventSpy,
         } as unknown as tracing.Span;
         const entries = {
-          [PTN.FETCH_START]: 120,
-          [PTN.CONNECT_START]: 120, // this is used as reference time here
-          [PTN.REQUEST_START]: 10,
+          [PTN.FETCH_START]: 123,
         } as PerformanceEntries;
 
         assert.strictEqual(addEventSpy.callCount, 0);
 
-        addSpanNetworkEvent(
-          span,
-          PTN.REQUEST_START,
-          entries,
-          PTN.CONNECT_START
-        );
+        addSpanNetworkEvent(span, 'foo', entries);
 
         assert.strictEqual(
           addEventSpy.callCount,
           0,
           'should not call addEvent'
         );
-
-        addSpanNetworkEvent(span, PTN.FETCH_START, entries, PTN.CONNECT_START);
-
-        assert.strictEqual(
-          addEventSpy.callCount,
-          1,
-          'should call addEvent for valid value'
-        );
-
-        addEventSpy.resetHistory();
-        addSpanNetworkEvent(span, PTN.CONNECT_START, entries, 'foo'); // invalid reference , not adding event to span
-        assert.strictEqual(
-          addEventSpy.callCount,
-          0,
-          'should not call addEvent for invalid reference(non-existent)'
-        );
       });
     });
   });

From 27bdf71519f36655a4af0dd2e1e5a39ec247b95f Mon Sep 17 00:00:00 2001
From: Godfrey Chan <godfreykfc@gmail.com>
Date: Thu, 30 Jan 2025 04:01:02 -0800
Subject: [PATCH 10/16] [instrumentation-fetch] Use `msw` for fetch
 instrumentation tests (#5282)

Co-authored-by: Marc Pichler <marc.pichler@dynatrace.com>
---
 .../karma.conf.js                             |    6 +-
 .../package.json                              |    8 +-
 .../test/fetch.test.ts                        | 2718 +++++++++++------
 .../test/mockServiceWorker.js                 |  307 ++
 package-lock.json                             |  841 +++++
 5 files changed, 2885 insertions(+), 995 deletions(-)
 create mode 100644 experimental/packages/opentelemetry-instrumentation-fetch/test/mockServiceWorker.js

diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/karma.conf.js b/experimental/packages/opentelemetry-instrumentation-fetch/karma.conf.js
index 5e6d4aae416..4c390294d4c 100644
--- a/experimental/packages/opentelemetry-instrumentation-fetch/karma.conf.js
+++ b/experimental/packages/opentelemetry-instrumentation-fetch/karma.conf.js
@@ -19,6 +19,10 @@ const karmaBaseConfig = require('../../../karma.base');
 
 module.exports = (config) => {
   config.set(Object.assign({}, karmaBaseConfig, {
-    webpack: karmaWebpackConfig
+    proxies: {
+      '/mockServiceWorker.js': '/base/test/mockServiceWorker.js',
+    },
+    files: [...karmaBaseConfig.files, 'test/mockServiceWorker.js'],
+    webpack: karmaWebpackConfig,
   }))
 };
diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/package.json b/experimental/packages/opentelemetry-instrumentation-fetch/package.json
index ce40e814761..ec5fa554fdf 100644
--- a/experimental/packages/opentelemetry-instrumentation-fetch/package.json
+++ b/experimental/packages/opentelemetry-instrumentation-fetch/package.json
@@ -75,6 +75,7 @@
     "karma-webpack": "5.0.1",
     "lerna": "6.6.2",
     "mocha": "10.8.2",
+    "msw": "^2.7.0",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
     "ts-loader": "9.5.2",
@@ -92,5 +93,10 @@
     "@opentelemetry/semantic-conventions": "1.28.0"
   },
   "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-fetch",
-  "sideEffects": false
+  "sideEffects": false,
+  "msw": {
+    "workerDirectory": [
+      "test"
+    ]
+  }
 }
diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/test/fetch.test.ts b/experimental/packages/opentelemetry-instrumentation-fetch/test/fetch.test.ts
index faf2f6b6502..628aefb988f 100644
--- a/experimental/packages/opentelemetry-instrumentation-fetch/test/fetch.test.ts
+++ b/experimental/packages/opentelemetry-instrumentation-fetch/test/fetch.test.ts
@@ -13,8 +13,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 import * as api from '@opentelemetry/api';
-import * as core from '@opentelemetry/core';
 import {
   isWrapped,
   registerInstrumentations,
@@ -36,9 +36,9 @@ import {
 import * as assert from 'assert';
 import * as sinon from 'sinon';
 import {
+  FetchCustomAttributeFunction,
   FetchInstrumentation,
   FetchInstrumentationConfig,
-  FetchCustomAttributeFunction,
 } from '../src';
 import { AttributeNames } from '../src/enums/AttributeNames';
 import {
@@ -52,8 +52,18 @@ import {
   SEMATTRS_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED,
 } from '@opentelemetry/semantic-conventions';
 
+import * as msw from 'msw';
+import { setupWorker } from 'msw/browser';
+
+// This should match the unexported constant with the same name in fetch.ts
+const OBSERVER_WAIT_TIME_MS = 300;
+
 class DummySpanExporter implements tracing.SpanExporter {
-  export(spans: any) {}
+  readonly exported: tracing.ReadableSpan[][] = [];
+
+  export(spans: tracing.ReadableSpan[]) {
+    this.exported.push(spans);
+  }
 
   shutdown() {
     return Promise.resolve();
@@ -64,108 +74,7 @@ class DummySpanExporter implements tracing.SpanExporter {
   }
 }
 
-const getData = (url: string, method?: string) => {
-  return fetch(url, {
-    method: method || 'GET',
-    headers: {
-      foo: 'bar',
-      Accept: 'application/json',
-      'Content-Type': 'application/json',
-    },
-  });
-};
-
-const ENCODER = new TextEncoder();
-const textToReadableStream = (msg: string): ReadableStream => {
-  return new ReadableStream({
-    start: controller => {
-      controller.enqueue(ENCODER.encode(msg));
-      controller.close();
-    },
-    cancel: controller => {
-      controller.close();
-    },
-  });
-};
-
-const CUSTOM_ATTRIBUTE_KEY = 'span kind';
-const defaultResource = {
-  entryType: 'resource',
-  name: '',
-  initiatorType: 'fetch',
-  startTime: 10.1,
-  redirectStart: 0,
-  redirectEnd: 0,
-  workerStart: 0,
-  fetchStart: 10.1,
-  domainLookupStart: 11,
-  domainLookupEnd: 12,
-  connectStart: 13,
-  secureConnectionStart: 0,
-  connectEnd: 15,
-  requestStart: 16,
-  responseStart: 17,
-  responseEnd: 20.5,
-  duration: 10.4,
-  decodedBodySize: 30,
-  encodedBodySize: 30,
-  transferSize: 0,
-  nextHopProtocol: '',
-};
-
-function createResource(resource = {}): PerformanceResourceTiming {
-  return Object.assign(
-    {},
-    defaultResource,
-    resource
-  ) as PerformanceResourceTiming;
-}
-
-function createMainResource(resource = {}): PerformanceResourceTiming {
-  const mainResource: any = createResource(resource);
-  Object.keys(mainResource).forEach((key: string) => {
-    if (typeof mainResource[key] === 'number' && mainResource[key] !== 0) {
-      mainResource[key] = mainResource[key] + 30;
-    }
-  });
-  return mainResource;
-}
-
-function createFakePerformanceObs(url: string) {
-  class FakePerfObs implements PerformanceObserver {
-    constructor(private readonly cb: PerformanceObserverCallback) {}
-    observe() {
-      const absoluteUrl = url.startsWith('http') ? url : location.origin + url;
-      const resources: PerformanceObserverEntryList = {
-        getEntries(): PerformanceEntryList {
-          return [
-            createResource({
-              name: absoluteUrl,
-              [PTN.SECURE_CONNECTION_START]: url.startsWith('https:') ? 14 : 0,
-            }) as any,
-            createMainResource({
-              name: absoluteUrl,
-              [PTN.SECURE_CONNECTION_START]: url.startsWith('https:') ? 14 : 0,
-            }) as any,
-          ];
-        },
-        getEntriesByName(): PerformanceEntryList {
-          return [];
-        },
-        getEntriesByType(): PerformanceEntryList {
-          return [];
-        },
-      };
-      this.cb(resources, this);
-    }
-    disconnect() {}
-    takeRecords(): PerformanceEntryList {
-      return [];
-    }
-  }
-
-  return FakePerfObs;
-}
+const worker = setupWorker();
 
 function testForCorrectEvents(
   events: tracing.TimedEvent[],
@@ -180,362 +89,216 @@ function testForCorrectEvents(
   }
 }
 
-describe('fetch', () => {
-  let contextManager: ZoneContextManager;
-  let lastResponse: Response | undefined;
-  let requestBody: any | undefined;
-  let webTracerWithZone: api.Tracer;
-  let webTracerProviderWithZone: WebTracerProvider;
-  let dummySpanExporter: DummySpanExporter;
-  let exportSpy: any;
-  let clearResourceTimingsSpy: any;
-  let rootSpan: api.Span;
-  let fakeNow = 0;
-  let fetchInstrumentation: FetchInstrumentation;
-
-  const url = 'http://localhost:8090/get';
-  const secureUrl = 'https://localhost:8090/get';
-  const badUrl = 'http://foo.bar.com/get';
-
-  const clearData = () => {
-    sinon.restore();
-    lastResponse = undefined;
-    requestBody = undefined;
-  };
+// "http://localhost:9876"
+const ORIGIN = location.origin;
+// "localhost:9876"
+const ORIGIN_HOST = new URL(ORIGIN).host;
 
-  const prepareData = async (
-    fileUrl: string,
-    apiCall: () => Promise<any>,
-    config: FetchInstrumentationConfig,
-    disablePerfObserver?: boolean,
-    disableGetEntries?: boolean
-  ) => {
-    sinon.useFakeTimers();
-
-    sinon.stub(core.otperformance, 'timeOrigin').value(0);
-    sinon.stub(core.otperformance, 'now').callsFake(() => fakeNow);
-
-    function fakeFetch(input: RequestInfo | Request, init: RequestInit = {}) {
-      // Once upon a time, there was a bug (#2411), causing a `Request` object
-      // to be incorrectly passed to `fetch()` as the second argument
-      assert.ok(!(init instanceof Request));
-
-      return new Promise((resolve, reject) => {
-        const responseInit: ResponseInit = {};
-
-        // This is the default response body expected by the few tests that care
-        let responseBody = JSON.stringify({
-          isServerResponse: true,
-          request: {
-            url: fileUrl,
-            headers: { ...init.headers },
-          },
-        });
+interface Resolvers<T> {
+  promise: Promise<T>;
+  resolve: (value: T) => void;
+  reject: (reason: any) => void;
+}
 
-        // get the request body
-        if (typeof input === 'string') {
-          const body = init.body;
-          if (body instanceof ReadableStream) {
-            const decoder = new TextDecoder();
-            requestBody = '';
-            const read = async () => {
-              // @ts-expect-error -- iterator symbol was removed from types
-              for await (const c of body) {
-                requestBody += decoder.decode(c);
-              }
-            };
-            read();
-          } else {
-            requestBody = init.body;
-          }
-        } else {
-          input.text().then(r => (requestBody = r));
-        }
-        if (init.method === 'DELETE') {
-          responseInit.status = 405;
-          responseInit.statusText = 'OK';
-          responseBody = 'foo';
-        } else if (
-          (input instanceof Request && input.url === url) ||
-          input === url
-        ) {
-          responseInit.status = 200;
-          responseInit.statusText = 'OK';
-        } else {
-          responseInit.status = 404;
-          responseInit.statusText = 'Not found';
-        }
+// Use Promise.withResolvers when we can
+function withResolvers<T>(): Resolvers<T> {
+  let resolve: (value: T) => void;
+  let reject: (reason: any) => void;
+  const promise = new Promise<T>((res, rej) => {
+    resolve = res;
+    reject = rej;
+  });
 
-        resolve(new window.Response(responseBody, responseInit));
-      });
-    }
+  return {
+    promise,
+    resolve: resolve!,
+    reject: reject!,
+  };
+}
 
-    sinon.stub(window, 'fetch').callsFake(fakeFetch as any);
+function waitFor(timeout: number): Promise<void> {
+  return new Promise(resolve => {
+    setTimeout(resolve, timeout);
+  });
+}
 
-    const resources: PerformanceResourceTiming[] = [];
-    resources.push(
-      createResource({
-        name: fileUrl,
-      }),
-      createMainResource({
-        name: fileUrl,
-      })
-    );
+describe('fetch', () => {
+  let workerStarted = false;
 
-    if (disablePerfObserver) {
-      sinon.stub(window, 'PerformanceObserver').value(undefined);
-    } else {
-      sinon
-        .stub(window, 'PerformanceObserver')
-        .value(createFakePerformanceObs(fileUrl));
-    }
+  const startWorker = async (
+    ...handlers: msw.RequestHandler[]
+  ): Promise<void> => {
+    worker.use(...handlers);
+    await worker.start({
+      onUnhandledRequest: 'error',
+      quiet: true,
+    });
+    workerStarted = true;
+  };
 
-    if (disableGetEntries) {
-      sinon.stub(performance, 'getEntriesByType').value(undefined);
-    } else {
-      const spyEntries = sinon.stub(performance, 'getEntriesByType');
-      spyEntries.withArgs('resource').returns(resources);
-    }
+  let pendingObservers = 0;
+  let waitForPerformanceObservers = async () => {};
 
-    fetchInstrumentation = new FetchInstrumentation(config);
-    dummySpanExporter = new DummySpanExporter();
-    webTracerProviderWithZone = new WebTracerProvider({
-      spanProcessors: [new tracing.SimpleSpanProcessor(dummySpanExporter)],
-    });
-    registerInstrumentations({
-      tracerProvider: webTracerProviderWithZone,
-      instrumentations: [fetchInstrumentation],
-    });
-    webTracerWithZone = webTracerProviderWithZone.getTracer('fetch-test');
-    exportSpy = sinon.stub(dummySpanExporter, 'export');
-    clearResourceTimingsSpy = sinon.stub(performance, 'clearResourceTimings');
-
-    // endSpan is called after the whole response body is read
-    // this process is scheduled at the same time the fetch promise is resolved
-    // due to this we can't rely on getData resolution to know that the span has ended
-    let resolveEndSpan: (value: unknown) => void;
-    const spanEnded = new Promise(r => (resolveEndSpan = r));
-    const readSpy = sinon.spy(
-      window.ReadableStreamDefaultReader.prototype,
-      'read'
-    );
-    const endSpanStub: sinon.SinonStub<any> = sinon
-      .stub(FetchInstrumentation.prototype, '_endSpan' as any)
-      .callsFake(async function (this: FetchInstrumentation, ...args: any[]) {
-        resolveEndSpan({});
-        return endSpanStub.wrappedMethod.apply(this, args);
-      });
+  beforeEach(() => {
+    if (PerformanceObserver) {
+      assert.strictEqual(
+        pendingObservers,
+        0,
+        'Did a previous test leak a PerformanceObserver?'
+      );
 
-    rootSpan = webTracerWithZone.startSpan('root');
-    await api.context.with(
-      api.trace.setSpan(api.context.active(), rootSpan),
-      async () => {
-        fakeNow = 0;
-        lastResponse = undefined;
+      let resolvers: Resolvers<void> | undefined;
 
-        const responsePromise = apiCall();
-        fakeNow = 300;
-        lastResponse = await responsePromise;
+      const _observe = PerformanceObserver.prototype.observe;
+      const _disconnect = PerformanceObserver.prototype.disconnect;
 
-        // if the url is not ignored, body.read should be called by now
-        // awaiting for the span to end
-        if (readSpy.callCount > 0) await spanEnded;
+      sinon.stub(PerformanceObserver.prototype, 'observe').callsFake(function (
+        this: PerformanceObserver,
+        ...args
+      ) {
+        _observe.call(this, ...args);
+        pendingObservers++;
 
-        await sinon.clock.runAllAsync();
-      }
-    );
-  };
+        if (!resolvers) {
+          resolvers = withResolvers();
+        }
+      });
 
-  beforeEach(() => {
-    contextManager = new ZoneContextManager().enable();
-    api.context.setGlobalContextManager(contextManager);
+      sinon
+        .stub(PerformanceObserver.prototype, 'disconnect')
+        .callsFake(function (this: PerformanceObserver, ...args) {
+          _disconnect.call(this, ...args);
+          pendingObservers--;
+
+          if (pendingObservers === 0) {
+            resolvers?.resolve();
+            resolvers = undefined;
+          }
+        });
+
+      waitForPerformanceObservers = async (): Promise<void> => {
+        while (resolvers) {
+          await resolvers.promise;
+        }
+      };
+    }
   });
 
   afterEach(() => {
-    api.context.disable();
-  });
+    try {
+      if (workerStarted) {
+        worker.stop();
+        workerStarted = false;
+      }
 
-  before(() => {
-    api.propagation.setGlobalPropagator(
-      new B3Propagator({
-        injectEncoding: B3InjectEncoding.MULTI_HEADER,
-      })
-    );
+      const _pendingObservers = pendingObservers;
+
+      pendingObservers = 0;
+      waitForPerformanceObservers = async () => {};
+
+      assert.strictEqual(
+        _pendingObservers,
+        0,
+        `Test leaked ${_pendingObservers} \`PerformanceObserver\`(s)!`
+      );
+    } finally {
+      sinon.restore();
+    }
   });
 
-  describe('when request is successful', () => {
-    beforeEach(async () => {
-      const propagateTraceHeaderCorsUrls = [url];
-      await prepareData(url, () => getData(url), {
-        propagateTraceHeaderCorsUrls,
-      });
-    });
+  describe('enabling/disabling', () => {
+    let fetchInstrumentation: FetchInstrumentation | undefined;
 
     afterEach(() => {
-      clearData();
+      fetchInstrumentation?.disable();
+      fetchInstrumentation = undefined;
     });
 
-    it('should wrap methods', () => {
+    it('should wrap global fetch when instantiated', () => {
+      assert.ok(!isWrapped(window.fetch));
+      fetchInstrumentation = new FetchInstrumentation();
       assert.ok(isWrapped(window.fetch));
+    });
+
+    it('should not wrap global fetch when instantiated with `enabled: false`', () => {
+      assert.ok(!isWrapped(window.fetch));
+      fetchInstrumentation = new FetchInstrumentation({ enabled: false });
+      assert.ok(!isWrapped(window.fetch));
       fetchInstrumentation.enable();
       assert.ok(isWrapped(window.fetch));
     });
 
-    it('should unwrap methods', () => {
+    it('should unwrap global fetch when disabled', () => {
+      fetchInstrumentation = new FetchInstrumentation();
       assert.ok(isWrapped(window.fetch));
       fetchInstrumentation.disable();
       assert.ok(!isWrapped(window.fetch));
-    });
-
-    it('should create a span with correct root span', () => {
-      const span: tracing.ReadableSpan = exportSpy.args[1][0][0];
-      assert.strictEqual(
-        span.parentSpanId,
-        rootSpan.spanContext().spanId,
-        'parent span is not root span'
-      );
-    });
 
-    it('span should have correct name', () => {
-      const span: tracing.ReadableSpan = exportSpy.args[1][0][0];
-      assert.strictEqual(span.name, 'HTTP GET', 'span has wrong name');
+      // Avoids ERROR in the logs when calling `disable()` again during cleanup
+      fetchInstrumentation = undefined;
     });
+  });
 
-    it('span should have correct kind', () => {
-      const span: tracing.ReadableSpan = exportSpy.args[1][0][0];
-      assert.strictEqual(span.kind, api.SpanKind.CLIENT, 'span has wrong kind');
-    });
-
-    it('span should have correct attributes', () => {
-      const span: tracing.ReadableSpan = exportSpy.args[1][0][0];
-      const attributes = span.attributes;
-      const keys = Object.keys(attributes);
-      assert.notStrictEqual(
-        attributes[AttributeNames.COMPONENT],
-        '',
-        `attributes ${AttributeNames.COMPONENT} is not defined`
-      );
-
-      assert.strictEqual(
-        attributes[SEMATTRS_HTTP_METHOD],
-        'GET',
-        `attributes ${SEMATTRS_HTTP_METHOD} is wrong`
-      );
-      assert.strictEqual(
-        attributes[SEMATTRS_HTTP_URL],
-        url,
-        `attributes ${SEMATTRS_HTTP_URL} is wrong`
-      );
-      assert.strictEqual(
-        attributes[SEMATTRS_HTTP_STATUS_CODE],
-        200,
-        `attributes ${SEMATTRS_HTTP_STATUS_CODE} is wrong`
-      );
-      const statusText = attributes[AttributeNames.HTTP_STATUS_TEXT];
-      assert.ok(
-        statusText === 'OK' || statusText === '',
-        `attributes ${AttributeNames.HTTP_STATUS_TEXT} is wrong`
-      );
-      assert.ok(
-        (attributes[SEMATTRS_HTTP_HOST] as string).indexOf('localhost') === 0,
-        `attributes ${SEMATTRS_HTTP_HOST} is wrong`
-      );
-
-      const httpScheme = attributes[SEMATTRS_HTTP_SCHEME];
-      assert.ok(
-        httpScheme === 'http' || httpScheme === 'https',
-        `attributes ${SEMATTRS_HTTP_SCHEME} is wrong`
-      );
-      assert.notStrictEqual(
-        attributes[SEMATTRS_HTTP_USER_AGENT],
-        '',
-        `attributes ${SEMATTRS_HTTP_USER_AGENT} is not defined`
-      );
-      const requestContentLength = attributes[
-        SEMATTRS_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED
-      ] as number;
-      assert.strictEqual(
-        requestContentLength,
-        undefined,
-        `attributes ${SEMATTRS_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED} is defined`
-      );
-      const responseContentLength = attributes[
-        SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH
-      ] as number;
-      assert.strictEqual(
-        responseContentLength,
-        60,
-        `attributes ${SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH} is <= 0`
-      );
-
-      assert.strictEqual(keys.length, 9, 'number of attributes is wrong');
-    });
+  describe('instrumentation', () => {
+    let exportedSpans: tracing.ReadableSpan[] = [];
+
+    const trace = async (
+      callback: () => Promise<void>,
+      config: FetchInstrumentationConfig = {},
+      expectExport = true
+    ): Promise<api.Span> => {
+      try {
+        const contextManager = new ZoneContextManager().enable();
+        api.context.setGlobalContextManager(contextManager);
+
+        const fetchInstrumentation: FetchInstrumentation =
+          new FetchInstrumentation(config);
+        const dummySpanExporter = new DummySpanExporter();
+        const webTracerProviderWithZone = new WebTracerProvider({
+          spanProcessors: [new tracing.SimpleSpanProcessor(dummySpanExporter)],
+        });
+        registerInstrumentations({
+          tracerProvider: webTracerProviderWithZone,
+          instrumentations: [fetchInstrumentation],
+        });
+        const webTracerWithZone =
+          webTracerProviderWithZone.getTracer('fetch-test');
 
-    it('span should have correct events', () => {
-      const span: tracing.ReadableSpan = exportSpy.args[1][0][0];
-      const events = span.events;
-      assert.strictEqual(events.length, 8, 'number of events is wrong');
-      testForCorrectEvents(events, [
-        PTN.FETCH_START,
-        PTN.DOMAIN_LOOKUP_START,
-        PTN.DOMAIN_LOOKUP_END,
-        PTN.CONNECT_START,
-        PTN.CONNECT_END,
-        PTN.REQUEST_START,
-        PTN.RESPONSE_START,
-        PTN.RESPONSE_END,
-      ]);
-    });
+        const rootSpan = webTracerWithZone.startSpan('root');
+        await api.context.with(
+          api.trace.setSpan(api.context.active(), rootSpan),
+          callback
+        );
 
-    it('should create a span for preflight request', () => {
-      const span: tracing.ReadableSpan = exportSpy.args[0][0][0];
-      const parentSpan: tracing.ReadableSpan = exportSpy.args[1][0][0];
-      assert.strictEqual(
-        span.parentSpanId,
-        parentSpan.spanContext().spanId,
-        'parent span is not root span'
-      );
-    });
+        await waitForPerformanceObservers();
 
-    it('preflight request span should have correct name', () => {
-      const span: tracing.ReadableSpan = exportSpy.args[0][0][0];
-      assert.strictEqual(
-        span.name,
-        'CORS Preflight',
-        'preflight request span has wrong name'
-      );
-    });
+        if (expectExport) {
+          // This isn't intended to be an invariant, but in the current setup we
+          // don't expect multiple exports, it's easier to assert and unwrap the
+          // array of arrays here, than have every single test deal with that
+          // downstream.
+          assert.strictEqual(dummySpanExporter.exported.length, 1);
+          exportedSpans = dummySpanExporter.exported[0];
+        } else {
+          assert.strictEqual(dummySpanExporter.exported.length, 0);
+        }
 
-    it('preflight request span should have correct kind', () => {
-      const span: tracing.ReadableSpan = exportSpy.args[0][0][0];
-      assert.strictEqual(
-        span.kind,
-        api.SpanKind.INTERNAL,
-        'span has wrong kind'
-      );
-    });
+        return rootSpan;
+      } finally {
+        api.context.disable();
+      }
+    };
 
-    it('preflight request span should have correct events', () => {
-      const span: tracing.ReadableSpan = exportSpy.args[0][0][0];
-      const events = span.events;
-      assert.strictEqual(events.length, 8, 'number of events is wrong');
-      testForCorrectEvents(events, [
-        PTN.FETCH_START,
-        PTN.DOMAIN_LOOKUP_START,
-        PTN.DOMAIN_LOOKUP_END,
-        PTN.CONNECT_START,
-        PTN.CONNECT_END,
-        PTN.REQUEST_START,
-        PTN.RESPONSE_START,
-        PTN.RESPONSE_END,
-      ]);
+    afterEach(() => {
+      exportedSpans = [];
     });
 
-    it('should set trace headers', async () => {
-      const span: api.Span = exportSpy.args[1][0][0];
-      assert.ok(lastResponse instanceof Response);
+    const assertPropagationHeaders = async (
+      response: Response
+    ): Promise<Record<string, string>> => {
+      const { request } = await response.json();
 
-      const { request } = await lastResponse.json();
+      const span: tracing.ReadableSpan = exportedSpans[0];
 
       assert.strictEqual(
         request.headers[X_B3_TRACE_ID],
@@ -552,680 +315,1649 @@ describe('fetch', () => {
         String(span.spanContext().traceFlags),
         `trace header '${X_B3_SAMPLED}' not set`
       );
-    });
 
-    it('should set trace headers with a request object', () => {
-      const r = new Request('url');
-      window.fetch(r).catch(() => {});
-      assert.ok(typeof r.headers.get(X_B3_TRACE_ID) === 'string');
-    });
+      return request.headers;
+    };
 
-    it('should keep custom headers with a request object and a headers object', () => {
-      const r = new Request('url', {
-        headers: new Headers({ foo: 'bar' }),
-      });
-      window.fetch(r).catch(() => {});
-      assert.ok(r.headers.get('foo') === 'bar');
-    });
+    const assertNoPropagationHeaders = async (
+      response: Response
+    ): Promise<Record<string, string>> => {
+      const { request } = await response.json();
 
-    it('should keep custom headers with url, untyped request object and typed (Headers) headers object', () => {
-      const url = 'url';
-      const init = {
-        headers: new Headers({ foo: 'bar' }),
-      };
-      window.fetch(url, init).catch(() => {});
-      assert.ok(init.headers.get('foo') === 'bar');
-    });
+      assert.ok(
+        !(X_B3_TRACE_ID in request.headers),
+        `trace header '${X_B3_TRACE_ID}' should not be set`
+      );
+      assert.ok(
+        !(X_B3_SPAN_ID in request.headers),
+        `trace header '${X_B3_SPAN_ID}' should not be set`
+      );
+      assert.ok(
+        !(X_B3_SAMPLED in request.headers),
+        `trace header '${X_B3_SAMPLED}' should not be set`
+      );
 
-    it('should keep custom headers with url, untyped request object and untyped headers object', () => {
-      const url = 'url';
-      const init = {
-        headers: { foo: 'bar' },
-      };
-      window.fetch(url, init).catch(() => {});
-      assert.ok(init.headers['foo'] === 'bar');
-    });
+      return request.headers;
+    };
 
-    it('should keep custom headers with url, untyped request object and typed (Map) headers object', () => {
-      const url = 'url';
-      const init = {
-        headers: new Map().set('foo', 'bar'),
+    describe('same origin requests', () => {
+      const tracedFetch = async ({
+        handlers = [
+          msw.http.get('/api/status.json', () => {
+            return msw.HttpResponse.json({ ok: true });
+          }),
+          msw.http.get('/api/echo-headers.json', ({ request }) => {
+            return msw.HttpResponse.json({
+              request: {
+                headers: Object.fromEntries(request.headers),
+              },
+            });
+          }),
+        ],
+        callback = () => fetch('/api/status.json'),
+        config = {},
+      }: {
+        handlers?: msw.RequestHandler[];
+        callback?: () => Promise<Response>;
+        config?: FetchInstrumentationConfig;
+      } = {}): Promise<{ rootSpan: api.Span; response: Response }> => {
+        let response: Response | undefined;
+
+        await startWorker(...handlers);
+
+        const rootSpan = await trace(async () => {
+          response = await callback();
+        }, config);
+
+        assert.ok(response instanceof Response);
+        assert.strictEqual(exportedSpans.length, 1);
+
+        return { rootSpan, response };
       };
-      // eslint-disable-next-line @typescript-eslint/ban-ts-comment
-      // @ts-ignore variable init not of RequestInit type
-      window.fetch(url, init).catch(() => {});
-      assert.ok(init.headers.get('foo') === 'bar');
-    });
 
-    it('should NOT clear the resources', () => {
-      assert.strictEqual(
-        clearResourceTimingsSpy.args.length,
-        0,
-        'resources have been cleared'
-      );
-    });
+      describe('simple request', () => {
+        let rootSpan: api.Span | undefined;
+        let response: Response | undefined;
 
-    describe('when propagateTraceHeaderCorsUrls does NOT MATCH', () => {
-      let spyDebug: sinon.SinonSpy;
-      beforeEach(async () => {
-        const diagLogger = new api.DiagConsoleLogger();
-        spyDebug = sinon.spy();
-        diagLogger.debug = spyDebug;
-        api.diag.setLogger(diagLogger, api.DiagLogLevel.ALL);
-        clearData();
-        await prepareData(url, () => getData(url), {});
-      });
-      afterEach(() => {
-        sinon.restore();
+        beforeEach(async () => {
+          const result = await tracedFetch();
+          rootSpan = result.rootSpan;
+          response = result.response;
+        });
+
+        afterEach(() => {
+          rootSpan = undefined;
+          response = undefined;
+        });
+
+        it('should create a span with correct root span', () => {
+          assert.strictEqual(
+            exportedSpans.length,
+            1,
+            'creates a single span for the fetch() request'
+          );
+
+          const span: tracing.ReadableSpan = exportedSpans[0];
+
+          assert.strictEqual(
+            span.parentSpanId,
+            rootSpan!.spanContext().spanId,
+            'parent span is not root span'
+          );
+        });
+
+        it('span should have correct name', () => {
+          const span: tracing.ReadableSpan = exportedSpans[0];
+          assert.strictEqual(span.name, 'HTTP GET', 'span has wrong name');
+        });
+
+        it('span should have correct kind', () => {
+          const span: tracing.ReadableSpan = exportedSpans[0];
+          assert.strictEqual(
+            span.kind,
+            api.SpanKind.CLIENT,
+            'span has wrong kind'
+          );
+        });
+
+        it('span should have correct attributes', () => {
+          const span: tracing.ReadableSpan = exportedSpans[0];
+          const attributes = span.attributes;
+          const keys = Object.keys(attributes);
+          assert.notStrictEqual(
+            attributes[AttributeNames.COMPONENT],
+            '',
+            `attributes ${AttributeNames.COMPONENT} is not defined`
+          );
+
+          assert.strictEqual(
+            attributes[SEMATTRS_HTTP_METHOD],
+            'GET',
+            `attributes ${SEMATTRS_HTTP_METHOD} is wrong`
+          );
+          assert.strictEqual(
+            attributes[SEMATTRS_HTTP_URL],
+            `${ORIGIN}/api/status.json`,
+            `attributes ${SEMATTRS_HTTP_URL} is wrong`
+          );
+          assert.strictEqual(
+            attributes[SEMATTRS_HTTP_STATUS_CODE],
+            200,
+            `attributes ${SEMATTRS_HTTP_STATUS_CODE} is wrong`
+          );
+          assert.strictEqual(
+            attributes[AttributeNames.HTTP_STATUS_TEXT],
+            'OK',
+            `attributes ${AttributeNames.HTTP_STATUS_TEXT} is wrong`
+          );
+          assert.strictEqual(
+            attributes[SEMATTRS_HTTP_HOST],
+            ORIGIN_HOST,
+            `attributes ${SEMATTRS_HTTP_HOST} is wrong`
+          );
+
+          assert.ok(
+            attributes[SEMATTRS_HTTP_SCHEME] === 'http',
+            `attributes ${SEMATTRS_HTTP_SCHEME} is wrong`
+          );
+          assert.notStrictEqual(
+            attributes[SEMATTRS_HTTP_USER_AGENT],
+            '',
+            `attributes ${SEMATTRS_HTTP_USER_AGENT} is not defined`
+          );
+          assert.strictEqual(
+            attributes[SEMATTRS_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED],
+            undefined,
+            `attributes ${SEMATTRS_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED} is defined`
+          );
+          assert.strictEqual(
+            attributes[SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH],
+            parseInt(response!.headers.get('content-length')!),
+            `attributes ${SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH} is incorrect`
+          );
+
+          assert.strictEqual(keys.length, 9, 'number of attributes is wrong');
+        });
+
+        it('span should have correct events', () => {
+          const span: tracing.ReadableSpan = exportedSpans[0];
+          const events = span.events;
+          assert.strictEqual(events.length, 8, 'number of events is wrong');
+          testForCorrectEvents(events, [
+            PTN.FETCH_START,
+            PTN.DOMAIN_LOOKUP_START,
+            PTN.DOMAIN_LOOKUP_END,
+            PTN.CONNECT_START,
+            PTN.CONNECT_END,
+            PTN.REQUEST_START,
+            PTN.RESPONSE_START,
+            PTN.RESPONSE_END,
+          ]);
+        });
       });
 
-      it('should NOT set trace headers', async () => {
-        assert.ok(lastResponse instanceof Response);
+      describe('trace propagation headers', () => {
+        describe('with global propagator', () => {
+          before(() => {
+            api.propagation.setGlobalPropagator(
+              new B3Propagator({
+                injectEncoding: B3InjectEncoding.MULTI_HEADER,
+              })
+            );
+          });
+
+          after(() => {
+            api.propagation.disable();
+          });
+
+          it('should set trace propagation headers', async () => {
+            const { response } = await tracedFetch({
+              callback: () => fetch('/api/echo-headers.json'),
+            });
+
+            await assertPropagationHeaders(response);
+          });
 
-        const { request } = await lastResponse.json();
+          it('should set trace propagation headers with a request object', async () => {
+            const { response } = await tracedFetch({
+              callback: () => fetch(new Request('/api/echo-headers.json')),
+            });
 
-        assert.strictEqual(
-          request.headers[X_B3_TRACE_ID],
-          undefined,
-          `trace header '${X_B3_TRACE_ID}' should not be set`
-        );
-        assert.strictEqual(
-          request.headers[X_B3_SPAN_ID],
-          undefined,
-          `trace header '${X_B3_SPAN_ID}' should not be set`
-        );
-        assert.strictEqual(
-          request.headers[X_B3_SAMPLED],
-          undefined,
-          `trace header '${X_B3_SAMPLED}' should not be set`
-        );
+            await assertPropagationHeaders(response);
+          });
+
+          it('should keep custom headers with a request object and a headers object', async () => {
+            const { response } = await tracedFetch({
+              callback: () =>
+                fetch(
+                  new Request('/api/echo-headers.json', {
+                    headers: new Headers({ foo: 'bar' }),
+                  })
+                ),
+            });
+
+            const headers = await assertPropagationHeaders(response);
+
+            assert.strictEqual(headers['foo'], 'bar');
+          });
+
+          it('should keep custom headers with url, untyped request object and typed (Headers) headers object', async () => {
+            const { response } = await tracedFetch({
+              callback: () =>
+                fetch('/api/echo-headers.json', {
+                  headers: new Headers({ foo: 'bar' }),
+                }),
+            });
+
+            const headers = await assertPropagationHeaders(response);
+
+            assert.strictEqual(headers['foo'], 'bar');
+          });
+
+          it('should keep custom headers with url, untyped request object and untyped headers object', async () => {
+            const { response } = await tracedFetch({
+              callback: () =>
+                fetch('/api/echo-headers.json', {
+                  headers: { foo: 'bar' },
+                }),
+            });
+
+            const headers = await assertPropagationHeaders(response);
+
+            assert.strictEqual(headers['foo'], 'bar');
+          });
+
+          it('should keep custom headers with url, untyped request object and typed (Map) headers object', async () => {
+            const { response } = await tracedFetch({
+              callback: () =>
+                fetch('/api/echo-headers.json', {
+                  // @ts-expect-error relies on implicit coercion
+                  headers: new Map().set('foo', 'bar'),
+                }),
+            });
+
+            const headers = await assertPropagationHeaders(response);
+
+            assert.strictEqual(headers['foo'], 'bar');
+          });
+        });
+
+        describe('without global propagator', () => {
+          it('should not set trace propagation headers', async () => {
+            const { response } = await tracedFetch({
+              callback: () => fetch('/api/echo-headers.json'),
+            });
+
+            await assertNoPropagationHeaders(response);
+          });
+
+          it('should not set trace propagation headers with a request object', async () => {
+            const { response } = await tracedFetch({
+              callback: () => fetch(new Request('/api/echo-headers.json')),
+            });
+
+            await assertNoPropagationHeaders(response);
+          });
+
+          it('should keep custom headers with a request object and a headers object', async () => {
+            const { response } = await tracedFetch({
+              callback: () =>
+                fetch(
+                  new Request('/api/echo-headers.json', {
+                    headers: new Headers({ foo: 'bar' }),
+                  })
+                ),
+            });
+
+            const headers = await assertNoPropagationHeaders(response);
+
+            assert.strictEqual(headers['foo'], 'bar');
+          });
+
+          it('should keep custom headers with url, untyped request object and typed (Headers) headers object', async () => {
+            const { response } = await tracedFetch({
+              callback: () =>
+                fetch('/api/echo-headers.json', {
+                  headers: new Headers({ foo: 'bar' }),
+                }),
+            });
+
+            const headers = await assertNoPropagationHeaders(response);
+
+            assert.strictEqual(headers['foo'], 'bar');
+          });
+
+          it('should keep custom headers with url, untyped request object and untyped headers object', async () => {
+            const { response } = await tracedFetch({
+              callback: () =>
+                fetch('/api/echo-headers.json', {
+                  headers: { foo: 'bar' },
+                }),
+            });
+
+            const headers = await assertNoPropagationHeaders(response);
+
+            assert.strictEqual(headers['foo'], 'bar');
+          });
+
+          it('should keep custom headers with url, untyped request object and typed (Map) headers object', async () => {
+            const { response } = await tracedFetch({
+              callback: () =>
+                fetch('/api/echo-headers.json', {
+                  // @ts-expect-error relies on implicit coercion
+                  headers: new Map().set('foo', 'bar'),
+                }),
+            });
+
+            const headers = await assertNoPropagationHeaders(response);
+
+            assert.strictEqual(headers['foo'], 'bar');
+          });
+        });
       });
-      it('should debug info that injecting headers was skipped', () => {
-        assert.strictEqual(
-          spyDebug.lastCall.args[1],
-          'headers inject skipped due to CORS policy'
-        );
+
+      describe('clearTimingResources', () => {
+        let clearResourceTimingsStub: sinon.SinonStub | undefined;
+
+        beforeEach(async () => {
+          clearResourceTimingsStub = sinon.stub(
+            performance,
+            'clearResourceTimings'
+          );
+        });
+
+        afterEach(() => {
+          clearResourceTimingsStub = undefined;
+        });
+
+        describe('when `clearResourceTimings` is not set', () => {
+          it('should not clear resource timing entries', async () => {
+            await tracedFetch();
+            assert.strictEqual(clearResourceTimingsStub!.notCalled, true);
+          });
+        });
+
+        describe('when `clearResourceTimings` is `false`', () => {
+          it('should not clear resource timing entries', async () => {
+            await tracedFetch({ config: { clearTimingResources: false } });
+            assert.strictEqual(clearResourceTimingsStub!.notCalled, true);
+          });
+        });
+
+        describe('when `clearResourceTimings` is `true`', () => {
+          it('should clear resource timing entries', async () => {
+            await tracedFetch({ config: { clearTimingResources: true } });
+            assert.strictEqual(clearResourceTimingsStub!.calledOnce, true);
+          });
+        });
       });
     });
-  });
 
-  describe('post data', () => {
-    describe('url and config object when request body measurement is disabled', () => {
-      beforeEach(async () => {
-        await prepareData(
-          url,
-          () =>
-            fetch(url, {
-              method: 'POST',
-              headers: {
-                foo: 'bar',
-                Accept: 'application/json',
-                'Content-Type': 'application/json',
-              },
-              body: JSON.stringify({ hello: 'world' }),
-            }),
-          {}
-        );
-      });
+    // ServiceWorker request interception occurs before CORS preflight requests
+    // are made. If a request is handled by the SW, it won't cause a preflight
+    // (at least not on the page – if the SW makes its own "real" request while
+    // responding to the fetch event, that request may very well require CORS &
+    // preflight, but that would be happening within the SW, not the page.)
+    //
+    // However, as far as the instrumentation behavior, there aren't much that
+    // we need to specifically unit test in relation to CORS and preflights,
+    // since preflight requests are completely transparent, the instrumentation
+    // code could not detect that it happened, let alone report on its timing:
+    // https://github.com/open-telemetry/opentelemetry-js/issues/5122
+    //
+    // So the purpose of this test module is mostly just to test the configs
+    // related to CORS requests.
+    describe('cross origin requests', () => {
+      const tracedFetch = async ({
+        handlers = [
+          msw.http.get('http://example.com/api/status.json', () => {
+            return msw.HttpResponse.json({ ok: true });
+          }),
+          msw.http.get(
+            'http://example.com/api/echo-headers.json',
+            ({ request }) => {
+              return msw.HttpResponse.json({
+                request: {
+                  headers: Object.fromEntries(request.headers),
+                },
+              });
+            }
+          ),
+        ],
+        callback = () =>
+          fetch('http://example.com/api/status.json', {
+            mode: 'cors',
+            headers: { 'x-custom': 'custom value' },
+          }),
+        config = {},
+      }: {
+        handlers?: msw.RequestHandler[];
+        callback?: () => Promise<Response>;
+        config?: FetchInstrumentationConfig;
+      } = {}): Promise<{ rootSpan: api.Span; response: Response }> => {
+        let response: Response | undefined;
+
+        await startWorker(...handlers);
+
+        const rootSpan = await trace(async () => {
+          response = await callback();
+        }, config);
+
+        assert.ok(response instanceof Response);
+        assert.strictEqual(exportedSpans.length, 1);
+
+        return { rootSpan, response };
+      };
 
-      afterEach(() => {
-        clearData();
+      // Smoke test to ensure nothing breaks when the request is CORS
+      describe('simple request', () => {
+        let rootSpan: api.Span | undefined;
+        let response: Response | undefined;
+
+        beforeEach(async () => {
+          const result = await tracedFetch();
+          rootSpan = result.rootSpan;
+          response = result.response;
+        });
+
+        afterEach(() => {
+          rootSpan = undefined;
+          response = undefined;
+        });
+
+        it('should create a span with correct root span', () => {
+          assert.strictEqual(
+            exportedSpans.length,
+            1,
+            'creates a single span for the fetch() request'
+          );
+
+          const span: tracing.ReadableSpan = exportedSpans[0];
+
+          assert.strictEqual(
+            span.parentSpanId,
+            rootSpan!.spanContext().spanId,
+            'parent span is not root span'
+          );
+        });
+
+        it('span should have correct name', () => {
+          const span: tracing.ReadableSpan = exportedSpans[0];
+          assert.strictEqual(span.name, 'HTTP GET', 'span has wrong name');
+        });
+
+        it('span should have correct kind', () => {
+          const span: tracing.ReadableSpan = exportedSpans[0];
+          assert.strictEqual(
+            span.kind,
+            api.SpanKind.CLIENT,
+            'span has wrong kind'
+          );
+        });
+
+        it('span should have correct attributes', () => {
+          const span: tracing.ReadableSpan = exportedSpans[0];
+          const attributes = span.attributes;
+          const keys = Object.keys(attributes);
+          assert.notStrictEqual(
+            attributes[AttributeNames.COMPONENT],
+            '',
+            `attributes ${AttributeNames.COMPONENT} is not defined`
+          );
+
+          assert.strictEqual(
+            attributes[SEMATTRS_HTTP_METHOD],
+            'GET',
+            `attributes ${SEMATTRS_HTTP_METHOD} is wrong`
+          );
+          assert.strictEqual(
+            attributes[SEMATTRS_HTTP_URL],
+            'http://example.com/api/status.json',
+            `attributes ${SEMATTRS_HTTP_URL} is wrong`
+          );
+          assert.strictEqual(
+            attributes[SEMATTRS_HTTP_STATUS_CODE],
+            200,
+            `attributes ${SEMATTRS_HTTP_STATUS_CODE} is wrong`
+          );
+          assert.strictEqual(
+            attributes[AttributeNames.HTTP_STATUS_TEXT],
+            'OK',
+            `attributes ${AttributeNames.HTTP_STATUS_TEXT} is wrong`
+          );
+          assert.strictEqual(
+            attributes[SEMATTRS_HTTP_HOST],
+            'example.com',
+            `attributes ${SEMATTRS_HTTP_HOST} is wrong`
+          );
+
+          assert.ok(
+            attributes[SEMATTRS_HTTP_SCHEME] === 'http',
+            `attributes ${SEMATTRS_HTTP_SCHEME} is wrong`
+          );
+          assert.notStrictEqual(
+            attributes[SEMATTRS_HTTP_USER_AGENT],
+            '',
+            `attributes ${SEMATTRS_HTTP_USER_AGENT} is not defined`
+          );
+          assert.strictEqual(
+            attributes[SEMATTRS_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED],
+            undefined,
+            `attributes ${SEMATTRS_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED} is defined`
+          );
+          assert.strictEqual(
+            attributes[SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH],
+            parseInt(response!.headers.get('content-length')!),
+            `attributes ${SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH} is incorrect`
+          );
+
+          assert.strictEqual(keys.length, 9, 'number of attributes is wrong');
+        });
+
+        it('span should have correct events', () => {
+          const span: tracing.ReadableSpan = exportedSpans[0];
+          const events = span.events;
+          assert.strictEqual(events.length, 8, 'number of events is wrong');
+          testForCorrectEvents(events, [
+            PTN.FETCH_START,
+            PTN.DOMAIN_LOOKUP_START,
+            PTN.DOMAIN_LOOKUP_END,
+            PTN.CONNECT_START,
+            PTN.CONNECT_END,
+            PTN.REQUEST_START,
+            PTN.RESPONSE_START,
+            PTN.RESPONSE_END,
+          ]);
+        });
       });
 
-      it('should post data', async () => {
-        assert.strictEqual(requestBody, '{"hello":"world"}');
+      describe('trace propagation headers', () => {
+        let spyDebug: sinon.SinonSpy | undefined;
 
-        const span: tracing.ReadableSpan = exportSpy.args[1][0][0];
-        const attributes = span.attributes;
+        before(() => {
+          api.propagation.setGlobalPropagator(
+            new B3Propagator({
+              injectEncoding: B3InjectEncoding.MULTI_HEADER,
+            })
+          );
+        });
 
-        assert.strictEqual(
-          attributes[SEMATTRS_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED],
-          undefined
-        );
+        beforeEach(async () => {
+          const logger = new api.DiagConsoleLogger();
+          spyDebug = sinon.stub(logger, 'debug');
+          api.diag.setLogger(logger, api.DiagLogLevel.ALL);
+        });
+
+        afterEach(() => {
+          api.diag.disable();
+          spyDebug = undefined;
+        });
+
+        after(() => {
+          api.propagation.disable();
+        });
+
+        const assertNoDebugMessages = () => {
+          assert.ok(spyDebug);
+          sinon.assert.neverCalledWith(
+            spyDebug,
+            '@opentelemetry/instrumentation-fetch',
+            'headers inject skipped due to CORS policy'
+          );
+        };
+
+        const assertDebugMessage = () => {
+          assert.ok(spyDebug);
+          sinon.assert.calledWith(
+            spyDebug,
+            '@opentelemetry/instrumentation-fetch',
+            'headers inject skipped due to CORS policy'
+          );
+        };
+
+        it('should not set propagation headers with no `propagateTraceHeaderCorsUrls`', async () => {
+          const { response } = await tracedFetch({
+            callback: () =>
+              fetch('http://example.com/api/echo-headers.json', {
+                mode: 'cors',
+                headers: { 'x-custom': 'custom value' },
+              }),
+          });
+
+          await assertNoPropagationHeaders(response);
+
+          assertDebugMessage();
+        });
+
+        it('should not set propagation headers when not matching `propagateTraceHeaderCorsUrls`', async () => {
+          const { response } = await tracedFetch({
+            callback: () =>
+              fetch('http://example.com/api/echo-headers.json', {
+                mode: 'cors',
+                headers: { 'x-custom': 'custom value' },
+              }),
+            config: {
+              propagateTraceHeaderCorsUrls: ['nope'],
+            },
+          });
+
+          await assertNoPropagationHeaders(response);
+
+          assertDebugMessage();
+        });
+
+        it('should set propagation headers when matching `propagateTraceHeaderCorsUrls`', async () => {
+          const { response } = await tracedFetch({
+            callback: () =>
+              fetch('http://example.com/api/echo-headers.json', {
+                mode: 'cors',
+                headers: { 'x-custom': 'custom value' },
+              }),
+            config: {
+              propagateTraceHeaderCorsUrls: [/example\.com/],
+            },
+          });
+
+          await assertPropagationHeaders(response);
+
+          assertNoDebugMessages();
+        });
       });
     });
 
-    describe('url and config object', () => {
-      beforeEach(async () => {
-        await prepareData(
-          url,
-          () =>
-            fetch(url, {
-              method: 'POST',
-              headers: {
-                foo: 'bar',
-                Accept: 'application/json',
-                'Content-Type': 'application/json',
-              },
-              body: JSON.stringify({ hello: 'world' }),
-            }),
-          {
-            measureRequestSize: true,
-          }
-        );
-      });
+    describe('POST requests', () => {
+      const DEFAULT_BODY = Object.freeze({ hello: 'world' });
+
+      async function tracedFetch({
+        handlers = [
+          msw.http.post('/api/echo-body.json', async ({ request }) => {
+            if (request.headers.get('Content-Type') === 'application/json') {
+              return msw.HttpResponse.json({
+                request: {
+                  headers: Object.fromEntries(request.headers),
+                  body: await request.json(),
+                },
+              });
+            } else {
+              return msw.HttpResponse.json({
+                request: {
+                  headers: Object.fromEntries(request.headers),
+                  body: await request.text(),
+                },
+              });
+            }
+          }),
+        ],
+        body = DEFAULT_BODY,
+        callback = () =>
+          fetch('/api/echo-body.json', {
+            method: 'POST',
+            headers: {
+              'Content-Type': 'application/json',
+            },
+            body: JSON.stringify(body),
+          }),
+        config = {},
+      }: {
+        handlers?: msw.RequestHandler[];
+        body?: unknown;
+        callback?: () => Promise<Response>;
+        config?: FetchInstrumentationConfig;
+      } = {}): Promise<{ rootSpan: api.Span; response: Response }> {
+        let response: Response | undefined;
+
+        await startWorker(...handlers);
+
+        const rootSpan = await trace(async () => {
+          response = await callback();
+        }, config);
+
+        assert.ok(response instanceof Response);
+        assert.strictEqual(exportedSpans.length, 1);
+
+        return { rootSpan, response };
+      }
 
-      afterEach(() => {
-        clearData();
-      });
+      const assertJSONBody = async (
+        response: Response,
+        body: unknown = DEFAULT_BODY
+      ) => {
+        const { request } = await response.json();
+        assert.strictEqual(request.headers['content-type'], 'application/json');
+        assert.deepStrictEqual(request.body, body);
+      };
 
-      it('should post data', async () => {
-        assert.strictEqual(requestBody, '{"hello":"world"}');
+      describe('measureRequestSize', () => {
+        const assertNoRequestContentLength = () => {
+          const span: tracing.ReadableSpan = exportedSpans[0];
+
+          assert.strictEqual(
+            span.attributes[SEMATTRS_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED],
+            undefined
+          );
+        };
+
+        const assertHasRequestContentLength = (
+          body = JSON.stringify(DEFAULT_BODY)
+        ) => {
+          const span: tracing.ReadableSpan = exportedSpans[0];
+
+          assert.strictEqual(
+            span.attributes[SEMATTRS_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED],
+            body.length
+          );
+        };
+
+        describe('when `measureRequestSize` is not set', () => {
+          it('should not measure request body size', async () => {
+            const { response } = await tracedFetch();
+            assertJSONBody(response);
+            assertNoRequestContentLength();
+          });
+        });
 
-        const span: tracing.ReadableSpan = exportSpy.args[1][0][0];
-        const attributes = span.attributes;
+        describe('when `measureRequestSize` is `false`', () => {
+          it('should not measure request body size', async () => {
+            const { response } = await tracedFetch({
+              config: { measureRequestSize: false },
+            });
+            assertJSONBody(response);
+            assertNoRequestContentLength();
+          });
+        });
 
-        assert.strictEqual(
-          attributes[SEMATTRS_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED],
-          17
-        );
+        describe('with `measureRequestSize: `true`', () => {
+          describe('with url and init object', () => {
+            it('should measure request body size', async () => {
+              const { response } = await tracedFetch({
+                config: { measureRequestSize: true },
+              });
+              assertJSONBody(response);
+              assertHasRequestContentLength();
+            });
+          });
+
+          describe('with url and init object with a body stream', () => {
+            it('should measure request body size', async () => {
+              const body = JSON.stringify(DEFAULT_BODY);
+              const encoder = new TextEncoder();
+              const stream = new ReadableStream({
+                start: controller => {
+                  controller.enqueue(encoder.encode(body));
+                  controller.close();
+                },
+                cancel: controller => {
+                  controller.close();
+                },
+              });
+              const { response } = await tracedFetch({
+                callback: () =>
+                  fetch('/api/echo-body.json', {
+                    method: 'POST',
+                    headers: {
+                      'Content-Type': 'application/json',
+                    },
+                    body: stream,
+                    // @ts-expect-error this is required IRL but missing on the current TS definition
+                    // https://developer.chrome.com/docs/capabilities/web-apis/fetch-streaming-requests#half_duplex
+                    duplex: 'half',
+                  }),
+                config: { measureRequestSize: true },
+              });
+              assertJSONBody(response);
+              assertHasRequestContentLength();
+            });
+          });
+
+          describe('with a Request object', () => {
+            it('should measure request body size', async () => {
+              const { response } = await tracedFetch({
+                callback: () =>
+                  fetch(
+                    new Request('/api/echo-body.json', {
+                      method: 'POST',
+                      headers: {
+                        'Content-Type': 'application/json',
+                      },
+                      body: JSON.stringify(DEFAULT_BODY),
+                    })
+                  ),
+                config: { measureRequestSize: true },
+              });
+              assertJSONBody(response);
+              assertHasRequestContentLength();
+            });
+          });
+
+          describe('with a Request object and a URLSearchParams body', () => {
+            it('should measure request body size', async () => {
+              const { response } = await tracedFetch({
+                callback: () =>
+                  fetch(
+                    new Request('/api/echo-body.json', {
+                      method: 'POST',
+                      headers: {
+                        'Content-Type': 'application/x-www-form-urlencoded',
+                      },
+                      body: new URLSearchParams(DEFAULT_BODY),
+                    })
+                  ),
+                config: { measureRequestSize: true },
+              });
+              const { request } = await response.json();
+              assert.strictEqual(
+                request.headers['content-type'],
+                'application/x-www-form-urlencoded'
+              );
+              assert.strictEqual(request.body, 'hello=world');
+              assertHasRequestContentLength('hello=world');
+            });
+          });
+        });
       });
     });
 
-    describe('url and config object with stream', () => {
-      beforeEach(async () => {
-        await prepareData(
-          url,
-          () =>
-            fetch(url, {
-              method: 'POST',
-              headers: {
-                foo: 'bar',
-                Accept: 'application/json',
-                'Content-Type': 'application/json',
-              },
-              body: textToReadableStream('{"hello":"world"}'),
-            }),
-          {
-            measureRequestSize: true,
-          }
-        );
-      });
+    describe('secure origin requests', () => {
+      const tracedFetch = async ({
+        handlers = [
+          msw.http.get('https://example.com/api/status.json', () => {
+            return msw.HttpResponse.json({ ok: true });
+          }),
+        ],
+        callback = () =>
+          fetch('https://example.com/api/status.json', {
+            mode: 'cors',
+          }),
+        config = {},
+      }: {
+        handlers?: msw.RequestHandler[];
+        callback?: () => Promise<Response>;
+        config?: FetchInstrumentationConfig;
+      } = {}): Promise<{ rootSpan: api.Span; response: Response }> => {
+        let response: Response | undefined;
+
+        await startWorker(...handlers);
+
+        const rootSpan = await trace(async () => {
+          response = await callback();
+        }, config);
+
+        assert.ok(response instanceof Response);
+        assert.strictEqual(exportedSpans.length, 1);
+
+        return { rootSpan, response };
+      };
 
-      afterEach(() => {
-        clearData();
+      it('span should have correct events (includes SECURE_CONNECTION_START)', async () => {
+        await tracedFetch();
+
+        const span: tracing.ReadableSpan = exportedSpans[0];
+        const events = span.events;
+        assert.strictEqual(events.length, 9, 'number of events is wrong');
+        testForCorrectEvents(events, [
+          PTN.FETCH_START,
+          PTN.DOMAIN_LOOKUP_START,
+          PTN.DOMAIN_LOOKUP_END,
+          PTN.CONNECT_START,
+          PTN.SECURE_CONNECTION_START,
+          PTN.CONNECT_END,
+          PTN.REQUEST_START,
+          PTN.RESPONSE_START,
+          PTN.RESPONSE_END,
+        ]);
       });
+    });
 
-      it('should post data', async () => {
-        assert.strictEqual(requestBody, '{"hello":"world"}');
+    describe('`applyCustomAttributesOnSpan` hook', () => {
+      const tracedFetch = async ({
+        handlers = [
+          msw.http.get('/api/project-headers.json', ({ request }) => {
+            const headers = new Headers();
+
+            for (const [key, value] of request.headers) {
+              headers.set(`x-request-${key}`, value);
+            }
+
+            return msw.HttpResponse.json({ ok: true }, { headers });
+          }),
+          msw.http.get('/api/fail.json', () => {
+            return msw.HttpResponse.json({ fail: true }, { status: 500 });
+          }),
+        ],
+        callback = () => fetch('/api/project-headers.json'),
+        config,
+      }: {
+        handlers?: msw.RequestHandler[];
+        callback?: () => Promise<Response>;
+        config: FetchInstrumentationConfig &
+          Required<
+            Pick<FetchInstrumentationConfig, 'applyCustomAttributesOnSpan'>
+          >;
+      }): Promise<{ rootSpan: api.Span; response: Response }> => {
+        let response: Response | undefined;
+
+        await startWorker(...handlers);
+
+        // The current implementation doesn't call this hook until the body has
+        // been fully read, this ensures that timing is met before returning to
+        // the test so we don't have to deal with it in every test. Plus it
+        // checks that the hook is definitely called which is important here.
+        const appliedCustomAttributes = new Promise<void>(resolve => {
+          const originalHook = config.applyCustomAttributesOnSpan;
+
+          const applyCustomAttributesOnSpan = (
+            ...args: Parameters<FetchCustomAttributeFunction>
+          ) => {
+            resolve();
+            originalHook(...args);
+          };
+
+          config = { ...config, applyCustomAttributesOnSpan };
+        });
 
-        const span: tracing.ReadableSpan = exportSpy.args[1][0][0];
-        const attributes = span.attributes;
+        const rootSpan = await trace(async () => {
+          response = await callback();
+        }, config);
 
-        assert.strictEqual(
-          attributes[SEMATTRS_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED],
-          17
-        );
-      });
-    });
+        await appliedCustomAttributes;
 
-    describe('single request object', () => {
-      beforeEach(async () => {
-        await prepareData(
-          url,
-          () => {
-            const req = new Request(url, {
-              method: 'POST',
-              headers: {
-                foo: 'bar',
-                Accept: 'application/json',
-                'Content-Type': 'application/json',
-              },
-              body: '{"hello":"world"}',
-            });
-            return fetch(req);
+        assert.ok(response instanceof Response);
+        assert.strictEqual(exportedSpans.length, 1);
+
+        return { rootSpan, response };
+      };
+
+      it('can apply arbitrary attributes to the span indiscriminantly', async () => {
+        await tracedFetch({
+          config: {
+            applyCustomAttributesOnSpan: span => {
+              span.setAttribute('custom.foo', 'bar');
+            },
           },
-          {
-            measureRequestSize: true,
-          }
-        );
-      });
+        });
 
-      afterEach(() => {
-        clearData();
+        const span: tracing.ReadableSpan = exportedSpans[0];
+        assert.strictEqual(span.attributes['custom.foo'], 'bar');
       });
 
-      it('should post data', async () => {
-        assert.strictEqual(requestBody, '{"hello":"world"}');
+      describe('successful request', () => {
+        it('has access to the request and response objects', async () => {
+          await tracedFetch({
+            callback: () =>
+              fetch(
+                new Request('/api/project-headers.json', {
+                  headers: new Headers({
+                    foo: 'bar',
+                  }),
+                })
+              ),
+            config: {
+              applyCustomAttributesOnSpan: (span, request, response) => {
+                assert.ok(request.headers instanceof Headers);
+                assert.ok(response instanceof Response);
+                assert.ok(response.headers instanceof Headers);
+
+                assert.strictEqual(
+                  request.headers.get('foo'),
+                  response.headers.get('x-request-foo')
+                );
+
+                span.setAttribute(
+                  'custom.foo',
+                  response.headers.get('x-request-foo')!
+                );
+
+                /*
+                  Note: this confirms that nothing *in the instrumentation code*
+                  consumed the response body; it doesn't guarantee that the response
+                  object passed to the `applyCustomAttributes` hook will always have
+                  a consumable body – in fact, this is typically *not* the case:
+
+                  ```js
+                  // user code:
+                  let response = await fetch("foo");
+                  let json = await response.json(); // <- user code consumes the body on `response`
+                  // ...
+
+                  {
+                    // ...this is called sometime later...
+                    applyCustomAttributes(span, request, response) {
+                      // too late!
+                      response.bodyUsed // => true
+                    }
+                  }
+                  ```
+
+                  See https://github.com/open-telemetry/opentelemetry-js/pull/5281
+                */
+                assert.strictEqual(response.bodyUsed, false);
+              },
+            },
+          });
+
+          const span: tracing.ReadableSpan = exportedSpans[0];
+          assert.strictEqual(span.attributes['custom.foo'], 'bar');
+        });
 
-        const span: tracing.ReadableSpan = exportSpy.args[1][0][0];
-        const attributes = span.attributes;
+        // https://github.com/open-telemetry/opentelemetry-js/pull/5281
+        it('will not be able to access the response body if already consumed by the application', async () => {
+          await tracedFetch({
+            callback: async () => {
+              const response = await fetch(
+                new Request('/api/project-headers.json')
+              );
 
-        assert.strictEqual(
-          attributes[SEMATTRS_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED],
-          17
-        );
+              // body consumed here by the application
+              await response.json();
+
+              return response;
+            },
+            config: {
+              applyCustomAttributesOnSpan: (span, _request, response) => {
+                assert.ok(response instanceof Response);
+
+                span.setAttribute('custom.body-used', response.bodyUsed);
+              },
+            },
+          });
+
+          const span: tracing.ReadableSpan = exportedSpans[0];
+          assert.strictEqual(span.attributes['custom.body-used'], true);
+        });
       });
     });
 
-    describe('single request object with urlparams', () => {
-      beforeEach(async () => {
-        await prepareData(
-          url,
-          () => {
-            const body = new URLSearchParams();
-            body.append('hello', 'world');
-            const req = new Request(url, {
-              method: 'POST',
-              headers: {
-                foo: 'bar',
-                Accept: 'application/json',
-                'Content-Type': 'application/json',
-              },
-              body,
-            });
-            return fetch(req);
+    describe('`ignoreUrls` config', () => {
+      const tracedFetch = async ({
+        handlers = [
+          msw.http.get('/api/ignored.json', () => {
+            return msw.HttpResponse.json({ ok: true });
+          }),
+          msw.http.get('/api/not-ignored.json', () => {
+            return msw.HttpResponse.json({ ok: true });
+          }),
+        ],
+        callback,
+        expectExport = true,
+      }: {
+        handlers?: msw.RequestHandler[];
+        callback: () => Promise<Response>;
+        expectExport?: boolean;
+      }): Promise<{ rootSpan: api.Span; response: Response }> => {
+        let response: Response | undefined;
+
+        await startWorker(...handlers);
+
+        const rootSpan = await trace(
+          async () => {
+            response = await callback();
           },
-          {
-            measureRequestSize: true,
-          }
+          { ignoreUrls: [/\/ignored\.json/] },
+          expectExport
         );
-      });
 
-      afterEach(() => {
-        clearData();
-      });
+        assert.ok(response instanceof Response);
 
-      it('should post data', async () => {
-        assert.strictEqual(requestBody, 'hello=world');
+        return { rootSpan, response };
+      };
 
-        const span: tracing.ReadableSpan = exportSpy.args[1][0][0];
-        const attributes = span.attributes;
+      let spyDebug: sinon.SinonSpy | undefined;
 
-        assert.strictEqual(
-          attributes[SEMATTRS_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED],
-          11
-        );
+      beforeEach(async () => {
+        const logger = new api.DiagConsoleLogger();
+        spyDebug = sinon.stub(logger, 'debug');
+        api.diag.setLogger(logger, api.DiagLogLevel.ALL);
       });
-    });
-  });
 
-  describe('when request is secure and successful', () => {
-    beforeEach(async () => {
-      const propagateTraceHeaderCorsUrls = [secureUrl];
-      await prepareData(secureUrl, () => getData(secureUrl), {
-        propagateTraceHeaderCorsUrls,
+      afterEach(() => {
+        api.diag.disable();
+        spyDebug = undefined;
       });
-    });
 
-    afterEach(() => {
-      clearData();
-    });
-
-    it('span should have correct events', () => {
-      const span: tracing.ReadableSpan = exportSpy.args[1][0][0];
-      const events = span.events;
-      assert.strictEqual(events.length, 9, 'number of events is wrong');
-      testForCorrectEvents(events, [
-        PTN.FETCH_START,
-        PTN.DOMAIN_LOOKUP_START,
-        PTN.DOMAIN_LOOKUP_END,
-        PTN.CONNECT_START,
-        PTN.SECURE_CONNECTION_START,
-        PTN.CONNECT_END,
-        PTN.REQUEST_START,
-        PTN.RESPONSE_START,
-        PTN.RESPONSE_END,
-      ]);
-    });
+      const assertNoDebugMessages = () => {
+        assert.ok(spyDebug);
+        sinon.assert.neverCalledWith(
+          spyDebug,
+          '@opentelemetry/instrumentation-fetch',
+          'ignoring span as url matches ignored url'
+        );
+      };
 
-    it('preflight request span should have correct events', () => {
-      const span: tracing.ReadableSpan = exportSpy.args[0][0][0];
-      const events = span.events;
-      assert.strictEqual(events.length, 9, 'number of events is wrong');
-      testForCorrectEvents(events, [
-        PTN.FETCH_START,
-        PTN.DOMAIN_LOOKUP_START,
-        PTN.DOMAIN_LOOKUP_END,
-        PTN.CONNECT_START,
-        PTN.SECURE_CONNECTION_START,
-        PTN.CONNECT_END,
-        PTN.REQUEST_START,
-        PTN.RESPONSE_START,
-        PTN.RESPONSE_END,
-      ]);
-    });
-  });
+      const assertDebugMessage = () => {
+        assert.ok(spyDebug);
+        sinon.assert.calledWith(
+          spyDebug,
+          '@opentelemetry/instrumentation-fetch',
+          'ignoring span as url matches ignored url'
+        );
+      };
 
-  describe('applyCustomAttributesOnSpan option', () => {
-    const prepare = async (
-      url: string,
-      applyCustomAttributesOnSpan: FetchCustomAttributeFunction
-    ) => {
-      const propagateTraceHeaderCorsUrls = [url];
+      it('should create spans for normal request', async () => {
+        await tracedFetch({
+          callback: () => fetch('/api/not-ignored.json'),
+        });
 
-      await prepareData(url, () => getData(url), {
-        propagateTraceHeaderCorsUrls,
-        applyCustomAttributesOnSpan,
+        assert.strictEqual(exportedSpans.length, 1);
+        assertNoDebugMessages();
       });
-    };
 
-    afterEach(() => {
-      clearData();
-    });
+      it('should not create any spans for ignored request', async () => {
+        await tracedFetch({
+          callback: () => fetch('/api/ignored.json'),
+          expectExport: false,
+        });
 
-    it('applies attributes when the request is successful', async () => {
-      await prepare(url, span => {
-        span.setAttribute(CUSTOM_ATTRIBUTE_KEY, 'custom value');
+        assertDebugMessage();
       });
-      const span: tracing.ReadableSpan = exportSpy.args[1][0][0];
-      const attributes = span.attributes;
-
-      assert.ok(attributes[CUSTOM_ATTRIBUTE_KEY] === 'custom value');
     });
 
-    it('applies custom attributes when the request fails', async () => {
-      await prepare(badUrl, span => {
-        span.setAttribute(CUSTOM_ATTRIBUTE_KEY, 'custom value');
+    describe('unsuccessful request', () => {
+      describe('wrong URL (404)', () => {
+        const tracedFetch = async ({
+          handlers = [
+            msw.http.get('/not-found.json', () => {
+              return msw.HttpResponse.json({ ok: false }, { status: 404 });
+            }),
+          ],
+          callback = () => fetch('/not-found.json'),
+          config = {},
+        }: {
+          handlers?: msw.RequestHandler[];
+          callback?: () => Promise<Response>;
+          config?: FetchInstrumentationConfig;
+        } = {}): Promise<{ rootSpan: api.Span; response: Response }> => {
+          let response: Response | undefined;
+
+          await startWorker(...handlers);
+
+          const rootSpan = await trace(async () => {
+            response = await callback();
+          }, config);
+
+          assert.ok(response instanceof Response);
+          assert.strictEqual(exportedSpans.length, 1);
+
+          return { rootSpan, response };
+        };
+
+        it('should create a span with correct root span', async () => {
+          const { rootSpan } = await tracedFetch();
+
+          assert.strictEqual(
+            exportedSpans.length,
+            1,
+            'creates a single span for the fetch() request'
+          );
+
+          const span: tracing.ReadableSpan = exportedSpans[0];
+
+          assert.strictEqual(
+            span.parentSpanId,
+            rootSpan!.spanContext().spanId,
+            'parent span is not root span'
+          );
+        });
       });
-      const span: tracing.ReadableSpan = exportSpy.args[1][0][0];
-      const attributes = span.attributes;
 
-      assert.ok(attributes[CUSTOM_ATTRIBUTE_KEY] === 'custom value');
+      describe('wrong HTTP method (405)', () => {
+        const tracedFetch = async ({
+          handlers = [
+            msw.http.get('/post-only.json', () => {
+              return msw.HttpResponse.json({ ok: false }, { status: 405 });
+            }),
+            msw.http.post('/post-only.json', () => {
+              return msw.HttpResponse.json({ ok: true });
+            }),
+          ],
+          callback = () => fetch('/post-only.json'),
+          config = {},
+        }: {
+          handlers?: msw.RequestHandler[];
+          callback?: () => Promise<Response>;
+          config?: FetchInstrumentationConfig;
+        } = {}): Promise<{ rootSpan: api.Span; response: Response }> => {
+          let response: Response | undefined;
+
+          await startWorker(...handlers);
+
+          const rootSpan = await trace(async () => {
+            response = await callback();
+          }, config);
+
+          assert.ok(response instanceof Response);
+          assert.strictEqual(exportedSpans.length, 1);
+
+          return { rootSpan, response };
+        };
+
+        it('should create a span with correct root span', async () => {
+          const { rootSpan } = await tracedFetch();
+
+          assert.strictEqual(
+            exportedSpans.length,
+            1,
+            'creates a single span for the fetch() request'
+          );
+
+          const span: tracing.ReadableSpan = exportedSpans[0];
+
+          assert.strictEqual(
+            span.parentSpanId,
+            rootSpan!.spanContext().spanId,
+            'parent span is not root span'
+          );
+        });
+      });
     });
 
-    it('has request and response objects in callback arguments', async () => {
-      let request: any;
-      let response: any;
-      const applyCustomAttributes: FetchCustomAttributeFunction = (
-        span,
-        req,
-        res
-      ) => {
-        request = req;
-        response = res;
+    describe('PerformanceObserver', () => {
+      const tracedFetch = async ({
+        handlers = [
+          msw.http.get('/api/status.json', () => {
+            return msw.HttpResponse.json({ ok: true });
+          }),
+        ],
+        callback = () => fetch('/api/status.json'),
+        config = {},
+      }: {
+        handlers?: msw.RequestHandler[];
+        callback?: () => Promise<Response>;
+        config?: FetchInstrumentationConfig;
+      } = {}): Promise<{ rootSpan: api.Span; response: Response }> => {
+        let response: Response | undefined;
+
+        await startWorker(...handlers);
+
+        const rootSpan = await trace(async () => {
+          response = await callback();
+        }, config);
+
+        assert.ok(response instanceof Response);
+        assert.strictEqual(exportedSpans.length, 1);
+
+        return { rootSpan, response };
       };
 
-      await prepare(url, applyCustomAttributes);
-      assert.strictEqual(request.method, 'GET');
-      assert.ok(lastResponse !== undefined);
-      assert.strictEqual(response, lastResponse);
-      assert.strictEqual(response.status, 200);
-
-      /*
-         Note: this confirms that nothing *in the instrumentation code*
-         consumed the response body; it doesn't guarantee that the response
-         object passed to the `applyCustomAttributes` hook will always have
-         a consumable body – in fact, this is typically *not* the case:
-
-         ```js
-         // user code:
-         let response = await fetch("foo");
-         let json = await response.json(); // <- user code consumes the body on `response`
-         // ...
-
-         {
-           // ...this is called sometime later...
-           applyCustomAttributes(span, request, response) {
-             // too late!
-             response.bodyUsed // => true
-           }
-         }
-         ```
-      */
-      assert.strictEqual(response.bodyUsed, false);
-    });
-  });
+      // This is essentially the same as the basic tests from above, but
+      // asserting that the data indeed came from PerformanceObserver, as
+      // opposed to performance.getEntriesByType.
+      describe('when `PerformanceObserver` is available', () => {
+        if (!PerformanceObserver?.supportedEntryTypes?.includes('resource')) {
+          // eslint-disable-next-line no-console
+          console.warn(
+            'Testing in an environment without `PerformanceObserver`!'
+          );
+
+          return;
+        }
 
-  describe('when url is ignored', () => {
-    beforeEach(async () => {
-      const propagateTraceHeaderCorsUrls = url;
-      await prepareData(url, () => getData(url), {
-        propagateTraceHeaderCorsUrls,
-        ignoreUrls: [propagateTraceHeaderCorsUrls],
-      });
-    });
+        let getEntriesByTypeStub: sinon.SinonStub | undefined;
+        let rootSpan: api.Span | undefined;
 
-    afterEach(() => {
-      clearData();
-    });
+        beforeEach(async () => {
+          getEntriesByTypeStub = sinon
+            .stub(performance, 'getEntriesByType')
+            .throws();
 
-    it('should NOT create any span', () => {
-      assert.strictEqual(exportSpy.args.length, 0, "span shouldn't b exported");
-    });
+          const result = await tracedFetch();
+          rootSpan = result.rootSpan;
+        });
 
-    it('should accept Request objects as argument (#2411)', async () => {
-      const response = await window.fetch(new Request(url));
-      assert.ok(response instanceof Response);
+        afterEach(() => {
+          assert.strictEqual(
+            getEntriesByTypeStub?.notCalled,
+            true,
+            'should not call performance.getEntriesByType'
+          );
 
-      const { isServerResponse } = await response.json();
-      assert.strictEqual(isServerResponse, true);
-    });
-  });
+          getEntriesByTypeStub = undefined;
+          rootSpan = undefined;
+        });
 
-  describe('when clearTimingResources is TRUE', () => {
-    beforeEach(async () => {
-      const propagateTraceHeaderCorsUrls = url;
-      await prepareData(url, () => getData(url), {
-        propagateTraceHeaderCorsUrls,
-        clearTimingResources: true,
-      });
-    });
-    afterEach(() => {
-      clearData();
-    });
-    it('should clear the resources', () => {
-      assert.strictEqual(
-        clearResourceTimingsSpy.args.length,
-        1,
-        "resources haven't been cleared"
-      );
-    });
-  });
+        it('should create a span with correct root span', () => {
+          assert.strictEqual(
+            exportedSpans.length,
+            1,
+            'creates a single span for the fetch() request'
+          );
 
-  describe('when request is NOT successful (wrong url)', () => {
-    beforeEach(async () => {
-      const propagateTraceHeaderCorsUrls = badUrl;
-      await prepareData(badUrl, () => getData(badUrl), {
-        propagateTraceHeaderCorsUrls,
-      });
-    });
-    afterEach(() => {
-      clearData();
-    });
-    it('should create a span with correct root span', () => {
-      const span: tracing.ReadableSpan = exportSpy.args[1][0][0];
-      assert.strictEqual(
-        span.parentSpanId,
-        rootSpan.spanContext().spanId,
-        'parent span is not root span'
-      );
-    });
-  });
+          const span: tracing.ReadableSpan = exportedSpans[0];
+
+          assert.strictEqual(
+            span.parentSpanId,
+            rootSpan!.spanContext().spanId,
+            'parent span is not root span'
+          );
+        });
+
+        it('span should have correct events', async () => {
+          const span: tracing.ReadableSpan = exportedSpans[0];
+          const events = span.events;
+          assert.strictEqual(events.length, 8, 'number of events is wrong');
+          testForCorrectEvents(events, [
+            PTN.FETCH_START,
+            PTN.DOMAIN_LOOKUP_START,
+            PTN.DOMAIN_LOOKUP_END,
+            PTN.CONNECT_START,
+            PTN.CONNECT_END,
+            PTN.REQUEST_START,
+            PTN.RESPONSE_START,
+            PTN.RESPONSE_END,
+          ]);
+        });
 
-  describe('when request is NOT successful (405)', () => {
-    beforeEach(async () => {
-      const propagateTraceHeaderCorsUrls = url;
-      await prepareData(url, () => getData(url, 'DELETE'), {
-        propagateTraceHeaderCorsUrls,
+        it('span should have correct (absolute) http.url attribute', () => {
+          const span: tracing.ReadableSpan = exportedSpans[0];
+          assert.strictEqual(
+            span.attributes[SEMATTRS_HTTP_URL],
+            `${ORIGIN}/api/status.json`,
+            `attributes ${SEMATTRS_HTTP_URL} is wrong`
+          );
+        });
       });
-    });
-    afterEach(() => {
-      clearData();
-    });
 
-    it('should create a span with correct root span', () => {
-      const span: tracing.ReadableSpan = exportSpy.args[1][0][0];
-      assert.strictEqual(
-        span.parentSpanId,
-        rootSpan.spanContext().spanId,
-        'parent span is not root span'
-      );
-    });
-  });
+      describe('when `PerformanceObserver` is NOT available', () => {
+        beforeEach(async () => {
+          sinon.stub(window, 'PerformanceObserver').value(undefined);
+
+          // This seemingly random timeout is testing real behavior!
+          //
+          // Currently, the implementation works by waiting a hardcoded
+          // OBSERVER_WAIT_TIME_MS before trying to get the resource
+          // timing entries, and hoping that they are there by then.
+          //
+          // We will match that here plus an additional 50ms. If the
+          // tests still fail despite this timeout, then we may have
+          // found a bug that could occur in the real world, and it's
+          // probably time to revisit the naïve implementation.
+          //
+          // This should be updated as the implementation changes.
+          waitForPerformanceObservers = () =>
+            waitFor(OBSERVER_WAIT_TIME_MS + 50);
+        });
 
-  describe('when PerformanceObserver is used by default', () => {
-    beforeEach(async () => {
-      // All above tests test it already but just in case
-      // lets explicitly turn getEntriesByType off so we can be sure
-      // that the perf entries come from the observer.
-      await prepareData(url, () => getData(url), {}, false, true);
-    });
-    afterEach(() => {
-      clearData();
-    });
-    it('should create both spans with network events', () => {
-      const span: tracing.ReadableSpan = exportSpy.args[0][0][0];
-      const events = span.events;
+        // The assertions are essentially the same as the tests from above, but
+        // here we are asserting that when the data is still correct even when
+        // it comes from the fallback performance.getEntriesByType.
+        describe('when `getEntriesByType` is available', () => {
+          if (typeof performance.getEntriesByType !== 'function') {
+            // eslint-disable-next-line no-console
+            console.warn(
+              'Testing in an environment without `performance.getEntriesByType`!'
+            );
+
+            return;
+          }
 
-      assert.strictEqual(
-        exportSpy.args.length,
-        2,
-        `Wrong number of spans: ${exportSpy.args.length}`
-      );
+          let getEntriesByTypeSpy: sinon.SinonSpy | undefined;
+          let rootSpan: api.Span | undefined;
+
+          beforeEach(async () => {
+            // Free up the buffer to ensure our events can be collected
+            performance.clearResourceTimings();
+
+            getEntriesByTypeSpy = sinon.spy(performance, 'getEntriesByType');
+
+            const result = await tracedFetch();
+            rootSpan = result.rootSpan;
+          });
+
+          afterEach(() => {
+            assert.strictEqual(
+              getEntriesByTypeSpy?.called,
+              true,
+              'should call performance.getEntriesByType'
+            );
+
+            getEntriesByTypeSpy = undefined;
+            rootSpan = undefined;
+          });
+
+          it('should create a span with correct root span', () => {
+            assert.strictEqual(
+              exportedSpans.length,
+              1,
+              'creates a single span for the fetch() request'
+            );
+
+            const span: tracing.ReadableSpan = exportedSpans[0];
+
+            assert.strictEqual(
+              span.parentSpanId,
+              rootSpan!.spanContext().spanId,
+              'parent span is not root span'
+            );
+          });
+
+          it('span should have correct events', async () => {
+            const span: tracing.ReadableSpan = exportedSpans[0];
+            const events = span.events;
+            assert.strictEqual(events.length, 8, 'number of events is wrong');
+            testForCorrectEvents(events, [
+              PTN.FETCH_START,
+              PTN.DOMAIN_LOOKUP_START,
+              PTN.DOMAIN_LOOKUP_END,
+              PTN.CONNECT_START,
+              PTN.CONNECT_END,
+              PTN.REQUEST_START,
+              PTN.RESPONSE_START,
+              PTN.RESPONSE_END,
+            ]);
+          });
+
+          it('span should have correct (absolute) http.url attribute', () => {
+            const span: tracing.ReadableSpan = exportedSpans[0];
+            assert.strictEqual(
+              span.attributes[SEMATTRS_HTTP_URL],
+              `${ORIGIN}/api/status.json`,
+              `attributes ${SEMATTRS_HTTP_URL} is wrong`
+            );
+          });
+        });
 
-      assert.strictEqual(events.length, 8, 'number of events is wrong');
-
-      testForCorrectEvents(events, [
-        PTN.FETCH_START,
-        PTN.DOMAIN_LOOKUP_START,
-        PTN.DOMAIN_LOOKUP_END,
-        PTN.CONNECT_START,
-        PTN.CONNECT_END,
-        PTN.REQUEST_START,
-        PTN.RESPONSE_START,
-        PTN.RESPONSE_END,
-      ]);
+        // This is the worst case scenario, all resource-timing dependent data
+        // will be missing
+        describe('when `getEntriesByType` is NOT available', () => {
+          let rootSpan: api.Span | undefined;
+
+          beforeEach(async () => {
+            sinon.stub(performance, 'getEntriesByType').value(undefined);
+
+            const result = await tracedFetch();
+            rootSpan = result.rootSpan;
+          });
+
+          afterEach(() => {
+            rootSpan = undefined;
+          });
+
+          it('should create a span with correct root span', () => {
+            assert.strictEqual(
+              exportedSpans.length,
+              1,
+              'creates a single span for the fetch() request'
+            );
+
+            const span: tracing.ReadableSpan = exportedSpans[0];
+
+            assert.strictEqual(
+              span.parentSpanId,
+              rootSpan!.spanContext().spanId,
+              'parent span is not root span'
+            );
+          });
+
+          it('span should have no events', async () => {
+            const span: tracing.ReadableSpan = exportedSpans[0];
+            assert.strictEqual(
+              span.events.length,
+              0,
+              'should not have any events'
+            );
+          });
+
+          it('span should have correct basic attributes', () => {
+            const span: tracing.ReadableSpan = exportedSpans[0];
+
+            assert.strictEqual(span.name, 'HTTP GET', `wrong span name`);
+
+            assert.strictEqual(
+              span.attributes[SEMATTRS_HTTP_STATUS_CODE],
+              200,
+              `attributes ${SEMATTRS_HTTP_STATUS_CODE} is wrong`
+            );
+          });
+
+          it('span should have correct (absolute) http.url attribute', () => {
+            const span: tracing.ReadableSpan = exportedSpans[0];
+            assert.strictEqual(
+              span.attributes[SEMATTRS_HTTP_URL],
+              `${ORIGIN}/api/status.json`,
+              `attributes ${SEMATTRS_HTTP_URL} is wrong`
+            );
+          });
+        });
+      });
     });
-  });
 
-  describe('when fetching with relative url', () => {
-    beforeEach(async () => {
-      await prepareData('/get', () => getData('/get'), {}, false, true);
-    });
-    afterEach(() => {
-      clearData();
-    });
-    it('should create spans with network info', () => {
-      // no prefetch span because mock observer uses location.origin as url when relative
-      // and prefetch span finding compares url origins
-      const span: tracing.ReadableSpan = exportSpy.args[0][0][0];
-      const events = span.events;
+    describe('`ignoreNetworkEvents` config', () => {
+      const tracedFetch = async ({
+        handlers = [
+          msw.http.get('/api/status.json', () => {
+            return msw.HttpResponse.json({ ok: true });
+          }),
+        ],
+        callback = () => fetch('/api/status.json'),
+        config = {},
+      }: {
+        handlers?: msw.RequestHandler[];
+        callback?: () => Promise<Response>;
+        config?: FetchInstrumentationConfig;
+      } = {}): Promise<{ rootSpan: api.Span; response: Response }> => {
+        let response: Response | undefined;
+
+        await startWorker(...handlers);
+
+        const rootSpan = await trace(async () => {
+          response = await callback();
+        }, config);
+
+        assert.ok(response instanceof Response);
+        assert.strictEqual(exportedSpans.length, 1);
+
+        return { rootSpan, response };
+      };
 
-      assert.strictEqual(
-        exportSpy.args.length,
-        1,
-        `Wrong number of spans: ${exportSpy.args.length}`
-      );
+      describe('when `ignoreNetworkEvents` is not set', function () {
+        let response: Response | undefined;
 
-      assert.strictEqual(events.length, 8, 'number of events is wrong');
-      testForCorrectEvents(events, [
-        PTN.FETCH_START,
-        PTN.DOMAIN_LOOKUP_START,
-        PTN.DOMAIN_LOOKUP_END,
-        PTN.CONNECT_START,
-        PTN.CONNECT_END,
-        PTN.REQUEST_START,
-        PTN.RESPONSE_START,
-        PTN.RESPONSE_END,
-      ]);
-    });
+        beforeEach(async () => {
+          const result = await tracedFetch();
+          response = result.response;
+        });
 
-    it('should have an absolute http.url attribute', () => {
-      const span: tracing.ReadableSpan = exportSpy.args[0][0][0];
-      const attributes = span.attributes;
+        afterEach(() => {
+          response = undefined;
+        });
 
-      assert.strictEqual(
-        attributes[SEMATTRS_HTTP_URL],
-        location.origin + '/get',
-        `attributes ${SEMATTRS_HTTP_URL} is wrong`
-      );
-    });
-  });
+        it('span should have correct events', async () => {
+          const span: tracing.ReadableSpan = exportedSpans[0];
+          const events = span.events;
+          assert.strictEqual(events.length, 8, 'number of events is wrong');
+          testForCorrectEvents(events, [
+            PTN.FETCH_START,
+            PTN.DOMAIN_LOOKUP_START,
+            PTN.DOMAIN_LOOKUP_END,
+            PTN.CONNECT_START,
+            PTN.CONNECT_END,
+            PTN.REQUEST_START,
+            PTN.RESPONSE_START,
+            PTN.RESPONSE_END,
+          ]);
+        });
 
-  describe('when PerformanceObserver is undefined', () => {
-    beforeEach(async () => {
-      await prepareData(url, () => getData(url), {}, true, false);
-    });
+        it('span should have http.response_content_length attribute', () => {
+          const span: tracing.ReadableSpan = exportedSpans[0];
+          assert.strictEqual(
+            span.attributes[SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH],
+            parseInt(response!.headers.get('content-length')!),
+            `attributes ${SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH} is <= 0`
+          );
+        });
+      });
 
-    afterEach(() => {
-      clearData();
-    });
+      describe('when `ignoreNetworkEvents` is `false`', function () {
+        let response: Response | undefined;
 
-    it('should fallback to getEntries', () => {
-      const span: tracing.ReadableSpan = exportSpy.args[0][0][0];
-      const events = span.events;
+        beforeEach(async () => {
+          const result = await tracedFetch({
+            config: { ignoreNetworkEvents: false },
+          });
+          response = result.response;
+        });
 
-      assert.strictEqual(
-        exportSpy.args.length,
-        2,
-        `Wrong number of spans: ${exportSpy.args.length}`
-      );
-      assert.strictEqual(events.length, 8, 'number of events is wrong');
-      testForCorrectEvents(events, [
-        PTN.FETCH_START,
-        PTN.DOMAIN_LOOKUP_START,
-        PTN.DOMAIN_LOOKUP_END,
-        PTN.CONNECT_START,
-        PTN.CONNECT_END,
-        PTN.REQUEST_START,
-        PTN.RESPONSE_START,
-        PTN.RESPONSE_END,
-      ]);
-    });
-  });
+        afterEach(() => {
+          response = undefined;
+        });
 
-  describe('when PerformanceObserver and performance.getEntriesByType are undefined', () => {
-    beforeEach(async () => {
-      await prepareData(url, () => getData(url), {}, true, true);
-    });
-    afterEach(() => {
-      clearData();
-    });
-    it('should still capture fetch with basic attributes', () => {
-      const span: tracing.ReadableSpan = exportSpy.args[0][0][0];
-      const events = span.events;
-      const attributes = span.attributes;
-      const keys = Object.keys(attributes);
+        it('span should have correct events', async () => {
+          const span: tracing.ReadableSpan = exportedSpans[0];
+          const events = span.events;
+          assert.strictEqual(events.length, 8, 'number of events is wrong');
+          testForCorrectEvents(events, [
+            PTN.FETCH_START,
+            PTN.DOMAIN_LOOKUP_START,
+            PTN.DOMAIN_LOOKUP_END,
+            PTN.CONNECT_START,
+            PTN.CONNECT_END,
+            PTN.REQUEST_START,
+            PTN.RESPONSE_START,
+            PTN.RESPONSE_END,
+          ]);
+        });
 
-      assert.strictEqual(
-        exportSpy.args.length,
-        1,
-        `Wrong number of spans: ${exportSpy.args.length}`
-      );
-      assert.strictEqual(
-        exportSpy.args[0][0][0].name,
-        'HTTP GET',
-        'wrong span captured'
-      );
+        it('span should have http.response_content_length attribute', () => {
+          const span: tracing.ReadableSpan = exportedSpans[0];
+          assert.strictEqual(
+            span.attributes[SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH],
+            parseInt(response!.headers.get('content-length')!),
+            `attributes ${SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH} is <= 0`
+          );
+        });
+      });
 
-      assert.strictEqual(events.length, 0, 'Should not have any events');
+      describe('when `ignoreNetworkEvents` is `true`', function () {
+        let response: Response | undefined;
 
-      // should still have basic attributes
-      assert.strictEqual(
-        attributes[keys[3]],
-        200,
-        `Missing basic attribute ${SEMATTRS_HTTP_STATUS_CODE}`
-      );
-    });
-  });
+        beforeEach(async () => {
+          const result = await tracedFetch({
+            config: { ignoreNetworkEvents: true },
+          });
+          response = result.response;
+        });
 
-  describe('when network events are ignored', () => {
-    beforeEach(async () => {
-      await prepareData(url, () => getData(url), {
-        ignoreNetworkEvents: true,
-      });
-    });
-    afterEach(() => {
-      clearData();
-    });
-    it('should NOT add network events', () => {
-      const span: tracing.ReadableSpan = exportSpy.args[1][0][0];
-      const events = span.events;
-      assert.strictEqual(events.length, 0, 'number of events is wrong');
-    });
+        afterEach(() => {
+          response = undefined;
+        });
 
-    it('should still add the CONTENT_LENGTH attribute', () => {
-      const span: tracing.ReadableSpan = exportSpy.args[1][0][0];
-      const attributes = span.attributes;
-      const responseContentLength = attributes[
-        SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH
-      ] as number;
-      assert.strictEqual(
-        responseContentLength,
-        60,
-        `attributes ${SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH} is <= 0`
-      );
+        it('span should have no events', async () => {
+          const span: tracing.ReadableSpan = exportedSpans[0];
+          assert.strictEqual(
+            span.events.length,
+            0,
+            'should not have any events'
+          );
+        });
+
+        it('span should have http.response_content_length attribute', () => {
+          const span: tracing.ReadableSpan = exportedSpans[0];
+          assert.strictEqual(
+            span.attributes[SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH],
+            parseInt(response!.headers.get('content-length')!),
+            `attributes ${SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH} is <= 0`
+          );
+        });
+      });
     });
   });
 });
diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/test/mockServiceWorker.js b/experimental/packages/opentelemetry-instrumentation-fetch/test/mockServiceWorker.js
new file mode 100644
index 00000000000..ec47a9a50a2
--- /dev/null
+++ b/experimental/packages/opentelemetry-instrumentation-fetch/test/mockServiceWorker.js
@@ -0,0 +1,307 @@
+/* eslint-disable */
+/* tslint:disable */
+
+/**
+ * Mock Service Worker.
+ * @see https://github.com/mswjs/msw
+ * - Please do NOT modify this file.
+ * - Please do NOT serve this file on production.
+ */
+
+const PACKAGE_VERSION = '2.7.0'
+const INTEGRITY_CHECKSUM = '00729d72e3b82faf54ca8b9621dbb96f'
+const IS_MOCKED_RESPONSE = Symbol('isMockedResponse')
+const activeClientIds = new Set()
+
+self.addEventListener('install', function () {
+  self.skipWaiting()
+})
+
+self.addEventListener('activate', function (event) {
+  event.waitUntil(self.clients.claim())
+})
+
+self.addEventListener('message', async function (event) {
+  const clientId = event.source.id
+
+  if (!clientId || !self.clients) {
+    return
+  }
+
+  const client = await self.clients.get(clientId)
+
+  if (!client) {
+    return
+  }
+
+  const allClients = await self.clients.matchAll({
+    type: 'window',
+  })
+
+  switch (event.data) {
+    case 'KEEPALIVE_REQUEST': {
+      sendToClient(client, {
+        type: 'KEEPALIVE_RESPONSE',
+      })
+      break
+    }
+
+    case 'INTEGRITY_CHECK_REQUEST': {
+      sendToClient(client, {
+        type: 'INTEGRITY_CHECK_RESPONSE',
+        payload: {
+          packageVersion: PACKAGE_VERSION,
+          checksum: INTEGRITY_CHECKSUM,
+        },
+      })
+      break
+    }
+
+    case 'MOCK_ACTIVATE': {
+      activeClientIds.add(clientId)
+
+      sendToClient(client, {
+        type: 'MOCKING_ENABLED',
+        payload: {
+          client: {
+            id: client.id,
+            frameType: client.frameType,
+          },
+        },
+      })
+      break
+    }
+
+    case 'MOCK_DEACTIVATE': {
+      activeClientIds.delete(clientId)
+      break
+    }
+
+    case 'CLIENT_CLOSED': {
+      activeClientIds.delete(clientId)
+
+      const remainingClients = allClients.filter((client) => {
+        return client.id !== clientId
+      })
+
+      // Unregister itself when there are no more clients
+      if (remainingClients.length === 0) {
+        self.registration.unregister()
+      }
+
+      break
+    }
+  }
+})
+
+self.addEventListener('fetch', function (event) {
+  const { request } = event
+
+  // Bypass navigation requests.
+  if (request.mode === 'navigate') {
+    return
+  }
+
+  // Opening the DevTools triggers the "only-if-cached" request
+  // that cannot be handled by the worker. Bypass such requests.
+  if (request.cache === 'only-if-cached' && request.mode !== 'same-origin') {
+    return
+  }
+
+  // Bypass all requests when there are no active clients.
+  // Prevents the self-unregistered worked from handling requests
+  // after it's been deleted (still remains active until the next reload).
+  if (activeClientIds.size === 0) {
+    return
+  }
+
+  // Generate unique request ID.
+  const requestId = crypto.randomUUID()
+  event.respondWith(handleRequest(event, requestId))
+})
+
+async function handleRequest(event, requestId) {
+  const client = await resolveMainClient(event)
+  const response = await getResponse(event, client, requestId)
+
+  // Send back the response clone for the "response:*" life-cycle events.
+  // Ensure MSW is active and ready to handle the message, otherwise
+  // this message will pend indefinitely.
+  if (client && activeClientIds.has(client.id)) {
+    ;(async function () {
+      const responseClone = response.clone()
+
+      sendToClient(
+        client,
+        {
+          type: 'RESPONSE',
+          payload: {
+            requestId,
+            isMockedResponse: IS_MOCKED_RESPONSE in response,
+            type: responseClone.type,
+            status: responseClone.status,
+            statusText: responseClone.statusText,
+            body: responseClone.body,
+            headers: Object.fromEntries(responseClone.headers.entries()),
+          },
+        },
+        [responseClone.body],
+      )
+    })()
+  }
+
+  return response
+}
+
+// Resolve the main client for the given event.
+// Client that issues a request doesn't necessarily equal the client
+// that registered the worker. It's with the latter the worker should
+// communicate with during the response resolving phase.
+async function resolveMainClient(event) {
+  const client = await self.clients.get(event.clientId)
+
+  if (activeClientIds.has(event.clientId)) {
+    return client
+  }
+
+  if (client?.frameType === 'top-level') {
+    return client
+  }
+
+  const allClients = await self.clients.matchAll({
+    type: 'window',
+  })
+
+  return allClients
+    .filter((client) => {
+      // Get only those clients that are currently visible.
+      return client.visibilityState === 'visible'
+    })
+    .find((client) => {
+      // Find the client ID that's recorded in the
+      // set of clients that have registered the worker.
+      return activeClientIds.has(client.id)
+    })
+}
+
+async function getResponse(event, client, requestId) {
+  const { request } = event
+
+  // Clone the request because it might've been already used
+  // (i.e. its body has been read and sent to the client).
+  const requestClone = request.clone()
+
+  function passthrough() {
+    // Cast the request headers to a new Headers instance
+    // so the headers can be manipulated with.
+    const headers = new Headers(requestClone.headers)
+
+    // Remove the "accept" header value that marked this request as passthrough.
+    // This prevents request alteration and also keeps it compliant with the
+    // user-defined CORS policies.
+    const acceptHeader = headers.get('accept')
+    if (acceptHeader) {
+      const values = acceptHeader.split(',').map((value) => value.trim())
+      const filteredValues = values.filter(
+        (value) => value !== 'msw/passthrough',
+      )
+
+      if (filteredValues.length > 0) {
+        headers.set('accept', filteredValues.join(', '))
+      } else {
+        headers.delete('accept')
+      }
+    }
+
+    return fetch(requestClone, { headers })
+  }
+
+  // Bypass mocking when the client is not active.
+  if (!client) {
+    return passthrough()
+  }
+
+  // Bypass initial page load requests (i.e. static assets).
+  // The absence of the immediate/parent client in the map of the active clients
+  // means that MSW hasn't dispatched the "MOCK_ACTIVATE" event yet
+  // and is not ready to handle requests.
+  if (!activeClientIds.has(client.id)) {
+    return passthrough()
+  }
+
+  // Notify the client that a request has been intercepted.
+  const requestBuffer = await request.arrayBuffer()
+  const clientMessage = await sendToClient(
+    client,
+    {
+      type: 'REQUEST',
+      payload: {
+        id: requestId,
+        url: request.url,
+        mode: request.mode,
+        method: request.method,
+        headers: Object.fromEntries(request.headers.entries()),
+        cache: request.cache,
+        credentials: request.credentials,
+        destination: request.destination,
+        integrity: request.integrity,
+        redirect: request.redirect,
+        referrer: request.referrer,
+        referrerPolicy: request.referrerPolicy,
+        body: requestBuffer,
+        keepalive: request.keepalive,
+      },
+    },
+    [requestBuffer],
+  )
+
+  switch (clientMessage.type) {
+    case 'MOCK_RESPONSE': {
+      return respondWithMock(clientMessage.data)
+    }
+
+    case 'PASSTHROUGH': {
+      return passthrough()
+    }
+  }
+
+  return passthrough()
+}
+
+function sendToClient(client, message, transferrables = []) {
+  return new Promise((resolve, reject) => {
+    const channel = new MessageChannel()
+
+    channel.port1.onmessage = (event) => {
+      if (event.data && event.data.error) {
+        return reject(event.data.error)
+      }
+
+      resolve(event.data)
+    }
+
+    client.postMessage(
+      message,
+      [channel.port2].concat(transferrables.filter(Boolean)),
+    )
+  })
+}
+
+async function respondWithMock(response) {
+  // Setting response status code to 0 is a no-op.
+  // However, when responding with a "Response.error()", the produced Response
+  // instance will have status code set to 0. Since it's not possible to create
+  // a Response instance with status code 0, handle that use-case separately.
+  if (response.status === 0) {
+    return Response.error()
+  }
+
+  const mockedResponse = new Response(response.body, response)
+
+  Reflect.defineProperty(mockedResponse, IS_MOCKED_RESPONSE, {
+    value: true,
+    enumerable: true,
+  })
+
+  return mockedResponse
+}
diff --git a/package-lock.json b/package-lock.json
index 7a80b690141..d74b6410241 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -2347,6 +2347,7 @@
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
         "mocha": "10.8.2",
+        "msw": "^2.7.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -5849,6 +5850,47 @@
         "node": ">=12"
       }
     },
+    "node_modules/@bundled-es-modules/cookie": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/@bundled-es-modules/cookie/-/cookie-2.0.1.tgz",
+      "integrity": "sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "cookie": "^0.7.2"
+      }
+    },
+    "node_modules/@bundled-es-modules/statuses": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@bundled-es-modules/statuses/-/statuses-1.0.1.tgz",
+      "integrity": "sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "statuses": "^2.0.1"
+      }
+    },
+    "node_modules/@bundled-es-modules/statuses/node_modules/statuses": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+      "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/@bundled-es-modules/tough-cookie": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/@bundled-es-modules/tough-cookie/-/tough-cookie-0.1.6.tgz",
+      "integrity": "sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "@types/tough-cookie": "^4.0.5",
+        "tough-cookie": "^4.1.4"
+      }
+    },
     "node_modules/@colors/colors": {
       "version": "1.5.0",
       "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
@@ -6181,6 +6223,123 @@
         "node": ">=6.9.0"
       }
     },
+    "node_modules/@inquirer/confirm": {
+      "version": "5.1.4",
+      "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.4.tgz",
+      "integrity": "sha512-EsiT7K4beM5fN5Mz6j866EFA9+v9d5o9VUra3hrg8zY4GHmCS8b616FErbdo5eyKoVotBQkHzMIeeKYsKDStDw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@inquirer/core": "^10.1.5",
+        "@inquirer/type": "^3.0.3"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "peerDependencies": {
+        "@types/node": ">=18"
+      }
+    },
+    "node_modules/@inquirer/core": {
+      "version": "10.1.5",
+      "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.5.tgz",
+      "integrity": "sha512-/vyCWhET0ktav/mUeBqJRYTwmjFPIKPRYb3COAw7qORULgipGSUO2vL32lQKki3UxDKJ8BvuEbokaoyCA6YlWw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@inquirer/figures": "^1.0.10",
+        "@inquirer/type": "^3.0.3",
+        "ansi-escapes": "^4.3.2",
+        "cli-width": "^4.1.0",
+        "mute-stream": "^2.0.0",
+        "signal-exit": "^4.1.0",
+        "wrap-ansi": "^6.2.0",
+        "yoctocolors-cjs": "^2.1.2"
+      },
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@inquirer/core/node_modules/cli-width": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz",
+      "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">= 12"
+      }
+    },
+    "node_modules/@inquirer/core/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@inquirer/core/node_modules/mute-stream": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz",
+      "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": "^18.17.0 || >=20.5.0"
+      }
+    },
+    "node_modules/@inquirer/core/node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@inquirer/core/node_modules/wrap-ansi": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+      "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@inquirer/figures": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.10.tgz",
+      "integrity": "sha512-Ey6176gZmeqZuY/W/nZiUyvmb1/qInjcpiZjXWi6nON+nxJpD1bxtSoBxNliGISae32n6OwbY+TSXPZ1CfS4bw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@inquirer/type": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.3.tgz",
+      "integrity": "sha512-I4VIHFxUuY1bshGbXZTxCmhwaaEst9s/lll3ekok+o1Z26/ZUKdx8y1b7lsoG6rtsBDwEGfiBJ2SfirjoISLpg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "peerDependencies": {
+        "@types/node": ">=18"
+      }
+    },
     "node_modules/@isaacs/cliui": {
       "version": "8.0.2",
       "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
@@ -7008,6 +7167,24 @@
       "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
       "dev": true
     },
+    "node_modules/@mswjs/interceptors": {
+      "version": "0.37.5",
+      "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.37.5.tgz",
+      "integrity": "sha512-AAwRb5vXFcY4L+FvZ7LZusDuZ0vEe0Zm8ohn1FM6/X7A3bj4mqmkAcGRWuvC2JwSygNwHAAmMnAI73vPHeqsHA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@open-draft/deferred-promise": "^2.2.0",
+        "@open-draft/logger": "^0.3.0",
+        "@open-draft/until": "^2.0.0",
+        "is-node-process": "^1.2.0",
+        "outvariant": "^1.4.3",
+        "strict-event-emitter": "^0.5.1"
+      },
+      "engines": {
+        "node": ">=18"
+      }
+    },
     "node_modules/@nodelib/fs.scandir": {
       "version": "2.1.5",
       "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -8087,6 +8264,31 @@
         "@octokit/openapi-types": "^18.0.0"
       }
     },
+    "node_modules/@open-draft/deferred-promise": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz",
+      "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@open-draft/logger": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz",
+      "integrity": "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-node-process": "^1.2.0",
+        "outvariant": "^1.4.0"
+      }
+    },
+    "node_modules/@open-draft/until": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz",
+      "integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/@opencensus/core": {
       "version": "0.1.0",
       "resolved": "https://registry.npmjs.org/@opencensus/core/-/core-0.1.0.tgz",
@@ -9307,6 +9509,13 @@
         "@types/node": "*"
       }
     },
+    "node_modules/@types/statuses": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.5.tgz",
+      "integrity": "sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/@types/superagent": {
       "version": "8.1.9",
       "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz",
@@ -16274,6 +16483,16 @@
       "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
       "dev": true
     },
+    "node_modules/graphql": {
+      "version": "16.10.0",
+      "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.10.0.tgz",
+      "integrity": "sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0"
+      }
+    },
     "node_modules/handle-thing": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz",
@@ -16438,6 +16657,13 @@
         "he": "bin/he"
       }
     },
+    "node_modules/headers-polyfill": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.3.tgz",
+      "integrity": "sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/hexer": {
       "version": "1.5.0",
       "resolved": "https://registry.npmjs.org/hexer/-/hexer-1.5.0.tgz",
@@ -17309,6 +17535,13 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/is-node-process": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz",
+      "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/is-number": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
@@ -20887,6 +21120,155 @@
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
       "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
     },
+    "node_modules/msw": {
+      "version": "2.7.0",
+      "resolved": "https://registry.npmjs.org/msw/-/msw-2.7.0.tgz",
+      "integrity": "sha512-BIodwZ19RWfCbYTxWTUfTXc+sg4OwjCAgxU1ZsgmggX/7S3LdUifsbUPJs61j0rWb19CZRGY5if77duhc0uXzw==",
+      "dev": true,
+      "hasInstallScript": true,
+      "license": "MIT",
+      "dependencies": {
+        "@bundled-es-modules/cookie": "^2.0.1",
+        "@bundled-es-modules/statuses": "^1.0.1",
+        "@bundled-es-modules/tough-cookie": "^0.1.6",
+        "@inquirer/confirm": "^5.0.0",
+        "@mswjs/interceptors": "^0.37.0",
+        "@open-draft/deferred-promise": "^2.2.0",
+        "@open-draft/until": "^2.1.0",
+        "@types/cookie": "^0.6.0",
+        "@types/statuses": "^2.0.4",
+        "graphql": "^16.8.1",
+        "headers-polyfill": "^4.0.2",
+        "is-node-process": "^1.2.0",
+        "outvariant": "^1.4.3",
+        "path-to-regexp": "^6.3.0",
+        "picocolors": "^1.1.1",
+        "strict-event-emitter": "^0.5.1",
+        "type-fest": "^4.26.1",
+        "yargs": "^17.7.2"
+      },
+      "bin": {
+        "msw": "cli/index.js"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/mswjs"
+      },
+      "peerDependencies": {
+        "typescript": ">= 4.8.x"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/msw/node_modules/@types/cookie": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
+      "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/msw/node_modules/cliui": {
+      "version": "8.0.1",
+      "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+      "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "string-width": "^4.2.0",
+        "strip-ansi": "^6.0.1",
+        "wrap-ansi": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/msw/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/msw/node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/msw/node_modules/type-fest": {
+      "version": "4.33.0",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.33.0.tgz",
+      "integrity": "sha512-s6zVrxuyKbbAsSAD5ZPTB77q4YIdRctkTbJ2/Dqlinwz+8ooH2gd+YA7VA6Pa93KML9GockVvoxjZ2vHP+mu8g==",
+      "dev": true,
+      "license": "(MIT OR CC0-1.0)",
+      "engines": {
+        "node": ">=16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/msw/node_modules/wrap-ansi": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+      }
+    },
+    "node_modules/msw/node_modules/yargs": {
+      "version": "17.7.2",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+      "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "cliui": "^8.0.1",
+        "escalade": "^3.1.1",
+        "get-caller-file": "^2.0.5",
+        "require-directory": "^2.1.1",
+        "string-width": "^4.2.3",
+        "y18n": "^5.0.5",
+        "yargs-parser": "^21.1.1"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/msw/node_modules/yargs-parser": {
+      "version": "21.1.1",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+      "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=12"
+      }
+    },
     "node_modules/multicast-dns": {
       "version": "7.2.5",
       "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz",
@@ -22340,6 +22722,13 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/outvariant": {
+      "version": "1.4.3",
+      "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz",
+      "integrity": "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/p-finally": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
@@ -23505,6 +23894,29 @@
       "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==",
       "dev": true
     },
+    "node_modules/psl": {
+      "version": "1.15.0",
+      "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz",
+      "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "punycode": "^2.3.1"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/lupomontero"
+      }
+    },
+    "node_modules/psl/node_modules/punycode": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+      "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
     "node_modules/pump": {
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz",
@@ -23816,6 +24228,13 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/querystringify": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
+      "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/queue-microtask": {
       "version": "1.2.3",
       "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -25784,6 +26203,13 @@
         "bare-events": "^2.2.0"
       }
     },
+    "node_modules/strict-event-emitter": {
+      "version": "0.5.1",
+      "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz",
+      "integrity": "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/string_decoder": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -26650,6 +27076,42 @@
         "node": ">=0.6"
       }
     },
+    "node_modules/tough-cookie": {
+      "version": "4.1.4",
+      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz",
+      "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "psl": "^1.1.33",
+        "punycode": "^2.1.1",
+        "universalify": "^0.2.0",
+        "url-parse": "^1.5.3"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/tough-cookie/node_modules/punycode": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+      "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/tough-cookie/node_modules/universalify": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
+      "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 4.0.0"
+      }
+    },
     "node_modules/tr46": {
       "version": "0.0.3",
       "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
@@ -27355,6 +27817,17 @@
         "node": ">=6"
       }
     },
+    "node_modules/url-parse": {
+      "version": "1.5.10",
+      "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
+      "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "querystringify": "^2.1.1",
+        "requires-port": "^1.0.0"
+      }
+    },
     "node_modules/urlgrey": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-1.0.0.tgz",
@@ -28486,6 +28959,19 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/yoctocolors-cjs": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz",
+      "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/zod": {
       "version": "3.22.4",
       "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz",
@@ -31360,6 +31846,42 @@
       "dev": true,
       "optional": true
     },
+    "@bundled-es-modules/cookie": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/@bundled-es-modules/cookie/-/cookie-2.0.1.tgz",
+      "integrity": "sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==",
+      "dev": true,
+      "requires": {
+        "cookie": "^0.7.2"
+      }
+    },
+    "@bundled-es-modules/statuses": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@bundled-es-modules/statuses/-/statuses-1.0.1.tgz",
+      "integrity": "sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==",
+      "dev": true,
+      "requires": {
+        "statuses": "^2.0.1"
+      },
+      "dependencies": {
+        "statuses": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+          "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+          "dev": true
+        }
+      }
+    },
+    "@bundled-es-modules/tough-cookie": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/@bundled-es-modules/tough-cookie/-/tough-cookie-0.1.6.tgz",
+      "integrity": "sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==",
+      "dev": true,
+      "requires": {
+        "@types/tough-cookie": "^4.0.5",
+        "tough-cookie": "^4.1.4"
+      }
+    },
     "@colors/colors": {
       "version": "1.5.0",
       "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
@@ -31610,6 +32132,87 @@
       "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==",
       "dev": true
     },
+    "@inquirer/confirm": {
+      "version": "5.1.4",
+      "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.4.tgz",
+      "integrity": "sha512-EsiT7K4beM5fN5Mz6j866EFA9+v9d5o9VUra3hrg8zY4GHmCS8b616FErbdo5eyKoVotBQkHzMIeeKYsKDStDw==",
+      "dev": true,
+      "requires": {
+        "@inquirer/core": "^10.1.5",
+        "@inquirer/type": "^3.0.3"
+      }
+    },
+    "@inquirer/core": {
+      "version": "10.1.5",
+      "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.5.tgz",
+      "integrity": "sha512-/vyCWhET0ktav/mUeBqJRYTwmjFPIKPRYb3COAw7qORULgipGSUO2vL32lQKki3UxDKJ8BvuEbokaoyCA6YlWw==",
+      "dev": true,
+      "requires": {
+        "@inquirer/figures": "^1.0.10",
+        "@inquirer/type": "^3.0.3",
+        "ansi-escapes": "^4.3.2",
+        "cli-width": "^4.1.0",
+        "mute-stream": "^2.0.0",
+        "signal-exit": "^4.1.0",
+        "wrap-ansi": "^6.2.0",
+        "yoctocolors-cjs": "^2.1.2"
+      },
+      "dependencies": {
+        "cli-width": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz",
+          "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==",
+          "dev": true
+        },
+        "emoji-regex": {
+          "version": "8.0.0",
+          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+          "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+          "dev": true
+        },
+        "mute-stream": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz",
+          "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==",
+          "dev": true
+        },
+        "string-width": {
+          "version": "4.2.3",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+          "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^8.0.0",
+            "is-fullwidth-code-point": "^3.0.0",
+            "strip-ansi": "^6.0.1"
+          }
+        },
+        "wrap-ansi": {
+          "version": "6.2.0",
+          "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+          "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.0.0",
+            "string-width": "^4.1.0",
+            "strip-ansi": "^6.0.0"
+          }
+        }
+      }
+    },
+    "@inquirer/figures": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.10.tgz",
+      "integrity": "sha512-Ey6176gZmeqZuY/W/nZiUyvmb1/qInjcpiZjXWi6nON+nxJpD1bxtSoBxNliGISae32n6OwbY+TSXPZ1CfS4bw==",
+      "dev": true
+    },
+    "@inquirer/type": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.3.tgz",
+      "integrity": "sha512-I4VIHFxUuY1bshGbXZTxCmhwaaEst9s/lll3ekok+o1Z26/ZUKdx8y1b7lsoG6rtsBDwEGfiBJ2SfirjoISLpg==",
+      "dev": true,
+      "requires": {}
+    },
     "@isaacs/cliui": {
       "version": "8.0.2",
       "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
@@ -32261,6 +32864,20 @@
         }
       }
     },
+    "@mswjs/interceptors": {
+      "version": "0.37.5",
+      "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.37.5.tgz",
+      "integrity": "sha512-AAwRb5vXFcY4L+FvZ7LZusDuZ0vEe0Zm8ohn1FM6/X7A3bj4mqmkAcGRWuvC2JwSygNwHAAmMnAI73vPHeqsHA==",
+      "dev": true,
+      "requires": {
+        "@open-draft/deferred-promise": "^2.2.0",
+        "@open-draft/logger": "^0.3.0",
+        "@open-draft/until": "^2.0.0",
+        "is-node-process": "^1.2.0",
+        "outvariant": "^1.4.3",
+        "strict-event-emitter": "^0.5.1"
+      }
+    },
     "@nodelib/fs.scandir": {
       "version": "2.1.5",
       "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -33046,6 +33663,28 @@
         "@octokit/openapi-types": "^18.0.0"
       }
     },
+    "@open-draft/deferred-promise": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz",
+      "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==",
+      "dev": true
+    },
+    "@open-draft/logger": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz",
+      "integrity": "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==",
+      "dev": true,
+      "requires": {
+        "is-node-process": "^1.2.0",
+        "outvariant": "^1.4.0"
+      }
+    },
+    "@open-draft/until": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz",
+      "integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==",
+      "dev": true
+    },
     "@opencensus/core": {
       "version": "0.1.0",
       "resolved": "https://registry.npmjs.org/@opencensus/core/-/core-0.1.0.tgz",
@@ -34953,6 +35592,7 @@
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
         "mocha": "10.8.2",
+        "msw": "^2.7.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -38132,6 +38772,12 @@
         "@types/node": "*"
       }
     },
+    "@types/statuses": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.5.tgz",
+      "integrity": "sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==",
+      "dev": true
+    },
     "@types/superagent": {
       "version": "8.1.9",
       "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz",
@@ -43665,6 +44311,12 @@
       "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
       "dev": true
     },
+    "graphql": {
+      "version": "16.10.0",
+      "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.10.0.tgz",
+      "integrity": "sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ==",
+      "dev": true
+    },
     "handle-thing": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz",
@@ -43782,6 +44434,12 @@
       "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
       "dev": true
     },
+    "headers-polyfill": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.3.tgz",
+      "integrity": "sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==",
+      "dev": true
+    },
     "hexer": {
       "version": "1.5.0",
       "resolved": "https://registry.npmjs.org/hexer/-/hexer-1.5.0.tgz",
@@ -44442,6 +45100,12 @@
       "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==",
       "dev": true
     },
+    "is-node-process": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz",
+      "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==",
+      "dev": true
+    },
     "is-number": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
@@ -47114,6 +47778,106 @@
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
       "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
     },
+    "msw": {
+      "version": "2.7.0",
+      "resolved": "https://registry.npmjs.org/msw/-/msw-2.7.0.tgz",
+      "integrity": "sha512-BIodwZ19RWfCbYTxWTUfTXc+sg4OwjCAgxU1ZsgmggX/7S3LdUifsbUPJs61j0rWb19CZRGY5if77duhc0uXzw==",
+      "dev": true,
+      "requires": {
+        "@bundled-es-modules/cookie": "^2.0.1",
+        "@bundled-es-modules/statuses": "^1.0.1",
+        "@bundled-es-modules/tough-cookie": "^0.1.6",
+        "@inquirer/confirm": "^5.0.0",
+        "@mswjs/interceptors": "^0.37.0",
+        "@open-draft/deferred-promise": "^2.2.0",
+        "@open-draft/until": "^2.1.0",
+        "@types/cookie": "^0.6.0",
+        "@types/statuses": "^2.0.4",
+        "graphql": "^16.8.1",
+        "headers-polyfill": "^4.0.2",
+        "is-node-process": "^1.2.0",
+        "outvariant": "^1.4.3",
+        "path-to-regexp": "^6.3.0",
+        "picocolors": "^1.1.1",
+        "strict-event-emitter": "^0.5.1",
+        "type-fest": "^4.26.1",
+        "yargs": "^17.7.2"
+      },
+      "dependencies": {
+        "@types/cookie": {
+          "version": "0.6.0",
+          "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
+          "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==",
+          "dev": true
+        },
+        "cliui": {
+          "version": "8.0.1",
+          "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+          "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+          "dev": true,
+          "requires": {
+            "string-width": "^4.2.0",
+            "strip-ansi": "^6.0.1",
+            "wrap-ansi": "^7.0.0"
+          }
+        },
+        "emoji-regex": {
+          "version": "8.0.0",
+          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+          "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+          "dev": true
+        },
+        "string-width": {
+          "version": "4.2.3",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+          "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^8.0.0",
+            "is-fullwidth-code-point": "^3.0.0",
+            "strip-ansi": "^6.0.1"
+          }
+        },
+        "type-fest": {
+          "version": "4.33.0",
+          "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.33.0.tgz",
+          "integrity": "sha512-s6zVrxuyKbbAsSAD5ZPTB77q4YIdRctkTbJ2/Dqlinwz+8ooH2gd+YA7VA6Pa93KML9GockVvoxjZ2vHP+mu8g==",
+          "dev": true
+        },
+        "wrap-ansi": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+          "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.0.0",
+            "string-width": "^4.1.0",
+            "strip-ansi": "^6.0.0"
+          }
+        },
+        "yargs": {
+          "version": "17.7.2",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+          "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+          "dev": true,
+          "requires": {
+            "cliui": "^8.0.1",
+            "escalade": "^3.1.1",
+            "get-caller-file": "^2.0.5",
+            "require-directory": "^2.1.1",
+            "string-width": "^4.2.3",
+            "y18n": "^5.0.5",
+            "yargs-parser": "^21.1.1"
+          }
+        },
+        "yargs-parser": {
+          "version": "21.1.1",
+          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+          "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+          "dev": true
+        }
+      }
+    },
     "multicast-dns": {
       "version": "7.2.5",
       "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz",
@@ -48256,6 +49020,12 @@
       "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
       "dev": true
     },
+    "outvariant": {
+      "version": "1.4.3",
+      "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz",
+      "integrity": "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==",
+      "dev": true
+    },
     "p-finally": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
@@ -49145,6 +49915,23 @@
       "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==",
       "dev": true
     },
+    "psl": {
+      "version": "1.15.0",
+      "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz",
+      "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==",
+      "dev": true,
+      "requires": {
+        "punycode": "^2.3.1"
+      },
+      "dependencies": {
+        "punycode": {
+          "version": "2.3.1",
+          "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+          "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+          "dev": true
+        }
+      }
+    },
     "pump": {
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz",
@@ -49385,6 +50172,12 @@
         "side-channel": "^1.0.6"
       }
     },
+    "querystringify": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
+      "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
+      "dev": true
+    },
     "queue-microtask": {
       "version": "1.2.3",
       "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -50900,6 +51693,12 @@
         "text-decoder": "^1.1.0"
       }
     },
+    "strict-event-emitter": {
+      "version": "0.5.1",
+      "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz",
+      "integrity": "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==",
+      "dev": true
+    },
     "string_decoder": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -51554,6 +52353,32 @@
       "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
       "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
     },
+    "tough-cookie": {
+      "version": "4.1.4",
+      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz",
+      "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==",
+      "dev": true,
+      "requires": {
+        "psl": "^1.1.33",
+        "punycode": "^2.1.1",
+        "universalify": "^0.2.0",
+        "url-parse": "^1.5.3"
+      },
+      "dependencies": {
+        "punycode": {
+          "version": "2.3.1",
+          "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+          "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+          "dev": true
+        },
+        "universalify": {
+          "version": "0.2.0",
+          "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
+          "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
+          "dev": true
+        }
+      }
+    },
     "tr46": {
       "version": "0.0.3",
       "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
@@ -52045,6 +52870,16 @@
         }
       }
     },
+    "url-parse": {
+      "version": "1.5.10",
+      "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
+      "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+      "dev": true,
+      "requires": {
+        "querystringify": "^2.1.1",
+        "requires-port": "^1.0.0"
+      }
+    },
     "urlgrey": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-1.0.0.tgz",
@@ -53018,6 +53853,12 @@
       "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
       "dev": true
     },
+    "yoctocolors-cjs": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz",
+      "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==",
+      "dev": true
+    },
     "zod": {
       "version": "3.22.4",
       "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz",

From a04284ccdcbbdcb2f1fc84adfd70489c1eeca03a Mon Sep 17 00:00:00 2001
From: Godfrey Chan <godfreykfc@gmail.com>
Date: Thu, 30 Jan 2025 04:32:18 -0800
Subject: [PATCH 11/16] refactor(exporter-*): remove `export * from ...`
 (#5399)

---
 experimental/packages/exporter-logs-otlp-grpc/src/index.ts   | 2 +-
 experimental/packages/exporter-trace-otlp-grpc/src/index.ts  | 5 +----
 experimental/packages/exporter-trace-otlp-http/src/index.ts  | 5 +----
 .../exporter-trace-otlp-http/src/platform/browser/index.ts   | 5 +----
 .../packages/exporter-trace-otlp-http/src/platform/index.ts  | 5 +----
 .../exporter-trace-otlp-http/src/platform/node/index.ts      | 5 +----
 .../opentelemetry-exporter-metrics-otlp-grpc/src/index.ts    | 5 +----
 .../opentelemetry-exporter-metrics-otlp-proto/src/index.ts   | 5 +----
 8 files changed, 8 insertions(+), 29 deletions(-)

diff --git a/experimental/packages/exporter-logs-otlp-grpc/src/index.ts b/experimental/packages/exporter-logs-otlp-grpc/src/index.ts
index 1c9dce18f30..ac578b8b6a6 100644
--- a/experimental/packages/exporter-logs-otlp-grpc/src/index.ts
+++ b/experimental/packages/exporter-logs-otlp-grpc/src/index.ts
@@ -17,4 +17,4 @@
 /* eslint no-restricted-syntax: ["warn", "ExportAllDeclaration"] --
  * TODO: Replace wildcard export with named exports before next major version
  */
-export * from './OTLPLogExporter';
+export { OTLPLogExporter } from './OTLPLogExporter';
diff --git a/experimental/packages/exporter-trace-otlp-grpc/src/index.ts b/experimental/packages/exporter-trace-otlp-grpc/src/index.ts
index 4680586a1d3..254ac931a50 100644
--- a/experimental/packages/exporter-trace-otlp-grpc/src/index.ts
+++ b/experimental/packages/exporter-trace-otlp-grpc/src/index.ts
@@ -14,7 +14,4 @@
  * limitations under the License.
  */
 
-/* eslint no-restricted-syntax: ["warn", "ExportAllDeclaration"] --
- * TODO: Replace wildcard export with named exports before next major version
- */
-export * from './OTLPTraceExporter';
+export { OTLPTraceExporter } from './OTLPTraceExporter';
diff --git a/experimental/packages/exporter-trace-otlp-http/src/index.ts b/experimental/packages/exporter-trace-otlp-http/src/index.ts
index 70c8d9108d9..d8d53de1cda 100644
--- a/experimental/packages/exporter-trace-otlp-http/src/index.ts
+++ b/experimental/packages/exporter-trace-otlp-http/src/index.ts
@@ -14,7 +14,4 @@
  * limitations under the License.
  */
 
-/* eslint no-restricted-syntax: ["warn", "ExportAllDeclaration"] --
- * TODO: Replace wildcard export with named exports before next major version
- */
-export * from './platform';
+export { OTLPTraceExporter } from './platform';
diff --git a/experimental/packages/exporter-trace-otlp-http/src/platform/browser/index.ts b/experimental/packages/exporter-trace-otlp-http/src/platform/browser/index.ts
index 4680586a1d3..254ac931a50 100644
--- a/experimental/packages/exporter-trace-otlp-http/src/platform/browser/index.ts
+++ b/experimental/packages/exporter-trace-otlp-http/src/platform/browser/index.ts
@@ -14,7 +14,4 @@
  * limitations under the License.
  */
 
-/* eslint no-restricted-syntax: ["warn", "ExportAllDeclaration"] --
- * TODO: Replace wildcard export with named exports before next major version
- */
-export * from './OTLPTraceExporter';
+export { OTLPTraceExporter } from './OTLPTraceExporter';
diff --git a/experimental/packages/exporter-trace-otlp-http/src/platform/index.ts b/experimental/packages/exporter-trace-otlp-http/src/platform/index.ts
index 5b5a74b7e4f..ada2dce58b8 100644
--- a/experimental/packages/exporter-trace-otlp-http/src/platform/index.ts
+++ b/experimental/packages/exporter-trace-otlp-http/src/platform/index.ts
@@ -14,7 +14,4 @@
  * limitations under the License.
  */
 
-/* eslint no-restricted-syntax: ["warn", "ExportAllDeclaration"] --
- * TODO: Replace wildcard export with named exports before next major version
- */
-export * from './node';
+export { OTLPTraceExporter } from './node';
diff --git a/experimental/packages/exporter-trace-otlp-http/src/platform/node/index.ts b/experimental/packages/exporter-trace-otlp-http/src/platform/node/index.ts
index 4680586a1d3..254ac931a50 100644
--- a/experimental/packages/exporter-trace-otlp-http/src/platform/node/index.ts
+++ b/experimental/packages/exporter-trace-otlp-http/src/platform/node/index.ts
@@ -14,7 +14,4 @@
  * limitations under the License.
  */
 
-/* eslint no-restricted-syntax: ["warn", "ExportAllDeclaration"] --
- * TODO: Replace wildcard export with named exports before next major version
- */
-export * from './OTLPTraceExporter';
+export { OTLPTraceExporter } from './OTLPTraceExporter';
diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/src/index.ts b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/src/index.ts
index 59fbfabe094..be76cce78f5 100644
--- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/src/index.ts
+++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/src/index.ts
@@ -14,7 +14,4 @@
  * limitations under the License.
  */
 
-/* eslint no-restricted-syntax: ["warn", "ExportAllDeclaration"] --
- * TODO: Replace wildcard export with named exports before next major version
- */
-export * from './OTLPMetricExporter';
+export { OTLPMetricExporter } from './OTLPMetricExporter';
diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/src/index.ts b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/src/index.ts
index 59fbfabe094..be76cce78f5 100644
--- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/src/index.ts
+++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/src/index.ts
@@ -14,7 +14,4 @@
  * limitations under the License.
  */
 
-/* eslint no-restricted-syntax: ["warn", "ExportAllDeclaration"] --
- * TODO: Replace wildcard export with named exports before next major version
- */
-export * from './OTLPMetricExporter';
+export { OTLPMetricExporter } from './OTLPMetricExporter';

From e265e47e98fb69a0ae21363404d99ffcdd434882 Mon Sep 17 00:00:00 2001
From: Marc Pichler <marc.pichler@dynatrace.com>
Date: Thu, 30 Jan 2025 13:33:13 +0100
Subject: [PATCH 12/16] feat(sdk-trace-base)!: drop ability to auto-instantiate
 propagators beyond defaults (#5355)

Co-authored-by: Trent Mick <trentm@gmail.com>
---
 CHANGELOG.md                                  |  13 ++
 experimental/CHANGELOG.md                     |   1 +
 .../opentelemetry-sdk-node/package.json       |   4 +-
 .../opentelemetry-sdk-node/src/sdk.ts         |   5 +-
 .../opentelemetry-sdk-node/src/utils.ts       |  74 +++++++++-
 .../opentelemetry-sdk-node/test/sdk.test.ts   |  15 ++
 .../opentelemetry-sdk-node/test/utils.test.ts | 102 ++++++++++++++
 .../opentelemetry-sdk-node/tsconfig.json      |   6 +
 package-lock.json                             |   8 +-
 .../src/BasicTracerProvider.ts                |  77 ++---------
 .../test/common/BasicTracerProvider.test.ts   | 125 ++++-------------
 .../opentelemetry-sdk-trace-node/package.json |   2 -
 .../src/NodeTracerProvider.ts                 |  20 ---
 .../test/NodeTracerProvider.test.ts           | 130 ------------------
 .../tsconfig.json                             |   6 -
 15 files changed, 259 insertions(+), 329 deletions(-)
 create mode 100644 experimental/packages/opentelemetry-sdk-node/test/utils.test.ts

diff --git a/CHANGELOG.md b/CHANGELOG.md
index a0c9f2ea360..90fded658fd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -52,6 +52,19 @@ For semantic convention package changes, see the [semconv CHANGELOG](packages/se
   * (user-facing): deprecated `AlwaysOffSampler` has moved to `@opentelemetry/sdk-trace-base`
   * (user-facing): deprecated `TraceIdRatioSampler` has moved to `@opentelemetry/sdk-trace-base`
   * (user-facing): deprecated `TraceIdRatioSampler` has moved to  `@opentelemetry/sdk-trace-base`
+* feat(sdk-trace-base)!: drop ability to instantiate propagators beyond defaults [#5355](https://github.com/open-telemetry/opentelemetry-js/pull/5355) @pichlermarc
+  * (user-facing): only a non-env-var based default is now used on `BasicTracerProvider#register()`.
+    * propagators can now not be configured via `OTEL_PROPAGATORS` or `window.OTEL_PROPAGATORS` anymore, please pass the propagator to `NodeTracerProvider#register()` instead.
+    * if not configured directly via code, `BasicTracerProvider#register()` will now fall back to defaults (`tracecontext` and `baggage`)
+* feat(sdk-trace-node)!: drop ability to instantiate propagators beyond defaults [#5355](https://github.com/open-telemetry/opentelemetry-js/pull/5355) @pichlermarc
+  * (user-facing): only a non-env-var based default is now used on `NodeTracerProvider#register()`.
+    * propagators can now not be configured via `OTEL_PROPAGATORS` anymore, please pass the propagator to `NodeTracerProvider#register()` instead.
+    * if not configured via code, `NodeTracerProvider#register()` will now fall back to the defaults (`tracecontext` and `baggage`)
+    * if autoconfiguration based on enviornment variables is needed, please use `NodeSDK` from `@opentelemetry/sdk-node`.
+* feat(sdk-trace-web)!: drop ability to instantiate propagators beyond defaults [#5355](https://github.com/open-telemetry/opentelemetry-js/pull/5355) @pichlermarc
+  * (user-facing): only a non-env-var based default is now used on `WebTracerProvider#register()`.
+    * propagators can now not be configured via `window.OTEL_PROPAGATORS` anymore, please pass the propagator to `WebTracerProvider#register()` instead.
+    * if not configured via code, `WebTracerProvider#register()` will now fall back to defaults (`tracecontext` and `baggage`)
 
 ### :rocket: (Enhancement)
 
diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md
index d19f5000370..ff4ea166948 100644
--- a/experimental/CHANGELOG.md
+++ b/experimental/CHANGELOG.md
@@ -34,6 +34,7 @@ All notable changes to experimental packages in this project will be documented
 * chore(instrumentation-grpc): remove unused findIndex() function [#5372](https://github.com/open-telemetry/opentelemetry-js/pull/5372) @cjihrig
 * refactor(otlp-exporter-base): remove unnecessary isNaN() checks [#5374](https://github.com/open-telemetry/opentelemetry-js/pull/5374) @cjihrig
 * refactor(exporter-prometheus): remove unnecessary isNaN() check [#5377](https://github.com/open-telemetry/opentelemetry-js/pull/5377) @cjihrig
+* refactor(sdk-node): move code to auto-instantiate propagators into utils [#5355](https://github.com/open-telemetry/opentelemetry-js/pull/5355) @pichlermarc
 
 ## 0.57.0
 
diff --git a/experimental/packages/opentelemetry-sdk-node/package.json b/experimental/packages/opentelemetry-sdk-node/package.json
index 4b952a8d3fa..3e1fb29b8d5 100644
--- a/experimental/packages/opentelemetry-sdk-node/package.json
+++ b/experimental/packages/opentelemetry-sdk-node/package.json
@@ -63,7 +63,9 @@
     "@opentelemetry/sdk-metrics": "1.30.0",
     "@opentelemetry/sdk-trace-base": "1.30.0",
     "@opentelemetry/sdk-trace-node": "1.30.0",
-    "@opentelemetry/semantic-conventions": "1.28.0"
+    "@opentelemetry/semantic-conventions": "1.28.0",
+    "@opentelemetry/propagator-jaeger": "1.30.0",
+    "@opentelemetry/propagator-b3": "1.30.0"
   },
   "peerDependencies": {
     "@opentelemetry/api": ">=1.3.0 <1.10.0"
diff --git a/experimental/packages/opentelemetry-sdk-node/src/sdk.ts b/experimental/packages/opentelemetry-sdk-node/src/sdk.ts
index 771de822939..b6796f6368c 100644
--- a/experimental/packages/opentelemetry-sdk-node/src/sdk.ts
+++ b/experimental/packages/opentelemetry-sdk-node/src/sdk.ts
@@ -74,6 +74,7 @@ import {
   getResourceDetectorsFromEnv,
   getSpanProcessorsFromEnv,
   filterBlanksAndNulls,
+  getPropagatorFromEnv,
 } from './utils';
 
 /** This class represents everything needed to register a fully configured OpenTelemetry Node.js SDK */
@@ -376,7 +377,9 @@ export class NodeSDK {
           this._tracerProviderConfig?.contextManager ??
           // _tracerProviderConfig may be undefined if trace-specific settings are not provided - fall back to raw config
           this._configuration?.contextManager,
-        propagator: this._tracerProviderConfig?.textMapPropagator,
+        propagator:
+          this._tracerProviderConfig?.textMapPropagator ??
+          getPropagatorFromEnv(),
       });
     }
 
diff --git a/experimental/packages/opentelemetry-sdk-node/src/utils.ts b/experimental/packages/opentelemetry-sdk-node/src/utils.ts
index 3c1011b0b34..a256b0023e3 100644
--- a/experimental/packages/opentelemetry-sdk-node/src/utils.ts
+++ b/experimental/packages/opentelemetry-sdk-node/src/utils.ts
@@ -14,8 +14,13 @@
  * limitations under the License.
  */
 
-import { diag } from '@opentelemetry/api';
-import { getEnv, getEnvWithoutDefaults } from '@opentelemetry/core';
+import { diag, TextMapPropagator } from '@opentelemetry/api';
+import {
+  CompositePropagator,
+  getEnv,
+  getEnvWithoutDefaults,
+  W3CTraceContextPropagator,
+} from '@opentelemetry/core';
 import { OTLPTraceExporter as OTLPProtoTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto';
 import { OTLPTraceExporter as OTLPHttpTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
 import { OTLPTraceExporter as OTLPGrpcTraceExporter } from '@opentelemetry/exporter-trace-otlp-grpc';
@@ -35,6 +40,8 @@ import {
   SpanExporter,
   SpanProcessor,
 } from '@opentelemetry/sdk-trace-base';
+import { B3InjectEncoding, B3Propagator } from '@opentelemetry/propagator-b3';
+import { JaegerPropagator } from '@opentelemetry/propagator-jaeger';
 
 const RESOURCE_DETECTOR_ENVIRONMENT = 'env';
 const RESOURCE_DETECTOR_HOST = 'host';
@@ -180,3 +187,66 @@ export function getSpanProcessorsFromEnv(): SpanProcessor[] {
 
   return processors;
 }
+
+/**
+ * Get a propagator as defined by environment variables
+ */
+export function getPropagatorFromEnv(): TextMapPropagator | null | undefined {
+  // Empty and undefined MUST be treated equal.
+  if (
+    process.env.OTEL_PROPAGATORS === undefined ||
+    process.env.OTEL_PROPAGATORS?.trim() === ''
+  ) {
+    // return undefined to fall back to default
+    return undefined;
+  }
+
+  // Implementation note: this only contains specification required propagators that are actually hosted in this repo.
+  // Any other propagators (like aws, aws-lambda, should go into `@opentelemetry/auto-configuration-propagators` instead).
+  const propagatorsFactory = new Map<string, () => TextMapPropagator>([
+    ['tracecontext', () => new W3CTraceContextPropagator()],
+    ['baggage', () => new W3CTraceContextPropagator()],
+    ['b3', () => new B3Propagator()],
+    [
+      'b3multi',
+      () => new B3Propagator({ injectEncoding: B3InjectEncoding.MULTI_HEADER }),
+    ],
+    ['jaeger', () => new JaegerPropagator()],
+  ]);
+
+  // Values MUST be deduplicated in order to register a Propagator only once.
+  const uniquePropagatorNames = Array.from(new Set(getEnv().OTEL_PROPAGATORS));
+
+  const propagators = uniquePropagatorNames.map(name => {
+    const propagator = propagatorsFactory.get(name)?.();
+    if (!propagator) {
+      diag.warn(
+        `Propagator "${name}" requested through environment variable is unavailable.`
+      );
+      return undefined;
+    }
+
+    return propagator;
+  });
+
+  const validPropagators = propagators.reduce<TextMapPropagator[]>(
+    (list, item) => {
+      if (item) {
+        list.push(item);
+      }
+      return list;
+    },
+    []
+  );
+
+  if (validPropagators.length === 0) {
+    // null to signal that the default should **not** be used in its place.
+    return null;
+  } else if (uniquePropagatorNames.length === 1) {
+    return validPropagators[0];
+  } else {
+    return new CompositePropagator({
+      propagators: validPropagators,
+    });
+  }
+}
diff --git a/experimental/packages/opentelemetry-sdk-node/test/sdk.test.ts b/experimental/packages/opentelemetry-sdk-node/test/sdk.test.ts
index 122f6fd415b..dc7ccbe6908 100644
--- a/experimental/packages/opentelemetry-sdk-node/test/sdk.test.ts
+++ b/experimental/packages/opentelemetry-sdk-node/test/sdk.test.ts
@@ -414,6 +414,21 @@ describe('Node SDK', () => {
       assert.equal(actualContextManager, expectedContextManager);
       await sdk.shutdown();
     });
+
+    it('should register propagators as defined in OTEL_PROPAGATORS if trace SDK is configured', async () => {
+      process.env.OTEL_PROPAGATORS = 'b3';
+      const sdk = new NodeSDK({
+        traceExporter: new ConsoleSpanExporter(),
+        autoDetectResources: false,
+      });
+
+      sdk.start();
+
+      assert.deepStrictEqual(propagation.fields(), ['b3']);
+
+      await sdk.shutdown();
+      delete process.env.OTEL_PROPAGATORS;
+    });
   });
 
   async function waitForNumberOfMetrics(
diff --git a/experimental/packages/opentelemetry-sdk-node/test/utils.test.ts b/experimental/packages/opentelemetry-sdk-node/test/utils.test.ts
new file mode 100644
index 00000000000..0c7639b4d34
--- /dev/null
+++ b/experimental/packages/opentelemetry-sdk-node/test/utils.test.ts
@@ -0,0 +1,102 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { getPropagatorFromEnv } from '../src/utils';
+import * as assert from 'assert';
+import * as sinon from 'sinon';
+import { diag } from '@opentelemetry/api';
+
+describe('getPropagatorFromEnv', function () {
+  afterEach(() => {
+    delete process.env.OTEL_PROPAGATORS;
+    sinon.restore();
+  });
+
+  describe('should default to undefined', function () {
+    it('when not defined', function () {
+      delete process.env.OTEL_PROPAGATORS;
+
+      const propagator = getPropagatorFromEnv();
+
+      assert.deepStrictEqual(propagator, undefined);
+    });
+
+    it('on empty string', function () {
+      (process.env as any).OTEL_PROPAGATORS = '';
+
+      const propagator = getPropagatorFromEnv();
+
+      assert.deepStrictEqual(propagator, undefined);
+    });
+
+    it('on space-only string', function () {
+      (process.env as any).OTEL_PROPAGATORS = '   ';
+
+      const propagator = getPropagatorFromEnv();
+
+      assert.deepStrictEqual(propagator, undefined);
+    });
+  });
+
+  it('should return the selected propagator when one is in the list', () => {
+    process.env.OTEL_PROPAGATORS = 'tracecontext';
+    assert.deepStrictEqual(getPropagatorFromEnv()?.fields(), [
+      'traceparent',
+      'tracestate',
+    ]);
+  });
+
+  it('should return the selected propagators when multiple are in the list', () => {
+    process.env.OTEL_PROPAGATORS = 'tracecontext,baggage,b3,b3multi,jaeger';
+    assert.deepStrictEqual(getPropagatorFromEnv()?.fields(), [
+      'traceparent',
+      'tracestate',
+      'b3',
+      'x-b3-traceid',
+      'x-b3-spanid',
+      'x-b3-flags',
+      'x-b3-sampled',
+      'x-b3-parentspanid',
+      'uber-trace-id',
+    ]);
+  });
+
+  it('should return null and warn if propagators are unknown', () => {
+    const warnStub = sinon.stub(diag, 'warn');
+
+    process.env.OTEL_PROPAGATORS = 'my, unknown, propagators';
+    assert.deepStrictEqual(getPropagatorFromEnv(), null);
+    sinon.assert.calledWithExactly(
+      warnStub,
+      'Propagator "my" requested through environment variable is unavailable.'
+    );
+    sinon.assert.calledWithExactly(
+      warnStub,
+      'Propagator "unknown" requested through environment variable is unavailable.'
+    );
+    sinon.assert.calledWithExactly(
+      warnStub,
+      'Propagator "propagators" requested through environment variable is unavailable.'
+    );
+    sinon.assert.calledThrice(warnStub);
+  });
+
+  it('should return null if only "none" is selected', () => {
+    process.env.OTEL_PROPAGATORS = 'none';
+
+    assert.deepStrictEqual(getPropagatorFromEnv(), null);
+  });
+});
diff --git a/experimental/packages/opentelemetry-sdk-node/tsconfig.json b/experimental/packages/opentelemetry-sdk-node/tsconfig.json
index 7d18aac481d..e14ef0d799d 100644
--- a/experimental/packages/opentelemetry-sdk-node/tsconfig.json
+++ b/experimental/packages/opentelemetry-sdk-node/tsconfig.json
@@ -24,6 +24,12 @@
     {
       "path": "../../../packages/opentelemetry-exporter-zipkin"
     },
+    {
+      "path": "../../../packages/opentelemetry-propagator-b3"
+    },
+    {
+      "path": "../../../packages/opentelemetry-propagator-jaeger"
+    },
     {
       "path": "../../../packages/opentelemetry-resources"
     },
diff --git a/package-lock.json b/package-lock.json
index d74b6410241..a131fa3b6c2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -2945,6 +2945,8 @@
         "@opentelemetry/exporter-trace-otlp-proto": "0.57.0",
         "@opentelemetry/exporter-zipkin": "1.30.0",
         "@opentelemetry/instrumentation": "0.57.0",
+        "@opentelemetry/propagator-b3": "1.30.0",
+        "@opentelemetry/propagator-jaeger": "1.30.0",
         "@opentelemetry/resources": "1.30.0",
         "@opentelemetry/sdk-logs": "0.57.0",
         "@opentelemetry/sdk-metrics": "1.30.0",
@@ -30196,8 +30198,6 @@
       "dependencies": {
         "@opentelemetry/context-async-hooks": "1.30.0",
         "@opentelemetry/core": "1.30.0",
-        "@opentelemetry/propagator-b3": "1.30.0",
-        "@opentelemetry/propagator-jaeger": "1.30.0",
         "@opentelemetry/sdk-trace-base": "1.30.0"
       },
       "devDependencies": {
@@ -37187,6 +37187,8 @@
         "@opentelemetry/exporter-trace-otlp-proto": "0.57.0",
         "@opentelemetry/exporter-zipkin": "1.30.0",
         "@opentelemetry/instrumentation": "0.57.0",
+        "@opentelemetry/propagator-b3": "1.30.0",
+        "@opentelemetry/propagator-jaeger": "1.30.0",
         "@opentelemetry/resources": "1.30.0",
         "@opentelemetry/sdk-logs": "0.57.0",
         "@opentelemetry/sdk-metrics": "1.30.0",
@@ -37369,8 +37371,6 @@
         "@opentelemetry/api": ">=1.0.0 <1.10.0",
         "@opentelemetry/context-async-hooks": "1.30.0",
         "@opentelemetry/core": "1.30.0",
-        "@opentelemetry/propagator-b3": "1.30.0",
-        "@opentelemetry/propagator-jaeger": "1.30.0",
         "@opentelemetry/resources": "1.30.0",
         "@opentelemetry/sdk-trace-base": "1.30.0",
         "@opentelemetry/semantic-conventions": "1.28.0",
diff --git a/packages/opentelemetry-sdk-trace-base/src/BasicTracerProvider.ts b/packages/opentelemetry-sdk-trace-base/src/BasicTracerProvider.ts
index 9bbf86bbb9c..dde3d10e060 100644
--- a/packages/opentelemetry-sdk-trace-base/src/BasicTracerProvider.ts
+++ b/packages/opentelemetry-sdk-trace-base/src/BasicTracerProvider.ts
@@ -16,7 +16,6 @@
 
 import {
   context,
-  diag,
   propagation,
   TextMapPropagator,
   trace,
@@ -26,7 +25,6 @@ import {
   CompositePropagator,
   W3CBaggagePropagator,
   W3CTraceContextPropagator,
-  getEnv,
   merge,
 } from '@opentelemetry/core';
 import { IResource, Resource } from '@opentelemetry/resources';
@@ -48,18 +46,14 @@ export enum ForceFlushState {
   'unresolved',
 }
 
+function getDefaultPropagators(): TextMapPropagator[] {
+  return [new W3CTraceContextPropagator(), new W3CBaggagePropagator()];
+}
+
 /**
  * This class represents a basic tracer provider which platform libraries can extend
  */
 export class BasicTracerProvider implements TracerProvider {
-  protected static readonly _registeredPropagators = new Map<
-    string,
-    PROPAGATOR_FACTORY
-  >([
-    ['tracecontext', () => new W3CTraceContextPropagator()],
-    ['baggage', () => new W3CBaggagePropagator()],
-  ]);
-
   private readonly _config: TracerConfig;
   private readonly _tracers: Map<string, Tracer> = new Map();
   private readonly _resource: IResource;
@@ -117,16 +111,19 @@ export class BasicTracerProvider implements TracerProvider {
    */
   register(config: SDKRegistrationConfig = {}): void {
     trace.setGlobalTracerProvider(this);
-    if (config.propagator === undefined) {
-      config.propagator = this._buildPropagatorFromEnv();
-    }
 
     if (config.contextManager) {
       context.setGlobalContextManager(config.contextManager);
     }
 
-    if (config.propagator) {
-      propagation.setGlobalPropagator(config.propagator);
+    // undefined means "unset", null means don't register propagator
+    if (config.propagator !== null) {
+      propagation.setGlobalPropagator(
+        config.propagator ??
+          new CompositePropagator({
+            propagators: getDefaultPropagators(),
+          })
+      );
     }
   }
 
@@ -182,54 +179,4 @@ export class BasicTracerProvider implements TracerProvider {
   shutdown(): Promise<void> {
     return this._activeSpanProcessor.shutdown();
   }
-
-  /**
-   * TS cannot yet infer the type of this.constructor:
-   * https://github.com/Microsoft/TypeScript/issues/3841#issuecomment-337560146
-   * There is no need to override either of the getters in your child class.
-   * The type of the registered component maps should be the same across all
-   * classes in the inheritance tree.
-   */
-  protected _getPropagator(name: string): TextMapPropagator | undefined {
-    return (
-      this.constructor as typeof BasicTracerProvider
-    )._registeredPropagators.get(name)?.();
-  }
-
-  protected _buildPropagatorFromEnv(): TextMapPropagator | undefined {
-    // per spec, propagators from env must be deduplicated
-    const uniquePropagatorNames = Array.from(
-      new Set(getEnv().OTEL_PROPAGATORS)
-    );
-
-    const propagators = uniquePropagatorNames.map(name => {
-      const propagator = this._getPropagator(name);
-      if (!propagator) {
-        diag.warn(
-          `Propagator "${name}" requested through environment variable is unavailable.`
-        );
-      }
-
-      return propagator;
-    });
-    const validPropagators = propagators.reduce<TextMapPropagator[]>(
-      (list, item) => {
-        if (item) {
-          list.push(item);
-        }
-        return list;
-      },
-      []
-    );
-
-    if (validPropagators.length === 0) {
-      return;
-    } else if (uniquePropagatorNames.length === 1) {
-      return validPropagators[0];
-    } else {
-      return new CompositePropagator({
-        propagators: validPropagators,
-      });
-    }
-  }
 }
diff --git a/packages/opentelemetry-sdk-trace-base/test/common/BasicTracerProvider.test.ts b/packages/opentelemetry-sdk-trace-base/test/common/BasicTracerProvider.test.ts
index b6762b3c3cc..2decf4e3cd4 100644
--- a/packages/opentelemetry-sdk-trace-base/test/common/BasicTracerProvider.test.ts
+++ b/packages/opentelemetry-sdk-trace-base/test/common/BasicTracerProvider.test.ts
@@ -26,9 +26,10 @@ import {
   TextMapGetter,
   propagation,
   diag,
+  ContextManager,
 } from '@opentelemetry/api';
 import { CompositePropagator } from '@opentelemetry/core';
-import { TraceState, W3CTraceContextPropagator } from '@opentelemetry/core';
+import { TraceState } from '@opentelemetry/core';
 import { Resource } from '@opentelemetry/resources';
 import * as assert from 'assert';
 import * as sinon from 'sinon';
@@ -59,6 +60,7 @@ class DummyPropagator implements TextMapPropagator {
 describe('BasicTracerProvider', () => {
   let envSource: Record<string, any>;
   let setGlobalPropagatorStub: sinon.SinonSpy<[TextMapPropagator], boolean>;
+  let setGlobalContextManagerStub: sinon.SinonSpy<[ContextManager], boolean>;
 
   if (global.process?.versions?.node === undefined) {
     envSource = globalThis as unknown as Record<string, any>;
@@ -70,6 +72,7 @@ describe('BasicTracerProvider', () => {
     // to avoid actually registering the TraceProvider and leaking env to other tests
     sinon.stub(trace, 'setGlobalTracerProvider');
     setGlobalPropagatorStub = sinon.spy(propagation, 'setGlobalPropagator');
+    setGlobalContextManagerStub = sinon.spy(context, 'setGlobalContextManager');
 
     context.disable();
   });
@@ -386,97 +389,8 @@ describe('BasicTracerProvider', () => {
     });
   });
 
-  describe('Custom TracerProvider through inheritance', () => {
-    beforeEach(() => {
-      envSource.OTEL_TRACES_EXPORTER = 'custom-exporter';
-      envSource.OTEL_PROPAGATORS = 'custom-propagator';
-    });
-
-    afterEach(() => {
-      delete envSource.OTEL_TRACES_EXPORTER;
-      delete envSource.OTEL_PROPAGATORS;
-      sinon.restore();
-    });
-
-    it('can be extended by overriding registered components', () => {
-      class CustomTracerProvider extends BasicTracerProvider {
-        protected static override readonly _registeredPropagators = new Map<
-          string,
-          () => TextMapPropagator
-        >([
-          ...BasicTracerProvider._registeredPropagators,
-          ['custom-propagator', () => new DummyPropagator()],
-        ]);
-      }
-
-      const provider = new CustomTracerProvider({});
-      assert.ok(
-        provider['_getPropagator']('tracecontext') instanceof
-          W3CTraceContextPropagator
-      );
-      /* BasicTracerProvider has no exporters by default, so skipping testing the exporter getter */
-      provider.register();
-      assert.strictEqual(
-        provider['_activeSpanProcessor']['_spanProcessors'].length,
-        0
-      );
-
-      sinon.assert.calledOnceWithExactly(
-        setGlobalPropagatorStub,
-        sinon.match.instanceOf(DummyPropagator)
-      );
-    });
-
-    it('the old way of extending still works', () => {
-      // this is an anti-pattern, but we test that for backwards compatibility
-      class CustomTracerProvider extends BasicTracerProvider {
-        protected static override readonly _registeredPropagators = new Map<
-          string,
-          () => TextMapPropagator
-        >([['custom-propagator', () => new DummyPropagator()]]);
-
-        protected override _getPropagator(
-          name: string
-        ): TextMapPropagator | undefined {
-          return (
-            super._getPropagator(name) ||
-            CustomTracerProvider._registeredPropagators.get(name)?.()
-          );
-        }
-      }
-
-      const provider = new CustomTracerProvider({});
-      provider.register();
-      assert.strictEqual(
-        provider['_activeSpanProcessor']['_spanProcessors'].length,
-        0
-      );
-
-      sinon.assert.calledOnceWithExactly(
-        setGlobalPropagatorStub,
-        sinon.match.instanceOf(DummyPropagator)
-      );
-    });
-  });
-
   describe('.register()', () => {
     describe('propagator', () => {
-      let originalPropagators: string | number | undefined | string[];
-      beforeEach(() => {
-        originalPropagators = envSource.OTEL_PROPAGATORS;
-      });
-
-      afterEach(() => {
-        sinon.restore();
-
-        // otherwise we may assign 'undefined' (a string)
-        if (originalPropagators !== undefined) {
-          envSource.OTEL_PROPAGATORS = originalPropagators;
-        } else {
-          delete envSource.OTEL_PROPAGATORS;
-        }
-      });
-
       it('should be set to a given value if it it provided', () => {
         const provider = new BasicTracerProvider();
         provider.register({
@@ -489,7 +403,7 @@ describe('BasicTracerProvider', () => {
         );
       });
 
-      it('should be composite if 2 or more propagators provided in an environment variable', () => {
+      it('should use w3c trace context and baggage propagators by default', () => {
         const provider = new BasicTracerProvider();
         provider.register();
 
@@ -503,17 +417,32 @@ describe('BasicTracerProvider', () => {
           'baggage',
         ]);
       });
+    });
+    describe('contextManager', () => {
+      it('should not be set if not provided', () => {
+        const provider = new BasicTracerProvider();
+        provider.register();
+
+        sinon.assert.notCalled(setGlobalContextManagerStub);
+      });
 
-      it('warns if there is no propagator registered with a given name', () => {
-        const warnStub = sinon.spy(diag, 'warn');
+      it('should be set if provided', () => {
+        const provider = new BasicTracerProvider();
+        const mockContextManager: ContextManager = {
+          active: sinon.stub(),
+          bind: sinon.stub(),
+          disable: sinon.stub(),
+          enable: sinon.stub(),
+          with: sinon.stub(),
+        };
 
-        envSource.OTEL_PROPAGATORS = 'missing-propagator';
-        const provider = new BasicTracerProvider({});
-        provider.register();
+        provider.register({
+          contextManager: mockContextManager,
+        });
 
         sinon.assert.calledOnceWithExactly(
-          warnStub,
-          'Propagator "missing-propagator" requested through environment variable is unavailable.'
+          setGlobalContextManagerStub,
+          mockContextManager
         );
       });
     });
diff --git a/packages/opentelemetry-sdk-trace-node/package.json b/packages/opentelemetry-sdk-trace-node/package.json
index 22a6b056e23..a0c1afdf928 100644
--- a/packages/opentelemetry-sdk-trace-node/package.json
+++ b/packages/opentelemetry-sdk-trace-node/package.json
@@ -64,8 +64,6 @@
   "dependencies": {
     "@opentelemetry/context-async-hooks": "1.30.0",
     "@opentelemetry/core": "1.30.0",
-    "@opentelemetry/propagator-b3": "1.30.0",
-    "@opentelemetry/propagator-jaeger": "1.30.0",
     "@opentelemetry/sdk-trace-base": "1.30.0"
   },
   "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-sdk-trace-node",
diff --git a/packages/opentelemetry-sdk-trace-node/src/NodeTracerProvider.ts b/packages/opentelemetry-sdk-trace-node/src/NodeTracerProvider.ts
index abb25f4db91..ee6c67dbbbc 100644
--- a/packages/opentelemetry-sdk-trace-node/src/NodeTracerProvider.ts
+++ b/packages/opentelemetry-sdk-trace-node/src/NodeTracerProvider.ts
@@ -14,14 +14,11 @@
  * limitations under the License.
  */
 import { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks';
-import { B3Propagator, B3InjectEncoding } from '@opentelemetry/propagator-b3';
 import {
   BasicTracerProvider,
-  PROPAGATOR_FACTORY,
   SDKRegistrationConfig,
 } from '@opentelemetry/sdk-trace-base';
 import { NodeTracerConfig } from './config';
-import { JaegerPropagator } from '@opentelemetry/propagator-jaeger';
 
 /**
  * Register this TracerProvider for use with the OpenTelemetry API.
@@ -31,23 +28,6 @@ import { JaegerPropagator } from '@opentelemetry/propagator-jaeger';
  * @param config Configuration object for SDK registration
  */
 export class NodeTracerProvider extends BasicTracerProvider {
-  protected static override readonly _registeredPropagators = new Map<
-    string,
-    PROPAGATOR_FACTORY
-  >([
-    ...BasicTracerProvider._registeredPropagators,
-    [
-      'b3',
-      () =>
-        new B3Propagator({ injectEncoding: B3InjectEncoding.SINGLE_HEADER }),
-    ],
-    [
-      'b3multi',
-      () => new B3Propagator({ injectEncoding: B3InjectEncoding.MULTI_HEADER }),
-    ],
-    ['jaeger', () => new JaegerPropagator()],
-  ]);
-
   constructor(config: NodeTracerConfig = {}) {
     super(config);
   }
diff --git a/packages/opentelemetry-sdk-trace-node/test/NodeTracerProvider.test.ts b/packages/opentelemetry-sdk-trace-node/test/NodeTracerProvider.test.ts
index e076ad0c71d..6acf1b16b45 100644
--- a/packages/opentelemetry-sdk-trace-node/test/NodeTracerProvider.test.ts
+++ b/packages/opentelemetry-sdk-trace-node/test/NodeTracerProvider.test.ts
@@ -14,18 +14,12 @@
  * limitations under the License.
  */
 
-import * as sinon from 'sinon';
 import * as assert from 'assert';
 
 import {
   context,
-  Context,
   ContextManager,
-  propagation,
   ROOT_CONTEXT,
-  TextMapGetter,
-  TextMapPropagator,
-  TextMapSetter,
   trace,
   TraceFlags,
 } from '@opentelemetry/api';
@@ -211,128 +205,4 @@ describe('NodeTracerProvider', () => {
       return patchedFn();
     });
   });
-
-  describe('.register()', () => {
-    let originalPropagators: string | number | undefined | string[];
-    beforeEach(() => {
-      originalPropagators = process.env.OTEL_PROPAGATORS;
-    });
-
-    afterEach(() => {
-      // otherwise we may assign 'undefined' (a string)
-      if (originalPropagators !== undefined) {
-        (process.env as any).OTEL_PROPAGATORS = originalPropagators;
-      } else {
-        delete (process.env as any).OTEL_PROPAGATORS;
-      }
-    });
-
-    it('should allow propagators as per the specification', () => {
-      (process.env as any).OTEL_PROPAGATORS = 'b3,b3multi,jaeger';
-
-      const provider = new NodeTracerProvider();
-      provider.register();
-
-      assert.deepStrictEqual(propagation.fields(), [
-        'b3',
-        'x-b3-traceid',
-        'x-b3-spanid',
-        'x-b3-flags',
-        'x-b3-sampled',
-        'x-b3-parentspanid',
-        'uber-trace-id',
-      ]);
-    });
-  });
-
-  describe('Custom TracerProvider through inheritance', () => {
-    class DummyPropagator implements TextMapPropagator {
-      inject(context: Context, carrier: any, setter: TextMapSetter<any>): void {
-        throw new Error('Method not implemented.');
-      }
-      extract(
-        context: Context,
-        carrier: any,
-        getter: TextMapGetter<any>
-      ): Context {
-        throw new Error('Method not implemented.');
-      }
-      fields(): string[] {
-        throw new Error('Method not implemented.');
-      }
-    }
-
-    beforeEach(() => {
-      process.env.OTEL_PROPAGATORS = 'custom-propagator';
-
-      propagation.disable();
-      trace.disable();
-    });
-
-    afterEach(() => {
-      delete process.env.OTEL_PROPAGATORS;
-
-      propagation.disable();
-      trace.disable();
-
-      sinon.restore();
-    });
-
-    it('can be extended by overriding registered components', () => {
-      const propagator = new DummyPropagator();
-
-      class CustomTracerProvider extends NodeTracerProvider {
-        protected static override readonly _registeredPropagators = new Map<
-          string,
-          () => TextMapPropagator
-        >([['custom-propagator', () => propagator]]);
-      }
-
-      const provider = new CustomTracerProvider({});
-      provider.register();
-      assert.ok(
-        provider['_activeSpanProcessor'].constructor.name ===
-          'MultiSpanProcessor'
-      );
-      assert.strictEqual(
-        provider['_activeSpanProcessor']['_spanProcessors'].length,
-        0
-      );
-      assert.strictEqual(propagation['_getGlobalPropagator'](), propagator);
-    });
-
-    it('the old way of extending still works', () => {
-      const propagator = new DummyPropagator();
-
-      // this is an anti-pattern, but we test that for backwards compatibility
-      class CustomTracerProvider extends NodeTracerProvider {
-        protected static override readonly _registeredPropagators = new Map<
-          string,
-          () => TextMapPropagator
-        >([['custom-propagator', () => propagator]]);
-
-        protected override _getPropagator(
-          name: string
-        ): TextMapPropagator | undefined {
-          return (
-            super._getPropagator(name) ||
-            CustomTracerProvider._registeredPropagators.get(name)?.()
-          );
-        }
-      }
-
-      const provider = new CustomTracerProvider({});
-      provider.register();
-      assert.ok(
-        provider['_activeSpanProcessor'].constructor.name ===
-          'MultiSpanProcessor'
-      );
-      assert.strictEqual(
-        provider['_activeSpanProcessor']['_spanProcessors'].length,
-        0
-      );
-
-      assert.strictEqual(propagation['_getGlobalPropagator'](), propagator);
-    });
-  });
 });
diff --git a/packages/opentelemetry-sdk-trace-node/tsconfig.json b/packages/opentelemetry-sdk-trace-node/tsconfig.json
index 60f86e96760..a216dba8e4f 100644
--- a/packages/opentelemetry-sdk-trace-node/tsconfig.json
+++ b/packages/opentelemetry-sdk-trace-node/tsconfig.json
@@ -21,12 +21,6 @@
     {
       "path": "../opentelemetry-core"
     },
-    {
-      "path": "../opentelemetry-propagator-b3"
-    },
-    {
-      "path": "../opentelemetry-propagator-jaeger"
-    },
     {
       "path": "../opentelemetry-resources"
     },

From bb212334c7e2262ef27bfd0e648191d5bea1530d Mon Sep 17 00:00:00 2001
From: Godfrey Chan <godfreykfc@gmail.com>
Date: Thu, 30 Jan 2025 04:38:07 -0800
Subject: [PATCH 13/16] refactor(exporter-metrics-otlp-http): fix eslint
 warning (#5396)

---
 .../src/OTLPMetricExporterBase.ts                | 16 ++++++----------
 1 file changed, 6 insertions(+), 10 deletions(-)

diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/src/OTLPMetricExporterBase.ts b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/src/OTLPMetricExporterBase.ts
index aacf2e9bcb5..bede7aaba5d 100644
--- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/src/OTLPMetricExporterBase.ts
+++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/src/OTLPMetricExporterBase.ts
@@ -111,18 +111,14 @@ function chooseTemporalitySelector(
   return chooseTemporalitySelectorFromEnvironment();
 }
 
+const DEFAULT_AGGREGATION = Object.freeze({
+  type: AggregationType.DEFAULT,
+});
+
 function chooseAggregationSelector(
   config: OTLPMetricExporterOptions | undefined
-) {
-  if (config?.aggregationPreference) {
-    return config.aggregationPreference;
-  } else {
-    return (_instrumentType: any) => {
-      return {
-        type: AggregationType.DEFAULT,
-      };
-    };
-  }
+): AggregationSelector {
+  return config?.aggregationPreference ?? (() => DEFAULT_AGGREGATION);
 }
 
 export class OTLPMetricExporterBase

From 5903906d108cab5a5ddce939b836f36874cc6d0e Mon Sep 17 00:00:00 2001
From: Mend Renovate <bot@renovateapp.com>
Date: Thu, 30 Jan 2025 16:38:45 +0100
Subject: [PATCH 14/16] chore(deps): update dependency mocha to v11.1.0 (#5404)

---
 api/package.json                              |    2 +-
 experimental/packages/api-events/package.json |    2 +-
 experimental/packages/api-logs/package.json   |    2 +-
 .../exporter-logs-otlp-grpc/package.json      |    2 +-
 .../exporter-logs-otlp-http/package.json      |    2 +-
 .../exporter-logs-otlp-proto/package.json     |    2 +-
 .../exporter-trace-otlp-grpc/package.json     |    2 +-
 .../exporter-trace-otlp-http/package.json     |    2 +-
 .../exporter-trace-otlp-proto/package.json    |    2 +-
 .../package.json                              |    2 +-
 .../package.json                              |    2 +-
 .../package.json                              |    2 +-
 .../package.json                              |    2 +-
 .../package.json                              |    2 +-
 .../package.json                              |    2 +-
 .../package.json                              |    2 +-
 .../package.json                              |    2 +-
 .../package.json                              |    2 +-
 .../package.json                              |    2 +-
 .../opentelemetry-sdk-node/package.json       |    2 +-
 .../packages/otlp-exporter-base/package.json  |    2 +-
 .../otlp-grpc-exporter-base/package.json      |    2 +-
 .../packages/otlp-transformer/package.json    |    2 +-
 .../sampler-jaeger-remote/package.json        |    2 +-
 experimental/packages/sdk-events/package.json |    2 +-
 experimental/packages/sdk-logs/package.json   |    2 +-
 .../packages/shim-opencensus/package.json     |    2 +-
 experimental/packages/web-common/package.json |    2 +-
 integration-tests/api/package.json            |    2 +-
 package-lock.json                             | 4910 ++---------------
 .../package.json                              |    2 +-
 .../package.json                              |    2 +-
 packages/opentelemetry-core/package.json      |    2 +-
 .../package.json                              |    2 +-
 .../package.json                              |    2 +-
 .../opentelemetry-propagator-b3/package.json  |    2 +-
 .../package.json                              |    2 +-
 packages/opentelemetry-resources/package.json |    2 +-
 .../opentelemetry-sdk-trace-base/package.json |    2 +-
 .../opentelemetry-sdk-trace-node/package.json |    2 +-
 .../opentelemetry-sdk-trace-web/package.json  |    2 +-
 .../package.json                              |    2 +-
 packages/sdk-metrics/package.json             |    2 +-
 semantic-conventions/package.json             |    2 +-
 44 files changed, 497 insertions(+), 4499 deletions(-)

diff --git a/api/package.json b/api/package.json
index 697d5215995..818732c7aac 100644
--- a/api/package.json
+++ b/api/package.json
@@ -93,7 +93,7 @@
     "karma-webpack": "5.0.1",
     "lerna": "6.6.2",
     "memfs": "3.5.3",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
     "ts-loader": "9.5.2",
diff --git a/experimental/packages/api-events/package.json b/experimental/packages/api-events/package.json
index 21c308e0d1b..339dc1c371b 100644
--- a/experimental/packages/api-events/package.json
+++ b/experimental/packages/api-events/package.json
@@ -76,7 +76,7 @@
     "karma-spec-reporter": "0.0.36",
     "karma-webpack": "5.0.1",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "ts-loader": "9.5.2",
     "typescript": "5.0.4",
diff --git a/experimental/packages/api-logs/package.json b/experimental/packages/api-logs/package.json
index e12f03a5001..fcedb44c8b3 100644
--- a/experimental/packages/api-logs/package.json
+++ b/experimental/packages/api-logs/package.json
@@ -75,7 +75,7 @@
     "karma-spec-reporter": "0.0.36",
     "karma-webpack": "5.0.1",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "ts-loader": "9.5.2",
     "typescript": "5.0.4",
diff --git a/experimental/packages/exporter-logs-otlp-grpc/package.json b/experimental/packages/exporter-logs-otlp-grpc/package.json
index 79ad9d937c5..9a486e01431 100644
--- a/experimental/packages/exporter-logs-otlp-grpc/package.json
+++ b/experimental/packages/exporter-logs-otlp-grpc/package.json
@@ -58,7 +58,7 @@
     "@types/sinon": "17.0.3",
     "cross-var": "1.1.0",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
     "ts-loader": "9.5.2",
diff --git a/experimental/packages/exporter-logs-otlp-http/package.json b/experimental/packages/exporter-logs-otlp-http/package.json
index b1819ff2fed..a7800bf57c2 100644
--- a/experimental/packages/exporter-logs-otlp-http/package.json
+++ b/experimental/packages/exporter-logs-otlp-http/package.json
@@ -88,7 +88,7 @@
     "karma-spec-reporter": "0.0.36",
     "karma-webpack": "5.0.1",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
     "ts-loader": "9.5.2",
diff --git a/experimental/packages/exporter-logs-otlp-proto/package.json b/experimental/packages/exporter-logs-otlp-proto/package.json
index 40eb4caac5b..01f95d58ef9 100644
--- a/experimental/packages/exporter-logs-otlp-proto/package.json
+++ b/experimental/packages/exporter-logs-otlp-proto/package.json
@@ -78,7 +78,7 @@
     "karma-spec-reporter": "0.0.36",
     "karma-webpack": "5.0.1",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
     "ts-loader": "9.5.2",
diff --git a/experimental/packages/exporter-trace-otlp-grpc/package.json b/experimental/packages/exporter-trace-otlp-grpc/package.json
index 3373678fe64..fc4094f3d55 100644
--- a/experimental/packages/exporter-trace-otlp-grpc/package.json
+++ b/experimental/packages/exporter-trace-otlp-grpc/package.json
@@ -55,7 +55,7 @@
     "@types/sinon": "17.0.3",
     "cross-var": "1.1.0",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
     "ts-loader": "9.5.2",
diff --git a/experimental/packages/exporter-trace-otlp-http/package.json b/experimental/packages/exporter-trace-otlp-http/package.json
index 3aeef888e35..581dc096d47 100644
--- a/experimental/packages/exporter-trace-otlp-http/package.json
+++ b/experimental/packages/exporter-trace-otlp-http/package.json
@@ -79,7 +79,7 @@
     "karma-spec-reporter": "0.0.36",
     "karma-webpack": "5.0.1",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
     "ts-loader": "9.5.2",
diff --git a/experimental/packages/exporter-trace-otlp-proto/package.json b/experimental/packages/exporter-trace-otlp-proto/package.json
index 4889dc49e27..f40f7ec3c8e 100644
--- a/experimental/packages/exporter-trace-otlp-proto/package.json
+++ b/experimental/packages/exporter-trace-otlp-proto/package.json
@@ -77,7 +77,7 @@
     "karma-spec-reporter": "0.0.36",
     "karma-webpack": "5.0.1",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
     "ts-loader": "9.5.2",
diff --git a/experimental/packages/opentelemetry-browser-detector/package.json b/experimental/packages/opentelemetry-browser-detector/package.json
index aeaf6b8b1a0..845bc43ae19 100644
--- a/experimental/packages/opentelemetry-browser-detector/package.json
+++ b/experimental/packages/opentelemetry-browser-detector/package.json
@@ -68,7 +68,7 @@
     "karma-spec-reporter": "0.0.36",
     "karma-webpack": "5.0.1",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
     "ts-loader": "9.5.2",
diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json
index 89c0131a543..c94c7dcc7e3 100644
--- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json
+++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json
@@ -54,7 +54,7 @@
     "@types/sinon": "17.0.3",
     "cross-var": "1.1.0",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
     "ts-loader": "9.5.2",
diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json
index 87427c5074a..cba3eff7483 100644
--- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json
+++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json
@@ -79,7 +79,7 @@
     "karma-spec-reporter": "0.0.36",
     "karma-webpack": "5.0.1",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
     "ts-loader": "9.5.2",
diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json
index 3920be12b17..6bec3537423 100644
--- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json
+++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json
@@ -61,7 +61,7 @@
     "@types/sinon": "17.0.3",
     "cross-var": "1.1.0",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
     "ts-loader": "9.5.2",
diff --git a/experimental/packages/opentelemetry-exporter-prometheus/package.json b/experimental/packages/opentelemetry-exporter-prometheus/package.json
index 7e553d3dcd1..06e70fc42d6 100644
--- a/experimental/packages/opentelemetry-exporter-prometheus/package.json
+++ b/experimental/packages/opentelemetry-exporter-prometheus/package.json
@@ -50,7 +50,7 @@
     "@types/sinon": "17.0.3",
     "cross-var": "1.1.0",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
     "typescript": "5.0.4"
diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/package.json b/experimental/packages/opentelemetry-instrumentation-fetch/package.json
index ec5fa554fdf..f11037dc99b 100644
--- a/experimental/packages/opentelemetry-instrumentation-fetch/package.json
+++ b/experimental/packages/opentelemetry-instrumentation-fetch/package.json
@@ -74,7 +74,7 @@
     "karma-spec-reporter": "0.0.36",
     "karma-webpack": "5.0.1",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "msw": "^2.7.0",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/package.json b/experimental/packages/opentelemetry-instrumentation-grpc/package.json
index 089b1d9af14..b2864f8902f 100644
--- a/experimental/packages/opentelemetry-instrumentation-grpc/package.json
+++ b/experimental/packages/opentelemetry-instrumentation-grpc/package.json
@@ -62,7 +62,7 @@
     "@types/sinon": "17.0.3",
     "cross-var": "1.1.0",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
     "typescript": "5.0.4"
diff --git a/experimental/packages/opentelemetry-instrumentation-http/package.json b/experimental/packages/opentelemetry-instrumentation-http/package.json
index 8ab97f19d3d..668961cb25c 100644
--- a/experimental/packages/opentelemetry-instrumentation-http/package.json
+++ b/experimental/packages/opentelemetry-instrumentation-http/package.json
@@ -61,7 +61,7 @@
     "axios": "1.7.9",
     "cross-var": "1.1.0",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nock": "13.5.6",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
diff --git a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json
index ef896a5c557..497e9e6279a 100644
--- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json
+++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json
@@ -74,7 +74,7 @@
     "karma-spec-reporter": "0.0.36",
     "karma-webpack": "5.0.1",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
     "ts-loader": "9.5.2",
diff --git a/experimental/packages/opentelemetry-instrumentation/package.json b/experimental/packages/opentelemetry-instrumentation/package.json
index 42af4865966..65ecc225650 100644
--- a/experimental/packages/opentelemetry-instrumentation/package.json
+++ b/experimental/packages/opentelemetry-instrumentation/package.json
@@ -100,7 +100,7 @@
     "karma-spec-reporter": "0.0.36",
     "karma-webpack": "5.0.1",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
     "ts-loader": "9.5.2",
diff --git a/experimental/packages/opentelemetry-sdk-node/package.json b/experimental/packages/opentelemetry-sdk-node/package.json
index 3e1fb29b8d5..b5114e69ba1 100644
--- a/experimental/packages/opentelemetry-sdk-node/package.json
+++ b/experimental/packages/opentelemetry-sdk-node/package.json
@@ -79,7 +79,7 @@
     "@types/sinon": "17.0.3",
     "cross-var": "1.1.0",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
     "ts-loader": "9.5.2",
diff --git a/experimental/packages/otlp-exporter-base/package.json b/experimental/packages/otlp-exporter-base/package.json
index e78231962f5..927a218cbc2 100644
--- a/experimental/packages/otlp-exporter-base/package.json
+++ b/experimental/packages/otlp-exporter-base/package.json
@@ -93,7 +93,7 @@
     "karma-spec-reporter": "0.0.36",
     "karma-webpack": "5.0.1",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
     "ts-loader": "9.5.2",
diff --git a/experimental/packages/otlp-grpc-exporter-base/package.json b/experimental/packages/otlp-grpc-exporter-base/package.json
index 36005c17372..858c2ba396b 100644
--- a/experimental/packages/otlp-grpc-exporter-base/package.json
+++ b/experimental/packages/otlp-grpc-exporter-base/package.json
@@ -54,7 +54,7 @@
     "@types/sinon": "17.0.3",
     "cross-var": "1.1.0",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
     "ts-loader": "9.5.2",
diff --git a/experimental/packages/otlp-transformer/package.json b/experimental/packages/otlp-transformer/package.json
index 573c82ebd1e..f15588beeab 100644
--- a/experimental/packages/otlp-transformer/package.json
+++ b/experimental/packages/otlp-transformer/package.json
@@ -73,7 +73,7 @@
     "karma-spec-reporter": "0.0.36",
     "karma-webpack": "5.0.1",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "protobufjs-cli": "1.1.3",
     "ts-loader": "9.5.2",
diff --git a/experimental/packages/sampler-jaeger-remote/package.json b/experimental/packages/sampler-jaeger-remote/package.json
index cf7699802bd..cda55a532be 100644
--- a/experimental/packages/sampler-jaeger-remote/package.json
+++ b/experimental/packages/sampler-jaeger-remote/package.json
@@ -56,7 +56,7 @@
     "eslint-plugin-node": "^11.1.0",
     "eslint-plugin-prettier": "^5.1.3",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
     "ts-loader": "9.5.2",
diff --git a/experimental/packages/sdk-events/package.json b/experimental/packages/sdk-events/package.json
index 2767b326b83..2768a604d88 100644
--- a/experimental/packages/sdk-events/package.json
+++ b/experimental/packages/sdk-events/package.json
@@ -82,7 +82,7 @@
     "karma-spec-reporter": "0.0.36",
     "karma-webpack": "5.0.1",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
     "ts-loader": "9.5.2",
diff --git a/experimental/packages/sdk-logs/package.json b/experimental/packages/sdk-logs/package.json
index dc00cc41526..98fcc16e07e 100644
--- a/experimental/packages/sdk-logs/package.json
+++ b/experimental/packages/sdk-logs/package.json
@@ -87,7 +87,7 @@
     "karma-spec-reporter": "0.0.36",
     "karma-webpack": "5.0.1",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
     "ts-loader": "9.5.2",
diff --git a/experimental/packages/shim-opencensus/package.json b/experimental/packages/shim-opencensus/package.json
index 086f092c9aa..26d1d5060b8 100644
--- a/experimental/packages/shim-opencensus/package.json
+++ b/experimental/packages/shim-opencensus/package.json
@@ -57,7 +57,7 @@
     "@types/sinon": "17.0.3",
     "cross-var": "1.1.0",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
     "typescript": "5.0.4"
diff --git a/experimental/packages/web-common/package.json b/experimental/packages/web-common/package.json
index 4b2226066dd..897c590deaf 100644
--- a/experimental/packages/web-common/package.json
+++ b/experimental/packages/web-common/package.json
@@ -89,7 +89,7 @@
     "karma-spec-reporter": "0.0.36",
     "karma-webpack": "5.0.1",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
     "ts-loader": "9.5.2",
diff --git a/integration-tests/api/package.json b/integration-tests/api/package.json
index 917a0dd2f7c..9d697e60632 100644
--- a/integration-tests/api/package.json
+++ b/integration-tests/api/package.json
@@ -33,7 +33,7 @@
     "@types/node": "18.6.5",
     "cross-var": "1.1.0",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0"
   }
 }
diff --git a/package-lock.json b/package-lock.json
index a131fa3b6c2..3c4382977a6 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -77,7 +77,7 @@
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
         "memfs": "3.5.3",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -95,61 +95,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "api/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "api/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "api/node_modules/webpack": {
       "version": "5.96.1",
       "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -645,7 +590,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "ts-loader": "9.5.2",
         "typescript": "5.0.4",
@@ -661,61 +606,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "experimental/packages/api-events/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "experimental/packages/api-events/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "experimental/packages/api-events/node_modules/webpack": {
       "version": "5.96.1",
       "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -782,7 +672,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "ts-loader": "9.5.2",
         "typescript": "5.0.4",
@@ -798,61 +688,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "experimental/packages/api-logs/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "experimental/packages/api-logs/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "experimental/packages/api-logs/node_modules/webpack": {
       "version": "5.96.1",
       "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -921,7 +756,7 @@
         "@types/sinon": "17.0.3",
         "cross-var": "1.1.0",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -940,63 +775,105 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "experimental/packages/exporter-logs-otlp-grpc/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
+    "experimental/packages/exporter-logs-otlp-http": {
+      "name": "@opentelemetry/exporter-logs-otlp-http",
+      "version": "0.57.0",
+      "license": "Apache-2.0",
       "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
+        "@opentelemetry/api-logs": "0.57.0",
+        "@opentelemetry/core": "1.30.0",
+        "@opentelemetry/otlp-exporter-base": "0.57.0",
+        "@opentelemetry/otlp-transformer": "0.57.0",
+        "@opentelemetry/sdk-logs": "0.57.0"
+      },
+      "devDependencies": {
+        "@babel/core": "7.26.7",
+        "@babel/preset-env": "7.26.7",
+        "@opentelemetry/api": "1.9.0",
+        "@opentelemetry/resources": "1.30.0",
+        "@types/mocha": "10.0.10",
+        "@types/node": "18.6.5",
+        "@types/sinon": "17.0.3",
+        "@types/webpack-env": "1.16.3",
+        "babel-loader": "9.2.1",
+        "babel-plugin-istanbul": "7.0.0",
+        "cross-var": "1.1.0",
+        "karma": "6.4.4",
+        "karma-chrome-launcher": "3.1.0",
+        "karma-coverage": "2.2.1",
+        "karma-mocha": "2.0.1",
+        "karma-spec-reporter": "0.0.36",
+        "karma-webpack": "5.0.1",
+        "lerna": "6.6.2",
+        "mocha": "11.1.0",
+        "nyc": "17.1.0",
+        "sinon": "15.1.2",
+        "ts-loader": "9.5.2",
+        "typescript": "5.0.4",
+        "webpack": "5.96.1",
+        "webpack-cli": "6.0.1"
       },
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
       }
     },
-    "experimental/packages/exporter-logs-otlp-grpc/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
+    "experimental/packages/exporter-logs-otlp-http/node_modules/@types/node": {
+      "version": "18.6.5",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz",
+      "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
+      "dev": true
+    },
+    "experimental/packages/exporter-logs-otlp-http/node_modules/webpack": {
+      "version": "5.96.1",
+      "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
+      "integrity": "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==",
       "dev": true,
       "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
+        "@types/eslint-scope": "^3.7.7",
+        "@types/estree": "^1.0.6",
+        "@webassemblyjs/ast": "^1.12.1",
+        "@webassemblyjs/wasm-edit": "^1.12.1",
+        "@webassemblyjs/wasm-parser": "^1.12.1",
+        "acorn": "^8.14.0",
+        "browserslist": "^4.24.0",
+        "chrome-trace-event": "^1.0.2",
+        "enhanced-resolve": "^5.17.1",
+        "es-module-lexer": "^1.2.1",
+        "eslint-scope": "5.1.1",
+        "events": "^3.2.0",
+        "glob-to-regexp": "^0.4.1",
+        "graceful-fs": "^4.2.11",
+        "json-parse-even-better-errors": "^2.3.1",
+        "loader-runner": "^4.2.0",
+        "mime-types": "^2.1.27",
+        "neo-async": "^2.6.2",
+        "schema-utils": "^3.2.0",
+        "tapable": "^2.1.1",
+        "terser-webpack-plugin": "^5.3.10",
+        "watchpack": "^2.4.1",
+        "webpack-sources": "^3.2.3"
       },
       "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
+        "webpack": "bin/webpack.js"
       },
       "engines": {
-        "node": ">= 14.0.0"
+        "node": ">=10.13.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      },
+      "peerDependenciesMeta": {
+        "webpack-cli": {
+          "optional": true
+        }
       }
     },
-    "experimental/packages/exporter-logs-otlp-http": {
-      "name": "@opentelemetry/exporter-logs-otlp-http",
+    "experimental/packages/exporter-logs-otlp-proto": {
+      "name": "@opentelemetry/exporter-logs-otlp-proto",
       "version": "0.57.0",
       "license": "Apache-2.0",
       "dependencies": {
@@ -1004,18 +881,17 @@
         "@opentelemetry/core": "1.30.0",
         "@opentelemetry/otlp-exporter-base": "0.57.0",
         "@opentelemetry/otlp-transformer": "0.57.0",
-        "@opentelemetry/sdk-logs": "0.57.0"
+        "@opentelemetry/resources": "1.30.0",
+        "@opentelemetry/sdk-logs": "0.57.0",
+        "@opentelemetry/sdk-trace-base": "1.30.0"
       },
       "devDependencies": {
         "@babel/core": "7.26.7",
         "@babel/preset-env": "7.26.7",
         "@opentelemetry/api": "1.9.0",
-        "@opentelemetry/resources": "1.30.0",
         "@types/mocha": "10.0.10",
         "@types/node": "18.6.5",
         "@types/sinon": "17.0.3",
-        "@types/webpack-env": "1.16.3",
-        "babel-loader": "9.2.1",
         "babel-plugin-istanbul": "7.0.0",
         "cross-var": "1.1.0",
         "karma": "6.4.4",
@@ -1025,158 +901,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
-        "nyc": "17.1.0",
-        "sinon": "15.1.2",
-        "ts-loader": "9.5.2",
-        "typescript": "5.0.4",
-        "webpack": "5.96.1",
-        "webpack-cli": "6.0.1"
-      },
-      "engines": {
-        "node": ">=18"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
-      }
-    },
-    "experimental/packages/exporter-logs-otlp-http/node_modules/@types/node": {
-      "version": "18.6.5",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz",
-      "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
-      "dev": true
-    },
-    "experimental/packages/exporter-logs-otlp-http/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "experimental/packages/exporter-logs-otlp-http/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
-    "experimental/packages/exporter-logs-otlp-http/node_modules/webpack": {
-      "version": "5.96.1",
-      "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
-      "integrity": "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==",
-      "dev": true,
-      "dependencies": {
-        "@types/eslint-scope": "^3.7.7",
-        "@types/estree": "^1.0.6",
-        "@webassemblyjs/ast": "^1.12.1",
-        "@webassemblyjs/wasm-edit": "^1.12.1",
-        "@webassemblyjs/wasm-parser": "^1.12.1",
-        "acorn": "^8.14.0",
-        "browserslist": "^4.24.0",
-        "chrome-trace-event": "^1.0.2",
-        "enhanced-resolve": "^5.17.1",
-        "es-module-lexer": "^1.2.1",
-        "eslint-scope": "5.1.1",
-        "events": "^3.2.0",
-        "glob-to-regexp": "^0.4.1",
-        "graceful-fs": "^4.2.11",
-        "json-parse-even-better-errors": "^2.3.1",
-        "loader-runner": "^4.2.0",
-        "mime-types": "^2.1.27",
-        "neo-async": "^2.6.2",
-        "schema-utils": "^3.2.0",
-        "tapable": "^2.1.1",
-        "terser-webpack-plugin": "^5.3.10",
-        "watchpack": "^2.4.1",
-        "webpack-sources": "^3.2.3"
-      },
-      "bin": {
-        "webpack": "bin/webpack.js"
-      },
-      "engines": {
-        "node": ">=10.13.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/webpack"
-      },
-      "peerDependenciesMeta": {
-        "webpack-cli": {
-          "optional": true
-        }
-      }
-    },
-    "experimental/packages/exporter-logs-otlp-proto": {
-      "name": "@opentelemetry/exporter-logs-otlp-proto",
-      "version": "0.57.0",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/api-logs": "0.57.0",
-        "@opentelemetry/core": "1.30.0",
-        "@opentelemetry/otlp-exporter-base": "0.57.0",
-        "@opentelemetry/otlp-transformer": "0.57.0",
-        "@opentelemetry/resources": "1.30.0",
-        "@opentelemetry/sdk-logs": "0.57.0",
-        "@opentelemetry/sdk-trace-base": "1.30.0"
-      },
-      "devDependencies": {
-        "@babel/core": "7.26.7",
-        "@babel/preset-env": "7.26.7",
-        "@opentelemetry/api": "1.9.0",
-        "@types/mocha": "10.0.10",
-        "@types/node": "18.6.5",
-        "@types/sinon": "17.0.3",
-        "babel-plugin-istanbul": "7.0.0",
-        "cross-var": "1.1.0",
-        "karma": "6.4.4",
-        "karma-chrome-launcher": "3.1.0",
-        "karma-coverage": "2.2.1",
-        "karma-mocha": "2.0.1",
-        "karma-spec-reporter": "0.0.36",
-        "karma-webpack": "5.0.1",
-        "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -1197,61 +922,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "experimental/packages/exporter-logs-otlp-proto/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "experimental/packages/exporter-logs-otlp-proto/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "experimental/packages/exporter-logs-otlp-proto/node_modules/webpack": {
       "version": "5.96.1",
       "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -1319,7 +989,7 @@
         "@types/sinon": "17.0.3",
         "cross-var": "1.1.0",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -1338,61 +1008,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "experimental/packages/exporter-trace-otlp-grpc/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "experimental/packages/exporter-trace-otlp-grpc/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "experimental/packages/exporter-trace-otlp-http": {
       "name": "@opentelemetry/exporter-trace-otlp-http",
       "version": "0.57.0",
@@ -1422,7 +1037,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -1443,61 +1058,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "experimental/packages/exporter-trace-otlp-http/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "experimental/packages/exporter-trace-otlp-http/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "experimental/packages/exporter-trace-otlp-http/node_modules/webpack": {
       "version": "5.96.1",
       "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -1571,7 +1131,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -1592,61 +1152,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "experimental/packages/exporter-trace-otlp-proto/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "experimental/packages/exporter-trace-otlp-proto/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "experimental/packages/exporter-trace-otlp-proto/node_modules/webpack": {
       "version": "5.96.1",
       "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -1716,7 +1221,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -1737,61 +1242,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "experimental/packages/opentelemetry-browser-detector/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "experimental/packages/opentelemetry-browser-detector/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "experimental/packages/opentelemetry-browser-detector/node_modules/webpack": {
       "version": "5.96.1",
       "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -1860,7 +1310,7 @@
         "@types/sinon": "17.0.3",
         "cross-var": "1.1.0",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -1879,61 +1329,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "experimental/packages/opentelemetry-exporter-metrics-otlp-http": {
       "name": "@opentelemetry/exporter-metrics-otlp-http",
       "version": "0.57.0",
@@ -1963,7 +1358,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -1984,61 +1379,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "experimental/packages/opentelemetry-exporter-metrics-otlp-http/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "experimental/packages/opentelemetry-exporter-metrics-otlp-http/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "experimental/packages/opentelemetry-exporter-metrics-otlp-http/node_modules/webpack": {
       "version": "5.96.1",
       "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -2104,7 +1444,7 @@
         "@types/sinon": "17.0.3",
         "cross-var": "1.1.0",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -2123,61 +1463,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "experimental/packages/opentelemetry-exporter-metrics-otlp-proto/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "experimental/packages/opentelemetry-exporter-metrics-otlp-proto/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "experimental/packages/opentelemetry-exporter-prometheus": {
       "name": "@opentelemetry/exporter-prometheus",
       "version": "0.57.0",
@@ -2195,7 +1480,7 @@
         "@types/sinon": "17.0.3",
         "cross-var": "1.1.0",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "typescript": "5.0.4"
@@ -2213,61 +1498,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "experimental/packages/opentelemetry-exporter-prometheus/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "experimental/packages/opentelemetry-exporter-prometheus/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "experimental/packages/opentelemetry-instrumentation": {
       "name": "@opentelemetry/instrumentation",
       "version": "0.57.0",
@@ -2300,7 +1530,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -2346,7 +1576,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "msw": "^2.7.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
@@ -2362,67 +1592,12 @@
         "@opentelemetry/api": "^1.3.0"
       }
     },
-    "experimental/packages/opentelemetry-instrumentation-fetch/node_modules/@types/node": {
-      "version": "18.6.5",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz",
-      "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
-      "dev": true
-    },
-    "experimental/packages/opentelemetry-instrumentation-fetch/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "experimental/packages/opentelemetry-instrumentation-fetch/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
+    "experimental/packages/opentelemetry-instrumentation-fetch/node_modules/@types/node": {
+      "version": "18.6.5",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz",
+      "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
+      "dev": true
+    },
     "experimental/packages/opentelemetry-instrumentation-fetch/node_modules/webpack": {
       "version": "5.96.1",
       "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -2494,7 +1669,7 @@
         "@types/sinon": "17.0.3",
         "cross-var": "1.1.0",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "typescript": "5.0.4"
@@ -2512,61 +1687,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "experimental/packages/opentelemetry-instrumentation-grpc/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "experimental/packages/opentelemetry-instrumentation-grpc/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "experimental/packages/opentelemetry-instrumentation-http": {
       "name": "@opentelemetry/instrumentation-http",
       "version": "0.57.0",
@@ -2591,7 +1711,7 @@
         "axios": "1.7.9",
         "cross-var": "1.1.0",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nock": "13.5.6",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
@@ -2611,61 +1731,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "experimental/packages/opentelemetry-instrumentation-http/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "experimental/packages/opentelemetry-instrumentation-http/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "experimental/packages/opentelemetry-instrumentation-xml-http-request": {
       "name": "@opentelemetry/instrumentation-xml-http-request",
       "version": "0.57.0",
@@ -2697,7 +1762,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -2718,61 +1783,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "experimental/packages/opentelemetry-instrumentation-xml-http-request/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "experimental/packages/opentelemetry-instrumentation-xml-http-request/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "experimental/packages/opentelemetry-instrumentation-xml-http-request/node_modules/webpack": {
       "version": "5.96.1",
       "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -2825,61 +1835,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "experimental/packages/opentelemetry-instrumentation/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "experimental/packages/opentelemetry-instrumentation/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "experimental/packages/opentelemetry-instrumentation/node_modules/webpack": {
       "version": "5.96.1",
       "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -2963,7 +1918,7 @@
         "@types/sinon": "17.0.3",
         "cross-var": "1.1.0",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -2982,61 +1937,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "experimental/packages/opentelemetry-sdk-node/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "experimental/packages/opentelemetry-sdk-node/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "experimental/packages/otlp-exporter-base": {
       "name": "@opentelemetry/otlp-exporter-base",
       "version": "0.57.0",
@@ -3061,7 +1961,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -3082,61 +1982,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "experimental/packages/otlp-exporter-base/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "experimental/packages/otlp-exporter-base/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "experimental/packages/otlp-exporter-base/node_modules/webpack": {
       "version": "5.96.1",
       "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -3202,7 +2047,7 @@
         "@types/sinon": "17.0.3",
         "cross-var": "1.1.0",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -3221,61 +2066,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "experimental/packages/otlp-grpc-exporter-base/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "experimental/packages/otlp-grpc-exporter-base/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "experimental/packages/otlp-transformer": {
       "name": "@opentelemetry/otlp-transformer",
       "version": "0.57.0",
@@ -3302,7 +2092,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "protobufjs-cli": "1.1.3",
         "ts-loader": "9.5.2",
@@ -3316,61 +2106,6 @@
         "@opentelemetry/api": "^1.3.0"
       }
     },
-    "experimental/packages/otlp-transformer/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "experimental/packages/otlp-transformer/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "experimental/packages/otlp-transformer/node_modules/webpack": {
       "version": "5.96.1",
       "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -3433,7 +2168,7 @@
         "eslint-plugin-node": "^11.1.0",
         "eslint-plugin-prettier": "^5.1.3",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -3482,61 +2217,6 @@
         }
       }
     },
-    "experimental/packages/sampler-jaeger-remote/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "experimental/packages/sampler-jaeger-remote/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "experimental/packages/sdk-events": {
       "name": "@opentelemetry/sdk-events",
       "version": "0.57.0",
@@ -3563,7 +2243,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -3593,61 +2273,6 @@
         "@types/sinonjs__fake-timers": "*"
       }
     },
-    "experimental/packages/sdk-events/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "experimental/packages/sdk-events/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "experimental/packages/sdk-events/node_modules/webpack": {
       "version": "5.96.1",
       "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -3720,7 +2345,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -3791,61 +2416,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "experimental/packages/sdk-logs/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "experimental/packages/sdk-logs/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "experimental/packages/sdk-logs/node_modules/webpack": {
       "version": "5.96.1",
       "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -3912,7 +2482,7 @@
         "@types/sinon": "17.0.3",
         "cross-var": "1.1.0",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "typescript": "5.0.4"
@@ -3931,61 +2501,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "experimental/packages/shim-opencensus/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "experimental/packages/shim-opencensus/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "experimental/packages/web-common": {
       "name": "@opentelemetry/web-common",
       "version": "0.57.0",
@@ -4014,7 +2529,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -4044,61 +2559,6 @@
         "@types/sinonjs__fake-timers": "*"
       }
     },
-    "experimental/packages/web-common/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "experimental/packages/web-common/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "experimental/packages/web-common/node_modules/webpack": {
       "version": "5.96.1",
       "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -4156,7 +2616,7 @@
         "@types/node": "18.6.5",
         "cross-var": "1.1.0",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0"
       },
       "engines": {
@@ -4169,61 +2629,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "integration-tests/api/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "integration-tests/api/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "integration-tests/propagation-validation-server": {
       "version": "1.31.0",
       "license": "Apache-2.0",
@@ -20991,11 +19396,10 @@
       }
     },
     "node_modules/mocha": {
-      "version": "11.0.1",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.0.1.tgz",
-      "integrity": "sha512-+3GkODfsDG71KSCQhc4IekSW+ItCK/kiez1Z28ksWvYhKXV/syxMlerR/sC7whDp7IyreZ4YxceMLdTs5hQE8A==",
+      "version": "11.1.0",
+      "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.1.0.tgz",
+      "integrity": "sha512-8uJR5RTC2NgpY3GrYcgpZrsEd9zKbPDpob1RezyR2upGHRQtHWofmzTMzTMSV6dru3tj5Ukt0+Vnq1qhFEEwAg==",
       "dev": true,
-      "peer": true,
       "dependencies": {
         "ansi-colors": "^4.1.3",
         "browser-stdout": "^1.3.1",
@@ -21014,8 +19418,8 @@
         "strip-json-comments": "^3.1.1",
         "supports-color": "^8.1.1",
         "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
+        "yargs": "^17.7.2",
+        "yargs-parser": "^21.1.1",
         "yargs-unparser": "^2.0.0"
       },
       "bin": {
@@ -21026,12 +19430,31 @@
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       }
     },
+    "node_modules/mocha/node_modules/cliui": {
+      "version": "8.0.1",
+      "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+      "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+      "dev": true,
+      "dependencies": {
+        "string-width": "^4.2.0",
+        "strip-ansi": "^6.0.1",
+        "wrap-ansi": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/mocha/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true
+    },
     "node_modules/mocha/node_modules/glob": {
       "version": "10.4.5",
       "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
       "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
       "dev": true,
-      "peer": true,
       "dependencies": {
         "foreground-child": "^3.1.0",
         "jackspeak": "^3.1.2",
@@ -21052,7 +19475,6 @@
       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
       "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
       "dev": true,
-      "peer": true,
       "dependencies": {
         "brace-expansion": "^2.0.1"
       },
@@ -21068,7 +19490,6 @@
       "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
       "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
       "dev": true,
-      "peer": true,
       "dependencies": {
         "@isaacs/cliui": "^8.0.2"
       },
@@ -21083,15 +19504,13 @@
       "version": "10.4.3",
       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
       "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
-      "dev": true,
-      "peer": true
+      "dev": true
     },
     "node_modules/mocha/node_modules/path-scurry": {
       "version": "1.11.1",
       "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
       "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
       "dev": true,
-      "peer": true,
       "dependencies": {
         "lru-cache": "^10.2.0",
         "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
@@ -21103,6 +19522,64 @@
         "url": "https://github.com/sponsors/isaacs"
       }
     },
+    "node_modules/mocha/node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/mocha/node_modules/wrap-ansi": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+      "dev": true,
+      "dependencies": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+      }
+    },
+    "node_modules/mocha/node_modules/yargs": {
+      "version": "17.7.2",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+      "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+      "dev": true,
+      "dependencies": {
+        "cliui": "^8.0.1",
+        "escalade": "^3.1.1",
+        "get-caller-file": "^2.0.5",
+        "require-directory": "^2.1.1",
+        "string-width": "^4.2.3",
+        "y18n": "^5.0.5",
+        "yargs-parser": "^21.1.1"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/mocha/node_modules/yargs-parser": {
+      "version": "21.1.1",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+      "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      }
+    },
     "node_modules/modify-values": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz",
@@ -28998,7 +27475,7 @@
         "@types/node": "18.6.5",
         "cross-var": "1.1.0",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "typescript": "5.0.4"
       },
@@ -29009,67 +27486,12 @@
         "@opentelemetry/api": ">=1.0.0 <1.10.0"
       }
     },
-    "packages/opentelemetry-context-async-hooks/node_modules/@types/node": {
-      "version": "18.6.5",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz",
-      "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
-      "dev": true
-    },
-    "packages/opentelemetry-context-async-hooks/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "packages/opentelemetry-context-async-hooks/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
+    "packages/opentelemetry-context-async-hooks/node_modules/@types/node": {
+      "version": "18.6.5",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz",
+      "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
+      "dev": true
+    },
     "packages/opentelemetry-context-zone": {
       "name": "@opentelemetry/context-zone",
       "version": "1.30.0",
@@ -29110,7 +27532,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -29133,61 +27555,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "packages/opentelemetry-context-zone-peer-dep/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "packages/opentelemetry-context-zone-peer-dep/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "packages/opentelemetry-context-zone-peer-dep/node_modules/webpack": {
       "version": "5.96.1",
       "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -29256,7 +27623,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -29276,61 +27643,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "packages/opentelemetry-core/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "packages/opentelemetry-core/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "packages/opentelemetry-core/node_modules/webpack": {
       "version": "5.96.1",
       "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -29395,7 +27707,7 @@
         "@types/sinon": "17.0.3",
         "cross-var": "1.1.0",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nock": "13.5.6",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
@@ -29414,61 +27726,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "packages/opentelemetry-exporter-jaeger/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "packages/opentelemetry-exporter-jaeger/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "packages/opentelemetry-exporter-zipkin": {
       "name": "@opentelemetry/exporter-zipkin",
       "version": "1.30.0",
@@ -29497,7 +27754,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nock": "13.5.6",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
@@ -29519,61 +27776,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "packages/opentelemetry-exporter-zipkin/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "packages/opentelemetry-exporter-zipkin/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "packages/opentelemetry-exporter-zipkin/node_modules/webpack": {
       "version": "5.96.1",
       "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -29633,7 +27835,7 @@
         "@types/node": "18.6.5",
         "cross-var": "1.1.0",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "ts-loader": "9.5.2",
         "typescript": "5.0.4"
@@ -29651,61 +27853,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "packages/opentelemetry-propagator-b3/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "packages/opentelemetry-propagator-b3/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "packages/opentelemetry-propagator-jaeger": {
       "name": "@opentelemetry/propagator-jaeger",
       "version": "1.30.0",
@@ -29728,7 +27875,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -29748,61 +27895,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "packages/opentelemetry-propagator-jaeger/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "packages/opentelemetry-propagator-jaeger/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "packages/opentelemetry-propagator-jaeger/node_modules/webpack": {
       "version": "5.96.1",
       "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -29873,7 +27965,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nock": "13.5.6",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
@@ -29944,61 +28036,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "packages/opentelemetry-resources/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "packages/opentelemetry-resources/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "packages/opentelemetry-resources/node_modules/webpack": {
       "version": "5.96.1",
       "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -30070,7 +28107,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -30090,61 +28127,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "packages/opentelemetry-sdk-trace-base/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "packages/opentelemetry-sdk-trace-base/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "packages/opentelemetry-sdk-trace-base/node_modules/webpack": {
       "version": "5.96.1",
       "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -30209,7 +28191,7 @@
         "@types/sinon": "17.0.3",
         "cross-var": "1.1.0",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "typescript": "5.0.4"
@@ -30227,61 +28209,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "packages/opentelemetry-sdk-trace-node/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "packages/opentelemetry-sdk-trace-node/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "packages/opentelemetry-sdk-trace-web": {
       "name": "@opentelemetry/sdk-trace-web",
       "version": "1.30.0",
@@ -30314,7 +28241,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -30335,61 +28262,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "packages/opentelemetry-sdk-trace-web/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "packages/opentelemetry-sdk-trace-web/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "packages/opentelemetry-sdk-trace-web/node_modules/webpack": {
       "version": "5.96.1",
       "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -30454,7 +28326,7 @@
         "@types/node": "18.6.5",
         "cross-var": "1.1.0",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "typescript": "5.0.4"
       },
@@ -30471,61 +28343,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "packages/opentelemetry-shim-opentracing/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "packages/opentelemetry-shim-opentracing/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "packages/sdk-metrics": {
       "name": "@opentelemetry/sdk-metrics",
       "version": "1.30.0",
@@ -30550,7 +28367,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -30571,61 +28388,6 @@
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
     },
-    "packages/sdk-metrics/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "packages/sdk-metrics/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
     "packages/sdk-metrics/node_modules/webpack": {
       "version": "5.96.1",
       "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -30705,7 +28467,7 @@
         "@types/sinon": "17.0.3",
         "cross-var": "1.1.0",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nock": "13.5.6",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
@@ -30722,61 +28484,6 @@
       "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz",
       "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
       "dev": true
-    },
-    "semantic-conventions/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "semantic-conventions/node_modules/mocha": {
-      "version": "10.8.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^8.1.0",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
     }
   },
   "dependencies": {
@@ -33749,7 +31456,7 @@
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
         "memfs": "3.5.3",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -33764,254 +31471,6 @@
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
         },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
-        },
-        "webpack": {
-          "version": "5.96.1",
-          "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
-          "integrity": "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==",
-          "dev": true,
-          "requires": {
-            "@types/eslint-scope": "^3.7.7",
-            "@types/estree": "^1.0.6",
-            "@webassemblyjs/ast": "^1.12.1",
-            "@webassemblyjs/wasm-edit": "^1.12.1",
-            "@webassemblyjs/wasm-parser": "^1.12.1",
-            "acorn": "^8.14.0",
-            "browserslist": "^4.24.0",
-            "chrome-trace-event": "^1.0.2",
-            "enhanced-resolve": "^5.17.1",
-            "es-module-lexer": "^1.2.1",
-            "eslint-scope": "5.1.1",
-            "events": "^3.2.0",
-            "glob-to-regexp": "^0.4.1",
-            "graceful-fs": "^4.2.11",
-            "json-parse-even-better-errors": "^2.3.1",
-            "loader-runner": "^4.2.0",
-            "mime-types": "^2.1.27",
-            "neo-async": "^2.6.2",
-            "schema-utils": "^3.2.0",
-            "tapable": "^2.1.1",
-            "terser-webpack-plugin": "^5.3.10",
-            "watchpack": "^2.4.1",
-            "webpack-sources": "^3.2.3"
-          }
-        }
-      }
-    },
-    "@opentelemetry/api-events": {
-      "version": "file:experimental/packages/api-events",
-      "requires": {
-        "@opentelemetry/api": "^1.3.0",
-        "@opentelemetry/api-logs": "0.57.0",
-        "@types/mocha": "10.0.10",
-        "@types/node": "18.6.5",
-        "@types/webpack-env": "1.16.3",
-        "babel-plugin-istanbul": "7.0.0",
-        "cross-var": "1.1.0",
-        "karma": "6.4.4",
-        "karma-chrome-launcher": "3.1.0",
-        "karma-coverage": "2.2.1",
-        "karma-mocha": "2.0.1",
-        "karma-spec-reporter": "0.0.36",
-        "karma-webpack": "5.0.1",
-        "lerna": "6.6.2",
-        "mocha": "10.8.2",
-        "nyc": "17.1.0",
-        "ts-loader": "9.5.2",
-        "typescript": "5.0.4",
-        "webpack": "5.96.1"
-      },
-      "dependencies": {
-        "@types/node": {
-          "version": "18.6.5",
-          "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz",
-          "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
-          "dev": true
-        },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
-        },
-        "webpack": {
-          "version": "5.96.1",
-          "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
-          "integrity": "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==",
-          "dev": true,
-          "requires": {
-            "@types/eslint-scope": "^3.7.7",
-            "@types/estree": "^1.0.6",
-            "@webassemblyjs/ast": "^1.12.1",
-            "@webassemblyjs/wasm-edit": "^1.12.1",
-            "@webassemblyjs/wasm-parser": "^1.12.1",
-            "acorn": "^8.14.0",
-            "browserslist": "^4.24.0",
-            "chrome-trace-event": "^1.0.2",
-            "enhanced-resolve": "^5.17.1",
-            "es-module-lexer": "^1.2.1",
-            "eslint-scope": "5.1.1",
-            "events": "^3.2.0",
-            "glob-to-regexp": "^0.4.1",
-            "graceful-fs": "^4.2.11",
-            "json-parse-even-better-errors": "^2.3.1",
-            "loader-runner": "^4.2.0",
-            "mime-types": "^2.1.27",
-            "neo-async": "^2.6.2",
-            "schema-utils": "^3.2.0",
-            "tapable": "^2.1.1",
-            "terser-webpack-plugin": "^5.3.10",
-            "watchpack": "^2.4.1",
-            "webpack-sources": "^3.2.3"
-          }
-        }
-      }
-    },
-    "@opentelemetry/api-logs": {
-      "version": "file:experimental/packages/api-logs",
-      "requires": {
-        "@opentelemetry/api": "^1.3.0",
-        "@types/mocha": "10.0.10",
-        "@types/node": "18.6.5",
-        "@types/webpack-env": "1.16.3",
-        "babel-plugin-istanbul": "7.0.0",
-        "cross-var": "1.1.0",
-        "karma": "6.4.4",
-        "karma-chrome-launcher": "3.1.0",
-        "karma-coverage": "2.2.1",
-        "karma-mocha": "2.0.1",
-        "karma-spec-reporter": "0.0.36",
-        "karma-webpack": "5.0.1",
-        "lerna": "6.6.2",
-        "mocha": "10.8.2",
-        "nyc": "17.1.0",
-        "ts-loader": "9.5.2",
-        "typescript": "5.0.4",
-        "webpack": "5.96.1"
-      },
-      "dependencies": {
-        "@types/node": {
-          "version": "18.6.5",
-          "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz",
-          "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
-          "dev": true
-        },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
-        },
         "webpack": {
           "version": "5.96.1",
           "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -34045,17 +31504,28 @@
         }
       }
     },
-    "@opentelemetry/context-async-hooks": {
-      "version": "file:packages/opentelemetry-context-async-hooks",
+    "@opentelemetry/api-events": {
+      "version": "file:experimental/packages/api-events",
       "requires": {
-        "@opentelemetry/api": ">=1.0.0 <1.10.0",
+        "@opentelemetry/api": "^1.3.0",
+        "@opentelemetry/api-logs": "0.57.0",
         "@types/mocha": "10.0.10",
         "@types/node": "18.6.5",
+        "@types/webpack-env": "1.16.3",
+        "babel-plugin-istanbul": "7.0.0",
         "cross-var": "1.1.0",
+        "karma": "6.4.4",
+        "karma-chrome-launcher": "3.1.0",
+        "karma-coverage": "2.2.1",
+        "karma-mocha": "2.0.1",
+        "karma-spec-reporter": "0.0.36",
+        "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
-        "typescript": "5.0.4"
+        "ts-loader": "9.5.2",
+        "typescript": "5.0.4",
+        "webpack": "5.96.1"
       },
       "dependencies": {
         "@types/node": {
@@ -34064,49 +31534,122 @@
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
         },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
+        "webpack": {
+          "version": "5.96.1",
+          "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
+          "integrity": "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==",
           "dev": true,
           "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
+            "@types/eslint-scope": "^3.7.7",
+            "@types/estree": "^1.0.6",
+            "@webassemblyjs/ast": "^1.12.1",
+            "@webassemblyjs/wasm-edit": "^1.12.1",
+            "@webassemblyjs/wasm-parser": "^1.12.1",
+            "acorn": "^8.14.0",
+            "browserslist": "^4.24.0",
+            "chrome-trace-event": "^1.0.2",
+            "enhanced-resolve": "^5.17.1",
+            "es-module-lexer": "^1.2.1",
+            "eslint-scope": "5.1.1",
+            "events": "^3.2.0",
+            "glob-to-regexp": "^0.4.1",
+            "graceful-fs": "^4.2.11",
+            "json-parse-even-better-errors": "^2.3.1",
+            "loader-runner": "^4.2.0",
+            "mime-types": "^2.1.27",
+            "neo-async": "^2.6.2",
+            "schema-utils": "^3.2.0",
+            "tapable": "^2.1.1",
+            "terser-webpack-plugin": "^5.3.10",
+            "watchpack": "^2.4.1",
+            "webpack-sources": "^3.2.3"
           }
+        }
+      }
+    },
+    "@opentelemetry/api-logs": {
+      "version": "file:experimental/packages/api-logs",
+      "requires": {
+        "@opentelemetry/api": "^1.3.0",
+        "@types/mocha": "10.0.10",
+        "@types/node": "18.6.5",
+        "@types/webpack-env": "1.16.3",
+        "babel-plugin-istanbul": "7.0.0",
+        "cross-var": "1.1.0",
+        "karma": "6.4.4",
+        "karma-chrome-launcher": "3.1.0",
+        "karma-coverage": "2.2.1",
+        "karma-mocha": "2.0.1",
+        "karma-spec-reporter": "0.0.36",
+        "karma-webpack": "5.0.1",
+        "lerna": "6.6.2",
+        "mocha": "11.1.0",
+        "nyc": "17.1.0",
+        "ts-loader": "9.5.2",
+        "typescript": "5.0.4",
+        "webpack": "5.96.1"
+      },
+      "dependencies": {
+        "@types/node": {
+          "version": "18.6.5",
+          "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz",
+          "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
+          "dev": true
         },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
+        "webpack": {
+          "version": "5.96.1",
+          "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
+          "integrity": "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==",
           "dev": true,
           "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
+            "@types/eslint-scope": "^3.7.7",
+            "@types/estree": "^1.0.6",
+            "@webassemblyjs/ast": "^1.12.1",
+            "@webassemblyjs/wasm-edit": "^1.12.1",
+            "@webassemblyjs/wasm-parser": "^1.12.1",
+            "acorn": "^8.14.0",
+            "browserslist": "^4.24.0",
+            "chrome-trace-event": "^1.0.2",
+            "enhanced-resolve": "^5.17.1",
+            "es-module-lexer": "^1.2.1",
+            "eslint-scope": "5.1.1",
+            "events": "^3.2.0",
+            "glob-to-regexp": "^0.4.1",
+            "graceful-fs": "^4.2.11",
+            "json-parse-even-better-errors": "^2.3.1",
+            "loader-runner": "^4.2.0",
+            "mime-types": "^2.1.27",
+            "neo-async": "^2.6.2",
+            "schema-utils": "^3.2.0",
+            "tapable": "^2.1.1",
+            "terser-webpack-plugin": "^5.3.10",
+            "watchpack": "^2.4.1",
+            "webpack-sources": "^3.2.3"
           }
         }
       }
     },
+    "@opentelemetry/context-async-hooks": {
+      "version": "file:packages/opentelemetry-context-async-hooks",
+      "requires": {
+        "@opentelemetry/api": ">=1.0.0 <1.10.0",
+        "@types/mocha": "10.0.10",
+        "@types/node": "18.6.5",
+        "cross-var": "1.1.0",
+        "lerna": "6.6.2",
+        "mocha": "11.1.0",
+        "nyc": "17.1.0",
+        "typescript": "5.0.4"
+      },
+      "dependencies": {
+        "@types/node": {
+          "version": "18.6.5",
+          "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz",
+          "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
+          "dev": true
+        }
+      }
+    },
     "@opentelemetry/context-zone": {
       "version": "file:packages/opentelemetry-context-zone",
       "requires": {
@@ -34138,7 +31681,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -34154,47 +31697,6 @@
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
         },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
-        },
         "webpack": {
           "version": "5.96.1",
           "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -34246,7 +31748,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -34260,47 +31762,6 @@
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
         },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
-        },
         "webpack": {
           "version": "5.96.1",
           "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -34348,7 +31809,7 @@
         "cross-var": "1.1.0",
         "jaeger-client": "^3.15.0",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nock": "13.5.6",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
@@ -34360,47 +31821,6 @@
           "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz",
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
-        },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
         }
       }
     },
@@ -34422,7 +31842,7 @@
         "@types/sinon": "17.0.3",
         "cross-var": "1.1.0",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -34434,47 +31854,6 @@
           "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz",
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
-        },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
         }
       }
     },
@@ -34504,7 +31883,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -34519,47 +31898,6 @@
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
         },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
-        },
         "webpack": {
           "version": "5.96.1",
           "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -34618,7 +31956,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -34633,47 +31971,6 @@
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
         },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
-        },
         "webpack": {
           "version": "5.96.1",
           "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -34725,7 +32022,7 @@
         "@types/sinon": "17.0.3",
         "cross-var": "1.1.0",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -34737,47 +32034,6 @@
           "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz",
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
-        },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
         }
       }
     },
@@ -34806,7 +32062,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -34821,47 +32077,6 @@
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
         },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
-        },
         "webpack": {
           "version": "5.96.1",
           "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -34910,7 +32125,7 @@
         "@types/sinon": "17.0.3",
         "cross-var": "1.1.0",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -34922,47 +32137,6 @@
           "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz",
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
-        },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
         }
       }
     },
@@ -34979,7 +32153,7 @@
         "@types/sinon": "17.0.3",
         "cross-var": "1.1.0",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "typescript": "5.0.4"
@@ -34990,47 +32164,6 @@
           "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz",
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
-        },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
         }
       }
     },
@@ -35051,7 +32184,7 @@
         "@types/sinon": "17.0.3",
         "cross-var": "1.1.0",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -35063,47 +32196,6 @@
           "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz",
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
-        },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
         }
       }
     },
@@ -35132,7 +32224,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -35147,47 +32239,6 @@
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
         },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
-        },
         "webpack": {
           "version": "5.96.1",
           "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -35244,7 +32295,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -35259,47 +32310,6 @@
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
         },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
-        },
         "webpack": {
           "version": "5.96.1",
           "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -35357,7 +32367,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nock": "13.5.6",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
@@ -35373,47 +32383,6 @@
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
         },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
-        },
         "webpack": {
           "version": "5.96.1",
           "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -35473,7 +32442,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "require-in-the-middle": "^7.1.1",
         "shimmer": "^1.2.1",
@@ -35490,47 +32459,6 @@
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
         },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
-        },
         "webpack": {
           "version": "5.96.1",
           "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -35591,7 +32519,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "msw": "^2.7.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
@@ -35607,47 +32535,6 @@
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
         },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
-        },
         "webpack": {
           "version": "5.96.1",
           "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -35702,7 +32589,7 @@
         "@types/sinon": "17.0.3",
         "cross-var": "1.1.0",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "typescript": "5.0.4"
@@ -35713,47 +32600,6 @@
           "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz",
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
-        },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
         }
       }
     },
@@ -35777,7 +32623,7 @@
         "cross-var": "1.1.0",
         "forwarded-parse": "2.1.2",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nock": "13.5.6",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
@@ -35790,47 +32636,6 @@
           "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz",
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
-        },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
         }
       }
     },
@@ -35861,7 +32666,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -35876,47 +32681,6 @@
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
         },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
-        },
         "webpack": {
           "version": "5.96.1",
           "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -35959,7 +32723,7 @@
         "@types/node": "18.6.5",
         "cross-var": "1.1.0",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0"
       },
       "dependencies": {
@@ -35968,47 +32732,6 @@
           "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz",
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
-        },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
         }
       }
     },
@@ -36031,7 +32754,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -36046,47 +32769,6 @@
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
         },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
-        },
         "webpack": {
           "version": "5.96.1",
           "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -36140,7 +32822,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -36155,47 +32837,6 @@
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
         },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
-        },
         "webpack": {
           "version": "5.96.1",
           "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -36244,7 +32885,7 @@
         "@types/sinon": "17.0.3",
         "cross-var": "1.1.0",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -36256,47 +32897,6 @@
           "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz",
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
-        },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
         }
       }
     },
@@ -36321,7 +32921,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "protobufjs": "^7.3.0",
         "protobufjs-cli": "1.1.3",
@@ -36330,47 +32930,6 @@
         "webpack": "5.96.1"
       },
       "dependencies": {
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
-        },
         "webpack": {
           "version": "5.96.1",
           "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -36413,7 +32972,7 @@
         "@types/node": "18.6.5",
         "cross-var": "1.1.0",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "ts-loader": "9.5.2",
         "typescript": "5.0.4"
@@ -36424,47 +32983,6 @@
           "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz",
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
-        },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
         }
       }
     },
@@ -36486,7 +33004,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -36500,47 +33018,6 @@
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
         },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
-        },
         "webpack": {
           "version": "5.96.1",
           "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -36594,7 +33071,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nock": "13.5.6",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
@@ -36642,47 +33119,6 @@
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
         },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
-        },
         "webpack": {
           "version": "5.96.1",
           "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -36728,7 +33164,7 @@
         "eslint-plugin-node": "^11.1.0",
         "eslint-plugin-prettier": "^5.1.3",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -36750,47 +33186,6 @@
             "prettier-linter-helpers": "^1.0.0",
             "synckit": "^0.9.1"
           }
-        },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
         }
       }
     },
@@ -36816,7 +33211,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -36840,47 +33235,6 @@
             "@types/sinonjs__fake-timers": "*"
           }
         },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
-        },
         "webpack": {
           "version": "5.96.1",
           "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -36936,7 +33290,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -36984,47 +33338,6 @@
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
         },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
-        },
         "webpack": {
           "version": "5.96.1",
           "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -37078,7 +33391,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -37093,47 +33406,6 @@
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
         },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
-        },
         "webpack": {
           "version": "5.96.1",
           "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -37200,7 +33472,7 @@
         "@types/sinon": "17.0.3",
         "cross-var": "1.1.0",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -37212,47 +33484,6 @@
           "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz",
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
-        },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
         }
       }
     },
@@ -37277,7 +33508,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -37291,47 +33522,6 @@
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
         },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
-        },
         "webpack": {
           "version": "5.96.1",
           "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -37379,7 +33569,7 @@
         "@types/sinon": "17.0.3",
         "cross-var": "1.1.0",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "typescript": "5.0.4"
@@ -37390,47 +33580,6 @@
           "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz",
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
-        },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
         }
       }
     },
@@ -37462,7 +33611,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -37477,47 +33626,6 @@
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
         },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
-        },
         "webpack": {
           "version": "5.96.1",
           "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -37562,7 +33670,7 @@
         "@types/sinon": "17.0.3",
         "cross-var": "1.1.0",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nock": "13.5.6",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
@@ -37576,47 +33684,6 @@
           "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz",
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
-        },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
         }
       }
     },
@@ -37635,7 +33702,7 @@
         "@types/sinon": "17.0.3",
         "cross-var": "1.1.0",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "require-in-the-middle": "^7.1.1",
         "sinon": "15.1.2",
@@ -37647,47 +33714,6 @@
           "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz",
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
-        },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
         }
       }
     },
@@ -37704,7 +33730,7 @@
         "@types/node": "18.6.5",
         "cross-var": "1.1.0",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "opentracing": "^0.14.4",
         "typescript": "5.0.4"
@@ -37715,47 +33741,6 @@
           "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz",
           "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
           "dev": true
-        },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
         }
       }
     },
@@ -37800,7 +33785,7 @@
         "karma-spec-reporter": "0.0.36",
         "karma-webpack": "5.0.1",
         "lerna": "6.6.2",
-        "mocha": "10.8.2",
+        "mocha": "11.1.0",
         "nyc": "17.1.0",
         "sinon": "15.1.2",
         "ts-loader": "9.5.2",
@@ -37824,47 +33809,6 @@
             "@types/sinonjs__fake-timers": "*"
           }
         },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "mocha": {
-          "version": "10.8.2",
-          "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
-          "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
-          "dev": true,
-          "requires": {
-            "ansi-colors": "^4.1.3",
-            "browser-stdout": "^1.3.1",
-            "chokidar": "^3.5.3",
-            "debug": "^4.3.5",
-            "diff": "^5.2.0",
-            "escape-string-regexp": "^4.0.0",
-            "find-up": "^5.0.0",
-            "glob": "^8.1.0",
-            "he": "^1.2.0",
-            "js-yaml": "^4.1.0",
-            "log-symbols": "^4.1.0",
-            "minimatch": "^5.1.6",
-            "ms": "^2.1.3",
-            "serialize-javascript": "^6.0.2",
-            "strip-json-comments": "^3.1.1",
-            "supports-color": "^8.1.1",
-            "workerpool": "^6.5.1",
-            "yargs": "^16.2.0",
-            "yargs-parser": "^20.2.9",
-            "yargs-unparser": "^2.0.0"
-          }
-        },
         "webpack": {
           "version": "5.96.1",
           "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
@@ -47676,11 +43620,10 @@
       }
     },
     "mocha": {
-      "version": "11.0.1",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.0.1.tgz",
-      "integrity": "sha512-+3GkODfsDG71KSCQhc4IekSW+ItCK/kiez1Z28ksWvYhKXV/syxMlerR/sC7whDp7IyreZ4YxceMLdTs5hQE8A==",
+      "version": "11.1.0",
+      "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.1.0.tgz",
+      "integrity": "sha512-8uJR5RTC2NgpY3GrYcgpZrsEd9zKbPDpob1RezyR2upGHRQtHWofmzTMzTMSV6dru3tj5Ukt0+Vnq1qhFEEwAg==",
       "dev": true,
-      "peer": true,
       "requires": {
         "ansi-colors": "^4.1.3",
         "browser-stdout": "^1.3.1",
@@ -47699,17 +43642,33 @@
         "strip-json-comments": "^3.1.1",
         "supports-color": "^8.1.1",
         "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
+        "yargs": "^17.7.2",
+        "yargs-parser": "^21.1.1",
         "yargs-unparser": "^2.0.0"
       },
       "dependencies": {
+        "cliui": {
+          "version": "8.0.1",
+          "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+          "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+          "dev": true,
+          "requires": {
+            "string-width": "^4.2.0",
+            "strip-ansi": "^6.0.1",
+            "wrap-ansi": "^7.0.0"
+          }
+        },
+        "emoji-regex": {
+          "version": "8.0.0",
+          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+          "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+          "dev": true
+        },
         "glob": {
           "version": "10.4.5",
           "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
           "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
           "dev": true,
-          "peer": true,
           "requires": {
             "foreground-child": "^3.1.0",
             "jackspeak": "^3.1.2",
@@ -47724,7 +43683,6 @@
               "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
               "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
               "dev": true,
-              "peer": true,
               "requires": {
                 "brace-expansion": "^2.0.1"
               }
@@ -47736,7 +43694,6 @@
           "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
           "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
           "dev": true,
-          "peer": true,
           "requires": {
             "@isaacs/cliui": "^8.0.2",
             "@pkgjs/parseargs": "^0.11.0"
@@ -47746,19 +43703,60 @@
           "version": "10.4.3",
           "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
           "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
-          "dev": true,
-          "peer": true
+          "dev": true
         },
         "path-scurry": {
           "version": "1.11.1",
           "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
           "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
           "dev": true,
-          "peer": true,
           "requires": {
             "lru-cache": "^10.2.0",
             "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
           }
+        },
+        "string-width": {
+          "version": "4.2.3",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+          "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^8.0.0",
+            "is-fullwidth-code-point": "^3.0.0",
+            "strip-ansi": "^6.0.1"
+          }
+        },
+        "wrap-ansi": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+          "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.0.0",
+            "string-width": "^4.1.0",
+            "strip-ansi": "^6.0.0"
+          }
+        },
+        "yargs": {
+          "version": "17.7.2",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+          "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+          "dev": true,
+          "requires": {
+            "cliui": "^8.0.1",
+            "escalade": "^3.1.1",
+            "get-caller-file": "^2.0.5",
+            "require-directory": "^2.1.1",
+            "string-width": "^4.2.3",
+            "y18n": "^5.0.5",
+            "yargs-parser": "^21.1.1"
+          }
+        },
+        "yargs-parser": {
+          "version": "21.1.1",
+          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+          "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+          "dev": true
         }
       }
     },
diff --git a/packages/opentelemetry-context-async-hooks/package.json b/packages/opentelemetry-context-async-hooks/package.json
index a14f964df1a..fb5441997cf 100644
--- a/packages/opentelemetry-context-async-hooks/package.json
+++ b/packages/opentelemetry-context-async-hooks/package.json
@@ -49,7 +49,7 @@
     "@types/node": "18.6.5",
     "cross-var": "1.1.0",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "typescript": "5.0.4"
   },
diff --git a/packages/opentelemetry-context-zone-peer-dep/package.json b/packages/opentelemetry-context-zone-peer-dep/package.json
index 782226c5b0e..441be796b39 100644
--- a/packages/opentelemetry-context-zone-peer-dep/package.json
+++ b/packages/opentelemetry-context-zone-peer-dep/package.json
@@ -71,7 +71,7 @@
     "karma-spec-reporter": "0.0.36",
     "karma-webpack": "5.0.1",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
     "ts-loader": "9.5.2",
diff --git a/packages/opentelemetry-core/package.json b/packages/opentelemetry-core/package.json
index bea41230698..b8c6905236a 100644
--- a/packages/opentelemetry-core/package.json
+++ b/packages/opentelemetry-core/package.json
@@ -77,7 +77,7 @@
     "karma-spec-reporter": "0.0.36",
     "karma-webpack": "5.0.1",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
     "ts-loader": "9.5.2",
diff --git a/packages/opentelemetry-exporter-jaeger/package.json b/packages/opentelemetry-exporter-jaeger/package.json
index 32ab4d0ee8b..2e09dde320c 100644
--- a/packages/opentelemetry-exporter-jaeger/package.json
+++ b/packages/opentelemetry-exporter-jaeger/package.json
@@ -51,7 +51,7 @@
     "@types/sinon": "17.0.3",
     "cross-var": "1.1.0",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nock": "13.5.6",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json
index 1ea8fb92e45..40fd336911a 100644
--- a/packages/opentelemetry-exporter-zipkin/package.json
+++ b/packages/opentelemetry-exporter-zipkin/package.json
@@ -76,7 +76,7 @@
     "karma-spec-reporter": "0.0.36",
     "karma-webpack": "5.0.1",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nock": "13.5.6",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
diff --git a/packages/opentelemetry-propagator-b3/package.json b/packages/opentelemetry-propagator-b3/package.json
index f8d7c9f69d7..e5020318c5d 100644
--- a/packages/opentelemetry-propagator-b3/package.json
+++ b/packages/opentelemetry-propagator-b3/package.json
@@ -62,7 +62,7 @@
     "@types/node": "18.6.5",
     "cross-var": "1.1.0",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "ts-loader": "9.5.2",
     "typescript": "5.0.4"
diff --git a/packages/opentelemetry-propagator-jaeger/package.json b/packages/opentelemetry-propagator-jaeger/package.json
index 9ba1271ad20..88c95edf975 100644
--- a/packages/opentelemetry-propagator-jaeger/package.json
+++ b/packages/opentelemetry-propagator-jaeger/package.json
@@ -68,7 +68,7 @@
     "karma-spec-reporter": "0.0.36",
     "karma-webpack": "5.0.1",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
     "ts-loader": "9.5.2",
diff --git a/packages/opentelemetry-resources/package.json b/packages/opentelemetry-resources/package.json
index cf531557dbd..d289c4abcd6 100644
--- a/packages/opentelemetry-resources/package.json
+++ b/packages/opentelemetry-resources/package.json
@@ -78,7 +78,7 @@
     "karma-spec-reporter": "0.0.36",
     "karma-webpack": "5.0.1",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nock": "13.5.6",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
diff --git a/packages/opentelemetry-sdk-trace-base/package.json b/packages/opentelemetry-sdk-trace-base/package.json
index 2d1a746e299..612f4f184f8 100644
--- a/packages/opentelemetry-sdk-trace-base/package.json
+++ b/packages/opentelemetry-sdk-trace-base/package.json
@@ -79,7 +79,7 @@
     "karma-spec-reporter": "0.0.36",
     "karma-webpack": "5.0.1",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
     "ts-loader": "9.5.2",
diff --git a/packages/opentelemetry-sdk-trace-node/package.json b/packages/opentelemetry-sdk-trace-node/package.json
index a0c1afdf928..c6c692e0b5f 100644
--- a/packages/opentelemetry-sdk-trace-node/package.json
+++ b/packages/opentelemetry-sdk-trace-node/package.json
@@ -53,7 +53,7 @@
     "@types/sinon": "17.0.3",
     "cross-var": "1.1.0",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
     "typescript": "5.0.4"
diff --git a/packages/opentelemetry-sdk-trace-web/package.json b/packages/opentelemetry-sdk-trace-web/package.json
index 2f4373b2204..ba17c283349 100644
--- a/packages/opentelemetry-sdk-trace-web/package.json
+++ b/packages/opentelemetry-sdk-trace-web/package.json
@@ -76,7 +76,7 @@
     "karma-spec-reporter": "0.0.36",
     "karma-webpack": "5.0.1",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
     "ts-loader": "9.5.2",
diff --git a/packages/opentelemetry-shim-opentracing/package.json b/packages/opentelemetry-shim-opentracing/package.json
index 06540cb794f..83a96bf9d6b 100644
--- a/packages/opentelemetry-shim-opentracing/package.json
+++ b/packages/opentelemetry-shim-opentracing/package.json
@@ -50,7 +50,7 @@
     "@types/node": "18.6.5",
     "cross-var": "1.1.0",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "typescript": "5.0.4"
   },
diff --git a/packages/sdk-metrics/package.json b/packages/sdk-metrics/package.json
index 8111146f0e4..746e96f1801 100644
--- a/packages/sdk-metrics/package.json
+++ b/packages/sdk-metrics/package.json
@@ -69,7 +69,7 @@
     "karma-spec-reporter": "0.0.36",
     "karma-webpack": "5.0.1",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nyc": "17.1.0",
     "sinon": "15.1.2",
     "ts-loader": "9.5.2",
diff --git a/semantic-conventions/package.json b/semantic-conventions/package.json
index 72da92e9037..88b3ccb0ebf 100644
--- a/semantic-conventions/package.json
+++ b/semantic-conventions/package.json
@@ -71,7 +71,7 @@
     "@types/sinon": "17.0.3",
     "cross-var": "1.1.0",
     "lerna": "6.6.2",
-    "mocha": "10.8.2",
+    "mocha": "11.1.0",
     "nock": "13.5.6",
     "nyc": "17.1.0",
     "sinon": "15.1.2",

From c51396506286d32ac77dbaae0beba10331d07b2b Mon Sep 17 00:00:00 2001
From: Mend Renovate <bot@renovateapp.com>
Date: Thu, 30 Jan 2025 16:40:21 +0100
Subject: [PATCH 15/16] chore(deps): update dependency gh-pages to v6.3.0
 (#5403)

---
 package-lock.json | 32 ++++++++++++++++----------------
 package.json      |  2 +-
 2 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 3c4382977a6..9dbaf63c200 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -33,7 +33,7 @@
         "eslint-plugin-header": "3.1.1",
         "eslint-plugin-node": "11.1.0",
         "eslint-plugin-prettier": "5.0.1",
-        "gh-pages": "6.2.0",
+        "gh-pages": "6.3.0",
         "glob": "^11.0.0",
         "karma": "6.4.4",
         "karma-chrome-launcher": "3.1.0",
@@ -14643,13 +14643,13 @@
       }
     },
     "node_modules/gh-pages": {
-      "version": "6.2.0",
-      "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-6.2.0.tgz",
-      "integrity": "sha512-HMXJ8th9u5wRXaZCnLcs/d3oVvCHiZkaP5KQExQljYGwJjQbSPyTdHe/Gc1IvYUR/rWiZLxNobIqfoMHKTKjHQ==",
+      "version": "6.3.0",
+      "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-6.3.0.tgz",
+      "integrity": "sha512-Ot5lU6jK0Eb+sszG8pciXdjMXdBJ5wODvgjR+imihTqsUWF2K6dJ9HST55lgqcs8wWcw6o6wAsUzfcYRhJPXbA==",
       "dev": true,
       "dependencies": {
         "async": "^3.2.4",
-        "commander": "^11.0.0",
+        "commander": "^13.0.0",
         "email-addresses": "^5.0.0",
         "filenamify": "^4.3.0",
         "find-cache-dir": "^3.3.1",
@@ -14665,12 +14665,12 @@
       }
     },
     "node_modules/gh-pages/node_modules/commander": {
-      "version": "11.1.0",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
-      "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
+      "version": "13.1.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz",
+      "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==",
       "dev": true,
       "engines": {
-        "node": ">=16"
+        "node": ">=18"
       }
     },
     "node_modules/git-raw-commits": {
@@ -40065,13 +40065,13 @@
       }
     },
     "gh-pages": {
-      "version": "6.2.0",
-      "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-6.2.0.tgz",
-      "integrity": "sha512-HMXJ8th9u5wRXaZCnLcs/d3oVvCHiZkaP5KQExQljYGwJjQbSPyTdHe/Gc1IvYUR/rWiZLxNobIqfoMHKTKjHQ==",
+      "version": "6.3.0",
+      "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-6.3.0.tgz",
+      "integrity": "sha512-Ot5lU6jK0Eb+sszG8pciXdjMXdBJ5wODvgjR+imihTqsUWF2K6dJ9HST55lgqcs8wWcw6o6wAsUzfcYRhJPXbA==",
       "dev": true,
       "requires": {
         "async": "^3.2.4",
-        "commander": "^11.0.0",
+        "commander": "^13.0.0",
         "email-addresses": "^5.0.0",
         "filenamify": "^4.3.0",
         "find-cache-dir": "^3.3.1",
@@ -40080,9 +40080,9 @@
       },
       "dependencies": {
         "commander": {
-          "version": "11.1.0",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
-          "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
+          "version": "13.1.0",
+          "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz",
+          "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==",
           "dev": true
         }
       }
diff --git a/package.json b/package.json
index 8efce3d2656..6e5c8b12dc7 100644
--- a/package.json
+++ b/package.json
@@ -94,7 +94,7 @@
     "eslint-plugin-header": "3.1.1",
     "eslint-plugin-node": "11.1.0",
     "eslint-plugin-prettier": "5.0.1",
-    "gh-pages": "6.2.0",
+    "gh-pages": "6.3.0",
     "glob": "^11.0.0",
     "karma": "6.4.4",
     "karma-chrome-launcher": "3.1.0",

From 29d0da559b1c561c25317846e084754a2286f036 Mon Sep 17 00:00:00 2001
From: Godfrey Chan <godfreykfc@gmail.com>
Date: Thu, 30 Jan 2025 08:40:10 -0800
Subject: [PATCH 16/16] refactor(instrumentation-fetch): fix eslint warnings
 (#5401)

---
 .../src/utils.ts                              | 21 ++++++++++++-------
 1 file changed, 13 insertions(+), 8 deletions(-)

diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/src/utils.ts b/experimental/packages/opentelemetry-instrumentation-fetch/src/utils.ts
index da3d329dc21..92735ed8fab 100644
--- a/experimental/packages/opentelemetry-instrumentation-fetch/src/utils.ts
+++ b/experimental/packages/opentelemetry-instrumentation-fetch/src/utils.ts
@@ -117,6 +117,10 @@ function _getBodyNonDestructively(body: ReadableStream) {
   };
 }
 
+function isDocument(value: unknown): value is Document {
+  return typeof Document !== 'undefined' && value instanceof Document;
+}
+
 /**
  * Helper function to determine payload content length for XHR requests
  * @param body
@@ -125,17 +129,17 @@ function _getBodyNonDestructively(body: ReadableStream) {
 export function getXHRBodyLength(
   body: Document | XMLHttpRequestBodyInit
 ): number | undefined {
-  if (typeof Document !== 'undefined' && body instanceof Document) {
+  if (isDocument(body)) {
     return new XMLSerializer().serializeToString(document).length;
   }
+
   // XMLHttpRequestBodyInit expands to the following:
-  if (body instanceof Blob) {
-    return body.size;
+  if (typeof body === 'string') {
+    return getByteLength(body);
   }
 
-  // ArrayBuffer | ArrayBufferView
-  if ((body as any).byteLength !== undefined) {
-    return (body as any).byteLength as number;
+  if (body instanceof Blob) {
+    return body.size;
   }
 
   if (body instanceof FormData) {
@@ -146,8 +150,9 @@ export function getXHRBodyLength(
     return getByteLength(body.toString());
   }
 
-  if (typeof body === 'string') {
-    return getByteLength(body);
+  // ArrayBuffer | ArrayBufferView
+  if (body.byteLength !== undefined) {
+    return body.byteLength;
   }
 
   DIAG_LOGGER.warn('unknown body type');