@microsoft/applicationinsights-dependencies-js 2.8.16-nightly.2308-04 → 2.8.16-nightly.2308-17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/browser/applicationinsights-dependencies-js.integrity.json +9 -9
  2. package/browser/applicationinsights-dependencies-js.js +126 -56
  3. package/browser/applicationinsights-dependencies-js.js.map +1 -1
  4. package/browser/applicationinsights-dependencies-js.min.js +2 -2
  5. package/browser/applicationinsights-dependencies-js.min.js.map +1 -1
  6. package/dist/applicationinsights-dependencies-js.api.json +92 -6
  7. package/dist/applicationinsights-dependencies-js.api.md +12 -1
  8. package/dist/applicationinsights-dependencies-js.d.ts +21 -5
  9. package/dist/applicationinsights-dependencies-js.js +126 -56
  10. package/dist/applicationinsights-dependencies-js.js.map +1 -1
  11. package/dist/applicationinsights-dependencies-js.min.js +2 -2
  12. package/dist/applicationinsights-dependencies-js.min.js.map +1 -1
  13. package/dist/applicationinsights-dependencies-js.rollup.d.ts +21 -5
  14. package/dist-esm/DependencyInitializer.js +1 -1
  15. package/dist-esm/DependencyListener.js +1 -1
  16. package/dist-esm/InternalConstants.js +1 -1
  17. package/dist-esm/__DynamicConstants.js +1 -1
  18. package/dist-esm/ajax.js +136 -54
  19. package/dist-esm/ajax.js.map +1 -1
  20. package/dist-esm/ajaxRecord.js +1 -1
  21. package/dist-esm/ajaxUtils.js +1 -1
  22. package/dist-esm/applicationinsights-dependencies-js.js +1 -1
  23. package/package.json +3 -3
  24. package/src/ajax.ts +160 -60
  25. package/src/applicationinsights-dependencies-js.ts +1 -1
  26. package/types/ajax.d.ts +19 -4
  27. package/types/applicationinsights-dependencies-js.d.ts +1 -1
  28. package/types/tsdoc-metadata.json +1 -1
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Microsoft Application Insights XHR dependencies plugin, 2.8.16-nightly.2308-04
2
+ * Microsoft Application Insights XHR dependencies plugin, 2.8.16-nightly.2308-17
3
3
  * Copyright (c) Microsoft and contributors. All rights reserved.
4
4
  *
5
5
  * Microsoft Application Insights Team
@@ -37,7 +37,7 @@ export declare class AjaxPlugin extends BaseTelemetryPlugin implements IDependen
37
37
  processTelemetry(item: ITelemetryItem, itemCtx?: IProcessTelemetryContext): void;
38
38
  /**
39
39
  * Logs dependency call
40
- * @param dependencyData dependency data object
40
+ * @param dependencyData - dependency data object
41
41
  */
42
42
  trackDependencyData(dependency: IDependencyTelemetry, properties?: {
43
43
  [key: string]: any;
@@ -63,7 +63,7 @@ export declare class AjaxPlugin extends BaseTelemetryPlugin implements IDependen
63
63
  * Protected function to allow sub classes the chance to add additional properties to the dependency event
64
64
  * before it's sent. This function calls track, so sub-classes must call this function after they have
65
65
  * populated their properties.
66
- * @param dependencyData dependency data object
66
+ * @param dependencyData - dependency data object
67
67
  */
68
68
  protected trackDependencyDataInternal(dependency: IDependencyTelemetry, properties?: {
69
69
  [key: string]: any;
@@ -159,7 +159,7 @@ declare interface IAjaxRecordResponse {
159
159
  export declare interface IDependenciesPlugin extends IDependencyListenerContainer {
160
160
  /**
161
161
  * Logs dependency call
162
- * @param dependencyData dependency data object
162
+ * @param dependencyData - dependency data object
163
163
  */
164
164
  trackDependencyData(dependency: IDependencyTelemetry): void;
165
165
  }
@@ -283,8 +283,24 @@ declare class XHRMonitoringState {
283
283
  constructor();
284
284
  }
285
285
 
286
+ export declare interface XMLHttpRequestData {
287
+ /**
288
+ * The "Shared" XHR headers, avoids causing multiple instances
289
+ */
290
+ xh?: Array<{
291
+ n: string;
292
+ v: string;
293
+ }>;
294
+ /**
295
+ * The individual tracking data for each AI instance
296
+ */
297
+ i: {
298
+ [key: string]: ajaxRecord;
299
+ };
300
+ }
301
+
286
302
  export declare interface XMLHttpRequestInstrumented extends XMLHttpRequest {
287
- ajaxData: ajaxRecord;
303
+ _ajaxData: XMLHttpRequestData;
288
304
  }
289
305
 
290
306
  export { }
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Application Insights JavaScript SDK - Dependencies Plugin, 2.8.16-nightly.2308-04
2
+ * Application Insights JavaScript SDK - Dependencies Plugin, 2.8.16-nightly.2308-17
3
3
  * Copyright (c) Microsoft and contributors. All rights reserved.
4
4
  */
5
5
  export {};
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Application Insights JavaScript SDK - Dependencies Plugin, 2.8.16-nightly.2308-04
2
+ * Application Insights JavaScript SDK - Dependencies Plugin, 2.8.16-nightly.2308-17
3
3
  * Copyright (c) Microsoft and contributors. All rights reserved.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Application Insights JavaScript SDK - Dependencies Plugin, 2.8.16-nightly.2308-04
2
+ * Application Insights JavaScript SDK - Dependencies Plugin, 2.8.16-nightly.2308-17
3
3
  * Copyright (c) Microsoft and contributors. All rights reserved.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Application Insights JavaScript SDK - Dependencies Plugin, 2.8.16-nightly.2308-04
2
+ * Application Insights JavaScript SDK - Dependencies Plugin, 2.8.16-nightly.2308-17
3
3
  * Copyright (c) Microsoft and contributors. All rights reserved.
4
4
  */
5
5
 
package/dist-esm/ajax.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Application Insights JavaScript SDK - Dependencies Plugin, 2.8.16-nightly.2308-04
2
+ * Application Insights JavaScript SDK - Dependencies Plugin, 2.8.16-nightly.2308-17
3
3
  * Copyright (c) Microsoft and contributors. All rights reserved.
4
4
  */
5
5
 
@@ -13,7 +13,7 @@ import { _DYN_ABORTED, _DYN_ABORT_DONE, _DYN_ADD_REQUEST_CONTEXT, _DYN_AJAX_PERF
13
13
  import { ajaxRecord } from "./ajaxRecord";
14
14
  var AJAX_MONITOR_PREFIX = "ai.ajxmn.";
15
15
  var strDiagLog = "diagLog";
16
- var strAjaxData = "ajaxData";
16
+ var AJAX_DATA_CONTAINER = "_ajaxData";
17
17
  var STR_FETCH = "fetch";
18
18
  var ERROR_HEADER = "Failed to monitor XMLHttpRequest";
19
19
  var ERROR_PREFIX = ", monitoring data for this ajax call ";
@@ -52,7 +52,8 @@ function isWebWorker() {
52
52
  * @returns True if Ajax monitoring is supported on this page, otherwise false
53
53
  * @ignore
54
54
  */
55
- function _supportsAjaxMonitoring(ajaxMonitorInstance) {
55
+ function _supportsAjaxMonitoring(ajaxMonitorInstance, ajaxDataId) {
56
+ var _a;
56
57
  var result = false;
57
58
  if (isXhrSupported()) {
58
59
  var proto = XMLHttpRequest[strPrototype];
@@ -69,7 +70,13 @@ function _supportsAjaxMonitoring(ajaxMonitorInstance) {
69
70
  // Disable if the XmlHttpRequest can't be extended or hooked
70
71
  try {
71
72
  var xhr = new XMLHttpRequest();
72
- xhr[strAjaxData] = {};
73
+ var xhrData = {
74
+ xh: [],
75
+ i: (_a = {},
76
+ _a[ajaxDataId] = {},
77
+ _a)
78
+ };
79
+ xhr[AJAX_DATA_CONTAINER] = xhrData;
73
80
  // Check that we can update the prototype
74
81
  var theOpen = XMLHttpRequest[strPrototype].open;
75
82
  XMLHttpRequest[strPrototype].open = theOpen;
@@ -84,12 +91,57 @@ function _supportsAjaxMonitoring(ajaxMonitorInstance) {
84
91
  }
85
92
  return result;
86
93
  }
94
+ /**
95
+ * Internal helper to fetch the SDK instance tracking data for this XHR request
96
+ * @param xhr
97
+ * @param ajaxDataId
98
+ * @returns
99
+ */
100
+ var _getAjaxData = function (xhr, ajaxDataId) {
101
+ if (xhr && ajaxDataId && xhr[AJAX_DATA_CONTAINER]) {
102
+ return (xhr[AJAX_DATA_CONTAINER].i || {})[ajaxDataId];
103
+ }
104
+ return null;
105
+ };
106
+ /**
107
+ * @ignore
108
+ * Internal helper to track the singleton shared tracking headers, so we can attempt to not create headers
109
+ * that might cause an issue if multiple values are populated.
110
+ * @param xhr - The instrumented XHR instance
111
+ */
112
+ var _addSharedXhrHeaders = function (xhr, name, value) {
113
+ if (xhr) {
114
+ var headers = (xhr[AJAX_DATA_CONTAINER] || {}).xh;
115
+ if (headers) {
116
+ headers.push({
117
+ n: name,
118
+ v: value
119
+ });
120
+ }
121
+ }
122
+ };
123
+ var _isHeaderSet = function (xhr, name) {
124
+ var isPresent = false;
125
+ if (xhr) {
126
+ var headers = (xhr[AJAX_DATA_CONTAINER] || {}).xh;
127
+ if (headers) {
128
+ arrForEach(headers, function (header) {
129
+ if (header.n === name) {
130
+ isPresent = true;
131
+ return -1;
132
+ }
133
+ });
134
+ }
135
+ }
136
+ return isPresent;
137
+ };
87
138
  /** @Ignore */
88
- function _getFailedAjaxDiagnosticsMessage(xhr) {
139
+ function _getFailedAjaxDiagnosticsMessage(xhr, ajaxDataId) {
89
140
  var result = "";
90
141
  try {
91
- if (xhr && xhr[strAjaxData] && xhr[strAjaxData][_DYN_REQUEST_URL /* @min:%2erequestUrl */]) {
92
- result += "(url: '" + xhr[strAjaxData][_DYN_REQUEST_URL /* @min:%2erequestUrl */] + "')";
142
+ var ajaxData = _getAjaxData(xhr, ajaxDataId);
143
+ if (ajaxData && ajaxData[_DYN_REQUEST_URL /* @min:%2erequestUrl */]) {
144
+ result += "(url: '" + ajaxData[_DYN_REQUEST_URL /* @min:%2erequestUrl */] + "')";
93
145
  }
94
146
  }
95
147
  catch (e) {
@@ -108,10 +160,10 @@ function _throwInternalWarning(ajaxMonitorInstance, msgId, message, properties,
108
160
  /** @Ignore */
109
161
  function _createErrorCallbackFunc(ajaxMonitorInstance, internalMessage, message) {
110
162
  // tslint:disable-next-line
111
- return function (args) {
163
+ return function (callDetails) {
112
164
  _throwInternalCritical(ajaxMonitorInstance, internalMessage, message, {
113
- ajaxDiagnosticsMessage: _getFailedAjaxDiagnosticsMessage(args[_DYN_INST /* @min:%2einst */]),
114
- exception: dumpObj(args.err)
165
+ ajaxDiagnosticsMessage: _getFailedAjaxDiagnosticsMessage(callDetails[_DYN_INST /* @min:%2einst */], ajaxMonitorInstance._ajaxDataId),
166
+ exception: dumpObj(callDetails.err)
115
167
  });
116
168
  };
117
169
  }
@@ -245,6 +297,7 @@ var AjaxMonitor = /** @class */ (function (_super) {
245
297
  var _excludeRequestFromAutoTrackingPatterns;
246
298
  var _addRequestContext;
247
299
  var _evtNamespace;
300
+ var _ajaxDataId;
248
301
  var _dependencyHandlerId;
249
302
  var _dependencyListeners;
250
303
  var _dependencyInitializers;
@@ -312,17 +365,27 @@ var AjaxMonitor = /** @class */ (function (_super) {
312
365
  else if (xhr) { // XHR
313
366
  if (CorrelationIdHelper[_DYN_CAN_INCLUDE_CORRELAT3 /* @min:%2ecanIncludeCorrelationHeader */](_config, ajaxData[_DYN_GET_ABSOLUTE_URL /* @min:%2egetAbsoluteUrl */](), currentWindowHost)) {
314
367
  if (_isUsingAIHeaders) {
315
- var id = "|" + ajaxData[_DYN_TRACE_ID /* @min:%2etraceID */] + "." + ajaxData[_DYN_SPAN_ID /* @min:%2espanID */];
316
- xhr[_DYN_SET_REQUEST_HEADER /* @min:%2esetRequestHeader */](RequestHeaders[3 /* eRequestHeaders.requestIdHeader */], id);
317
- if (_enableRequestHeaderTracking) {
318
- ajaxData[_DYN_REQUEST_HEADERS /* @min:%2erequestHeaders */][RequestHeaders[3 /* eRequestHeaders.requestIdHeader */]] = id;
368
+ if (!_isHeaderSet(xhr, RequestHeaders[3 /* eRequestHeaders.requestIdHeader */])) {
369
+ var id = "|" + ajaxData[_DYN_TRACE_ID /* @min:%2etraceID */] + "." + ajaxData[_DYN_SPAN_ID /* @min:%2espanID */];
370
+ xhr[_DYN_SET_REQUEST_HEADER /* @min:%2esetRequestHeader */](RequestHeaders[3 /* eRequestHeaders.requestIdHeader */], id);
371
+ if (_enableRequestHeaderTracking) {
372
+ ajaxData[_DYN_REQUEST_HEADERS /* @min:%2erequestHeaders */][RequestHeaders[3 /* eRequestHeaders.requestIdHeader */]] = id;
373
+ }
374
+ }
375
+ else {
376
+ _throwInternalWarning(_self, 71 /* _eInternalMessageId.FailedMonitorAjaxSetRequestHeader */, "Unable to set [" + RequestHeaders[3 /* eRequestHeaders.requestIdHeader */] + "] as it has already been set by another instance");
319
377
  }
320
378
  }
321
379
  var appId = _config[_DYN_APP_ID /* @min:%2eappId */] || (_context && _context[_DYN_APP_ID /* @min:%2eappId */]());
322
380
  if (appId) {
323
- xhr[_DYN_SET_REQUEST_HEADER /* @min:%2esetRequestHeader */](RequestHeaders[0 /* eRequestHeaders.requestContextHeader */], RequestHeaders[2 /* eRequestHeaders.requestContextAppIdFormat */] + appId);
324
- if (_enableRequestHeaderTracking) {
325
- ajaxData[_DYN_REQUEST_HEADERS /* @min:%2erequestHeaders */][RequestHeaders[0 /* eRequestHeaders.requestContextHeader */]] = RequestHeaders[2 /* eRequestHeaders.requestContextAppIdFormat */] + appId;
381
+ if (!_isHeaderSet(xhr, RequestHeaders[0 /* eRequestHeaders.requestContextHeader */])) {
382
+ xhr[_DYN_SET_REQUEST_HEADER /* @min:%2esetRequestHeader */](RequestHeaders[0 /* eRequestHeaders.requestContextHeader */], RequestHeaders[2 /* eRequestHeaders.requestContextAppIdFormat */] + appId);
383
+ if (_enableRequestHeaderTracking) {
384
+ ajaxData[_DYN_REQUEST_HEADERS /* @min:%2erequestHeaders */][RequestHeaders[0 /* eRequestHeaders.requestContextHeader */]] = RequestHeaders[2 /* eRequestHeaders.requestContextAppIdFormat */] + appId;
385
+ }
386
+ }
387
+ else {
388
+ _throwInternalWarning(_self, 71 /* _eInternalMessageId.FailedMonitorAjaxSetRequestHeader */, "Unable to set [" + RequestHeaders[0 /* eRequestHeaders.requestContextHeader */] + "] as it has already been set by another instance");
326
389
  }
327
390
  }
328
391
  if (_isUsingW3CHeaders) {
@@ -330,10 +393,15 @@ var AjaxMonitor = /** @class */ (function (_super) {
330
393
  if (isNullOrUndefined(traceFlags)) {
331
394
  traceFlags = 0x01;
332
395
  }
333
- var traceParent = formatTraceParent(createTraceParent(ajaxData[_DYN_TRACE_ID /* @min:%2etraceID */], ajaxData[_DYN_SPAN_ID /* @min:%2espanID */], traceFlags));
334
- xhr[_DYN_SET_REQUEST_HEADER /* @min:%2esetRequestHeader */](RequestHeaders[4 /* eRequestHeaders.traceParentHeader */], traceParent);
335
- if (_enableRequestHeaderTracking) {
336
- ajaxData[_DYN_REQUEST_HEADERS /* @min:%2erequestHeaders */][RequestHeaders[4 /* eRequestHeaders.traceParentHeader */]] = traceParent;
396
+ if (!_isHeaderSet(xhr, RequestHeaders[4 /* eRequestHeaders.traceParentHeader */])) {
397
+ var traceParent = formatTraceParent(createTraceParent(ajaxData[_DYN_TRACE_ID /* @min:%2etraceID */], ajaxData[_DYN_SPAN_ID /* @min:%2espanID */], traceFlags));
398
+ xhr[_DYN_SET_REQUEST_HEADER /* @min:%2esetRequestHeader */](RequestHeaders[4 /* eRequestHeaders.traceParentHeader */], traceParent);
399
+ if (_enableRequestHeaderTracking) {
400
+ ajaxData[_DYN_REQUEST_HEADERS /* @min:%2erequestHeaders */][RequestHeaders[4 /* eRequestHeaders.traceParentHeader */]] = traceParent;
401
+ }
402
+ }
403
+ else {
404
+ _throwInternalWarning(_self, 71 /* _eInternalMessageId.FailedMonitorAjaxSetRequestHeader */, "Unable to set [" + RequestHeaders[4 /* eRequestHeaders.traceParentHeader */] + "] as it has already been set by another instance");
337
405
  }
338
406
  }
339
407
  }
@@ -393,6 +461,8 @@ var AjaxMonitor = /** @class */ (function (_super) {
393
461
  _dependencyHandlerId = 0;
394
462
  _dependencyListeners = [];
395
463
  _dependencyInitializers = [];
464
+ _ajaxDataId = createUniqueNamespace("ajaxData");
465
+ _self._ajaxDataId = _ajaxDataId;
396
466
  }
397
467
  function _populateDefaults(config) {
398
468
  var ctx = createProcessTelemetryContext(null, config, _self[_DYN_CORE /* @min:%2ecore */]);
@@ -531,21 +601,21 @@ var AjaxMonitor = /** @class */ (function (_super) {
531
601
  _addHook(InstrumentProto(target, funcName, callbacks));
532
602
  }
533
603
  function _instrumentXhr() {
534
- if (_supportsAjaxMonitoring(_self) && !_disableAjaxTracking && !_xhrInitialized) {
604
+ if (_supportsAjaxMonitoring(_self, _ajaxDataId) && !_disableAjaxTracking && !_xhrInitialized) {
535
605
  // Instrument open
536
606
  _hookProto(XMLHttpRequest, "open", {
537
607
  ns: _evtNamespace,
538
- req: function (args, method, url, async) {
608
+ req: function (callDetails, method, url, async) {
539
609
  if (!_disableAjaxTracking) {
540
- var xhr = args[_DYN_INST /* @min:%2einst */];
541
- var ajaxData = xhr[strAjaxData];
542
- if (!_isDisabledRequest(xhr, url) && _isMonitoredXhrInstance(xhr, true)) {
610
+ var xhr = callDetails[_DYN_INST /* @min:%2einst */];
611
+ var ajaxData = _getAjaxData(xhr, _ajaxDataId);
612
+ if (!_isDisabledRequest(xhr, url) && _isMonitoredXhrInstance(xhr, ajaxData, true)) {
543
613
  if (!ajaxData || !ajaxData.xhrMonitoringState[_DYN_OPEN_DONE /* @min:%2eopenDone */]) {
544
614
  // Only create a single ajaxData (even when multiple AI instances are running)
545
- _openHandler(xhr, method, url, async);
615
+ ajaxData = _openHandler(xhr, method, url, async);
546
616
  }
547
617
  // always attach to the on ready state change (required for handling multiple instances)
548
- _attachToOnReadyStateChange(xhr);
618
+ _attachToOnReadyStateChange(xhr, ajaxData);
549
619
  }
550
620
  }
551
621
  },
@@ -554,11 +624,11 @@ var AjaxMonitor = /** @class */ (function (_super) {
554
624
  // Instrument send
555
625
  _hookProto(XMLHttpRequest, "send", {
556
626
  ns: _evtNamespace,
557
- req: function (args, context) {
627
+ req: function (callDetails, context) {
558
628
  if (!_disableAjaxTracking) {
559
- var xhr = args[_DYN_INST /* @min:%2einst */];
560
- var ajaxData = xhr[strAjaxData];
561
- if (_isMonitoredXhrInstance(xhr) && !ajaxData.xhrMonitoringState[_DYN_SEND_DONE /* @min:%2esendDone */]) {
629
+ var xhr = callDetails[_DYN_INST /* @min:%2einst */];
630
+ var ajaxData = _getAjaxData(xhr, _ajaxDataId);
631
+ if (_isMonitoredXhrInstance(xhr, ajaxData) && !ajaxData.xhrMonitoringState[_DYN_SEND_DONE /* @min:%2esendDone */]) {
562
632
  _createMarkId("xhr", ajaxData);
563
633
  ajaxData[_DYN_REQUEST_SENT_TIME /* @min:%2erequestSentTime */] = dateTimeUtilsNow();
564
634
  _self[_DYN_INCLUDE_CORRELATION_2 /* @min:%2eincludeCorrelationHeaders */](ajaxData, undefined, undefined, xhr);
@@ -571,11 +641,11 @@ var AjaxMonitor = /** @class */ (function (_super) {
571
641
  // Instrument abort
572
642
  _hookProto(XMLHttpRequest, "abort", {
573
643
  ns: _evtNamespace,
574
- req: function (args) {
644
+ req: function (callDetails) {
575
645
  if (!_disableAjaxTracking) {
576
- var xhr = args[_DYN_INST /* @min:%2einst */];
577
- var ajaxData = xhr[strAjaxData];
578
- if (_isMonitoredXhrInstance(xhr) && !ajaxData.xhrMonitoringState[_DYN_ABORT_DONE /* @min:%2eabortDone */]) {
646
+ var xhr = callDetails[_DYN_INST /* @min:%2einst */];
647
+ var ajaxData = _getAjaxData(xhr, _ajaxDataId);
648
+ if (_isMonitoredXhrInstance(xhr, ajaxData) && !ajaxData.xhrMonitoringState[_DYN_ABORT_DONE /* @min:%2eabortDone */]) {
579
649
  ajaxData[_DYN_ABORTED /* @min:%2eaborted */] = 1;
580
650
  ajaxData.xhrMonitoringState[_DYN_ABORT_DONE /* @min:%2eabortDone */] = true;
581
651
  }
@@ -586,11 +656,17 @@ var AjaxMonitor = /** @class */ (function (_super) {
586
656
  // Instrument setRequestHeader
587
657
  _hookProto(XMLHttpRequest, "setRequestHeader", {
588
658
  ns: _evtNamespace,
589
- req: function (args, header, value) {
590
- if (!_disableAjaxTracking && _enableRequestHeaderTracking) {
591
- var xhr = args[_DYN_INST /* @min:%2einst */];
592
- if (_isMonitoredXhrInstance(xhr) && _canIncludeHeaders(header)) {
593
- xhr[strAjaxData][_DYN_REQUEST_HEADERS /* @min:%2erequestHeaders */][header] = value;
659
+ req: function (callDetails, header, value) {
660
+ if (!_disableAjaxTracking) {
661
+ var xhr = callDetails[_DYN_INST /* @min:%2einst */];
662
+ var ajaxData = _getAjaxData(xhr, _ajaxDataId);
663
+ if (ajaxData && _isMonitoredXhrInstance(xhr, ajaxData)) {
664
+ _addSharedXhrHeaders(xhr, header, value);
665
+ if (_enableRequestHeaderTracking && _canIncludeHeaders(header)) {
666
+ if (ajaxData) {
667
+ ajaxData[_DYN_REQUEST_HEADERS /* @min:%2erequestHeaders */][header] = value;
668
+ }
669
+ }
594
670
  }
595
671
  }
596
672
  },
@@ -653,14 +729,14 @@ var AjaxMonitor = /** @class */ (function (_super) {
653
729
  }
654
730
  return isDisabled;
655
731
  }
656
- /// <summary>Verifies that particalar instance of XMLHttpRequest needs to be monitored</summary>
732
+ /// <summary>Verifies that particular instance of XMLHttpRequest needs to be monitored</summary>
657
733
  /// <param name="excludeAjaxDataValidation">Optional parameter. True if ajaxData must be excluded from verification</param>
658
734
  /// <returns type="bool">True if instance needs to be monitored, otherwise false</returns>
659
- function _isMonitoredXhrInstance(xhr, excludeAjaxDataValidation) {
735
+ function _isMonitoredXhrInstance(xhr, ajaxData, excludeAjaxDataValidation) {
660
736
  var ajaxValidation = true;
661
737
  var initialized = _xhrInitialized;
662
738
  if (!isNullOrUndefined(xhr)) {
663
- ajaxValidation = excludeAjaxDataValidation === true || !isNullOrUndefined(xhr[strAjaxData]);
739
+ ajaxValidation = excludeAjaxDataValidation === true || !isNullOrUndefined(ajaxData);
664
740
  }
665
741
  // checking to see that all interested functions on xhr were instrumented
666
742
  return initialized
@@ -683,7 +759,9 @@ var AjaxMonitor = /** @class */ (function (_super) {
683
759
  var distributedTraceCtx = _getDistributedTraceCtx();
684
760
  var traceID = (distributedTraceCtx && distributedTraceCtx[_DYN_GET_TRACE_ID /* @min:%2egetTraceId */]()) || generateW3CId();
685
761
  var spanID = generateW3CId().substr(0, 16);
686
- var ajaxData = new ajaxRecord(traceID, spanID, _self[strDiagLog](), (_a = _self.core) === null || _a === void 0 ? void 0 : _a.getTraceCtx());
762
+ var xhrRequestData = xhr[AJAX_DATA_CONTAINER] = (xhr[AJAX_DATA_CONTAINER] || { xh: [], i: {} });
763
+ var ajaxDataCntr = xhrRequestData.i = (xhrRequestData.i || {});
764
+ var ajaxData = ajaxDataCntr[_ajaxDataId] = (ajaxDataCntr[_ajaxDataId] || new ajaxRecord(traceID, spanID, _self[strDiagLog](), (_a = _self.core) === null || _a === void 0 ? void 0 : _a.getTraceCtx()));
687
765
  ajaxData[_DYN_TRACE_FLAGS /* @min:%2etraceFlags */] = distributedTraceCtx && distributedTraceCtx[_DYN_GET_TRACE_FLAGS /* @min:%2egetTraceFlags */]();
688
766
  ajaxData[_DYN_METHOD /* @min:%2emethod */] = method;
689
767
  ajaxData[_DYN_REQUEST_URL /* @min:%2erequestUrl */] = url;
@@ -691,12 +769,12 @@ var AjaxMonitor = /** @class */ (function (_super) {
691
769
  ajaxData[_DYN_REQUEST_HEADERS /* @min:%2erequestHeaders */] = {};
692
770
  ajaxData.async = async;
693
771
  ajaxData[_DYN_ERROR_STATUS_TEXT /* @min:%2eerrorStatusText */] = _enableAjaxErrorStatusText;
694
- xhr[strAjaxData] = ajaxData;
772
+ return ajaxData;
695
773
  }
696
- function _attachToOnReadyStateChange(xhr) {
697
- xhr[strAjaxData].xhrMonitoringState[_DYN_STATE_CHANGE_ATTACHE14 /* @min:%2estateChangeAttached */] = eventOn(xhr, "readystatechange", function () {
774
+ function _attachToOnReadyStateChange(xhr, ajaxData) {
775
+ ajaxData.xhrMonitoringState[_DYN_STATE_CHANGE_ATTACHE14 /* @min:%2estateChangeAttached */] = eventOn(xhr, "readystatechange", function () {
698
776
  try {
699
- if (xhr && xhr.readyState === 4 && _isMonitoredXhrInstance(xhr)) {
777
+ if (xhr && xhr.readyState === 4 && _isMonitoredXhrInstance(xhr, ajaxData)) {
700
778
  _onAjaxComplete(xhr);
701
779
  }
702
780
  }
@@ -705,7 +783,7 @@ var AjaxMonitor = /** @class */ (function (_super) {
705
783
  // ignore messages with c00c023f, as this a known IE9 XHR abort issue
706
784
  if (!exceptionText || _indexOf(exceptionText[_DYN_TO_LOWER_CASE /* @min:%2etoLowerCase */](), "c00c023f") === -1) {
707
785
  _throwInternalCritical(_self, 16 /* _eInternalMessageId.FailedMonitorAjaxRSC */, ERROR_HEADER + " 'readystatechange' event handler" + ERROR_POSTFIX, {
708
- ajaxDiagnosticsMessage: _getFailedAjaxDiagnosticsMessage(xhr),
786
+ ajaxDiagnosticsMessage: _getFailedAjaxDiagnosticsMessage(xhr, _ajaxDataId),
709
787
  exception: exceptionText
710
788
  });
711
789
  }
@@ -726,12 +804,12 @@ var AjaxMonitor = /** @class */ (function (_super) {
726
804
  return null;
727
805
  }
728
806
  function _onAjaxComplete(xhr) {
729
- var ajaxData = xhr[strAjaxData];
807
+ var ajaxData = _getAjaxData(xhr, _ajaxDataId);
730
808
  ajaxData[_DYN_RESPONSE_FINISHED_TI15 /* @min:%2eresponseFinishedTime */] = dateTimeUtilsNow();
731
809
  ajaxData[_DYN_STATUS /* @min:%2estatus */] = xhr[_DYN_STATUS /* @min:%2estatus */];
732
810
  function _reportXhrError(e, failedProps) {
733
811
  var errorProps = failedProps || {};
734
- errorProps["ajaxDiagnosticsMessage"] = _getFailedAjaxDiagnosticsMessage(xhr);
812
+ errorProps["ajaxDiagnosticsMessage"] = _getFailedAjaxDiagnosticsMessage(xhr, _ajaxDataId);
735
813
  if (e) {
736
814
  errorProps["exception"] = dumpObj(e);
737
815
  }
@@ -794,7 +872,11 @@ var AjaxMonitor = /** @class */ (function (_super) {
794
872
  finally {
795
873
  // cleanup telemetry data
796
874
  try {
797
- xhr[strAjaxData] = null;
875
+ var xhrRequestData = (xhr[AJAX_DATA_CONTAINER] || { i: {} });
876
+ var ajaxDataCntr = (xhrRequestData.i || {});
877
+ if (ajaxDataCntr[_ajaxDataId]) {
878
+ ajaxDataCntr[_ajaxDataId] = null;
879
+ }
798
880
  }
799
881
  catch (e) {
800
882
  // May throw in environments that prevent extension or freeze xhr
@@ -817,7 +899,7 @@ var AjaxMonitor = /** @class */ (function (_super) {
817
899
  }
818
900
  catch (e) {
819
901
  _throwInternalWarning(_self, 18 /* _eInternalMessageId.FailedMonitorAjaxGetCorrelationHeader */, CORRELATION_HEADER_ERROR, {
820
- ajaxDiagnosticsMessage: _getFailedAjaxDiagnosticsMessage(xhr),
902
+ ajaxDiagnosticsMessage: _getFailedAjaxDiagnosticsMessage(xhr, _ajaxDataId),
821
903
  exception: dumpObj(e)
822
904
  });
823
905
  }