@microsoft/1ds-post-js 3.2.12 → 4.0.1
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 +1 -1
- package/bundle/es5/ms.post-4.0.1.gbl.js +5918 -0
- package/bundle/es5/ms.post-4.0.1.gbl.js.map +1 -0
- package/bundle/es5/ms.post-4.0.1.gbl.min.js +7 -0
- package/bundle/es5/ms.post-4.0.1.gbl.min.js.map +1 -0
- package/bundle/es5/ms.post-4.0.1.integrity.json +46 -0
- package/bundle/es5/ms.post-4.0.1.js +5922 -0
- package/bundle/es5/ms.post-4.0.1.js.map +1 -0
- package/bundle/es5/ms.post-4.0.1.min.js +7 -0
- package/bundle/es5/ms.post-4.0.1.min.js.map +1 -0
- package/bundle/es5/ms.post.gbl.js +5918 -0
- package/bundle/es5/ms.post.gbl.js.map +1 -0
- package/bundle/es5/ms.post.gbl.min.js +7 -0
- package/bundle/es5/ms.post.gbl.min.js.map +1 -0
- package/bundle/es5/ms.post.integrity.json +46 -0
- package/bundle/es5/ms.post.js +5922 -0
- package/bundle/es5/ms.post.js.map +1 -0
- package/bundle/es5/ms.post.min.js +7 -0
- package/bundle/es5/ms.post.min.js.map +1 -0
- package/{bundle → dist/es5}/ms.post.js +3026 -1652
- package/dist/es5/ms.post.js.map +1 -0
- package/dist/es5/ms.post.min.js +7 -0
- package/dist/es5/ms.post.min.js.map +1 -0
- package/{dist-esm/src → dist-es5}/BatchNotificationActions.js +1 -1
- package/{dist-esm/src → dist-es5}/ClockSkewManager.js +2 -2
- package/{dist-esm/src → dist-es5}/ClockSkewManager.js.map +1 -1
- package/{dist-esm/src → dist-es5}/DataModels.js +1 -1
- package/{dist-esm/src → dist-es5}/EventBatch.js +1 -1
- package/{dist-esm/src → dist-es5}/HttpManager.js +175 -94
- package/dist-es5/HttpManager.js.map +1 -0
- package/{dist-esm/src → dist-es5}/Index.js +2 -2
- package/dist-es5/Index.js.map +1 -0
- package/{dist-esm/src → dist-es5}/InternalConstants.js +1 -1
- package/{dist-esm/src → dist-es5}/KillSwitch.js +2 -2
- package/{dist-esm/src → dist-es5}/KillSwitch.js.map +1 -1
- package/{dist-esm/src → dist-es5}/PostChannel.js +166 -144
- package/dist-es5/PostChannel.js.map +1 -0
- package/{dist-esm/src → dist-es5}/RetryPolicy.js +1 -1
- package/{dist-esm/src → dist-es5}/Serializer.js +3 -2
- package/dist-es5/Serializer.js.map +1 -0
- package/dist-es5/TimeoutOverrideWrapper.js +24 -0
- package/dist-es5/TimeoutOverrideWrapper.js.map +1 -0
- package/{dist-esm/src → dist-es5}/typings/XDomainRequest.js +1 -1
- package/package.json +15 -10
- package/tsconfig.json +5 -2
- package/{src/DataModels.ts → types/1ds-post-js.d.ts} +408 -467
- package/types/1ds-post-js.namespaced.d.ts +404 -0
- package/bundle/ms.post-3.2.12.gbl.js +0 -4524
- package/bundle/ms.post-3.2.12.gbl.js.map +0 -1
- package/bundle/ms.post-3.2.12.gbl.min.js +0 -7
- package/bundle/ms.post-3.2.12.gbl.min.js.map +0 -1
- package/bundle/ms.post-3.2.12.integrity.json +0 -46
- package/bundle/ms.post-3.2.12.js +0 -4527
- package/bundle/ms.post-3.2.12.js.map +0 -1
- package/bundle/ms.post-3.2.12.min.js +0 -7
- package/bundle/ms.post-3.2.12.min.js.map +0 -1
- package/bundle/ms.post.gbl.js +0 -4524
- package/bundle/ms.post.gbl.js.map +0 -1
- package/bundle/ms.post.gbl.min.js +0 -7
- package/bundle/ms.post.gbl.min.js.map +0 -1
- package/bundle/ms.post.integrity.json +0 -46
- package/bundle/ms.post.js.map +0 -1
- package/bundle/ms.post.min.js +0 -7
- package/bundle/ms.post.min.js.map +0 -1
- package/dist/ms.post.js +0 -2144
- package/dist/ms.post.js.map +0 -1
- package/dist/ms.post.min.js +0 -7
- package/dist/ms.post.min.js.map +0 -1
- package/dist-esm/src/BatchNotificationActions.d.ts +0 -36
- package/dist-esm/src/ClockSkewManager.d.ts +0 -38
- package/dist-esm/src/DataModels.d.ts +0 -405
- package/dist-esm/src/EventBatch.d.ts +0 -47
- package/dist-esm/src/HttpManager.d.ts +0 -88
- package/dist-esm/src/HttpManager.js.map +0 -1
- package/dist-esm/src/Index.d.ts +0 -9
- package/dist-esm/src/Index.js.map +0 -1
- package/dist-esm/src/InternalConstants.d.ts +0 -28
- package/dist-esm/src/KillSwitch.d.ts +0 -26
- package/dist-esm/src/PostChannel.d.ts +0 -101
- package/dist-esm/src/PostChannel.js.map +0 -1
- package/dist-esm/src/RetryPolicy.d.ts +0 -21
- package/dist-esm/src/Serializer.d.ts +0 -108
- package/dist-esm/src/Serializer.js.map +0 -1
- package/dist-esm/src/TimeoutOverrideWrapper.d.ts +0 -18
- package/dist-esm/src/TimeoutOverrideWrapper.js +0 -28
- package/dist-esm/src/TimeoutOverrideWrapper.js.map +0 -1
- package/dist-esm/src/typings/XDomainRequest.d.ts +0 -17
- package/src/BatchNotificationActions.ts +0 -44
- package/src/ClockSkewManager.ts +0 -127
- package/src/EventBatch.ts +0 -137
- package/src/HttpManager.ts +0 -1379
- package/src/Index.ts +0 -18
- package/src/InternalConstants.ts +0 -42
- package/src/KillSwitch.ts +0 -84
- package/src/PostChannel.ts +0 -1163
- package/src/RetryPolicy.ts +0 -46
- package/src/Serializer.ts +0 -487
- package/src/TimeoutOverrideWrapper.ts +0 -29
- package/src/typings/XDomainRequest.ts +0 -23
- /package/{dist-esm/src → dist-es5}/BatchNotificationActions.js.map +0 -0
- /package/{dist-esm/src → dist-es5}/DataModels.js.map +0 -0
- /package/{dist-esm/src → dist-es5}/EventBatch.js.map +0 -0
- /package/{dist-esm/src → dist-es5}/InternalConstants.js.map +0 -0
- /package/{dist-esm/src → dist-es5}/RetryPolicy.js.map +0 -0
- /package/{dist-esm/src → dist-es5}/typings/XDomainRequest.js.map +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* 1DS JS SDK POST plugin,
|
|
2
|
+
* 1DS JS SDK POST plugin, 4.0.1
|
|
3
3
|
* Copyright (c) Microsoft and contributors. All rights reserved.
|
|
4
4
|
* (Microsoft Internal Only)
|
|
5
5
|
*/
|
|
@@ -88,5 +88,5 @@ var ClockSkewManager = /** @class */ (function () {
|
|
|
88
88
|
|
|
89
89
|
return ClockSkewManager;
|
|
90
90
|
}());
|
|
91
|
-
export
|
|
91
|
+
export { ClockSkewManager };
|
|
92
92
|
//# sourceMappingURL=ClockSkewManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClockSkewManager.js.map","sources":["ClockSkewManager.js"],"sourcesContent":["/**\r\n* ClockSkewManager.ts\r\n* @author Abhilash Panwar (abpanwar)\r\n* @copyright Microsoft 2018\r\n*/\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\n/**\r\n* Class to manage clock skew correction.\r\n*/\r\nvar ClockSkewManager = /** @class */ (function () {\r\n function ClockSkewManager() {\r\n var _allowRequestSending = true;\r\n var _shouldAddClockSkewHeaders = true;\r\n var _isFirstRequest = true;\r\n var _clockSkewHeaderValue = \"use-collector-delta\";\r\n var _clockSkewSet = false;\r\n dynamicProto(ClockSkewManager, this, function (_self) {\r\n /**\r\n * Determine if requests can be sent.\r\n * @returns True if requests can be sent, false otherwise.\r\n */\r\n _self.allowRequestSending = function () {\r\n return _allowRequestSending;\r\n };\r\n /**\r\n * Tells the ClockSkewManager that it should assume that the first request has now been sent,\r\n * If this method had not yet been called AND the clock Skew had not been set this will set\r\n * allowRequestSending to false until setClockSet() is called.\r\n */\r\n _self.firstRequestSent = function () {\r\n if (_isFirstRequest) {\r\n _isFirstRequest = false;\r\n if (!_clockSkewSet) {\r\n // Block sending until we get the first clock Skew\r\n _allowRequestSending = false;\r\n }\r\n }\r\n };\r\n /**\r\n * Determine if clock skew headers should be added to the request.\r\n * @returns True if clock skew headers should be added, false otherwise.\r\n */\r\n _self.shouldAddClockSkewHeaders = function () {\r\n return _shouldAddClockSkewHeaders;\r\n };\r\n /**\r\n * Gets the clock skew header value.\r\n * @returns The clock skew header value.\r\n */\r\n _self.getClockSkewHeaderValue = function () {\r\n return _clockSkewHeaderValue;\r\n };\r\n /**\r\n * Sets the clock skew header value. Once clock skew is set this method\r\n * is no-op.\r\n * @param timeDeltaInMillis - Time delta to be saved as the clock skew header value.\r\n */\r\n _self.setClockSkew = function (timeDeltaInMillis) {\r\n if (!_clockSkewSet) {\r\n if (timeDeltaInMillis) {\r\n _clockSkewHeaderValue = timeDeltaInMillis;\r\n _shouldAddClockSkewHeaders = true;\r\n _clockSkewSet = true;\r\n }\r\n else {\r\n _shouldAddClockSkewHeaders = false;\r\n }\r\n // Unblock sending\r\n _allowRequestSending = true;\r\n }\r\n };\r\n });\r\n }\r\n /**\r\n * Determine if the request can be sent.\r\n * @returns True if requests can be sent, false otherwise.\r\n */\r\n ClockSkewManager.prototype.allowRequestSending = function () {\r\n // @DynamicProtoStub - DO NOT add any code as this will be removed during packaging\r\n return false;\r\n };\r\n /**\r\n * Tells the ClockSkewManager that it should assume that the first request has now been sent,\r\n * If this method had not yet been called AND the clock Skew had not been set this will set\r\n * allowRequestSending to false until setClockSet() is called.\r\n */\r\n ClockSkewManager.prototype.firstRequestSent = function () {\r\n // @DynamicProtoStub - DO NOT add any code as this will be removed during packaging\r\n };\r\n /**\r\n * Determine if clock skew headers should be added to the request.\r\n * @returns True if clock skew headers should be added, false otherwise.\r\n */\r\n ClockSkewManager.prototype.shouldAddClockSkewHeaders = function () {\r\n // @DynamicProtoStub - DO NOT add any code as this will be removed during packaging\r\n return false;\r\n };\r\n /**\r\n * Gets the clock skew header value.\r\n * @returns The clock skew header value.\r\n */\r\n ClockSkewManager.prototype.getClockSkewHeaderValue = function () {\r\n // @DynamicProtoStub - DO NOT add any code as this will be removed during packaging\r\n return null;\r\n };\r\n /**\r\n * Sets the clock skew header value. Once clock skew is set this method\r\n * is no-op.\r\n * @param timeDeltaInMillis - Time delta to be saved as the clock skew header value.\r\n */\r\n ClockSkewManager.prototype.setClockSkew = function (timeDeltaInMillis) {\r\n // @DynamicProtoStub - DO NOT add any code as this will be removed during packaging\r\n };\r\n return ClockSkewManager;\r\n}());\r\nexport
|
|
1
|
+
{"version":3,"file":"ClockSkewManager.js.map","sources":["ClockSkewManager.js"],"sourcesContent":["/**\r\n* ClockSkewManager.ts\r\n* @author Abhilash Panwar (abpanwar)\r\n* @copyright Microsoft 2018\r\n*/\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\n/**\r\n* Class to manage clock skew correction.\r\n*/\r\nvar ClockSkewManager = /** @class */ (function () {\r\n function ClockSkewManager() {\r\n var _allowRequestSending = true;\r\n var _shouldAddClockSkewHeaders = true;\r\n var _isFirstRequest = true;\r\n var _clockSkewHeaderValue = \"use-collector-delta\";\r\n var _clockSkewSet = false;\r\n dynamicProto(ClockSkewManager, this, function (_self) {\r\n /**\r\n * Determine if requests can be sent.\r\n * @returns True if requests can be sent, false otherwise.\r\n */\r\n _self.allowRequestSending = function () {\r\n return _allowRequestSending;\r\n };\r\n /**\r\n * Tells the ClockSkewManager that it should assume that the first request has now been sent,\r\n * If this method had not yet been called AND the clock Skew had not been set this will set\r\n * allowRequestSending to false until setClockSet() is called.\r\n */\r\n _self.firstRequestSent = function () {\r\n if (_isFirstRequest) {\r\n _isFirstRequest = false;\r\n if (!_clockSkewSet) {\r\n // Block sending until we get the first clock Skew\r\n _allowRequestSending = false;\r\n }\r\n }\r\n };\r\n /**\r\n * Determine if clock skew headers should be added to the request.\r\n * @returns True if clock skew headers should be added, false otherwise.\r\n */\r\n _self.shouldAddClockSkewHeaders = function () {\r\n return _shouldAddClockSkewHeaders;\r\n };\r\n /**\r\n * Gets the clock skew header value.\r\n * @returns The clock skew header value.\r\n */\r\n _self.getClockSkewHeaderValue = function () {\r\n return _clockSkewHeaderValue;\r\n };\r\n /**\r\n * Sets the clock skew header value. Once clock skew is set this method\r\n * is no-op.\r\n * @param timeDeltaInMillis - Time delta to be saved as the clock skew header value.\r\n */\r\n _self.setClockSkew = function (timeDeltaInMillis) {\r\n if (!_clockSkewSet) {\r\n if (timeDeltaInMillis) {\r\n _clockSkewHeaderValue = timeDeltaInMillis;\r\n _shouldAddClockSkewHeaders = true;\r\n _clockSkewSet = true;\r\n }\r\n else {\r\n _shouldAddClockSkewHeaders = false;\r\n }\r\n // Unblock sending\r\n _allowRequestSending = true;\r\n }\r\n };\r\n });\r\n }\r\n /**\r\n * Determine if the request can be sent.\r\n * @returns True if requests can be sent, false otherwise.\r\n */\r\n ClockSkewManager.prototype.allowRequestSending = function () {\r\n // @DynamicProtoStub - DO NOT add any code as this will be removed during packaging\r\n return false;\r\n };\r\n /**\r\n * Tells the ClockSkewManager that it should assume that the first request has now been sent,\r\n * If this method had not yet been called AND the clock Skew had not been set this will set\r\n * allowRequestSending to false until setClockSet() is called.\r\n */\r\n ClockSkewManager.prototype.firstRequestSent = function () {\r\n // @DynamicProtoStub - DO NOT add any code as this will be removed during packaging\r\n };\r\n /**\r\n * Determine if clock skew headers should be added to the request.\r\n * @returns True if clock skew headers should be added, false otherwise.\r\n */\r\n ClockSkewManager.prototype.shouldAddClockSkewHeaders = function () {\r\n // @DynamicProtoStub - DO NOT add any code as this will be removed during packaging\r\n return false;\r\n };\r\n /**\r\n * Gets the clock skew header value.\r\n * @returns The clock skew header value.\r\n */\r\n ClockSkewManager.prototype.getClockSkewHeaderValue = function () {\r\n // @DynamicProtoStub - DO NOT add any code as this will be removed during packaging\r\n return null;\r\n };\r\n /**\r\n * Sets the clock skew header value. Once clock skew is set this method\r\n * is no-op.\r\n * @param timeDeltaInMillis - Time delta to be saved as the clock skew header value.\r\n */\r\n ClockSkewManager.prototype.setClockSkew = function (timeDeltaInMillis) {\r\n // @DynamicProtoStub - DO NOT add any code as this will be removed during packaging\r\n };\r\n return ClockSkewManager;\r\n}());\r\nexport { ClockSkewManager };\r\n//# sourceMappingURL=ClockSkewManager.js.map"],"names":[],"mappings":";;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;4DAuCM,CAAC;;;;;;4BACqB;AAC5B;AACA;AACA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* 1DS JS SDK POST plugin,
|
|
2
|
+
* 1DS JS SDK POST plugin, 4.0.1
|
|
3
3
|
* Copyright (c) Microsoft and contributors. All rights reserved.
|
|
4
4
|
* (Microsoft Internal Only)
|
|
5
5
|
*/
|
|
@@ -10,14 +10,17 @@ var _a;
|
|
|
10
10
|
* @copyright Microsoft 2018-2020
|
|
11
11
|
*/
|
|
12
12
|
import dynamicProto from "@microsoft/dynamicproto-js";
|
|
13
|
-
import
|
|
14
|
-
import
|
|
15
|
-
import {
|
|
13
|
+
import { FullVersionString, _throwInternal, _warnToConsole, arrForEach, dateNow, doPerf, dumpObj, extend, getLocation, getNavigator, getTime, hasOwnProperty, isArray, isBeaconsSupported, isFetchSupported, isNullOrUndefined, isNumber, isReactNative, isString, isUndefined, isValueAssigned, isXhrSupported, objForEachKey, objKeys, onConfigChange, openXhr, strTrim, strUndefined, useXDomainRequest } from "@microsoft/1ds-core-js";
|
|
14
|
+
import { arrAppend } from "@nevware21/ts-utils";
|
|
15
|
+
import { ClockSkewManager } from "./ClockSkewManager";
|
|
16
16
|
import { DEFAULT_CACHE_CONTROL, DEFAULT_CONTENT_TYPE, STR_API_KEY, STR_AUTH_XTOKEN, STR_CACHE_CONTROL, STR_CLIENT_ID, STR_CLIENT_VERSION, STR_CONTENT_TYPE_HEADER, STR_DISABLED_PROPERTY_NAME, STR_DROPPED, STR_EMPTY, STR_KILL_DURATION_HEADER, STR_KILL_DURATION_SECONDS_HEADER, STR_KILL_TOKENS_HEADER, STR_MSA_DEVICE_TICKET, STR_MSFPC, STR_NO_RESPONSE_BODY, STR_OTHER, STR_POST_METHOD, STR_REQUEUE, STR_RESPONSE_FAIL, STR_SENDING, STR_TIME_DELTA_HEADER, STR_TIME_DELTA_TO_APPLY, STR_UPLOAD_TIME } from "./InternalConstants";
|
|
17
|
+
import { KillSwitch } from "./KillSwitch";
|
|
17
18
|
import { retryPolicyGetMillisToBackoffForRetry, retryPolicyShouldRetryForStatus } from "./RetryPolicy";
|
|
18
19
|
import { Serializer } from "./Serializer";
|
|
20
|
+
import { createTimeoutWrapper } from "./TimeoutOverrideWrapper";
|
|
19
21
|
var strSendAttempt = "sendAttempt";
|
|
20
22
|
var _noResponseQs = "&" + STR_NO_RESPONSE_BODY + "=true";
|
|
23
|
+
var UrlQueryString = "?cors=true&" + STR_CONTENT_TYPE_HEADER.toLowerCase() + "=" + DEFAULT_CONTENT_TYPE;
|
|
21
24
|
/**
|
|
22
25
|
* Identifies the default notification reason to the action names
|
|
23
26
|
*/
|
|
@@ -92,6 +95,23 @@ function _prependTransports(theTransports, newTransports) {
|
|
|
92
95
|
}
|
|
93
96
|
return theTransports;
|
|
94
97
|
}
|
|
98
|
+
function _addQueryStringParameter(qsParams, name, value) {
|
|
99
|
+
for (var i = 0; i < qsParams.length; i++) {
|
|
100
|
+
if (qsParams[i].name === name) {
|
|
101
|
+
qsParams[i].value = value;
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
qsParams.push({ name: name, value: value });
|
|
106
|
+
}
|
|
107
|
+
function _removeQueryStringParameter(qsParams, name) {
|
|
108
|
+
for (var i = 0; i < qsParams.length; i++) {
|
|
109
|
+
if (qsParams[i].name === name) {
|
|
110
|
+
qsParams.splice(i, 1);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
95
115
|
/**
|
|
96
116
|
* Class managing the sending of requests.
|
|
97
117
|
*/
|
|
@@ -100,12 +120,11 @@ var HttpManager = /** @class */ (function () {
|
|
|
100
120
|
* @constructor
|
|
101
121
|
* @param requestQueue - The queue that contains the requests to be sent.
|
|
102
122
|
*/
|
|
103
|
-
function HttpManager(maxEventsPerBatch, maxConnections, maxRequestRetriesBeforeBackoff, actions
|
|
104
|
-
|
|
105
|
-
var
|
|
106
|
-
var _killSwitch = new EVTKillSwitch();
|
|
123
|
+
function HttpManager(maxEventsPerBatch, maxConnections, maxRequestRetriesBeforeBackoff, actions) {
|
|
124
|
+
var _urlString;
|
|
125
|
+
var _killSwitch = new KillSwitch();
|
|
107
126
|
var _paused = false;
|
|
108
|
-
var _clockSkewManager = new
|
|
127
|
+
var _clockSkewManager = new ClockSkewManager();
|
|
109
128
|
var _useBeacons = false;
|
|
110
129
|
var _outstandingRequests = 0; // Holds the number of outstanding async requests that have not returned a response yet
|
|
111
130
|
var _postManager;
|
|
@@ -126,76 +145,110 @@ var HttpManager = /** @class */ (function () {
|
|
|
126
145
|
var _disableFetchKeepAlive;
|
|
127
146
|
var _canHaveReducedPayload;
|
|
128
147
|
var _addNoResponse;
|
|
148
|
+
var _unloadHooks = [];
|
|
149
|
+
var _sendHook;
|
|
150
|
+
var _sendListener;
|
|
151
|
+
var _responseHandlers = [];
|
|
152
|
+
var _isInitialized;
|
|
153
|
+
var _timeoutWrapper;
|
|
129
154
|
dynamicProto(HttpManager, this, function (_self) {
|
|
155
|
+
_initDefaults();
|
|
130
156
|
var _sendCredentials = true;
|
|
131
|
-
_self.initialize = function (
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
+
_self.initialize = function (theConfig, core, postChannel) {
|
|
158
|
+
if (!_isInitialized) {
|
|
159
|
+
_core = core;
|
|
160
|
+
_cookieMgr = core.getCookieMgr();
|
|
161
|
+
_postManager = postChannel;
|
|
162
|
+
_logger = _postManager.diagLog();
|
|
163
|
+
arrAppend(_unloadHooks, onConfigChange(theConfig, function (details) {
|
|
164
|
+
var _a;
|
|
165
|
+
var coreConfig = details.cfg;
|
|
166
|
+
var channelConfig = details.cfg.extensionConfig[postChannel.identifier];
|
|
167
|
+
_timeoutWrapper = createTimeoutWrapper(channelConfig.setTimeoutOverride, channelConfig.clearTimeoutOverride);
|
|
168
|
+
if (isValueAssigned(coreConfig.anonCookieName)) {
|
|
169
|
+
_addQueryStringParameter(_queryStringParameters, "anoncknm", coreConfig.anonCookieName);
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
_removeQueryStringParameter(_queryStringParameters, "anoncknm");
|
|
173
|
+
}
|
|
174
|
+
_sendHook = channelConfig.payloadPreprocessor;
|
|
175
|
+
_sendListener = channelConfig.payloadListener;
|
|
176
|
+
var httpInterface = channelConfig.httpXHROverride;
|
|
177
|
+
// Override endpointUrl if provided in Post config
|
|
178
|
+
var endpointUrl = channelConfig.overrideEndpointUrl ? channelConfig.overrideEndpointUrl : coreConfig.endpointUrl;
|
|
179
|
+
_urlString = endpointUrl + UrlQueryString;
|
|
180
|
+
_useHeaders = !isUndefined(channelConfig.avoidOptions) ? !channelConfig.avoidOptions : true;
|
|
181
|
+
_enableEventTimings = !channelConfig.disableEventTimings;
|
|
182
|
+
var valueSanitizer = channelConfig.valueSanitizer;
|
|
183
|
+
var stringifyObjects = channelConfig.stringifyObjects;
|
|
184
|
+
var enableCompoundKey = !!coreConfig.enableCompoundKey;
|
|
185
|
+
if (!isUndefined(channelConfig.enableCompoundKey)) {
|
|
186
|
+
enableCompoundKey = !!channelConfig.enableCompoundKey;
|
|
187
|
+
}
|
|
188
|
+
_xhrTimeout = channelConfig.xhrTimeout;
|
|
189
|
+
_disableXhrSync = !!channelConfig.disableXhrSync;
|
|
190
|
+
_disableFetchKeepAlive = !!channelConfig.disableFetchKeepAlive;
|
|
191
|
+
_addNoResponse = channelConfig.addNoResponse !== false;
|
|
192
|
+
_useBeacons = !isReactNative(); // Only use beacons if not running in React Native
|
|
193
|
+
_serializer = new Serializer(_core, valueSanitizer, stringifyObjects, enableCompoundKey);
|
|
194
|
+
if (!isNullOrUndefined(channelConfig.useSendBeacon)) {
|
|
195
|
+
_useBeacons = !!channelConfig.useSendBeacon;
|
|
196
|
+
}
|
|
197
|
+
var syncHttpInterface = httpInterface;
|
|
198
|
+
var beaconHttpInterface = channelConfig.alwaysUseXhrOverride ? httpInterface : null;
|
|
199
|
+
var fetchSyncHttpInterface = channelConfig.alwaysUseXhrOverride ? httpInterface : null;
|
|
200
|
+
var beaconUnloadTransports = [3 /* TransportType.Beacon */, 2 /* TransportType.Fetch */];
|
|
201
|
+
if (!httpInterface) {
|
|
202
|
+
_customHttpInterface = false;
|
|
203
|
+
var location_1 = getLocation();
|
|
204
|
+
if (location_1 && location_1.protocol && location_1.protocol.toLowerCase() === "file:") {
|
|
205
|
+
// Special case where a local html file fails with a CORS error on Chromium browsers
|
|
206
|
+
_sendCredentials = false;
|
|
207
|
+
}
|
|
208
|
+
var theTransports = [];
|
|
209
|
+
if (isReactNative()) {
|
|
210
|
+
// Use Fetch or XDR/XHR
|
|
211
|
+
theTransports = [2 /* TransportType.Fetch */, 1 /* TransportType.Xhr */];
|
|
212
|
+
beaconUnloadTransports = [2 /* TransportType.Fetch */, 1 /* TransportType.Xhr */, 3 /* TransportType.Beacon */];
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
// Use XDR/XHR, Fetch or beacons
|
|
216
|
+
theTransports = [1 /* TransportType.Xhr */, 2 /* TransportType.Fetch */, 3 /* TransportType.Beacon */];
|
|
217
|
+
}
|
|
218
|
+
// Prefix any user requested transport(s) values
|
|
219
|
+
theTransports = _prependTransports(theTransports, channelConfig.transports);
|
|
220
|
+
httpInterface = _getSenderInterface(theTransports, false);
|
|
221
|
+
if (!httpInterface) {
|
|
222
|
+
_warnToConsole(_logger, "No available transport to send events");
|
|
223
|
+
}
|
|
224
|
+
syncHttpInterface = _getSenderInterface(theTransports, true);
|
|
225
|
+
}
|
|
226
|
+
if (!beaconHttpInterface) {
|
|
227
|
+
// Allow overriding the usage of sendBeacon
|
|
228
|
+
beaconUnloadTransports = _prependTransports(beaconUnloadTransports, channelConfig.unloadTransports);
|
|
229
|
+
beaconHttpInterface = _getSenderInterface(beaconUnloadTransports, true);
|
|
230
|
+
}
|
|
231
|
+
_canHaveReducedPayload = !_customHttpInterface && ((_useBeacons && isBeaconsSupported()) || (!_disableFetchKeepAlive && isFetchSupported(true)));
|
|
232
|
+
_sendInterfaces = (_a = {},
|
|
233
|
+
_a[0 /* EventSendType.Batched */] = httpInterface,
|
|
234
|
+
_a[1 /* EventSendType.Synchronous */] = syncHttpInterface || _getSenderInterface([1 /* TransportType.Xhr */, 2 /* TransportType.Fetch */, 3 /* TransportType.Beacon */], true),
|
|
235
|
+
_a[2 /* EventSendType.SendBeacon */] = beaconHttpInterface || syncHttpInterface || _getSenderInterface([1 /* TransportType.Xhr */], true),
|
|
236
|
+
_a[3 /* EventSendType.SyncFetch */] = fetchSyncHttpInterface || _getSenderInterface([2 /* TransportType.Fetch */, 3 /* TransportType.Beacon */], true) || syncHttpInterface || _getSenderInterface([1 /* TransportType.Xhr */], true),
|
|
237
|
+
_a);
|
|
238
|
+
}));
|
|
239
|
+
_isInitialized = true;
|
|
157
240
|
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
_sendCredentials = false;
|
|
168
|
-
}
|
|
169
|
-
var theTransports = [];
|
|
170
|
-
if (isReactNative()) {
|
|
171
|
-
// Use Fetch or XDR/XHR
|
|
172
|
-
theTransports = [2 /* TransportType.Fetch */, 1 /* TransportType.Xhr */];
|
|
173
|
-
beaconUnloadTransports = [2 /* TransportType.Fetch */, 1 /* TransportType.Xhr */, 3 /* TransportType.Beacon */];
|
|
174
|
-
}
|
|
175
|
-
else {
|
|
176
|
-
// Use XDR/XHR, Fetch or beacons
|
|
177
|
-
theTransports = [1 /* TransportType.Xhr */, 2 /* TransportType.Fetch */, 3 /* TransportType.Beacon */];
|
|
178
|
-
}
|
|
179
|
-
// Prefix any user requested transport(s) values
|
|
180
|
-
theTransports = _prependTransports(theTransports, channelConfig.transports);
|
|
181
|
-
httpInterface = _getSenderInterface(theTransports, false);
|
|
182
|
-
if (!httpInterface) {
|
|
183
|
-
_warnToConsole(_logger, "No available transport to send events");
|
|
241
|
+
};
|
|
242
|
+
_self.addResponseHandler = function (responseHandler) {
|
|
243
|
+
_responseHandlers.push(responseHandler);
|
|
244
|
+
return {
|
|
245
|
+
rm: function () {
|
|
246
|
+
var index = _responseHandlers.indexOf(responseHandler);
|
|
247
|
+
if (index >= 0) {
|
|
248
|
+
_responseHandlers.splice(index, 1);
|
|
249
|
+
}
|
|
184
250
|
}
|
|
185
|
-
|
|
186
|
-
}
|
|
187
|
-
if (!beaconHttpInterface) {
|
|
188
|
-
// Allow overriding the usage of sendBeacon
|
|
189
|
-
beaconUnloadTransports = _prependTransports(beaconUnloadTransports, channelConfig.unloadTransports);
|
|
190
|
-
beaconHttpInterface = _getSenderInterface(beaconUnloadTransports, true);
|
|
191
|
-
}
|
|
192
|
-
_canHaveReducedPayload = !_customHttpInterface && ((_useBeacons && isBeaconsSupported()) || (!_disableFetchKeepAlive && isFetchSupported(true)));
|
|
193
|
-
_sendInterfaces = (_a = {},
|
|
194
|
-
_a[0 /* EventSendType.Batched */] = httpInterface,
|
|
195
|
-
_a[1 /* EventSendType.Synchronous */] = syncHttpInterface || _getSenderInterface([1 /* TransportType.Xhr */, 2 /* TransportType.Fetch */, 3 /* TransportType.Beacon */], true),
|
|
196
|
-
_a[2 /* EventSendType.SendBeacon */] = beaconHttpInterface || syncHttpInterface || _getSenderInterface([1 /* TransportType.Xhr */], true),
|
|
197
|
-
_a[3 /* EventSendType.SyncFetch */] = fetchSyncHttpInterface || _getSenderInterface([2 /* TransportType.Fetch */, 3 /* TransportType.Beacon */], true) || syncHttpInterface || _getSenderInterface([1 /* TransportType.Xhr */], true),
|
|
198
|
-
_a);
|
|
251
|
+
};
|
|
199
252
|
};
|
|
200
253
|
// Special internal method to allow the DebugPlugin to hook embedded objects
|
|
201
254
|
function _getSenderInterface(transports, syncSupport) {
|
|
@@ -261,11 +314,44 @@ var HttpManager = /** @class */ (function () {
|
|
|
261
314
|
xdr.send(payload.data);
|
|
262
315
|
}
|
|
263
316
|
else {
|
|
264
|
-
|
|
317
|
+
_timeoutWrapper.set(function () {
|
|
265
318
|
xdr.send(payload.data);
|
|
266
319
|
}, 0);
|
|
267
320
|
}
|
|
268
321
|
}
|
|
322
|
+
function _initDefaults() {
|
|
323
|
+
var undefValue;
|
|
324
|
+
_urlString = null;
|
|
325
|
+
_killSwitch = new KillSwitch();
|
|
326
|
+
_paused = false;
|
|
327
|
+
_clockSkewManager = new ClockSkewManager();
|
|
328
|
+
_useBeacons = false;
|
|
329
|
+
_outstandingRequests = 0; // Holds the number of outstanding async requests that have not returned a response yet
|
|
330
|
+
_postManager = null;
|
|
331
|
+
_logger = null;
|
|
332
|
+
_sendInterfaces = null;
|
|
333
|
+
_core = null;
|
|
334
|
+
_customHttpInterface = true;
|
|
335
|
+
_queryStringParameters = [];
|
|
336
|
+
_headers = {};
|
|
337
|
+
_batchQueue = [];
|
|
338
|
+
_serializer = null;
|
|
339
|
+
_enableEventTimings = false;
|
|
340
|
+
_cookieMgr = null;
|
|
341
|
+
_isUnloading = false;
|
|
342
|
+
_useHeaders = false;
|
|
343
|
+
_xhrTimeout = undefValue;
|
|
344
|
+
_disableXhrSync = undefValue;
|
|
345
|
+
_disableFetchKeepAlive = undefValue;
|
|
346
|
+
_canHaveReducedPayload = undefValue;
|
|
347
|
+
_addNoResponse = undefValue;
|
|
348
|
+
_unloadHooks = [];
|
|
349
|
+
_sendHook = undefValue;
|
|
350
|
+
_sendListener = undefValue;
|
|
351
|
+
_responseHandlers = [];
|
|
352
|
+
_isInitialized = false;
|
|
353
|
+
_timeoutWrapper = createTimeoutWrapper();
|
|
354
|
+
}
|
|
269
355
|
function _fetchSendPost(payload, oncomplete, sync) {
|
|
270
356
|
var _a;
|
|
271
357
|
var theUrl = payload.urlString;
|
|
@@ -315,7 +401,7 @@ var HttpManager = /** @class */ (function () {
|
|
|
315
401
|
_doOnComplete(oncomplete, response.status, headerMap, responseText);
|
|
316
402
|
_handleCollectorResponse(responseText);
|
|
317
403
|
}
|
|
318
|
-
})
|
|
404
|
+
}).catch(function (error) {
|
|
319
405
|
// In case there is an error in the request. Set the status to 0
|
|
320
406
|
// so that the events can be retried later.
|
|
321
407
|
if (!responseHandled) {
|
|
@@ -330,7 +416,7 @@ var HttpManager = /** @class */ (function () {
|
|
|
330
416
|
}
|
|
331
417
|
if (!responseHandled && payload.timeout > 0) {
|
|
332
418
|
// Simulate timeout
|
|
333
|
-
|
|
419
|
+
_timeoutWrapper.set(function () {
|
|
334
420
|
if (!responseHandled) {
|
|
335
421
|
// Assume a 500 response (which will cause a retry)
|
|
336
422
|
responseHandled = true;
|
|
@@ -450,15 +536,6 @@ var HttpManager = /** @class */ (function () {
|
|
|
450
536
|
}
|
|
451
537
|
return sendType;
|
|
452
538
|
}
|
|
453
|
-
_self.addQueryStringParameter = function (name, value) {
|
|
454
|
-
for (var i = 0; i < _queryStringParameters.length; i++) {
|
|
455
|
-
if (_queryStringParameters[i].name === name) {
|
|
456
|
-
_queryStringParameters[i].value = value;
|
|
457
|
-
return;
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
_queryStringParameters.push({ name: name, value: value });
|
|
461
|
-
};
|
|
462
539
|
_self.addHeader = function (name, value) {
|
|
463
540
|
_headers[name] = value;
|
|
464
541
|
};
|
|
@@ -501,6 +578,10 @@ var HttpManager = /** @class */ (function () {
|
|
|
501
578
|
if (_batchQueue.length > 0) {
|
|
502
579
|
_sendBatches(_clearQueue(), 0, true, 2 /* EventSendType.SendBeacon */, 2 /* SendRequestReason.Unload */);
|
|
503
580
|
}
|
|
581
|
+
arrForEach(_unloadHooks, function (hook) {
|
|
582
|
+
hook && hook.rm && hook.rm();
|
|
583
|
+
});
|
|
584
|
+
_unloadHooks = [];
|
|
504
585
|
};
|
|
505
586
|
/**
|
|
506
587
|
* Pause the sending of requests. No new requests will be sent.
|
|
@@ -700,7 +781,7 @@ var HttpManager = /** @class */ (function () {
|
|
|
700
781
|
}
|
|
701
782
|
function _doPayloadSend(thePayload, serializationStart, serializationCompleted, sendReason) {
|
|
702
783
|
if (thePayload && thePayload.payloadBlob && thePayload.payloadBlob.length > 0) {
|
|
703
|
-
var useSendHook_1 = !!
|
|
784
|
+
var useSendHook_1 = !!_sendHook;
|
|
704
785
|
var sendInterface_1 = _sendInterfaces[thePayload.sendType];
|
|
705
786
|
// Send all data using a beacon style transport if closing mode is on or channel was teared down
|
|
706
787
|
if (!_isBeaconPayload(thePayload.sendType) && thePayload.isBeacon && thePayload.sendReason === 2 /* SendRequestReason.Unload */) {
|
|
@@ -766,9 +847,9 @@ var HttpManager = /** @class */ (function () {
|
|
|
766
847
|
var isSync = thePayload.isTeardown || thePayload.isSync;
|
|
767
848
|
try {
|
|
768
849
|
sendInterface_1.sendPOST(payload, onComplete, isSync);
|
|
769
|
-
if (
|
|
850
|
+
if (_sendListener) {
|
|
770
851
|
// Send the original payload to the listener
|
|
771
|
-
|
|
852
|
+
_sendListener(orgPayloadData, payload, isSync, thePayload.isBeacon);
|
|
772
853
|
}
|
|
773
854
|
}
|
|
774
855
|
catch (ex) {
|
|
@@ -800,7 +881,7 @@ var HttpManager = /** @class */ (function () {
|
|
|
800
881
|
var senderCalled_1 = false;
|
|
801
882
|
doPerf(_core, function () { return "HttpManager:_doPayloadSend.sendHook"; }, function () {
|
|
802
883
|
try {
|
|
803
|
-
|
|
884
|
+
_sendHook(hookData_1, function (payload) {
|
|
804
885
|
senderCalled_1 = true;
|
|
805
886
|
// Add back the internal properties
|
|
806
887
|
if (!_customHttpInterface && !payload._thePayload) {
|
|
@@ -967,7 +1048,7 @@ var HttpManager = /** @class */ (function () {
|
|
|
967
1048
|
cb();
|
|
968
1049
|
}
|
|
969
1050
|
else {
|
|
970
|
-
|
|
1051
|
+
_timeoutWrapper.set(cb, interval);
|
|
971
1052
|
}
|
|
972
1053
|
}
|
|
973
1054
|
/**
|
|
@@ -1005,7 +1086,7 @@ var HttpManager = /** @class */ (function () {
|
|
|
1005
1086
|
return STR_EMPTY;
|
|
1006
1087
|
}
|
|
1007
1088
|
function _handleCollectorResponse(responseText) {
|
|
1008
|
-
var responseHandlers =
|
|
1089
|
+
var responseHandlers = _responseHandlers;
|
|
1009
1090
|
try {
|
|
1010
1091
|
for (var i = 0; i < responseHandlers.length; i++) {
|
|
1011
1092
|
try {
|
|
@@ -1064,8 +1145,8 @@ var HttpManager = /** @class */ (function () {
|
|
|
1064
1145
|
});
|
|
1065
1146
|
}
|
|
1066
1147
|
// Removed Stub for HttpManager.prototype.initialize.
|
|
1067
|
-
// Removed Stub for HttpManager.prototype.addQueryStringParameter.
|
|
1068
1148
|
// Removed Stub for HttpManager.prototype.addHeader.
|
|
1149
|
+
// Removed Stub for HttpManager.prototype.addResponseHandler.
|
|
1069
1150
|
// Removed Stub for HttpManager.prototype.addBatch.
|
|
1070
1151
|
// Removed Stub for HttpManager.prototype.canSendRequest.
|
|
1071
1152
|
// Removed Stub for HttpManager.prototype.sendQueuedRequests.
|