@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.
Files changed (105) hide show
  1. package/README.md +1 -1
  2. package/bundle/es5/ms.post-4.0.1.gbl.js +5918 -0
  3. package/bundle/es5/ms.post-4.0.1.gbl.js.map +1 -0
  4. package/bundle/es5/ms.post-4.0.1.gbl.min.js +7 -0
  5. package/bundle/es5/ms.post-4.0.1.gbl.min.js.map +1 -0
  6. package/bundle/es5/ms.post-4.0.1.integrity.json +46 -0
  7. package/bundle/es5/ms.post-4.0.1.js +5922 -0
  8. package/bundle/es5/ms.post-4.0.1.js.map +1 -0
  9. package/bundle/es5/ms.post-4.0.1.min.js +7 -0
  10. package/bundle/es5/ms.post-4.0.1.min.js.map +1 -0
  11. package/bundle/es5/ms.post.gbl.js +5918 -0
  12. package/bundle/es5/ms.post.gbl.js.map +1 -0
  13. package/bundle/es5/ms.post.gbl.min.js +7 -0
  14. package/bundle/es5/ms.post.gbl.min.js.map +1 -0
  15. package/bundle/es5/ms.post.integrity.json +46 -0
  16. package/bundle/es5/ms.post.js +5922 -0
  17. package/bundle/es5/ms.post.js.map +1 -0
  18. package/bundle/es5/ms.post.min.js +7 -0
  19. package/bundle/es5/ms.post.min.js.map +1 -0
  20. package/{bundle → dist/es5}/ms.post.js +3026 -1652
  21. package/dist/es5/ms.post.js.map +1 -0
  22. package/dist/es5/ms.post.min.js +7 -0
  23. package/dist/es5/ms.post.min.js.map +1 -0
  24. package/{dist-esm/src → dist-es5}/BatchNotificationActions.js +1 -1
  25. package/{dist-esm/src → dist-es5}/ClockSkewManager.js +2 -2
  26. package/{dist-esm/src → dist-es5}/ClockSkewManager.js.map +1 -1
  27. package/{dist-esm/src → dist-es5}/DataModels.js +1 -1
  28. package/{dist-esm/src → dist-es5}/EventBatch.js +1 -1
  29. package/{dist-esm/src → dist-es5}/HttpManager.js +175 -94
  30. package/dist-es5/HttpManager.js.map +1 -0
  31. package/{dist-esm/src → dist-es5}/Index.js +2 -2
  32. package/dist-es5/Index.js.map +1 -0
  33. package/{dist-esm/src → dist-es5}/InternalConstants.js +1 -1
  34. package/{dist-esm/src → dist-es5}/KillSwitch.js +2 -2
  35. package/{dist-esm/src → dist-es5}/KillSwitch.js.map +1 -1
  36. package/{dist-esm/src → dist-es5}/PostChannel.js +166 -144
  37. package/dist-es5/PostChannel.js.map +1 -0
  38. package/{dist-esm/src → dist-es5}/RetryPolicy.js +1 -1
  39. package/{dist-esm/src → dist-es5}/Serializer.js +3 -2
  40. package/dist-es5/Serializer.js.map +1 -0
  41. package/dist-es5/TimeoutOverrideWrapper.js +24 -0
  42. package/dist-es5/TimeoutOverrideWrapper.js.map +1 -0
  43. package/{dist-esm/src → dist-es5}/typings/XDomainRequest.js +1 -1
  44. package/package.json +15 -10
  45. package/tsconfig.json +5 -2
  46. package/{src/DataModels.ts → types/1ds-post-js.d.ts} +408 -467
  47. package/types/1ds-post-js.namespaced.d.ts +404 -0
  48. package/bundle/ms.post-3.2.12.gbl.js +0 -4524
  49. package/bundle/ms.post-3.2.12.gbl.js.map +0 -1
  50. package/bundle/ms.post-3.2.12.gbl.min.js +0 -7
  51. package/bundle/ms.post-3.2.12.gbl.min.js.map +0 -1
  52. package/bundle/ms.post-3.2.12.integrity.json +0 -46
  53. package/bundle/ms.post-3.2.12.js +0 -4527
  54. package/bundle/ms.post-3.2.12.js.map +0 -1
  55. package/bundle/ms.post-3.2.12.min.js +0 -7
  56. package/bundle/ms.post-3.2.12.min.js.map +0 -1
  57. package/bundle/ms.post.gbl.js +0 -4524
  58. package/bundle/ms.post.gbl.js.map +0 -1
  59. package/bundle/ms.post.gbl.min.js +0 -7
  60. package/bundle/ms.post.gbl.min.js.map +0 -1
  61. package/bundle/ms.post.integrity.json +0 -46
  62. package/bundle/ms.post.js.map +0 -1
  63. package/bundle/ms.post.min.js +0 -7
  64. package/bundle/ms.post.min.js.map +0 -1
  65. package/dist/ms.post.js +0 -2144
  66. package/dist/ms.post.js.map +0 -1
  67. package/dist/ms.post.min.js +0 -7
  68. package/dist/ms.post.min.js.map +0 -1
  69. package/dist-esm/src/BatchNotificationActions.d.ts +0 -36
  70. package/dist-esm/src/ClockSkewManager.d.ts +0 -38
  71. package/dist-esm/src/DataModels.d.ts +0 -405
  72. package/dist-esm/src/EventBatch.d.ts +0 -47
  73. package/dist-esm/src/HttpManager.d.ts +0 -88
  74. package/dist-esm/src/HttpManager.js.map +0 -1
  75. package/dist-esm/src/Index.d.ts +0 -9
  76. package/dist-esm/src/Index.js.map +0 -1
  77. package/dist-esm/src/InternalConstants.d.ts +0 -28
  78. package/dist-esm/src/KillSwitch.d.ts +0 -26
  79. package/dist-esm/src/PostChannel.d.ts +0 -101
  80. package/dist-esm/src/PostChannel.js.map +0 -1
  81. package/dist-esm/src/RetryPolicy.d.ts +0 -21
  82. package/dist-esm/src/Serializer.d.ts +0 -108
  83. package/dist-esm/src/Serializer.js.map +0 -1
  84. package/dist-esm/src/TimeoutOverrideWrapper.d.ts +0 -18
  85. package/dist-esm/src/TimeoutOverrideWrapper.js +0 -28
  86. package/dist-esm/src/TimeoutOverrideWrapper.js.map +0 -1
  87. package/dist-esm/src/typings/XDomainRequest.d.ts +0 -17
  88. package/src/BatchNotificationActions.ts +0 -44
  89. package/src/ClockSkewManager.ts +0 -127
  90. package/src/EventBatch.ts +0 -137
  91. package/src/HttpManager.ts +0 -1379
  92. package/src/Index.ts +0 -18
  93. package/src/InternalConstants.ts +0 -42
  94. package/src/KillSwitch.ts +0 -84
  95. package/src/PostChannel.ts +0 -1163
  96. package/src/RetryPolicy.ts +0 -46
  97. package/src/Serializer.ts +0 -487
  98. package/src/TimeoutOverrideWrapper.ts +0 -29
  99. package/src/typings/XDomainRequest.ts +0 -23
  100. /package/{dist-esm/src → dist-es5}/BatchNotificationActions.js.map +0 -0
  101. /package/{dist-esm/src → dist-es5}/DataModels.js.map +0 -0
  102. /package/{dist-esm/src → dist-es5}/EventBatch.js.map +0 -0
  103. /package/{dist-esm/src → dist-es5}/InternalConstants.js.map +0 -0
  104. /package/{dist-esm/src → dist-es5}/RetryPolicy.js.map +0 -0
  105. /package/{dist-esm/src → dist-es5}/typings/XDomainRequest.js.map +0 -0
@@ -1,5 +1,5 @@
1
1
  /*
2
- * 1DS JS SDK POST plugin, 3.2.12
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
  */
@@ -1,5 +1,5 @@
1
1
  /*
2
- * 1DS JS SDK POST plugin, 3.2.12
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 default ClockSkewManager;
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 default 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
+ {"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, 3.2.12
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
  */
@@ -1,5 +1,5 @@
1
1
  /*
2
- * 1DS JS SDK POST plugin, 3.2.12
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
  */
@@ -1,5 +1,5 @@
1
1
  /*
2
- * 1DS JS SDK POST plugin, 3.2.12
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 EVTClockSkewManager from "./ClockSkewManager";
14
- import EVTKillSwitch from "./KillSwitch";
15
- 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, openXhr, strTrim, strUndefined, useXDomainRequest } from "@microsoft/1ds-core-js";
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, timeoutOverride) {
104
- this._responseHandlers = [];
105
- var _urlString = "?cors=true&" + STR_CONTENT_TYPE_HEADER.toLowerCase() + "=" + DEFAULT_CONTENT_TYPE;
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 EVTClockSkewManager();
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 (endpointUrl, core, postChannel, httpInterface, channelConfig) {
132
- var _a;
133
- if (!channelConfig) {
134
- channelConfig = {};
135
- }
136
- _urlString = endpointUrl + _urlString;
137
- _useHeaders = !isUndefined(channelConfig.avoidOptions) ? !channelConfig.avoidOptions : true;
138
- _core = core;
139
- _cookieMgr = core.getCookieMgr();
140
- _enableEventTimings = !_core.config.disableEventTimings;
141
- var enableCompoundKey = !!_core.config.enableCompoundKey;
142
- _postManager = postChannel;
143
- _logger = _postManager.diagLog();
144
- var valueSanitizer = channelConfig.valueSanitizer;
145
- var stringifyObjects = channelConfig.stringifyObjects;
146
- if (!isUndefined(channelConfig.enableCompoundKey)) {
147
- enableCompoundKey = !!channelConfig.enableCompoundKey;
148
- }
149
- _xhrTimeout = channelConfig.xhrTimeout;
150
- _disableXhrSync = !!channelConfig.disableXhrSync;
151
- _disableFetchKeepAlive = !!channelConfig.disableFetchKeepAlive;
152
- _addNoResponse = channelConfig.addNoResponse !== false;
153
- _useBeacons = !isReactNative(); // Only use beacons if not running in React Native
154
- _serializer = new Serializer(_core, valueSanitizer, stringifyObjects, enableCompoundKey);
155
- if (!isNullOrUndefined(channelConfig.useSendBeacon)) {
156
- _useBeacons = !!channelConfig.useSendBeacon;
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
- var syncHttpInterface = httpInterface;
159
- var beaconHttpInterface = channelConfig.alwaysUseXhrOverride ? httpInterface : null;
160
- var fetchSyncHttpInterface = channelConfig.alwaysUseXhrOverride ? httpInterface : null;
161
- var beaconUnloadTransports = [3 /* TransportType.Beacon */, 2 /* TransportType.Fetch */];
162
- if (!httpInterface) {
163
- _customHttpInterface = false;
164
- var location_1 = getLocation();
165
- if (location_1 && location_1.protocol && location_1.protocol.toLowerCase() === "file:") {
166
- // Special case where a local html file fails with a CORS error on Chromium browsers
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
- syncHttpInterface = _getSenderInterface(theTransports, true);
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
- timeoutOverride.set(function () {
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
- })["catch"](function (error) {
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
- timeoutOverride.set(function () {
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 = !!_self.sendHook;
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 (_self.sendListener) {
850
+ if (_sendListener) {
770
851
  // Send the original payload to the listener
771
- _self.sendListener(orgPayloadData, payload, isSync, thePayload.isBeacon);
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
- _self.sendHook(hookData_1, function (payload) {
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
- timeoutOverride.set(cb, interval);
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 = _self._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.