@microsoft/applicationinsights-core-js 3.0.0-beta.2210-01 → 3.0.0-beta.2210-03

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 (178) hide show
  1. package/browser/applicationinsights-core-js.integrity.json +9 -9
  2. package/browser/applicationinsights-core-js.js +1249 -675
  3. package/browser/applicationinsights-core-js.js.map +1 -1
  4. package/browser/applicationinsights-core-js.min.js +2 -2
  5. package/browser/applicationinsights-core-js.min.js.map +1 -1
  6. package/dist/applicationinsights-core-js.api.json +3680 -1694
  7. package/dist/applicationinsights-core-js.api.md +126 -46
  8. package/dist/applicationinsights-core-js.d.ts +327 -124
  9. package/dist/applicationinsights-core-js.js +1249 -675
  10. package/dist/applicationinsights-core-js.js.map +1 -1
  11. package/dist/applicationinsights-core-js.min.js +2 -2
  12. package/dist/applicationinsights-core-js.min.js.map +1 -1
  13. package/dist/applicationinsights-core-js.rollup.d.ts +327 -124
  14. package/dist-esm/Config/ConfigDefaults.js +114 -0
  15. package/dist-esm/Config/ConfigDefaults.js.map +1 -0
  16. package/dist-esm/Config/DynamicConfig.js +129 -0
  17. package/dist-esm/Config/DynamicConfig.js.map +1 -0
  18. package/dist-esm/Config/DynamicProperty.js +139 -0
  19. package/dist-esm/Config/DynamicProperty.js.map +1 -0
  20. package/dist-esm/Config/DynamicState.js +109 -0
  21. package/dist-esm/Config/DynamicState.js.map +1 -0
  22. package/dist-esm/Config/DynamicSupport.js +57 -0
  23. package/dist-esm/Config/DynamicSupport.js.map +1 -0
  24. package/dist-esm/Config/IConfigDefaults.js +8 -0
  25. package/dist-esm/Config/IConfigDefaults.js.map +1 -0
  26. package/dist-esm/Config/IDynamicConfigHandler.js +8 -0
  27. package/dist-esm/Config/IDynamicConfigHandler.js.map +1 -0
  28. package/dist-esm/Config/IDynamicPropertyHandler.js +8 -0
  29. package/dist-esm/Config/IDynamicPropertyHandler.js.map +1 -0
  30. package/dist-esm/Config/IDynamicWatcher.js +8 -0
  31. package/dist-esm/Config/IDynamicWatcher.js.map +1 -0
  32. package/dist-esm/Config/_IDynamicConfigHandlerState.js +6 -0
  33. package/dist-esm/Config/_IDynamicConfigHandlerState.js.map +1 -0
  34. package/dist-esm/JavaScriptSDK/AppInsightsCore.js +808 -23
  35. package/dist-esm/JavaScriptSDK/AppInsightsCore.js.map +1 -1
  36. package/dist-esm/JavaScriptSDK/BaseTelemetryPlugin.js +22 -18
  37. package/dist-esm/JavaScriptSDK/BaseTelemetryPlugin.js.map +1 -1
  38. package/dist-esm/JavaScriptSDK/ChannelController.js +1 -1
  39. package/dist-esm/JavaScriptSDK/CookieMgr.js +78 -38
  40. package/dist-esm/JavaScriptSDK/CookieMgr.js.map +1 -1
  41. package/dist-esm/JavaScriptSDK/CoreUtils.js +6 -5
  42. package/dist-esm/JavaScriptSDK/CoreUtils.js.map +1 -1
  43. package/dist-esm/JavaScriptSDK/DataCacheHelper.js +10 -8
  44. package/dist-esm/JavaScriptSDK/DataCacheHelper.js.map +1 -1
  45. package/dist-esm/JavaScriptSDK/DbgExtensionUtils.js +1 -1
  46. package/dist-esm/JavaScriptSDK/DiagnosticLogger.js +40 -23
  47. package/dist-esm/JavaScriptSDK/DiagnosticLogger.js.map +1 -1
  48. package/dist-esm/JavaScriptSDK/EnvUtils.js +1 -115
  49. package/dist-esm/JavaScriptSDK/EnvUtils.js.map +1 -1
  50. package/dist-esm/JavaScriptSDK/EventHelpers.js +30 -29
  51. package/dist-esm/JavaScriptSDK/EventHelpers.js.map +1 -1
  52. package/dist-esm/JavaScriptSDK/HelperFuncs.js +19 -34
  53. package/dist-esm/JavaScriptSDK/HelperFuncs.js.map +1 -1
  54. package/dist-esm/JavaScriptSDK/InstrumentHooks.js +1 -1
  55. package/dist-esm/JavaScriptSDK/InternalConstants.js +5 -1
  56. package/dist-esm/JavaScriptSDK/InternalConstants.js.map +1 -1
  57. package/dist-esm/JavaScriptSDK/NotificationManager.js +18 -11
  58. package/dist-esm/JavaScriptSDK/NotificationManager.js.map +1 -1
  59. package/dist-esm/JavaScriptSDK/PerfManager.js +2 -3
  60. package/dist-esm/JavaScriptSDK/PerfManager.js.map +1 -1
  61. package/dist-esm/JavaScriptSDK/ProcessTelemetryContext.js +62 -53
  62. package/dist-esm/JavaScriptSDK/ProcessTelemetryContext.js.map +1 -1
  63. package/dist-esm/JavaScriptSDK/RandomHelper.js +1 -1
  64. package/dist-esm/JavaScriptSDK/TelemetryHelpers.js +8 -10
  65. package/dist-esm/JavaScriptSDK/TelemetryHelpers.js.map +1 -1
  66. package/dist-esm/JavaScriptSDK/TelemetryInitializerPlugin.js +3 -4
  67. package/dist-esm/JavaScriptSDK/TelemetryInitializerPlugin.js.map +1 -1
  68. package/dist-esm/JavaScriptSDK/UnloadHandlerContainer.js +1 -1
  69. package/dist-esm/JavaScriptSDK/W3cTraceParent.js +12 -10
  70. package/dist-esm/JavaScriptSDK/W3cTraceParent.js.map +1 -1
  71. package/dist-esm/JavaScriptSDK.Enums/EnumHelperFuncs.js +1 -2
  72. package/dist-esm/JavaScriptSDK.Enums/EnumHelperFuncs.js.map +1 -1
  73. package/dist-esm/JavaScriptSDK.Enums/EventsDiscardedReason.js +1 -1
  74. package/dist-esm/JavaScriptSDK.Enums/LoggingEnums.js +2 -107
  75. package/dist-esm/JavaScriptSDK.Enums/LoggingEnums.js.map +1 -1
  76. package/dist-esm/JavaScriptSDK.Enums/SendRequestReason.js +1 -1
  77. package/dist-esm/JavaScriptSDK.Enums/TelemetryUnloadReason.js +1 -1
  78. package/dist-esm/JavaScriptSDK.Enums/TelemetryUpdateReason.js +1 -1
  79. package/dist-esm/JavaScriptSDK.Interfaces/IAppInsightsCore.js +1 -1
  80. package/dist-esm/JavaScriptSDK.Interfaces/IChannelControls.js +1 -1
  81. package/dist-esm/JavaScriptSDK.Interfaces/IConfiguration.js +1 -1
  82. package/dist-esm/JavaScriptSDK.Interfaces/ICookieMgr.js +1 -1
  83. package/dist-esm/JavaScriptSDK.Interfaces/IDbgExtension.js +1 -1
  84. package/dist-esm/JavaScriptSDK.Interfaces/IDiagnosticLogger.js +1 -1
  85. package/dist-esm/JavaScriptSDK.Interfaces/IDistributedTraceContext.js +1 -1
  86. package/dist-esm/JavaScriptSDK.Interfaces/IInstrumentHooks.js +1 -1
  87. package/dist-esm/JavaScriptSDK.Interfaces/INotificationListener.js +1 -1
  88. package/dist-esm/JavaScriptSDK.Interfaces/INotificationManager.js +1 -1
  89. package/dist-esm/JavaScriptSDK.Interfaces/IPerfEvent.js +1 -1
  90. package/dist-esm/JavaScriptSDK.Interfaces/IPerfManager.js +1 -1
  91. package/dist-esm/JavaScriptSDK.Interfaces/IProcessTelemetryContext.js +1 -1
  92. package/dist-esm/JavaScriptSDK.Interfaces/ITelemetryInitializers.js +1 -1
  93. package/dist-esm/JavaScriptSDK.Interfaces/ITelemetryItem.js +1 -1
  94. package/dist-esm/JavaScriptSDK.Interfaces/ITelemetryPlugin.js +1 -1
  95. package/dist-esm/JavaScriptSDK.Interfaces/ITelemetryPluginChain.js +1 -1
  96. package/dist-esm/JavaScriptSDK.Interfaces/ITelemetryUnloadState.js +1 -1
  97. package/dist-esm/JavaScriptSDK.Interfaces/ITelemetryUpdateState.js +1 -1
  98. package/dist-esm/JavaScriptSDK.Interfaces/ITraceParent.js +1 -1
  99. package/dist-esm/JavaScriptSDK.Interfaces/IUnloadHook.js +8 -0
  100. package/dist-esm/JavaScriptSDK.Interfaces/IUnloadHook.js.map +1 -0
  101. package/dist-esm/JavaScriptSDK.Interfaces/IUnloadableComponent.js +3 -1
  102. package/dist-esm/JavaScriptSDK.Interfaces/IUnloadableComponent.js.map +1 -1
  103. package/dist-esm/__DynamicConstants.js +26 -23
  104. package/dist-esm/__DynamicConstants.js.map +1 -1
  105. package/dist-esm/applicationinsights-core-js.js +6 -4
  106. package/dist-esm/applicationinsights-core-js.js.map +1 -1
  107. package/package.json +2 -2
  108. package/src/JavaScriptSDK/AppInsightsCore.ts +1156 -16
  109. package/src/JavaScriptSDK/BaseTelemetryPlugin.ts +25 -17
  110. package/src/JavaScriptSDK/CookieMgr.ts +88 -41
  111. package/src/JavaScriptSDK/CoreUtils.ts +4 -3
  112. package/src/JavaScriptSDK/DiagnosticLogger.ts +45 -23
  113. package/src/JavaScriptSDK/EnvUtils.ts +0 -133
  114. package/src/JavaScriptSDK/EventHelpers.ts +29 -28
  115. package/src/JavaScriptSDK/HelperFuncs.ts +22 -39
  116. package/src/JavaScriptSDK/InternalConstants.ts +5 -0
  117. package/src/JavaScriptSDK/NotificationManager.ts +25 -14
  118. package/src/JavaScriptSDK/PerfManager.ts +2 -2
  119. package/src/JavaScriptSDK/ProcessTelemetryContext.ts +73 -56
  120. package/src/JavaScriptSDK/TelemetryHelpers.ts +8 -9
  121. package/src/JavaScriptSDK/TelemetryInitializerPlugin.ts +2 -2
  122. package/src/JavaScriptSDK/W3cTraceParent.ts +7 -6
  123. package/src/JavaScriptSDK.Enums/EnumHelperFuncs.ts +0 -1
  124. package/src/JavaScriptSDK.Enums/LoggingEnums.ts +9 -108
  125. package/src/JavaScriptSDK.Enums/TelemetryUpdateReason.ts +1 -1
  126. package/src/JavaScriptSDK.Interfaces/IAppInsightsCore.ts +28 -3
  127. package/src/JavaScriptSDK.Interfaces/ICookieMgr.ts +8 -0
  128. package/src/JavaScriptSDK.Interfaces/IDiagnosticLogger.ts +14 -7
  129. package/src/JavaScriptSDK.Interfaces/IInstrumentHooks.ts +3 -1
  130. package/src/JavaScriptSDK.Interfaces/INotificationListener.ts +5 -5
  131. package/src/JavaScriptSDK.Interfaces/INotificationManager.ts +8 -8
  132. package/src/JavaScriptSDK.Interfaces/IPerfManager.ts +3 -3
  133. package/src/JavaScriptSDK.Interfaces/IProcessTelemetryContext.ts +10 -9
  134. package/src/JavaScriptSDK.Interfaces/ITelemetryInitializers.ts +2 -1
  135. package/src/JavaScriptSDK.Interfaces/ITelemetryUpdateState.ts +15 -5
  136. package/src/JavaScriptSDK.Interfaces/IUnloadHook.ts +22 -0
  137. package/src/JavaScriptSDK.Interfaces/IUnloadableComponent.ts +3 -3
  138. package/tsconfig.json +3 -2
  139. package/types/Config/ConfigDefaults.d.ts +10 -0
  140. package/types/Config/DynamicConfig.d.ts +23 -0
  141. package/types/Config/DynamicProperty.d.ts +3 -0
  142. package/types/Config/DynamicState.d.ts +3 -0
  143. package/types/Config/DynamicSupport.d.ts +15 -0
  144. package/types/Config/IConfigDefaults.d.ts +42 -0
  145. package/types/Config/IDynamicConfigHandler.d.ts +46 -0
  146. package/types/Config/IDynamicPropertyHandler.d.ts +11 -0
  147. package/types/Config/IDynamicWatcher.d.ts +28 -0
  148. package/types/Config/_IDynamicConfigHandlerState.d.ts +35 -0
  149. package/types/JavaScriptSDK/AppInsightsCore.d.ts +136 -4
  150. package/types/JavaScriptSDK/BaseTelemetryPlugin.d.ts +2 -2
  151. package/types/JavaScriptSDK/CookieMgr.d.ts +0 -10
  152. package/types/JavaScriptSDK/DiagnosticLogger.d.ts +13 -11
  153. package/types/JavaScriptSDK/EventHelpers.d.ts +24 -24
  154. package/types/JavaScriptSDK/HelperFuncs.d.ts +13 -11
  155. package/types/JavaScriptSDK/InternalConstants.d.ts +4 -0
  156. package/types/JavaScriptSDK/NotificationManager.d.ts +7 -7
  157. package/types/JavaScriptSDK/PerfManager.d.ts +2 -2
  158. package/types/JavaScriptSDK/ProcessTelemetryContext.d.ts +3 -2
  159. package/types/JavaScriptSDK/TelemetryHelpers.d.ts +3 -3
  160. package/types/JavaScriptSDK.Enums/LoggingEnums.d.ts +7 -5
  161. package/types/JavaScriptSDK.Enums/TelemetryUpdateReason.d.ts +1 -0
  162. package/types/JavaScriptSDK.Interfaces/IAppInsightsCore.d.ts +25 -3
  163. package/types/JavaScriptSDK.Interfaces/ICookieMgr.d.ts +6 -0
  164. package/types/JavaScriptSDK.Interfaces/IDiagnosticLogger.d.ts +13 -7
  165. package/types/JavaScriptSDK.Interfaces/IInstrumentHooks.d.ts +2 -1
  166. package/types/JavaScriptSDK.Interfaces/INotificationListener.d.ts +5 -5
  167. package/types/JavaScriptSDK.Interfaces/INotificationManager.d.ts +8 -8
  168. package/types/JavaScriptSDK.Interfaces/IPerfManager.d.ts +3 -3
  169. package/types/JavaScriptSDK.Interfaces/IProcessTelemetryContext.d.ts +5 -9
  170. package/types/JavaScriptSDK.Interfaces/ITelemetryInitializers.d.ts +2 -1
  171. package/types/JavaScriptSDK.Interfaces/ITelemetryUpdateState.d.ts +13 -2
  172. package/types/JavaScriptSDK.Interfaces/IUnloadHook.d.ts +18 -0
  173. package/types/__DynamicConstants.d.ts +18 -15
  174. package/types/applicationinsights-core-js.d.ts +11 -4
  175. package/dist-esm/JavaScriptSDK/BaseCore.js +0 -654
  176. package/dist-esm/JavaScriptSDK/BaseCore.js.map +0 -1
  177. package/src/JavaScriptSDK/BaseCore.ts +0 -948
  178. package/types/JavaScriptSDK/BaseCore.d.ts +0 -124
@@ -3,13 +3,15 @@
3
3
  "use strict";
4
4
 
5
5
  import dynamicProto from "@microsoft/dynamicproto-js";
6
- import { arrForEach, isArray, isFunction, isNullOrUndefined } from "@nevware21/ts-utils";
6
+ import { arrAppend, arrForEach, dumpObj, isFunction } from "@nevware21/ts-utils";
7
+ import { createDynamicConfig } from "../Config/DynamicConfig";
8
+ import { IConfigDefaults } from "../Config/IConfigDefaults";
9
+ import { _eInternalMessageId, eLoggingSeverity } from "../JavaScriptSDK.Enums/LoggingEnums";
7
10
  import { TelemetryUnloadReason } from "../JavaScriptSDK.Enums/TelemetryUnloadReason";
8
11
  import { TelemetryUpdateReason } from "../JavaScriptSDK.Enums/TelemetryUpdateReason";
9
12
  import { IAppInsightsCore } from "../JavaScriptSDK.Interfaces/IAppInsightsCore";
10
13
  import { IConfiguration } from "../JavaScriptSDK.Interfaces/IConfiguration";
11
14
  import { IDiagnosticLogger } from "../JavaScriptSDK.Interfaces/IDiagnosticLogger";
12
- import { IInstrumentHook } from "../JavaScriptSDK.Interfaces/IInstrumentHooks";
13
15
  import {
14
16
  IProcessTelemetryContext, IProcessTelemetryUnloadContext, IProcessTelemetryUpdateContext
15
17
  } from "../JavaScriptSDK.Interfaces/IProcessTelemetryContext";
@@ -18,7 +20,9 @@ import { IPlugin, ITelemetryPlugin } from "../JavaScriptSDK.Interfaces/ITelemetr
18
20
  import { ITelemetryPluginChain } from "../JavaScriptSDK.Interfaces/ITelemetryPluginChain";
19
21
  import { ITelemetryUnloadState } from "../JavaScriptSDK.Interfaces/ITelemetryUnloadState";
20
22
  import { ITelemetryUpdateState } from "../JavaScriptSDK.Interfaces/ITelemetryUpdateState";
21
- import { proxyFunctionAs, setValue } from "./HelperFuncs";
23
+ import { ILegacyUnloadHook, IUnloadHook } from "../JavaScriptSDK.Interfaces/IUnloadHook";
24
+ import { _throwInternal } from "./DiagnosticLogger";
25
+ import { isNotNullOrUndefined, proxyFunctionAs } from "./HelperFuncs";
22
26
  import { STR_EXTENSION_CONFIG } from "./InternalConstants";
23
27
  import {
24
28
  createProcessTelemetryContext, createProcessTelemetryUnloadContext, createProcessTelemetryUpdateContext
@@ -27,6 +31,11 @@ import { IUnloadHandlerContainer, UnloadHandler, createUnloadHandlerContainer }
27
31
 
28
32
  let strGetPlugin = "getPlugin";
29
33
 
34
+ const defaultValues: IConfigDefaults<IConfiguration> = {
35
+ [STR_EXTENSION_CONFIG]: { isVal: isNotNullOrUndefined, v: []}
36
+ };
37
+
38
+
30
39
  /**
31
40
  * BaseTelemetryPlugin provides a basic implementation of the ITelemetryPlugin interface so that plugins
32
41
  * can avoid implementation the same set of boiler plate code as well as provide a base
@@ -109,7 +118,7 @@ export abstract class BaseTelemetryPlugin implements ITelemetryPlugin {
109
118
  let _rootCtx: IProcessTelemetryContext; // Used as the root context, holding the current config and initialized core
110
119
  let _nextPlugin: ITelemetryPlugin | ITelemetryPluginChain; // Used for backward compatibility where plugins don't call the main pipeline
111
120
  let _unloadHandlerContainer: IUnloadHandlerContainer;
112
- let _hooks: IInstrumentHook[];
121
+ let _hooks: Array<ILegacyUnloadHook| IUnloadHook>;
113
122
 
114
123
  _initDefaults();
115
124
 
@@ -146,9 +155,14 @@ export abstract class BaseTelemetryPlugin implements ITelemetryPlugin {
146
155
  let oldHooks = _hooks;
147
156
  _hooks = [];
148
157
 
149
- // Remove all instrumentation hooks
158
+ // Remove all registered unload hooks
150
159
  arrForEach(oldHooks, (fn) => {
151
- fn.rm();
160
+ // allow either rm or remove callback function
161
+ try{
162
+ ((fn as IUnloadHook).rm || (fn as ILegacyUnloadHook).remove).call(fn);
163
+ } catch (e) {
164
+ _throwInternal(theUnloadCtx.diagLog(), eLoggingSeverity.WARNING, _eInternalMessageId.PluginException, "Unloading:" + dumpObj(e));
165
+ }
152
166
  });
153
167
 
154
168
  if (result === true) {
@@ -201,13 +215,9 @@ export abstract class BaseTelemetryPlugin implements ITelemetryPlugin {
201
215
  return result;
202
216
  };
203
217
 
204
- _self._addHook = (hooks: IInstrumentHook | IInstrumentHook[]) => {
218
+ _self._addHook = (hooks: IUnloadHook | IUnloadHook[] | ILegacyUnloadHook | ILegacyUnloadHook[]) => {
205
219
  if (hooks) {
206
- if (isArray(hooks)) {
207
- _hooks = _hooks.concat(hooks);
208
- } else {
209
- _hooks.push(hooks);
210
- }
220
+ arrAppend(_hooks, hooks);
211
221
  }
212
222
  };
213
223
 
@@ -267,10 +277,8 @@ export abstract class BaseTelemetryPlugin implements ITelemetryPlugin {
267
277
  }
268
278
 
269
279
  function _setDefaults(config: IConfiguration, core: IAppInsightsCore, pluginChain: ITelemetryPluginChain) {
270
- if (config) {
271
- // Make sure the extensionConfig exists
272
- setValue(config, STR_EXTENSION_CONFIG, [], null, isNullOrUndefined);
273
- }
280
+ // Make sure the extensionConfig exists and the config is dynamic
281
+ createDynamicConfig(config, defaultValues, core.logger);
274
282
 
275
283
  if (!pluginChain && core) {
276
284
  // Get the first plugin from the core
@@ -339,7 +347,7 @@ export abstract class BaseTelemetryPlugin implements ITelemetryPlugin {
339
347
  * Add this hook so that it is automatically removed during unloading
340
348
  * @param hooks - The single hook or an array of IInstrumentHook objects
341
349
  */
342
- protected _addHook(hooks: IInstrumentHook | IInstrumentHook[]): void {
350
+ protected _addHook(hooks: IUnloadHook | IUnloadHook[] | ILegacyUnloadHook | ILegacyUnloadHook[]): void {
343
351
  // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging
344
352
  }
345
353
  }
@@ -1,9 +1,12 @@
1
1
  // Copyright (c) Microsoft Corporation. All rights reserved.
2
2
  // Licensed under the MIT License.
3
3
  import {
4
- arrForEach, dumpObj, getDocument, getNavigator, isArray, isFunction, isNullOrUndefined, isString, isTruthy, isUndefined, objForEachKey,
5
- strEndsWith, strTrim
4
+ arrForEach, dumpObj, getDocument, getNavigator, isArray, isFunction, isNullOrUndefined, isString, isTruthy, isUndefined, objDeepFreeze,
5
+ objForEachKey, strEndsWith, strTrim
6
6
  } from "@nevware21/ts-utils";
7
+ import { applyDefaults } from "../Config/ConfigDefaults";
8
+ import { createDynamicConfig, onConfigChange } from "../Config/DynamicConfig";
9
+ import { IConfigDefaults } from "../Config/IConfigDefaults";
7
10
  import { _eInternalMessageId, eLoggingSeverity } from "../JavaScriptSDK.Enums/LoggingEnums";
8
11
  import { IAppInsightsCore } from "../JavaScriptSDK.Interfaces/IAppInsightsCore";
9
12
  import { IConfiguration } from "../JavaScriptSDK.Interfaces/IConfiguration";
@@ -12,13 +15,12 @@ import { IDiagnosticLogger } from "../JavaScriptSDK.Interfaces/IDiagnosticLogger
12
15
  import { _throwInternal } from "./DiagnosticLogger";
13
16
  import { getLocation, isIE } from "./EnvUtils";
14
17
  import { dateNow, getExceptionName, isNotNullOrUndefined, setValue, strContains } from "./HelperFuncs";
15
- import { STR_EMPTY } from "./InternalConstants";
18
+ import { STR_DOMAIN, STR_EMPTY, STR_PATH, UNDEFINED_VALUE } from "./InternalConstants";
16
19
 
17
20
  const strToGMTString = "toGMTString";
18
21
  const strToUTCString = "toUTCString";
19
22
  const strCookie = "cookie";
20
23
  const strExpires = "expires";
21
- const strEnabled = "enabled";
22
24
  const strIsCookieUseDisabled = "isCookieUseDisabled";
23
25
  const strDisableCookiesUsage = "disableCookiesUsage";
24
26
  const strConfigCookieMgr = "_ckMgr";
@@ -30,6 +32,29 @@ let _doc = getDocument();
30
32
  let _cookieCache = {};
31
33
  let _globalCookieConfig = {};
32
34
 
35
+ // `isCookieUseDisabled` is deprecated, so explicitly casting as a key of IConfiguration to avoid typing error
36
+ // when both isCookieUseDisabled and disableCookiesUsage are used disableCookiesUsage will take precedent, which is
37
+ // why its listed first
38
+
39
+ const defaultConfig: IConfigDefaults<ICookieMgrConfig> = objDeepFreeze({
40
+ [STR_DOMAIN]: { fb: "cookieDomain", dfVal: isNotNullOrUndefined },
41
+ path: { fb: "cookiePath", dfVal: isNotNullOrUndefined },
42
+ enabled: UNDEFINED_VALUE
43
+ });
44
+
45
+ /**
46
+ * Set the supported dynamic config values as undefined (or an empty object) so that
47
+ * any listeners will be informed of any changes.
48
+ * Explicitly NOT including the deprecated `isCookieUseDisabled` as we don't want to support
49
+ * the v1 deprecated field as dynamic for updates
50
+ */
51
+ const rootDefaultConfig = {
52
+ cookieCfg: {},
53
+ cookieDomain: UNDEFINED_VALUE,
54
+ cookiePath: UNDEFINED_VALUE,
55
+ [strDisableCookiesUsage]: UNDEFINED_VALUE
56
+ };
57
+
33
58
  /**
34
59
  * @ignore
35
60
  * DO NOT USE or export from the module, this is exposed as public to support backward compatibility of previous static utility methods only.
@@ -39,7 +64,7 @@ let _globalCookieConfig = {};
39
64
  * Example, if you are using a shared component that is also using Application Insights you will affect their cookie handling.
40
65
  * @param logger - The DiagnosticLogger to use for reporting errors.
41
66
  */
42
- export function _gblCookieMgr(config?: IConfiguration, logger?: IDiagnosticLogger): ICookieMgr {
67
+ function _gblCookieMgr(config?: IConfiguration, logger?: IDiagnosticLogger): ICookieMgr {
43
68
  // Stash the global instance against the BaseCookieMgr class
44
69
  let inst = createCookieMgr[strConfigCookieMgr] || _globalCookieConfig[strConfigCookieMgr];
45
70
  if (!inst) {
@@ -60,28 +85,6 @@ function _isMgrEnabled(cookieMgr: ICookieMgr) {
60
85
  return true;
61
86
  }
62
87
 
63
- function _createCookieMgrConfig(rootConfig: IConfiguration): ICookieMgrConfig {
64
- let cookieMgrCfg = rootConfig.cookieCfg = rootConfig.cookieCfg || {};
65
-
66
- // Sets the values from the root config if not already present on the cookieMgrCfg
67
- setValue(cookieMgrCfg, "domain", rootConfig.cookieDomain, isNotNullOrUndefined, isNullOrUndefined);
68
- setValue(cookieMgrCfg, "path", rootConfig.cookiePath || "/", null, isNullOrUndefined);
69
- if (isNullOrUndefined(cookieMgrCfg[strEnabled])) {
70
- // Set the enabled from the provided setting or the legacy root values
71
- let cookieEnabled: boolean;
72
- if (!isUndefined(rootConfig[strIsCookieUseDisabled])) {
73
- cookieEnabled = !rootConfig[strIsCookieUseDisabled];
74
- }
75
- if (!isUndefined(rootConfig[strDisableCookiesUsage])) {
76
- cookieEnabled = !rootConfig[strDisableCookiesUsage];
77
- }
78
-
79
- cookieMgrCfg[strEnabled] = cookieEnabled;
80
- }
81
-
82
- return cookieMgrCfg;
83
- }
84
-
85
88
  function _isIgnoredCookie(cookieMgrCfg: ICookieMgrConfig, name: string) {
86
89
  if (name && cookieMgrCfg && isArray(cookieMgrCfg.ignoreCookies)) {
87
90
  return cookieMgrCfg.ignoreCookies.indexOf(name) !== -1;
@@ -114,7 +117,7 @@ export function safeGetCookieMgr(core: IAppInsightsCore, config?: IConfiguration
114
117
  cookieMgr = core.getCookieMgr();
115
118
  } else if (config) {
116
119
  let cookieCfg = config.cookieCfg;
117
- if (cookieCfg[strConfigCookieMgr]) {
120
+ if (cookieCfg && cookieCfg[strConfigCookieMgr]) {
118
121
  cookieMgr = cookieCfg[strConfigCookieMgr];
119
122
  } else {
120
123
  cookieMgr = createCookieMgr(config);
@@ -130,12 +133,56 @@ export function safeGetCookieMgr(core: IAppInsightsCore, config?: IConfiguration
130
133
  }
131
134
 
132
135
  export function createCookieMgr(rootConfig?: IConfiguration, logger?: IDiagnosticLogger): ICookieMgr {
133
- let cookieMgrConfig = _createCookieMgrConfig(rootConfig || _globalCookieConfig);
136
+ let cookieMgrConfig: ICookieMgrConfig;
137
+ let _path: string;
138
+ let _domain: string;
134
139
 
135
- let _path = cookieMgrConfig.path || "/";
136
- let _domain = cookieMgrConfig.domain;
137
140
  // Explicitly checking against false, so that setting to undefined will === true
138
- let _enabled = cookieMgrConfig[strEnabled] !== false;
141
+ let _enabled: boolean;
142
+ let _getCookieFn: (name: string) => string;
143
+ let _setCookieFn: (name: string, cookieValue: string) => void;
144
+ let _delCookieFn: (name: string, cookieValue: string) => void;
145
+
146
+ // Make sure the root config is dynamic as it may be the global config
147
+ rootConfig = createDynamicConfig(rootConfig || _globalCookieConfig, null, logger).cfg;
148
+
149
+ // Will get recalled if the referenced configuration is changed
150
+ onConfigChange(rootConfig, (details) => {
151
+
152
+ // Make sure the root config has all of the the defaults to the root config to ensure they are dynamic
153
+ applyDefaults(details.cfg, rootDefaultConfig);
154
+
155
+ // Create and apply the defaults to the cookieCfg element
156
+ cookieMgrConfig = applyDefaults(details.cfg.cookieCfg, defaultConfig);
157
+ let isEnabled = cookieMgrConfig.enabled;
158
+ if (isNullOrUndefined(isEnabled)) {
159
+ // Set the enabled from the provided setting or the legacy root values
160
+ let cookieEnabled: boolean;
161
+
162
+ // This field is deprecated and dynamic updates will not be fully supported
163
+ if (!isUndefined(rootConfig[strIsCookieUseDisabled])) {
164
+ cookieEnabled = !rootConfig[strIsCookieUseDisabled];
165
+ }
166
+
167
+ // If this value is defined it takes precedent over the above
168
+ if (!isUndefined(rootConfig[strDisableCookiesUsage])) {
169
+ cookieEnabled = !rootConfig[strDisableCookiesUsage];
170
+ }
171
+
172
+ // Not setting the cookieMgrConfig.enabled as that will update (set) the global dynamic config
173
+ // So future "updates" then may not be as expected
174
+ isEnabled = cookieEnabled;
175
+ }
176
+
177
+ _path = cookieMgrConfig.path || "/";
178
+ _domain = cookieMgrConfig.domain;
179
+ // Explicitly checking against false, so that setting to undefined will === true
180
+ _enabled = isEnabled !== false;
181
+
182
+ _getCookieFn = cookieMgrConfig.getCookie || _getCookieValue;
183
+ _setCookieFn = cookieMgrConfig.setCookie || _setCookieValue;
184
+ _delCookieFn = cookieMgrConfig.delCookie || _setCookieValue;
185
+ }, logger);
139
186
 
140
187
  let cookieMgr: ICookieMgr = {
141
188
  isEnabled: () => {
@@ -167,7 +214,7 @@ export function createCookieMgr(rootConfig?: IConfiguration, logger?: IDiagnosti
167
214
  }
168
215
 
169
216
  // Only update domain if not already present (isUndefined) and the value is truthy (not null, undefined or empty string)
170
- setValue(values, "domain", domain || _domain, isTruthy, isUndefined);
217
+ setValue(values, STR_DOMAIN, domain || _domain, isTruthy, isUndefined);
171
218
 
172
219
  if (!isNullOrUndefined(maxAgeSec)) {
173
220
  const _isIE = isIE();
@@ -206,10 +253,10 @@ export function createCookieMgr(rootConfig?: IConfiguration, logger?: IDiagnosti
206
253
  }
207
254
  }
208
255
 
209
- setValue(values, "path", path || _path, null, isUndefined);
256
+ setValue(values, STR_PATH, path || _path, null, isUndefined);
210
257
 
211
- let setCookieFn = cookieMgrConfig.setCookie || _setCookieValue;
212
- setCookieFn(name, _formatCookieValue(theValue, values));
258
+ //let setCookieFn = cookieMgrConfig.setCookie || _setCookieValue;
259
+ _setCookieFn(name, _formatCookieValue(theValue, values));
213
260
  result = true;
214
261
  }
215
262
 
@@ -218,7 +265,7 @@ export function createCookieMgr(rootConfig?: IConfiguration, logger?: IDiagnosti
218
265
  get: (name: string): string => {
219
266
  let value = STR_EMPTY
220
267
  if (_isMgrEnabled(cookieMgr) && !_isIgnoredCookie(cookieMgrConfig, name)) {
221
- value = (cookieMgrConfig.getCookie || _getCookieValue)(name);
268
+ value = _getCookieFn(name);
222
269
  }
223
270
 
224
271
  return value;
@@ -237,7 +284,7 @@ export function createCookieMgr(rootConfig?: IConfiguration, logger?: IDiagnosti
237
284
  if (areCookiesSupported(logger)) {
238
285
  // Setting the expiration date in the past immediately removes the cookie
239
286
  let values = {
240
- ["path"]: path ? path : "/",
287
+ [STR_PATH]: path ? path : "/",
241
288
  [strExpires]: "Thu, 01 Jan 1970 00:00:01 GMT"
242
289
  }
243
290
 
@@ -246,8 +293,8 @@ export function createCookieMgr(rootConfig?: IConfiguration, logger?: IDiagnosti
246
293
  values["max-age"] = "0"
247
294
  }
248
295
 
249
- let delCookie = cookieMgrConfig.delCookie || _setCookieValue;
250
- delCookie(name, _formatCookieValue(STR_EMPTY, values));
296
+ // let delCookie = cookieMgrConfig.delCookie || _setCookieValue;
297
+ _delCookieFn(name, _formatCookieValue(STR_EMPTY, values));
251
298
  result = true;
252
299
  }
253
300
 
@@ -258,7 +305,7 @@ export function createCookieMgr(rootConfig?: IConfiguration, logger?: IDiagnosti
258
305
  // Associated this cookie manager with the config
259
306
  cookieMgr[strConfigCookieMgr] = cookieMgr;
260
307
 
261
- return cookieMgr
308
+ return cookieMgr;
262
309
  }
263
310
 
264
311
  /*
@@ -2,6 +2,7 @@
2
2
  // Licensed under the MIT License.
3
3
  "use strict";
4
4
  import { strShimUndefined } from "@microsoft/applicationinsights-shims";
5
+ import { strSubstr, strSubstring } from "@nevware21/ts-utils";
5
6
  import { getPerformance } from "./EnvUtils";
6
7
  import { dateNow } from "./HelperFuncs";
7
8
  import { STR_EMPTY } from "./InternalConstants";
@@ -13,7 +14,7 @@ export const Undefined = strShimUndefined;
13
14
  export function newGuid(): string {
14
15
  const uuid = generateW3CId();
15
16
 
16
- return uuid.substring(0, 8) + "-" + uuid.substring(8, 12) + "-" + uuid.substring(12, 16) + "-" + uuid.substring(16, 20) + "-" + uuid.substring(20);
17
+ return strSubstring(uuid, 0, 8) + "-" + strSubstring(uuid, 8, 12) + "-" + strSubstring(uuid, 12, 16) + "-" + strSubstring(uuid, 16, 20) + "-" + strSubstring(uuid, 20);
17
18
  }
18
19
 
19
20
  /**
@@ -39,7 +40,7 @@ export function strEndsWith(value: string, search: string) {
39
40
  if (value && search) {
40
41
  let len = value.length;
41
42
  let start = len - search.length;
42
- return value.substring(start >= 0 ? start : 0, len) === search;
43
+ return strSubstring(value, start >= 0 ? start : 0, len) === search;
43
44
  }
44
45
 
45
46
  return false;
@@ -68,5 +69,5 @@ export function generateW3CId(): string {
68
69
 
69
70
  // "Set the two most significant bits (bits 6 and 7) of the clock_seq_hi_and_reserved to zero and one, respectively"
70
71
  const clockSequenceHi = hexValues[8 + (random32() & 0x03) | 0];
71
- return oct.substr(0, 8) + oct.substr(9, 4) + "4" + oct.substr(13, 3) + clockSequenceHi + oct.substr(16, 3) + oct.substr(19, 12);
72
+ return strSubstr(oct, 0, 8) + strSubstr(oct, 9, 4) + "4" + strSubstr(oct, 13, 3) + clockSequenceHi +strSubstr(oct, 16, 3) + strSubstr(oct, 19, 12);
72
73
  }
@@ -3,13 +3,14 @@
3
3
  "use strict"
4
4
  import dynamicProto from "@microsoft/dynamicproto-js";
5
5
  import { dumpObj, isFunction, isUndefined } from "@nevware21/ts-utils";
6
+ import { createDynamicConfig } from "../Config/DynamicConfig";
6
7
  import { LoggingSeverity, _InternalMessageId, _eInternalMessageId, eLoggingSeverity } from "../JavaScriptSDK.Enums/LoggingEnums";
7
8
  import { IAppInsightsCore } from "../JavaScriptSDK.Interfaces/IAppInsightsCore";
8
9
  import { IConfiguration } from "../JavaScriptSDK.Interfaces/IConfiguration";
9
10
  import { IDiagnosticLogger } from "../JavaScriptSDK.Interfaces/IDiagnosticLogger";
11
+ import { ITelemetryUpdateState } from "../JavaScriptSDK.Interfaces/ITelemetryUpdateState";
10
12
  import { getDebugExt } from "./DbgExtensionUtils";
11
13
  import { getConsole, getJSON, hasJSON } from "./EnvUtils";
12
- import { getCfgValue } from "./HelperFuncs";
13
14
  import { STR_EMPTY, STR_ERROR_TO_CONSOLE, STR_WARN_TO_CONSOLE } from "./InternalConstants";
14
15
 
15
16
  /**
@@ -27,6 +28,18 @@ const AiUserActionablePrefix = "AI: ";
27
28
  */
28
29
  const AIInternalMessagePrefix = "AITR_";
29
30
 
31
+ /**
32
+ * Holds the current logger which will be used as the default if no logger is available
33
+ */
34
+ let _currentLogger: IDiagnosticLogger = null;
35
+
36
+ const defaultValues = {
37
+ loggingLevelConsole: 0,
38
+ loggingLevelTelemetry: 1,
39
+ maxMessageLimit: 25,
40
+ enableDebugExceptions: false
41
+ }
42
+
30
43
  function _sanitizeDiagnosticText(text: string) {
31
44
  if (text) {
32
45
  return "\"" + text.replace(/\"/g, STR_EMPTY) + "\"";
@@ -117,8 +130,8 @@ export class DiagnosticLogger implements IDiagnosticLogger {
117
130
 
118
131
  /**
119
132
  * This method will throw exceptions in debug mode or attempt to log the error as a console warning.
120
- * @param severity {LoggingSeverity} - The severity of the log message
121
- * @param message {_InternalLogMessage} - The log message.
133
+ * @param severity - {LoggingSeverity} - The severity of the log message
134
+ * @param message - {_InternalLogMessage} - The log message.
122
135
  */
123
136
  _self.throwInternal = (severity: LoggingSeverity, msgId: _InternalMessageId, msg: string, properties?: Object, isUserAct = false) => {
124
137
  const message = new _InternalLogMessage(msgId, msg, isUserAct, properties);
@@ -154,7 +167,7 @@ export class DiagnosticLogger implements IDiagnosticLogger {
154
167
 
155
168
  /**
156
169
  * This will write a warning to the console if possible
157
- * @param message {string} - The warning message
170
+ * @param message - {string} - The warning message
158
171
  */
159
172
  _self.warnToConsole = (message: string) => {
160
173
  _logToConsole("warn", message);
@@ -163,7 +176,7 @@ export class DiagnosticLogger implements IDiagnosticLogger {
163
176
 
164
177
  /**
165
178
  * This will write an error to the console if possible
166
- * @param message {string} - The error message
179
+ * @param message - {string} - The error message
167
180
  */
168
181
  _self.errorToConsole = (message: string) => {
169
182
  _logToConsole("error", message);
@@ -180,11 +193,11 @@ export class DiagnosticLogger implements IDiagnosticLogger {
180
193
 
181
194
  /**
182
195
  * Logs a message to the internal queue.
183
- * @param severity {LoggingSeverity} - The severity of the log message
184
- * @param message {_InternalLogMessage} - The message to log.
196
+ * @param severity - {LoggingSeverity} - The severity of the log message
197
+ * @param message - {_InternalLogMessage} - The message to log.
185
198
  */
186
199
  _self.logInternalMessage = _logInternalMessage;
187
-
200
+
188
201
  function _logInternalMessage(severity: LoggingSeverity, message: _InternalLogMessage): void {
189
202
  if (_areInternalMessagesThrottled()) {
190
203
  return;
@@ -224,10 +237,15 @@ export class DiagnosticLogger implements IDiagnosticLogger {
224
237
  }
225
238
 
226
239
  function _setDefaultsFromConfig(config: IConfiguration) {
227
- _loggingLevelConsole = getCfgValue(config.loggingLevelConsole, 0);
228
- _loggingLevelTelemetry = getCfgValue(config.loggingLevelTelemetry, 1)
229
- _maxInternalMessageLimit = getCfgValue(config.maxMessageLimit, 25);
230
- _enableDebugExceptions = getCfgValue(config.enableDebugExceptions, false);
240
+ // make sure the config is dynamic
241
+ let handler = createDynamicConfig(config, defaultValues, _self);
242
+ handler.watch((details) => {
243
+ let config = details.cfg;
244
+ _loggingLevelConsole = config.loggingLevelConsole;
245
+ _loggingLevelTelemetry = config.loggingLevelTelemetry;
246
+ _maxInternalMessageLimit = config.maxMessageLimit;
247
+ _enableDebugExceptions = config.enableDebugExceptions;
248
+ });
231
249
  }
232
250
 
233
251
  function _areInternalMessagesThrottled(): boolean {
@@ -281,8 +299,8 @@ export class DiagnosticLogger implements IDiagnosticLogger {
281
299
 
282
300
  /**
283
301
  * This method will throw exceptions in debug mode or attempt to log the error as a console warning.
284
- * @param severity {LoggingSeverity} - The severity of the log message
285
- * @param message {_InternalLogMessage} - The log message.
302
+ * @param severity - {LoggingSeverity} - The severity of the log message
303
+ * @param message - {_InternalLogMessage} - The log message.
286
304
  */
287
305
  public throwInternal(severity: LoggingSeverity, msgId: _InternalMessageId, msg: string, properties?: Object, isUserAct = false) {
288
306
  // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging
@@ -290,7 +308,7 @@ export class DiagnosticLogger implements IDiagnosticLogger {
290
308
 
291
309
  /**
292
310
  * This will write a warning to the console if possible
293
- * @param message {string} - The warning message
311
+ * @param message - {string} - The warning message
294
312
  */
295
313
  public warnToConsole(message: string) {
296
314
  // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging
@@ -298,7 +316,7 @@ export class DiagnosticLogger implements IDiagnosticLogger {
298
316
 
299
317
  /**
300
318
  * This will write an error to the console if possible
301
- * @param message {string} - The warning message
319
+ * @param message - {string} - The warning message
302
320
  */
303
321
  public errorToConsole(message: string) {
304
322
  // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging
@@ -313,12 +331,16 @@ export class DiagnosticLogger implements IDiagnosticLogger {
313
331
 
314
332
  /**
315
333
  * Logs a message to the internal queue.
316
- * @param severity {LoggingSeverity} - The severity of the log message
317
- * @param message {_InternalLogMessage} - The message to log.
334
+ * @param severity - {LoggingSeverity} - The severity of the log message
335
+ * @param message - {_InternalLogMessage} - The message to log.
318
336
  */
319
337
  public logInternalMessage(severity: LoggingSeverity, message: _InternalLogMessage): void {
320
338
  // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging
321
339
  }
340
+
341
+ public update(updateState: ITelemetryUpdateState): void {
342
+ // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging
343
+ }
322
344
  }
323
345
 
324
346
  function _getLogger(logger: IDiagnosticLogger) {
@@ -331,8 +353,8 @@ function _getLogger(logger: IDiagnosticLogger) {
331
353
  * support minification as logger.throwInternal() will not compress the publish "throwInternal" used throughout
332
354
  * the code.
333
355
  * @param logger - The Diagnostic Logger instance to use.
334
- * @param severity {LoggingSeverity} - The severity of the log message
335
- * @param message {_InternalLogMessage} - The log message.
356
+ * @param severity - {LoggingSeverity} - The severity of the log message
357
+ * @param message - {_InternalLogMessage} - The log message.
336
358
  */
337
359
  export function _throwInternal(logger: IDiagnosticLogger, severity: LoggingSeverity, msgId: _InternalMessageId, msg: string, properties?: Object, isUserAct = false) {
338
360
  _getLogger(logger).throwInternal(severity, msgId, msg, properties, isUserAct);
@@ -341,7 +363,7 @@ export function _throwInternal(logger: IDiagnosticLogger, severity: LoggingSever
341
363
  /**
342
364
  * This is a helper method which will call warnToConsole on the passed logger with the provided message.
343
365
  * @param logger - The Diagnostic Logger instance to use.
344
- * @param message {_InternalLogMessage} - The log message.
366
+ * @param message - {_InternalLogMessage} - The log message.
345
367
  */
346
368
  export function _warnToConsole(logger: IDiagnosticLogger, message: string) {
347
369
  _getLogger(logger).warnToConsole(message);
@@ -350,8 +372,8 @@ export function _warnToConsole(logger: IDiagnosticLogger, message: string) {
350
372
  /**
351
373
  * Logs a message to the internal queue.
352
374
  * @param logger - The Diagnostic Logger instance to use.
353
- * @param severity {LoggingSeverity} - The severity of the log message
354
- * @param message {_InternalLogMessage} - The message to log.
375
+ * @param severity - {LoggingSeverity} - The severity of the log message
376
+ * @param message - {_InternalLogMessage} - The message to log.
355
377
  */
356
378
  export function _logInternalMessage(logger: IDiagnosticLogger, severity: LoggingSeverity, message: _InternalLogMessage) {
357
379
  _getLogger(logger).logInternalMessage(severity, message);