@microsoft/applicationinsights-channel-js 3.0.4-nightly3.2309-08 → 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.
- package/browser/es5/{applicationinsights-channel-js.3.0.4-nightly3.2309-08.js → applicationinsights-channel-js.3.0.4-nightly3.2309-10.cjs.js} +187 -115
- package/browser/es5/{applicationinsights-channel-js.3.0.4-nightly3.2309-08.cjs.js.map → applicationinsights-channel-js.3.0.4-nightly3.2309-10.cjs.js.map} +1 -1
- package/browser/es5/{applicationinsights-channel-js.3.0.4-nightly3.2309-08.cjs.min.js → applicationinsights-channel-js.3.0.4-nightly3.2309-10.cjs.min.js} +3 -3
- package/browser/es5/{applicationinsights-channel-js.3.0.4-nightly3.2309-08.cjs.min.js.map → applicationinsights-channel-js.3.0.4-nightly3.2309-10.cjs.min.js.map} +1 -1
- package/browser/es5/{applicationinsights-channel-js.3.0.4-nightly3.2309-08.gbl.js → applicationinsights-channel-js.3.0.4-nightly3.2309-10.gbl.js} +189 -90
- package/browser/es5/{applicationinsights-channel-js.3.0.4-nightly3.2309-08.gbl.js.map → applicationinsights-channel-js.3.0.4-nightly3.2309-10.gbl.js.map} +1 -1
- package/browser/es5/applicationinsights-channel-js.3.0.4-nightly3.2309-10.gbl.min.js +6 -0
- package/browser/es5/{applicationinsights-channel-js.3.0.4-nightly3.2309-08.gbl.min.js.map → applicationinsights-channel-js.3.0.4-nightly3.2309-10.gbl.min.js.map} +1 -1
- package/browser/es5/applicationinsights-channel-js.3.0.4-nightly3.2309-10.integrity.json +66 -0
- package/browser/es5/{applicationinsights-channel-js.3.0.4-nightly3.2309-08.cjs.js → applicationinsights-channel-js.3.0.4-nightly3.2309-10.js} +214 -88
- package/browser/es5/{applicationinsights-channel-js.3.0.4-nightly3.2309-08.js.map → applicationinsights-channel-js.3.0.4-nightly3.2309-10.js.map} +1 -1
- package/browser/es5/applicationinsights-channel-js.3.0.4-nightly3.2309-10.min.js +6 -0
- package/browser/es5/{applicationinsights-channel-js.3.0.4-nightly3.2309-08.min.js.map → applicationinsights-channel-js.3.0.4-nightly3.2309-10.min.js.map} +1 -1
- package/browser/es5/applicationinsights-channel-js.3.cjs.js +186 -87
- package/browser/es5/applicationinsights-channel-js.3.cjs.js.map +1 -1
- package/browser/es5/applicationinsights-channel-js.3.cjs.min.js +2 -2
- package/browser/es5/applicationinsights-channel-js.3.cjs.min.js.map +1 -1
- package/browser/es5/applicationinsights-channel-js.3.gbl.js +188 -89
- package/browser/es5/applicationinsights-channel-js.3.gbl.js.map +1 -1
- package/browser/es5/applicationinsights-channel-js.3.gbl.min.js +2 -2
- package/browser/es5/applicationinsights-channel-js.3.gbl.min.js.map +1 -1
- package/browser/es5/applicationinsights-channel-js.3.integrity.json +25 -25
- package/browser/es5/applicationinsights-channel-js.3.js +188 -89
- package/browser/es5/applicationinsights-channel-js.3.js.map +1 -1
- package/browser/es5/applicationinsights-channel-js.3.min.js +2 -2
- package/browser/es5/applicationinsights-channel-js.3.min.js.map +1 -1
- package/dist/es5/applicationinsights-channel-js.js +186 -87
- package/dist/es5/applicationinsights-channel-js.js.map +1 -1
- package/dist/es5/applicationinsights-channel-js.min.js +2 -2
- package/dist/es5/applicationinsights-channel-js.min.js.map +1 -1
- package/dist-es5/EnvelopeCreator.js +2 -2
- package/dist-es5/EnvelopeCreator.js.map +1 -1
- package/dist-es5/Interfaces.js +1 -1
- package/dist-es5/InternalConstants.js +1 -1
- package/dist-es5/Offline.js +1 -1
- package/dist-es5/SendBuffer.js +1 -1
- package/dist-es5/Sender.js +198 -98
- package/dist-es5/Sender.js.map +1 -1
- package/dist-es5/Serializer.js +1 -1
- package/dist-es5/TelemetryProcessors/Sample.js +1 -1
- package/dist-es5/TelemetryProcessors/SamplingScoreGenerators/HashCodeScoreGenerator.js +1 -1
- package/dist-es5/TelemetryProcessors/SamplingScoreGenerators/SamplingScoreGenerator.js +1 -1
- package/dist-es5/__DynamicConstants.js +14 -12
- package/dist-es5/__DynamicConstants.js.map +1 -1
- package/dist-es5/applicationinsights-channel-js.js +1 -1
- package/package.json +3 -3
- package/types/applicationinsights-channel-js.d.ts +22 -1
- package/types/applicationinsights-channel-js.namespaced.d.ts +22 -1
- package/browser/es5/applicationinsights-channel-js.3.0.4-nightly3.2309-08.gbl.min.js +0 -6
- package/browser/es5/applicationinsights-channel-js.3.0.4-nightly3.2309-08.integrity.json +0 -66
- package/browser/es5/applicationinsights-channel-js.3.0.4-nightly3.2309-08.min.js +0 -6
package/dist-es5/Sender.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Application Insights JavaScript SDK - Channel, 3.0.4-nightly3.2309-
|
|
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,
|
|
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[
|
|
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
|
|
41
|
-
_a[
|
|
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[
|
|
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
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
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
|
-
|
|
255
|
+
httpInterface = _getSenderInterface([3 /* TransportType.Beacon */], false);
|
|
249
256
|
}
|
|
250
|
-
|
|
251
|
-
|
|
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
|
-
|
|
256
|
-
|
|
257
|
-
_syncUnloadSender =
|
|
258
|
-
|
|
259
|
-
|
|
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
|
-
|
|
263
|
-
_syncUnloadSender =
|
|
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[
|
|
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
|
-
|
|
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([
|
|
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
|
-
|
|
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
|
|
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,
|
|
595
|
-
|
|
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(
|
|
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
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
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
|
-
|
|
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
|
|
715
|
+
* @param sync - {boolean} - Indicates if the request should be sent synchronously
|
|
618
716
|
*/
|
|
619
|
-
function _xhrSender(payload,
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
748
|
+
_doOnComplete(oncomplete, 400, {}, _formatErrorMessageXhr(xhr));
|
|
649
749
|
rejectFunc && rejectFunc(event);
|
|
650
750
|
};
|
|
651
|
-
if (
|
|
751
|
+
if (!sync && _enableSendPromise) {
|
|
652
752
|
thePromise = createPromise(function (resolve, reject) {
|
|
653
753
|
resolveFunc = resolve;
|
|
654
754
|
rejectFunc = reject;
|
|
655
755
|
});
|
|
656
756
|
}
|
|
657
|
-
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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
|
|
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,
|
|
789
|
+
function _doFetchSender(payload, oncomplete, sync) {
|
|
697
790
|
var _a;
|
|
698
791
|
var endPointUrl = _endpointUrl;
|
|
699
|
-
var
|
|
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 (
|
|
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
|
-
|
|
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 (
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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,
|
|
905
|
-
var
|
|
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 () {
|
|
910
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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);
|