@microsoft/applicationinsights-dependencies-js 2.7.5-nightly.2203-02 → 2.7.5-nightly.2203-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.
package/src/ajax.ts CHANGED
@@ -4,13 +4,14 @@
4
4
  import {
5
5
  RequestHeaders, CorrelationIdHelper, TelemetryItemCreator, ICorrelationConfig,
6
6
  RemoteDependencyData, dateTimeUtilsNow, DisabledPropertyName, IDependencyTelemetry,
7
- IConfig, ITelemetryContext, PropertiesPluginIdentifier, DistributedTracingModes, IRequestContext, isInternalApplicationInsightsEndpoint
7
+ IConfig, ITelemetryContext, PropertiesPluginIdentifier, eDistributedTracingModes, IRequestContext, isInternalApplicationInsightsEndpoint
8
8
  } from "@microsoft/applicationinsights-common";
9
9
  import {
10
10
  isNullOrUndefined, arrForEach, isString, strTrim, isFunction, LoggingSeverity, _InternalMessageId,
11
11
  IAppInsightsCore, BaseTelemetryPlugin, ITelemetryPluginChain, IConfiguration, IPlugin, ITelemetryItem, IProcessTelemetryContext,
12
12
  getLocation, getGlobal, strPrototype, IInstrumentCallDetails, InstrumentFunc, InstrumentProto, getPerformance,
13
- IInstrumentHooksCallbacks, IInstrumentHook, objForEachKey, generateW3CId, getIEVersion, dumpObj, ICustomProperties, isXhrSupported, attachEvent
13
+ IInstrumentHooksCallbacks, objForEachKey, generateW3CId, getIEVersion, dumpObj, ICustomProperties, isXhrSupported, eventOn,
14
+ mergeEvtNamespace, createUniqueNamespace, createProcessTelemetryContext
14
15
  } from "@microsoft/applicationinsights-core-js";
15
16
  import { ajaxRecord, IAjaxRecordResponse } from "./ajaxRecord";
16
17
  import { Traceparent } from "./TraceParent";
@@ -21,6 +22,7 @@ const strDiagLog = "diagLog";
21
22
  const strAjaxData = "ajaxData";
22
23
  const strThrowInternal = "throwInternal";
23
24
  const strFetch = "fetch";
25
+ const strTrackDependencyDataInternal = "trackDependencyDataInternal"; // Using string to help with minification
24
26
 
25
27
  // Using a global value so that to handle same iKey with multiple app insights instances (mostly for testing)
26
28
  let _markCount: number = 0;
@@ -158,7 +160,7 @@ export class AjaxMonitor extends BaseTelemetryPlugin implements IDependenciesPlu
158
160
  disableFetchTracking: true,
159
161
  excludeRequestFromAutoTrackingPatterns: undefined,
160
162
  disableCorrelationHeaders: false,
161
- distributedTracingMode: DistributedTracingModes.AI_AND_W3C,
163
+ distributedTracingMode: eDistributedTracingModes.AI_AND_W3C,
162
164
  correlationHeaderExcludedDomains: [
163
165
  "*.blob.core.windows.net",
164
166
  "*.blob.core.chinacloudapi.cn",
@@ -198,90 +200,49 @@ export class AjaxMonitor extends BaseTelemetryPlugin implements IDependenciesPlu
198
200
 
199
201
  constructor() {
200
202
  super();
201
- let strTrackDependencyDataInternal = "trackDependencyDataInternal"; // Using string to help with minification
202
- let location = getLocation();
203
- let _fetchInitialized:boolean = false; // fetch monitoring initialized
204
- let _xhrInitialized:boolean = false; // XHR monitoring initialized
205
- let _currentWindowHost:string = location && location.host && location.host.toLowerCase();
206
- let _config: ICorrelationConfig = AjaxMonitor.getEmptyConfig();
207
- let _enableRequestHeaderTracking = false;
208
- let _enableAjaxErrorStatusText = false;
209
- let _trackAjaxAttempts: number = 0;
203
+ let _fetchInitialized: boolean; // fetch monitoring initialized
204
+ let _xhrInitialized: boolean; // XHR monitoring initialized
205
+ let _currentWindowHost: string;
206
+ let _config: ICorrelationConfig;
207
+ let _enableRequestHeaderTracking: boolean;
208
+ let _enableAjaxErrorStatusText: boolean;
209
+ let _trackAjaxAttempts: number;
210
210
  let _context: ITelemetryContext;
211
211
  let _isUsingW3CHeaders: boolean;
212
212
  let _isUsingAIHeaders: boolean;
213
213
  let _markPrefix: string;
214
- let _enableAjaxPerfTracking:boolean = false;
215
- let _maxAjaxCallsPerView:number = 0;
216
- let _enableResponseHeaderTracking:boolean = false;
217
- let _hooks:IInstrumentHook[] = [];
218
- let _disabledUrls:any = {};
214
+ let _enableAjaxPerfTracking: boolean;
215
+ let _maxAjaxCallsPerView: number;
216
+ let _enableResponseHeaderTracking: boolean;
217
+ let _disabledUrls: any;
218
+ let _disableAjaxTracking: boolean;
219
+ let _disableFetchTracking: boolean;
219
220
  let _excludeRequestFromAutoTrackingPatterns: string[] | RegExp[];
220
221
  let _addRequestContext: (requestContext?: IRequestContext) => ICustomProperties;
222
+ let _evtNamespace: string | string[];
223
+
224
+ dynamicProto(AjaxMonitor, this, (_self, _base) => {
225
+ let _addHook = _base._addHook;
226
+
227
+ _initDefaults();
221
228
 
222
- dynamicProto(AjaxMonitor, this, (_self, base) => {
223
229
  _self.initialize = (config: IConfiguration & IConfig, core: IAppInsightsCore, extensions: IPlugin[], pluginChain?:ITelemetryPluginChain) => {
224
230
  if (!_self.isInitialized()) {
225
- base.initialize(config, core, extensions, pluginChain);
226
- let ctx = _self._getTelCtx();
227
- const defaultConfig = AjaxMonitor.getDefaultConfig();
228
- objForEachKey(defaultConfig, (field, value) => {
229
- _config[field] = ctx.getConfig(AjaxMonitor.identifier, field, value);
230
- });
231
+ _base.initialize(config, core, extensions, pluginChain);
231
232
 
232
- let distributedTracingMode = _config.distributedTracingMode;
233
- _enableRequestHeaderTracking = _config.enableRequestHeaderTracking;
234
- _enableAjaxErrorStatusText = _config.enableAjaxErrorStatusText;
235
- _enableAjaxPerfTracking = _config.enableAjaxPerfTracking;
236
- _maxAjaxCallsPerView = _config.maxAjaxCallsPerView;
237
- _enableResponseHeaderTracking = _config.enableResponseHeaderTracking;
238
- _excludeRequestFromAutoTrackingPatterns = _config.excludeRequestFromAutoTrackingPatterns;
239
- _addRequestContext = _config.addRequestContext;
240
-
241
- _isUsingAIHeaders = distributedTracingMode === DistributedTracingModes.AI || distributedTracingMode === DistributedTracingModes.AI_AND_W3C;
242
- _isUsingW3CHeaders = distributedTracingMode === DistributedTracingModes.AI_AND_W3C || distributedTracingMode === DistributedTracingModes.W3C;
243
- if (_enableAjaxPerfTracking) {
244
- let iKey = config.instrumentationKey || "unkwn";
245
- if (iKey.length > 5) {
246
- _markPrefix = AJAX_MONITOR_PREFIX + iKey.substring(iKey.length - 5) + ".";
247
- } else {
248
- _markPrefix = AJAX_MONITOR_PREFIX + iKey + ".";
249
- }
250
- }
233
+ _evtNamespace = mergeEvtNamespace(createUniqueNamespace("ajax"), core && core.evtNamespace && core.evtNamespace());
251
234
 
252
- if (_config.disableAjaxTracking === false) {
253
- _instrumentXhr();
254
- }
235
+ _populateDefaults(config);
255
236
 
237
+ _instrumentXhr();
256
238
  _instrumentFetch();
257
-
258
- if (extensions.length > 0 && extensions) {
259
- let propExt: any, extIx = 0;
260
- while (!propExt && extIx < extensions.length) {
261
- if (extensions[extIx] && extensions[extIx].identifier === PropertiesPluginIdentifier) {
262
- propExt = extensions[extIx];
263
- }
264
-
265
- extIx++;
266
- }
267
-
268
- if (propExt) {
269
- _context = propExt.context; // we could move IPropertiesPlugin to common as well
270
- }
271
- }
239
+ _populateContext();
272
240
  }
273
241
  };
274
242
 
275
- _self.teardown = () => {
276
- // Remove all instrumentation hooks
277
- arrForEach(_hooks, (fn) => {
278
- fn.rm();
279
- });
280
- _hooks = [];
281
- _fetchInitialized = false;
282
- _xhrInitialized = false;
283
- _self.setInitialized(false);
284
- }
243
+ _self._doTeardown = () => {
244
+ _initDefaults();
245
+ };
285
246
 
286
247
  _self.trackDependencyData = (dependency: IDependencyTelemetry, properties?: { [key: string]: any }) => {
287
248
  _self[strTrackDependencyDataInternal](dependency, properties);
@@ -359,8 +320,8 @@ export class AjaxMonitor extends BaseTelemetryPlugin implements IDependenciesPlu
359
320
  // Hack since expected format in w3c mode is |abc.def.
360
321
  // Non-w3c format is |abc.def
361
322
  // @todo Remove if better solution is available, e.g. handle in portal
362
- if ((_config.distributedTracingMode === DistributedTracingModes.W3C
363
- || _config.distributedTracingMode === DistributedTracingModes.AI_AND_W3C)
323
+ if ((_config.distributedTracingMode === eDistributedTracingModes.W3C
324
+ || _config.distributedTracingMode === eDistributedTracingModes.AI_AND_W3C)
364
325
  && typeof dependency.id === "string" && dependency.id[dependency.id.length - 1] !== "."
365
326
  ) {
366
327
  dependency.id += ".";
@@ -387,6 +348,73 @@ export class AjaxMonitor extends BaseTelemetryPlugin implements IDependenciesPlu
387
348
  ++_trackAjaxAttempts;
388
349
  }
389
350
 
351
+ function _initDefaults() {
352
+ let location = getLocation();
353
+ _fetchInitialized = false; // fetch monitoring initialized
354
+ _xhrInitialized = false; // XHR monitoring initialized
355
+ _currentWindowHost = location && location.host && location.host.toLowerCase();
356
+ _config = AjaxMonitor.getEmptyConfig();
357
+ _enableRequestHeaderTracking = false;
358
+ _enableAjaxErrorStatusText = false;
359
+ _trackAjaxAttempts = 0;
360
+ _context = null;
361
+ _isUsingW3CHeaders = false;
362
+ _isUsingAIHeaders = false;
363
+ _markPrefix = null;
364
+ _enableAjaxPerfTracking = false;
365
+ _maxAjaxCallsPerView = 0;
366
+ _enableResponseHeaderTracking = false;
367
+ _disabledUrls = {};
368
+ _disableAjaxTracking = false;
369
+ _disableFetchTracking = true;
370
+
371
+ _excludeRequestFromAutoTrackingPatterns = null
372
+ _addRequestContext = null;
373
+ _evtNamespace = null;
374
+ }
375
+
376
+ function _populateDefaults(config: IConfiguration) {
377
+ let ctx = createProcessTelemetryContext(null, config, _self.core);
378
+
379
+ // Reset to the empty config
380
+ _config = AjaxMonitor.getEmptyConfig();
381
+ const defaultConfig = AjaxMonitor.getDefaultConfig();
382
+ objForEachKey(defaultConfig, (field, value) => {
383
+ _config[field] = ctx.getConfig(AjaxMonitor.identifier, field, value);
384
+ });
385
+
386
+ let distributedTracingMode = _config.distributedTracingMode;
387
+ _enableRequestHeaderTracking = _config.enableRequestHeaderTracking;
388
+ _enableAjaxErrorStatusText = _config.enableAjaxErrorStatusText;
389
+ _enableAjaxPerfTracking = _config.enableAjaxPerfTracking;
390
+ _maxAjaxCallsPerView = _config.maxAjaxCallsPerView;
391
+ _enableResponseHeaderTracking = _config.enableResponseHeaderTracking;
392
+ _excludeRequestFromAutoTrackingPatterns = _config.excludeRequestFromAutoTrackingPatterns;
393
+ _addRequestContext = _config.addRequestContext;
394
+
395
+ _isUsingAIHeaders = distributedTracingMode === eDistributedTracingModes.AI || distributedTracingMode === eDistributedTracingModes.AI_AND_W3C;
396
+ _isUsingW3CHeaders = distributedTracingMode === eDistributedTracingModes.AI_AND_W3C || distributedTracingMode === eDistributedTracingModes.W3C;
397
+
398
+ if (_enableAjaxPerfTracking) {
399
+ let iKey = config.instrumentationKey || "unkwn";
400
+ if (iKey.length > 5) {
401
+ _markPrefix = AJAX_MONITOR_PREFIX + iKey.substring(iKey.length - 5) + ".";
402
+ } else {
403
+ _markPrefix = AJAX_MONITOR_PREFIX + iKey + ".";
404
+ }
405
+ }
406
+
407
+ _disableAjaxTracking = !!_config.disableAjaxTracking;
408
+ _disableFetchTracking = !!_config.disableFetchTracking;
409
+ }
410
+
411
+ function _populateContext() {
412
+ let propExt = _self.core.getPlugin<any>(PropertiesPluginIdentifier);
413
+ if (propExt) {
414
+ _context = propExt.plugin.context; // we could move IPropertiesPlugin to common as well
415
+ }
416
+ }
417
+
390
418
  // discard the header if it's defined as ignoreHeaders in ICorrelationConfig
391
419
  function _canIncludeHeaders(header: string) {
392
420
  let rlt = true;
@@ -410,12 +438,13 @@ export class AjaxMonitor extends BaseTelemetryPlugin implements IDependenciesPlu
410
438
 
411
439
  let global = getGlobal();
412
440
  let isPolyfill = (fetch as any).polyfill;
413
- if (_config.disableFetchTracking === false) {
414
- _hooks.push(InstrumentFunc(global, strFetch, {
441
+ if (!_disableFetchTracking && !_fetchInitialized) {
442
+ _addHook(InstrumentFunc(global, strFetch, {
443
+ ns: _evtNamespace,
415
444
  // Add request hook
416
445
  req: (callDetails: IInstrumentCallDetails, input, init) => {
417
446
  let fetchData: ajaxRecord;
418
- if (_fetchInitialized &&
447
+ if (!_disableFetchTracking && _fetchInitialized &&
419
448
  !_isDisabledRequest(null, input, init) &&
420
449
  // If we have a polyfil and XHR instrumented then let XHR report otherwise we get duplicates
421
450
  !(isPolyfill && _xhrInitialized)) {
@@ -429,35 +458,39 @@ export class AjaxMonitor extends BaseTelemetryPlugin implements IDependenciesPlu
429
458
  }
430
459
  },
431
460
  rsp: (callDetails: IInstrumentCallDetails, input) => {
432
- let fetchData = callDetails.ctx().data;
433
- if (fetchData) {
434
- // Replace the result with the new promise from this code
435
- callDetails.rslt = callDetails.rslt.then((response: any) => {
436
- _reportFetchMetrics(callDetails, (response||{}).status, input, response, fetchData, () => {
437
- let ajaxResponse:IAjaxRecordResponse = {
438
- statusText: response.statusText,
439
- headerMap: null,
440
- correlationContext: _getFetchCorrelationContext(response)
441
- };
442
-
443
- if (_enableResponseHeaderTracking) {
444
- const responseHeaderMap = {};
445
- response.headers.forEach((value: string, name: string) => {
446
- if (_canIncludeHeaders(name)) { responseHeaderMap[name] = value; }
447
- });
448
-
449
- ajaxResponse.headerMap = responseHeaderMap;
450
- }
451
-
452
- return ajaxResponse;
453
- });
454
-
455
- return response;
456
- })
457
- .catch((reason: any) => {
458
- _reportFetchMetrics(callDetails, 0, input, null, fetchData, null, { error: reason.message });
459
- throw reason;
460
- });
461
+ if (!_disableFetchTracking) {
462
+ let fetchData = callDetails.ctx().data;
463
+ if (fetchData) {
464
+ // Replace the result with the new promise from this code
465
+ callDetails.rslt = callDetails.rslt.then((response: any) => {
466
+ _reportFetchMetrics(callDetails, (response||{}).status, input, response, fetchData, () => {
467
+ let ajaxResponse:IAjaxRecordResponse = {
468
+ statusText: response.statusText,
469
+ headerMap: null,
470
+ correlationContext: _getFetchCorrelationContext(response)
471
+ };
472
+
473
+ if (_enableResponseHeaderTracking) {
474
+ const responseHeaderMap = {};
475
+ response.headers.forEach((value: string, name: string) => {
476
+ if (_canIncludeHeaders(name)) {
477
+ responseHeaderMap[name] = value;
478
+ }
479
+ });
480
+
481
+ ajaxResponse.headerMap = responseHeaderMap;
482
+ }
483
+
484
+ return ajaxResponse;
485
+ });
486
+
487
+ return response;
488
+ })
489
+ .catch((reason: any) => {
490
+ _reportFetchMetrics(callDetails, 0, input, null, fetchData, null, { error: reason.message });
491
+ throw reason;
492
+ });
493
+ }
461
494
  }
462
495
  },
463
496
  // Create an error callback to report any hook errors
@@ -473,7 +506,8 @@ export class AjaxMonitor extends BaseTelemetryPlugin implements IDependenciesPlu
473
506
  // Note: Polyfill implementations that don't support the "poyyfill" tag are not supported
474
507
  // the workaround is to add a polyfill property to your fetch implementation before initializing
475
508
  // App Insights
476
- _hooks.push(InstrumentFunc(global, strFetch, {
509
+ _addHook(InstrumentFunc(global, strFetch, {
510
+ ns: _evtNamespace,
477
511
  req: (callDetails: IInstrumentCallDetails, input, init) => {
478
512
  // Just call so that we record any disabled URL
479
513
  _isDisabledRequest(null, input, init);
@@ -489,24 +523,27 @@ export class AjaxMonitor extends BaseTelemetryPlugin implements IDependenciesPlu
489
523
  }
490
524
 
491
525
  function _hookProto(target: any, funcName: string, callbacks: IInstrumentHooksCallbacks) {
492
- _hooks.push(InstrumentProto(target, funcName, callbacks));
526
+ _addHook(InstrumentProto(target, funcName, callbacks));
493
527
  }
494
528
 
495
529
  function _instrumentXhr():void {
496
- if (_supportsAjaxMonitoring(_self) && !_xhrInitialized) {
530
+ if (_supportsAjaxMonitoring(_self) && !_disableAjaxTracking && !_xhrInitialized) {
497
531
  // Instrument open
498
532
  _hookProto(XMLHttpRequest, "open", {
533
+ ns: _evtNamespace,
499
534
  req: (args:IInstrumentCallDetails, method:string, url:string, async?:boolean) => {
500
- let xhr = args.inst as XMLHttpRequestInstrumented;
501
- let ajaxData = xhr[strAjaxData];
502
- if (!_isDisabledRequest(xhr, url) && _isMonitoredXhrInstance(xhr, true)) {
503
- if (!ajaxData || !ajaxData.xhrMonitoringState.openDone) {
504
- // Only create a single ajaxData (even when multiple AI instances are running)
505
- _openHandler(xhr, method, url, async);
535
+ if (!_disableAjaxTracking) {
536
+ let xhr = args.inst as XMLHttpRequestInstrumented;
537
+ let ajaxData = xhr[strAjaxData];
538
+ if (!_isDisabledRequest(xhr, url) && _isMonitoredXhrInstance(xhr, true)) {
539
+ if (!ajaxData || !ajaxData.xhrMonitoringState.openDone) {
540
+ // Only create a single ajaxData (even when multiple AI instances are running)
541
+ _openHandler(xhr, method, url, async);
542
+ }
543
+
544
+ // always attach to the on ready state change (required for handling multiple instances)
545
+ _attachToOnReadyStateChange(xhr);
506
546
  }
507
-
508
- // always attach to the on ready state change (required for handling multiple instances)
509
- _attachToOnReadyStateChange(xhr);
510
547
  }
511
548
  },
512
549
  hkErr: _createErrorCallbackFunc(_self, _InternalMessageId.FailedMonitorAjaxOpen,
@@ -515,14 +552,17 @@ export class AjaxMonitor extends BaseTelemetryPlugin implements IDependenciesPlu
515
552
 
516
553
  // Instrument send
517
554
  _hookProto(XMLHttpRequest, "send", {
555
+ ns: _evtNamespace,
518
556
  req: (args:IInstrumentCallDetails, context?: Document | BodyInit | null) => {
519
- let xhr = args.inst as XMLHttpRequestInstrumented;
520
- let ajaxData = xhr[strAjaxData];
521
- if (_isMonitoredXhrInstance(xhr) && !ajaxData.xhrMonitoringState.sendDone) {
522
- _createMarkId("xhr", ajaxData);
523
- ajaxData.requestSentTime = dateTimeUtilsNow();
524
- _self.includeCorrelationHeaders(ajaxData, undefined, undefined, xhr);
525
- ajaxData.xhrMonitoringState.sendDone = true;
557
+ if (!_disableAjaxTracking) {
558
+ let xhr = args.inst as XMLHttpRequestInstrumented;
559
+ let ajaxData = xhr[strAjaxData];
560
+ if (_isMonitoredXhrInstance(xhr) && !ajaxData.xhrMonitoringState.sendDone) {
561
+ _createMarkId("xhr", ajaxData);
562
+ ajaxData.requestSentTime = dateTimeUtilsNow();
563
+ _self.includeCorrelationHeaders(ajaxData, undefined, undefined, xhr);
564
+ ajaxData.xhrMonitoringState.sendDone = true;
565
+ }
526
566
  }
527
567
  },
528
568
  hkErr: _createErrorCallbackFunc(_self, _InternalMessageId.FailedMonitorAjaxSend,
@@ -531,12 +571,15 @@ export class AjaxMonitor extends BaseTelemetryPlugin implements IDependenciesPlu
531
571
 
532
572
  // Instrument abort
533
573
  _hookProto(XMLHttpRequest, "abort", {
574
+ ns: _evtNamespace,
534
575
  req: (args:IInstrumentCallDetails) => {
535
- let xhr = args.inst as XMLHttpRequestInstrumented;
536
- let ajaxData = xhr[strAjaxData];
537
- if (_isMonitoredXhrInstance(xhr) && !ajaxData.xhrMonitoringState.abortDone) {
538
- ajaxData.aborted = 1;
539
- ajaxData.xhrMonitoringState.abortDone = true;
576
+ if (!_disableAjaxTracking) {
577
+ let xhr = args.inst as XMLHttpRequestInstrumented;
578
+ let ajaxData = xhr[strAjaxData];
579
+ if (_isMonitoredXhrInstance(xhr) && !ajaxData.xhrMonitoringState.abortDone) {
580
+ ajaxData.aborted = 1;
581
+ ajaxData.xhrMonitoringState.abortDone = true;
582
+ }
540
583
  }
541
584
  },
542
585
  hkErr: _createErrorCallbackFunc(_self, _InternalMessageId.FailedMonitorAjaxAbort,
@@ -544,18 +587,19 @@ export class AjaxMonitor extends BaseTelemetryPlugin implements IDependenciesPlu
544
587
  });
545
588
 
546
589
  // Instrument setRequestHeader
547
- if (_enableRequestHeaderTracking) {
548
- _hookProto(XMLHttpRequest, "setRequestHeader", {
549
- req: (args: IInstrumentCallDetails, header: string, value: string) => {
590
+ _hookProto(XMLHttpRequest, "setRequestHeader", {
591
+ ns: _evtNamespace,
592
+ req: (args: IInstrumentCallDetails, header: string, value: string) => {
593
+ if (!_disableAjaxTracking && _enableRequestHeaderTracking) {
550
594
  let xhr = args.inst as XMLHttpRequestInstrumented;
551
595
  if (_isMonitoredXhrInstance(xhr) && _canIncludeHeaders(header)) {
552
596
  xhr[strAjaxData].requestHeaders[header] = value;
553
597
  }
554
- },
555
- hkErr: _createErrorCallbackFunc(_self, _InternalMessageId.FailedMonitorAjaxSetRequestHeader,
556
- "Failed to monitor XMLHttpRequest.setRequestHeader, monitoring data for this ajax call may be incorrect.")
557
- });
558
- }
598
+ }
599
+ },
600
+ hkErr: _createErrorCallbackFunc(_self, _InternalMessageId.FailedMonitorAjaxSetRequestHeader,
601
+ "Failed to monitor XMLHttpRequest.setRequestHeader, monitoring data for this ajax call may be incorrect.")
602
+ });
559
603
 
560
604
  _xhrInitialized = true;
561
605
  }
@@ -653,7 +697,7 @@ export class AjaxMonitor extends BaseTelemetryPlugin implements IDependenciesPlu
653
697
  }
654
698
 
655
699
  function _attachToOnReadyStateChange(xhr: XMLHttpRequestInstrumented) {
656
- xhr[strAjaxData].xhrMonitoringState.stateChangeAttached = attachEvent(xhr, "readystatechange", () => {
700
+ xhr[strAjaxData].xhrMonitoringState.stateChangeAttached = eventOn(xhr, "readystatechange", () => {
657
701
  try {
658
702
  if (xhr && xhr.readyState === 4 && _isMonitoredXhrInstance(xhr)) {
659
703
  _onAjaxComplete(xhr);
@@ -672,7 +716,7 @@ export class AjaxMonitor extends BaseTelemetryPlugin implements IDependenciesPlu
672
716
  });
673
717
  }
674
718
  }
675
- });
719
+ }, _evtNamespace);
676
720
  }
677
721
 
678
722
  function _getResponseText(xhr: XMLHttpRequestInstrumented) {
@@ -731,7 +775,9 @@ export class AjaxMonitor extends BaseTelemetryPlugin implements IDependenciesPlu
731
775
  const parts = line.split(": ");
732
776
  const header = parts.shift();
733
777
  const value = parts.join(": ");
734
- if(_canIncludeHeaders(header)) { responseHeaderMap[header] = value; }
778
+ if(_canIncludeHeaders(header)) {
779
+ responseHeaderMap[header] = value;
780
+ }
735
781
  });
736
782
 
737
783
  ajaxResponse.headerMap = responseHeaderMap;
@@ -759,9 +805,9 @@ export class AjaxMonitor extends BaseTelemetryPlugin implements IDependenciesPlu
759
805
  _self[strTrackDependencyDataInternal](dependency);
760
806
  } else {
761
807
  _reportXhrError(null, {
762
- requestSentTime: ajaxData.requestSentTime,
763
- responseFinishedTime: ajaxData.responseFinishedTime
764
- });
808
+ requestSentTime: ajaxData.requestSentTime,
809
+ responseFinishedTime: ajaxData.responseFinishedTime
810
+ });
765
811
  }
766
812
  } finally {
767
813
  // cleanup telemetry data
@@ -901,7 +947,9 @@ export class AjaxMonitor extends BaseTelemetryPlugin implements IDependenciesPlu
901
947
  if (_enableRequestHeaderTracking) {
902
948
  let headers = new Headers((init ? init.headers : 0) || (input instanceof Request ? (input.headers || {}) : {}));
903
949
  headers.forEach((value, key) => {
904
- if (_canIncludeHeaders(key)) { requestHeaders[key] = value; }
950
+ if (_canIncludeHeaders(key)) {
951
+ requestHeaders[key] = value;
952
+ }
905
953
  });
906
954
  }
907
955
 
@@ -1007,10 +1055,6 @@ export class AjaxMonitor extends BaseTelemetryPlugin implements IDependenciesPlu
1007
1055
  // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging
1008
1056
  }
1009
1057
 
1010
- public teardown():void {
1011
- // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging
1012
- }
1013
-
1014
1058
  public processTelemetry(item: ITelemetryItem, itemCtx?: IProcessTelemetryContext) {
1015
1059
  this.processNext(item, itemCtx);
1016
1060
  }
package/src/ajaxRecord.ts CHANGED
@@ -141,7 +141,7 @@ function _populatePerfData(ajaxData:ajaxRecord, dependency:IDependencyTelemetry)
141
141
  arrForEach(serverTiming, (value, idx) => {
142
142
  let name = normalizeJsName(value[strName] || "" + idx);
143
143
  let newValue = server[name] || {};
144
- objForEachKey(value, (key, val) => {
144
+ objForEachKey(value, (key, val: any) => {
145
145
  if (key !== strName && isString(val) || isNumber(val)) {
146
146
  if (newValue[key]) {
147
147
  val = newValue[key] + ";" + val;
package/types/ajax.d.ts CHANGED
@@ -22,7 +22,6 @@ export declare class AjaxMonitor extends BaseTelemetryPlugin implements IDepende
22
22
  priority: number;
23
23
  constructor();
24
24
  initialize(config: IConfiguration & IConfig, core: IAppInsightsCore, extensions: IPlugin[], pluginChain?: ITelemetryPluginChain): void;
25
- teardown(): void;
26
25
  processTelemetry(item: ITelemetryItem, itemCtx?: IProcessTelemetryContext): void;
27
26
  /**
28
27
  * Logs dependency call
@@ -5,7 +5,7 @@
5
5
  "toolPackages": [
6
6
  {
7
7
  "packageName": "@microsoft/api-extractor",
8
- "packageVersion": "7.19.4"
8
+ "packageVersion": "7.19.5"
9
9
  }
10
10
  ]
11
11
  }