@microsoft/1ds-post-js 3.1.8 → 3.1.11
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/README.md +124 -5
- package/bundle/{ms.post-3.1.8.gbl.js → ms.post-3.1.11.gbl.js} +353 -172
- package/bundle/ms.post-3.1.11.gbl.js.map +1 -0
- package/bundle/ms.post-3.1.11.gbl.min.js +7 -0
- package/bundle/ms.post-3.1.11.gbl.min.js.map +1 -0
- package/bundle/ms.post-3.1.11.integrity.json +46 -0
- package/bundle/{ms.post-3.1.8.js → ms.post-3.1.11.js} +353 -172
- package/bundle/ms.post-3.1.11.js.map +1 -0
- package/bundle/ms.post-3.1.11.min.js +7 -0
- package/bundle/ms.post-3.1.11.min.js.map +1 -0
- package/bundle/ms.post.gbl.js +352 -171
- package/bundle/ms.post.gbl.js.map +1 -1
- package/bundle/ms.post.gbl.min.js +2 -2
- package/bundle/ms.post.gbl.min.js.map +1 -1
- package/bundle/ms.post.integrity.json +17 -17
- package/bundle/ms.post.js +352 -171
- package/bundle/ms.post.js.map +1 -1
- package/bundle/ms.post.min.js +2 -2
- package/bundle/ms.post.min.js.map +1 -1
- package/dist/ms.post.js +238 -116
- package/dist/ms.post.js.map +1 -1
- package/dist/ms.post.min.js +2 -2
- package/dist/ms.post.min.js.map +1 -1
- package/dist-esm/src/BatchNotificationActions.js +1 -1
- package/dist-esm/src/ClockSkewManager.js +1 -1
- package/dist-esm/src/Constants.d.ts +25 -0
- package/dist-esm/src/Constants.js +31 -0
- package/dist-esm/src/Constants.js.map +1 -0
- package/dist-esm/src/DataModels.d.ts +55 -0
- package/dist-esm/src/DataModels.js +1 -1
- package/dist-esm/src/EventBatch.d.ts +5 -2
- package/dist-esm/src/EventBatch.js +35 -15
- package/dist-esm/src/EventBatch.js.map +1 -1
- package/dist-esm/src/HttpManager.d.ts +2 -2
- package/dist-esm/src/HttpManager.js +172 -85
- package/dist-esm/src/HttpManager.js.map +1 -1
- package/dist-esm/src/Index.js +1 -1
- package/dist-esm/src/KillSwitch.js +1 -1
- package/dist-esm/src/PostChannel.js +55 -31
- package/dist-esm/src/PostChannel.js.map +1 -1
- package/dist-esm/src/RetryPolicy.js +1 -1
- package/dist-esm/src/Serializer.js +1 -1
- package/dist-esm/src/typings/XDomainRequest.js +1 -1
- package/package.json +3 -3
- package/src/Constants.ts +28 -0
- package/src/DataModels.ts +68 -0
- package/src/EventBatch.ts +47 -14
- package/src/HttpManager.ts +206 -84
- package/src/PostChannel.ts +60 -31
- package/bundle/ms.post-3.1.8.gbl.js.map +0 -1
- package/bundle/ms.post-3.1.8.gbl.min.js +0 -7
- package/bundle/ms.post-3.1.8.gbl.min.js.map +0 -1
- package/bundle/ms.post-3.1.8.integrity.json +0 -46
- package/bundle/ms.post-3.1.8.js.map +0 -1
- package/bundle/ms.post-3.1.8.min.js +0 -7
- package/bundle/ms.post-3.1.8.min.js.map +0 -1
package/src/PostChannel.ts
CHANGED
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
EventLatency, NotificationManager, EventsDiscardedReason, IPlugin, ITelemetryItem,
|
|
9
9
|
IAppInsightsCore, isValueAssigned, addPageUnloadEventListener, addPageHideEventListener, addPageShowEventListener, setProcessTelemetryTimings,
|
|
10
10
|
isWindowObjectAvailable, IProcessTelemetryContext, SendRequestReason, arrForEach,
|
|
11
|
-
LoggingSeverity, _ExtendedInternalMessageId, doPerf, objForEachKey, optimizeObject, isChromium, getWindow, EventSendType, addEventHandler, getDocument,
|
|
11
|
+
LoggingSeverity, _ExtendedInternalMessageId, doPerf, objForEachKey, optimizeObject, isChromium, getWindow, EventSendType, addEventHandler, getDocument, isBeaconsSupported, isReactNative, isFetchSupported, isNumber,
|
|
12
12
|
} from "@microsoft/1ds-core-js";
|
|
13
13
|
import {
|
|
14
14
|
IChannelConfiguration, RT_PROFILE, NRT_PROFILE, IPostChannel,
|
|
@@ -16,22 +16,27 @@ import {
|
|
|
16
16
|
EventBatchNotificationReason,
|
|
17
17
|
} from "./DataModels";
|
|
18
18
|
import { EventBatch } from "./EventBatch";
|
|
19
|
-
import HttpManager from "./HttpManager";
|
|
19
|
+
import { HttpManager } from "./HttpManager";
|
|
20
20
|
import RetryPolicy from "./RetryPolicy";
|
|
21
21
|
import dynamicProto from "@microsoft/dynamicproto-js";
|
|
22
|
+
import { strMsaDeviceTicket } from "./Constants";
|
|
22
23
|
|
|
23
24
|
const FlushCheckTimer = 0.250; // This needs to be in seconds, so this is 250ms
|
|
24
25
|
const MaxNumberEventPerBatch = 500;
|
|
25
26
|
const EventsDroppedAtOneTime = 20;
|
|
26
27
|
const MaxSendAttempts = 6;
|
|
28
|
+
const MaxSyncUnloadSendAttempts = 2; // Assuming 2 based on beforeunload and unload
|
|
27
29
|
const MaxBackoffCount = 4;
|
|
28
30
|
const globalContext = isWindowObjectAvailable ? window : this;
|
|
29
31
|
const MaxConnections = 2;
|
|
30
|
-
const
|
|
32
|
+
const MaxRequestRetriesBeforeBackoff = 1;
|
|
31
33
|
|
|
32
34
|
const strEventsDiscarded = "eventsDiscarded";
|
|
33
35
|
const strOverrideInstrumentationKey = "overrideInstrumentationKey";
|
|
34
36
|
|
|
37
|
+
const strMaxEventRetryAttempts = "maxEventRetryAttempts";
|
|
38
|
+
const strMaxUnloadEventRetryAttempts = "maxUnloadEventRetryAttempts";
|
|
39
|
+
|
|
35
40
|
interface IPostChannelBatchQueue {
|
|
36
41
|
/**
|
|
37
42
|
* This is the actual queue of event batches
|
|
@@ -85,13 +90,16 @@ export default class PostChannel extends BaseTelemetryPlugin implements IChannel
|
|
|
85
90
|
let _delayedBatchReason: SendRequestReason;
|
|
86
91
|
let _optimizeObject: boolean = true;
|
|
87
92
|
let _isPageUnloadTriggered = false;
|
|
93
|
+
let _disableXhrSync = false;
|
|
94
|
+
let _maxEventSendAttempts: number = MaxSendAttempts;
|
|
95
|
+
let _maxUnloadEventSendAttempts: number = MaxSyncUnloadSendAttempts;
|
|
88
96
|
|
|
89
97
|
dynamicProto(PostChannel, this, (_self, _base) => {
|
|
90
98
|
_initializeProfiles();
|
|
91
99
|
_clearQueues();
|
|
92
100
|
_setAutoLimits();
|
|
93
101
|
|
|
94
|
-
_httpManager = new HttpManager(MaxNumberEventPerBatch, MaxConnections,
|
|
102
|
+
_httpManager = new HttpManager(MaxNumberEventPerBatch, MaxConnections, MaxRequestRetriesBeforeBackoff, {
|
|
95
103
|
requeue: _requeueEvents,
|
|
96
104
|
send: _sendingEvent,
|
|
97
105
|
sent: _eventsSentEvent,
|
|
@@ -119,14 +127,7 @@ export default class PostChannel extends BaseTelemetryPlugin implements IChannel
|
|
|
119
127
|
// Only try and use the optimizeObject() if this appears to be a chromium based browser and it has not been explicitly disabled
|
|
120
128
|
_optimizeObject = !_config.disableOptimizeObj && isChromium();
|
|
121
129
|
|
|
122
|
-
|
|
123
|
-
extendedCore.getWParam = () => {
|
|
124
|
-
var wparam = 0;
|
|
125
|
-
if (_config.ignoreMc1Ms0CookieProcessing) {
|
|
126
|
-
wparam = wparam | 2;
|
|
127
|
-
}
|
|
128
|
-
return wparam | existingGetWParamMethod();
|
|
129
|
-
};
|
|
130
|
+
_hookWParam(extendedCore);
|
|
130
131
|
|
|
131
132
|
if (_config.eventsLimitInMem > 0) {
|
|
132
133
|
_queueSizeLimit = _config.eventsLimitInMem;
|
|
@@ -140,6 +141,15 @@ export default class PostChannel extends BaseTelemetryPlugin implements IChannel
|
|
|
140
141
|
_autoFlushEventsLimit = _config.autoFlushEventsLimit;
|
|
141
142
|
}
|
|
142
143
|
|
|
144
|
+
_disableXhrSync = _config.disableXhrSync;
|
|
145
|
+
if (isNumber(_config[strMaxEventRetryAttempts])) {
|
|
146
|
+
_maxEventSendAttempts = _config[strMaxEventRetryAttempts];
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
if (isNumber(_config[strMaxUnloadEventRetryAttempts])) {
|
|
150
|
+
_maxUnloadEventSendAttempts = _config[strMaxUnloadEventRetryAttempts];
|
|
151
|
+
}
|
|
152
|
+
|
|
143
153
|
_setAutoLimits();
|
|
144
154
|
|
|
145
155
|
if (_config.httpXHROverride && _config.httpXHROverride.sendPOST) {
|
|
@@ -156,27 +166,12 @@ export default class PostChannel extends BaseTelemetryPlugin implements IChannel
|
|
|
156
166
|
_self._notificationManager = coreConfig.extensionConfig.NotificationManager;
|
|
157
167
|
_httpManager.initialize(endpointUrl, _self.core as IExtendedAppInsightsCore, _self, _xhrOverride, _config);
|
|
158
168
|
|
|
159
|
-
function _handleUnloadEvents(evt: any) {
|
|
160
|
-
let theEvt = evt || getWindow().event; // IE 8 does not pass the event
|
|
161
|
-
if (theEvt.type !== "beforeunload") {
|
|
162
|
-
// Only set the unload trigger if not beforeunload event as beforeunload can be cancelled while the other events can't
|
|
163
|
-
_isPageUnloadTriggered = true;
|
|
164
|
-
_httpManager.setUnloading(_isPageUnloadTriggered);
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
_releaseAllQueues(EventSendType.SendBeacon, SendRequestReason.Unload);
|
|
168
|
-
}
|
|
169
|
-
|
|
170
169
|
let excludePageUnloadEvents = coreConfig.disablePageUnloadEvents || [];
|
|
171
170
|
|
|
172
171
|
// When running in Web browsers try to send all telemetry if page is unloaded
|
|
173
172
|
addPageUnloadEventListener(_handleUnloadEvents, excludePageUnloadEvents);
|
|
174
173
|
addPageHideEventListener(_handleUnloadEvents, excludePageUnloadEvents);
|
|
175
|
-
addPageShowEventListener(
|
|
176
|
-
// Handle the page becoming visible again
|
|
177
|
-
_isPageUnloadTriggered = false;
|
|
178
|
-
_httpManager.setUnloading(_isPageUnloadTriggered);
|
|
179
|
-
}, coreConfig.disablePageShowEvents);
|
|
174
|
+
addPageShowEventListener(_handleShowEvents, coreConfig.disablePageShowEvents);
|
|
180
175
|
|
|
181
176
|
_self.setInitialized(true);
|
|
182
177
|
}, () => ({ coreConfig, core, extensions }));
|
|
@@ -221,6 +216,35 @@ export default class PostChannel extends BaseTelemetryPlugin implements IChannel
|
|
|
221
216
|
_self.processNext(event, itemCtx);
|
|
222
217
|
};
|
|
223
218
|
|
|
219
|
+
function _hookWParam(extendedCore: IExtendedAppInsightsCore) {
|
|
220
|
+
var existingGetWParamMethod = extendedCore.getWParam;
|
|
221
|
+
extendedCore.getWParam = () => {
|
|
222
|
+
var wparam = 0;
|
|
223
|
+
if (_config.ignoreMc1Ms0CookieProcessing) {
|
|
224
|
+
wparam = wparam | 2;
|
|
225
|
+
}
|
|
226
|
+
return wparam | existingGetWParamMethod();
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// Moving event handlers out from the initialize closure so that any local variables can be garbage collected
|
|
231
|
+
function _handleUnloadEvents(evt: any) {
|
|
232
|
+
let theEvt = evt || getWindow().event; // IE 8 does not pass the event
|
|
233
|
+
if (theEvt.type !== "beforeunload") {
|
|
234
|
+
// Only set the unload trigger if not beforeunload event as beforeunload can be cancelled while the other events can't
|
|
235
|
+
_isPageUnloadTriggered = true;
|
|
236
|
+
_httpManager.setUnloading(_isPageUnloadTriggered);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
_releaseAllQueues(EventSendType.SendBeacon, SendRequestReason.Unload);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
function _handleShowEvents(evt: any) {
|
|
243
|
+
// Handle the page becoming visible again
|
|
244
|
+
_isPageUnloadTriggered = false;
|
|
245
|
+
_httpManager.setUnloading(_isPageUnloadTriggered);
|
|
246
|
+
}
|
|
247
|
+
|
|
224
248
|
function _addEventToQueues(event: IPostTransmissionTelemetryItem, append: boolean) {
|
|
225
249
|
// If send attempt field is undefined we should set it to 0.
|
|
226
250
|
if (!event.sendAttempt) {
|
|
@@ -420,7 +444,7 @@ export default class PostChannel extends BaseTelemetryPlugin implements IChannel
|
|
|
420
444
|
};
|
|
421
445
|
|
|
422
446
|
_self.setMsaAuthTicket = (ticket: string) => {
|
|
423
|
-
_httpManager.addHeader(
|
|
447
|
+
_httpManager.addHeader(strMsaDeviceTicket, ticket);
|
|
424
448
|
};
|
|
425
449
|
|
|
426
450
|
_self.hasEvents = _hasEvents;
|
|
@@ -613,7 +637,7 @@ export default class PostChannel extends BaseTelemetryPlugin implements IChannel
|
|
|
613
637
|
|
|
614
638
|
const latency = event.latency;
|
|
615
639
|
let eventBatch = _getEventBatch(event.iKey, latency, true);
|
|
616
|
-
if (eventBatch.
|
|
640
|
+
if (eventBatch.addEvent(event)) {
|
|
617
641
|
if (latency !== EventLatency.Immediate) {
|
|
618
642
|
_queueSize++;
|
|
619
643
|
|
|
@@ -804,6 +828,11 @@ export default class PostChannel extends BaseTelemetryPlugin implements IChannel
|
|
|
804
828
|
*/
|
|
805
829
|
function _requeueEvents(batches: EventBatch[], reason?: number) {
|
|
806
830
|
let droppedEvents: IPostTransmissionTelemetryItem[] = [];
|
|
831
|
+
let maxSendAttempts = _maxEventSendAttempts;
|
|
832
|
+
if (_isPageUnloadTriggered) {
|
|
833
|
+
// If a page unlaod has been triggered reduce the number of times we try to "retry"
|
|
834
|
+
maxSendAttempts = _maxUnloadEventSendAttempts;
|
|
835
|
+
}
|
|
807
836
|
|
|
808
837
|
arrForEach(batches, (theBatch) => {
|
|
809
838
|
if (theBatch && theBatch.count() > 0) {
|
|
@@ -816,7 +845,7 @@ export default class PostChannel extends BaseTelemetryPlugin implements IChannel
|
|
|
816
845
|
theEvent.sync = false;
|
|
817
846
|
}
|
|
818
847
|
|
|
819
|
-
if (theEvent.sendAttempt <
|
|
848
|
+
if (theEvent.sendAttempt < maxSendAttempts) {
|
|
820
849
|
// Reset the event timings
|
|
821
850
|
setProcessTelemetryTimings(theEvent, _self.identifier);
|
|
822
851
|
_addEventToQueues(theEvent, false);
|