@microsoft/applicationinsights-core-js 3.4.5-nightly3.2610-03 → 3.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/browser/es5/applicationinsights-core-js.cjs.js +6 -6
- package/browser/es5/applicationinsights-core-js.cjs.js.map +1 -1
- package/browser/es5/applicationinsights-core-js.cjs.min.js +2 -2
- package/browser/es5/applicationinsights-core-js.cjs.min.js.map +1 -1
- package/browser/es5/applicationinsights-core-js.gbl.js +8 -8
- package/browser/es5/applicationinsights-core-js.gbl.js.map +1 -1
- package/browser/es5/applicationinsights-core-js.gbl.min.js +2 -2
- package/browser/es5/applicationinsights-core-js.gbl.min.js.map +1 -1
- package/browser/es5/applicationinsights-core-js.integrity.json +25 -25
- package/browser/es5/applicationinsights-core-js.js +8 -8
- package/browser/es5/applicationinsights-core-js.js.map +1 -1
- package/browser/es5/applicationinsights-core-js.min.js +2 -2
- package/browser/es5/applicationinsights-core-js.min.js.map +1 -1
- package/dist/es5/index.js +6 -6
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/index.min.js +2 -2
- package/dist/es5/index.min.js.map +1 -1
- package/dist-es5/__DynamicConstants.js +1 -1
- package/dist-es5/config/ConfigDefaultHelpers.js +1 -1
- package/dist-es5/config/ConfigDefaults.js +1 -1
- package/dist-es5/config/DynamicConfig.js +1 -1
- package/dist-es5/config/DynamicProperty.js +1 -1
- package/dist-es5/config/DynamicState.js +1 -1
- package/dist-es5/config/DynamicSupport.js +1 -1
- package/dist-es5/constants/Constants.js +1 -1
- package/dist-es5/constants/InternalConstants.js +1 -1
- package/dist-es5/core/AggregationError.js +1 -1
- package/dist-es5/core/AppInsightsCore.js +1 -1
- package/dist-es5/core/AsyncUtils.js +1 -1
- package/dist-es5/core/BaseTelemetryPlugin.js +1 -1
- package/dist-es5/core/CookieMgr.js +1 -1
- package/dist-es5/core/DbgExtensionUtils.js +1 -1
- package/dist-es5/core/InstrumentHooks.js +1 -1
- package/dist-es5/core/InternalSdkStats.js +4 -4
- package/dist-es5/core/InternalSdkStats.js.map +1 -1
- package/dist-es5/core/NotificationManager.js +1 -1
- package/dist-es5/core/PerfManager.js +1 -1
- package/dist-es5/core/ProcessTelemetryContext.js +1 -1
- package/dist-es5/core/ResponseHelpers.js +1 -1
- package/dist-es5/core/SdkStatsNotificationCbk.js +1 -1
- package/dist-es5/core/SenderPostManager.js +1 -1
- package/dist-es5/core/TelemetryHelpers.js +1 -1
- package/dist-es5/core/TelemetryInitializerPlugin.js +1 -1
- package/dist-es5/core/UnloadHandlerContainer.js +1 -1
- package/dist-es5/core/UnloadHookContainer.js +1 -1
- package/dist-es5/diagnostics/DiagnosticLogger.js +1 -1
- package/dist-es5/diagnostics/ThrottleMgr.js +1 -1
- package/dist-es5/enums/EnumHelperFuncs.js +1 -1
- package/dist-es5/enums/W3CTraceFlags.js +1 -1
- package/dist-es5/enums/ai/DependencyTypes.js +1 -1
- package/dist-es5/enums/ai/Enums.js +1 -1
- package/dist-es5/enums/ai/EventsDiscardedReason.js +1 -1
- package/dist-es5/enums/ai/FeatureOptInEnums.js +1 -1
- package/dist-es5/enums/ai/InitActiveStatusEnum.js +1 -1
- package/dist-es5/enums/ai/LoggingEnums.js +1 -1
- package/dist-es5/enums/ai/SendRequestReason.js +1 -1
- package/dist-es5/enums/ai/TelemetryUnloadReason.js +1 -1
- package/dist-es5/enums/ai/TelemetryUpdateReason.js +1 -1
- package/dist-es5/enums/ai/TraceHeadersMode.js +1 -1
- package/dist-es5/enums/ai/UrlRedactionOptions.js +1 -1
- package/dist-es5/enums/ext/Enums.js +1 -1
- package/dist-es5/enums/otel/OTelSamplingDecision.js +1 -1
- package/dist-es5/enums/otel/OTelSpanKind.js +1 -1
- package/dist-es5/enums/otel/OTelSpanStatus.js +1 -1
- package/dist-es5/enums/otel/eAttributeChangeOp.js +1 -1
- package/dist-es5/ext/AppInsightsExtCore.js +1 -1
- package/dist-es5/ext/ValueSanitizer.js +1 -1
- package/dist-es5/ext/extSpanUtils.js +1 -1
- package/dist-es5/ext/extUtils.js +2 -2
- package/dist-es5/ext/extUtils.js.map +1 -1
- package/dist-es5/index.js +1 -1
- package/dist-es5/interfaces/IException.js +1 -1
- package/dist-es5/interfaces/IOTelHrTime.js +1 -1
- package/dist-es5/interfaces/ai/ConnectionString.js +1 -1
- package/dist-es5/interfaces/ai/IAppInsights.js +1 -1
- package/dist-es5/interfaces/ai/IAppInsightsCore.js +1 -1
- package/dist-es5/interfaces/ai/IChannelControls.js +1 -1
- package/dist-es5/interfaces/ai/IChannelControlsHost.js +1 -1
- package/dist-es5/interfaces/ai/IConfig.js +1 -1
- package/dist-es5/interfaces/ai/IConfiguration.js +1 -1
- package/dist-es5/interfaces/ai/ICookieMgr.js +1 -1
- package/dist-es5/interfaces/ai/ICorrelationConfig.js +1 -1
- package/dist-es5/interfaces/ai/IDbgExtension.js +1 -1
- package/dist-es5/interfaces/ai/IDependencyTelemetry.js +1 -1
- package/dist-es5/interfaces/ai/IDiagnosticLogger.js +1 -1
- package/dist-es5/interfaces/ai/IDistributedTraceContext.js +1 -1
- package/dist-es5/interfaces/ai/IEventTelemetry.js +1 -1
- package/dist-es5/interfaces/ai/IExceptionConfig.js +1 -1
- package/dist-es5/interfaces/ai/IExceptionTelemetry.js +1 -1
- package/dist-es5/interfaces/ai/IFeatureOptIn.js +1 -1
- package/dist-es5/interfaces/ai/IInstrumentHooks.js +1 -1
- package/dist-es5/interfaces/ai/IInternalSdkStats.js +1 -1
- package/dist-es5/interfaces/ai/IInternalSdkStatsNetwork.js +1 -1
- package/dist-es5/interfaces/ai/IMetricTelemetry.js +1 -1
- package/dist-es5/interfaces/ai/INotificationListener.js +1 -1
- package/dist-es5/interfaces/ai/INotificationManager.js +1 -1
- package/dist-es5/interfaces/ai/IPageViewPerformanceTelemetry.js +1 -1
- package/dist-es5/interfaces/ai/IPageViewTelemetry.js +1 -1
- package/dist-es5/interfaces/ai/IPartC.js +1 -1
- package/dist-es5/interfaces/ai/IPerfEvent.js +1 -1
- package/dist-es5/interfaces/ai/IPerfManager.js +1 -1
- package/dist-es5/interfaces/ai/IProcessTelemetryContext.js +1 -1
- package/dist-es5/interfaces/ai/IPropertiesPlugin.js +1 -1
- package/dist-es5/interfaces/ai/IRequestContext.js +1 -1
- package/dist-es5/interfaces/ai/IRequestTelemetry.js +1 -1
- package/dist-es5/interfaces/ai/ISenderPostManager.js +1 -1
- package/dist-es5/interfaces/ai/IStatsEventData.js +1 -1
- package/dist-es5/interfaces/ai/IStatsMgr.js +1 -1
- package/dist-es5/interfaces/ai/IStorageBuffer.js +1 -1
- package/dist-es5/interfaces/ai/ITelemetryContext.js +1 -1
- package/dist-es5/interfaces/ai/ITelemetryInitializers.js +1 -1
- package/dist-es5/interfaces/ai/ITelemetryItem.js +1 -1
- package/dist-es5/interfaces/ai/ITelemetryPlugin.js +1 -1
- package/dist-es5/interfaces/ai/ITelemetryPluginChain.js +1 -1
- package/dist-es5/interfaces/ai/ITelemetryUnloadState.js +1 -1
- package/dist-es5/interfaces/ai/ITelemetryUpdateState.js +1 -1
- package/dist-es5/interfaces/ai/IThrottleMgr.js +1 -1
- package/dist-es5/interfaces/ai/ITraceParent.js +1 -1
- package/dist-es5/interfaces/ai/ITraceProvider.js +1 -1
- package/dist-es5/interfaces/ai/ITraceTelemetry.js +1 -1
- package/dist-es5/interfaces/ai/IUnloadHook.js +1 -1
- package/dist-es5/interfaces/ai/IUnloadableComponent.js +1 -1
- package/dist-es5/interfaces/ai/IW3cTraceState.js +1 -1
- package/dist-es5/interfaces/ai/IXDomainRequest.js +1 -1
- package/dist-es5/interfaces/ai/IXHROverride.js +1 -1
- package/dist-es5/interfaces/ai/PartAExtensions.js +1 -1
- package/dist-es5/interfaces/ai/context/IApplication.js +1 -1
- package/dist-es5/interfaces/ai/context/IDevice.js +1 -1
- package/dist-es5/interfaces/ai/context/IInternal.js +1 -1
- package/dist-es5/interfaces/ai/context/ILocation.js +1 -1
- package/dist-es5/interfaces/ai/context/IOperatingSystem.js +1 -1
- package/dist-es5/interfaces/ai/context/ISample.js +1 -1
- package/dist-es5/interfaces/ai/context/ISession.js +1 -1
- package/dist-es5/interfaces/ai/context/ISessionManager.js +1 -1
- package/dist-es5/interfaces/ai/context/ITelemetryTrace.js +1 -1
- package/dist-es5/interfaces/ai/context/IUser.js +1 -1
- package/dist-es5/interfaces/ai/context/IWeb.js +1 -1
- package/dist-es5/interfaces/ai/contracts/AvailabilityData.js +1 -1
- package/dist-es5/interfaces/ai/contracts/ContextTagKeys.js +1 -1
- package/dist-es5/interfaces/ai/contracts/DataPointType.js +1 -1
- package/dist-es5/interfaces/ai/contracts/DependencyKind.js +1 -1
- package/dist-es5/interfaces/ai/contracts/DependencySourceType.js +1 -1
- package/dist-es5/interfaces/ai/contracts/IBase.js +1 -1
- package/dist-es5/interfaces/ai/contracts/IData.js +1 -1
- package/dist-es5/interfaces/ai/contracts/IDataPoint.js +1 -1
- package/dist-es5/interfaces/ai/contracts/IDomain.js +1 -1
- package/dist-es5/interfaces/ai/contracts/IEventData.js +1 -1
- package/dist-es5/interfaces/ai/contracts/IExceptionData.js +1 -1
- package/dist-es5/interfaces/ai/contracts/IExceptionDetails.js +1 -1
- package/dist-es5/interfaces/ai/contracts/IMessageData.js +1 -1
- package/dist-es5/interfaces/ai/contracts/IMetricData.js +1 -1
- package/dist-es5/interfaces/ai/contracts/IPageViewData.js +1 -1
- package/dist-es5/interfaces/ai/contracts/IPageViewPerfData.js +1 -1
- package/dist-es5/interfaces/ai/contracts/IRemoteDependencyData.js +1 -1
- package/dist-es5/interfaces/ai/contracts/IStackFrame.js +1 -1
- package/dist-es5/interfaces/ai/contracts/SeverityLevel.js +1 -1
- package/dist-es5/interfaces/ai/telemetry/IEnvelope.js +1 -1
- package/dist-es5/interfaces/ai/telemetry/ISerializable.js +1 -1
- package/dist-es5/interfaces/config/IConfigDefaults.js +1 -1
- package/dist-es5/interfaces/config/IDynamicConfigHandler.js +1 -1
- package/dist-es5/interfaces/config/IDynamicPropertyHandler.js +1 -1
- package/dist-es5/interfaces/config/IDynamicWatcher.js +1 -1
- package/dist-es5/interfaces/config/_IDynamicConfigHandlerState.js +1 -1
- package/dist-es5/interfaces/ext/DataModels.js +1 -1
- package/dist-es5/interfaces/otel/IOTelApi.js +1 -1
- package/dist-es5/interfaces/otel/IOTelApiCtx.js +1 -1
- package/dist-es5/interfaces/otel/IOTelAttributes.js +1 -1
- package/dist-es5/interfaces/otel/attribute/IAttributeContainer.js +1 -1
- package/dist-es5/interfaces/otel/config/IOTelAttributeLimits.js +1 -1
- package/dist-es5/interfaces/otel/config/IOTelConfig.js +1 -1
- package/dist-es5/interfaces/otel/config/IOTelErrorHandlers.js +1 -1
- package/dist-es5/interfaces/otel/config/IOTelSpanLimits.js +1 -1
- package/dist-es5/interfaces/otel/config/IOTelTraceCfg.js +1 -1
- package/dist-es5/interfaces/otel/trace/IOTelSpan.js +1 -1
- package/dist-es5/interfaces/otel/trace/IOTelSpanContext.js +1 -1
- package/dist-es5/interfaces/otel/trace/IOTelSpanCtx.js +1 -1
- package/dist-es5/interfaces/otel/trace/IOTelSpanOptions.js +1 -1
- package/dist-es5/interfaces/otel/trace/IOTelSpanStatus.js +1 -1
- package/dist-es5/interfaces/otel/trace/IOTelTraceApi.js +1 -1
- package/dist-es5/interfaces/otel/trace/IOTelTraceState.js +1 -1
- package/dist-es5/interfaces/otel/trace/IOTelTracer.js +1 -1
- package/dist-es5/interfaces/otel/trace/IOTelTracerOptions.js +1 -1
- package/dist-es5/interfaces/otel/trace/IOTelTracerProvider.js +1 -1
- package/dist-es5/interfaces/otel/trace/IReadableSpan.js +1 -1
- package/dist-es5/internal/EventHelpers.js +1 -1
- package/dist-es5/internal/attributeHelpers.js +1 -1
- package/dist-es5/internal/commonUtils.js +1 -1
- package/dist-es5/internal/handleErrors.js +1 -1
- package/dist-es5/internal/noopHelpers.js +1 -1
- package/dist-es5/internal/timeHelpers.js +1 -1
- package/dist-es5/otel/api/OTelApi.js +1 -1
- package/dist-es5/otel/api/errors/OTelError.js +1 -1
- package/dist-es5/otel/api/errors/OTelInvalidAttributeError.js +1 -1
- package/dist-es5/otel/api/errors/OTelSpanError.js +1 -1
- package/dist-es5/otel/api/trace/span.js +1 -1
- package/dist-es5/otel/api/trace/spanContext.js +1 -1
- package/dist-es5/otel/api/trace/traceApi.js +1 -1
- package/dist-es5/otel/api/trace/traceProvider.js +1 -1
- package/dist-es5/otel/api/trace/traceState.js +1 -1
- package/dist-es5/otel/api/trace/tracer.js +1 -1
- package/dist-es5/otel/api/trace/tracerProvider.js +1 -1
- package/dist-es5/otel/api/trace/utils.js +1 -1
- package/dist-es5/otel/attribute/SemanticConventions.js +1 -1
- package/dist-es5/otel/attribute/attributeContainer.js +1 -1
- package/dist-es5/telemetry/ConnectionStringParser.js +1 -1
- package/dist-es5/telemetry/RequestResponseHeaders.js +1 -1
- package/dist-es5/telemetry/TelemetryItemCreator.js +1 -1
- package/dist-es5/telemetry/W3cTraceState.js +1 -1
- package/dist-es5/telemetry/ai/Common/Data.js +1 -1
- package/dist-es5/telemetry/ai/Common/DataPoint.js +1 -1
- package/dist-es5/telemetry/ai/Common/DataSanitizer.js +1 -1
- package/dist-es5/telemetry/ai/Common/Envelope.js +1 -1
- package/dist-es5/telemetry/ai/DataTypes.js +1 -1
- package/dist-es5/telemetry/ai/EnvelopeTypes.js +1 -1
- package/dist-es5/telemetry/ai/Event.js +1 -1
- package/dist-es5/telemetry/ai/Exception.js +1 -1
- package/dist-es5/telemetry/ai/Metric.js +1 -1
- package/dist-es5/telemetry/ai/PageView.js +1 -1
- package/dist-es5/telemetry/ai/PageViewPerformance.js +1 -1
- package/dist-es5/telemetry/ai/RemoteDependencyData.js +1 -1
- package/dist-es5/telemetry/ai/Trace.js +1 -1
- package/dist-es5/utils/CoreUtils.js +1 -1
- package/dist-es5/utils/DataCacheHelper.js +2 -2
- package/dist-es5/utils/DataCacheHelper.js.map +1 -1
- package/dist-es5/utils/DomHelperFuncs.js +1 -1
- package/dist-es5/utils/EnvUtils.js +1 -1
- package/dist-es5/utils/HelperFuncs.js +1 -1
- package/dist-es5/utils/Offline.js +1 -1
- package/dist-es5/utils/RandomHelper.js +1 -1
- package/dist-es5/utils/StorageHelperFuncs.js +1 -1
- package/dist-es5/utils/TraceParent.js +1 -1
- package/dist-es5/utils/UrlHelperFuncs.js +1 -1
- package/dist-es5/utils/Util.js +1 -1
- package/package.json +82 -85
- package/types/applicationinsights-core-js.d.ts +3 -3
- package/types/applicationinsights-core-js.namespaced.d.ts +3 -3
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Application Insights JavaScript SDK - Core, 3.4.5
|
|
2
|
+
* Application Insights JavaScript SDK - Core, 3.4.5
|
|
3
3
|
* Copyright (c) Microsoft and contributors. All rights reserved.
|
|
4
4
|
*/
|
|
5
5
|
|
|
@@ -340,9 +340,9 @@ function _createInternalSdkStats(mgr, internalSdkStatsStats, logger) {
|
|
|
340
340
|
function _trackSendRequestsCount() {
|
|
341
341
|
var currentCounter = _networkCounter;
|
|
342
342
|
_sendInternalSdkStatss("Request_Success_Count", currentCounter[_DYN_SUCCESS /* @min:%2esuccess */]);
|
|
343
|
-
_sendCounts(currentCounter[_DYN_FAILURE /* @min:%2efailure */], "
|
|
344
|
-
_sendCounts(currentCounter.retry, "
|
|
345
|
-
_sendCounts(currentCounter[_DYN_EXCEPTION /* @min:%2eexception */], "
|
|
343
|
+
_sendCounts(currentCounter[_DYN_FAILURE /* @min:%2efailure */], "Request_Failure_Count", "statusCode");
|
|
344
|
+
_sendCounts(currentCounter.retry, "Retry_Count", "statusCode");
|
|
345
|
+
_sendCounts(currentCounter[_DYN_EXCEPTION /* @min:%2eexception */], "Exception_Count", "exceptionType");
|
|
346
346
|
_sendCounts(currentCounter[_DYN_THROTTLE /* @min:%2ethrottle */], "Throttle_Count", "statusCode");
|
|
347
347
|
}
|
|
348
348
|
function _setEnabled(isEnabled) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InternalSdkStats.js.map","sources":["InternalSdkStats.js"],"sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport { doAwaitResponse } from \"@nevware21/ts-async\";\r\nimport { arrIndexOf, isNumber, isString, mathRandom, objCreate, objDefineProps, objForEachKey, scheduleTimeout, strEndsWith, strLower, strStartsWith, strSubstring, utcNow } from \"@nevware21/ts-utils\";\r\nimport { _DYN_CANCEL, _DYN_CONFIG, _DYN_ENABLED, _DYN_ENDPOINT, _DYN_ENDPOINT_URL, _DYN_EXCEPTION, _DYN_FAILURE, _DYN_HOST, _DYN_INDEX_OF, _DYN_INSTRUMENTATION_KEY, _DYN_INTERVAL, _DYN_I_KEY, _DYN_LENGTH, _DYN_PENDING, _DYN_PUSH, _DYN_REJECTED, _DYN_REPLACE, _DYN_REQUEST_DURATION, _DYN_SET_DF, _DYN_SPLICE, _DYN_STATUS, _DYN_STRINGIFY, _DYN_SUCCESS, _DYN_THROTTLE, _DYN_TOTAL_REQUEST, _DYN_TRACK, _DYN_UNLOAD, _DYN_VALUE, _DYN_WATCH_INTERVAL } from \"../__DynamicConstants\";\r\nimport { onConfigChange } from \"../config/DynamicConfig\";\r\nimport { DEFAULT_BREEZE_PATH, DisabledPropertyName, SampleRate } from \"../constants/Constants\";\r\nimport { STR_EMPTY } from \"../constants/InternalConstants\";\r\nimport { _throwInternal, safeGetLogger } from \"../diagnostics/DiagnosticLogger\";\r\nimport { MetricDataType } from \"../telemetry/ai/DataTypes\";\r\nimport { getJSON, isFetchSupported, isXhrSupported } from \"../utils/EnvUtils\";\r\nimport { getResponseText, isFeatureEnabled, openXhr } from \"../utils/HelperFuncs\";\r\nimport { utlGetSessionStorage, utlSetSessionStorage } from \"../utils/StorageHelperFuncs\";\r\n/** Default collection interval in seconds; override with `stats.shrtInt`. */\r\nvar STATS_COLLECTION_INTERVAL_SECONDS = 3600; // 1 hour\r\nvar STATS_LANGUAGE = \"JavaScript\";\r\nvar STATS_SAMPLING_PERCENTAGE = 100;\r\nvar STATS_TYPE = \"Browser\";\r\n/** Ingestion path for future 1DS (OneCollector) SDK Stats; the AI SKU uses {@link DEFAULT_BREEZE_PATH}. */\r\nexport var STATS_SDK_ONECOLLECTOR_PATH = \"/OneCollector/1.0\";\r\n/**\r\n * The default feature name used to gate the SDK Stats manager. SDK Stats is enabled by default\r\n * and can be opted-out via the featureOptIn configuration using this name.\r\n */\r\nexport var STATS_SDK_FEATURE = \"sdkStats\";\r\n// Prefixes for EU data-boundary regions used by the Azure Monitor OpenTelemetry exporter\r\nvar STATS_EU_REGION_PATTERN = /^(?:[^:]+:\\/\\/)?(?:france|germany|northeurope|norway|sweden|switzerland|uk|westeurope)/i;\r\n/**\r\n * Returns the SDK Stats config URL (`cfg/v1.json`) for the endpoint, derived from the configured\r\n * base url. For EU data-boundary endpoints an `eu-` prefix is inserted in front of\r\n * the host, e.g. `https://data.stats...` => `https://eu-data.stats...`.\r\n * @param endpoint - The customer breeze endpoint that the SDK Stats are being collected for.\r\n * @param cfgUrl - The configured (non-EU) SDK Stats config url, when not supplied null is returned.\r\n * @returns The config url to fetch, or null when no url has been configured.\r\n */\r\nexport function getStatsCfgUrl(endpoint, cfgUrl) {\r\n var result = null;\r\n if (cfgUrl) {\r\n result = cfgUrl;\r\n if (STATS_EU_REGION_PATTERN.test(endpoint)) {\r\n result = cfgUrl[_DYN_REPLACE /* @min:%2ereplace */](/^([^:]+:\\/\\/)?/, \"$1eu-\");\r\n }\r\n }\r\n return result;\r\n}\r\n/** Parse the SDK Stats config JSON (`{ ver, enabled, url }`); null if empty or unparseable. */\r\nfunction _parseStatsCfg(response) {\r\n var result = null;\r\n var json = getJSON();\r\n if (response && json) {\r\n try {\r\n var cfg = json.parse(response);\r\n if (cfg) {\r\n result = {\r\n // Fail-closed: only treat as enabled when explicitly true\r\n enabled: cfg[_DYN_ENABLED /* @min:%2eenabled */] === true,\r\n url: isString(cfg.url) ? cfg.url : null\r\n };\r\n }\r\n }\r\n catch (e) {\r\n // Unparseable -> no config available\r\n }\r\n }\r\n return result;\r\n}\r\n/** Default SDK Stats config fetch (fetch, else XHR); calls oncomplete with the parsed config or null. */\r\nfunction _defaultStatsCfgFetch(cfgUrl, oncomplete) {\r\n function _complete(response) {\r\n try {\r\n oncomplete(response ? _parseStatsCfg(response) : null);\r\n }\r\n catch (e) {\r\n // Ignore callback errors\r\n }\r\n }\r\n try {\r\n if (isFetchSupported()) {\r\n var init = { method: \"GET\" };\r\n init[DisabledPropertyName] = true;\r\n doAwaitResponse(fetch(cfgUrl, init), function (result) {\r\n var response = result[_DYN_VALUE /* @min:%2evalue */];\r\n if (!result[_DYN_REJECTED /* @min:%2erejected */] && response && response.ok) {\r\n doAwaitResponse(response.text(), function (res) {\r\n _complete(res[_DYN_REJECTED /* @min:%2erejected */] ? null : res[_DYN_VALUE /* @min:%2evalue */]);\r\n });\r\n }\r\n else {\r\n _complete();\r\n }\r\n });\r\n }\r\n else if (isXhrSupported()) {\r\n // openXhr marks the request disabled so it isn't self-tracked\r\n var xhr_1 = openXhr(\"GET\", cfgUrl, false, true, false, 10000);\r\n xhr_1.onreadystatechange = function () {\r\n if (xhr_1.readyState === 4) {\r\n _complete(xhr_1[_DYN_STATUS /* @min:%2estatus */] >= 200 && xhr_1[_DYN_STATUS /* @min:%2estatus */] < 400 ? getResponseText(xhr_1) : null);\r\n }\r\n };\r\n xhr_1.onerror = function () {\r\n _complete();\r\n };\r\n xhr_1.ontimeout = function () {\r\n _complete();\r\n };\r\n xhr_1.send();\r\n }\r\n else {\r\n _complete();\r\n }\r\n }\r\n catch (e) {\r\n _complete();\r\n }\r\n}\r\n/** Build the ingestion endpoint from the config host: `https://<host>` + {@link DEFAULT_BREEZE_PATH}. */\r\nfunction _buildStatsEndpoint(host) {\r\n var endpoint = null;\r\n if (host) {\r\n var base = strStartsWith(strLower(host), \"http\") ? host : \"https://\" + host;\r\n if (strEndsWith(base, \"/\")) {\r\n base = strSubstring(base, 0, base[_DYN_LENGTH /* @min:%2elength */] - 1);\r\n }\r\n endpoint = base + DEFAULT_BREEZE_PATH;\r\n }\r\n return endpoint;\r\n}\r\n/**\r\n * Creates a new IInternalSdkStatsNetwork instance with the specified host.\r\n * @param host - The host for the IInternalSdkStatsNetwork instance.\r\n * @returns A new IInternalSdkStatsNetwork instance.\r\n */\r\nfunction _createInternalSdkStatsNetwork(host) {\r\n var _a;\r\n return _a = {\r\n host: host,\r\n totalRequest: 0,\r\n success: 0,\r\n // Untrusted keys must not reach Object.prototype.\r\n throttle: objCreate(null),\r\n failure: objCreate(null),\r\n retry: objCreate(null),\r\n exception: objCreate(null)\r\n },\r\n _a[_DYN_REQUEST_DURATION /* @min:requestDuration */] = 0,\r\n _a;\r\n}\r\n/** Validates persisted counts and restores them to a null-prototype object. */\r\nfunction _reviveCounts(src) {\r\n var result = objCreate(null);\r\n objForEachKey(src, function (key, value) {\r\n value = +value;\r\n if (value > 0) {\r\n result[key] = value;\r\n }\r\n });\r\n return result;\r\n}\r\n/** Restores validated counters from session storage. */\r\nfunction _reviveCounters(host, cnt) {\r\n var counter = _createInternalSdkStatsNetwork(host);\r\n if (cnt) {\r\n counter[_DYN_TOTAL_REQUEST /* @min:%2etotalRequest */] = +cnt[_DYN_TOTAL_REQUEST /* @min:%2etotalRequest */] || 0;\r\n counter[_DYN_SUCCESS /* @min:%2esuccess */] = +cnt[_DYN_SUCCESS /* @min:%2esuccess */] || 0;\r\n counter[_DYN_REQUEST_DURATION /* @min:%2erequestDuration */] = +cnt[_DYN_REQUEST_DURATION /* @min:%2erequestDuration */] || 0;\r\n counter[_DYN_THROTTLE /* @min:%2ethrottle */] = _reviveCounts(cnt[_DYN_THROTTLE /* @min:%2ethrottle */]);\r\n counter[_DYN_FAILURE /* @min:%2efailure */] = _reviveCounts(cnt[_DYN_FAILURE /* @min:%2efailure */]);\r\n counter.retry = _reviveCounts(cnt.retry);\r\n counter[_DYN_EXCEPTION /* @min:%2eexception */] = _reviveCounts(cnt[_DYN_EXCEPTION /* @min:%2eexception */]);\r\n }\r\n return counter;\r\n}\r\nfunction _loadStore(logger, key) {\r\n try {\r\n var json = getJSON();\r\n var raw = json && utlGetSessionStorage(logger, key);\r\n if (raw) {\r\n var parsed = json.parse(raw);\r\n if (parsed[0] >= 0) {\r\n return parsed;\r\n }\r\n }\r\n }\r\n catch (e) {\r\n // Start a new window.\r\n }\r\n return null;\r\n}\r\nfunction _saveStore(logger, key, store) {\r\n try {\r\n var json = getJSON();\r\n if (json) {\r\n utlSetSessionStorage(logger, key, json[_DYN_STRINGIFY /* @min:%2estringify */](store));\r\n }\r\n }\r\n catch (e) {\r\n // Persistence is best-effort; serialization can fail when built-in prototypes are modified.\r\n }\r\n}\r\n/**\r\n * Creates a new IInternalSdkStats instance with the specified manager callbacks and internalSdkStats state.\r\n * @param mgr - The manager callbacks to use for the IInternalSdkStats instance.\r\n * @param internalSdkStatsStats - The internalSdkStats state to use for the IInternalSdkStats instance.\r\n * @returns A new IInternalSdkStats instance.\r\n */\r\nfunction _createInternalSdkStats(mgr, internalSdkStatsStats, logger) {\r\n // Isolate counters by customer key and endpoint.\r\n var _storeKey = (internalSdkStatsStats.cKey || STR_EMPTY) + \":\" + internalSdkStatsStats[_DYN_ENDPOINT /* @min:%2eendpoint */];\r\n var _store = _loadStore(logger, _storeKey);\r\n // Start a new window only when the first value is recorded.\r\n var _windowStart = _store ? _store[0] : -1;\r\n var _networkCounter = _reviveCounters(internalSdkStatsStats[_DYN_ENDPOINT /* @min:%2eendpoint */], _store && _store[1]);\r\n var _timeoutHandle; // Handle to the timer for sending telemetry. This way, we would not send telemetry when system sleep.\r\n var _isEnabled = true; // Flag to check if internalSdkStats is enabled or not\r\n var _removeIntervalListener;\r\n function _startWindow() {\r\n if (_windowStart < 0) {\r\n _windowStart = utcNow();\r\n }\r\n }\r\n function _persist() {\r\n _saveStore(logger, _storeKey, [_windowStart, _networkCounter]);\r\n }\r\n /** Returns the remaining time in the current window. */\r\n function _remaining() {\r\n var interval = mgr[_DYN_INTERVAL /* @min:%2einterval */]();\r\n var elapsed = utcNow() - _windowStart;\r\n var remaining = interval;\r\n if (elapsed >= 0) {\r\n remaining = interval - elapsed;\r\n }\r\n return remaining > 0 ? remaining : 0;\r\n }\r\n function _setupTimer() {\r\n if (_isEnabled && _windowStart >= 0 && !_timeoutHandle) {\r\n _timeoutHandle = mgr.start(function () {\r\n _timeoutHandle = null;\r\n trackInternalSdkStats();\r\n }, _remaining());\r\n }\r\n }\r\n function trackInternalSdkStats() {\r\n if (_isEnabled) {\r\n var ready = mgr[_DYN_TRACK /* @min:%2etrack */](internalSdkStats);\r\n if (ready !== null) {\r\n if (ready) {\r\n _trackSendRequestDuration();\r\n _trackSendRequestsCount();\r\n }\r\n _networkCounter = _createInternalSdkStatsNetwork(_networkCounter[_DYN_HOST /* @min:%2ehost */]);\r\n // Persist the reset state; restart the window on the next value.\r\n _windowStart = -1;\r\n _persist();\r\n }\r\n else {\r\n // Keep the counters and retry during the next interval.\r\n _windowStart = utcNow();\r\n _persist();\r\n _setupTimer();\r\n }\r\n }\r\n }\r\n /**\r\n * This is a simple helper that checks if the currently reporting endpoint is the same as this instance was\r\n * created with. This is used to ensure that we only send internalSdkStats events to the endpoint that was used\r\n * when the instance was created. This is important as the endpoint can change during the lifetime of the\r\n * instance and we don't want to send internalSdkStats events to the wrong endpoint.\r\n * @param endpoint\r\n * @returns true if the endpoint is the same as the one used to create the instance, false otherwise\r\n */\r\n function _checkEndpoint(endpoint) {\r\n return _networkCounter[_DYN_HOST /* @min:%2ehost */] === endpoint;\r\n }\r\n function _inc(counter, key) {\r\n counter[key] = (counter[key] || 0) + 1;\r\n }\r\n /**\r\n * Attempt to send internalSdkStats events to the server. This is done by creating a new event and sending it to the core.\r\n * The event is created with the name and value passed in, and any additional properties are added to the event as well.\r\n * This will only send the event when\r\n * - the internalSdkStats is enabled\r\n * - the internalSdkStats key is set for the current endpoint\r\n * - the value is greater than 0\r\n * @param name - The name of the event to send\r\n * @param val - The value of the event to send\r\n * @param properties - Optional additional properties to add to the event\r\n */\r\n function _sendInternalSdkStatss(name, val, properties) {\r\n if (_isEnabled && val && val > 0) {\r\n // Add extra properties\r\n var baseProperties = {\r\n \"rp\": \"unknown\",\r\n \"attach\": \"Manual\",\r\n \"cikey\": internalSdkStatsStats.cKey,\r\n \"os\": STATS_TYPE,\r\n \"language\": STATS_LANGUAGE,\r\n \"version\": internalSdkStatsStats.sdkVer || \"unknown\",\r\n \"endpoint\": \"breeze\",\r\n \"host\": _networkCounter[_DYN_HOST /* @min:%2ehost */]\r\n };\r\n var combinedProps_1 = {};\r\n objForEachKey(properties, function (key, value) {\r\n combinedProps_1[key] = value;\r\n });\r\n objForEachKey(baseProperties, function (key, value) {\r\n combinedProps_1[key] = value;\r\n });\r\n var internalSdkStatsEvent = {\r\n name: name,\r\n baseData: {\r\n name: name,\r\n average: val,\r\n properties: combinedProps_1\r\n },\r\n baseType: MetricDataType\r\n };\r\n // The destination iKey and (optional) SDK Stats ingestion endpoint are resolved and\r\n // stamped by the manager (see _track) based on the current (dynamic) configuration.\r\n mgr[_DYN_TRACK /* @min:%2etrack */](internalSdkStats, internalSdkStatsEvent);\r\n }\r\n }\r\n function _trackSendRequestDuration() {\r\n var totalRequest = _networkCounter[_DYN_TOTAL_REQUEST /* @min:%2etotalRequest */];\r\n if (totalRequest > 0) {\r\n _sendInternalSdkStatss(\"Request_Duration\", _networkCounter[_DYN_REQUEST_DURATION /* @min:%2erequestDuration */] / totalRequest);\r\n }\r\n }\r\n function _sendCounts(counts, name, codeKey) {\r\n for (var code in counts) {\r\n var props = {};\r\n props[codeKey] = code;\r\n _sendInternalSdkStatss(name, counts[code], props);\r\n }\r\n }\r\n function _trackSendRequestsCount() {\r\n var currentCounter = _networkCounter;\r\n _sendInternalSdkStatss(\"Request_Success_Count\", currentCounter[_DYN_SUCCESS /* @min:%2esuccess */]);\r\n _sendCounts(currentCounter[_DYN_FAILURE /* @min:%2efailure */], \"failure\", \"statusCode\");\r\n _sendCounts(currentCounter.retry, \"retry\", \"statusCode\");\r\n _sendCounts(currentCounter[_DYN_EXCEPTION /* @min:%2eexception */], \"exception\", \"exceptionType\");\r\n _sendCounts(currentCounter[_DYN_THROTTLE /* @min:%2ethrottle */], \"Throttle_Count\", \"statusCode\");\r\n }\r\n function _setEnabled(isEnabled) {\r\n _isEnabled = isEnabled;\r\n if (!_isEnabled) {\r\n if (_timeoutHandle) {\r\n _timeoutHandle[_DYN_CANCEL /* @min:%2ecancel */]();\r\n _timeoutHandle = null;\r\n }\r\n if (_removeIntervalListener) {\r\n _removeIntervalListener();\r\n _removeIntervalListener = null;\r\n }\r\n }\r\n }\r\n _removeIntervalListener = mgr[_DYN_WATCH_INTERVAL /* @min:%2ewatchInterval */](function () {\r\n if (_timeoutHandle) {\r\n _timeoutHandle[_DYN_CANCEL /* @min:%2ecancel */]();\r\n _timeoutHandle = null;\r\n }\r\n _setupTimer();\r\n });\r\n // THE internalSdkStats instance being created and returned\r\n var internalSdkStats = {\r\n enabled: !!_isEnabled,\r\n endpoint: STR_EMPTY,\r\n count: function (status, payloadData, endpoint) {\r\n if (_isEnabled && _checkEndpoint(endpoint)) {\r\n var statsData = payloadData && payloadData[\"statsData\"];\r\n var startTime = statsData && statsData[\"startTime\"];\r\n if (startTime) {\r\n _networkCounter[_DYN_TOTAL_REQUEST /* @min:%2etotalRequest */]++;\r\n _networkCounter[_DYN_REQUEST_DURATION /* @min:%2erequestDuration */] += utcNow() - startTime;\r\n }\r\n var retryArray = [401, 403, 408, 429, 500, 502, 503, 504];\r\n var throttleArray = [402, 439];\r\n if (status >= 200 && status < 300) {\r\n _networkCounter[_DYN_SUCCESS /* @min:%2esuccess */]++;\r\n }\r\n else if (retryArray[_DYN_INDEX_OF /* @min:%2eindexOf */](status) !== -1) {\r\n _inc(_networkCounter.retry, status);\r\n }\r\n else if (throttleArray[_DYN_INDEX_OF /* @min:%2eindexOf */](status) !== -1) {\r\n _inc(_networkCounter[_DYN_THROTTLE /* @min:%2ethrottle */], status);\r\n }\r\n else if (status !== 307 && status !== 308) {\r\n _inc(_networkCounter[_DYN_FAILURE /* @min:%2efailure */], status);\r\n }\r\n // Persist in case the page unloads before the interval ends.\r\n _startWindow();\r\n _persist();\r\n _setupTimer();\r\n }\r\n },\r\n countException: function (endpoint, exceptionType) {\r\n if (_isEnabled && _checkEndpoint(endpoint)) {\r\n _inc(_networkCounter[_DYN_EXCEPTION /* @min:%2eexception */], exceptionType);\r\n _startWindow();\r\n _persist();\r\n _setupTimer();\r\n }\r\n }\r\n };\r\n // Make the properties readonly / reactive to changes\r\n return objDefineProps(internalSdkStats, {\r\n enabled: { g: function () { return _isEnabled; }, s: _setEnabled },\r\n endpoint: { g: function () { return _networkCounter[_DYN_HOST /* @min:%2ehost */]; } }\r\n });\r\n}\r\nexport function createStatsMgr() {\r\n var _isMgrEnabled = false; // Flag to check if internalSdkStats is enabled or not\r\n var _core; // The customer core observed for configuration and endpoint changes\r\n var _createStatsCore;\r\n var _featureName;\r\n var _statsCore;\r\n var _useFeature;\r\n var _sampleRate = STATS_SAMPLING_PERCENTAGE;\r\n var _shortInterval = STATS_COLLECTION_INTERVAL_SECONDS * 1000;\r\n var _statsCfgFetchFn;\r\n var _statsIKey;\r\n // The configured SDK Stats config url (cfg/v1.json), sourced from the dynamic config. When it is\r\n // not supplied (no CDN / host configuration) SDK Stats are not collected or sent.\r\n var _statsCfgUrl;\r\n // Resolved remote config cached per cfg URL (EU / non-EU); tracks in-flight fetch and last result.\r\n // Null-prototype so the config supplied url can never be used to pollute Object.prototype.\r\n var _cfgCache = objCreate(null);\r\n var _endpointCfgCache = objCreate(null);\r\n var _intervalListeners = [];\r\n function _unloadStatsCore() {\r\n var statsCore = _statsCore;\r\n _statsCore = null;\r\n statsCore && statsCore[_DYN_UNLOAD /* @min:%2eunload */](false);\r\n }\r\n function _getStatsCore(endpoint) {\r\n var _a;\r\n if (_statsCore && _statsCore.config[_DYN_ENDPOINT_URL /* @min:%2eendpointUrl */] !== endpoint) {\r\n _unloadStatsCore();\r\n }\r\n if (!_statsCore) {\r\n _statsCore = _createStatsCore((_a = {},\r\n _a[_DYN_INSTRUMENTATION_KEY /* @min:instrumentationKey */] = _statsIKey,\r\n _a.endpointUrl = endpoint,\r\n _a));\r\n }\r\n return _statsCore;\r\n }\r\n // Lazily initialize the manager and start listening for configuration changes\r\n // This is also required to handle \"unloading\" and then re-initializing again\r\n function _init(core, createStatsCore, featureName, useFeature) {\r\n if (_core) {\r\n // If the core is already set, then just return with an empty unload hook\r\n _throwInternal(safeGetLogger(core), 2 /* eLoggingSeverity.WARNING */, 113 /* _eInternalMessageId.InternalSdkStatsManagerException */, \"InternalSdkStats manager is already initialized\");\r\n return null;\r\n }\r\n _core = core;\r\n _createStatsCore = createStatsCore;\r\n _featureName = featureName || STATS_SDK_FEATURE;\r\n _useFeature = useFeature;\r\n // Start listening for configuration changes from the single global config, within a config\r\n // change handler. This supports the scenario where the config is changed after the manager\r\n // has been created (including CDN / dynamic config updates).\r\n var configHook = onConfigChange(core[_DYN_CONFIG /* @min:%2econfig */], function (details) {\r\n var previousInterval = _shortInterval;\r\n var previousCfgUrl = _statsCfgUrl;\r\n var previousIKey = _statsIKey;\r\n // Re-evaluate the feature flag on every config change (enabled by default, opt-out via featureOptIn)\r\n _isMgrEnabled = false;\r\n _statsCfgFetchFn = null;\r\n _statsIKey = null;\r\n _statsCfgUrl = null;\r\n _sampleRate = STATS_SAMPLING_PERCENTAGE;\r\n if (isFeatureEnabled(_featureName, details.cfg, true) === true) {\r\n // Seed the SDK Stats defaults into the single global config so they remain dynamic and\r\n // can be overridden via the CDN / dynamic config or by the SKU.\r\n details[_DYN_SET_DF /* @min:%2esetDf */](details.cfg, _sdkStatsDefaults);\r\n // Read the nested stats config directly (registers the dynamic dependency on the\r\n // stats object) and copy the individual values into local (minifiable) variables\r\n // instead of holding the config object and repeatedly reading its properties.\r\n var statsCfg = details.cfg.stats;\r\n if (statsCfg) {\r\n details[_DYN_SET_DF /* @min:%2esetDf */](statsCfg, _sdkStatsConfigDefaults);\r\n // Make the override fetch fn a dynamic property before snapshotting it so a later\r\n // merged (CDN / updateCfg) change to it re-runs this handler and refreshes the local.\r\n _statsCfgFetchFn = details.set(statsCfg, \"overrideCfgFn\", statsCfg.overrideCfgFn);\r\n _statsIKey = details.set(statsCfg, \"iKey\", statsCfg[_DYN_I_KEY /* @min:%2eiKey */]);\r\n // Same for the config url, it is normally delivered by the CDN configuration after\r\n // initialization has completed, so this handler must re-run when it arrives.\r\n _statsCfgUrl = details.set(statsCfg, \"cfgUrl\", statsCfg.cfgUrl);\r\n var sampleRate = details.set(statsCfg, \"samplingPercentage\", statsCfg.samplingPercentage);\r\n if (isNumber(sampleRate) && sampleRate >= 0 && sampleRate <= 100) {\r\n _sampleRate = sampleRate;\r\n }\r\n _isMgrEnabled = true;\r\n _shortInterval = STATS_COLLECTION_INTERVAL_SECONDS * 1000; // Reset to the default in-case the config is removed / changed\r\n if (isNumber(statsCfg.shrtInt) && statsCfg.shrtInt > 0) {\r\n _shortInterval = statsCfg.shrtInt * 1000; // Convert to milliseconds\r\n }\r\n }\r\n }\r\n if (!_isMgrEnabled || _statsCfgUrl !== previousCfgUrl || _statsIKey !== previousIKey) {\r\n _unloadStatsCore();\r\n }\r\n if (_statsCfgUrl !== previousCfgUrl) {\r\n _endpointCfgCache = objCreate(null);\r\n }\r\n if (_shortInterval !== previousInterval) {\r\n for (var lp = 0; lp < _intervalListeners[_DYN_LENGTH /* @min:%2elength */]; lp++) {\r\n _intervalListeners[lp]();\r\n }\r\n }\r\n });\r\n return {\r\n rm: function () {\r\n configHook.rm();\r\n _unloadStatsCore();\r\n _createStatsCore = null;\r\n _featureName = null;\r\n _useFeature = null;\r\n _core = null;\r\n }\r\n };\r\n }\r\n /**\r\n * Resolve the remote SDK Stats config for the endpoint, starting a fetch on first use. Returns\r\n * null until resolved (or on failure, or when no config url has been configured) so the caller\r\n * skips sending.\r\n */\r\n function _resolveStatsCfg(endpoint) {\r\n var cfgUrl = _endpointCfgCache[endpoint];\r\n if (!cfgUrl) {\r\n cfgUrl = getStatsCfgUrl(endpoint, _statsCfgUrl);\r\n if (cfgUrl) {\r\n _endpointCfgCache[endpoint] = cfgUrl;\r\n }\r\n }\r\n if (!cfgUrl) {\r\n // No configured SDK Stats config url -> nothing to resolve and nothing is sent\r\n return null;\r\n }\r\n var entry = _cfgCache[cfgUrl];\r\n if (!entry) {\r\n entry = _cfgCache[cfgUrl] = { pending: false, result: null };\r\n }\r\n if (!entry.result && !entry[_DYN_PENDING /* @min:%2epending */]) {\r\n entry[_DYN_PENDING /* @min:%2epending */] = true;\r\n var fetchFn = _statsCfgFetchFn || _defaultStatsCfgFetch;\r\n try {\r\n fetchFn(cfgUrl, function (result) {\r\n entry[_DYN_PENDING /* @min:%2epending */] = false;\r\n // null on failure so a later interval retries\r\n entry.result = result;\r\n });\r\n }\r\n catch (e) {\r\n // Reset so a later interval retries\r\n entry[_DYN_PENDING /* @min:%2epending */] = false;\r\n }\r\n }\r\n return entry.result;\r\n }\r\n function _track(internalSdkStats, internalSdkStatsEvent) {\r\n if (_isMgrEnabled) {\r\n if (!_statsIKey) {\r\n return null;\r\n }\r\n // The remote cfg file is the sole authority for whether collection is enabled and where\r\n // to send the events. Re-resolved here (rather than cached on the instance) to support the\r\n // endpoint changing after the instance was created.\r\n var cfgResult = _resolveStatsCfg(internalSdkStats[_DYN_ENDPOINT /* @min:%2eendpoint */]);\r\n if (!cfgResult) {\r\n return null;\r\n }\r\n if (!cfgResult[_DYN_ENABLED /* @min:%2eenabled */]) {\r\n return false;\r\n }\r\n var sampleRate_1 = _sampleRate;\r\n if (!internalSdkStatsEvent && sampleRate_1 > 0) {\r\n // Validate the pipeline before the counters are reset. At 0% no pipeline is required.\r\n var statsCore = _getStatsCore(_buildStatsEndpoint(cfgResult.url));\r\n if (!statsCore) {\r\n return null;\r\n }\r\n }\r\n else if (internalSdkStatsEvent &&\r\n (sampleRate_1 >= 100 || (sampleRate_1 > 0 && mathRandom() * 100 < sampleRate_1))) {\r\n var trackStats = function () {\r\n var currentCfg = _resolveStatsCfg(internalSdkStats[_DYN_ENDPOINT /* @min:%2eendpoint */]);\r\n if (currentCfg && currentCfg[_DYN_ENABLED /* @min:%2eenabled */]) {\r\n var statsCore = _getStatsCore(_buildStatsEndpoint(currentCfg.url));\r\n if (statsCore) {\r\n internalSdkStatsEvent[SampleRate] = sampleRate_1;\r\n statsCore[_DYN_TRACK /* @min:%2etrack */](internalSdkStatsEvent);\r\n }\r\n }\r\n };\r\n if (_useFeature) {\r\n _useFeature(_featureName, trackStats, true);\r\n }\r\n else {\r\n trackStats();\r\n }\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n function _watchInterval(cb) {\r\n _intervalListeners[_DYN_PUSH /* @min:%2epush */](cb);\r\n return function () {\r\n var idx = arrIndexOf(_intervalListeners, cb);\r\n if (idx !== -1) {\r\n _intervalListeners[_DYN_SPLICE /* @min:%2esplice */](idx, 1);\r\n }\r\n };\r\n }\r\n function _createInstance(state) {\r\n var _a;\r\n var instance = null;\r\n if (_isMgrEnabled) {\r\n // Prefetch the remote config so it's ready by the first interval\r\n if (state && state[_DYN_ENDPOINT /* @min:%2eendpoint */]) {\r\n _resolveStatsCfg(state[_DYN_ENDPOINT /* @min:%2eendpoint */]);\r\n }\r\n var callbacks = (_a = {\r\n start: function (cb, delay) {\r\n return scheduleTimeout(cb, delay);\r\n },\r\n interval: function () { return _shortInterval; }\r\n },\r\n _a[_DYN_WATCH_INTERVAL /* @min:watchInterval */] = _watchInterval,\r\n _a.track = _track,\r\n _a);\r\n instance = _createInternalSdkStats(callbacks, state, safeGetLogger(_core));\r\n }\r\n return instance;\r\n }\r\n var theMgr = {\r\n enabled: false,\r\n newInst: _createInstance,\r\n init: _init\r\n };\r\n return objDefineProps(theMgr, {\r\n \"enabled\": { g: function () { return _isMgrEnabled; } }\r\n });\r\n}\r\n/**\r\n * The default {@link IInternalSdkStatsConfig} values for SDK Stats collection. These are seeded into the\r\n * single global config (via {@link IWatchDetails.setDf}) by the manager so they remain dynamic and\r\n * can be overridden at runtime via the CDN / dynamic config or by the SKU (AISKU / 1DS). No config\r\n * url is defaulted, the `stats.cfgUrl` value is expected to be delivered by the CDN / dynamic\r\n * configuration, and until it is, no SDK Stats are collected or sent. The events are routed to the\r\n * distro-owned SDK Stats ingestion endpoint, whose host (and whether collection is enabled) is read\r\n * at runtime from the SDK Stats configuration identified by that url. SDK Stats can also be\r\n * opted-out using the `featureOptIn` configuration with the {@link STATS_SDK_FEATURE} name.\r\n */\r\nvar _sdkStatsDefaults = {\r\n // Seeding a stats object allows the manager to apply its nested defaults; the config url, destination and\r\n // enabled state are all resolved from the dynamic / remote SDK Stats configuration. A plain\r\n // object (rather than cfgDfMerge) is used so setDf seeds and makes the stats property dynamic\r\n // without marking it as a reference (avoiding the in-place reference side effect).\r\n stats: {}\r\n};\r\nvar _sdkStatsConfigDefaults = {\r\n samplingPercentage: STATS_SAMPLING_PERCENTAGE\r\n};\r\n//# sourceMappingURL=InternalSdkStats.js.map"],"names":[],"mappings":";;;;AAA4D;AAC1B;AAClC;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;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;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;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;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;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;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;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
|
|
1
|
+
{"version":3,"file":"InternalSdkStats.js.map","sources":["InternalSdkStats.js"],"sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport { doAwaitResponse } from \"@nevware21/ts-async\";\r\nimport { arrIndexOf, isNumber, isString, mathRandom, objCreate, objDefineProps, objForEachKey, scheduleTimeout, strEndsWith, strLower, strStartsWith, strSubstring, utcNow } from \"@nevware21/ts-utils\";\r\nimport { _DYN_CANCEL, _DYN_CONFIG, _DYN_ENABLED, _DYN_ENDPOINT, _DYN_ENDPOINT_URL, _DYN_EXCEPTION, _DYN_FAILURE, _DYN_HOST, _DYN_INDEX_OF, _DYN_INSTRUMENTATION_KEY, _DYN_INTERVAL, _DYN_I_KEY, _DYN_LENGTH, _DYN_PENDING, _DYN_PUSH, _DYN_REJECTED, _DYN_REPLACE, _DYN_REQUEST_DURATION, _DYN_SET_DF, _DYN_SPLICE, _DYN_STATUS, _DYN_STRINGIFY, _DYN_SUCCESS, _DYN_THROTTLE, _DYN_TOTAL_REQUEST, _DYN_TRACK, _DYN_UNLOAD, _DYN_VALUE, _DYN_WATCH_INTERVAL } from \"../__DynamicConstants\";\r\nimport { onConfigChange } from \"../config/DynamicConfig\";\r\nimport { DEFAULT_BREEZE_PATH, DisabledPropertyName, SampleRate } from \"../constants/Constants\";\r\nimport { STR_EMPTY } from \"../constants/InternalConstants\";\r\nimport { _throwInternal, safeGetLogger } from \"../diagnostics/DiagnosticLogger\";\r\nimport { MetricDataType } from \"../telemetry/ai/DataTypes\";\r\nimport { getJSON, isFetchSupported, isXhrSupported } from \"../utils/EnvUtils\";\r\nimport { getResponseText, isFeatureEnabled, openXhr } from \"../utils/HelperFuncs\";\r\nimport { utlGetSessionStorage, utlSetSessionStorage } from \"../utils/StorageHelperFuncs\";\r\n/** Default collection interval in seconds; override with `stats.shrtInt`. */\r\nvar STATS_COLLECTION_INTERVAL_SECONDS = 3600; // 1 hour\r\nvar STATS_LANGUAGE = \"JavaScript\";\r\nvar STATS_SAMPLING_PERCENTAGE = 100;\r\nvar STATS_TYPE = \"Browser\";\r\n/** Ingestion path for future 1DS (OneCollector) SDK Stats; the AI SKU uses {@link DEFAULT_BREEZE_PATH}. */\r\nexport var STATS_SDK_ONECOLLECTOR_PATH = \"/OneCollector/1.0\";\r\n/**\r\n * The default feature name used to gate the SDK Stats manager. SDK Stats is enabled by default\r\n * and can be opted-out via the featureOptIn configuration using this name.\r\n */\r\nexport var STATS_SDK_FEATURE = \"sdkStats\";\r\n// Prefixes for EU data-boundary regions used by the Azure Monitor OpenTelemetry exporter\r\nvar STATS_EU_REGION_PATTERN = /^(?:[^:]+:\\/\\/)?(?:france|germany|northeurope|norway|sweden|switzerland|uk|westeurope)/i;\r\n/**\r\n * Returns the SDK Stats config URL (`cfg/v1.json`) for the endpoint, derived from the configured\r\n * base url. For EU data-boundary endpoints an `eu-` prefix is inserted in front of\r\n * the host, e.g. `https://data.stats...` => `https://eu-data.stats...`.\r\n * @param endpoint - The customer breeze endpoint that the SDK Stats are being collected for.\r\n * @param cfgUrl - The configured (non-EU) SDK Stats config url, when not supplied null is returned.\r\n * @returns The config url to fetch, or null when no url has been configured.\r\n */\r\nexport function getStatsCfgUrl(endpoint, cfgUrl) {\r\n var result = null;\r\n if (cfgUrl) {\r\n result = cfgUrl;\r\n if (STATS_EU_REGION_PATTERN.test(endpoint)) {\r\n result = cfgUrl[_DYN_REPLACE /* @min:%2ereplace */](/^([^:]+:\\/\\/)?/, \"$1eu-\");\r\n }\r\n }\r\n return result;\r\n}\r\n/** Parse the SDK Stats config JSON (`{ ver, enabled, url }`); null if empty or unparseable. */\r\nfunction _parseStatsCfg(response) {\r\n var result = null;\r\n var json = getJSON();\r\n if (response && json) {\r\n try {\r\n var cfg = json.parse(response);\r\n if (cfg) {\r\n result = {\r\n // Fail-closed: only treat as enabled when explicitly true\r\n enabled: cfg[_DYN_ENABLED /* @min:%2eenabled */] === true,\r\n url: isString(cfg.url) ? cfg.url : null\r\n };\r\n }\r\n }\r\n catch (e) {\r\n // Unparseable -> no config available\r\n }\r\n }\r\n return result;\r\n}\r\n/** Default SDK Stats config fetch (fetch, else XHR); calls oncomplete with the parsed config or null. */\r\nfunction _defaultStatsCfgFetch(cfgUrl, oncomplete) {\r\n function _complete(response) {\r\n try {\r\n oncomplete(response ? _parseStatsCfg(response) : null);\r\n }\r\n catch (e) {\r\n // Ignore callback errors\r\n }\r\n }\r\n try {\r\n if (isFetchSupported()) {\r\n var init = { method: \"GET\" };\r\n init[DisabledPropertyName] = true;\r\n doAwaitResponse(fetch(cfgUrl, init), function (result) {\r\n var response = result[_DYN_VALUE /* @min:%2evalue */];\r\n if (!result[_DYN_REJECTED /* @min:%2erejected */] && response && response.ok) {\r\n doAwaitResponse(response.text(), function (res) {\r\n _complete(res[_DYN_REJECTED /* @min:%2erejected */] ? null : res[_DYN_VALUE /* @min:%2evalue */]);\r\n });\r\n }\r\n else {\r\n _complete();\r\n }\r\n });\r\n }\r\n else if (isXhrSupported()) {\r\n // openXhr marks the request disabled so it isn't self-tracked\r\n var xhr_1 = openXhr(\"GET\", cfgUrl, false, true, false, 10000);\r\n xhr_1.onreadystatechange = function () {\r\n if (xhr_1.readyState === 4) {\r\n _complete(xhr_1[_DYN_STATUS /* @min:%2estatus */] >= 200 && xhr_1[_DYN_STATUS /* @min:%2estatus */] < 400 ? getResponseText(xhr_1) : null);\r\n }\r\n };\r\n xhr_1.onerror = function () {\r\n _complete();\r\n };\r\n xhr_1.ontimeout = function () {\r\n _complete();\r\n };\r\n xhr_1.send();\r\n }\r\n else {\r\n _complete();\r\n }\r\n }\r\n catch (e) {\r\n _complete();\r\n }\r\n}\r\n/** Build the ingestion endpoint from the config host: `https://<host>` + {@link DEFAULT_BREEZE_PATH}. */\r\nfunction _buildStatsEndpoint(host) {\r\n var endpoint = null;\r\n if (host) {\r\n var base = strStartsWith(strLower(host), \"http\") ? host : \"https://\" + host;\r\n if (strEndsWith(base, \"/\")) {\r\n base = strSubstring(base, 0, base[_DYN_LENGTH /* @min:%2elength */] - 1);\r\n }\r\n endpoint = base + DEFAULT_BREEZE_PATH;\r\n }\r\n return endpoint;\r\n}\r\n/**\r\n * Creates a new IInternalSdkStatsNetwork instance with the specified host.\r\n * @param host - The host for the IInternalSdkStatsNetwork instance.\r\n * @returns A new IInternalSdkStatsNetwork instance.\r\n */\r\nfunction _createInternalSdkStatsNetwork(host) {\r\n var _a;\r\n return _a = {\r\n host: host,\r\n totalRequest: 0,\r\n success: 0,\r\n // Untrusted keys must not reach Object.prototype.\r\n throttle: objCreate(null),\r\n failure: objCreate(null),\r\n retry: objCreate(null),\r\n exception: objCreate(null)\r\n },\r\n _a[_DYN_REQUEST_DURATION /* @min:requestDuration */] = 0,\r\n _a;\r\n}\r\n/** Validates persisted counts and restores them to a null-prototype object. */\r\nfunction _reviveCounts(src) {\r\n var result = objCreate(null);\r\n objForEachKey(src, function (key, value) {\r\n value = +value;\r\n if (value > 0) {\r\n result[key] = value;\r\n }\r\n });\r\n return result;\r\n}\r\n/** Restores validated counters from session storage. */\r\nfunction _reviveCounters(host, cnt) {\r\n var counter = _createInternalSdkStatsNetwork(host);\r\n if (cnt) {\r\n counter[_DYN_TOTAL_REQUEST /* @min:%2etotalRequest */] = +cnt[_DYN_TOTAL_REQUEST /* @min:%2etotalRequest */] || 0;\r\n counter[_DYN_SUCCESS /* @min:%2esuccess */] = +cnt[_DYN_SUCCESS /* @min:%2esuccess */] || 0;\r\n counter[_DYN_REQUEST_DURATION /* @min:%2erequestDuration */] = +cnt[_DYN_REQUEST_DURATION /* @min:%2erequestDuration */] || 0;\r\n counter[_DYN_THROTTLE /* @min:%2ethrottle */] = _reviveCounts(cnt[_DYN_THROTTLE /* @min:%2ethrottle */]);\r\n counter[_DYN_FAILURE /* @min:%2efailure */] = _reviveCounts(cnt[_DYN_FAILURE /* @min:%2efailure */]);\r\n counter.retry = _reviveCounts(cnt.retry);\r\n counter[_DYN_EXCEPTION /* @min:%2eexception */] = _reviveCounts(cnt[_DYN_EXCEPTION /* @min:%2eexception */]);\r\n }\r\n return counter;\r\n}\r\nfunction _loadStore(logger, key) {\r\n try {\r\n var json = getJSON();\r\n var raw = json && utlGetSessionStorage(logger, key);\r\n if (raw) {\r\n var parsed = json.parse(raw);\r\n if (parsed[0] >= 0) {\r\n return parsed;\r\n }\r\n }\r\n }\r\n catch (e) {\r\n // Start a new window.\r\n }\r\n return null;\r\n}\r\nfunction _saveStore(logger, key, store) {\r\n try {\r\n var json = getJSON();\r\n if (json) {\r\n utlSetSessionStorage(logger, key, json[_DYN_STRINGIFY /* @min:%2estringify */](store));\r\n }\r\n }\r\n catch (e) {\r\n // Persistence is best-effort; serialization can fail when built-in prototypes are modified.\r\n }\r\n}\r\n/**\r\n * Creates a new IInternalSdkStats instance with the specified manager callbacks and internalSdkStats state.\r\n * @param mgr - The manager callbacks to use for the IInternalSdkStats instance.\r\n * @param internalSdkStatsStats - The internalSdkStats state to use for the IInternalSdkStats instance.\r\n * @returns A new IInternalSdkStats instance.\r\n */\r\nfunction _createInternalSdkStats(mgr, internalSdkStatsStats, logger) {\r\n // Isolate counters by customer key and endpoint.\r\n var _storeKey = (internalSdkStatsStats.cKey || STR_EMPTY) + \":\" + internalSdkStatsStats[_DYN_ENDPOINT /* @min:%2eendpoint */];\r\n var _store = _loadStore(logger, _storeKey);\r\n // Start a new window only when the first value is recorded.\r\n var _windowStart = _store ? _store[0] : -1;\r\n var _networkCounter = _reviveCounters(internalSdkStatsStats[_DYN_ENDPOINT /* @min:%2eendpoint */], _store && _store[1]);\r\n var _timeoutHandle; // Handle to the timer for sending telemetry. This way, we would not send telemetry when system sleep.\r\n var _isEnabled = true; // Flag to check if internalSdkStats is enabled or not\r\n var _removeIntervalListener;\r\n function _startWindow() {\r\n if (_windowStart < 0) {\r\n _windowStart = utcNow();\r\n }\r\n }\r\n function _persist() {\r\n _saveStore(logger, _storeKey, [_windowStart, _networkCounter]);\r\n }\r\n /** Returns the remaining time in the current window. */\r\n function _remaining() {\r\n var interval = mgr[_DYN_INTERVAL /* @min:%2einterval */]();\r\n var elapsed = utcNow() - _windowStart;\r\n var remaining = interval;\r\n if (elapsed >= 0) {\r\n remaining = interval - elapsed;\r\n }\r\n return remaining > 0 ? remaining : 0;\r\n }\r\n function _setupTimer() {\r\n if (_isEnabled && _windowStart >= 0 && !_timeoutHandle) {\r\n _timeoutHandle = mgr.start(function () {\r\n _timeoutHandle = null;\r\n trackInternalSdkStats();\r\n }, _remaining());\r\n }\r\n }\r\n function trackInternalSdkStats() {\r\n if (_isEnabled) {\r\n var ready = mgr[_DYN_TRACK /* @min:%2etrack */](internalSdkStats);\r\n if (ready !== null) {\r\n if (ready) {\r\n _trackSendRequestDuration();\r\n _trackSendRequestsCount();\r\n }\r\n _networkCounter = _createInternalSdkStatsNetwork(_networkCounter[_DYN_HOST /* @min:%2ehost */]);\r\n // Persist the reset state; restart the window on the next value.\r\n _windowStart = -1;\r\n _persist();\r\n }\r\n else {\r\n // Keep the counters and retry during the next interval.\r\n _windowStart = utcNow();\r\n _persist();\r\n _setupTimer();\r\n }\r\n }\r\n }\r\n /**\r\n * This is a simple helper that checks if the currently reporting endpoint is the same as this instance was\r\n * created with. This is used to ensure that we only send internalSdkStats events to the endpoint that was used\r\n * when the instance was created. This is important as the endpoint can change during the lifetime of the\r\n * instance and we don't want to send internalSdkStats events to the wrong endpoint.\r\n * @param endpoint\r\n * @returns true if the endpoint is the same as the one used to create the instance, false otherwise\r\n */\r\n function _checkEndpoint(endpoint) {\r\n return _networkCounter[_DYN_HOST /* @min:%2ehost */] === endpoint;\r\n }\r\n function _inc(counter, key) {\r\n counter[key] = (counter[key] || 0) + 1;\r\n }\r\n /**\r\n * Attempt to send internalSdkStats events to the server. This is done by creating a new event and sending it to the core.\r\n * The event is created with the name and value passed in, and any additional properties are added to the event as well.\r\n * This will only send the event when\r\n * - the internalSdkStats is enabled\r\n * - the internalSdkStats key is set for the current endpoint\r\n * - the value is greater than 0\r\n * @param name - The name of the event to send\r\n * @param val - The value of the event to send\r\n * @param properties - Optional additional properties to add to the event\r\n */\r\n function _sendInternalSdkStatss(name, val, properties) {\r\n if (_isEnabled && val && val > 0) {\r\n // Add extra properties\r\n var baseProperties = {\r\n \"rp\": \"unknown\",\r\n \"attach\": \"Manual\",\r\n \"cikey\": internalSdkStatsStats.cKey,\r\n \"os\": STATS_TYPE,\r\n \"language\": STATS_LANGUAGE,\r\n \"version\": internalSdkStatsStats.sdkVer || \"unknown\",\r\n \"endpoint\": \"breeze\",\r\n \"host\": _networkCounter[_DYN_HOST /* @min:%2ehost */]\r\n };\r\n var combinedProps_1 = {};\r\n objForEachKey(properties, function (key, value) {\r\n combinedProps_1[key] = value;\r\n });\r\n objForEachKey(baseProperties, function (key, value) {\r\n combinedProps_1[key] = value;\r\n });\r\n var internalSdkStatsEvent = {\r\n name: name,\r\n baseData: {\r\n name: name,\r\n average: val,\r\n properties: combinedProps_1\r\n },\r\n baseType: MetricDataType\r\n };\r\n // The destination iKey and (optional) SDK Stats ingestion endpoint are resolved and\r\n // stamped by the manager (see _track) based on the current (dynamic) configuration.\r\n mgr[_DYN_TRACK /* @min:%2etrack */](internalSdkStats, internalSdkStatsEvent);\r\n }\r\n }\r\n function _trackSendRequestDuration() {\r\n var totalRequest = _networkCounter[_DYN_TOTAL_REQUEST /* @min:%2etotalRequest */];\r\n if (totalRequest > 0) {\r\n _sendInternalSdkStatss(\"Request_Duration\", _networkCounter[_DYN_REQUEST_DURATION /* @min:%2erequestDuration */] / totalRequest);\r\n }\r\n }\r\n function _sendCounts(counts, name, codeKey) {\r\n for (var code in counts) {\r\n var props = {};\r\n props[codeKey] = code;\r\n _sendInternalSdkStatss(name, counts[code], props);\r\n }\r\n }\r\n function _trackSendRequestsCount() {\r\n var currentCounter = _networkCounter;\r\n _sendInternalSdkStatss(\"Request_Success_Count\", currentCounter[_DYN_SUCCESS /* @min:%2esuccess */]);\r\n _sendCounts(currentCounter[_DYN_FAILURE /* @min:%2efailure */], \"Request_Failure_Count\", \"statusCode\");\r\n _sendCounts(currentCounter.retry, \"Retry_Count\", \"statusCode\");\r\n _sendCounts(currentCounter[_DYN_EXCEPTION /* @min:%2eexception */], \"Exception_Count\", \"exceptionType\");\r\n _sendCounts(currentCounter[_DYN_THROTTLE /* @min:%2ethrottle */], \"Throttle_Count\", \"statusCode\");\r\n }\r\n function _setEnabled(isEnabled) {\r\n _isEnabled = isEnabled;\r\n if (!_isEnabled) {\r\n if (_timeoutHandle) {\r\n _timeoutHandle[_DYN_CANCEL /* @min:%2ecancel */]();\r\n _timeoutHandle = null;\r\n }\r\n if (_removeIntervalListener) {\r\n _removeIntervalListener();\r\n _removeIntervalListener = null;\r\n }\r\n }\r\n }\r\n _removeIntervalListener = mgr[_DYN_WATCH_INTERVAL /* @min:%2ewatchInterval */](function () {\r\n if (_timeoutHandle) {\r\n _timeoutHandle[_DYN_CANCEL /* @min:%2ecancel */]();\r\n _timeoutHandle = null;\r\n }\r\n _setupTimer();\r\n });\r\n // THE internalSdkStats instance being created and returned\r\n var internalSdkStats = {\r\n enabled: !!_isEnabled,\r\n endpoint: STR_EMPTY,\r\n count: function (status, payloadData, endpoint) {\r\n if (_isEnabled && _checkEndpoint(endpoint)) {\r\n var statsData = payloadData && payloadData[\"statsData\"];\r\n var startTime = statsData && statsData[\"startTime\"];\r\n if (startTime) {\r\n _networkCounter[_DYN_TOTAL_REQUEST /* @min:%2etotalRequest */]++;\r\n _networkCounter[_DYN_REQUEST_DURATION /* @min:%2erequestDuration */] += utcNow() - startTime;\r\n }\r\n var retryArray = [401, 403, 408, 429, 500, 502, 503, 504];\r\n var throttleArray = [402, 439];\r\n if (status >= 200 && status < 300) {\r\n _networkCounter[_DYN_SUCCESS /* @min:%2esuccess */]++;\r\n }\r\n else if (retryArray[_DYN_INDEX_OF /* @min:%2eindexOf */](status) !== -1) {\r\n _inc(_networkCounter.retry, status);\r\n }\r\n else if (throttleArray[_DYN_INDEX_OF /* @min:%2eindexOf */](status) !== -1) {\r\n _inc(_networkCounter[_DYN_THROTTLE /* @min:%2ethrottle */], status);\r\n }\r\n else if (status !== 307 && status !== 308) {\r\n _inc(_networkCounter[_DYN_FAILURE /* @min:%2efailure */], status);\r\n }\r\n // Persist in case the page unloads before the interval ends.\r\n _startWindow();\r\n _persist();\r\n _setupTimer();\r\n }\r\n },\r\n countException: function (endpoint, exceptionType) {\r\n if (_isEnabled && _checkEndpoint(endpoint)) {\r\n _inc(_networkCounter[_DYN_EXCEPTION /* @min:%2eexception */], exceptionType);\r\n _startWindow();\r\n _persist();\r\n _setupTimer();\r\n }\r\n }\r\n };\r\n // Make the properties readonly / reactive to changes\r\n return objDefineProps(internalSdkStats, {\r\n enabled: { g: function () { return _isEnabled; }, s: _setEnabled },\r\n endpoint: { g: function () { return _networkCounter[_DYN_HOST /* @min:%2ehost */]; } }\r\n });\r\n}\r\nexport function createStatsMgr() {\r\n var _isMgrEnabled = false; // Flag to check if internalSdkStats is enabled or not\r\n var _core; // The customer core observed for configuration and endpoint changes\r\n var _createStatsCore;\r\n var _featureName;\r\n var _statsCore;\r\n var _useFeature;\r\n var _sampleRate = STATS_SAMPLING_PERCENTAGE;\r\n var _shortInterval = STATS_COLLECTION_INTERVAL_SECONDS * 1000;\r\n var _statsCfgFetchFn;\r\n var _statsIKey;\r\n // The configured SDK Stats config url (cfg/v1.json), sourced from the dynamic config. When it is\r\n // not supplied (no CDN / host configuration) SDK Stats are not collected or sent.\r\n var _statsCfgUrl;\r\n // Resolved remote config cached per cfg URL (EU / non-EU); tracks in-flight fetch and last result.\r\n // Null-prototype so the config supplied url can never be used to pollute Object.prototype.\r\n var _cfgCache = objCreate(null);\r\n var _endpointCfgCache = objCreate(null);\r\n var _intervalListeners = [];\r\n function _unloadStatsCore() {\r\n var statsCore = _statsCore;\r\n _statsCore = null;\r\n statsCore && statsCore[_DYN_UNLOAD /* @min:%2eunload */](false);\r\n }\r\n function _getStatsCore(endpoint) {\r\n var _a;\r\n if (_statsCore && _statsCore.config[_DYN_ENDPOINT_URL /* @min:%2eendpointUrl */] !== endpoint) {\r\n _unloadStatsCore();\r\n }\r\n if (!_statsCore) {\r\n _statsCore = _createStatsCore((_a = {},\r\n _a[_DYN_INSTRUMENTATION_KEY /* @min:instrumentationKey */] = _statsIKey,\r\n _a.endpointUrl = endpoint,\r\n _a));\r\n }\r\n return _statsCore;\r\n }\r\n // Lazily initialize the manager and start listening for configuration changes\r\n // This is also required to handle \"unloading\" and then re-initializing again\r\n function _init(core, createStatsCore, featureName, useFeature) {\r\n if (_core) {\r\n // If the core is already set, then just return with an empty unload hook\r\n _throwInternal(safeGetLogger(core), 2 /* eLoggingSeverity.WARNING */, 113 /* _eInternalMessageId.InternalSdkStatsManagerException */, \"InternalSdkStats manager is already initialized\");\r\n return null;\r\n }\r\n _core = core;\r\n _createStatsCore = createStatsCore;\r\n _featureName = featureName || STATS_SDK_FEATURE;\r\n _useFeature = useFeature;\r\n // Start listening for configuration changes from the single global config, within a config\r\n // change handler. This supports the scenario where the config is changed after the manager\r\n // has been created (including CDN / dynamic config updates).\r\n var configHook = onConfigChange(core[_DYN_CONFIG /* @min:%2econfig */], function (details) {\r\n var previousInterval = _shortInterval;\r\n var previousCfgUrl = _statsCfgUrl;\r\n var previousIKey = _statsIKey;\r\n // Re-evaluate the feature flag on every config change (enabled by default, opt-out via featureOptIn)\r\n _isMgrEnabled = false;\r\n _statsCfgFetchFn = null;\r\n _statsIKey = null;\r\n _statsCfgUrl = null;\r\n _sampleRate = STATS_SAMPLING_PERCENTAGE;\r\n if (isFeatureEnabled(_featureName, details.cfg, true) === true) {\r\n // Seed the SDK Stats defaults into the single global config so they remain dynamic and\r\n // can be overridden via the CDN / dynamic config or by the SKU.\r\n details[_DYN_SET_DF /* @min:%2esetDf */](details.cfg, _sdkStatsDefaults);\r\n // Read the nested stats config directly (registers the dynamic dependency on the\r\n // stats object) and copy the individual values into local (minifiable) variables\r\n // instead of holding the config object and repeatedly reading its properties.\r\n var statsCfg = details.cfg.stats;\r\n if (statsCfg) {\r\n details[_DYN_SET_DF /* @min:%2esetDf */](statsCfg, _sdkStatsConfigDefaults);\r\n // Make the override fetch fn a dynamic property before snapshotting it so a later\r\n // merged (CDN / updateCfg) change to it re-runs this handler and refreshes the local.\r\n _statsCfgFetchFn = details.set(statsCfg, \"overrideCfgFn\", statsCfg.overrideCfgFn);\r\n _statsIKey = details.set(statsCfg, \"iKey\", statsCfg[_DYN_I_KEY /* @min:%2eiKey */]);\r\n // Same for the config url, it is normally delivered by the CDN configuration after\r\n // initialization has completed, so this handler must re-run when it arrives.\r\n _statsCfgUrl = details.set(statsCfg, \"cfgUrl\", statsCfg.cfgUrl);\r\n var sampleRate = details.set(statsCfg, \"samplingPercentage\", statsCfg.samplingPercentage);\r\n if (isNumber(sampleRate) && sampleRate >= 0 && sampleRate <= 100) {\r\n _sampleRate = sampleRate;\r\n }\r\n _isMgrEnabled = true;\r\n _shortInterval = STATS_COLLECTION_INTERVAL_SECONDS * 1000; // Reset to the default in-case the config is removed / changed\r\n if (isNumber(statsCfg.shrtInt) && statsCfg.shrtInt > 0) {\r\n _shortInterval = statsCfg.shrtInt * 1000; // Convert to milliseconds\r\n }\r\n }\r\n }\r\n if (!_isMgrEnabled || _statsCfgUrl !== previousCfgUrl || _statsIKey !== previousIKey) {\r\n _unloadStatsCore();\r\n }\r\n if (_statsCfgUrl !== previousCfgUrl) {\r\n _endpointCfgCache = objCreate(null);\r\n }\r\n if (_shortInterval !== previousInterval) {\r\n for (var lp = 0; lp < _intervalListeners[_DYN_LENGTH /* @min:%2elength */]; lp++) {\r\n _intervalListeners[lp]();\r\n }\r\n }\r\n });\r\n return {\r\n rm: function () {\r\n configHook.rm();\r\n _unloadStatsCore();\r\n _createStatsCore = null;\r\n _featureName = null;\r\n _useFeature = null;\r\n _core = null;\r\n }\r\n };\r\n }\r\n /**\r\n * Resolve the remote SDK Stats config for the endpoint, starting a fetch on first use. Returns\r\n * null until resolved (or on failure, or when no config url has been configured) so the caller\r\n * skips sending.\r\n */\r\n function _resolveStatsCfg(endpoint) {\r\n var cfgUrl = _endpointCfgCache[endpoint];\r\n if (!cfgUrl) {\r\n cfgUrl = getStatsCfgUrl(endpoint, _statsCfgUrl);\r\n if (cfgUrl) {\r\n _endpointCfgCache[endpoint] = cfgUrl;\r\n }\r\n }\r\n if (!cfgUrl) {\r\n // No configured SDK Stats config url -> nothing to resolve and nothing is sent\r\n return null;\r\n }\r\n var entry = _cfgCache[cfgUrl];\r\n if (!entry) {\r\n entry = _cfgCache[cfgUrl] = { pending: false, result: null };\r\n }\r\n if (!entry.result && !entry[_DYN_PENDING /* @min:%2epending */]) {\r\n entry[_DYN_PENDING /* @min:%2epending */] = true;\r\n var fetchFn = _statsCfgFetchFn || _defaultStatsCfgFetch;\r\n try {\r\n fetchFn(cfgUrl, function (result) {\r\n entry[_DYN_PENDING /* @min:%2epending */] = false;\r\n // null on failure so a later interval retries\r\n entry.result = result;\r\n });\r\n }\r\n catch (e) {\r\n // Reset so a later interval retries\r\n entry[_DYN_PENDING /* @min:%2epending */] = false;\r\n }\r\n }\r\n return entry.result;\r\n }\r\n function _track(internalSdkStats, internalSdkStatsEvent) {\r\n if (_isMgrEnabled) {\r\n if (!_statsIKey) {\r\n return null;\r\n }\r\n // The remote cfg file is the sole authority for whether collection is enabled and where\r\n // to send the events. Re-resolved here (rather than cached on the instance) to support the\r\n // endpoint changing after the instance was created.\r\n var cfgResult = _resolveStatsCfg(internalSdkStats[_DYN_ENDPOINT /* @min:%2eendpoint */]);\r\n if (!cfgResult) {\r\n return null;\r\n }\r\n if (!cfgResult[_DYN_ENABLED /* @min:%2eenabled */]) {\r\n return false;\r\n }\r\n var sampleRate_1 = _sampleRate;\r\n if (!internalSdkStatsEvent && sampleRate_1 > 0) {\r\n // Validate the pipeline before the counters are reset. At 0% no pipeline is required.\r\n var statsCore = _getStatsCore(_buildStatsEndpoint(cfgResult.url));\r\n if (!statsCore) {\r\n return null;\r\n }\r\n }\r\n else if (internalSdkStatsEvent &&\r\n (sampleRate_1 >= 100 || (sampleRate_1 > 0 && mathRandom() * 100 < sampleRate_1))) {\r\n var trackStats = function () {\r\n var currentCfg = _resolveStatsCfg(internalSdkStats[_DYN_ENDPOINT /* @min:%2eendpoint */]);\r\n if (currentCfg && currentCfg[_DYN_ENABLED /* @min:%2eenabled */]) {\r\n var statsCore = _getStatsCore(_buildStatsEndpoint(currentCfg.url));\r\n if (statsCore) {\r\n internalSdkStatsEvent[SampleRate] = sampleRate_1;\r\n statsCore[_DYN_TRACK /* @min:%2etrack */](internalSdkStatsEvent);\r\n }\r\n }\r\n };\r\n if (_useFeature) {\r\n _useFeature(_featureName, trackStats, true);\r\n }\r\n else {\r\n trackStats();\r\n }\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n function _watchInterval(cb) {\r\n _intervalListeners[_DYN_PUSH /* @min:%2epush */](cb);\r\n return function () {\r\n var idx = arrIndexOf(_intervalListeners, cb);\r\n if (idx !== -1) {\r\n _intervalListeners[_DYN_SPLICE /* @min:%2esplice */](idx, 1);\r\n }\r\n };\r\n }\r\n function _createInstance(state) {\r\n var _a;\r\n var instance = null;\r\n if (_isMgrEnabled) {\r\n // Prefetch the remote config so it's ready by the first interval\r\n if (state && state[_DYN_ENDPOINT /* @min:%2eendpoint */]) {\r\n _resolveStatsCfg(state[_DYN_ENDPOINT /* @min:%2eendpoint */]);\r\n }\r\n var callbacks = (_a = {\r\n start: function (cb, delay) {\r\n return scheduleTimeout(cb, delay);\r\n },\r\n interval: function () { return _shortInterval; }\r\n },\r\n _a[_DYN_WATCH_INTERVAL /* @min:watchInterval */] = _watchInterval,\r\n _a.track = _track,\r\n _a);\r\n instance = _createInternalSdkStats(callbacks, state, safeGetLogger(_core));\r\n }\r\n return instance;\r\n }\r\n var theMgr = {\r\n enabled: false,\r\n newInst: _createInstance,\r\n init: _init\r\n };\r\n return objDefineProps(theMgr, {\r\n \"enabled\": { g: function () { return _isMgrEnabled; } }\r\n });\r\n}\r\n/**\r\n * The default {@link IInternalSdkStatsConfig} values for SDK Stats collection. These are seeded into the\r\n * single global config (via {@link IWatchDetails.setDf}) by the manager so they remain dynamic and\r\n * can be overridden at runtime via the CDN / dynamic config or by the SKU (AISKU / 1DS). No config\r\n * url is defaulted, the `stats.cfgUrl` value is expected to be delivered by the CDN / dynamic\r\n * configuration, and until it is, no SDK Stats are collected or sent. The events are routed to the\r\n * distro-owned SDK Stats ingestion endpoint, whose host (and whether collection is enabled) is read\r\n * at runtime from the SDK Stats configuration identified by that url. SDK Stats can also be\r\n * opted-out using the `featureOptIn` configuration with the {@link STATS_SDK_FEATURE} name.\r\n */\r\nvar _sdkStatsDefaults = {\r\n // Seeding a stats object allows the manager to apply its nested defaults; the config url, destination and\r\n // enabled state are all resolved from the dynamic / remote SDK Stats configuration. A plain\r\n // object (rather than cfgDfMerge) is used so setDf seeds and makes the stats property dynamic\r\n // without marking it as a reference (avoiding the in-place reference side effect).\r\n stats: {}\r\n};\r\nvar _sdkStatsConfigDefaults = {\r\n samplingPercentage: STATS_SAMPLING_PERCENTAGE\r\n};\r\n//# sourceMappingURL=InternalSdkStats.js.map"],"names":[],"mappings":";;;;AAA4D;AAC1B;AAClC;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;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;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;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;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;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;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;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Application Insights JavaScript SDK - Core, 3.4.5
|
|
2
|
+
* Application Insights JavaScript SDK - Core, 3.4.5
|
|
3
3
|
* Copyright (c) Microsoft and contributors. All rights reserved.
|
|
4
4
|
*/
|
|
5
5
|
import { __extendsFn as __extends } from "@microsoft/applicationinsights-shims";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Application Insights JavaScript SDK - Core, 3.4.5
|
|
2
|
+
* Application Insights JavaScript SDK - Core, 3.4.5
|
|
3
3
|
* Copyright (c) Microsoft and contributors. All rights reserved.
|
|
4
4
|
*/
|
|
5
5
|
import { arrForEach, arrIncludes, arrIndexOf, getLength, isNullOrUndefined, isString, objForEachKey } from "@nevware21/ts-utils";
|