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

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 -58
  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,7 +1,7 @@
1
1
  {
2
2
  "metadata": {
3
3
  "toolPackage": "@microsoft/api-extractor",
4
- "toolVersion": "7.36.3",
4
+ "toolVersion": "7.36.4",
5
5
  "schemaVersion": 1011,
6
6
  "oldestForwardsCompatibleVersion": 1001,
7
7
  "tsdocConfig": {
@@ -2899,6 +2899,92 @@
2899
2899
  }
2900
2900
  ]
2901
2901
  },
2902
+ {
2903
+ "kind": "Interface",
2904
+ "canonicalReference": "@microsoft/applicationinsights-dependencies-js!XMLHttpRequestData:interface",
2905
+ "docComment": "",
2906
+ "excerptTokens": [
2907
+ {
2908
+ "kind": "Content",
2909
+ "text": "export interface XMLHttpRequestData "
2910
+ }
2911
+ ],
2912
+ "fileUrlPath": "types/ajax.d.ts",
2913
+ "releaseTag": "Public",
2914
+ "name": "XMLHttpRequestData",
2915
+ "preserveMemberOrder": false,
2916
+ "members": [
2917
+ {
2918
+ "kind": "PropertySignature",
2919
+ "canonicalReference": "@microsoft/applicationinsights-dependencies-js!XMLHttpRequestData#i:member",
2920
+ "docComment": "/**\n * The individual tracking data for each AI instance\n */\n",
2921
+ "excerptTokens": [
2922
+ {
2923
+ "kind": "Content",
2924
+ "text": "i: "
2925
+ },
2926
+ {
2927
+ "kind": "Content",
2928
+ "text": "{\n [key: string]: "
2929
+ },
2930
+ {
2931
+ "kind": "Reference",
2932
+ "text": "ajaxRecord",
2933
+ "canonicalReference": "@microsoft/applicationinsights-dependencies-js!ajaxRecord:class"
2934
+ },
2935
+ {
2936
+ "kind": "Content",
2937
+ "text": ";\n }"
2938
+ },
2939
+ {
2940
+ "kind": "Content",
2941
+ "text": ";"
2942
+ }
2943
+ ],
2944
+ "isReadonly": false,
2945
+ "isOptional": false,
2946
+ "releaseTag": "Public",
2947
+ "name": "i",
2948
+ "propertyTypeTokenRange": {
2949
+ "startIndex": 1,
2950
+ "endIndex": 4
2951
+ }
2952
+ },
2953
+ {
2954
+ "kind": "PropertySignature",
2955
+ "canonicalReference": "@microsoft/applicationinsights-dependencies-js!XMLHttpRequestData#xh:member",
2956
+ "docComment": "/**\n * The \"Shared\" XHR headers, avoids causing multiple instances\n */\n",
2957
+ "excerptTokens": [
2958
+ {
2959
+ "kind": "Content",
2960
+ "text": "xh?: "
2961
+ },
2962
+ {
2963
+ "kind": "Reference",
2964
+ "text": "Array",
2965
+ "canonicalReference": "!Array:interface"
2966
+ },
2967
+ {
2968
+ "kind": "Content",
2969
+ "text": "<{\n n: string;\n v: string;\n }>"
2970
+ },
2971
+ {
2972
+ "kind": "Content",
2973
+ "text": ";"
2974
+ }
2975
+ ],
2976
+ "isReadonly": false,
2977
+ "isOptional": true,
2978
+ "releaseTag": "Public",
2979
+ "name": "xh",
2980
+ "propertyTypeTokenRange": {
2981
+ "startIndex": 1,
2982
+ "endIndex": 3
2983
+ }
2984
+ }
2985
+ ],
2986
+ "extendsTokenRanges": []
2987
+ },
2902
2988
  {
2903
2989
  "kind": "Interface",
2904
2990
  "canonicalReference": "@microsoft/applicationinsights-dependencies-js!XMLHttpRequestInstrumented:interface",
@@ -2925,17 +3011,17 @@
2925
3011
  "members": [
2926
3012
  {
2927
3013
  "kind": "PropertySignature",
2928
- "canonicalReference": "@microsoft/applicationinsights-dependencies-js!XMLHttpRequestInstrumented#ajaxData:member",
3014
+ "canonicalReference": "@microsoft/applicationinsights-dependencies-js!XMLHttpRequestInstrumented#_ajaxData:member",
2929
3015
  "docComment": "",
2930
3016
  "excerptTokens": [
2931
3017
  {
2932
3018
  "kind": "Content",
2933
- "text": "ajaxData: "
3019
+ "text": "_ajaxData: "
2934
3020
  },
2935
3021
  {
2936
3022
  "kind": "Reference",
2937
- "text": "ajaxRecord",
2938
- "canonicalReference": "@microsoft/applicationinsights-dependencies-js!ajaxRecord:class"
3023
+ "text": "XMLHttpRequestData",
3024
+ "canonicalReference": "@microsoft/applicationinsights-dependencies-js!XMLHttpRequestData:interface"
2939
3025
  },
2940
3026
  {
2941
3027
  "kind": "Content",
@@ -2945,7 +3031,7 @@
2945
3031
  "isReadonly": false,
2946
3032
  "isOptional": false,
2947
3033
  "releaseTag": "Public",
2948
- "name": "ajaxData",
3034
+ "name": "_ajaxData",
2949
3035
  "propertyTypeTokenRange": {
2950
3036
  "startIndex": 1,
2951
3037
  "endIndex": 2
@@ -193,10 +193,21 @@ export interface IInstrumentationRequirements extends IDependenciesPlugin {
193
193
  includeCorrelationHeaders: (ajaxData: ajaxRecord, input?: Request | string, init?: RequestInit, xhr?: XMLHttpRequestInstrumented) => any;
194
194
  }
195
195
 
196
+ // @public (undocumented)
197
+ export interface XMLHttpRequestData {
198
+ i: {
199
+ [key: string]: ajaxRecord;
200
+ };
201
+ xh?: Array<{
202
+ n: string;
203
+ v: string;
204
+ }>;
205
+ }
206
+
196
207
  // @public (undocumented)
197
208
  export interface XMLHttpRequestInstrumented extends XMLHttpRequest {
198
209
  // (undocumented)
199
- ajaxData: ajaxRecord;
210
+ _ajaxData: XMLHttpRequestData;
200
211
  }
201
212
 
202
213
  // (No @packageDocumentation comment for this package)
@@ -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.2309-03
3
3
  * Copyright (c) Microsoft and contributors. All rights reserved.
4
4
  *
5
5
  * Microsoft Application Insights Team
@@ -31,7 +31,7 @@ declare namespace ApplicationInsights {
31
31
  processTelemetry(item: ITelemetryItem, itemCtx?: IProcessTelemetryContext): void;
32
32
  /**
33
33
  * Logs dependency call
34
- * @param dependencyData dependency data object
34
+ * @param dependencyData - dependency data object
35
35
  */
36
36
  trackDependencyData(dependency: IDependencyTelemetry, properties?: {
37
37
  [key: string]: any;
@@ -57,7 +57,7 @@ declare namespace ApplicationInsights {
57
57
  * Protected function to allow sub classes the chance to add additional properties to the dependency event
58
58
  * before it's sent. This function calls track, so sub-classes must call this function after they have
59
59
  * populated their properties.
60
- * @param dependencyData dependency data object
60
+ * @param dependencyData - dependency data object
61
61
  */
62
62
  protected trackDependencyDataInternal(dependency: IDependencyTelemetry, properties?: {
63
63
  [key: string]: any;
@@ -153,7 +153,7 @@ declare namespace ApplicationInsights {
153
153
  interface IDependenciesPlugin extends IDependencyListenerContainer {
154
154
  /**
155
155
  * Logs dependency call
156
- * @param dependencyData dependency data object
156
+ * @param dependencyData - dependency data object
157
157
  */
158
158
  trackDependencyData(dependency: IDependencyTelemetry): void;
159
159
  }
@@ -277,8 +277,24 @@ declare namespace ApplicationInsights {
277
277
  constructor();
278
278
  }
279
279
 
280
+ interface XMLHttpRequestData {
281
+ /**
282
+ * The "Shared" XHR headers, avoids causing multiple instances
283
+ */
284
+ xh?: Array<{
285
+ n: string;
286
+ v: string;
287
+ }>;
288
+ /**
289
+ * The individual tracking data for each AI instance
290
+ */
291
+ i: {
292
+ [key: string]: ajaxRecord;
293
+ };
294
+ }
295
+
280
296
  interface XMLHttpRequestInstrumented extends XMLHttpRequest {
281
- ajaxData: ajaxRecord;
297
+ _ajaxData: XMLHttpRequestData;
282
298
  }
283
299
 
284
300
 
@@ -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.2309-03
3
3
  * Copyright (c) Microsoft and contributors. All rights reserved.
4
4
  */
5
5
  (function (global, factory) {
@@ -1280,7 +1280,7 @@
1280
1280
  }
1281
1281
 
1282
1282
  var _objDefineProperty = ObjDefineProperty;
1283
- var version = "2.8.16-nightly.2308-04";
1283
+ var version = "2.8.16-nightly.2309-03";
1284
1284
  var instanceName = "." + newId(6);
1285
1285
  var _dataUid = 0;
1286
1286
  function _createAccessor(target, prop, value) {
@@ -1489,7 +1489,7 @@
1489
1489
  var INVALID_SPAN_ID = "0000000000000000";
1490
1490
  function _isValid(value, len, invalidValue) {
1491
1491
  if (value && value[_DYN_LENGTH$2 ] === len && value !== invalidValue) {
1492
- return !!value.match(/^[\da-f]*$/);
1492
+ return !!value.match(/^[\da-f]*$/i);
1493
1493
  }
1494
1494
  return false;
1495
1495
  }
@@ -1534,7 +1534,7 @@
1534
1534
  if (version !== "00" && version !== "ff") {
1535
1535
  version = DEFAULT_VERSION;
1536
1536
  }
1537
- return "".concat(version, "-").concat(_formatValue(value.traceId, 32, INVALID_TRACE_ID), "-").concat(_formatValue(value.spanId, 16, INVALID_SPAN_ID), "-").concat(flags);
1537
+ return "".concat(version.toLowerCase(), "-").concat(_formatValue(value.traceId, 32, INVALID_TRACE_ID).toLowerCase(), "-").concat(_formatValue(value.spanId, 16, INVALID_SPAN_ID).toLowerCase(), "-").concat(flags.toLowerCase());
1538
1538
  }
1539
1539
  return "";
1540
1540
  }
@@ -3106,7 +3106,7 @@
3106
3106
 
3107
3107
  var AJAX_MONITOR_PREFIX = "ai.ajxmn.";
3108
3108
  var strDiagLog = "diagLog";
3109
- var strAjaxData = "ajaxData";
3109
+ var AJAX_DATA_CONTAINER = "_ajaxData";
3110
3110
  var STR_FETCH = "fetch";
3111
3111
  var ERROR_HEADER = "Failed to monitor XMLHttpRequest";
3112
3112
  var ERROR_PREFIX = ", monitoring data for this ajax call ";
@@ -3138,7 +3138,8 @@
3138
3138
  }
3139
3139
  return _isWebWorker;
3140
3140
  }
3141
- function _supportsAjaxMonitoring(ajaxMonitorInstance) {
3141
+ function _supportsAjaxMonitoring(ajaxMonitorInstance, ajaxDataId) {
3142
+ var _a;
3142
3143
  var result = false;
3143
3144
  if (isXhrSupported()) {
3144
3145
  var proto = XMLHttpRequest[strShimPrototype];
@@ -3154,7 +3155,13 @@
3154
3155
  if (result) {
3155
3156
  try {
3156
3157
  var xhr = new XMLHttpRequest();
3157
- xhr[strAjaxData] = {};
3158
+ var xhrData = {
3159
+ xh: [],
3160
+ i: (_a = {},
3161
+ _a[ajaxDataId] = {},
3162
+ _a)
3163
+ };
3164
+ xhr[AJAX_DATA_CONTAINER] = xhrData;
3158
3165
  var theOpen = XMLHttpRequest[strShimPrototype].open;
3159
3166
  XMLHttpRequest[strShimPrototype].open = theOpen;
3160
3167
  }
@@ -3167,11 +3174,44 @@
3167
3174
  }
3168
3175
  return result;
3169
3176
  }
3170
- function _getFailedAjaxDiagnosticsMessage(xhr) {
3177
+ var _getAjaxData = function (xhr, ajaxDataId) {
3178
+ if (xhr && ajaxDataId && xhr[AJAX_DATA_CONTAINER]) {
3179
+ return (xhr[AJAX_DATA_CONTAINER].i || {})[ajaxDataId];
3180
+ }
3181
+ return null;
3182
+ };
3183
+ var _addSharedXhrHeaders = function (xhr, name, value) {
3184
+ if (xhr) {
3185
+ var headers = (xhr[AJAX_DATA_CONTAINER] || {}).xh;
3186
+ if (headers) {
3187
+ headers.push({
3188
+ n: name,
3189
+ v: value
3190
+ });
3191
+ }
3192
+ }
3193
+ };
3194
+ var _isHeaderSet = function (xhr, name) {
3195
+ var isPresent = false;
3196
+ if (xhr) {
3197
+ var headers = (xhr[AJAX_DATA_CONTAINER] || {}).xh;
3198
+ if (headers) {
3199
+ arrForEach(headers, function (header) {
3200
+ if (header.n === name) {
3201
+ isPresent = true;
3202
+ return -1;
3203
+ }
3204
+ });
3205
+ }
3206
+ }
3207
+ return isPresent;
3208
+ };
3209
+ function _getFailedAjaxDiagnosticsMessage(xhr, ajaxDataId) {
3171
3210
  var result = "";
3172
3211
  try {
3173
- if (xhr && xhr[strAjaxData] && xhr[strAjaxData][_DYN_REQUEST_URL ]) {
3174
- result += "(url: '" + xhr[strAjaxData][_DYN_REQUEST_URL ] + "')";
3212
+ var ajaxData = _getAjaxData(xhr, ajaxDataId);
3213
+ if (ajaxData && ajaxData[_DYN_REQUEST_URL ]) {
3214
+ result += "(url: '" + ajaxData[_DYN_REQUEST_URL ] + "')";
3175
3215
  }
3176
3216
  }
3177
3217
  catch (e) {
@@ -3185,10 +3225,10 @@
3185
3225
  _throwInternal(ajaxMonitorInstance[strDiagLog](), 2 , msgId, message, properties, isUserAct);
3186
3226
  }
3187
3227
  function _createErrorCallbackFunc(ajaxMonitorInstance, internalMessage, message) {
3188
- return function (args) {
3228
+ return function (callDetails) {
3189
3229
  _throwInternalCritical(ajaxMonitorInstance, internalMessage, message, {
3190
- ajaxDiagnosticsMessage: _getFailedAjaxDiagnosticsMessage(args[_DYN_INST ]),
3191
- exception: dumpObj(args.err)
3230
+ ajaxDiagnosticsMessage: _getFailedAjaxDiagnosticsMessage(callDetails[_DYN_INST ], ajaxMonitorInstance._ajaxDataId),
3231
+ exception: dumpObj(callDetails.err)
3192
3232
  });
3193
3233
  };
3194
3234
  }
@@ -3322,6 +3362,7 @@
3322
3362
  var _excludeRequestFromAutoTrackingPatterns;
3323
3363
  var _addRequestContext;
3324
3364
  var _evtNamespace;
3365
+ var _ajaxDataId;
3325
3366
  var _dependencyHandlerId;
3326
3367
  var _dependencyListeners;
3327
3368
  var _dependencyInitializers;
@@ -3385,17 +3426,27 @@
3385
3426
  else if (xhr) {
3386
3427
  if (CorrelationIdHelper[_DYN_CAN_INCLUDE_CORRELAT3 ](_config, ajaxData[_DYN_GET_ABSOLUTE_URL ](), currentWindowHost)) {
3387
3428
  if (_isUsingAIHeaders) {
3388
- var id = "|" + ajaxData[_DYN_TRACE_ID ] + "." + ajaxData[_DYN_SPAN_ID ];
3389
- xhr[_DYN_SET_REQUEST_HEADER ](RequestHeaders[3 ], id);
3390
- if (_enableRequestHeaderTracking) {
3391
- ajaxData[_DYN_REQUEST_HEADERS ][RequestHeaders[3 ]] = id;
3429
+ if (!_isHeaderSet(xhr, RequestHeaders[3 ])) {
3430
+ var id = "|" + ajaxData[_DYN_TRACE_ID ] + "." + ajaxData[_DYN_SPAN_ID ];
3431
+ xhr[_DYN_SET_REQUEST_HEADER ](RequestHeaders[3 ], id);
3432
+ if (_enableRequestHeaderTracking) {
3433
+ ajaxData[_DYN_REQUEST_HEADERS ][RequestHeaders[3 ]] = id;
3434
+ }
3435
+ }
3436
+ else {
3437
+ _throwInternalWarning(_self, 71 , "Unable to set [" + RequestHeaders[3 ] + "] as it has already been set by another instance");
3392
3438
  }
3393
3439
  }
3394
3440
  var appId = _config[_DYN_APP_ID ] || (_context && _context[_DYN_APP_ID ]());
3395
3441
  if (appId) {
3396
- xhr[_DYN_SET_REQUEST_HEADER ](RequestHeaders[0 ], RequestHeaders[2 ] + appId);
3397
- if (_enableRequestHeaderTracking) {
3398
- ajaxData[_DYN_REQUEST_HEADERS ][RequestHeaders[0 ]] = RequestHeaders[2 ] + appId;
3442
+ if (!_isHeaderSet(xhr, RequestHeaders[0 ])) {
3443
+ xhr[_DYN_SET_REQUEST_HEADER ](RequestHeaders[0 ], RequestHeaders[2 ] + appId);
3444
+ if (_enableRequestHeaderTracking) {
3445
+ ajaxData[_DYN_REQUEST_HEADERS ][RequestHeaders[0 ]] = RequestHeaders[2 ] + appId;
3446
+ }
3447
+ }
3448
+ else {
3449
+ _throwInternalWarning(_self, 71 , "Unable to set [" + RequestHeaders[0 ] + "] as it has already been set by another instance");
3399
3450
  }
3400
3451
  }
3401
3452
  if (_isUsingW3CHeaders) {
@@ -3403,10 +3454,15 @@
3403
3454
  if (isNullOrUndefined(traceFlags)) {
3404
3455
  traceFlags = 0x01;
3405
3456
  }
3406
- var traceParent = formatTraceParent(createTraceParent(ajaxData[_DYN_TRACE_ID ], ajaxData[_DYN_SPAN_ID ], traceFlags));
3407
- xhr[_DYN_SET_REQUEST_HEADER ](RequestHeaders[4 ], traceParent);
3408
- if (_enableRequestHeaderTracking) {
3409
- ajaxData[_DYN_REQUEST_HEADERS ][RequestHeaders[4 ]] = traceParent;
3457
+ if (!_isHeaderSet(xhr, RequestHeaders[4 ])) {
3458
+ var traceParent = formatTraceParent(createTraceParent(ajaxData[_DYN_TRACE_ID ], ajaxData[_DYN_SPAN_ID ], traceFlags));
3459
+ xhr[_DYN_SET_REQUEST_HEADER ](RequestHeaders[4 ], traceParent);
3460
+ if (_enableRequestHeaderTracking) {
3461
+ ajaxData[_DYN_REQUEST_HEADERS ][RequestHeaders[4 ]] = traceParent;
3462
+ }
3463
+ }
3464
+ else {
3465
+ _throwInternalWarning(_self, 71 , "Unable to set [" + RequestHeaders[4 ] + "] as it has already been set by another instance");
3410
3466
  }
3411
3467
  }
3412
3468
  }
@@ -3463,6 +3519,8 @@
3463
3519
  _dependencyHandlerId = 0;
3464
3520
  _dependencyListeners = [];
3465
3521
  _dependencyInitializers = [];
3522
+ _ajaxDataId = createUniqueNamespace("ajaxData");
3523
+ _self._ajaxDataId = _ajaxDataId;
3466
3524
  }
3467
3525
  function _populateDefaults(config) {
3468
3526
  var ctx = createProcessTelemetryContext(null, config, _self[_DYN_CORE ]);
@@ -3585,18 +3643,18 @@
3585
3643
  _addHook(InstrumentProto(target, funcName, callbacks));
3586
3644
  }
3587
3645
  function _instrumentXhr() {
3588
- if (_supportsAjaxMonitoring(_self) && !_disableAjaxTracking && !_xhrInitialized) {
3646
+ if (_supportsAjaxMonitoring(_self, _ajaxDataId) && !_disableAjaxTracking && !_xhrInitialized) {
3589
3647
  _hookProto(XMLHttpRequest, "open", {
3590
3648
  ns: _evtNamespace,
3591
- req: function (args, method, url, async) {
3649
+ req: function (callDetails, method, url, async) {
3592
3650
  if (!_disableAjaxTracking) {
3593
- var xhr = args[_DYN_INST ];
3594
- var ajaxData = xhr[strAjaxData];
3595
- if (!_isDisabledRequest(xhr, url) && _isMonitoredXhrInstance(xhr, true)) {
3651
+ var xhr = callDetails[_DYN_INST ];
3652
+ var ajaxData = _getAjaxData(xhr, _ajaxDataId);
3653
+ if (!_isDisabledRequest(xhr, url) && _isMonitoredXhrInstance(xhr, ajaxData, true)) {
3596
3654
  if (!ajaxData || !ajaxData.xhrMonitoringState[_DYN_OPEN_DONE ]) {
3597
- _openHandler(xhr, method, url, async);
3655
+ ajaxData = _openHandler(xhr, method, url, async);
3598
3656
  }
3599
- _attachToOnReadyStateChange(xhr);
3657
+ _attachToOnReadyStateChange(xhr, ajaxData);
3600
3658
  }
3601
3659
  }
3602
3660
  },
@@ -3604,11 +3662,11 @@
3604
3662
  });
3605
3663
  _hookProto(XMLHttpRequest, "send", {
3606
3664
  ns: _evtNamespace,
3607
- req: function (args, context) {
3665
+ req: function (callDetails, context) {
3608
3666
  if (!_disableAjaxTracking) {
3609
- var xhr = args[_DYN_INST ];
3610
- var ajaxData = xhr[strAjaxData];
3611
- if (_isMonitoredXhrInstance(xhr) && !ajaxData.xhrMonitoringState[_DYN_SEND_DONE ]) {
3667
+ var xhr = callDetails[_DYN_INST ];
3668
+ var ajaxData = _getAjaxData(xhr, _ajaxDataId);
3669
+ if (_isMonitoredXhrInstance(xhr, ajaxData) && !ajaxData.xhrMonitoringState[_DYN_SEND_DONE ]) {
3612
3670
  _createMarkId("xhr", ajaxData);
3613
3671
  ajaxData[_DYN_REQUEST_SENT_TIME ] = dateTimeUtilsNow();
3614
3672
  _self[_DYN_INCLUDE_CORRELATION_2 ](ajaxData, undefined, undefined, xhr);
@@ -3620,11 +3678,11 @@
3620
3678
  });
3621
3679
  _hookProto(XMLHttpRequest, "abort", {
3622
3680
  ns: _evtNamespace,
3623
- req: function (args) {
3681
+ req: function (callDetails) {
3624
3682
  if (!_disableAjaxTracking) {
3625
- var xhr = args[_DYN_INST ];
3626
- var ajaxData = xhr[strAjaxData];
3627
- if (_isMonitoredXhrInstance(xhr) && !ajaxData.xhrMonitoringState[_DYN_ABORT_DONE ]) {
3683
+ var xhr = callDetails[_DYN_INST ];
3684
+ var ajaxData = _getAjaxData(xhr, _ajaxDataId);
3685
+ if (_isMonitoredXhrInstance(xhr, ajaxData) && !ajaxData.xhrMonitoringState[_DYN_ABORT_DONE ]) {
3628
3686
  ajaxData[_DYN_ABORTED ] = 1;
3629
3687
  ajaxData.xhrMonitoringState[_DYN_ABORT_DONE ] = true;
3630
3688
  }
@@ -3634,11 +3692,17 @@
3634
3692
  });
3635
3693
  _hookProto(XMLHttpRequest, "setRequestHeader", {
3636
3694
  ns: _evtNamespace,
3637
- req: function (args, header, value) {
3638
- if (!_disableAjaxTracking && _enableRequestHeaderTracking) {
3639
- var xhr = args[_DYN_INST ];
3640
- if (_isMonitoredXhrInstance(xhr) && _canIncludeHeaders(header)) {
3641
- xhr[strAjaxData][_DYN_REQUEST_HEADERS ][header] = value;
3695
+ req: function (callDetails, header, value) {
3696
+ if (!_disableAjaxTracking) {
3697
+ var xhr = callDetails[_DYN_INST ];
3698
+ var ajaxData = _getAjaxData(xhr, _ajaxDataId);
3699
+ if (ajaxData && _isMonitoredXhrInstance(xhr, ajaxData)) {
3700
+ _addSharedXhrHeaders(xhr, header, value);
3701
+ if (_enableRequestHeaderTracking && _canIncludeHeaders(header)) {
3702
+ if (ajaxData) {
3703
+ ajaxData[_DYN_REQUEST_HEADERS ][header] = value;
3704
+ }
3705
+ }
3642
3706
  }
3643
3707
  }
3644
3708
  },
@@ -3692,11 +3756,11 @@
3692
3756
  }
3693
3757
  return isDisabled;
3694
3758
  }
3695
- function _isMonitoredXhrInstance(xhr, excludeAjaxDataValidation) {
3759
+ function _isMonitoredXhrInstance(xhr, ajaxData, excludeAjaxDataValidation) {
3696
3760
  var ajaxValidation = true;
3697
3761
  var initialized = _xhrInitialized;
3698
3762
  if (!isNullOrUndefined(xhr)) {
3699
- ajaxValidation = excludeAjaxDataValidation === true || !isNullOrUndefined(xhr[strAjaxData]);
3763
+ ajaxValidation = excludeAjaxDataValidation === true || !isNullOrUndefined(ajaxData);
3700
3764
  }
3701
3765
  return initialized
3702
3766
  && ajaxValidation;
@@ -3716,7 +3780,9 @@
3716
3780
  var distributedTraceCtx = _getDistributedTraceCtx();
3717
3781
  var traceID = (distributedTraceCtx && distributedTraceCtx[_DYN_GET_TRACE_ID ]()) || generateW3CId();
3718
3782
  var spanID = generateW3CId().substr(0, 16);
3719
- var ajaxData = new ajaxRecord(traceID, spanID, _self[strDiagLog](), (_a = _self.core) === null || _a === void 0 ? void 0 : _a.getTraceCtx());
3783
+ var xhrRequestData = xhr[AJAX_DATA_CONTAINER] = (xhr[AJAX_DATA_CONTAINER] || { xh: [], i: {} });
3784
+ var ajaxDataCntr = xhrRequestData.i = (xhrRequestData.i || {});
3785
+ var ajaxData = ajaxDataCntr[_ajaxDataId] = (ajaxDataCntr[_ajaxDataId] || new ajaxRecord(traceID, spanID, _self[strDiagLog](), (_a = _self.core) === null || _a === void 0 ? void 0 : _a.getTraceCtx()));
3720
3786
  ajaxData[_DYN_TRACE_FLAGS ] = distributedTraceCtx && distributedTraceCtx[_DYN_GET_TRACE_FLAGS ]();
3721
3787
  ajaxData[_DYN_METHOD ] = method;
3722
3788
  ajaxData[_DYN_REQUEST_URL ] = url;
@@ -3724,12 +3790,12 @@
3724
3790
  ajaxData[_DYN_REQUEST_HEADERS ] = {};
3725
3791
  ajaxData.async = async;
3726
3792
  ajaxData[_DYN_ERROR_STATUS_TEXT ] = _enableAjaxErrorStatusText;
3727
- xhr[strAjaxData] = ajaxData;
3793
+ return ajaxData;
3728
3794
  }
3729
- function _attachToOnReadyStateChange(xhr) {
3730
- xhr[strAjaxData].xhrMonitoringState[_DYN_STATE_CHANGE_ATTACHE14 ] = eventOn(xhr, "readystatechange", function () {
3795
+ function _attachToOnReadyStateChange(xhr, ajaxData) {
3796
+ ajaxData.xhrMonitoringState[_DYN_STATE_CHANGE_ATTACHE14 ] = eventOn(xhr, "readystatechange", function () {
3731
3797
  try {
3732
- if (xhr && xhr.readyState === 4 && _isMonitoredXhrInstance(xhr)) {
3798
+ if (xhr && xhr.readyState === 4 && _isMonitoredXhrInstance(xhr, ajaxData)) {
3733
3799
  _onAjaxComplete(xhr);
3734
3800
  }
3735
3801
  }
@@ -3737,7 +3803,7 @@
3737
3803
  var exceptionText = dumpObj(e);
3738
3804
  if (!exceptionText || _indexOf(exceptionText[_DYN_TO_LOWER_CASE ](), "c00c023f") === -1) {
3739
3805
  _throwInternalCritical(_self, 16 , ERROR_HEADER + " 'readystatechange' event handler" + ERROR_POSTFIX, {
3740
- ajaxDiagnosticsMessage: _getFailedAjaxDiagnosticsMessage(xhr),
3806
+ ajaxDiagnosticsMessage: _getFailedAjaxDiagnosticsMessage(xhr, _ajaxDataId),
3741
3807
  exception: exceptionText
3742
3808
  });
3743
3809
  }
@@ -3756,12 +3822,12 @@
3756
3822
  return null;
3757
3823
  }
3758
3824
  function _onAjaxComplete(xhr) {
3759
- var ajaxData = xhr[strAjaxData];
3825
+ var ajaxData = _getAjaxData(xhr, _ajaxDataId);
3760
3826
  ajaxData[_DYN_RESPONSE_FINISHED_TI15 ] = dateTimeUtilsNow();
3761
3827
  ajaxData[_DYN_STATUS ] = xhr[_DYN_STATUS ];
3762
3828
  function _reportXhrError(e, failedProps) {
3763
3829
  var errorProps = failedProps || {};
3764
- errorProps["ajaxDiagnosticsMessage"] = _getFailedAjaxDiagnosticsMessage(xhr);
3830
+ errorProps["ajaxDiagnosticsMessage"] = _getFailedAjaxDiagnosticsMessage(xhr, _ajaxDataId);
3765
3831
  if (e) {
3766
3832
  errorProps["exception"] = dumpObj(e);
3767
3833
  }
@@ -3821,7 +3887,11 @@
3821
3887
  }
3822
3888
  finally {
3823
3889
  try {
3824
- xhr[strAjaxData] = null;
3890
+ var xhrRequestData = (xhr[AJAX_DATA_CONTAINER] || { i: {} });
3891
+ var ajaxDataCntr = (xhrRequestData.i || {});
3892
+ if (ajaxDataCntr[_ajaxDataId]) {
3893
+ ajaxDataCntr[_ajaxDataId] = null;
3894
+ }
3825
3895
  }
3826
3896
  catch (e) {
3827
3897
  }
@@ -3843,7 +3913,7 @@
3843
3913
  }
3844
3914
  catch (e) {
3845
3915
  _throwInternalWarning(_self, 18 , CORRELATION_HEADER_ERROR, {
3846
- ajaxDiagnosticsMessage: _getFailedAjaxDiagnosticsMessage(xhr),
3916
+ ajaxDiagnosticsMessage: _getFailedAjaxDiagnosticsMessage(xhr, _ajaxDataId),
3847
3917
  exception: dumpObj(e)
3848
3918
  });
3849
3919
  }