@microsoft/applicationinsights-channel-js 3.0.4-nightly3.2309-09 → 3.0.4-nightly3.2309-10

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 (51) hide show
  1. package/browser/es5/{applicationinsights-channel-js.3.0.4-nightly3.2309-09.cjs.js → applicationinsights-channel-js.3.0.4-nightly3.2309-10.cjs.js} +187 -88
  2. package/browser/es5/{applicationinsights-channel-js.3.0.4-nightly3.2309-09.cjs.js.map → applicationinsights-channel-js.3.0.4-nightly3.2309-10.cjs.js.map} +1 -1
  3. package/browser/es5/{applicationinsights-channel-js.3.0.4-nightly3.2309-09.cjs.min.js → applicationinsights-channel-js.3.0.4-nightly3.2309-10.cjs.min.js} +3 -3
  4. package/browser/es5/{applicationinsights-channel-js.3.0.4-nightly3.2309-09.cjs.min.js.map → applicationinsights-channel-js.3.0.4-nightly3.2309-10.cjs.min.js.map} +1 -1
  5. package/browser/es5/{applicationinsights-channel-js.3.0.4-nightly3.2309-09.gbl.js → applicationinsights-channel-js.3.0.4-nightly3.2309-10.gbl.js} +189 -90
  6. package/browser/es5/{applicationinsights-channel-js.3.0.4-nightly3.2309-09.gbl.js.map → applicationinsights-channel-js.3.0.4-nightly3.2309-10.gbl.js.map} +1 -1
  7. package/browser/es5/applicationinsights-channel-js.3.0.4-nightly3.2309-10.gbl.min.js +6 -0
  8. package/browser/es5/{applicationinsights-channel-js.3.0.4-nightly3.2309-09.gbl.min.js.map → applicationinsights-channel-js.3.0.4-nightly3.2309-10.gbl.min.js.map} +1 -1
  9. package/browser/es5/applicationinsights-channel-js.3.0.4-nightly3.2309-10.integrity.json +66 -0
  10. package/browser/es5/{applicationinsights-channel-js.3.0.4-nightly3.2309-09.js → applicationinsights-channel-js.3.0.4-nightly3.2309-10.js} +189 -90
  11. package/browser/es5/{applicationinsights-channel-js.3.0.4-nightly3.2309-09.js.map → applicationinsights-channel-js.3.0.4-nightly3.2309-10.js.map} +1 -1
  12. package/browser/es5/applicationinsights-channel-js.3.0.4-nightly3.2309-10.min.js +6 -0
  13. package/browser/es5/{applicationinsights-channel-js.3.0.4-nightly3.2309-09.min.js.map → applicationinsights-channel-js.3.0.4-nightly3.2309-10.min.js.map} +1 -1
  14. package/browser/es5/applicationinsights-channel-js.3.cjs.js +186 -87
  15. package/browser/es5/applicationinsights-channel-js.3.cjs.js.map +1 -1
  16. package/browser/es5/applicationinsights-channel-js.3.cjs.min.js +2 -2
  17. package/browser/es5/applicationinsights-channel-js.3.cjs.min.js.map +1 -1
  18. package/browser/es5/applicationinsights-channel-js.3.gbl.js +188 -89
  19. package/browser/es5/applicationinsights-channel-js.3.gbl.js.map +1 -1
  20. package/browser/es5/applicationinsights-channel-js.3.gbl.min.js +2 -2
  21. package/browser/es5/applicationinsights-channel-js.3.gbl.min.js.map +1 -1
  22. package/browser/es5/applicationinsights-channel-js.3.integrity.json +25 -25
  23. package/browser/es5/applicationinsights-channel-js.3.js +188 -89
  24. package/browser/es5/applicationinsights-channel-js.3.js.map +1 -1
  25. package/browser/es5/applicationinsights-channel-js.3.min.js +2 -2
  26. package/browser/es5/applicationinsights-channel-js.3.min.js.map +1 -1
  27. package/dist/es5/applicationinsights-channel-js.js +186 -87
  28. package/dist/es5/applicationinsights-channel-js.js.map +1 -1
  29. package/dist/es5/applicationinsights-channel-js.min.js +2 -2
  30. package/dist/es5/applicationinsights-channel-js.min.js.map +1 -1
  31. package/dist-es5/EnvelopeCreator.js +2 -2
  32. package/dist-es5/EnvelopeCreator.js.map +1 -1
  33. package/dist-es5/Interfaces.js +1 -1
  34. package/dist-es5/InternalConstants.js +1 -1
  35. package/dist-es5/Offline.js +1 -1
  36. package/dist-es5/SendBuffer.js +1 -1
  37. package/dist-es5/Sender.js +198 -98
  38. package/dist-es5/Sender.js.map +1 -1
  39. package/dist-es5/Serializer.js +1 -1
  40. package/dist-es5/TelemetryProcessors/Sample.js +1 -1
  41. package/dist-es5/TelemetryProcessors/SamplingScoreGenerators/HashCodeScoreGenerator.js +1 -1
  42. package/dist-es5/TelemetryProcessors/SamplingScoreGenerators/SamplingScoreGenerator.js +1 -1
  43. package/dist-es5/__DynamicConstants.js +14 -12
  44. package/dist-es5/__DynamicConstants.js.map +1 -1
  45. package/dist-es5/applicationinsights-channel-js.js +1 -1
  46. package/package.json +3 -3
  47. package/types/applicationinsights-channel-js.d.ts +22 -1
  48. package/types/applicationinsights-channel-js.namespaced.d.ts +22 -1
  49. package/browser/es5/applicationinsights-channel-js.3.0.4-nightly3.2309-09.gbl.min.js +0 -6
  50. package/browser/es5/applicationinsights-channel-js.3.0.4-nightly3.2309-09.integrity.json +0 -66
  51. package/browser/es5/applicationinsights-channel-js.3.0.4-nightly3.2309-09.min.js +0 -6
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Application Insights JavaScript SDK - Channel, 3.0.4-nightly3.2309-09
2
+ * Application Insights JavaScript SDK - Channel, 3.0.4-nightly3.2309-10
3
3
  * Copyright (c) Microsoft and contributors. All rights reserved.
4
4
  */
5
5
  var _a, _b;
@@ -8,13 +8,13 @@ import dynamicProto from "@microsoft/dynamicproto-js";
8
8
  import { BreezeChannelIdentifier, DEFAULT_BREEZE_ENDPOINT, DEFAULT_BREEZE_PATH, DisabledPropertyName, Event, Exception, Metric, PageView, PageViewPerformance, ProcessLegacy, RemoteDependencyData, RequestHeaders, SampleRate, Trace, isInternalApplicationInsightsEndpoint, utlCanUseSessionStorage, utlSetStoragePrefix } from "@microsoft/applicationinsights-common";
9
9
  import { BaseTelemetryPlugin, _throwInternal, _warnToConsole, arrForEach, cfgDfBoolean, cfgDfValidate, createProcessTelemetryContext, createUniqueNamespace, dateNow, dumpObj, getExceptionName, getIEVersion, getJSON, getNavigator, getWindow, isArray, isBeaconsSupported, isFetchSupported, isNullOrUndefined, isXhrSupported, mergeEvtNamespace, objExtend, objKeys, onConfigChange, runTargetUnload, useXDomainRequest } from "@microsoft/applicationinsights-core-js";
10
10
  import { createPromise, doAwaitResponse } from "@nevware21/ts-async";
11
- import { isTruthy, objDeepFreeze, objDefine, scheduleTimeout } from "@nevware21/ts-utils";
11
+ import { isString, isTruthy, objDeepFreeze, objDefine, scheduleTimeout } from "@nevware21/ts-utils";
12
12
  import { DependencyEnvelopeCreator, EventEnvelopeCreator, ExceptionEnvelopeCreator, MetricEnvelopeCreator, PageViewEnvelopeCreator, PageViewPerformanceEnvelopeCreator, TraceEnvelopeCreator } from "./EnvelopeCreator";
13
13
  import { createOfflineListener } from "./Offline";
14
14
  import { ArraySendBuffer, SessionStorageSendBuffer } from "./SendBuffer";
15
15
  import { Serializer } from "./Serializer";
16
16
  import { Sample } from "./TelemetryProcessors/Sample";
17
- import { _DYN_BASE_TYPE, _DYN_BATCH_PAYLOADS, _DYN_BUFFER_OVERRIDE, _DYN_CLEAR, _DYN_CLEAR_SENT, _DYN_CONVERT_UNDEFINED, _DYN_COUNT, _DYN_CREATE_NEW, _DYN_CUSTOM_HEADERS, _DYN_DIAG_LOG, _DYN_DISABLE_XHR, _DYN_EMIT_LINE_DELIMITED_0, _DYN_ENABLE_SESSION_STORA4, _DYN_ENQUEUE, _DYN_EVENTS_LIMIT_IN_MEM, _DYN_EVENTS_SEND_REQUEST, _DYN_INSTRUMENTATION_KEY, _DYN_IS_BEACON_API_DISABL3, _DYN_IS_ONLINE, _DYN_ITEMS_ACCEPTED, _DYN_ITEMS_RECEIVED, _DYN_LENGTH, _DYN_MARK_AS_SENT, _DYN_MAX_BATCH_INTERVAL, _DYN_MAX_BATCH_SIZE_IN_BY1, _DYN_ONUNLOAD_DISABLE_BEA2, _DYN_ONUNLOAD_DISABLE_FET5, _DYN_PUSH, _DYN_SAMPLE_RATE, _DYN_SET_REQUEST_HEADER, _DYN_TAGS, _DYN_TRIGGER_SEND, _DYN__BUFFER, _DYN__ON_ERROR, _DYN__ON_PARTIAL_SUCCESS, _DYN__ON_SUCCESS, _DYN__SENDER, _DYN__XHR_READY_STATE_CHA6 } from "./__DynamicConstants";
17
+ import { _DYN_ALWAYS_USE_XHR_OVERR4, _DYN_BASE_TYPE, _DYN_BATCH_PAYLOADS, _DYN_BUFFER_OVERRIDE, _DYN_CLEAR, _DYN_CLEAR_SENT, _DYN_CONVERT_UNDEFINED, _DYN_COUNT, _DYN_CREATE_NEW, _DYN_CUSTOM_HEADERS, _DYN_DATA, _DYN_DIAG_LOG, _DYN_EMIT_LINE_DELIMITED_0, _DYN_ENABLE_SESSION_STORA5, _DYN_ENQUEUE, _DYN_EVENTS_LIMIT_IN_MEM, _DYN_EVENTS_SEND_REQUEST, _DYN_INSTRUMENTATION_KEY, _DYN_IS_BEACON_API_DISABL3, _DYN_IS_ONLINE, _DYN_ITEMS_ACCEPTED, _DYN_ITEMS_RECEIVED, _DYN_LENGTH, _DYN_MARK_AS_SENT, _DYN_MAX_BATCH_INTERVAL, _DYN_MAX_BATCH_SIZE_IN_BY1, _DYN_ONUNLOAD_DISABLE_BEA2, _DYN_ONUNLOAD_DISABLE_FET6, _DYN_ORI_PAYLOAD, _DYN_PUSH, _DYN_SAMPLE_RATE, _DYN_SEND_POST, _DYN_SET_REQUEST_HEADER, _DYN_TAGS, _DYN_TRIGGER_SEND, _DYN__BUFFER, _DYN__ON_ERROR, _DYN__ON_PARTIAL_SUCCESS, _DYN__ON_SUCCESS, _DYN__SENDER, _DYN__XHR_READY_STATE_CHA7 } from "./__DynamicConstants";
18
18
  var UNDEFINED_VALUE = undefined;
19
19
  var FetchSyncRequestSizeLimitBytes = 65000; // approx 64kb (the current Edge, Firefox and Chrome max limit)
20
20
  function _getResponseText(xhr) {
@@ -26,6 +26,9 @@ function _getResponseText(xhr) {
26
26
  }
27
27
  return null;
28
28
  }
29
+ function isOverrideFn(httpXHROverride) {
30
+ return httpXHROverride && httpXHROverride[_DYN_SEND_POST /* @min:%2esendPOST */];
31
+ }
29
32
  var defaultAppInsightsChannelConfig = objDeepFreeze((_a = {
30
33
  // Use the default value (handles empty string in the configuration)
31
34
  endpointUrl: cfgDfValidate(isTruthy, DEFAULT_BREEZE_ENDPOINT + DEFAULT_BREEZE_PATH)
@@ -34,11 +37,11 @@ var defaultAppInsightsChannelConfig = objDeepFreeze((_a = {
34
37
  _a[_DYN_MAX_BATCH_INTERVAL /* @min:maxBatchInterval */] = 15000,
35
38
  _a[_DYN_MAX_BATCH_SIZE_IN_BY1 /* @min:maxBatchSizeInBytes */] = 102400,
36
39
  _a.disableTelemetry = cfgDfBoolean(),
37
- _a[_DYN_ENABLE_SESSION_STORA4 /* @min:enableSessionStorageBuffer */] = cfgDfBoolean(true),
40
+ _a[_DYN_ENABLE_SESSION_STORA5 /* @min:enableSessionStorageBuffer */] = cfgDfBoolean(true),
38
41
  _a.isRetryDisabled = cfgDfBoolean(),
39
42
  _a[_DYN_IS_BEACON_API_DISABL3 /* @min:isBeaconApiDisabled */] = cfgDfBoolean(true),
40
- _a[_DYN_DISABLE_XHR /* @min:disableXhr */] = cfgDfBoolean(),
41
- _a[_DYN_ONUNLOAD_DISABLE_FET5 /* @min:onunloadDisableFetch */] = cfgDfBoolean(),
43
+ _a.disableXhr = cfgDfBoolean(),
44
+ _a[_DYN_ONUNLOAD_DISABLE_FET6 /* @min:onunloadDisableFetch */] = cfgDfBoolean(),
42
45
  _a[_DYN_ONUNLOAD_DISABLE_BEA2 /* @min:onunloadDisableBeacon */] = cfgDfBoolean(),
43
46
  _a[_DYN_INSTRUMENTATION_KEY /* @min:instrumentationKey */] = UNDEFINED_VALUE,
44
47
  _a.namePrefix = UNDEFINED_VALUE,
@@ -47,6 +50,8 @@ var defaultAppInsightsChannelConfig = objDeepFreeze((_a = {
47
50
  _a[_DYN_CONVERT_UNDEFINED /* @min:convertUndefined */] = UNDEFINED_VALUE,
48
51
  _a[_DYN_EVENTS_LIMIT_IN_MEM /* @min:eventsLimitInMem */] = 10000,
49
52
  _a[_DYN_BUFFER_OVERRIDE /* @min:bufferOverride */] = false,
53
+ _a.httpXHROverride = { isVal: isOverrideFn, v: UNDEFINED_VALUE },
54
+ _a[_DYN_ALWAYS_USE_XHR_OVERR4 /* @min:alwaysUseXhrOverride */] = cfgDfBoolean(),
50
55
  _a));
51
56
  function _chkSampling(value) {
52
57
  return !isNaN(value) && value > 0 && value <= 100;
@@ -76,7 +81,6 @@ var Sender = /** @class */ (function (_super) {
76
81
  var _stamp_specific_redirects;
77
82
  var _headers;
78
83
  var _syncFetchPayload = 0; // Keep track of the outstanding sync fetch payload total (as sync fetch has limits)
79
- var _fallbackSender; // The sender to use if the payload size is too large
80
84
  var _syncUnloadSender; // The identified sender to use for the synchronous unload stage
81
85
  var _offlineListener;
82
86
  var _evtNamespace;
@@ -94,6 +98,10 @@ var Sender = /** @class */ (function (_super) {
94
98
  var _bufferOverrideUsed;
95
99
  var _namePrefix;
96
100
  var _enableSendPromise;
101
+ var _alwaysUseCustomSend;
102
+ var _disableXhr;
103
+ var _fetchKeepAlive;
104
+ var _xhrSend;
97
105
  dynamicProto(Sender, _this, function (_self, _base) {
98
106
  _initDefaults();
99
107
  _self.pause = function () {
@@ -124,7 +132,7 @@ var Sender = /** @class */ (function (_super) {
124
132
  };
125
133
  _self.onunloadFlush = function () {
126
134
  if (!_paused) {
127
- if (_beaconSupported) {
135
+ if (_beaconSupported || _alwaysUseCustomSend) {
128
136
  try {
129
137
  return _self[_DYN_TRIGGER_SEND /* @min:%2etriggerSend */](true, _doUnloadSend, 2 /* SendRequestReason.Unload */);
130
138
  }
@@ -184,8 +192,10 @@ var Sender = /** @class */ (function (_super) {
184
192
  }
185
193
  _maxBatchSizeInBytes = senderConfig[_DYN_MAX_BATCH_SIZE_IN_BY1 /* @min:%2emaxBatchSizeInBytes */];
186
194
  _beaconSupported = (senderConfig[_DYN_ONUNLOAD_DISABLE_BEA2 /* @min:%2eonunloadDisableBeacon */] === false || senderConfig[_DYN_IS_BEACON_API_DISABL3 /* @min:%2eisBeaconApiDisabled */] === false) && isBeaconsSupported();
195
+ _alwaysUseCustomSend = senderConfig[_DYN_ALWAYS_USE_XHR_OVERR4 /* @min:%2ealwaysUseXhrOverride */];
196
+ _disableXhr = !!senderConfig.disableXhr;
187
197
  var bufferOverride = senderConfig[_DYN_BUFFER_OVERRIDE /* @min:%2ebufferOverride */];
188
- var canUseSessionStorage = !!senderConfig[_DYN_ENABLE_SESSION_STORA4 /* @min:%2eenableSessionStorageBuffer */] &&
198
+ var canUseSessionStorage = !!senderConfig[_DYN_ENABLE_SESSION_STORA5 /* @min:%2eenableSessionStorageBuffer */] &&
189
199
  (!!bufferOverride || utlCanUseSessionStorage());
190
200
  var namePrefix = senderConfig.namePrefix;
191
201
  //Note: emitLineDelimitedJson and eventsLimitInMem is directly accessed via config in senderBuffer
@@ -216,6 +226,7 @@ var Sender = /** @class */ (function (_super) {
216
226
  _namePrefix = namePrefix;
217
227
  _sessionStorageUsed = canUseSessionStorage;
218
228
  _bufferOverrideUsed = bufferOverride;
229
+ _fetchKeepAlive = !senderConfig[_DYN_ONUNLOAD_DISABLE_FET6 /* @min:%2eonunloadDisableFetch */] && isFetchSupported(true);
219
230
  _self._sample = new Sample(senderConfig.samplingPercentage, diagLog);
220
231
  _instrumentationKey = senderConfig[_DYN_INSTRUMENTATION_KEY /* @min:%2einstrumentationKey */];
221
232
  if (!_validateInstrumentationKey(_instrumentationKey, config)) {
@@ -231,39 +242,34 @@ var Sender = /** @class */ (function (_super) {
231
242
  _customHeaders = null;
232
243
  }
233
244
  _enableSendPromise = senderConfig.enableSendPromise;
234
- var sendPostFunc = null;
235
- if (!senderConfig[_DYN_DISABLE_XHR /* @min:%2edisableXhr */] && useXDomainRequest()) {
236
- sendPostFunc = _xdrSender; // IE 8 and 9
237
- }
238
- else if (!senderConfig[_DYN_DISABLE_XHR /* @min:%2edisableXhr */] && isXhrSupported()) {
239
- sendPostFunc = _xhrSender;
240
- }
241
- if (!sendPostFunc && isFetchSupported()) {
242
- sendPostFunc = _fetchSender;
243
- }
244
- // always fallback to XHR
245
- _fallbackSender = sendPostFunc || _xhrSender;
245
+ var customInterface = senderConfig.httpXHROverride;
246
+ var httpInterface = null;
247
+ var syncInterface = null;
248
+ httpInterface = _getSenderInterface([1 /* TransportType.Xhr */, 2 /* TransportType.Fetch */], false);
249
+ var xhrInterface = { sendPOST: _xhrSender };
250
+ _xhrSend = function (payload, isAsync) {
251
+ return _doSend(xhrInterface, payload, isAsync);
252
+ };
246
253
  if (!senderConfig[_DYN_IS_BEACON_API_DISABL3 /* @min:%2eisBeaconApiDisabled */] && isBeaconsSupported()) {
247
254
  // Config is set to always used beacon sending
248
- sendPostFunc = _beaconSender;
255
+ httpInterface = _getSenderInterface([3 /* TransportType.Beacon */], false);
249
256
  }
250
- _self[_DYN__SENDER /* @min:%2e_sender */] = sendPostFunc || _xhrSender;
251
- if (!senderConfig[_DYN_ONUNLOAD_DISABLE_FET5 /* @min:%2eonunloadDisableFetch */] && isFetchSupported(true)) {
257
+ httpInterface = _alwaysUseCustomSend ? customInterface : (httpInterface || customInterface || xhrInterface);
258
+ _self[_DYN__SENDER /* @min:%2e_sender */] = function (payload, isAsync) {
259
+ return _doSend(httpInterface, payload, isAsync);
260
+ };
261
+ if (_fetchKeepAlive) {
252
262
  // Try and use the fetch with keepalive
253
263
  _syncUnloadSender = _fetchKeepAliveSender;
254
264
  }
255
- else if (isBeaconsSupported()) {
256
- // Try and use sendBeacon
257
- _syncUnloadSender = _beaconSender;
258
- }
259
- else if (!senderConfig[_DYN_DISABLE_XHR /* @min:%2edisableXhr */] && useXDomainRequest()) {
260
- _syncUnloadSender = _xdrSender; // IE 8 and 9
265
+ syncInterface = _alwaysUseCustomSend ? customInterface : (_getSenderInterface([3 /* TransportType.Beacon */, 1 /* TransportType.Xhr */], true) || customInterface);
266
+ if ((_alwaysUseCustomSend || !_syncUnloadSender) && syncInterface) {
267
+ _syncUnloadSender = function (payload, isAsync) {
268
+ return _doSend(syncInterface, payload, isAsync);
269
+ };
261
270
  }
262
- else if (!senderConfig[_DYN_DISABLE_XHR /* @min:%2edisableXhr */] && isXhrSupported()) {
263
- _syncUnloadSender = _xhrSender;
264
- }
265
- else {
266
- _syncUnloadSender = _fallbackSender;
271
+ if (!_syncUnloadSender) {
272
+ _syncUnloadSender = _xhrSend;
267
273
  }
268
274
  _disableTelemetry = senderConfig.disableTelemetry;
269
275
  _convertUndefined = senderConfig[_DYN_CONVERT_UNDEFINED /* @min:%2econvertUndefined */] || UNDEFINED_VALUE;
@@ -356,7 +362,7 @@ var Sender = /** @class */ (function (_super) {
356
362
  /**
357
363
  * xhr state changes
358
364
  */
359
- _self[_DYN__XHR_READY_STATE_CHA6 /* @min:%2e_xhrReadyStateChange */] = function (xhr, payload, countOfItemsInPayload) {
365
+ _self[_DYN__XHR_READY_STATE_CHA7 /* @min:%2e_xhrReadyStateChange */] = function (xhr, payload, countOfItemsInPayload) {
360
366
  if (xhr.readyState === 4) {
361
367
  _checkResponsStatus(xhr.status, payload, xhr.responseURL, countOfItemsInPayload, _formatErrorMessageXhr(xhr), _getResponseText(xhr) || xhr.response);
362
368
  }
@@ -476,6 +482,84 @@ var Sender = /** @class */ (function (_super) {
476
482
  function _isSampledIn(envelope) {
477
483
  return _self._sample.isSampledIn(envelope);
478
484
  }
485
+ function _getSenderInterface(transports, syncSupport) {
486
+ var _a;
487
+ var transportType = null;
488
+ var sendPostFunc = null;
489
+ var lp = 0;
490
+ while (sendPostFunc == null && lp < transports[_DYN_LENGTH /* @min:%2elength */]) {
491
+ transportType = transports[lp];
492
+ if (!_disableXhr && transportType === 1 /* TransportType.Xhr */) {
493
+ if (useXDomainRequest()) {
494
+ // IE 8 and 9
495
+ sendPostFunc = _xdrSender;
496
+ }
497
+ else if (isXhrSupported()) {
498
+ sendPostFunc = _xhrSender;
499
+ }
500
+ }
501
+ else if (transportType === 2 /* TransportType.Fetch */ && isFetchSupported(syncSupport)) {
502
+ sendPostFunc = _fetchSender;
503
+ }
504
+ else if (isBeaconsSupported() && transportType === 3 /* TransportType.Beacon */) {
505
+ sendPostFunc = _beaconSender;
506
+ }
507
+ lp++;
508
+ }
509
+ if (sendPostFunc) {
510
+ return _a = {},
511
+ _a[_DYN_SEND_POST /* @min:sendPOST */] = sendPostFunc,
512
+ _a;
513
+ }
514
+ return null;
515
+ }
516
+ function _getOnComplete(payload, status, headers, response) {
517
+ // ***********************************************************************************************
518
+ //TODO: handle other status codes
519
+ if (status === 200 && payload) {
520
+ _self._onSuccess(payload, payload[_DYN_LENGTH /* @min:%2elength */]);
521
+ }
522
+ response && _self[_DYN__ON_ERROR /* @min:%2e_onError */](payload, response);
523
+ }
524
+ function _doSend(sendInterface, payload, isAsync) {
525
+ var onComplete = function (status, headers, response) {
526
+ return _getOnComplete(payload, status, headers, response);
527
+ };
528
+ var payloadData = _getPayload(payload);
529
+ var sendPostFunc = sendInterface && sendInterface[_DYN_SEND_POST /* @min:%2esendPOST */];
530
+ if (sendPostFunc && payloadData) {
531
+ // ***********************************************************************************************
532
+ // mark payload as sent at the beginning of calling each send function
533
+ _self._buffer[_DYN_MARK_AS_SENT /* @min:%2emarkAsSent */](payload);
534
+ return sendPostFunc(payloadData, onComplete, !isAsync);
535
+ }
536
+ return null;
537
+ }
538
+ function _getPayload(payload) {
539
+ var _a;
540
+ if (isArray(payload) && payload[_DYN_LENGTH /* @min:%2elength */] > 0) {
541
+ var batch = _self._buffer[_DYN_BATCH_PAYLOADS /* @min:%2ebatchPayloads */](payload);
542
+ var payloadData = (_a = {},
543
+ _a[_DYN_DATA /* @min:data */] = batch,
544
+ _a.urlString = _endpointUrl,
545
+ _a.headers = _headers,
546
+ _a.disableXhrSync = _disableXhr,
547
+ _a.disableFetchKeepAlive = !_fetchKeepAlive,
548
+ _a[_DYN_ORI_PAYLOAD /* @min:oriPayload */] = payload,
549
+ _a);
550
+ return payloadData;
551
+ }
552
+ return null;
553
+ }
554
+ /**
555
+ * Send fetch API request
556
+ * @param payload - {string} - The data payload to be sent.
557
+ * @param oncomplete - {function} on complete function
558
+ * @param sync - {boolean} - not used
559
+ */
560
+ function _fetchSender(payload, oncomplete, sync) {
561
+ return _doFetchSender(payload, oncomplete, false);
562
+ }
479
563
  function _checkMaxSize(incomingPayload) {
480
564
  var incomingSize = incomingPayload ? incomingPayload[_DYN_LENGTH /* @min:%2elength */] : 0;
481
565
  if ((_self[_DYN__BUFFER /* @min:%2e_buffer */].size() + incomingSize) > _maxBatchSizeInBytes) {
@@ -557,55 +641,69 @@ var Sender = /** @class */ (function (_super) {
557
641
  }
558
642
  return false;
559
643
  }
644
+ function _doOnComplete(oncomplete, status, headers, response) {
645
+ try {
646
+ oncomplete(status, headers, response);
647
+ }
648
+ catch (e) {
649
+ // eslint-disable-next-line no-empty
650
+ }
651
+ }
560
652
  function _doUnloadSend(payload, isAsync) {
653
+ var onComplete = function (status, headers, response) {
654
+ return _getOnComplete(payload, status, headers, response);
655
+ };
561
656
  if (_syncUnloadSender) {
562
657
  // We are unloading so always call the sender with sync set to false
563
658
  _syncUnloadSender(payload, false);
564
659
  }
565
660
  else {
566
661
  // Fallback to the previous beacon Sender (which causes a CORB warning on chrome now)
567
- _beaconSender(payload, isAsync);
662
+ var payloadData = _getPayload(payload);
663
+ _beaconSender(payloadData, onComplete, !isAsync);
568
664
  }
569
665
  }
570
- function _doBeaconSend(payload) {
666
+ function _doBeaconSend(payload, oncomplete) {
571
667
  var nav = getNavigator();
572
- var buffer = _self[_DYN__BUFFER /* @min:%2e_buffer */];
573
668
  var url = _endpointUrl;
574
- var batch = _self._buffer[_DYN_BATCH_PAYLOADS /* @min:%2ebatchPayloads */](payload);
575
669
  // Chrome only allows CORS-safelisted values for the sendBeacon data argument
576
670
  // see: https://bugs.chromium.org/p/chromium/issues/detail?id=720283
577
- var plainTextBatch = new Blob([batch], { type: "text/plain;charset=UTF-8" });
671
+ var plainTextBatch = new Blob([payload], { type: "text/plain;charset=UTF-8" });
578
672
  // The sendBeacon method returns true if the user agent is able to successfully queue the data for transfer. Otherwise it returns false.
579
673
  var queued = nav.sendBeacon(url, plainTextBatch);
580
674
  if (queued) {
581
- buffer[_DYN_MARK_AS_SENT /* @min:%2emarkAsSent */](payload);
582
- // no response from beaconSender, clear buffer
583
- _self._onSuccess(payload, payload[_DYN_LENGTH /* @min:%2elength */]);
675
+ oncomplete(200, {}, payload);
584
676
  }
585
677
  return queued;
586
678
  }
587
679
  /**
588
680
  * Send Beacon API request
589
681
  * @param payload - {string} - The data payload to be sent.
590
- * @param isAsync - {boolean} - not used
682
+ * @param sync - {boolean} - not used
591
683
  * Note: Beacon API does not support custom headers and we are not able to get
592
684
  * appId from the backend for the correct correlation.
593
685
  */
594
- function _beaconSender(payload, isAsync) {
595
- if (isArray(payload) && payload[_DYN_LENGTH /* @min:%2elength */] > 0) {
686
+ function _beaconSender(payload, oncomplete, sync) {
687
+ var internalPayload = payload;
688
+ var data = internalPayload && internalPayload[_DYN_DATA /* @min:%2edata */];
689
+ if (isString(data) && data[_DYN_LENGTH /* @min:%2elength */] > 0) {
596
690
  // The sendBeacon method returns true if the user agent is able to successfully queue the data for transfer. Otherwise it returns false.
597
- if (!_doBeaconSend(payload)) {
691
+ if (!_doBeaconSend(data, oncomplete)) {
598
692
  // Failed to send entire payload so try and split data and try to send as much events as possible
599
693
  var droppedPayload = [];
600
- for (var lp = 0; lp < payload[_DYN_LENGTH /* @min:%2elength */]; lp++) {
601
- var thePayload = payload[lp];
602
- if (!_doBeaconSend([thePayload])) {
603
- // Can't send anymore, so split the batch and drop the rest
604
- droppedPayload[_DYN_PUSH /* @min:%2epush */](thePayload);
694
+ var oriPayload = internalPayload[_DYN_ORI_PAYLOAD /* @min:%2eoriPayload */];
695
+ if (oriPayload[_DYN_LENGTH /* @min:%2elength */] > 0) {
696
+ for (var lp = 0; lp < data[_DYN_LENGTH /* @min:%2elength */]; lp++) {
697
+ var thePayload = payload[lp];
698
+ var batch = _self._buffer[_DYN_BATCH_PAYLOADS /* @min:%2ebatchPayloads */](thePayload);
699
+ if (!_doBeaconSend(batch, oncomplete)) {
700
+ // Can't send anymore, so split the batch and drop the rest
701
+ droppedPayload[_DYN_PUSH /* @min:%2epush */](thePayload);
702
+ }
605
703
  }
606
704
  }
607
705
  if (droppedPayload[_DYN_LENGTH /* @min:%2elength */] > 0) {
608
- _fallbackSender && _fallbackSender(droppedPayload, true);
706
+ _xhrSend && _xhrSend(droppedPayload, true);
609
707
  _throwInternal(_self[_DYN_DIAG_LOG /* @min:%2ediagLog */](), 2 /* eLoggingSeverity.WARNING */, 40 /* _eInternalMessageId.TransmissionFailed */, ". " + "Failed to send telemetry with Beacon API, retried with normal sender.");
610
708
  }
611
709
  }
@@ -614,9 +712,10 @@ var Sender = /** @class */ (function (_super) {
614
712
  /**
615
713
  * Send XMLHttpRequest
616
714
  * @param payload - {string} - The data payload to be sent.
617
- * @param isAsync - {boolean} - Indicates if the request should be sent asynchronously
715
+ * @param sync - {boolean} - Indicates if the request should be sent synchronously
618
716
  */
619
- function _xhrSender(payload, isAsync) {
717
+ function _xhrSender(payload, oncomplete, sync) {
718
+ var internalPayload = payload;
620
719
  var thePromise;
621
720
  var resolveFunc;
622
721
  var rejectFunc;
@@ -629,7 +728,7 @@ var Sender = /** @class */ (function (_super) {
629
728
  // If the environment has locked down the XMLHttpRequest (preventExtensions and/or freeze), this would
630
729
  // cause the request to fail and we no telemetry would be sent
631
730
  }
632
- xhr.open("POST", endPointUrl, isAsync);
731
+ xhr.open("POST", endPointUrl, !sync);
633
732
  xhr[_DYN_SET_REQUEST_HEADER /* @min:%2esetRequestHeader */]("Content-type", "application/json");
634
733
  // append Sdk-Context request header only in case of breeze endpoint
635
734
  if (isInternalApplicationInsightsEndpoint(endPointUrl)) {
@@ -639,43 +738,45 @@ var Sender = /** @class */ (function (_super) {
639
738
  xhr[_DYN_SET_REQUEST_HEADER /* @min:%2esetRequestHeader */](headerName, _headers[headerName]);
640
739
  });
641
740
  xhr.onreadystatechange = function () {
642
- _self._xhrReadyStateChange(xhr, payload, payload[_DYN_LENGTH /* @min:%2elength */]);
741
+ var oriPayload = internalPayload[_DYN_ORI_PAYLOAD /* @min:%2eoriPayload */];
742
+ _self._xhrReadyStateChange(xhr, oriPayload, oriPayload[_DYN_LENGTH /* @min:%2elength */]);
643
743
  if (xhr.readyState === 4) {
644
744
  resolveFunc && resolveFunc(true);
645
745
  }
646
746
  };
647
747
  xhr.onerror = function (event) {
648
- _self[_DYN__ON_ERROR /* @min:%2e_onError */](payload, _formatErrorMessageXhr(xhr), event);
748
+ _doOnComplete(oncomplete, 400, {}, _formatErrorMessageXhr(xhr));
649
749
  rejectFunc && rejectFunc(event);
650
750
  };
651
- if (isAsync && _enableSendPromise) {
751
+ if (!sync && _enableSendPromise) {
652
752
  thePromise = createPromise(function (resolve, reject) {
653
753
  resolveFunc = resolve;
654
754
  rejectFunc = reject;
655
755
  });
656
756
  }
657
- // compose an array of payloads
658
- var batch = _self._buffer[_DYN_BATCH_PAYLOADS /* @min:%2ebatchPayloads */](payload);
659
- xhr.send(batch);
660
- _self._buffer[_DYN_MARK_AS_SENT /* @min:%2emarkAsSent */](payload);
757
+ xhr.send(payload[_DYN_DATA /* @min:%2edata */]);
661
758
  return thePromise;
662
759
  }
663
760
  function _fetchKeepAliveSender(payload, isAsync) {
761
+ var onComplete = function (status, headers, response) {
762
+ return _getOnComplete(payload, status, headers, response);
763
+ };
664
764
  if (isArray(payload)) {
665
765
  var payloadSize = payload[_DYN_LENGTH /* @min:%2elength */];
666
766
  for (var lp = 0; lp < payload[_DYN_LENGTH /* @min:%2elength */]; lp++) {
667
767
  payloadSize += payload[lp][_DYN_LENGTH /* @min:%2elength */];
668
768
  }
769
+ var payloadData = _getPayload(payload);
669
770
  if ((_syncFetchPayload + payloadSize) <= FetchSyncRequestSizeLimitBytes) {
670
- _doFetchSender(payload, false);
771
+ _doFetchSender(payloadData, onComplete, true);
671
772
  }
672
773
  else if (isBeaconsSupported()) {
673
774
  // Fallback to beacon sender as we at least get told which events can't be scheduled
674
- _beaconSender(payload, isAsync);
775
+ _beaconSender(payloadData, onComplete, !isAsync);
675
776
  }
676
777
  else {
677
778
  // Payload is going to be too big so just try and send via XHR
678
- _fallbackSender && _fallbackSender(payload, true);
779
+ _xhrSend && _xhrSend(payload, true);
679
780
  _throwInternal(_self[_DYN_DIAG_LOG /* @min:%2ediagLog */](), 2 /* eLoggingSeverity.WARNING */, 40 /* _eInternalMessageId.TransmissionFailed */, ". " + "Failed to send telemetry with Beacon API, retried with xhrSender.");
680
781
  }
681
782
  }
@@ -683,20 +784,13 @@ var Sender = /** @class */ (function (_super) {
683
784
  /**
684
785
  * Send fetch API request
685
786
  * @param payload - {string} - The data payload to be sent.
686
- * @param isAsync - {boolean} - not used
687
- */
688
- function _fetchSender(payload, isAsync) {
689
- return _doFetchSender(payload, true);
690
- }
691
- /**
692
- * Send fetch API request
693
- * @param payload - {string} - The data payload to be sent.
694
- * @param isAsync - {boolean} - For fetch this identifies whether we are "unloading" (false) or a normal request
787
+ * @param sync - {boolean} - For fetch this identifies whether we are "unloading" (false) or a normal request
695
788
  */
696
- function _doFetchSender(payload, isAsync) {
789
+ function _doFetchSender(payload, oncomplete, sync) {
697
790
  var _a;
698
791
  var endPointUrl = _endpointUrl;
699
- var batch = _self._buffer[_DYN_BATCH_PAYLOADS /* @min:%2ebatchPayloads */](payload);
792
+ var internalPayload = payload;
793
+ var batch = internalPayload[_DYN_DATA /* @min:%2edata */];
700
794
  var plainTextBatch = new Blob([batch], { type: "application/json" });
701
795
  var thePromise;
702
796
  var resolveFunc;
@@ -720,7 +814,7 @@ var Sender = /** @class */ (function (_super) {
720
814
  _a[DisabledPropertyName] = true // Mark so we don't attempt to track this request
721
815
  ,
722
816
  _a);
723
- if (!isAsync) {
817
+ if (sync) {
724
818
  init.keepalive = true;
725
819
  // As a sync request (during unload), it is unlikely that we will get a chance to process the response so
726
820
  // just like beacon send assume that the events have been accepted and processed
@@ -736,8 +830,7 @@ var Sender = /** @class */ (function (_super) {
736
830
  // If the environment has locked down the XMLHttpRequest (preventExtensions and/or freeze), this would
737
831
  // cause the request to fail and we no telemetry would be sent
738
832
  }
739
- _self._buffer[_DYN_MARK_AS_SENT /* @min:%2emarkAsSent */](payload);
740
- if (isAsync && _enableSendPromise) {
833
+ if (!sync && _enableSendPromise) {
741
834
  thePromise = createPromise(function (resolve, reject) {
742
835
  resolveFunc = resolve;
743
836
  rejectFunc = reject;
@@ -745,7 +838,7 @@ var Sender = /** @class */ (function (_super) {
745
838
  }
746
839
  try {
747
840
  doAwaitResponse(fetch(request), function (result) {
748
- if (!isAsync) {
841
+ if (sync) {
749
842
  _syncFetchPayload -= batchLength;
750
843
  batchLength = 0;
751
844
  }
@@ -759,18 +852,19 @@ var Sender = /** @class */ (function (_super) {
759
852
  * or if anything prevented the request from completing.
760
853
  */
761
854
  if (!response_1.ok) {
762
- _self[_DYN__ON_ERROR /* @min:%2e_onError */](payload, response_1.statusText);
855
+ _doOnComplete(oncomplete, 400, {}, response_1.statusText);
763
856
  resolveFunc && resolveFunc(false);
764
857
  }
765
858
  else {
766
859
  doAwaitResponse(response_1.text(), function (resp) {
767
- _checkResponsStatus(response_1.status, payload, response_1.url, payload[_DYN_LENGTH /* @min:%2elength */], response_1.statusText, resp.value || "");
860
+ var oriPayload = internalPayload[_DYN_ORI_PAYLOAD /* @min:%2eoriPayload */];
861
+ _checkResponsStatus(response_1.status, oriPayload, response_1.url, oriPayload[_DYN_LENGTH /* @min:%2elength */], response_1.statusText, resp.value || "");
768
862
  resolveFunc && resolveFunc(true);
769
863
  });
770
864
  }
771
865
  }
772
866
  else {
773
- _self[_DYN__ON_ERROR /* @min:%2e_onError */](payload, result.reason && result.reason.message);
867
+ _doOnComplete(oncomplete, 400, {}, result.reason && result.reason.message);
774
868
  rejectFunc && rejectFunc(result.reason);
775
869
  }
776
870
  }
@@ -778,14 +872,14 @@ var Sender = /** @class */ (function (_super) {
778
872
  }
779
873
  catch (e) {
780
874
  if (!responseHandled) {
781
- _self[_DYN__ON_ERROR /* @min:%2e_onError */](payload, dumpObj(e));
875
+ _doOnComplete(oncomplete, 400, {}, dumpObj(e));
782
876
  rejectFunc && rejectFunc(e);
783
877
  }
784
878
  }
785
879
  if (ignoreResponse && !responseHandled) {
786
880
  // Assume success during unload processing as we most likely won't get the response
787
881
  responseHandled = true;
788
- _self._onSuccess(payload, payload[_DYN_LENGTH /* @min:%2elength */]);
882
+ _doOnComplete(oncomplete, 200, {});
789
883
  resolveFunc && resolveFunc(true);
790
884
  }
791
885
  return thePromise;
@@ -894,35 +988,39 @@ var Sender = /** @class */ (function (_super) {
894
988
  /**
895
989
  * Send XDomainRequest
896
990
  * @param payload - {string} - The data payload to be sent.
897
- * @param isAsync - {boolean} - Indicates if the request should be sent asynchronously
991
+ * @param sync - {boolean} - Indicates if the request should be sent synchronously
898
992
  *
899
993
  * Note: XDomainRequest does not support sync requests. This 'isAsync' parameter is added
900
994
  * to maintain consistency with the xhrSender's contract
901
995
  * Note: XDomainRequest does not support custom headers and we are not able to get
902
996
  * appId from the backend for the correct correlation.
903
997
  */
904
- function _xdrSender(payload, isAsync) {
905
- var buffer = _self[_DYN__BUFFER /* @min:%2e_buffer */];
998
+ function _xdrSender(payload, oncomplete, sync) {
999
+ var internalPayload = payload;
906
1000
  var _window = getWindow();
907
1001
  var xdr = new XDomainRequest();
1002
+ var data = internalPayload[_DYN_DATA /* @min:%2edata */];
908
1003
  // NOTE: xdr may send previous retry payload to new endpoint since we are not able to check response URL
909
- xdr.onload = function () { return _self._xdrOnLoad(xdr, payload); };
910
- xdr.onerror = function (event) { return _self[_DYN__ON_ERROR /* @min:%2e_onError */](payload, _formatErrorMessageXdr(xdr), event); };
1004
+ xdr.onload = function () {
1005
+ var oriPayload = internalPayload[_DYN_ORI_PAYLOAD /* @min:%2eoriPayload */];
1006
+ // we will assume onload means the request succeeded.
1007
+ _self._xdrOnLoad(xdr, oriPayload);
1008
+ };
1009
+ xdr.onerror = function () {
1010
+ _doOnComplete(oncomplete, 400, {}, _formatErrorMessageXdr(xdr));
1011
+ };
911
1012
  // XDomainRequest requires the same protocol as the hosting page.
912
1013
  // If the protocol doesn't match, we can't send the telemetry :(.
913
1014
  var hostingProtocol = _window && _window.location && _window.location.protocol || "";
914
1015
  if (_endpointUrl.lastIndexOf(hostingProtocol, 0) !== 0) {
915
1016
  _throwInternal(_self[_DYN_DIAG_LOG /* @min:%2ediagLog */](), 2 /* eLoggingSeverity.WARNING */, 40 /* _eInternalMessageId.TransmissionFailed */, ". " +
916
1017
  "Cannot send XDomain request. The endpoint URL protocol doesn't match the hosting page protocol.");
917
- buffer[_DYN_CLEAR /* @min:%2eclear */]();
1018
+ _self._buffer[_DYN_CLEAR /* @min:%2eclear */]();
918
1019
  return;
919
1020
  }
920
1021
  var endpointUrl = _endpointUrl.replace(/^(https?:)/, "");
921
1022
  xdr.open("POST", endpointUrl);
922
- // compose an array of payloads
923
- var batch = buffer[_DYN_BATCH_PAYLOADS /* @min:%2ebatchPayloads */](payload);
924
- xdr.send(batch);
925
- buffer[_DYN_MARK_AS_SENT /* @min:%2emarkAsSent */](payload);
1023
+ xdr.send(data);
926
1024
  }
927
1025
  function _formatErrorMessageXdr(xdr, message) {
928
1026
  if (xdr) {
@@ -979,7 +1077,6 @@ var Sender = /** @class */ (function (_super) {
979
1077
  _serializer = null;
980
1078
  _stamp_specific_redirects = 0;
981
1079
  _syncFetchPayload = 0;
982
- _fallbackSender = null;
983
1080
  _syncUnloadSender = null;
984
1081
  _evtNamespace = null;
985
1082
  _endpointUrl = null;
@@ -993,6 +1090,9 @@ var Sender = /** @class */ (function (_super) {
993
1090
  _isRetryDisabled = false;
994
1091
  _sessionStorageUsed = null;
995
1092
  _namePrefix = UNDEFINED_VALUE;
1093
+ _disableXhr = false;
1094
+ _fetchKeepAlive = false;
1095
+ _xhrSend = null;
996
1096
  objDefine(_self, "_senderConfig", {
997
1097
  g: function () {
998
1098
  return objExtend({}, defaultAppInsightsChannelConfig);