@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.
- package/browser/applicationinsights-dependencies-js.integrity.json +9 -9
- package/browser/applicationinsights-dependencies-js.js +126 -56
- package/browser/applicationinsights-dependencies-js.js.map +1 -1
- package/browser/applicationinsights-dependencies-js.min.js +2 -2
- package/browser/applicationinsights-dependencies-js.min.js.map +1 -1
- package/dist/applicationinsights-dependencies-js.api.json +92 -6
- package/dist/applicationinsights-dependencies-js.api.md +12 -1
- package/dist/applicationinsights-dependencies-js.d.ts +21 -5
- package/dist/applicationinsights-dependencies-js.js +126 -56
- package/dist/applicationinsights-dependencies-js.js.map +1 -1
- package/dist/applicationinsights-dependencies-js.min.js +2 -2
- package/dist/applicationinsights-dependencies-js.min.js.map +1 -1
- package/dist/applicationinsights-dependencies-js.rollup.d.ts +21 -5
- package/dist-esm/DependencyInitializer.js +1 -1
- package/dist-esm/DependencyListener.js +1 -1
- package/dist-esm/InternalConstants.js +1 -1
- package/dist-esm/__DynamicConstants.js +1 -1
- package/dist-esm/ajax.js +136 -54
- package/dist-esm/ajax.js.map +1 -1
- package/dist-esm/ajaxRecord.js +1 -1
- package/dist-esm/ajaxUtils.js +1 -1
- package/dist-esm/applicationinsights-dependencies-js.js +1 -1
- package/package.json +3 -3
- package/src/ajax.ts +160 -60
- package/src/applicationinsights-dependencies-js.ts +1 -1
- package/types/ajax.d.ts +19 -4
- package/types/applicationinsights-dependencies-js.d.ts +1 -1
- 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-
|
|
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
|
-
|
|
303
|
+
_ajaxData: XMLHttpRequestData;
|
|
288
304
|
}
|
|
289
305
|
|
|
290
306
|
export { }
|
package/dist-esm/ajax.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Application Insights JavaScript SDK - Dependencies Plugin, 2.8.16-nightly.2308-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
92
|
-
|
|
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 (
|
|
163
|
+
return function (callDetails) {
|
|
112
164
|
_throwInternalCritical(ajaxMonitorInstance, internalMessage, message, {
|
|
113
|
-
ajaxDiagnosticsMessage: _getFailedAjaxDiagnosticsMessage(
|
|
114
|
-
exception: dumpObj(
|
|
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
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
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
|
|
324
|
-
|
|
325
|
-
|
|
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
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
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 (
|
|
608
|
+
req: function (callDetails, method, url, async) {
|
|
539
609
|
if (!_disableAjaxTracking) {
|
|
540
|
-
var xhr =
|
|
541
|
-
var ajaxData = xhr
|
|
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 (
|
|
627
|
+
req: function (callDetails, context) {
|
|
558
628
|
if (!_disableAjaxTracking) {
|
|
559
|
-
var xhr =
|
|
560
|
-
var ajaxData = xhr
|
|
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 (
|
|
644
|
+
req: function (callDetails) {
|
|
575
645
|
if (!_disableAjaxTracking) {
|
|
576
|
-
var xhr =
|
|
577
|
-
var ajaxData = xhr
|
|
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 (
|
|
590
|
-
if (!_disableAjaxTracking
|
|
591
|
-
var xhr =
|
|
592
|
-
|
|
593
|
-
|
|
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
|
|
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(
|
|
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
|
|
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
|
-
|
|
772
|
+
return ajaxData;
|
|
695
773
|
}
|
|
696
|
-
function _attachToOnReadyStateChange(xhr) {
|
|
697
|
-
|
|
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
|
|
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[
|
|
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
|
}
|