@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.
Files changed (258) hide show
  1. package/browser/es5/applicationinsights-core-js.cjs.js +997 -114
  2. package/browser/es5/applicationinsights-core-js.cjs.js.map +1 -1
  3. package/browser/es5/applicationinsights-core-js.cjs.min.js +2 -2
  4. package/browser/es5/applicationinsights-core-js.cjs.min.js.map +1 -1
  5. package/browser/es5/applicationinsights-core-js.gbl.js +999 -116
  6. package/browser/es5/applicationinsights-core-js.gbl.js.map +1 -1
  7. package/browser/es5/applicationinsights-core-js.gbl.min.js +2 -2
  8. package/browser/es5/applicationinsights-core-js.gbl.min.js.map +1 -1
  9. package/browser/es5/applicationinsights-core-js.integrity.json +25 -25
  10. package/browser/es5/applicationinsights-core-js.js +999 -116
  11. package/browser/es5/applicationinsights-core-js.js.map +1 -1
  12. package/browser/es5/applicationinsights-core-js.min.js +2 -2
  13. package/browser/es5/applicationinsights-core-js.min.js.map +1 -1
  14. package/dist/es5/index.js +997 -114
  15. package/dist/es5/index.js.map +1 -1
  16. package/dist/es5/index.min.js +2 -2
  17. package/dist/es5/index.min.js.map +1 -1
  18. package/dist-es5/__DynamicConstants.js +44 -27
  19. package/dist-es5/__DynamicConstants.js.map +1 -1
  20. package/dist-es5/config/ConfigDefaultHelpers.js +1 -1
  21. package/dist-es5/config/ConfigDefaults.js +1 -1
  22. package/dist-es5/config/DynamicConfig.js +1 -1
  23. package/dist-es5/config/DynamicProperty.js +1 -1
  24. package/dist-es5/config/DynamicState.js +1 -1
  25. package/dist-es5/config/DynamicSupport.js +1 -1
  26. package/dist-es5/constants/Constants.js +1 -1
  27. package/dist-es5/constants/InternalConstants.js +4 -1
  28. package/dist-es5/constants/InternalConstants.js.map +1 -1
  29. package/dist-es5/core/AggregationError.js +1 -1
  30. package/dist-es5/core/AppInsightsCore.js +13 -13
  31. package/dist-es5/core/AppInsightsCore.js.map +1 -1
  32. package/dist-es5/core/AsyncUtils.js +1 -1
  33. package/dist-es5/core/BaseTelemetryPlugin.js +1 -1
  34. package/dist-es5/core/CookieMgr.js +1 -1
  35. package/dist-es5/core/DbgExtensionUtils.js +1 -1
  36. package/dist-es5/core/InstrumentHooks.js +1 -1
  37. package/dist-es5/core/NotificationManager.js +1 -1
  38. package/dist-es5/core/PerfManager.js +1 -1
  39. package/dist-es5/core/ProcessTelemetryContext.js +3 -3
  40. package/dist-es5/core/ProcessTelemetryContext.js.map +1 -1
  41. package/dist-es5/core/ResponseHelpers.js +1 -1
  42. package/dist-es5/core/SenderPostManager.js +1 -1
  43. package/dist-es5/core/StatsBeat.js +9 -9
  44. package/dist-es5/core/StatsBeat.js.map +1 -1
  45. package/dist-es5/core/TelemetryHelpers.js +3 -3
  46. package/dist-es5/core/TelemetryHelpers.js.map +1 -1
  47. package/dist-es5/core/TelemetryInitializerPlugin.js +1 -1
  48. package/dist-es5/core/UnloadHandlerContainer.js +1 -1
  49. package/dist-es5/core/UnloadHookContainer.js +3 -3
  50. package/dist-es5/core/UnloadHookContainer.js.map +1 -1
  51. package/dist-es5/diagnostics/DiagnosticLogger.js +3 -3
  52. package/dist-es5/diagnostics/DiagnosticLogger.js.map +1 -1
  53. package/dist-es5/diagnostics/ThrottleMgr.js +1 -1
  54. package/dist-es5/enums/EnumHelperFuncs.js +1 -1
  55. package/dist-es5/enums/W3CTraceFlags.js +1 -1
  56. package/dist-es5/enums/ai/DependencyTypes.js +1 -1
  57. package/dist-es5/enums/ai/Enums.js +1 -1
  58. package/dist-es5/enums/ai/EventsDiscardedReason.js +1 -1
  59. package/dist-es5/enums/ai/FeatureOptInEnums.js +1 -1
  60. package/dist-es5/enums/ai/InitActiveStatusEnum.js +1 -1
  61. package/dist-es5/enums/ai/LoggingEnums.js +1 -1
  62. package/dist-es5/enums/ai/SendRequestReason.js +1 -1
  63. package/dist-es5/enums/ai/StatsType.js +1 -1
  64. package/dist-es5/enums/ai/TelemetryUnloadReason.js +1 -1
  65. package/dist-es5/enums/ai/TelemetryUpdateReason.js +1 -1
  66. package/dist-es5/enums/ai/TraceHeadersMode.js +1 -1
  67. package/dist-es5/enums/ai/UrlRedactionOptions.js +36 -0
  68. package/dist-es5/enums/ai/UrlRedactionOptions.js.map +1 -0
  69. package/dist-es5/enums/ext/Enums.js +78 -0
  70. package/dist-es5/enums/ext/Enums.js.map +1 -0
  71. package/dist-es5/enums/otel/OTelSamplingDecision.js +1 -1
  72. package/dist-es5/enums/otel/OTelSpanKind.js +1 -1
  73. package/dist-es5/enums/otel/OTelSpanStatus.js +1 -1
  74. package/dist-es5/enums/otel/eAttributeChangeOp.js +1 -1
  75. package/dist-es5/ext/AppInsightsExtCore.js +98 -0
  76. package/dist-es5/ext/AppInsightsExtCore.js.map +1 -0
  77. package/dist-es5/ext/ValueSanitizer.js +260 -0
  78. package/dist-es5/ext/ValueSanitizer.js.map +1 -0
  79. package/dist-es5/ext/extSpanUtils.js +312 -0
  80. package/dist-es5/ext/extSpanUtils.js.map +1 -0
  81. package/dist-es5/ext/extUtils.js +412 -0
  82. package/dist-es5/ext/extUtils.js.map +1 -0
  83. package/dist-es5/index.js +14 -1
  84. package/dist-es5/index.js.map +1 -1
  85. package/dist-es5/interfaces/IException.js +1 -1
  86. package/dist-es5/interfaces/IOTelHrTime.js +1 -1
  87. package/dist-es5/interfaces/ai/ConnectionString.js +1 -1
  88. package/dist-es5/interfaces/ai/IAppInsights.js +1 -1
  89. package/dist-es5/interfaces/ai/IAppInsightsCore.js +1 -1
  90. package/dist-es5/interfaces/ai/IChannelControls.js +1 -1
  91. package/dist-es5/interfaces/ai/IChannelControlsHost.js +1 -1
  92. package/dist-es5/interfaces/ai/IConfig.js +1 -1
  93. package/dist-es5/interfaces/ai/IConfiguration.js +1 -1
  94. package/dist-es5/interfaces/ai/ICookieMgr.js +1 -1
  95. package/dist-es5/interfaces/ai/ICorrelationConfig.js +1 -1
  96. package/dist-es5/interfaces/ai/IDbgExtension.js +1 -1
  97. package/dist-es5/interfaces/ai/IDependencyTelemetry.js +1 -1
  98. package/dist-es5/interfaces/ai/IDiagnosticLogger.js +1 -1
  99. package/dist-es5/interfaces/ai/IDistributedTraceContext.js +1 -1
  100. package/dist-es5/interfaces/ai/IEventTelemetry.js +1 -1
  101. package/dist-es5/interfaces/ai/IExceptionConfig.js +1 -1
  102. package/dist-es5/interfaces/ai/IExceptionTelemetry.js +1 -1
  103. package/dist-es5/interfaces/ai/IFeatureOptIn.js +1 -1
  104. package/dist-es5/interfaces/ai/IInstrumentHooks.js +1 -1
  105. package/dist-es5/interfaces/ai/IMetricTelemetry.js +1 -1
  106. package/dist-es5/interfaces/ai/INetworkStatsbeat.js +1 -1
  107. package/dist-es5/interfaces/ai/INotificationListener.js +1 -1
  108. package/dist-es5/interfaces/ai/INotificationManager.js +1 -1
  109. package/dist-es5/interfaces/ai/IPageViewPerformanceTelemetry.js +1 -1
  110. package/dist-es5/interfaces/ai/IPageViewTelemetry.js +1 -1
  111. package/dist-es5/interfaces/ai/IPartC.js +1 -1
  112. package/dist-es5/interfaces/ai/IPerfEvent.js +1 -1
  113. package/dist-es5/interfaces/ai/IPerfManager.js +1 -1
  114. package/dist-es5/interfaces/ai/IProcessTelemetryContext.js +1 -1
  115. package/dist-es5/interfaces/ai/IPropertiesPlugin.js +1 -1
  116. package/dist-es5/interfaces/ai/IRequestContext.js +1 -1
  117. package/dist-es5/interfaces/ai/IRequestTelemetry.js +1 -1
  118. package/dist-es5/interfaces/ai/ISenderPostManager.js +1 -1
  119. package/dist-es5/interfaces/ai/IStatsBeat.js +1 -1
  120. package/dist-es5/interfaces/ai/IStatsEventData.js +1 -1
  121. package/dist-es5/interfaces/ai/IStatsMgr.js +1 -1
  122. package/dist-es5/interfaces/ai/IStorageBuffer.js +1 -1
  123. package/dist-es5/interfaces/ai/ITelemetryContext.js +1 -1
  124. package/dist-es5/interfaces/ai/ITelemetryInitializers.js +1 -1
  125. package/dist-es5/interfaces/ai/ITelemetryItem.js +1 -1
  126. package/dist-es5/interfaces/ai/ITelemetryPlugin.js +1 -1
  127. package/dist-es5/interfaces/ai/ITelemetryPluginChain.js +1 -1
  128. package/dist-es5/interfaces/ai/ITelemetryUnloadState.js +1 -1
  129. package/dist-es5/interfaces/ai/ITelemetryUpdateState.js +1 -1
  130. package/dist-es5/interfaces/ai/IThrottleMgr.js +1 -1
  131. package/dist-es5/interfaces/ai/ITraceParent.js +1 -1
  132. package/dist-es5/interfaces/ai/ITraceProvider.js +1 -1
  133. package/dist-es5/interfaces/ai/ITraceTelemetry.js +1 -1
  134. package/dist-es5/interfaces/ai/IUnloadHook.js +1 -1
  135. package/dist-es5/interfaces/ai/IUnloadableComponent.js +1 -1
  136. package/dist-es5/interfaces/ai/IW3cTraceState.js +1 -1
  137. package/dist-es5/interfaces/ai/IXDomainRequest.js +1 -1
  138. package/dist-es5/interfaces/ai/IXHROverride.js +1 -1
  139. package/dist-es5/interfaces/ai/PartAExtensions.js +1 -1
  140. package/dist-es5/interfaces/ai/context/IApplication.js +1 -1
  141. package/dist-es5/interfaces/ai/context/IDevice.js +1 -1
  142. package/dist-es5/interfaces/ai/context/IInternal.js +1 -1
  143. package/dist-es5/interfaces/ai/context/ILocation.js +1 -1
  144. package/dist-es5/interfaces/ai/context/IOperatingSystem.js +1 -1
  145. package/dist-es5/interfaces/ai/context/ISample.js +1 -1
  146. package/dist-es5/interfaces/ai/context/ISession.js +1 -1
  147. package/dist-es5/interfaces/ai/context/ISessionManager.js +1 -1
  148. package/dist-es5/interfaces/ai/context/ITelemetryTrace.js +1 -1
  149. package/dist-es5/interfaces/ai/context/IUser.js +1 -1
  150. package/dist-es5/interfaces/ai/context/IWeb.js +1 -1
  151. package/dist-es5/interfaces/ai/contracts/AvailabilityData.js +1 -1
  152. package/dist-es5/interfaces/ai/contracts/ContextTagKeys.js +1 -1
  153. package/dist-es5/interfaces/ai/contracts/DataPointType.js +1 -1
  154. package/dist-es5/interfaces/ai/contracts/DependencyKind.js +1 -1
  155. package/dist-es5/interfaces/ai/contracts/DependencySourceType.js +1 -1
  156. package/dist-es5/interfaces/ai/contracts/IBase.js +1 -1
  157. package/dist-es5/interfaces/ai/contracts/IData.js +1 -1
  158. package/dist-es5/interfaces/ai/contracts/IDataPoint.js +1 -1
  159. package/dist-es5/interfaces/ai/contracts/IDomain.js +1 -1
  160. package/dist-es5/interfaces/ai/contracts/IEventData.js +1 -1
  161. package/dist-es5/interfaces/ai/contracts/IExceptionData.js +1 -1
  162. package/dist-es5/interfaces/ai/contracts/IExceptionDetails.js +1 -1
  163. package/dist-es5/interfaces/ai/contracts/IMessageData.js +1 -1
  164. package/dist-es5/interfaces/ai/contracts/IMetricData.js +1 -1
  165. package/dist-es5/interfaces/ai/contracts/IPageViewData.js +1 -1
  166. package/dist-es5/interfaces/ai/contracts/IPageViewPerfData.js +1 -1
  167. package/dist-es5/interfaces/ai/contracts/IRemoteDependencyData.js +1 -1
  168. package/dist-es5/interfaces/ai/contracts/IStackFrame.js +1 -1
  169. package/dist-es5/interfaces/ai/contracts/SeverityLevel.js +1 -1
  170. package/dist-es5/interfaces/ai/telemetry/IEnvelope.js +1 -1
  171. package/dist-es5/interfaces/ai/telemetry/ISerializable.js +1 -1
  172. package/dist-es5/interfaces/config/IConfigDefaults.js +1 -1
  173. package/dist-es5/interfaces/config/IDynamicConfigHandler.js +1 -1
  174. package/dist-es5/interfaces/config/IDynamicPropertyHandler.js +1 -1
  175. package/dist-es5/interfaces/config/IDynamicWatcher.js +1 -1
  176. package/dist-es5/interfaces/config/_IDynamicConfigHandlerState.js +1 -1
  177. package/dist-es5/interfaces/ext/DataModels.js +6 -0
  178. package/dist-es5/interfaces/ext/DataModels.js.map +1 -0
  179. package/dist-es5/interfaces/otel/IOTelApi.js +1 -1
  180. package/dist-es5/interfaces/otel/IOTelApiCtx.js +1 -1
  181. package/dist-es5/interfaces/otel/IOTelAttributes.js +1 -1
  182. package/dist-es5/interfaces/otel/attribute/IAttributeContainer.js +1 -1
  183. package/dist-es5/interfaces/otel/config/IOTelAttributeLimits.js +1 -1
  184. package/dist-es5/interfaces/otel/config/IOTelConfig.js +1 -1
  185. package/dist-es5/interfaces/otel/config/IOTelErrorHandlers.js +1 -1
  186. package/dist-es5/interfaces/otel/config/IOTelSpanLimits.js +1 -1
  187. package/dist-es5/interfaces/otel/config/IOTelTraceCfg.js +1 -1
  188. package/dist-es5/interfaces/otel/trace/IOTelSpan.js +1 -1
  189. package/dist-es5/interfaces/otel/trace/IOTelSpanContext.js +1 -1
  190. package/dist-es5/interfaces/otel/trace/IOTelSpanCtx.js +1 -1
  191. package/dist-es5/interfaces/otel/trace/IOTelSpanOptions.js +1 -1
  192. package/dist-es5/interfaces/otel/trace/IOTelSpanStatus.js +1 -1
  193. package/dist-es5/interfaces/otel/trace/IOTelTraceApi.js +1 -1
  194. package/dist-es5/interfaces/otel/trace/IOTelTraceState.js +1 -1
  195. package/dist-es5/interfaces/otel/trace/IOTelTracer.js +1 -1
  196. package/dist-es5/interfaces/otel/trace/IOTelTracerOptions.js +1 -1
  197. package/dist-es5/interfaces/otel/trace/IOTelTracerProvider.js +1 -1
  198. package/dist-es5/interfaces/otel/trace/IReadableSpan.js +1 -1
  199. package/dist-es5/internal/EventHelpers.js +5 -5
  200. package/dist-es5/internal/EventHelpers.js.map +1 -1
  201. package/dist-es5/internal/attributeHelpers.js +1 -1
  202. package/dist-es5/internal/commonUtils.js +1 -1
  203. package/dist-es5/internal/handleErrors.js +1 -1
  204. package/dist-es5/internal/noopHelpers.js +1 -1
  205. package/dist-es5/internal/timeHelpers.js +1 -1
  206. package/dist-es5/otel/api/OTelApi.js +1 -1
  207. package/dist-es5/otel/api/errors/OTelError.js +1 -1
  208. package/dist-es5/otel/api/errors/OTelInvalidAttributeError.js +1 -1
  209. package/dist-es5/otel/api/errors/OTelSpanError.js +1 -1
  210. package/dist-es5/otel/api/trace/span.js +4 -4
  211. package/dist-es5/otel/api/trace/span.js.map +1 -1
  212. package/dist-es5/otel/api/trace/spanContext.js +1 -1
  213. package/dist-es5/otel/api/trace/traceApi.js +1 -1
  214. package/dist-es5/otel/api/trace/traceProvider.js +3 -3
  215. package/dist-es5/otel/api/trace/traceProvider.js.map +1 -1
  216. package/dist-es5/otel/api/trace/traceState.js +1 -1
  217. package/dist-es5/otel/api/trace/tracer.js +1 -1
  218. package/dist-es5/otel/api/trace/tracerProvider.js +1 -1
  219. package/dist-es5/otel/api/trace/utils.js +1 -1
  220. package/dist-es5/otel/attribute/SemanticConventions.js +1 -1
  221. package/dist-es5/otel/attribute/attributeContainer.js +1 -1
  222. package/dist-es5/telemetry/ConnectionStringParser.js +1 -1
  223. package/dist-es5/telemetry/RequestResponseHeaders.js +1 -1
  224. package/dist-es5/telemetry/TelemetryItemCreator.js +1 -1
  225. package/dist-es5/telemetry/W3cTraceState.js +1 -1
  226. package/dist-es5/telemetry/ai/Common/Data.js +3 -2
  227. package/dist-es5/telemetry/ai/Common/Data.js.map +1 -1
  228. package/dist-es5/telemetry/ai/Common/DataPoint.js +1 -1
  229. package/dist-es5/telemetry/ai/Common/DataSanitizer.js +1 -1
  230. package/dist-es5/telemetry/ai/Common/Envelope.js +1 -1
  231. package/dist-es5/telemetry/ai/DataTypes.js +1 -1
  232. package/dist-es5/telemetry/ai/EnvelopeTypes.js +1 -1
  233. package/dist-es5/telemetry/ai/Event.js +1 -1
  234. package/dist-es5/telemetry/ai/Exception.js +1 -1
  235. package/dist-es5/telemetry/ai/Metric.js +1 -1
  236. package/dist-es5/telemetry/ai/PageView.js +1 -1
  237. package/dist-es5/telemetry/ai/PageViewPerformance.js +1 -1
  238. package/dist-es5/telemetry/ai/RemoteDependencyData.js +1 -1
  239. package/dist-es5/telemetry/ai/Trace.js +1 -1
  240. package/dist-es5/utils/CoreUtils.js +1 -1
  241. package/dist-es5/utils/DataCacheHelper.js +2 -2
  242. package/dist-es5/utils/DataCacheHelper.js.map +1 -1
  243. package/dist-es5/utils/DomHelperFuncs.js +1 -1
  244. package/dist-es5/utils/EnvUtils.js +16 -5
  245. package/dist-es5/utils/EnvUtils.js.map +1 -1
  246. package/dist-es5/utils/HelperFuncs.js +4 -4
  247. package/dist-es5/utils/HelperFuncs.js.map +1 -1
  248. package/dist-es5/utils/Offline.js +1 -1
  249. package/dist-es5/utils/RandomHelper.js +1 -1
  250. package/dist-es5/utils/StorageHelperFuncs.js +1 -1
  251. package/dist-es5/utils/TraceParent.js +5 -5
  252. package/dist-es5/utils/TraceParent.js.map +1 -1
  253. package/dist-es5/utils/UrlHelperFuncs.js +1 -1
  254. package/dist-es5/utils/Util.js +4 -4
  255. package/dist-es5/utils/Util.js.map +1 -1
  256. package/package.json +75 -78
  257. package/types/applicationinsights-core-js.d.ts +830 -11
  258. 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