@microsoft/applicationinsights-core-js 3.4.0-nightlybeta3.2602-27 → 3.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/browser/es5/applicationinsights-core-js.cjs.js +997 -114
- 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 +999 -116
- 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 +999 -116
- 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 +997 -114
- 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 +44 -27
- package/dist-es5/__DynamicConstants.js.map +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 +4 -1
- package/dist-es5/constants/InternalConstants.js.map +1 -1
- package/dist-es5/core/AggregationError.js +1 -1
- package/dist-es5/core/AppInsightsCore.js +13 -13
- package/dist-es5/core/AppInsightsCore.js.map +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/NotificationManager.js +1 -1
- package/dist-es5/core/PerfManager.js +1 -1
- package/dist-es5/core/ProcessTelemetryContext.js +3 -3
- package/dist-es5/core/ProcessTelemetryContext.js.map +1 -1
- package/dist-es5/core/ResponseHelpers.js +1 -1
- package/dist-es5/core/SenderPostManager.js +1 -1
- package/dist-es5/core/StatsBeat.js +9 -9
- package/dist-es5/core/StatsBeat.js.map +1 -1
- package/dist-es5/core/TelemetryHelpers.js +3 -3
- package/dist-es5/core/TelemetryHelpers.js.map +1 -1
- package/dist-es5/core/TelemetryInitializerPlugin.js +1 -1
- package/dist-es5/core/UnloadHandlerContainer.js +1 -1
- package/dist-es5/core/UnloadHookContainer.js +3 -3
- package/dist-es5/core/UnloadHookContainer.js.map +1 -1
- package/dist-es5/diagnostics/DiagnosticLogger.js +3 -3
- package/dist-es5/diagnostics/DiagnosticLogger.js.map +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/StatsType.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 +36 -0
- package/dist-es5/enums/ai/UrlRedactionOptions.js.map +1 -0
- package/dist-es5/enums/ext/Enums.js +78 -0
- package/dist-es5/enums/ext/Enums.js.map +1 -0
- 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 +98 -0
- package/dist-es5/ext/AppInsightsExtCore.js.map +1 -0
- package/dist-es5/ext/ValueSanitizer.js +260 -0
- package/dist-es5/ext/ValueSanitizer.js.map +1 -0
- package/dist-es5/ext/extSpanUtils.js +312 -0
- package/dist-es5/ext/extSpanUtils.js.map +1 -0
- package/dist-es5/ext/extUtils.js +412 -0
- package/dist-es5/ext/extUtils.js.map +1 -0
- package/dist-es5/index.js +14 -1
- package/dist-es5/index.js.map +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/IMetricTelemetry.js +1 -1
- package/dist-es5/interfaces/ai/INetworkStatsbeat.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/IStatsBeat.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 +6 -0
- package/dist-es5/interfaces/ext/DataModels.js.map +1 -0
- 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 +5 -5
- package/dist-es5/internal/EventHelpers.js.map +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 +4 -4
- package/dist-es5/otel/api/trace/span.js.map +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 +3 -3
- package/dist-es5/otel/api/trace/traceProvider.js.map +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 +3 -2
- package/dist-es5/telemetry/ai/Common/Data.js.map +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 +16 -5
- package/dist-es5/utils/EnvUtils.js.map +1 -1
- package/dist-es5/utils/HelperFuncs.js +4 -4
- package/dist-es5/utils/HelperFuncs.js.map +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 +5 -5
- package/dist-es5/utils/TraceParent.js.map +1 -1
- package/dist-es5/utils/UrlHelperFuncs.js +1 -1
- package/dist-es5/utils/Util.js +4 -4
- package/dist-es5/utils/Util.js.map +1 -1
- package/package.json +75 -78
- package/types/applicationinsights-core-js.d.ts +830 -11
- package/types/applicationinsights-core-js.namespaced.d.ts +829 -10
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Application Insights JavaScript SDK - Core, 3.4.1
|
|
3
|
+
* Copyright (c) Microsoft and contributors. All rights reserved.
|
|
4
|
+
*/
|
|
5
|
+
import { arrForEach, arrIncludes, arrIndexOf, getLength, isNullOrUndefined, isString, objForEachKey } from "@nevware21/ts-utils";
|
|
6
|
+
import { _DYN_CALL, _DYN_CAN_HANDLE, _DYN_HANDLER, _DYN_HANDLE_FIELD, _DYN_KIND, _DYN_LENGTH, _DYN_PUSH, _DYN_RM_FIELD_SANITIZER, _DYN_RM_SANITIZER, _DYN_SPLICE, _DYN_STRINGIFY, _DYN_TO_STRING, _DYN_VALUE } from "../__DynamicConstants";
|
|
7
|
+
import { STR_EMPTY } from "../constants/InternalConstants";
|
|
8
|
+
import { getFieldValueType, isValueAssigned, isValueKind } from "./extUtils";
|
|
9
|
+
function _isSpecialName(name) {
|
|
10
|
+
return (name == "__proto__" || name == "constructor" || name == "prototype");
|
|
11
|
+
}
|
|
12
|
+
var ValueSanitizer = /** @class */ (function () {
|
|
13
|
+
function ValueSanitizer(fieldSanitizerProvider) {
|
|
14
|
+
var _self = this;
|
|
15
|
+
// To aid with performance this is a lookup map to check if the field value sanitizer supports this field
|
|
16
|
+
var _sanitizerMap = {};
|
|
17
|
+
var _sanitizers = [];
|
|
18
|
+
var _fieldSanitizers = [];
|
|
19
|
+
if (fieldSanitizerProvider) {
|
|
20
|
+
_fieldSanitizers[_DYN_PUSH /* @min:%2epush */](fieldSanitizerProvider);
|
|
21
|
+
}
|
|
22
|
+
function _getFieldSanitizer(path, name) {
|
|
23
|
+
var result;
|
|
24
|
+
var fieldLookup = _sanitizerMap[path];
|
|
25
|
+
if (fieldLookup) {
|
|
26
|
+
result = fieldLookup[name];
|
|
27
|
+
}
|
|
28
|
+
if (!result && result !== null) {
|
|
29
|
+
// Null is a valid result indicating that the value sanitizer does not support this field
|
|
30
|
+
if (isString(path) && isString(name)) {
|
|
31
|
+
if (_fieldSanitizers[_DYN_LENGTH /* @min:%2elength */] > 0) {
|
|
32
|
+
for (var lp = 0; lp < _fieldSanitizers[_DYN_LENGTH /* @min:%2elength */]; lp++) {
|
|
33
|
+
if (_fieldSanitizers[lp][_DYN_HANDLE_FIELD /* @min:%2ehandleField */](path, name)) {
|
|
34
|
+
result = {
|
|
35
|
+
canHandle: true,
|
|
36
|
+
fieldHandler: _fieldSanitizers[lp]
|
|
37
|
+
};
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
else if (_sanitizers[_DYN_LENGTH /* @min:%2elength */] === 0) {
|
|
43
|
+
// Special use-case where there is no sanitizer to pass on to, so just resolving the field
|
|
44
|
+
// and returning the resulting value (same as sanitizeProperty())
|
|
45
|
+
result = {
|
|
46
|
+
canHandle: true
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// We still don't have a handler so lets lookup the providers
|
|
51
|
+
if (!result && result !== null) {
|
|
52
|
+
// Setting the result to null -- which means we and any contained sanitizers can't handle this field
|
|
53
|
+
result = null;
|
|
54
|
+
for (var lp = 0; lp < _sanitizers[_DYN_LENGTH /* @min:%2elength */]; lp++) {
|
|
55
|
+
if (_sanitizers[lp][_DYN_HANDLE_FIELD /* @min:%2ehandleField */](path, name)) {
|
|
56
|
+
result = {
|
|
57
|
+
canHandle: true,
|
|
58
|
+
handler: _sanitizers[lp],
|
|
59
|
+
fieldHandler: null
|
|
60
|
+
};
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (!fieldLookup) {
|
|
66
|
+
// Handle edge case to avoid prototype pollution
|
|
67
|
+
if (_isSpecialName(path)) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
fieldLookup = _sanitizerMap[path] = {};
|
|
71
|
+
}
|
|
72
|
+
// Handle edge case to avoid prototype pollution
|
|
73
|
+
if (_isSpecialName(name)) {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
fieldLookup[name] = result;
|
|
77
|
+
}
|
|
78
|
+
return result;
|
|
79
|
+
}
|
|
80
|
+
_self.clearCache = function () {
|
|
81
|
+
_sanitizerMap = {};
|
|
82
|
+
};
|
|
83
|
+
_self.addSanitizer = function (newSanitizer) {
|
|
84
|
+
if (newSanitizer) {
|
|
85
|
+
if (!arrIncludes(_sanitizers, newSanitizer)) {
|
|
86
|
+
_sanitizers[_DYN_PUSH /* @min:%2epush */](newSanitizer);
|
|
87
|
+
}
|
|
88
|
+
// Invalidate any previously mapped fields
|
|
89
|
+
_sanitizerMap = {};
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
_self.addFieldSanitizer = function (fieldSanitizer) {
|
|
93
|
+
if (fieldSanitizer) {
|
|
94
|
+
if (!arrIncludes(_fieldSanitizers, fieldSanitizer)) {
|
|
95
|
+
_fieldSanitizers[_DYN_PUSH /* @min:%2epush */](fieldSanitizer);
|
|
96
|
+
}
|
|
97
|
+
// Invalidate any previously mapped fields
|
|
98
|
+
_sanitizerMap = {};
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
_self[_DYN_RM_SANITIZER /* @min:%2ermSanitizer */] = function (theSanitizer) {
|
|
102
|
+
if (theSanitizer) {
|
|
103
|
+
var idx = arrIndexOf(_sanitizers, theSanitizer);
|
|
104
|
+
if (idx !== -1) {
|
|
105
|
+
_sanitizers[_DYN_SPLICE /* @min:%2esplice */](idx, 1);
|
|
106
|
+
// Invalidate any previously mapped fields
|
|
107
|
+
_sanitizerMap = {};
|
|
108
|
+
}
|
|
109
|
+
// Try and remove the sanitizer from any chained sanitizer as well
|
|
110
|
+
arrForEach(_sanitizers, function (sanitizer) {
|
|
111
|
+
sanitizer && sanitizer[_DYN_RM_SANITIZER /* @min:%2ermSanitizer */] && sanitizer[_DYN_RM_SANITIZER /* @min:%2ermSanitizer */](theSanitizer);
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
_self[_DYN_RM_FIELD_SANITIZER /* @min:%2ermFieldSanitizer */] = function (theFieldSanitizer) {
|
|
116
|
+
if (theFieldSanitizer) {
|
|
117
|
+
var idx = arrIndexOf(_fieldSanitizers, theFieldSanitizer);
|
|
118
|
+
if (idx !== -1) {
|
|
119
|
+
_fieldSanitizers[_DYN_SPLICE /* @min:%2esplice */](idx, 1);
|
|
120
|
+
// Invalidate any previously mapped fields
|
|
121
|
+
_sanitizerMap = {};
|
|
122
|
+
}
|
|
123
|
+
// Try and remove the field sanitizer from any chained sanitizer as well
|
|
124
|
+
arrForEach(_sanitizers, function (sanitizer) {
|
|
125
|
+
sanitizer && sanitizer[_DYN_RM_FIELD_SANITIZER /* @min:%2ermFieldSanitizer */] && sanitizer[_DYN_RM_FIELD_SANITIZER /* @min:%2ermFieldSanitizer */](theFieldSanitizer);
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
_self.isEmpty = function () {
|
|
130
|
+
return (getLength(_sanitizers) + getLength(_fieldSanitizers)) === 0;
|
|
131
|
+
};
|
|
132
|
+
_self[_DYN_HANDLE_FIELD /* @min:%2ehandleField */] = function (path, name) {
|
|
133
|
+
var mapValue = _getFieldSanitizer(path, name);
|
|
134
|
+
return mapValue ? mapValue[_DYN_CAN_HANDLE /* @min:%2ecanHandle */] : false;
|
|
135
|
+
};
|
|
136
|
+
_self[_DYN_VALUE /* @min:%2evalue */] = function (path, name, value, stringifyObjects) {
|
|
137
|
+
var mapValue = _getFieldSanitizer(path, name);
|
|
138
|
+
if (mapValue && mapValue[_DYN_CAN_HANDLE /* @min:%2ecanHandle */]) {
|
|
139
|
+
if (!mapValue[_DYN_CAN_HANDLE /* @min:%2ecanHandle */]) {
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
if (mapValue[_DYN_HANDLER /* @min:%2ehandler */]) {
|
|
143
|
+
// This value sanitizer can't handle this field so pass it only the next one
|
|
144
|
+
return mapValue.handler[_DYN_VALUE /* @min:%2evalue */](path, name, value, stringifyObjects);
|
|
145
|
+
}
|
|
146
|
+
// Check that property is valid
|
|
147
|
+
if (!isString(name) || isNullOrUndefined(value) || value === STR_EMPTY) {
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
var property = null;
|
|
151
|
+
var fieldType = getFieldValueType(value);
|
|
152
|
+
if ((fieldType & 8192 /* FieldValueSanitizerType.EventProperty */) === 8192 /* FieldValueSanitizerType.EventProperty */) {
|
|
153
|
+
var subType = fieldType & ~8192 /* FieldValueSanitizerType.EventProperty */;
|
|
154
|
+
property = value;
|
|
155
|
+
if (!isValueAssigned(property[_DYN_VALUE /* @min:%2evalue */]) ||
|
|
156
|
+
(subType !== 1 /* FieldValueSanitizerType.String */ &&
|
|
157
|
+
subType !== 2 /* FieldValueSanitizerType.Number */ &&
|
|
158
|
+
subType !== 3 /* FieldValueSanitizerType.Boolean */ &&
|
|
159
|
+
(subType & 4096 /* FieldValueSanitizerType.Array */) !== 4096 /* FieldValueSanitizerType.Array */)) {
|
|
160
|
+
// Not a supported IEventProperty type to be able to sanitize
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
else if (fieldType === 1 /* FieldValueSanitizerType.String */ ||
|
|
165
|
+
fieldType === 2 /* FieldValueSanitizerType.Number */ ||
|
|
166
|
+
fieldType === 3 /* FieldValueSanitizerType.Boolean */ ||
|
|
167
|
+
(fieldType & 4096 /* FieldValueSanitizerType.Array */) === 4096 /* FieldValueSanitizerType.Array */) {
|
|
168
|
+
// If the property isn't IEventProperty (and is either string, number, boolean or array), convert it into one.
|
|
169
|
+
property = _convertToProperty(path, name, value);
|
|
170
|
+
}
|
|
171
|
+
else if (fieldType === 4 /* FieldValueSanitizerType.Object */) {
|
|
172
|
+
property = _convertToProperty(path, name, !!stringifyObjects ? JSON[_DYN_STRINGIFY /* @min:%2estringify */](value) : value);
|
|
173
|
+
}
|
|
174
|
+
if (property) {
|
|
175
|
+
return _handleProperty(mapValue, path, name, fieldType, property, stringifyObjects);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return null;
|
|
179
|
+
};
|
|
180
|
+
_self.property = function (path, name, property, stringifyObjects) {
|
|
181
|
+
var mapValue = _getFieldSanitizer(path, name);
|
|
182
|
+
if (!mapValue || !mapValue[_DYN_CAN_HANDLE /* @min:%2ecanHandle */]) {
|
|
183
|
+
return null;
|
|
184
|
+
}
|
|
185
|
+
// Check that property is valid
|
|
186
|
+
if (!isString(name) || isNullOrUndefined(property) || !isValueAssigned(property[_DYN_VALUE /* @min:%2evalue */])) {
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
var fieldType = getFieldValueType(property[_DYN_VALUE /* @min:%2evalue */]);
|
|
190
|
+
if (fieldType === 0 /* FieldValueSanitizerType.NotSet */) {
|
|
191
|
+
// Not a supported field that we can sanitize or serialize
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
return _handleProperty(mapValue, path, name, fieldType, property, stringifyObjects);
|
|
195
|
+
};
|
|
196
|
+
function _handleProperty(mapValue, path, name, fieldType, property, stringifyObjects) {
|
|
197
|
+
if (mapValue[_DYN_HANDLER /* @min:%2ehandler */]) {
|
|
198
|
+
// This value sanitizer can't handle this field so pass it only the next one
|
|
199
|
+
return mapValue[_DYN_HANDLER /* @min:%2ehandler */].property(path, name, property, stringifyObjects);
|
|
200
|
+
}
|
|
201
|
+
// If either pii or cc is set convert value to string (since only string pii/cc is allowed).
|
|
202
|
+
// If the value is a complex type like an array that can't be converted to string we will drop
|
|
203
|
+
// the property.
|
|
204
|
+
if (!isNullOrUndefined(property[_DYN_KIND /* @min:%2ekind */])) {
|
|
205
|
+
if ((fieldType & 4096 /* FieldValueSanitizerType.Array */) === 4096 /* FieldValueSanitizerType.Array */ || !isValueKind(property[_DYN_KIND /* @min:%2ekind */])) {
|
|
206
|
+
return null;
|
|
207
|
+
}
|
|
208
|
+
// Convert the value to a string and assign back to the original value
|
|
209
|
+
property[_DYN_VALUE /* @min:%2evalue */] = property[_DYN_VALUE /* @min:%2evalue */][_DYN_TO_STRING /* @min:%2etoString */]();
|
|
210
|
+
}
|
|
211
|
+
return _callFieldSanitizer(mapValue.fieldHandler, path, name, fieldType, property);
|
|
212
|
+
}
|
|
213
|
+
function _convertToProperty(path, name, value) {
|
|
214
|
+
if (isValueAssigned(value)) {
|
|
215
|
+
return { value: value };
|
|
216
|
+
}
|
|
217
|
+
return null;
|
|
218
|
+
}
|
|
219
|
+
function _callFieldSanitizer(fieldProvider, path, name, theType, property) {
|
|
220
|
+
if (property && fieldProvider) {
|
|
221
|
+
var sanitizer = fieldProvider.getSanitizer(path, name, theType, property[_DYN_KIND /* @min:%2ekind */], property.propertyType);
|
|
222
|
+
if (sanitizer) {
|
|
223
|
+
// This is where we the field will call the handler to "scrub" the value. This the primary hook for the ClientHashing Plugin to
|
|
224
|
+
// be able to apply the hashFunc() / Sha256 conversion of the properties value
|
|
225
|
+
if (theType === 4 /* FieldValueSanitizerType.Object */) {
|
|
226
|
+
// Special case of an embedded object (ext.metadata, data.properties)
|
|
227
|
+
var newValue_1 = {};
|
|
228
|
+
var propValue = property[_DYN_VALUE /* @min:%2evalue */];
|
|
229
|
+
objForEachKey(propValue, function (propKey, theValue) {
|
|
230
|
+
var newPath = path + "." + name;
|
|
231
|
+
if (isValueAssigned(theValue)) {
|
|
232
|
+
var newProp = _convertToProperty(newPath, propKey, theValue);
|
|
233
|
+
newProp = _callFieldSanitizer(fieldProvider, newPath, propKey, getFieldValueType(theValue), newProp);
|
|
234
|
+
if (newProp) {
|
|
235
|
+
newValue_1[propKey] = newProp[_DYN_VALUE /* @min:%2evalue */];
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
property[_DYN_VALUE /* @min:%2evalue */] = newValue_1;
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
var details = {
|
|
243
|
+
path: path,
|
|
244
|
+
name: name,
|
|
245
|
+
type: theType,
|
|
246
|
+
prop: property,
|
|
247
|
+
sanitizer: _self
|
|
248
|
+
};
|
|
249
|
+
property = sanitizer[_DYN_CALL /* @min:%2ecall */](_self, details);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
return property;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
ValueSanitizer.getFieldType = getFieldValueType;
|
|
257
|
+
return ValueSanitizer;
|
|
258
|
+
}());
|
|
259
|
+
export { ValueSanitizer };
|
|
260
|
+
//# sourceMappingURL=ValueSanitizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValueSanitizer.js.map","sources":["ValueSanitizer.js"],"sourcesContent":["import { arrForEach, arrIncludes, arrIndexOf, getLength, isNullOrUndefined, isString, objForEachKey } from \"@nevware21/ts-utils\";\r\nimport { _DYN_CALL, _DYN_CAN_HANDLE, _DYN_HANDLER, _DYN_HANDLE_FIELD, _DYN_KIND, _DYN_LENGTH, _DYN_PUSH, _DYN_RM_FIELD_SANITIZER, _DYN_RM_SANITIZER, _DYN_SPLICE, _DYN_STRINGIFY, _DYN_TO_STRING, _DYN_VALUE } from \"../__DynamicConstants\";\r\nimport { STR_EMPTY } from \"../constants/InternalConstants\";\r\nimport { getFieldValueType, isValueAssigned, isValueKind } from \"./extUtils\";\r\nfunction _isSpecialName(name) {\r\n return (name == \"__proto__\" || name == \"constructor\" || name == \"prototype\");\r\n}\r\nvar ValueSanitizer = /** @class */ (function () {\r\n function ValueSanitizer(fieldSanitizerProvider) {\r\n var _self = this;\r\n // To aid with performance this is a lookup map to check if the field value sanitizer supports this field\r\n var _sanitizerMap = {};\r\n var _sanitizers = [];\r\n var _fieldSanitizers = [];\r\n if (fieldSanitizerProvider) {\r\n _fieldSanitizers[_DYN_PUSH /* @min:%2epush */](fieldSanitizerProvider);\r\n }\r\n function _getFieldSanitizer(path, name) {\r\n var result;\r\n var fieldLookup = _sanitizerMap[path];\r\n if (fieldLookup) {\r\n result = fieldLookup[name];\r\n }\r\n if (!result && result !== null) {\r\n // Null is a valid result indicating that the value sanitizer does not support this field\r\n if (isString(path) && isString(name)) {\r\n if (_fieldSanitizers[_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n for (var lp = 0; lp < _fieldSanitizers[_DYN_LENGTH /* @min:%2elength */]; lp++) {\r\n if (_fieldSanitizers[lp][_DYN_HANDLE_FIELD /* @min:%2ehandleField */](path, name)) {\r\n result = {\r\n canHandle: true,\r\n fieldHandler: _fieldSanitizers[lp]\r\n };\r\n break;\r\n }\r\n }\r\n }\r\n else if (_sanitizers[_DYN_LENGTH /* @min:%2elength */] === 0) {\r\n // Special use-case where there is no sanitizer to pass on to, so just resolving the field\r\n // and returning the resulting value (same as sanitizeProperty())\r\n result = {\r\n canHandle: true\r\n };\r\n }\r\n }\r\n // We still don't have a handler so lets lookup the providers\r\n if (!result && result !== null) {\r\n // Setting the result to null -- which means we and any contained sanitizers can't handle this field\r\n result = null;\r\n for (var lp = 0; lp < _sanitizers[_DYN_LENGTH /* @min:%2elength */]; lp++) {\r\n if (_sanitizers[lp][_DYN_HANDLE_FIELD /* @min:%2ehandleField */](path, name)) {\r\n result = {\r\n canHandle: true,\r\n handler: _sanitizers[lp],\r\n fieldHandler: null\r\n };\r\n break;\r\n }\r\n }\r\n }\r\n if (!fieldLookup) {\r\n // Handle edge case to avoid prototype pollution\r\n if (_isSpecialName(path)) {\r\n return null;\r\n }\r\n fieldLookup = _sanitizerMap[path] = {};\r\n }\r\n // Handle edge case to avoid prototype pollution\r\n if (_isSpecialName(name)) {\r\n return null;\r\n }\r\n fieldLookup[name] = result;\r\n }\r\n return result;\r\n }\r\n _self.clearCache = function () {\r\n _sanitizerMap = {};\r\n };\r\n _self.addSanitizer = function (newSanitizer) {\r\n if (newSanitizer) {\r\n if (!arrIncludes(_sanitizers, newSanitizer)) {\r\n _sanitizers[_DYN_PUSH /* @min:%2epush */](newSanitizer);\r\n }\r\n // Invalidate any previously mapped fields\r\n _sanitizerMap = {};\r\n }\r\n };\r\n _self.addFieldSanitizer = function (fieldSanitizer) {\r\n if (fieldSanitizer) {\r\n if (!arrIncludes(_fieldSanitizers, fieldSanitizer)) {\r\n _fieldSanitizers[_DYN_PUSH /* @min:%2epush */](fieldSanitizer);\r\n }\r\n // Invalidate any previously mapped fields\r\n _sanitizerMap = {};\r\n }\r\n };\r\n _self[_DYN_RM_SANITIZER /* @min:%2ermSanitizer */] = function (theSanitizer) {\r\n if (theSanitizer) {\r\n var idx = arrIndexOf(_sanitizers, theSanitizer);\r\n if (idx !== -1) {\r\n _sanitizers[_DYN_SPLICE /* @min:%2esplice */](idx, 1);\r\n // Invalidate any previously mapped fields\r\n _sanitizerMap = {};\r\n }\r\n // Try and remove the sanitizer from any chained sanitizer as well\r\n arrForEach(_sanitizers, function (sanitizer) {\r\n sanitizer && sanitizer[_DYN_RM_SANITIZER /* @min:%2ermSanitizer */] && sanitizer[_DYN_RM_SANITIZER /* @min:%2ermSanitizer */](theSanitizer);\r\n });\r\n }\r\n };\r\n _self[_DYN_RM_FIELD_SANITIZER /* @min:%2ermFieldSanitizer */] = function (theFieldSanitizer) {\r\n if (theFieldSanitizer) {\r\n var idx = arrIndexOf(_fieldSanitizers, theFieldSanitizer);\r\n if (idx !== -1) {\r\n _fieldSanitizers[_DYN_SPLICE /* @min:%2esplice */](idx, 1);\r\n // Invalidate any previously mapped fields\r\n _sanitizerMap = {};\r\n }\r\n // Try and remove the field sanitizer from any chained sanitizer as well\r\n arrForEach(_sanitizers, function (sanitizer) {\r\n sanitizer && sanitizer[_DYN_RM_FIELD_SANITIZER /* @min:%2ermFieldSanitizer */] && sanitizer[_DYN_RM_FIELD_SANITIZER /* @min:%2ermFieldSanitizer */](theFieldSanitizer);\r\n });\r\n }\r\n };\r\n _self.isEmpty = function () {\r\n return (getLength(_sanitizers) + getLength(_fieldSanitizers)) === 0;\r\n };\r\n _self[_DYN_HANDLE_FIELD /* @min:%2ehandleField */] = function (path, name) {\r\n var mapValue = _getFieldSanitizer(path, name);\r\n return mapValue ? mapValue[_DYN_CAN_HANDLE /* @min:%2ecanHandle */] : false;\r\n };\r\n _self[_DYN_VALUE /* @min:%2evalue */] = function (path, name, value, stringifyObjects) {\r\n var mapValue = _getFieldSanitizer(path, name);\r\n if (mapValue && mapValue[_DYN_CAN_HANDLE /* @min:%2ecanHandle */]) {\r\n if (!mapValue[_DYN_CAN_HANDLE /* @min:%2ecanHandle */]) {\r\n return null;\r\n }\r\n if (mapValue[_DYN_HANDLER /* @min:%2ehandler */]) {\r\n // This value sanitizer can't handle this field so pass it only the next one\r\n return mapValue.handler[_DYN_VALUE /* @min:%2evalue */](path, name, value, stringifyObjects);\r\n }\r\n // Check that property is valid\r\n if (!isString(name) || isNullOrUndefined(value) || value === STR_EMPTY) {\r\n return null;\r\n }\r\n var property = null;\r\n var fieldType = getFieldValueType(value);\r\n if ((fieldType & 8192 /* FieldValueSanitizerType.EventProperty */) === 8192 /* FieldValueSanitizerType.EventProperty */) {\r\n var subType = fieldType & ~8192 /* FieldValueSanitizerType.EventProperty */;\r\n property = value;\r\n if (!isValueAssigned(property[_DYN_VALUE /* @min:%2evalue */]) ||\r\n (subType !== 1 /* FieldValueSanitizerType.String */ &&\r\n subType !== 2 /* FieldValueSanitizerType.Number */ &&\r\n subType !== 3 /* FieldValueSanitizerType.Boolean */ &&\r\n (subType & 4096 /* FieldValueSanitizerType.Array */) !== 4096 /* FieldValueSanitizerType.Array */)) {\r\n // Not a supported IEventProperty type to be able to sanitize\r\n return null;\r\n }\r\n }\r\n else if (fieldType === 1 /* FieldValueSanitizerType.String */ ||\r\n fieldType === 2 /* FieldValueSanitizerType.Number */ ||\r\n fieldType === 3 /* FieldValueSanitizerType.Boolean */ ||\r\n (fieldType & 4096 /* FieldValueSanitizerType.Array */) === 4096 /* FieldValueSanitizerType.Array */) {\r\n // If the property isn't IEventProperty (and is either string, number, boolean or array), convert it into one.\r\n property = _convertToProperty(path, name, value);\r\n }\r\n else if (fieldType === 4 /* FieldValueSanitizerType.Object */) {\r\n property = _convertToProperty(path, name, !!stringifyObjects ? JSON[_DYN_STRINGIFY /* @min:%2estringify */](value) : value);\r\n }\r\n if (property) {\r\n return _handleProperty(mapValue, path, name, fieldType, property, stringifyObjects);\r\n }\r\n }\r\n return null;\r\n };\r\n _self.property = function (path, name, property, stringifyObjects) {\r\n var mapValue = _getFieldSanitizer(path, name);\r\n if (!mapValue || !mapValue[_DYN_CAN_HANDLE /* @min:%2ecanHandle */]) {\r\n return null;\r\n }\r\n // Check that property is valid\r\n if (!isString(name) || isNullOrUndefined(property) || !isValueAssigned(property[_DYN_VALUE /* @min:%2evalue */])) {\r\n return null;\r\n }\r\n var fieldType = getFieldValueType(property[_DYN_VALUE /* @min:%2evalue */]);\r\n if (fieldType === 0 /* FieldValueSanitizerType.NotSet */) {\r\n // Not a supported field that we can sanitize or serialize\r\n return null;\r\n }\r\n return _handleProperty(mapValue, path, name, fieldType, property, stringifyObjects);\r\n };\r\n function _handleProperty(mapValue, path, name, fieldType, property, stringifyObjects) {\r\n if (mapValue[_DYN_HANDLER /* @min:%2ehandler */]) {\r\n // This value sanitizer can't handle this field so pass it only the next one\r\n return mapValue[_DYN_HANDLER /* @min:%2ehandler */].property(path, name, property, stringifyObjects);\r\n }\r\n // If either pii or cc is set convert value to string (since only string pii/cc is allowed).\r\n // If the value is a complex type like an array that can't be converted to string we will drop\r\n // the property.\r\n if (!isNullOrUndefined(property[_DYN_KIND /* @min:%2ekind */])) {\r\n if ((fieldType & 4096 /* FieldValueSanitizerType.Array */) === 4096 /* FieldValueSanitizerType.Array */ || !isValueKind(property[_DYN_KIND /* @min:%2ekind */])) {\r\n return null;\r\n }\r\n // Convert the value to a string and assign back to the original value\r\n property[_DYN_VALUE /* @min:%2evalue */] = property[_DYN_VALUE /* @min:%2evalue */][_DYN_TO_STRING /* @min:%2etoString */]();\r\n }\r\n return _callFieldSanitizer(mapValue.fieldHandler, path, name, fieldType, property);\r\n }\r\n function _convertToProperty(path, name, value) {\r\n if (isValueAssigned(value)) {\r\n return { value: value };\r\n }\r\n return null;\r\n }\r\n function _callFieldSanitizer(fieldProvider, path, name, theType, property) {\r\n if (property && fieldProvider) {\r\n var sanitizer = fieldProvider.getSanitizer(path, name, theType, property[_DYN_KIND /* @min:%2ekind */], property.propertyType);\r\n if (sanitizer) {\r\n // This is where we the field will call the handler to \"scrub\" the value. This the primary hook for the ClientHashing Plugin to\r\n // be able to apply the hashFunc() / Sha256 conversion of the properties value\r\n if (theType === 4 /* FieldValueSanitizerType.Object */) {\r\n // Special case of an embedded object (ext.metadata, data.properties)\r\n var newValue_1 = {};\r\n var propValue = property[_DYN_VALUE /* @min:%2evalue */];\r\n objForEachKey(propValue, function (propKey, theValue) {\r\n var newPath = path + \".\" + name;\r\n if (isValueAssigned(theValue)) {\r\n var newProp = _convertToProperty(newPath, propKey, theValue);\r\n newProp = _callFieldSanitizer(fieldProvider, newPath, propKey, getFieldValueType(theValue), newProp);\r\n if (newProp) {\r\n newValue_1[propKey] = newProp[_DYN_VALUE /* @min:%2evalue */];\r\n }\r\n }\r\n });\r\n property[_DYN_VALUE /* @min:%2evalue */] = newValue_1;\r\n }\r\n else {\r\n var details = {\r\n path: path,\r\n name: name,\r\n type: theType,\r\n prop: property,\r\n sanitizer: _self\r\n };\r\n property = sanitizer[_DYN_CALL /* @min:%2ecall */](_self, details);\r\n }\r\n }\r\n }\r\n return property;\r\n }\r\n }\r\n ValueSanitizer.getFieldType = getFieldValueType;\r\n return ValueSanitizer;\r\n}());\r\nexport { ValueSanitizer };\r\n//# sourceMappingURL=ValueSanitizer.js.map"],"names":[],"mappings":";;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Application Insights JavaScript SDK - Core, 3.4.1
|
|
3
|
+
* Copyright (c) Microsoft and contributors. All rights reserved.
|
|
4
|
+
*/
|
|
5
|
+
// Copyright (c) Microsoft Corporation.
|
|
6
|
+
|
|
7
|
+
import { arrIncludes, asString, getLazy, getNavigator, isBoolean, isNullOrUndefined, isNumber, isString, strLower, strStartsWith, throwError } from "@nevware21/ts-utils";
|
|
8
|
+
import { _DYN_ATTRIBUTES, _DYN_BASE_DATA, _DYN_CONFIG, _DYN_DATA, _DYN_DURATION, _DYN_I_KEY, _DYN_KIND, _DYN_NAME, _DYN_PARENT_SPAN_CONTEXT, _DYN_SPAN_CONTEXT, _DYN_SPAN_ID, _DYN_START_TIME, _DYN_STATUS, _DYN_TRACE_FLAGS, _DYN_TRACE_ID, _DYN_TRACE_STATE, _DYN_USER_AGENT } from "../__DynamicConstants";
|
|
9
|
+
import { STR_NOT_SPECIFIED } from "../constants/InternalConstants";
|
|
10
|
+
import { getHttpClientIp, getHttpHost, getHttpMethod, getHttpScheme, getHttpStatusCode, getHttpUrl, getSyntheticType, getUserAgent } from "../internal/commonUtils";
|
|
11
|
+
import { hrTimeToMilliseconds } from "../internal/timeHelpers";
|
|
12
|
+
import { ATTR_CLIENT_ADDRESS, ATTR_CLIENT_PORT, ATTR_ENDUSER_ID, ATTR_ENDUSER_PSEUDO_ID, ATTR_ERROR_TYPE, ATTR_EXCEPTION_MESSAGE, ATTR_EXCEPTION_STACKTRACE, ATTR_EXCEPTION_TYPE, ATTR_HTTP_REQUEST_METHOD, ATTR_HTTP_RESPONSE_STATUS_CODE, ATTR_NETWORK_LOCAL_ADDRESS, ATTR_NETWORK_LOCAL_PORT, ATTR_NETWORK_PEER_ADDRESS, ATTR_NETWORK_PEER_PORT, ATTR_NETWORK_PROTOCOL_NAME, ATTR_NETWORK_PROTOCOL_VERSION, ATTR_NETWORK_TRANSPORT, ATTR_SERVER_ADDRESS, ATTR_SERVER_PORT, ATTR_URL_FULL, ATTR_URL_PATH, ATTR_URL_QUERY, ATTR_URL_SCHEME, ATTR_USER_AGENT_ORIGINAL, EXP_ATTR_ENDUSER_ID, EXP_ATTR_ENDUSER_PSEUDO_ID, EXP_ATTR_SYNTHETIC_TYPE, SEMATTRS_DB_NAME, SEMATTRS_DB_OPERATION, SEMATTRS_DB_STATEMENT, SEMATTRS_DB_SYSTEM, SEMATTRS_ENDUSER_ID, SEMATTRS_EXCEPTION_MESSAGE, SEMATTRS_EXCEPTION_STACKTRACE, SEMATTRS_EXCEPTION_TYPE, SEMATTRS_HTTP_CLIENT_IP, SEMATTRS_HTTP_FLAVOR, SEMATTRS_HTTP_HOST, SEMATTRS_HTTP_METHOD, SEMATTRS_HTTP_ROUTE, SEMATTRS_HTTP_SCHEME, SEMATTRS_HTTP_STATUS_CODE, SEMATTRS_HTTP_TARGET, SEMATTRS_HTTP_URL, SEMATTRS_HTTP_USER_AGENT, SEMATTRS_NET_HOST_IP, SEMATTRS_NET_HOST_NAME, SEMATTRS_NET_HOST_PORT, SEMATTRS_NET_PEER_IP, SEMATTRS_NET_PEER_NAME, SEMATTRS_NET_PEER_PORT, SEMATTRS_NET_TRANSPORT, SEMATTRS_PEER_SERVICE, SEMATTRS_RPC_GRPC_STATUS_CODE, SEMATTRS_RPC_SYSTEM } from "../otel/attribute/SemanticConventions";
|
|
13
|
+
import { createAttributeContainer } from "../otel/attribute/attributeContainer";
|
|
14
|
+
import { fieldRedaction } from "../utils/EnvUtils";
|
|
15
|
+
import { toISOString } from "../utils/HelperFuncs";
|
|
16
|
+
/**
|
|
17
|
+
* Azure SDK namespace.
|
|
18
|
+
* @internal
|
|
19
|
+
*/
|
|
20
|
+
var AzNamespace = "az.namespace";
|
|
21
|
+
var AzResourceNamespace = "azure.resource_provider.namespace";
|
|
22
|
+
var PORT_REGEX = ( /*#__PURE__*/getLazy(function () { return new RegExp(/(https?)(:\/\/.*)(:\d+)(\S*)/); }));
|
|
23
|
+
var HTTP_DOT = "http.";
|
|
24
|
+
var _MS_PROCESSED_BY_METRICS_EXTRACTORS = "_MS.ProcessedByMetricExtractors";
|
|
25
|
+
/**
|
|
26
|
+
* Legacy HTTP semantic convention values
|
|
27
|
+
* @internal
|
|
28
|
+
*/
|
|
29
|
+
var _ignoreSemanticValues = ( /* #__PURE__*/getLazy(_initIgnoreSemanticValues));
|
|
30
|
+
/* #__NO_SIDE_EFFECTS__ */
|
|
31
|
+
function _initIgnoreSemanticValues() {
|
|
32
|
+
return [
|
|
33
|
+
// Internal Microsoft attributes
|
|
34
|
+
_MS_PROCESSED_BY_METRICS_EXTRACTORS,
|
|
35
|
+
// Legacy HTTP semantic values
|
|
36
|
+
SEMATTRS_NET_PEER_IP,
|
|
37
|
+
SEMATTRS_NET_PEER_NAME,
|
|
38
|
+
SEMATTRS_NET_HOST_IP,
|
|
39
|
+
SEMATTRS_PEER_SERVICE,
|
|
40
|
+
SEMATTRS_HTTP_USER_AGENT,
|
|
41
|
+
SEMATTRS_HTTP_METHOD,
|
|
42
|
+
SEMATTRS_HTTP_URL,
|
|
43
|
+
SEMATTRS_HTTP_STATUS_CODE,
|
|
44
|
+
SEMATTRS_HTTP_ROUTE,
|
|
45
|
+
SEMATTRS_HTTP_HOST,
|
|
46
|
+
SEMATTRS_DB_SYSTEM,
|
|
47
|
+
SEMATTRS_DB_STATEMENT,
|
|
48
|
+
SEMATTRS_DB_OPERATION,
|
|
49
|
+
SEMATTRS_DB_NAME,
|
|
50
|
+
SEMATTRS_RPC_SYSTEM,
|
|
51
|
+
SEMATTRS_RPC_GRPC_STATUS_CODE,
|
|
52
|
+
SEMATTRS_EXCEPTION_TYPE,
|
|
53
|
+
SEMATTRS_EXCEPTION_MESSAGE,
|
|
54
|
+
SEMATTRS_EXCEPTION_STACKTRACE,
|
|
55
|
+
SEMATTRS_HTTP_SCHEME,
|
|
56
|
+
SEMATTRS_HTTP_TARGET,
|
|
57
|
+
SEMATTRS_HTTP_FLAVOR,
|
|
58
|
+
SEMATTRS_NET_TRANSPORT,
|
|
59
|
+
SEMATTRS_NET_HOST_NAME,
|
|
60
|
+
SEMATTRS_NET_HOST_PORT,
|
|
61
|
+
SEMATTRS_NET_PEER_PORT,
|
|
62
|
+
SEMATTRS_HTTP_CLIENT_IP,
|
|
63
|
+
SEMATTRS_ENDUSER_ID,
|
|
64
|
+
HTTP_DOT + "status_text",
|
|
65
|
+
// http Semabtic conventions
|
|
66
|
+
ATTR_CLIENT_ADDRESS,
|
|
67
|
+
ATTR_CLIENT_PORT,
|
|
68
|
+
ATTR_SERVER_ADDRESS,
|
|
69
|
+
ATTR_SERVER_PORT,
|
|
70
|
+
ATTR_URL_FULL,
|
|
71
|
+
ATTR_URL_PATH,
|
|
72
|
+
ATTR_URL_QUERY,
|
|
73
|
+
ATTR_URL_SCHEME,
|
|
74
|
+
ATTR_ERROR_TYPE,
|
|
75
|
+
ATTR_NETWORK_LOCAL_ADDRESS,
|
|
76
|
+
ATTR_NETWORK_LOCAL_PORT,
|
|
77
|
+
ATTR_NETWORK_PROTOCOL_NAME,
|
|
78
|
+
ATTR_NETWORK_PEER_ADDRESS,
|
|
79
|
+
ATTR_NETWORK_PEER_PORT,
|
|
80
|
+
ATTR_NETWORK_PROTOCOL_VERSION,
|
|
81
|
+
ATTR_NETWORK_TRANSPORT,
|
|
82
|
+
ATTR_USER_AGENT_ORIGINAL,
|
|
83
|
+
ATTR_HTTP_REQUEST_METHOD,
|
|
84
|
+
ATTR_HTTP_RESPONSE_STATUS_CODE,
|
|
85
|
+
ATTR_EXCEPTION_TYPE,
|
|
86
|
+
ATTR_EXCEPTION_MESSAGE,
|
|
87
|
+
ATTR_EXCEPTION_STACKTRACE,
|
|
88
|
+
EXP_ATTR_ENDUSER_ID,
|
|
89
|
+
EXP_ATTR_ENDUSER_PSEUDO_ID,
|
|
90
|
+
EXP_ATTR_SYNTHETIC_TYPE,
|
|
91
|
+
// Azure SDK attributes are not included as they are not part of the span attributes
|
|
92
|
+
AzNamespace,
|
|
93
|
+
AzResourceNamespace,
|
|
94
|
+
"az.client_request_id",
|
|
95
|
+
"azure.client.id",
|
|
96
|
+
"az.service_request_id",
|
|
97
|
+
"azure.service.request.id"
|
|
98
|
+
];
|
|
99
|
+
}
|
|
100
|
+
function _applyExtValue(ext, extName, name, value, overwriteExt) {
|
|
101
|
+
if (isString(value) || isNumber(value) || isBoolean(value)) {
|
|
102
|
+
var target = ext[extName] = ext[extName] || {};
|
|
103
|
+
_applyValue(target, name, value, overwriteExt);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function _applyValue(target, name, value, overwriteTarget) {
|
|
107
|
+
if (target) {
|
|
108
|
+
if (isString(value) || isNumber(value) || isBoolean(value)) {
|
|
109
|
+
var targetValue = target[name];
|
|
110
|
+
if (!overwriteTarget && (targetValue || isString(targetValue) || isNumber(targetValue) || isBoolean(targetValue))) {
|
|
111
|
+
value = targetValue;
|
|
112
|
+
}
|
|
113
|
+
target[name] = value;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return target;
|
|
117
|
+
}
|
|
118
|
+
function _populateExtensionsFromSpan(telemetryItem, span, container) {
|
|
119
|
+
var ext = telemetryItem.ext = telemetryItem.ext || {};
|
|
120
|
+
// Map OpenTelemetry enduser attributes to Application Insights user attributes
|
|
121
|
+
var endUserId = container.get(ATTR_ENDUSER_ID);
|
|
122
|
+
if (endUserId) {
|
|
123
|
+
_applyExtValue(ext, "user", "authId", asString(endUserId), false);
|
|
124
|
+
}
|
|
125
|
+
var endUserPseudoId = container.get(ATTR_ENDUSER_PSEUDO_ID);
|
|
126
|
+
if (endUserPseudoId) {
|
|
127
|
+
_applyExtValue(ext, "user", "id", asString(endUserPseudoId), false);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Check to see if the key is in the list of known properties to ignore (exclude)
|
|
132
|
+
* from part C properties population.
|
|
133
|
+
* @param key - the property key to check
|
|
134
|
+
* @param contextKeys - The current context keys
|
|
135
|
+
* @returns true if the key should be ignored, false otherwise
|
|
136
|
+
*/
|
|
137
|
+
function _isIgnorePartCKey(key) {
|
|
138
|
+
var result = false;
|
|
139
|
+
if (arrIncludes(_ignoreSemanticValues.v, key)) {
|
|
140
|
+
// The key is in set of known keys to ignore
|
|
141
|
+
result = true;
|
|
142
|
+
}
|
|
143
|
+
else if (strStartsWith(key, "microsoft.")) {
|
|
144
|
+
// Ignoring all ALL keys starting with "microsoft."
|
|
145
|
+
result = true;
|
|
146
|
+
}
|
|
147
|
+
return result;
|
|
148
|
+
}
|
|
149
|
+
function _populatePartC(item, container) {
|
|
150
|
+
if (container) {
|
|
151
|
+
var partC_1 = item[_DYN_DATA /* @min:%2edata */] = (item[_DYN_DATA /* @min:%2edata */] || {});
|
|
152
|
+
_applyValue(partC_1, "httpHost", getHttpHost(container), false);
|
|
153
|
+
_applyValue(partC_1, "httpScheme", getHttpScheme(container), false);
|
|
154
|
+
_applyValue(partC_1, "httpClientIp", getHttpClientIp(container), false);
|
|
155
|
+
_applyValue(partC_1, "httpUserAgent", getUserAgent(container), false);
|
|
156
|
+
_applyValue(partC_1, "httpRoute", container.get(SEMATTRS_HTTP_ROUTE), false);
|
|
157
|
+
_applyValue(partC_1, "netPeerName", container.get(SEMATTRS_NET_PEER_NAME), false);
|
|
158
|
+
_applyValue(partC_1, "netPeerPort", container.get(SEMATTRS_NET_PEER_PORT), false);
|
|
159
|
+
_applyValue(partC_1, "netPeerIp", container.get(SEMATTRS_NET_PEER_IP), false);
|
|
160
|
+
_applyValue(partC_1, "peerService", container.get("service.name") || container.get(SEMATTRS_PEER_SERVICE), false);
|
|
161
|
+
var syntheticSource = getSyntheticType(container);
|
|
162
|
+
if (!!syntheticSource) {
|
|
163
|
+
_applyValue(partC_1, "userAgentSyntheticType", syntheticSource, false);
|
|
164
|
+
}
|
|
165
|
+
var nav = getNavigator();
|
|
166
|
+
if (nav && nav[_DYN_USER_AGENT /* @min:%2euserAgent */]) {
|
|
167
|
+
_applyValue(partC_1, "userAgentOriginal", nav[_DYN_USER_AGENT /* @min:%2euserAgent */], false);
|
|
168
|
+
}
|
|
169
|
+
// Azure SDK fields
|
|
170
|
+
_applyValue(partC_1, "azureClientRequestId", container.get("azure.client.id") || container.get("az.client_request_id"), false);
|
|
171
|
+
_applyValue(partC_1, "azureServiceRequestId", container.get("azure.service.request.id") || container.get("az.service_request_id"), false);
|
|
172
|
+
var sampleRate = container.get("microsoft.sample_rate");
|
|
173
|
+
if (!isNullOrUndefined(sampleRate)) {
|
|
174
|
+
_applyValue(partC_1, "sampleRate", sampleRate, false);
|
|
175
|
+
}
|
|
176
|
+
container.forEach(function (key, value) {
|
|
177
|
+
// Avoid duplication ignoring fields already mapped.
|
|
178
|
+
if (!_isIgnorePartCKey(key)) {
|
|
179
|
+
partC_1[key] = value;
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
function _populateHttpProperties(otelSpanTelemetry, container, httpMethod, config) {
|
|
185
|
+
if (httpMethod) {
|
|
186
|
+
// Step the HTTP method
|
|
187
|
+
_applyValue(otelSpanTelemetry, "httpMethod", httpMethod, false);
|
|
188
|
+
// HTTP Dependency
|
|
189
|
+
var httpUrl = getHttpUrl(container);
|
|
190
|
+
if (httpUrl) {
|
|
191
|
+
try {
|
|
192
|
+
// Remove default port
|
|
193
|
+
var res = PORT_REGEX.v.exec(asString(httpUrl));
|
|
194
|
+
if (res !== null) {
|
|
195
|
+
var protocol = res[1];
|
|
196
|
+
var port = res[3];
|
|
197
|
+
if ((protocol === "https" && port === ":443") ||
|
|
198
|
+
(protocol === "http" && port === ":80")) {
|
|
199
|
+
// Drop port
|
|
200
|
+
httpUrl = res[1] + res[2] + res[4];
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
catch (_a) {
|
|
205
|
+
/* no-op */
|
|
206
|
+
}
|
|
207
|
+
_applyValue(otelSpanTelemetry, "httpUrl", fieldRedaction(asString(httpUrl), config), false);
|
|
208
|
+
}
|
|
209
|
+
var httpStatusCode = getHttpStatusCode(container);
|
|
210
|
+
if (httpStatusCode) {
|
|
211
|
+
_applyValue(otelSpanTelemetry, "httpStatusCode", httpStatusCode, false);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
function _populateDbProperties(otelSpanTelemetry, container, dbSystem) {
|
|
216
|
+
if (dbSystem) {
|
|
217
|
+
_applyValue(otelSpanTelemetry, "dbSystem", dbSystem, false);
|
|
218
|
+
// Set the statement
|
|
219
|
+
_applyValue(otelSpanTelemetry, "dbStatement", container.get(SEMATTRS_DB_STATEMENT) || container.get(SEMATTRS_DB_OPERATION), false);
|
|
220
|
+
_applyValue(otelSpanTelemetry, "dbName", container.get(SEMATTRS_DB_NAME) || dbSystem || "<undefined>", false);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
function _populateRpcDependencyProperties(otelSpanTelemetry, container, rpcSystem) {
|
|
224
|
+
if (rpcSystem) {
|
|
225
|
+
_applyValue(otelSpanTelemetry, "rpcSystem", strLower(rpcSystem), false);
|
|
226
|
+
_applyValue(otelSpanTelemetry, "rpcGrpcStatusCode", container.get(SEMATTRS_RPC_GRPC_STATUS_CODE), false);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
function _createOTelSpanTelemetryItem(core, span) {
|
|
230
|
+
var container = span.attribContainer || createAttributeContainer(span[_DYN_ATTRIBUTES /* @min:%2eattributes */]);
|
|
231
|
+
var spanCtx = span[_DYN_SPAN_CONTEXT /* @min:%2espanContext */]();
|
|
232
|
+
var statusCode = span[_DYN_STATUS /* @min:%2estatus */] ? span[_DYN_STATUS /* @min:%2estatus */].code : 0 /* eOTelSpanStatusCode.UNSET */;
|
|
233
|
+
var spanTelemetry = {
|
|
234
|
+
name: span[_DYN_NAME /* @min:%2ename */],
|
|
235
|
+
kind: span[_DYN_KIND /* @min:%2ekind */],
|
|
236
|
+
startTime: toISOString(new Date(hrTimeToMilliseconds(span[_DYN_START_TIME /* @min:%2estartTime */]))),
|
|
237
|
+
success: statusCode !== 0 /* eOTelSpanStatusCode.UNSET */ ? statusCode !== 2 /* eOTelSpanStatusCode.ERROR */ : (Number(getHttpStatusCode(container)) || 0) < 400,
|
|
238
|
+
duration: hrTimeToMilliseconds(span[_DYN_DURATION /* @min:%2eduration */])
|
|
239
|
+
//azureResourceProvider: undefined, // Not currently supported
|
|
240
|
+
//links: UNDEFINED_VALUE, // Not currently supported
|
|
241
|
+
};
|
|
242
|
+
// Set the parentId if available
|
|
243
|
+
var parentCtx = span[_DYN_PARENT_SPAN_CONTEXT /* @min:%2eparentSpanContext */] || (spanCtx ? spanCtx.parentCtx : null);
|
|
244
|
+
_applyValue(spanTelemetry, "parentId", span.parentSpanId || (parentCtx ? parentCtx[_DYN_SPAN_ID /* @min:%2espanId */] : null), false);
|
|
245
|
+
if (spanCtx) {
|
|
246
|
+
var traceState = spanCtx[_DYN_TRACE_STATE /* @min:%2etraceState */];
|
|
247
|
+
if (traceState && !traceState.isEmpty) {
|
|
248
|
+
_applyValue(spanTelemetry, "traceState", traceState.hdrs(1)[0], false);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
_populateHttpProperties(spanTelemetry, container, getHttpMethod(container), core[_DYN_CONFIG /* @min:%2econfig */]);
|
|
252
|
+
_populateDbProperties(spanTelemetry, container, container.get(SEMATTRS_DB_SYSTEM));
|
|
253
|
+
_populateRpcDependencyProperties(spanTelemetry, container, container.get(SEMATTRS_RPC_SYSTEM));
|
|
254
|
+
_applyValue(spanTelemetry, "azureResourceProvider", container.get(AzResourceNamespace) || container.get(AzNamespace), false);
|
|
255
|
+
return _createTelemetryItem(spanTelemetry, span, "OTelSpan", "Ms.Web.Span");
|
|
256
|
+
}
|
|
257
|
+
function _createTelemetryItem(item, span, baseType, eventName) {
|
|
258
|
+
eventName = eventName || STR_NOT_SPECIFIED;
|
|
259
|
+
if (isNullOrUndefined(item) ||
|
|
260
|
+
isNullOrUndefined(baseType) ||
|
|
261
|
+
isNullOrUndefined(eventName)) {
|
|
262
|
+
throwError("Input doesn't contain all required fields");
|
|
263
|
+
}
|
|
264
|
+
var iKey = "";
|
|
265
|
+
if (item[_DYN_I_KEY /* @min:%2eiKey */]) {
|
|
266
|
+
iKey = item[_DYN_I_KEY /* @min:%2eiKey */];
|
|
267
|
+
delete item[_DYN_I_KEY /* @min:%2eiKey */];
|
|
268
|
+
}
|
|
269
|
+
var telemetryItem = {
|
|
270
|
+
name: eventName,
|
|
271
|
+
time: toISOString(span.endTime ? new Date(hrTimeToMilliseconds(span.endTime)) : new Date()),
|
|
272
|
+
iKey: iKey,
|
|
273
|
+
ext: {},
|
|
274
|
+
baseType: baseType,
|
|
275
|
+
baseData: item,
|
|
276
|
+
data: {} // part C
|
|
277
|
+
};
|
|
278
|
+
return telemetryItem;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Create an extended common schema telemetry item from the provided span
|
|
282
|
+
* @param core - The app insights core instance
|
|
283
|
+
* @param span - The span to create the telemetry item from
|
|
284
|
+
* @returns A new extended telemetry item or null if the span kind is not supported
|
|
285
|
+
*/
|
|
286
|
+
export function createExtendedTelemetryItemFromSpan(core, span) {
|
|
287
|
+
var telemetryItem = _createOTelSpanTelemetryItem(core, span);
|
|
288
|
+
var container = span.attribContainer || createAttributeContainer(span[_DYN_ATTRIBUTES /* @min:%2eattributes */]);
|
|
289
|
+
if (telemetryItem) {
|
|
290
|
+
// Set the Span common schema fields
|
|
291
|
+
// Set start time for the telemetry item from the event, not the time it is being processed (the default)
|
|
292
|
+
// The channel envelope creator uses this value when creating the envelope only when defined, otherwise it
|
|
293
|
+
// uses the time when the item is being processed
|
|
294
|
+
var partB = telemetryItem[_DYN_BASE_DATA /* @min:%2ebaseData */] = telemetryItem[_DYN_BASE_DATA /* @min:%2ebaseData */] || {};
|
|
295
|
+
partB[_DYN_START_TIME /* @min:%2estartTime */] = new Date(hrTimeToMilliseconds(span[_DYN_START_TIME /* @min:%2estartTime */]));
|
|
296
|
+
var spanContext = span[_DYN_SPAN_CONTEXT /* @min:%2espanContext */]();
|
|
297
|
+
if (spanContext) {
|
|
298
|
+
// Add dt extension to the telemetry item
|
|
299
|
+
var ext = telemetryItem.ext = telemetryItem.ext || {};
|
|
300
|
+
var dt = ext["dt"] = ext["dt"] || {};
|
|
301
|
+
// Don't overwrite any existing values
|
|
302
|
+
_applyValue(dt, "spanId", spanContext[_DYN_SPAN_ID /* @min:%2espanId */], false);
|
|
303
|
+
_applyValue(dt, "traceId", spanContext[_DYN_TRACE_ID /* @min:%2etraceId */], false);
|
|
304
|
+
_applyValue(dt, "traceFlags", spanContext[_DYN_TRACE_FLAGS /* @min:%2etraceFlags */], false);
|
|
305
|
+
}
|
|
306
|
+
_populateExtensionsFromSpan(telemetryItem, span, container);
|
|
307
|
+
_populatePartC(telemetryItem, container);
|
|
308
|
+
// Azure SDK
|
|
309
|
+
}
|
|
310
|
+
return telemetryItem;
|
|
311
|
+
}
|
|
312
|
+
//# sourceMappingURL=extSpanUtils.js.map
|