@microsoft/applicationinsights-core-js 2.8.0-beta.2203-02 → 2.8.0-beta.2203-05

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 (107) hide show
  1. package/browser/applicationinsights-core-js.integrity.json +9 -9
  2. package/browser/applicationinsights-core-js.js +319 -29
  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 +2458 -250
  7. package/dist/applicationinsights-core-js.api.md +87 -7
  8. package/dist/applicationinsights-core-js.d.ts +192 -7
  9. package/dist/applicationinsights-core-js.js +319 -29
  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 +195 -10
  14. package/dist-esm/JavaScriptSDK/AppInsightsCore.js +1 -1
  15. package/dist-esm/JavaScriptSDK/BaseCore.js +205 -13
  16. package/dist-esm/JavaScriptSDK/BaseCore.js.map +1 -1
  17. package/dist-esm/JavaScriptSDK/BaseTelemetryPlugin.js +37 -3
  18. package/dist-esm/JavaScriptSDK/BaseTelemetryPlugin.js.map +1 -1
  19. package/dist-esm/JavaScriptSDK/ChannelController.js +14 -2
  20. package/dist-esm/JavaScriptSDK/ChannelController.js.map +1 -1
  21. package/dist-esm/JavaScriptSDK/Constants.js +1 -1
  22. package/dist-esm/JavaScriptSDK/CookieMgr.js +3 -2
  23. package/dist-esm/JavaScriptSDK/CookieMgr.js.map +1 -1
  24. package/dist-esm/JavaScriptSDK/CoreUtils.js +1 -1
  25. package/dist-esm/JavaScriptSDK/DataCacheHelper.js +1 -1
  26. package/dist-esm/JavaScriptSDK/DbgExtensionUtils.js +1 -1
  27. package/dist-esm/JavaScriptSDK/DiagnosticLogger.js +14 -1
  28. package/dist-esm/JavaScriptSDK/DiagnosticLogger.js.map +1 -1
  29. package/dist-esm/JavaScriptSDK/EnvUtils.js +1 -1
  30. package/dist-esm/JavaScriptSDK/EventHelpers.js +18 -13
  31. package/dist-esm/JavaScriptSDK/EventHelpers.js.map +1 -1
  32. package/dist-esm/JavaScriptSDK/HelperFuncs.js +3 -13
  33. package/dist-esm/JavaScriptSDK/HelperFuncs.js.map +1 -1
  34. package/dist-esm/JavaScriptSDK/InstrumentHooks.js +1 -1
  35. package/dist-esm/JavaScriptSDK/InternalConstants.js +1 -1
  36. package/dist-esm/JavaScriptSDK/NotificationManager.js +1 -1
  37. package/dist-esm/JavaScriptSDK/PerfManager.js +1 -1
  38. package/dist-esm/JavaScriptSDK/ProcessTelemetryContext.js +71 -6
  39. package/dist-esm/JavaScriptSDK/ProcessTelemetryContext.js.map +1 -1
  40. package/dist-esm/JavaScriptSDK/RandomHelper.js +1 -1
  41. package/dist-esm/JavaScriptSDK/TelemetryHelpers.js +1 -1
  42. package/dist-esm/JavaScriptSDK/TelemetryInitializerPlugin.js +3 -2
  43. package/dist-esm/JavaScriptSDK/TelemetryInitializerPlugin.js.map +1 -1
  44. package/dist-esm/JavaScriptSDK/UnloadHandlerContainer.js +33 -0
  45. package/dist-esm/JavaScriptSDK/UnloadHandlerContainer.js.map +1 -0
  46. package/dist-esm/JavaScriptSDK.Enums/EventsDiscardedReason.js +1 -1
  47. package/dist-esm/JavaScriptSDK.Enums/LoggingEnums.js +1 -1
  48. package/dist-esm/JavaScriptSDK.Enums/SendRequestReason.js +1 -1
  49. package/dist-esm/JavaScriptSDK.Enums/TelemetryUnloadReason.js +1 -1
  50. package/dist-esm/JavaScriptSDK.Enums/TelemetryUpdateReason.js +8 -0
  51. package/dist-esm/JavaScriptSDK.Enums/TelemetryUpdateReason.js.map +1 -0
  52. package/dist-esm/JavaScriptSDK.Interfaces/IAppInsightsCore.js +1 -1
  53. package/dist-esm/JavaScriptSDK.Interfaces/IChannelControls.js +1 -1
  54. package/dist-esm/JavaScriptSDK.Interfaces/IConfiguration.js +1 -1
  55. package/dist-esm/JavaScriptSDK.Interfaces/ICookieMgr.js +1 -1
  56. package/dist-esm/JavaScriptSDK.Interfaces/IDbgExtension.js +1 -1
  57. package/dist-esm/JavaScriptSDK.Interfaces/IDiagnosticLogger.js +1 -1
  58. package/dist-esm/JavaScriptSDK.Interfaces/IInstrumentHooks.js +1 -1
  59. package/dist-esm/JavaScriptSDK.Interfaces/INotificationListener.js +1 -1
  60. package/dist-esm/JavaScriptSDK.Interfaces/INotificationManager.js +1 -1
  61. package/dist-esm/JavaScriptSDK.Interfaces/IPerfEvent.js +1 -1
  62. package/dist-esm/JavaScriptSDK.Interfaces/IPerfManager.js +1 -1
  63. package/dist-esm/JavaScriptSDK.Interfaces/IProcessTelemetryContext.js +1 -1
  64. package/dist-esm/JavaScriptSDK.Interfaces/ITelemetryInitializers.js +1 -1
  65. package/dist-esm/JavaScriptSDK.Interfaces/ITelemetryItem.js +1 -1
  66. package/dist-esm/JavaScriptSDK.Interfaces/ITelemetryPlugin.js +1 -1
  67. package/dist-esm/JavaScriptSDK.Interfaces/ITelemetryPluginChain.js +1 -1
  68. package/dist-esm/JavaScriptSDK.Interfaces/ITelemetryUnloadState.js +1 -1
  69. package/dist-esm/JavaScriptSDK.Interfaces/ITelemetryUpdateState.js +8 -0
  70. package/dist-esm/JavaScriptSDK.Interfaces/ITelemetryUpdateState.js.map +1 -0
  71. package/dist-esm/applicationinsights-core-js.js +3 -2
  72. package/dist-esm/applicationinsights-core-js.js.map +1 -1
  73. package/package.json +1 -1
  74. package/src/JavaScriptSDK/BaseCore.ts +272 -14
  75. package/src/JavaScriptSDK/BaseTelemetryPlugin.ts +70 -4
  76. package/src/JavaScriptSDK/ChannelController.ts +18 -1
  77. package/src/JavaScriptSDK/CookieMgr.ts +3 -1
  78. package/src/JavaScriptSDK/DiagnosticLogger.ts +14 -0
  79. package/src/JavaScriptSDK/EventHelpers.ts +18 -12
  80. package/src/JavaScriptSDK/HelperFuncs.ts +4 -2
  81. package/src/JavaScriptSDK/ProcessTelemetryContext.ts +87 -10
  82. package/src/JavaScriptSDK/TelemetryInitializerPlugin.ts +3 -1
  83. package/src/JavaScriptSDK/UnloadHandlerContainer.ts +46 -0
  84. package/src/JavaScriptSDK.Enums/SendRequestReason.ts +5 -0
  85. package/src/JavaScriptSDK.Enums/TelemetryUnloadReason.ts +3 -3
  86. package/src/JavaScriptSDK.Enums/TelemetryUpdateReason.ts +27 -0
  87. package/src/JavaScriptSDK.Interfaces/IAppInsightsCore.ts +29 -2
  88. package/src/JavaScriptSDK.Interfaces/IInstrumentHooks.ts +11 -6
  89. package/src/JavaScriptSDK.Interfaces/IProcessTelemetryContext.ts +25 -2
  90. package/src/JavaScriptSDK.Interfaces/ITelemetryPlugin.ts +12 -1
  91. package/src/JavaScriptSDK.Interfaces/ITelemetryUpdateState.ts +34 -0
  92. package/types/JavaScriptSDK/BaseCore.d.ts +27 -2
  93. package/types/JavaScriptSDK/BaseTelemetryPlugin.d.ts +23 -1
  94. package/types/JavaScriptSDK/DiagnosticLogger.d.ts +10 -0
  95. package/types/JavaScriptSDK/EventHelpers.d.ts +4 -2
  96. package/types/JavaScriptSDK/HelperFuncs.d.ts +2 -1
  97. package/types/JavaScriptSDK/ProcessTelemetryContext.d.ts +11 -1
  98. package/types/JavaScriptSDK/UnloadHandlerContainer.d.ts +11 -0
  99. package/types/JavaScriptSDK.Enums/SendRequestReason.d.ts +4 -0
  100. package/types/JavaScriptSDK.Enums/TelemetryUnloadReason.d.ts +13 -1
  101. package/types/JavaScriptSDK.Enums/TelemetryUpdateReason.d.ts +20 -0
  102. package/types/JavaScriptSDK.Interfaces/IAppInsightsCore.d.ts +24 -1
  103. package/types/JavaScriptSDK.Interfaces/IInstrumentHooks.d.ts +5 -0
  104. package/types/JavaScriptSDK.Interfaces/IProcessTelemetryContext.d.ts +23 -2
  105. package/types/JavaScriptSDK.Interfaces/ITelemetryPlugin.d.ts +11 -1
  106. package/types/JavaScriptSDK.Interfaces/ITelemetryUpdateState.d.ts +22 -0
  107. package/types/applicationinsights-core-js.d.ts +6 -2
@@ -1,25 +1,25 @@
1
1
  {
2
2
  "name": "applicationinsights-core-js",
3
- "version": "2.8.0-beta.2203-02",
3
+ "version": "2.8.0-beta.2203-05",
4
4
  "ext": {
5
5
  "@js": {
6
6
  "file": "applicationinsights-core-js.js",
7
7
  "type": "text/javascript; charset=utf-8",
8
- "integrity": "sha256-cOSz8BlX2/Kuvap92rB0StGPBrrb/knAZ78Q+p/nQOE= sha384-jnm9lN4AAQqwlbqeD4EPva8vO0hXgxDvC5t7Oj1NwjBkH92qtk76uzJRkJwdah9t sha512-7OVkDYsKwxxGOD2NtK5Do+EZQc4sHAompCTfMLLoeNmh8kE3gnQbupiUvMrc/06PaxJ5Yi4JaV5n4dhSLGZQTg==",
8
+ "integrity": "sha256-wwsOnWPlKDX1L/bQvuWMbGDNTi6jD7K2bfGR1UTeADw= sha384-9TcrrKxrXrXW1ruKfWdwQV2lImidGwuSmqYYQjYHx0CQaLbYEPlrYPyfzV0pPiZY sha512-e3RoSUZrrl6B91w5DQ+J1C8Ob14L/ASU4Lel3Nt48UN4K60GrWERXysKoC/iON4/yxWYmhE+ZMBhhjc6llaznA==",
9
9
  "hashes": {
10
- "sha256": "cOSz8BlX2/Kuvap92rB0StGPBrrb/knAZ78Q+p/nQOE=",
11
- "sha384": "jnm9lN4AAQqwlbqeD4EPva8vO0hXgxDvC5t7Oj1NwjBkH92qtk76uzJRkJwdah9t",
12
- "sha512": "7OVkDYsKwxxGOD2NtK5Do+EZQc4sHAompCTfMLLoeNmh8kE3gnQbupiUvMrc/06PaxJ5Yi4JaV5n4dhSLGZQTg=="
10
+ "sha256": "wwsOnWPlKDX1L/bQvuWMbGDNTi6jD7K2bfGR1UTeADw=",
11
+ "sha384": "9TcrrKxrXrXW1ruKfWdwQV2lImidGwuSmqYYQjYHx0CQaLbYEPlrYPyfzV0pPiZY",
12
+ "sha512": "e3RoSUZrrl6B91w5DQ+J1C8Ob14L/ASU4Lel3Nt48UN4K60GrWERXysKoC/iON4/yxWYmhE+ZMBhhjc6llaznA=="
13
13
  }
14
14
  },
15
15
  "@min.js": {
16
16
  "file": "applicationinsights-core-js.min.js",
17
17
  "type": "text/javascript; charset=utf-8",
18
- "integrity": "sha256-oFy7mVpp0qLIL+biYG16+oXIC4TQnKbCjBDb6SbD0eg= sha384-i9ZQmHv672Qw8CSdvY7tN7qQeNEFXmpC4ZNkQDxHJyaNu+UvX2WZ1dRkLwtxPNKt sha512-5g5R34d9/xpzIk6QtSqR+ZXFvx93mdrKCReZs8gBZRg/eVOFiGBlFKAj56OOLaufDpQbQCDCiBkLiS4s03YT/Q==",
18
+ "integrity": "sha256-IEZgizqf96TblrFGuOMOXrHyltVZVjObZSRAZ8DsZ0o= sha384-/zno7jGSmwh7zEA8odm485wwBq9BELOSA0gHbuApMB03xp6UU5Uqb6FeCBPtmTE9 sha512-7PnFbJi0AqDFa4usb7hMQvApEx87434uFZPiFA4nPRulUgQK938jL8K7sKFkrx6WLv2vneQ+KrjgMXpi4xBmTQ==",
19
19
  "hashes": {
20
- "sha256": "oFy7mVpp0qLIL+biYG16+oXIC4TQnKbCjBDb6SbD0eg=",
21
- "sha384": "i9ZQmHv672Qw8CSdvY7tN7qQeNEFXmpC4ZNkQDxHJyaNu+UvX2WZ1dRkLwtxPNKt",
22
- "sha512": "5g5R34d9/xpzIk6QtSqR+ZXFvx93mdrKCReZs8gBZRg/eVOFiGBlFKAj56OOLaufDpQbQCDCiBkLiS4s03YT/Q=="
20
+ "sha256": "IEZgizqf96TblrFGuOMOXrHyltVZVjObZSRAZ8DsZ0o=",
21
+ "sha384": "/zno7jGSmwh7zEA8odm485wwBq9BELOSA0gHbuApMB03xp6UU5Uqb6FeCBPtmTE9",
22
+ "sha512": "7PnFbJi0AqDFa4usb7hMQvApEx87434uFZPiFA4nPRulUgQK938jL8K7sKFkrx6WLv2vneQ+KrjgMXpi4xBmTQ=="
23
23
  }
24
24
  }
25
25
  }
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Application Insights JavaScript SDK - Core, 2.8.0-beta.2203-02
2
+ * Application Insights JavaScript SDK - Core, 2.8.0-beta.2203-05
3
3
  * Copyright (c) Microsoft and contributors. All rights reserved.
4
4
  */
5
5
  (function (global, factory) {
@@ -347,6 +347,7 @@
347
347
  var strIsInitialized = "isInitialized";
348
348
  var strTeardown = "teardown";
349
349
  var strCore = "core";
350
+ var strUpdate = "update";
350
351
  var strDisabled = "disabled";
351
352
  var strDoTeardown = "_doTeardown";
352
353
  var strProcessNext = "processNext";
@@ -833,7 +834,7 @@
833
834
  objForEachKey(values, function (field, value) {
834
835
  enumClass[field] = value;
835
836
  if (!isUndefined(enumClass[value])) {
836
- throwError("Value: [" + value + "] already exists for " + field);
837
+ throwError("[" + value + "] exists for " + field);
837
838
  }
838
839
  enumClass[value] = field;
839
840
  });
@@ -845,7 +846,7 @@
845
846
  }
846
847
  return theObject;
847
848
  }
848
- function objExtend(obj, obj2, obj3, obj4, obj5, obj6) {
849
+ function objExtend(obj1, obj2, obj3, obj4, obj5, obj6) {
849
850
  var theArgs = arguments;
850
851
  var extended = theArgs[0] || {};
851
852
  var argLen = theArgs.length;
@@ -1303,6 +1304,10 @@
1303
1304
  }
1304
1305
  return DiagnosticLogger;
1305
1306
  }());
1307
+ function _throwInternal(logger, severity, msgId, msg, properties, isUserAct) {
1308
+ if (isUserAct === void 0) { isUserAct = false; }
1309
+ (logger || new DiagnosticLogger()).throwInternal(severity, msgId, msg, properties, isUserAct);
1310
+ }
1306
1311
 
1307
1312
  var strExecutionContextKey = "ctx";
1308
1313
  var _defaultPerfManager = null;
@@ -1676,8 +1681,11 @@
1676
1681
  return createTelemetryProxyChain([startAt], config, core);
1677
1682
  }
1678
1683
  function _createInternalContext(telemetryChain, config, core, startAt) {
1679
- var _nextProxy = startAt ? _getNextProxyStart(telemetryChain, config, core, startAt) : telemetryChain;
1684
+ var _nextProxy = null;
1680
1685
  var _onComplete = [];
1686
+ if (startAt !== null) {
1687
+ _nextProxy = startAt ? _getNextProxyStart(telemetryChain, config, core, startAt) : telemetryChain;
1688
+ }
1681
1689
  var context = {
1682
1690
  _next: _moveNext,
1683
1691
  ctx: {
@@ -1727,7 +1735,7 @@
1727
1735
  completeDetails.func.call(completeDetails.self, completeDetails.args);
1728
1736
  }
1729
1737
  catch (e) {
1730
- core.logger.throwInternal(2 , 73 , "Unexpected Exception during onComplete - " + dumpObj(e));
1738
+ _throwInternal(core.logger, 2 , 73 , "Unexpected Exception during onComplete - " + dumpObj(e));
1731
1739
  }
1732
1740
  });
1733
1741
  _onComplete = [];
@@ -1826,6 +1834,27 @@
1826
1834
  context.createNew = _createNew;
1827
1835
  return context;
1828
1836
  }
1837
+ function createProcessTelemetryUpdateContext(telemetryChain, config, core, startAt) {
1838
+ var internalContext = _createInternalContext(telemetryChain, config, core, startAt);
1839
+ var context = internalContext.ctx;
1840
+ function _processNext(updateState) {
1841
+ return context.iterate(function (plugin) {
1842
+ if (isFunction(plugin[strUpdate])) {
1843
+ plugin[strUpdate](context, updateState);
1844
+ }
1845
+ });
1846
+ }
1847
+ function _createNew(plugins, startAt) {
1848
+ if (plugins === void 0) { plugins = null; }
1849
+ if (isArray(plugins)) {
1850
+ plugins = createTelemetryProxyChain(plugins, config, core, startAt);
1851
+ }
1852
+ return createProcessTelemetryUpdateContext(plugins || context.getNext(), config, core, startAt);
1853
+ }
1854
+ context.processNext = _processNext;
1855
+ context.createNew = _createNew;
1856
+ return context;
1857
+ }
1829
1858
  function createTelemetryProxyChain(plugins, config, core, startAt) {
1830
1859
  var firstProxy = null;
1831
1860
  var add = startAt ? false : true;
@@ -1872,6 +1901,7 @@
1872
1901
  },
1873
1902
  processTelemetry: _processTelemetry,
1874
1903
  unload: _unloadPlugin,
1904
+ update: _updatePlugin,
1875
1905
  _id: chainId,
1876
1906
  _setNext: function (nextPlugin) {
1877
1907
  nextProxy = nextPlugin;
@@ -1911,7 +1941,7 @@
1911
1941
  hasRun = true;
1912
1942
  }
1913
1943
  if (!nextProxy || !hasNextRun) {
1914
- itemCtx.diagLog().throwInternal(1 , 73 , "Plugin [" + plugin.identifier + "] failed during " + name + " - " + dumpObj(error) + ", run flags: " + dumpObj(hasRunContext));
1944
+ _throwInternal(itemCtx.diagLog(), 1 , 73 , "Plugin [" + plugin.identifier + "] failed during " + name + " - " + dumpObj(error) + ", run flags: " + dumpObj(hasRunContext));
1915
1945
  }
1916
1946
  }
1917
1947
  }, details, isAsync);
@@ -1959,6 +1989,24 @@
1959
1989
  unloadCtx.processNext(unloadState);
1960
1990
  }
1961
1991
  }
1992
+ function _updatePlugin(updateCtx, updateState) {
1993
+ function _callUpdate() {
1994
+ var hasRun = false;
1995
+ if (plugin) {
1996
+ var pluginState = _getPluginState(plugin);
1997
+ var pluginCore = plugin[strCore] || pluginState.core;
1998
+ if (plugin && (!pluginCore || pluginCore === updateCtx[strCore]()) && !pluginState[strTeardown]) {
1999
+ if (plugin[strUpdate] && plugin[strUpdate](updateCtx, updateState) === true) {
2000
+ hasRun = true;
2001
+ }
2002
+ }
2003
+ }
2004
+ return hasRun;
2005
+ }
2006
+ if (!_processChain(updateCtx, _callUpdate, "update", function () { }, false)) {
2007
+ updateCtx.processNext(updateState);
2008
+ }
2009
+ }
1962
2010
  return objFreeze(proxyChain);
1963
2011
  }
1964
2012
  var ProcessTelemetryContext = /** @class */ (function () {
@@ -2136,7 +2184,7 @@
2136
2184
  _supportsCookies = doc[strCookie] !== undefined;
2137
2185
  }
2138
2186
  catch (e) {
2139
- logger && logger.throwInternal(2 , 68 , "Cannot access document.cookie - " + getExceptionName(e), { exception: dumpObj(e) });
2187
+ _throwInternal(logger, 2 , 68 , "Cannot access document.cookie - " + getExceptionName(e), { exception: dumpObj(e) });
2140
2188
  }
2141
2189
  }
2142
2190
  return _supportsCookies;
@@ -2265,6 +2313,17 @@
2265
2313
  }
2266
2314
  _runChainOnComplete();
2267
2315
  }
2316
+ function _doUpdate(updateCtx, updateState) {
2317
+ var theUpdateState = updateState || {
2318
+ reason: 0
2319
+ };
2320
+ _processChannelQueue(channelQueue, updateCtx, function (chainCtx) {
2321
+ chainCtx[strProcessNext](theUpdateState);
2322
+ }, function () {
2323
+ updateCtx[strProcessNext](theUpdateState);
2324
+ });
2325
+ return true;
2326
+ }
2268
2327
  function _doTeardown(unloadCtx, unloadState) {
2269
2328
  var theUnloadState = unloadState || {
2270
2329
  reason: 0 ,
@@ -2316,7 +2375,8 @@
2316
2375
  }, function () {
2317
2376
  itemCtx[strProcessNext](item);
2318
2377
  });
2319
- }
2378
+ },
2379
+ update: _doUpdate
2320
2380
  },
2321
2381
  _a[strPause] = function () {
2322
2382
  _processChannelQueue(channelQueue, _getTelCtx(), function (chainCtx) {
@@ -2401,6 +2461,30 @@
2401
2461
  return channelQueue;
2402
2462
  }
2403
2463
 
2464
+ function createUnloadHandlerContainer() {
2465
+ var handlers = [];
2466
+ function _addHandler(handler) {
2467
+ if (handler) {
2468
+ handlers.push(handler);
2469
+ }
2470
+ }
2471
+ function _runHandlers(unloadCtx, unloadState) {
2472
+ arrForEach(handlers, function (handler) {
2473
+ try {
2474
+ handler(unloadCtx, unloadState);
2475
+ }
2476
+ catch (e) {
2477
+ _throwInternal(unloadCtx.diagLog(), 2 , 73 , "Unexpected error calling unload handler - " + dumpObj(e));
2478
+ }
2479
+ });
2480
+ handlers = [];
2481
+ }
2482
+ return {
2483
+ add: _addHandler,
2484
+ run: _runHandlers
2485
+ };
2486
+ }
2487
+
2404
2488
  var strGetPlugin = "getPlugin";
2405
2489
  var BaseTelemetryPlugin = /** @class */ (function () {
2406
2490
  function BaseTelemetryPlugin() {
@@ -2408,6 +2492,7 @@
2408
2492
  var _isinitialized;
2409
2493
  var _rootCtx;
2410
2494
  var _nextPlugin;
2495
+ var _unloadHandlerContainer;
2411
2496
  var _hooks;
2412
2497
  _initDefaults();
2413
2498
  dynamicProto(BaseTelemetryPlugin, _self, function (_self) {
@@ -2429,6 +2514,7 @@
2429
2514
  function _unloadCallback() {
2430
2515
  if (!unloadDone) {
2431
2516
  unloadDone = true;
2517
+ _unloadHandlerContainer.run(theUnloadCtx, unloadState);
2432
2518
  arrForEach(_hooks, function (fn) {
2433
2519
  fn.rm();
2434
2520
  });
@@ -2447,6 +2533,30 @@
2447
2533
  }
2448
2534
  return result;
2449
2535
  };
2536
+ _self.update = function (updateCtx, updateState) {
2537
+ if (!_self.core || (updateCtx && _self.core !== updateCtx.core())) {
2538
+ return;
2539
+ }
2540
+ var result;
2541
+ var updateDone = false;
2542
+ var theUpdateCtx = updateCtx || createProcessTelemetryUpdateContext(null, {}, _self.core, _nextPlugin && _nextPlugin[strGetPlugin] ? _nextPlugin[strGetPlugin]() : _nextPlugin);
2543
+ var theUpdateState = updateState || {
2544
+ reason: 0
2545
+ };
2546
+ function _updateCallback() {
2547
+ if (!updateDone) {
2548
+ updateDone = true;
2549
+ _setDefaults(theUpdateCtx.getCfg(), theUpdateCtx.core(), theUpdateCtx.getNext());
2550
+ }
2551
+ }
2552
+ if (!_self._doUpdate || _self._doUpdate(theUpdateCtx, theUpdateState, _updateCallback) !== true) {
2553
+ _updateCallback();
2554
+ }
2555
+ else {
2556
+ result = true;
2557
+ }
2558
+ return result;
2559
+ };
2450
2560
  _self._addHook = function (hooks) {
2451
2561
  if (hooks) {
2452
2562
  if (isArray(hooks)) {
@@ -2457,6 +2567,7 @@
2457
2567
  }
2458
2568
  }
2459
2569
  };
2570
+ proxyFunctionAs(_self, "_addUnloadCb", function () { return _unloadHandlerContainer; }, "add");
2460
2571
  });
2461
2572
  _self.diagLog = function (itemCtx) {
2462
2573
  return _getTelCtx(itemCtx).diagLog();
@@ -2513,6 +2624,7 @@
2513
2624
  _rootCtx = null;
2514
2625
  _nextPlugin = null;
2515
2626
  _hooks = [];
2627
+ _unloadHandlerContainer = createUnloadHandlerContainer();
2516
2628
  }
2517
2629
  }
2518
2630
  return BaseTelemetryPlugin;
@@ -2559,7 +2671,7 @@
2559
2671
  }
2560
2672
  }
2561
2673
  catch (e) {
2562
- itemCtx.diagLog().throwInternal(1 , 64 , "One of telemetry initializers failed, telemetry item will not be sent: " + getExceptionName(e), { exception: dumpObj(e) }, true);
2674
+ _throwInternal(itemCtx.diagLog(), 1 , 64 , "One of telemetry initializers failed, telemetry item will not be sent: " + getExceptionName(e), { exception: dumpObj(e) }, true);
2563
2675
  }
2564
2676
  }
2565
2677
  }
@@ -2582,6 +2694,8 @@
2582
2694
 
2583
2695
  var strValidationError = "Plugins must provide initialize method";
2584
2696
  var strNotificationManager = "_notificationManager";
2697
+ var strSdkUnloadingError = "SDK is still unloading...";
2698
+ var strSdkNotInitialized = "SDK is not initialized";
2585
2699
  function _createPerfManager(core, notificationMgr) {
2586
2700
  return new PerfManager(notificationMgr);
2587
2701
  }
@@ -2611,6 +2725,16 @@
2611
2725
  core: coreExtensions
2612
2726
  };
2613
2727
  }
2728
+ function _isPluginPresent(thePlugin, plugins) {
2729
+ var exists = false;
2730
+ arrForEach(plugins, function (plugin) {
2731
+ if (plugin === thePlugin) {
2732
+ exists = true;
2733
+ return -1;
2734
+ }
2735
+ });
2736
+ return exists;
2737
+ }
2614
2738
  function _createDummyNotificationManager() {
2615
2739
  var _a;
2616
2740
  return objCreateFn((_a = {},
@@ -2635,15 +2759,20 @@
2635
2759
  var _channelControl;
2636
2760
  var _channelConfig;
2637
2761
  var _channelQueue;
2762
+ var _isUnloading;
2638
2763
  var _telemetryInitializerPlugin;
2639
2764
  var _internalLogsEventName;
2640
2765
  var _evtNamespace;
2766
+ var _unloadHandlers;
2641
2767
  var _debugListener;
2642
2768
  var _internalLogPoller = 0;
2643
2769
  dynamicProto(BaseCore, this, function (_self) {
2644
2770
  _initDefaults();
2645
2771
  _self.isInitialized = function () { return _isInitialized; };
2646
2772
  _self.initialize = function (config, extensions, logger, notificationManager) {
2773
+ if (_isUnloading) {
2774
+ throwError(strSdkUnloadingError);
2775
+ }
2647
2776
  if (_self.isInitialized()) {
2648
2777
  throwError("Core should not be initialized more than once");
2649
2778
  }
@@ -2656,15 +2785,14 @@
2656
2785
  _initDebugListener(config);
2657
2786
  _initPerfManager(config);
2658
2787
  config.extensions = isNullOrUndefined(config.extensions) ? [] : config.extensions;
2659
- var extConfig = getSetValue(config, strExtensionConfig);
2660
- extConfig.NotificationManager = notificationManager;
2788
+ _initExtConfig(config);
2661
2789
  if (logger) {
2662
2790
  _self.logger = logger;
2663
2791
  }
2664
2792
  _configExtensions = [];
2665
2793
  _configExtensions.push.apply(_configExtensions, __spreadArrayFn(__spreadArrayFn([], extensions, false), config.extensions));
2666
2794
  _channelConfig = (config || {}).channels;
2667
- _initPluginChain(config);
2795
+ _initPluginChain(config, null);
2668
2796
  if (_self.getTransmissionControls().length === 0) {
2669
2797
  throwError("No channels available");
2670
2798
  }
@@ -2682,7 +2810,7 @@
2682
2810
  setValue(telemetryItem, strIKey, _self.config.instrumentationKey, null, isNotTruthy);
2683
2811
  setValue(telemetryItem, "time", toISOString(new Date()), null, isNotTruthy);
2684
2812
  setValue(telemetryItem, "ver", "4.0", null, isNullOrUndefined);
2685
- if (_self.isInitialized()) {
2813
+ if (!_isUnloading && _self.isInitialized()) {
2686
2814
  _createTelCtx().processNext(telemetryItem);
2687
2815
  }
2688
2816
  else {
@@ -2697,14 +2825,14 @@
2697
2825
  }
2698
2826
  return _notificationManager;
2699
2827
  };
2700
- _self.addNotificationListener = function (listener) {
2828
+ _self[strAddNotificationListener] = function (listener) {
2701
2829
  if (_notificationManager) {
2702
- _notificationManager.addNotificationListener(listener);
2830
+ _notificationManager[strAddNotificationListener](listener);
2703
2831
  }
2704
2832
  };
2705
- _self.removeNotificationListener = function (listener) {
2833
+ _self[strRemoveNotificationListener] = function (listener) {
2706
2834
  if (_notificationManager) {
2707
- _notificationManager.removeNotificationListener(listener);
2835
+ _notificationManager[strRemoveNotificationListener](listener);
2708
2836
  }
2709
2837
  };
2710
2838
  _self.getCookieMgr = function () {
@@ -2761,10 +2889,86 @@
2761
2889
  }
2762
2890
  };
2763
2891
  proxyFunctions(_self, function () { return _telemetryInitializerPlugin; }, ["addTelemetryInitializer"]);
2892
+ _self.unload = function (isAsync, unloadComplete, cbTimeout) {
2893
+ if (isAsync === void 0) { isAsync = true; }
2894
+ if (!_isInitialized) {
2895
+ throwError(strSdkNotInitialized);
2896
+ }
2897
+ if (_isUnloading) {
2898
+ throwError(strSdkUnloadingError);
2899
+ }
2900
+ var unloadState = {
2901
+ reason: 50 ,
2902
+ isAsync: isAsync,
2903
+ flushComplete: false
2904
+ };
2905
+ var processUnloadCtx = createProcessTelemetryUnloadContext(_getPluginChain(), _self.config, _self);
2906
+ processUnloadCtx.onComplete(function () {
2907
+ _initDefaults();
2908
+ unloadComplete && unloadComplete(unloadState);
2909
+ }, _self);
2910
+ function _doUnload(flushComplete) {
2911
+ unloadState.flushComplete = flushComplete;
2912
+ _isUnloading = true;
2913
+ _unloadHandlers.run(processUnloadCtx, unloadState);
2914
+ _self.stopPollingInternalLogs();
2915
+ processUnloadCtx.processNext(unloadState);
2916
+ }
2917
+ if (_channelControl) {
2918
+ _channelControl.flush(isAsync, _doUnload, 6 , cbTimeout);
2919
+ }
2920
+ else {
2921
+ _doUnload(true);
2922
+ }
2923
+ };
2764
2924
  _self.getPlugin = _getPlugin;
2925
+ _self.addPlugin = function (plugin, replaceExisting, isAsync, addCb) {
2926
+ if (isAsync === void 0) { isAsync = true; }
2927
+ if (!plugin) {
2928
+ addCb && addCb(false);
2929
+ _logOrThrowError(strValidationError);
2930
+ return;
2931
+ }
2932
+ var existingPlugin = _getPlugin(plugin.identifier);
2933
+ if (existingPlugin && !replaceExisting) {
2934
+ addCb && addCb(false);
2935
+ _logOrThrowError("Plugin [" + plugin.identifier + "] is already loaded!");
2936
+ return;
2937
+ }
2938
+ var updateState = {
2939
+ reason: 16
2940
+ };
2941
+ function _addPlugin(removed) {
2942
+ _configExtensions.push(plugin);
2943
+ updateState.added = [plugin];
2944
+ _initPluginChain(_self.config, updateState);
2945
+ addCb && addCb(true);
2946
+ }
2947
+ if (existingPlugin) {
2948
+ var removedPlugins_1 = [existingPlugin.plugin];
2949
+ var unloadState = {
2950
+ reason: 2 ,
2951
+ isAsync: isAsync
2952
+ };
2953
+ _removePlugins(removedPlugins_1, unloadState, function (removed) {
2954
+ if (!removed) {
2955
+ addCb && addCb(false);
2956
+ }
2957
+ else {
2958
+ updateState.removed = removedPlugins_1;
2959
+ updateState.reason |= 32 ;
2960
+ _addPlugin();
2961
+ }
2962
+ });
2963
+ }
2964
+ else {
2965
+ _addPlugin();
2966
+ }
2967
+ };
2765
2968
  _self.evtNamespace = function () {
2766
2969
  return _evtNamespace;
2767
2970
  };
2971
+ proxyFunctionAs(_self, "addUnloadCb", function () { return _unloadHandlers; }, "add");
2768
2972
  function _initDefaults() {
2769
2973
  _isInitialized = false;
2770
2974
  _self.logger = new DiagnosticLogger({ loggingLevelConsole: 1 });
@@ -2782,13 +2986,15 @@
2782
2986
  _channelControl = null;
2783
2987
  _channelConfig = null;
2784
2988
  _channelQueue = null;
2989
+ _isUnloading = false;
2785
2990
  _internalLogsEventName = null;
2786
2991
  _evtNamespace = createUniqueNamespace("AIBaseCore", true);
2992
+ _unloadHandlers = createUnloadHandlerContainer();
2787
2993
  }
2788
2994
  function _createTelCtx() {
2789
2995
  return createProcessTelemetryContext(_getPluginChain(), _self.config, _self);
2790
2996
  }
2791
- function _initPluginChain(config) {
2997
+ function _initPluginChain(config, updateState) {
2792
2998
  var theExtensions = _validateExtensions(_self.logger, ChannelControllerPriority, _configExtensions);
2793
2999
  _coreExtensions = theExtensions.core;
2794
3000
  _pluginChain = null;
@@ -2814,6 +3020,9 @@
2814
3020
  _channelControl.initialize(config, _self, allExtensions);
2815
3021
  initializePlugins(_createTelCtx(), allExtensions);
2816
3022
  _self._extensions = objFreeze(sortPlugins(_coreExtensions || [])).slice();
3023
+ if (updateState) {
3024
+ _doUpdate(updateState);
3025
+ }
2817
3026
  }
2818
3027
  function _getPlugin(pluginIdentifier) {
2819
3028
  var theExt = null;
@@ -2836,6 +3045,23 @@
2836
3045
  isEnabled: function () {
2837
3046
  var pluginState = _getPluginState(thePlugin);
2838
3047
  return !pluginState[strTeardown] && !pluginState[strDisabled];
3048
+ },
3049
+ remove: function (isAsync, removeCb) {
3050
+ if (isAsync === void 0) { isAsync = true; }
3051
+ var pluginsToRemove = [thePlugin];
3052
+ var unloadState = {
3053
+ reason: 1 ,
3054
+ isAsync: isAsync
3055
+ };
3056
+ _removePlugins(pluginsToRemove, unloadState, function (removed) {
3057
+ if (removed) {
3058
+ _initPluginChain(_self.config, {
3059
+ reason: 32 ,
3060
+ removed: pluginsToRemove
3061
+ });
3062
+ }
3063
+ removeCb && removeCb(removed);
3064
+ });
2839
3065
  }
2840
3066
  };
2841
3067
  }
@@ -2851,6 +3077,46 @@
2851
3077
  }
2852
3078
  return _pluginChain;
2853
3079
  }
3080
+ function _removePlugins(thePlugins, unloadState, removeComplete) {
3081
+ if (thePlugins && thePlugins.length > 0) {
3082
+ var unloadChain = createTelemetryProxyChain(thePlugins, _self.config, _self);
3083
+ var unloadCtx = createProcessTelemetryUnloadContext(unloadChain, _self.config, _self);
3084
+ unloadCtx.onComplete(function () {
3085
+ var removed = false;
3086
+ var newConfigExtensions = [];
3087
+ arrForEach(_configExtensions, function (plugin, idx) {
3088
+ if (!_isPluginPresent(plugin, thePlugins)) {
3089
+ newConfigExtensions.push(plugin);
3090
+ }
3091
+ else {
3092
+ removed = true;
3093
+ }
3094
+ });
3095
+ _configExtensions = newConfigExtensions;
3096
+ var newChannelConfig = [];
3097
+ if (_channelConfig) {
3098
+ arrForEach(_channelConfig, function (queue, idx) {
3099
+ var newQueue = [];
3100
+ arrForEach(queue, function (channel) {
3101
+ if (!_isPluginPresent(channel, thePlugins)) {
3102
+ newQueue.push(channel);
3103
+ }
3104
+ else {
3105
+ removed = true;
3106
+ }
3107
+ });
3108
+ newChannelConfig.push(newQueue);
3109
+ });
3110
+ _channelConfig = newChannelConfig;
3111
+ }
3112
+ removeComplete && removeComplete(removed);
3113
+ });
3114
+ unloadCtx.processNext(unloadState);
3115
+ }
3116
+ else {
3117
+ removeComplete(false);
3118
+ }
3119
+ }
2854
3120
  function _flushInternalLogs() {
2855
3121
  var queue = _self.logger ? _self.logger.queue : [];
2856
3122
  if (queue) {
@@ -2885,6 +3151,25 @@
2885
3151
  setValue(_self.config, "createPerfMgr", _createPerfManager);
2886
3152
  }
2887
3153
  }
3154
+ function _initExtConfig(config) {
3155
+ var extConfig = getSetValue(config, strExtensionConfig);
3156
+ extConfig.NotificationManager = _notificationManager;
3157
+ }
3158
+ function _doUpdate(updateState) {
3159
+ var updateCtx = createProcessTelemetryUpdateContext(_getPluginChain(), _self.config, _self);
3160
+ if (!_self._updateHook || _self._updateHook(updateCtx, updateState) !== true) {
3161
+ updateCtx.processNext(updateState);
3162
+ }
3163
+ }
3164
+ function _logOrThrowError(message) {
3165
+ var logger = _self.logger;
3166
+ if (logger) {
3167
+ _throwInternal(logger, 2 , 73 , message);
3168
+ }
3169
+ else {
3170
+ throwError(message);
3171
+ }
3172
+ }
2888
3173
  });
2889
3174
  }
2890
3175
  return BaseCore;
@@ -3013,12 +3298,12 @@
3013
3298
  }
3014
3299
  return name;
3015
3300
  }
3016
- function _getEvtNamespace(eventName, namespaces) {
3017
- if (namespaces) {
3301
+ function _getEvtNamespace(eventName, evtNamespace) {
3302
+ if (evtNamespace) {
3018
3303
  var theNamespace_1 = "";
3019
- if (isArray(namespaces)) {
3304
+ if (isArray(evtNamespace)) {
3020
3305
  theNamespace_1 = "";
3021
- arrForEach(namespaces, function (name) {
3306
+ arrForEach(evtNamespace, function (name) {
3022
3307
  name = _normalizeNamespace(name);
3023
3308
  if (name) {
3024
3309
  if (name[0] !== ".") {
@@ -3029,7 +3314,7 @@
3029
3314
  });
3030
3315
  }
3031
3316
  else {
3032
- theNamespace_1 = _normalizeNamespace(namespaces);
3317
+ theNamespace_1 = _normalizeNamespace(evtNamespace);
3033
3318
  }
3034
3319
  if (theNamespace_1) {
3035
3320
  if (theNamespace_1[0] !== ".") {
@@ -3044,16 +3329,19 @@
3044
3329
  ns: ((parsedEvent[2] || "").split(".").sort()).join(".")
3045
3330
  };
3046
3331
  }
3047
- function __getRegisteredEvents(target, evtName) {
3332
+ function __getRegisteredEvents(target, eventName, evtNamespace) {
3048
3333
  var theEvents = [];
3049
3334
  var eventCache = elmNodeData.get(target, strEvents, {}, false);
3335
+ var evtName = _getEvtNamespace(eventName, evtNamespace);
3050
3336
  objForEachKey(eventCache, function (evtType, registeredEvents) {
3051
3337
  arrForEach(registeredEvents, function (value) {
3052
- if (!evtName || evtName === value.evtName.type) {
3053
- theEvents.push({
3054
- name: value.evtName.type + (value.evtName.ns ? "." + value.evtName.ns : ""),
3055
- handler: value.handler
3056
- });
3338
+ if (!evtName.type || evtName.type === value.evtName.type) {
3339
+ if (!evtName.ns || evtName.ns === evtName.ns) {
3340
+ theEvents.push({
3341
+ name: value.evtName.type + (value.evtName.ns ? "." + value.evtName.ns : ""),
3342
+ handler: value.handler
3343
+ });
3344
+ }
3057
3345
  }
3058
3346
  });
3059
3347
  });
@@ -3682,6 +3970,7 @@
3682
3970
  exports._InternalMessageId = _InternalMessageId;
3683
3971
  exports.__getRegisteredEvents = __getRegisteredEvents;
3684
3972
  exports._legacyCookieMgr = _legacyCookieMgr;
3973
+ exports._throwInternal = _throwInternal;
3685
3974
  exports.addEventHandler = addEventHandler;
3686
3975
  exports.addEventListeners = addEventListeners;
3687
3976
  exports.addPageHideEventListener = addPageHideEventListener;
@@ -3699,6 +3988,7 @@
3699
3988
  exports.createEnumStyle = createEnumStyle;
3700
3989
  exports.createProcessTelemetryContext = createProcessTelemetryContext;
3701
3990
  exports.createUniqueNamespace = createUniqueNamespace;
3991
+ exports.createUnloadHandlerContainer = createUnloadHandlerContainer;
3702
3992
  exports.dateNow = dateNow;
3703
3993
  exports.deleteCookie = deleteCookie;
3704
3994
  exports.detachEvent = detachEvent;