@dynatrace/react-native-plugin 2.337.2 → 2.339.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/README.md +11 -5
- package/android/build.gradle +1 -1
- package/files/default.config.js +2 -0
- package/files/plugin.gradle +1 -1
- package/instrumentation/jsx/components/ClassComponent.js +2 -1
- package/instrumentation/libs/UserInteraction.js +1 -1
- package/instrumentation/libs/react-navigation/ReactNavigation.js +7 -4
- package/instrumentation/libs/withOnPressMonitoring.js +5 -2
- package/lib/core/Application.js +5 -2
- package/lib/core/Dynatrace.js +113 -44
- package/lib/core/DynatraceAction.js +78 -21
- package/lib/core/DynatraceInternal.js +19 -4
- package/lib/core/DynatraceRootAction.js +6 -3
- package/lib/core/DynatraceWebRequestTiming.js +25 -4
- package/lib/core/ErrorHandler.js +9 -2
- package/lib/core/logging/ConsoleLogger.js +17 -6
- package/lib/core/logging/LogMessages.js +764 -0
- package/lib/core/logging/LogType.js +9 -0
- package/lib/features/ui-interaction/IUserInteractionEvent.js +1 -1
- package/lib/features/ui-interaction/Runtime.js +7 -3
- package/lib/next/Dynatrace.js +42 -22
- package/lib/next/appstart/AppStartObserver.js +7 -2
- package/lib/next/events/EventPipeline.js +12 -5
- package/lib/next/events/EventTimestamp.js +5 -1
- package/lib/next/events/ExceptionEventData.js +1 -1
- package/lib/next/events/HttpRequestEventData.js +16 -7
- package/lib/next/events/modifier/BaseDataEventModifier.js +4 -1
- package/lib/next/events/modifier/EventModifierUtil.js +12 -5
- package/lib/next/events/modifier/ModifyEventValidation.js +20 -7
- package/lib/next/events/modifier/SendEventValidation.js +10 -4
- package/lib/next/events/modifier/StringLengthEventModifier.js +4 -1
- package/lib/next/events/modifier/ValueRestrictionModifier.js +5 -1
- package/lib/next/events/spec/EventSpecContstants.js +6 -2
- package/lib/next/provider/TimestampProvider.js +1 -1
- package/lib/next/util/TraceContextUtils.js +4 -3
- package/package.json +5 -4
- package/react-native-dynatrace.podspec +1 -1
- package/scripts/Config.js +1 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LogType = void 0;
|
|
4
|
+
var LogType;
|
|
5
|
+
(function (LogType) {
|
|
6
|
+
LogType["Info"] = "INFO";
|
|
7
|
+
LogType["Warning"] = "WARNING";
|
|
8
|
+
LogType["Error"] = "ERROR";
|
|
9
|
+
})(LogType = exports.LogType || (exports.LogType = {}));
|
|
@@ -8,7 +8,7 @@ var UserInteractionEventKey;
|
|
|
8
8
|
UserInteractionEventKey["UiElementComponents"] = "ui_element.components";
|
|
9
9
|
UserInteractionEventKey["UiElementId"] = "ui_element.id";
|
|
10
10
|
UserInteractionEventKey["UiElementNameOrigin"] = "ui_element.name_origin";
|
|
11
|
-
UserInteractionEventKey["
|
|
11
|
+
UserInteractionEventKey["InteractionName"] = "interaction.name";
|
|
12
12
|
UserInteractionEventKey["UiElementResponderDetectedName"] = "ui_element.responder.detected_name";
|
|
13
13
|
UserInteractionEventKey["UiElementResponderComponents"] = "ui_element.responder.components";
|
|
14
14
|
UserInteractionEventKey["UiElementResponderOriginName"] = "ui_element.responder.name_origin";
|
|
@@ -7,6 +7,7 @@ const react_native_1 = require("react-native");
|
|
|
7
7
|
const EventPipeline_1 = require("../../../lib/next/events/EventPipeline");
|
|
8
8
|
const EventTimestamp_1 = require("../../../lib/next/events/EventTimestamp");
|
|
9
9
|
const ConsoleLogger_1 = require("../../../lib/core/logging/ConsoleLogger");
|
|
10
|
+
const LogMessages_1 = require("../../../lib/core/logging/LogMessages");
|
|
10
11
|
const IUserInteractionEvent_1 = require("./IUserInteractionEvent");
|
|
11
12
|
const ConfigurationHandler_1 = require("../../../lib/core/configuration/ConfigurationHandler");
|
|
12
13
|
const RuntimeConfigurationObserver_1 = require("../../../lib/next/configuration/RuntimeConfigurationObserver");
|
|
@@ -130,7 +131,7 @@ function readGlobalPrefix() {
|
|
|
130
131
|
}
|
|
131
132
|
catch (e) {
|
|
132
133
|
const errorMsg = e instanceof Error ? e.stack || e.message : String(e);
|
|
133
|
-
logger.debug(
|
|
134
|
+
logger.debug(LogMessages_1.LogMessage.RESOLVE_GLOBAL_PREFIX_FAILED, { errorMsg });
|
|
134
135
|
}
|
|
135
136
|
}
|
|
136
137
|
return [];
|
|
@@ -329,7 +330,7 @@ function _an_flat(e) {
|
|
|
329
330
|
[IUserInteractionEvent_1.UserInteractionEventKey.UiElementDetectedName]: (_c = (_b = e === null || e === void 0 ? void 0 : e.ui_element) === null || _b === void 0 ? void 0 : _b.detected_name) !== null && _c !== void 0 ? _c : null,
|
|
330
331
|
[IUserInteractionEvent_1.UserInteractionEventKey.UiElementComponents]: normalizedUiComponents,
|
|
331
332
|
[IUserInteractionEvent_1.UserInteractionEventKey.UiElementId]: (_e = (_d = e === null || e === void 0 ? void 0 : e.ui_element) === null || _d === void 0 ? void 0 : _d.id) !== null && _e !== void 0 ? _e : null,
|
|
332
|
-
[IUserInteractionEvent_1.UserInteractionEventKey.
|
|
333
|
+
[IUserInteractionEvent_1.UserInteractionEventKey.InteractionName]: _an_interaction_type(e),
|
|
333
334
|
positions: Array.isArray(e === null || e === void 0 ? void 0 : e.positions)
|
|
334
335
|
? e.positions.map((pos) => ({
|
|
335
336
|
x: Math.trunc(pos.x),
|
|
@@ -739,7 +740,10 @@ function AnalyticsRoot({ name = 'App', label, log, prefix, config, children, })
|
|
|
739
740
|
var _a, _b, _c, _d, _e;
|
|
740
741
|
const cfg = (0, react_1.useMemo)(() => config !== null && config !== void 0 ? config : {}, [config]);
|
|
741
742
|
const fileConfiguredUiEnabled = ((_a = cfg === null || cfg === void 0 ? void 0 : cfg.touch) === null || _a === void 0 ? void 0 : _a.enabled) === true;
|
|
742
|
-
const baseLogger = log ||
|
|
743
|
+
const baseLogger = log ||
|
|
744
|
+
((e) => logger.debug(LogMessages_1.LogMessage.UI_INTERACTION_DEBUG, {
|
|
745
|
+
event: JSON.stringify(e),
|
|
746
|
+
}));
|
|
743
747
|
React.useEffect(() => {
|
|
744
748
|
ConfigurationHandler_1.ConfigurationHandler.setUserInteractionEnabledLastKnownGood(fileConfiguredUiEnabled);
|
|
745
749
|
uiDebugLog('AnalyticsRoot initialized fallback from config', {
|
package/lib/next/Dynatrace.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Dynatrace = void 0;
|
|
4
4
|
const DynatraceBridge_1 = require("../core/DynatraceBridge");
|
|
5
5
|
const ConsoleLogger_1 = require("../core/logging/ConsoleLogger");
|
|
6
|
+
const LogMessages_1 = require("../core/logging/LogMessages");
|
|
6
7
|
const ConfigurationHandler_1 = require("../core/configuration/ConfigurationHandler");
|
|
7
8
|
const EventCreator_1 = require("./events/EventCreator");
|
|
8
9
|
const EventPipeline_1 = require("./events/EventPipeline");
|
|
@@ -30,43 +31,48 @@ class DynatraceImpl {
|
|
|
30
31
|
}
|
|
31
32
|
addEventModifier(eventModifier) {
|
|
32
33
|
if (!(0, DynatraceArgValidators_1.isEventModifier)(eventModifier)) {
|
|
33
|
-
this.logger.info(
|
|
34
|
+
this.logger.info(LogMessages_1.LogMessage.ADD_EVENT_MODIFIER_INVALID_TYPE);
|
|
34
35
|
return {
|
|
35
36
|
modifyEvent: (event) => event,
|
|
36
37
|
};
|
|
37
38
|
}
|
|
38
|
-
this.logger.debug(
|
|
39
|
+
this.logger.debug(LogMessages_1.LogMessage.ADD_EVENT_MODIFIER);
|
|
39
40
|
return EventPipeline_1.EventPipeline.addEventModifier(eventModifier);
|
|
40
41
|
}
|
|
41
42
|
removeEventModifier(eventModifier) {
|
|
42
43
|
if (!(0, DynatraceArgValidators_1.isEventModifier)(eventModifier)) {
|
|
43
|
-
this.logger.info(
|
|
44
|
+
this.logger.info(LogMessages_1.LogMessage.REMOVE_EVENT_MODIFIER_INVALID_TYPE);
|
|
44
45
|
return false;
|
|
45
46
|
}
|
|
46
|
-
this.logger.debug(
|
|
47
|
+
this.logger.debug(LogMessages_1.LogMessage.REMOVE_EVENT_MODIFIER);
|
|
47
48
|
return EventPipeline_1.EventPipeline.removeEventModifier(eventModifier);
|
|
48
49
|
}
|
|
49
50
|
startView(name) {
|
|
50
51
|
if (typeof name !== 'string') {
|
|
51
|
-
this.logger.info(
|
|
52
|
+
this.logger.info(LogMessages_1.LogMessage.START_VIEW_NAME_NOT_STRING);
|
|
52
53
|
return;
|
|
53
54
|
}
|
|
54
|
-
this.logger.debug(
|
|
55
|
+
this.logger.debug(LogMessages_1.LogMessage.START_VIEW, { name });
|
|
55
56
|
if (name != null && name.length > 0) {
|
|
56
57
|
DynatraceBridge_1.DynatraceNative.startView(name);
|
|
57
58
|
}
|
|
58
59
|
else {
|
|
59
|
-
this.logger.debug(
|
|
60
|
+
this.logger.debug(LogMessages_1.LogMessage.START_VIEW_NAME_EMPTY, { name });
|
|
60
61
|
}
|
|
61
62
|
}
|
|
62
63
|
reportCrash(crash, isApiReported, isFatal = true) {
|
|
63
|
-
this.logger.debug(
|
|
64
|
+
this.logger.debug(LogMessages_1.LogMessage.REPORT_CRASH_NEXT, {
|
|
65
|
+
crash: JSON.stringify(crash),
|
|
66
|
+
isFatal,
|
|
67
|
+
});
|
|
64
68
|
const decision = ConfigurationHandler_1.ConfigurationHandler.getThirdGenCrashReportingDecision();
|
|
65
69
|
if (!decision.allowed) {
|
|
66
70
|
const reasonText = decision.reason
|
|
67
71
|
? DECISION_REASON_TEXT[decision.reason]
|
|
68
72
|
: 'Unknown reason';
|
|
69
|
-
this.logger.debug(
|
|
73
|
+
this.logger.debug(LogMessages_1.LogMessage.THIRD_GEN_CRASH_SUPPRESSED, {
|
|
74
|
+
reason: reasonText,
|
|
75
|
+
});
|
|
70
76
|
return;
|
|
71
77
|
}
|
|
72
78
|
const eventTimestamp = new EventTimestamp_1.EventTimestamp(this.timestampProvider);
|
|
@@ -78,7 +84,10 @@ class DynatraceImpl {
|
|
|
78
84
|
EventPipeline_1.EventPipeline.insertEvent(event);
|
|
79
85
|
}
|
|
80
86
|
reportErrorCode(errorName, errorCode, isApiReported) {
|
|
81
|
-
this.logger.debug(
|
|
87
|
+
this.logger.debug(LogMessages_1.LogMessage.REPORT_ERROR_CODE, {
|
|
88
|
+
errorName,
|
|
89
|
+
errorCode,
|
|
90
|
+
});
|
|
82
91
|
const eventTimestamp = new EventTimestamp_1.EventTimestamp(this.timestampProvider);
|
|
83
92
|
const event = Object.assign(Object.assign({}, (0, EventCreator_1.createErrorCodeEvent)(errorName, errorCode)), eventTimestamp.getEventTimeInfo());
|
|
84
93
|
if (isApiReported) {
|
|
@@ -88,7 +97,9 @@ class DynatraceImpl {
|
|
|
88
97
|
EventPipeline_1.EventPipeline.insertEvent(event);
|
|
89
98
|
}
|
|
90
99
|
reportError(error, isApiReported) {
|
|
91
|
-
this.logger.debug(
|
|
100
|
+
this.logger.debug(LogMessages_1.LogMessage.REPORT_ERROR_NEXT, {
|
|
101
|
+
error: JSON.stringify(error),
|
|
102
|
+
});
|
|
92
103
|
const eventTimestamp = new EventTimestamp_1.EventTimestamp(this.timestampProvider);
|
|
93
104
|
const event = Object.assign(Object.assign({}, (0, EventCreator_1.createErrorEvent)(error.name, error.message, error.stack)), eventTimestamp.getEventTimeInfo());
|
|
94
105
|
if (isApiReported) {
|
|
@@ -99,10 +110,10 @@ class DynatraceImpl {
|
|
|
99
110
|
}
|
|
100
111
|
sendExceptionEvent(exceptionEventData) {
|
|
101
112
|
if (!(exceptionEventData instanceof ExceptionEventData_1.default)) {
|
|
102
|
-
this.logger.info(
|
|
113
|
+
this.logger.info(LogMessages_1.LogMessage.SEND_EXCEPTION_EVENT_INVALID_TYPE);
|
|
103
114
|
return;
|
|
104
115
|
}
|
|
105
|
-
this.logger.debug(
|
|
116
|
+
this.logger.debug(LogMessages_1.LogMessage.SEND_EXCEPTION_EVENT);
|
|
106
117
|
const eventValidated = exceptionEventData.toJSON();
|
|
107
118
|
if (eventValidated !== null) {
|
|
108
119
|
EventPipeline_1.EventPipeline.insertEvent(eventValidated);
|
|
@@ -110,10 +121,10 @@ class DynatraceImpl {
|
|
|
110
121
|
}
|
|
111
122
|
sendEvent(eventData) {
|
|
112
123
|
if (!(eventData instanceof EventData_1.default)) {
|
|
113
|
-
this.logger.info(
|
|
124
|
+
this.logger.info(LogMessages_1.LogMessage.SEND_EVENT_INVALID_TYPE);
|
|
114
125
|
return;
|
|
115
126
|
}
|
|
116
|
-
this.logger.debug(
|
|
127
|
+
this.logger.debug(LogMessages_1.LogMessage.SEND_EVENT);
|
|
117
128
|
const eventValidated = eventData.toJSON();
|
|
118
129
|
if (eventValidated !== null) {
|
|
119
130
|
EventPipeline_1.EventPipeline.insertEvent(eventValidated);
|
|
@@ -121,10 +132,10 @@ class DynatraceImpl {
|
|
|
121
132
|
}
|
|
122
133
|
sendSessionPropertyEvent(sessionPropertyEventData) {
|
|
123
134
|
if (!(sessionPropertyEventData instanceof SessionPropertyEventData_1.default)) {
|
|
124
|
-
this.logger.info(
|
|
135
|
+
this.logger.info(LogMessages_1.LogMessage.SEND_SESSION_PROPERTY_EVENT_INVALID_TYPE);
|
|
125
136
|
return;
|
|
126
137
|
}
|
|
127
|
-
this.logger.debug(
|
|
138
|
+
this.logger.debug(LogMessages_1.LogMessage.SEND_SESSION_PROPERTY_EVENT);
|
|
128
139
|
const eventValidated = sessionPropertyEventData.toJSON();
|
|
129
140
|
if (eventValidated !== null) {
|
|
130
141
|
EventPipeline_1.EventPipeline.insertEvent(eventValidated);
|
|
@@ -132,10 +143,10 @@ class DynatraceImpl {
|
|
|
132
143
|
}
|
|
133
144
|
sendHttpRequestEvent(httpRequestEvent) {
|
|
134
145
|
if (!(httpRequestEvent instanceof HttpRequestEventData_1.default)) {
|
|
135
|
-
this.logger.info(
|
|
146
|
+
this.logger.info(LogMessages_1.LogMessage.SEND_HTTP_REQUEST_EVENT_INVALID_TYPE);
|
|
136
147
|
return;
|
|
137
148
|
}
|
|
138
|
-
this.logger.debug(
|
|
149
|
+
this.logger.debug(LogMessages_1.LogMessage.SEND_HTTP_REQUEST_EVENT);
|
|
139
150
|
const sanitizedEvent = httpRequestEvent.toJSON();
|
|
140
151
|
if (sanitizedEvent !== null) {
|
|
141
152
|
EventPipeline_1.EventPipeline.insertEvent(sanitizedEvent);
|
|
@@ -145,10 +156,16 @@ class DynatraceImpl {
|
|
|
145
156
|
let traceparent = existingTraceparent;
|
|
146
157
|
let tracestate = existingTracestate;
|
|
147
158
|
if (!ConfigurationHandler_1.ConfigurationHandler.isConfigurationAvailable()) {
|
|
148
|
-
this.logger.info(
|
|
159
|
+
this.logger.info(LogMessages_1.LogMessage.TRACE_CONTEXT_NOT_STARTED, {
|
|
160
|
+
existingTraceparent: existingTraceparent !== null && existingTraceparent !== void 0 ? existingTraceparent : 'undefined',
|
|
161
|
+
existingTracestate: existingTracestate !== null && existingTracestate !== void 0 ? existingTracestate : 'undefined',
|
|
162
|
+
});
|
|
149
163
|
return undefined;
|
|
150
164
|
}
|
|
151
|
-
this.logger.debug(
|
|
165
|
+
this.logger.debug(LogMessages_1.LogMessage.TRACE_CONTEXT_GENERATED, {
|
|
166
|
+
existingTraceparent: existingTraceparent !== null && existingTraceparent !== void 0 ? existingTraceparent : 'undefined',
|
|
167
|
+
existingTracestate: existingTracestate !== null && existingTracestate !== void 0 ? existingTracestate : 'undefined',
|
|
168
|
+
});
|
|
152
169
|
let parsedTraceparent = traceparent === undefined
|
|
153
170
|
? undefined
|
|
154
171
|
: (0, TraceContextUtils_1.parseTraceparent)(traceparent);
|
|
@@ -159,7 +176,10 @@ class DynatraceImpl {
|
|
|
159
176
|
}
|
|
160
177
|
tracestate = (0, TraceContextUtils_1.generateTracestate)(parsedTraceparent.parentId, tracestate);
|
|
161
178
|
if (tracestate === undefined) {
|
|
162
|
-
this.logger.info(
|
|
179
|
+
this.logger.info(LogMessages_1.LogMessage.TRACE_CONTEXT_DISABLED_OR_INVALID, {
|
|
180
|
+
existingTraceparent: existingTraceparent !== null && existingTraceparent !== void 0 ? existingTraceparent : 'undefined',
|
|
181
|
+
existingTracestate: existingTracestate !== null && existingTracestate !== void 0 ? existingTracestate : 'undefined',
|
|
182
|
+
});
|
|
163
183
|
return undefined;
|
|
164
184
|
}
|
|
165
185
|
return {
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.AppStartObserver = void 0;
|
|
4
4
|
const EventCreator_1 = require("../events/EventCreator");
|
|
5
5
|
const ConsoleLogger_1 = require("../../core/logging/ConsoleLogger");
|
|
6
|
+
const LogMessages_1 = require("../../core/logging/LogMessages");
|
|
6
7
|
const EventPipeline_1 = require("../events/EventPipeline");
|
|
7
8
|
const DynatraceEventBus_1 = require("../DynatraceEventBus");
|
|
8
9
|
class AppStartObserverImpl {
|
|
@@ -16,13 +17,17 @@ class AppStartObserverImpl {
|
|
|
16
17
|
setupNativeEventEmitter() {
|
|
17
18
|
const emitter = (0, DynatraceEventBus_1.createEmitterNativeOnly)();
|
|
18
19
|
emitter.addListener(this.EMIT_APP_START, (data) => {
|
|
19
|
-
this.logger.debug(
|
|
20
|
+
this.logger.debug(LogMessages_1.LogMessage.APP_START_EMITTER, {
|
|
21
|
+
data: JSON.stringify(data),
|
|
22
|
+
});
|
|
20
23
|
const appStartEvent = (0, EventCreator_1.createAppStartEvent)(data);
|
|
21
24
|
if (appStartEvent != null) {
|
|
22
25
|
EventPipeline_1.EventPipeline.insertEvent(Object.assign({}, appStartEvent));
|
|
23
26
|
}
|
|
24
27
|
else {
|
|
25
|
-
this.logger.debug(
|
|
28
|
+
this.logger.debug(LogMessages_1.LogMessage.APP_START_EMITTER_IGNORED, {
|
|
29
|
+
data: JSON.stringify(data),
|
|
30
|
+
});
|
|
26
31
|
}
|
|
27
32
|
});
|
|
28
33
|
}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.EventPipeline = void 0;
|
|
4
4
|
const DynatraceBridge_1 = require("../../core/DynatraceBridge");
|
|
5
5
|
const ConsoleLogger_1 = require("../../core/logging/ConsoleLogger");
|
|
6
|
+
const LogMessages_1 = require("../../core/logging/LogMessages");
|
|
6
7
|
const ConfigurationHandler_1 = require("../../core/configuration/ConfigurationHandler");
|
|
7
8
|
const BaseDataEventModifier_1 = require("./modifier/BaseDataEventModifier");
|
|
8
9
|
const ValueRestrictionModifier_1 = require("./modifier/ValueRestrictionModifier");
|
|
@@ -38,10 +39,14 @@ class EventPipelineImpl {
|
|
|
38
39
|
const reasonText = decision.reason
|
|
39
40
|
? DECISION_REASON_TEXT[decision.reason]
|
|
40
41
|
: 'Unknown reason';
|
|
41
|
-
this.logger.debug(
|
|
42
|
+
this.logger.debug(LogMessages_1.LogMessage.THIRD_GEN_EVENT_SUPPRESSED, {
|
|
43
|
+
reason: reasonText,
|
|
44
|
+
});
|
|
42
45
|
return;
|
|
43
46
|
}
|
|
44
|
-
this.logger.debug(
|
|
47
|
+
this.logger.debug(LogMessages_1.LogMessage.EVENT_PIPELINE_INSERT_EVENT, {
|
|
48
|
+
event: JSON.stringify(event),
|
|
49
|
+
});
|
|
45
50
|
let isDiscarded = false;
|
|
46
51
|
for (const modifier of this.getEventModifierChain()) {
|
|
47
52
|
try {
|
|
@@ -61,7 +66,9 @@ class EventPipelineImpl {
|
|
|
61
66
|
}
|
|
62
67
|
}
|
|
63
68
|
if (event != null && !isDiscarded) {
|
|
64
|
-
this.logger.debug(
|
|
69
|
+
this.logger.debug(LogMessages_1.LogMessage.EVENT_PIPELINE_FORWARD_EVENT, {
|
|
70
|
+
event: JSON.stringify(event),
|
|
71
|
+
});
|
|
65
72
|
if (event["characteristics.has_app_start"] === true) {
|
|
66
73
|
DynatraceBridge_1.DynatraceNative.forwardAppStartEvent(event, EventSpecContstants_1.ALL_APP_START_KEYS);
|
|
67
74
|
}
|
|
@@ -71,11 +78,11 @@ class EventPipelineImpl {
|
|
|
71
78
|
}
|
|
72
79
|
}
|
|
73
80
|
addEventModifier(eventModifier) {
|
|
74
|
-
this.logger.debug(
|
|
81
|
+
this.logger.debug(LogMessages_1.LogMessage.ADD_EVENT_MODIFIER);
|
|
75
82
|
return this.customEventModifierChain.addEventModifier(eventModifier);
|
|
76
83
|
}
|
|
77
84
|
removeEventModifier(eventModifier) {
|
|
78
|
-
this.logger.debug(
|
|
85
|
+
this.logger.debug(LogMessages_1.LogMessage.REMOVE_EVENT_MODIFIER);
|
|
79
86
|
return this.customEventModifierChain.removeEventModifier(eventModifier);
|
|
80
87
|
}
|
|
81
88
|
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.EventTimestamp = void 0;
|
|
4
4
|
const ConsoleLogger_1 = require("../../core/logging/ConsoleLogger");
|
|
5
|
+
const LogMessages_1 = require("../../core/logging/LogMessages");
|
|
5
6
|
class EventTimestamp {
|
|
6
7
|
constructor(timestampProvider) {
|
|
7
8
|
this.duration = 0;
|
|
@@ -20,7 +21,10 @@ class EventTimestamp {
|
|
|
20
21
|
this.duration = endTimestamp - this.startTimestamp;
|
|
21
22
|
}
|
|
22
23
|
else {
|
|
23
|
-
this.logger.debug(
|
|
24
|
+
this.logger.debug(LogMessages_1.LogMessage.EVENT_TIMESTAMP_INVALID, {
|
|
25
|
+
endTimestamp,
|
|
26
|
+
startTimestamp: this.startTimestamp,
|
|
27
|
+
});
|
|
24
28
|
}
|
|
25
29
|
}
|
|
26
30
|
}
|
|
@@ -13,7 +13,7 @@ class ExceptionEventData {
|
|
|
13
13
|
return this;
|
|
14
14
|
}
|
|
15
15
|
toJSON() {
|
|
16
|
-
const sanitizedEventProperties = SendEventValidation_1.
|
|
16
|
+
const sanitizedEventProperties = SendEventValidation_1.SendExceptionEventValidation.modifyEvent(Object.assign({}, this.rawEventProperties));
|
|
17
17
|
if (sanitizedEventProperties === null) {
|
|
18
18
|
return null;
|
|
19
19
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const ConsoleLogger_1 = require("../../core/logging/ConsoleLogger");
|
|
4
|
+
const LogMessages_1 = require("../../core/logging/LogMessages");
|
|
4
5
|
const TimestampProvider_1 = require("../provider/TimestampProvider");
|
|
5
6
|
const SendEventValidation_1 = require("./modifier/SendEventValidation");
|
|
6
7
|
const EventModifierUtil_1 = require("./modifier/EventModifierUtil");
|
|
@@ -56,7 +57,7 @@ class HttpRequestEventData {
|
|
|
56
57
|
}
|
|
57
58
|
toJSON() {
|
|
58
59
|
if (!this.hasValidMandatoryAttributes()) {
|
|
59
|
-
logger.debug(
|
|
60
|
+
logger.debug(LogMessages_1.LogMessage.HTTP_REQUEST_DROPPED_INVALID);
|
|
60
61
|
return null;
|
|
61
62
|
}
|
|
62
63
|
const sanitizedDuration = this.sanitizeDuration();
|
|
@@ -99,11 +100,15 @@ class HttpRequestEventData {
|
|
|
99
100
|
hasValidMandatoryAttributes() {
|
|
100
101
|
let isValid = true;
|
|
101
102
|
if (this.isInvalidUrl(this.url)) {
|
|
102
|
-
logger.debug(
|
|
103
|
+
logger.debug(LogMessages_1.LogMessage.HTTP_REQUEST_INVALID_URL, {
|
|
104
|
+
url: this.url,
|
|
105
|
+
});
|
|
103
106
|
isValid = false;
|
|
104
107
|
}
|
|
105
108
|
if (!HttpRequestEventData.allowedRequestMethods.includes(this.requestMethod)) {
|
|
106
|
-
logger.debug(
|
|
109
|
+
logger.debug(LogMessages_1.LogMessage.HTTP_REQUEST_INVALID_METHOD, {
|
|
110
|
+
requestMethod: this.requestMethod,
|
|
111
|
+
});
|
|
107
112
|
isValid = false;
|
|
108
113
|
}
|
|
109
114
|
return isValid;
|
|
@@ -122,7 +127,7 @@ class HttpRequestEventData {
|
|
|
122
127
|
}
|
|
123
128
|
sanitizeStatusCode() {
|
|
124
129
|
if (this.statusCode !== undefined && this.statusCode < 0) {
|
|
125
|
-
logger.debug(
|
|
130
|
+
logger.debug(LogMessages_1.LogMessage.HTTP_REQUEST_INVALID_STATUS_CODE);
|
|
126
131
|
this.hasDroppedProperties = true;
|
|
127
132
|
return undefined;
|
|
128
133
|
}
|
|
@@ -130,7 +135,7 @@ class HttpRequestEventData {
|
|
|
130
135
|
}
|
|
131
136
|
sanitizeDuration() {
|
|
132
137
|
if (!Number.isFinite(this.duration) || this.duration < 0) {
|
|
133
|
-
logger.debug(
|
|
138
|
+
logger.debug(LogMessages_1.LogMessage.HTTP_REQUEST_INVALID_DURATION);
|
|
134
139
|
this.hasDroppedProperties = true;
|
|
135
140
|
return 0;
|
|
136
141
|
}
|
|
@@ -138,7 +143,9 @@ class HttpRequestEventData {
|
|
|
138
143
|
}
|
|
139
144
|
sanitizeBytesSent() {
|
|
140
145
|
if (this.bytesSent && this.bytesSent < 0) {
|
|
141
|
-
logger.debug(
|
|
146
|
+
logger.debug(LogMessages_1.LogMessage.HTTP_REQUEST_INVALID_BYTES_SENT, {
|
|
147
|
+
bytesSent: this.bytesSent,
|
|
148
|
+
});
|
|
142
149
|
this.hasDroppedProperties = true;
|
|
143
150
|
return undefined;
|
|
144
151
|
}
|
|
@@ -146,7 +153,9 @@ class HttpRequestEventData {
|
|
|
146
153
|
}
|
|
147
154
|
sanitizeBytesReceived() {
|
|
148
155
|
if (this.bytesReceived && this.bytesReceived < 0) {
|
|
149
|
-
logger.debug(
|
|
156
|
+
logger.debug(LogMessages_1.LogMessage.HTTP_REQUEST_INVALID_BYTES_RECEIVED, {
|
|
157
|
+
bytesReceived: this.bytesReceived,
|
|
158
|
+
});
|
|
150
159
|
this.hasDroppedProperties = true;
|
|
151
160
|
return undefined;
|
|
152
161
|
}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.BaseDataEventModifier = void 0;
|
|
4
4
|
const ConfigurationHandler_1 = require("../../../core/configuration/ConfigurationHandler");
|
|
5
5
|
const ConsoleLogger_1 = require("../../../core/logging/ConsoleLogger");
|
|
6
|
+
const LogMessages_1 = require("../../../core/logging/LogMessages");
|
|
6
7
|
const EventModifierUtil_1 = require("./EventModifierUtil");
|
|
7
8
|
class BaseDataEventModifier {
|
|
8
9
|
constructor() {
|
|
@@ -10,7 +11,9 @@ class BaseDataEventModifier {
|
|
|
10
11
|
}
|
|
11
12
|
modifyEvent(event) {
|
|
12
13
|
if (event == null) {
|
|
13
|
-
this.logger.debug(
|
|
14
|
+
this.logger.debug(LogMessages_1.LogMessage.MODIFY_EVENT_NULL, {
|
|
15
|
+
event: JSON.stringify(event),
|
|
16
|
+
});
|
|
14
17
|
return event;
|
|
15
18
|
}
|
|
16
19
|
event["dt.rum.event.source.type"] = 'react_native';
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.isKeyCustomProperty = exports.isNotObject = exports.doesNotExceedKeySize = exports.restrictingValueSize = exports.isKeySyntaxAllowed = exports.getReactNativeVersion = exports.containEventPropertiesInArray = exports.addIsApiReported = exports.flagEventProperties = exports.containEventProperties = exports.containSessionProperties = exports.trimString = exports.isObject = void 0;
|
|
4
4
|
const ConsoleLogger_1 = require("../../../core/logging/ConsoleLogger");
|
|
5
|
+
const LogMessages_1 = require("../../../core/logging/LogMessages");
|
|
5
6
|
const EventSpecContstants_1 = require("../spec/EventSpecContstants");
|
|
6
7
|
const logger = new ConsoleLogger_1.ConsoleLogger('EventModifierUtil');
|
|
7
8
|
const isObject = (obj) => {
|
|
@@ -17,7 +18,7 @@ const trimString = (key, str, maxLength) => {
|
|
|
17
18
|
return stringToTrim;
|
|
18
19
|
}
|
|
19
20
|
else {
|
|
20
|
-
logger.debug(
|
|
21
|
+
logger.debug(LogMessages_1.LogMessage.TRIM_STRING_VALUE_LIMITED, { key, maxLength });
|
|
21
22
|
return stringToTrim.substring(0, maxLength);
|
|
22
23
|
}
|
|
23
24
|
};
|
|
@@ -75,7 +76,7 @@ const getReactNativeVersion = () => {
|
|
|
75
76
|
}
|
|
76
77
|
catch (_a) { }
|
|
77
78
|
}
|
|
78
|
-
logger.debug(
|
|
79
|
+
logger.debug(LogMessages_1.LogMessage.REACT_NATIVE_VERSION_UNKNOWN);
|
|
79
80
|
return undefined;
|
|
80
81
|
};
|
|
81
82
|
exports.getReactNativeVersion = getReactNativeVersion;
|
|
@@ -83,7 +84,7 @@ const isKeySyntaxAllowed = (entry) => {
|
|
|
83
84
|
const [key] = entry;
|
|
84
85
|
const rV = EventSpecContstants_1.KEY_NAME_REGEX.test(key);
|
|
85
86
|
if (!rV) {
|
|
86
|
-
logger.debug(
|
|
87
|
+
logger.debug(LogMessages_1.LogMessage.KEY_SYNTAX_INVALID, { key });
|
|
87
88
|
}
|
|
88
89
|
return rV;
|
|
89
90
|
};
|
|
@@ -92,7 +93,10 @@ const restrictingValueSize = (entry) => {
|
|
|
92
93
|
const [key, value] = entry;
|
|
93
94
|
if (typeof value === 'string' &&
|
|
94
95
|
value.length > EventSpecContstants_1.MAX_CUSTOM_EVENT_VALUE_LENGTH) {
|
|
95
|
-
logger.debug(
|
|
96
|
+
logger.debug(LogMessages_1.LogMessage.VALUE_SIZE_LIMITED, {
|
|
97
|
+
key,
|
|
98
|
+
maxLength: EventSpecContstants_1.MAX_CUSTOM_EVENT_VALUE_LENGTH,
|
|
99
|
+
});
|
|
96
100
|
entry[1] = value.slice(0, EventSpecContstants_1.MAX_CUSTOM_EVENT_VALUE_LENGTH);
|
|
97
101
|
}
|
|
98
102
|
};
|
|
@@ -102,7 +106,10 @@ const doesNotExceedKeySize = ([key]) => {
|
|
|
102
106
|
return true;
|
|
103
107
|
}
|
|
104
108
|
else {
|
|
105
|
-
logger.debug(
|
|
109
|
+
logger.debug(LogMessages_1.LogMessage.KEY_SIZE_EXCEEDED, {
|
|
110
|
+
key,
|
|
111
|
+
maxLength: EventSpecContstants_1.MAX_CUSTOM_EVENT_KEY_LENGTH,
|
|
112
|
+
});
|
|
106
113
|
return false;
|
|
107
114
|
}
|
|
108
115
|
};
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ModifyEventValidation = void 0;
|
|
4
4
|
const ConsoleLogger_1 = require("../../../core/logging/ConsoleLogger");
|
|
5
|
+
const LogMessages_1 = require("../../../core/logging/LogMessages");
|
|
5
6
|
const EventSpecContstants_1 = require("../spec/EventSpecContstants");
|
|
6
7
|
const EventModifierUtil_1 = require("./EventModifierUtil");
|
|
7
8
|
class ModifyEventValidation {
|
|
@@ -55,13 +56,17 @@ class ModifyEventValidation {
|
|
|
55
56
|
isCustomPropertiesAllowed(key, hasSessionPropertyCharacteristics) {
|
|
56
57
|
if (hasSessionPropertyCharacteristics) {
|
|
57
58
|
if (key.startsWith(`${"event_properties"}.`)) {
|
|
58
|
-
this.logger.debug(
|
|
59
|
+
this.logger.debug(LogMessages_1.LogMessage.EVENT_PROPERTIES_FILTERED, {
|
|
60
|
+
key,
|
|
61
|
+
});
|
|
59
62
|
return false;
|
|
60
63
|
}
|
|
61
64
|
}
|
|
62
65
|
else {
|
|
63
66
|
if (key.startsWith(`${"session_properties"}.`)) {
|
|
64
|
-
this.logger.debug(
|
|
67
|
+
this.logger.debug(LogMessages_1.LogMessage.SESSION_PROPERTIES_FILTERED, {
|
|
68
|
+
key,
|
|
69
|
+
});
|
|
65
70
|
return false;
|
|
66
71
|
}
|
|
67
72
|
}
|
|
@@ -78,16 +83,22 @@ class ModifyEventValidation {
|
|
|
78
83
|
return false;
|
|
79
84
|
}
|
|
80
85
|
}
|
|
81
|
-
this.logger.debug(
|
|
86
|
+
this.logger.debug(LogMessages_1.LogMessage.KEY_NAME_FORBIDDEN, { key });
|
|
82
87
|
return true;
|
|
83
88
|
}
|
|
84
89
|
sanitizeUserEnrichedEvent(originalEvent, userEnrichedEvent, externalException) {
|
|
85
90
|
if (!(0, EventModifierUtil_1.isObject)(userEnrichedEvent)) {
|
|
86
|
-
this.logger.debug(
|
|
91
|
+
this.logger.debug(LogMessages_1.LogMessage.SANITIZE_EVENT_NOT_OBJECT, {
|
|
92
|
+
originalEvent: JSON.stringify(originalEvent),
|
|
93
|
+
userEnrichedEvent: JSON.stringify(userEnrichedEvent),
|
|
94
|
+
});
|
|
87
95
|
return originalEvent;
|
|
88
96
|
}
|
|
89
97
|
if (userEnrichedEvent === originalEvent) {
|
|
90
|
-
this.logger.debug(
|
|
98
|
+
this.logger.debug(LogMessages_1.LogMessage.SANITIZE_EVENT_NOT_CHANGED, {
|
|
99
|
+
originalEvent: JSON.stringify(originalEvent),
|
|
100
|
+
userEnrichedEvent: JSON.stringify(userEnrichedEvent),
|
|
101
|
+
});
|
|
91
102
|
return originalEvent;
|
|
92
103
|
}
|
|
93
104
|
let overriddenKeys = originalEvent["dt.support.api.overridden_fields"];
|
|
@@ -272,8 +283,10 @@ class ModifyEventValidation {
|
|
|
272
283
|
if ((0, EventModifierUtil_1.isKeyCustomProperty)(key)) {
|
|
273
284
|
propertyCount++;
|
|
274
285
|
if (propertyCount > EventSpecContstants_1.MAX_CUSTOM_EVENT_FIELDS) {
|
|
275
|
-
this.logger.debug(
|
|
276
|
-
|
|
286
|
+
this.logger.debug(LogMessages_1.LogMessage.PROPERTY_LIMIT_EXCEEDED, {
|
|
287
|
+
key,
|
|
288
|
+
limit: EventSpecContstants_1.MAX_CUSTOM_EVENT_FIELDS,
|
|
289
|
+
});
|
|
277
290
|
droppedCustomProperties = true;
|
|
278
291
|
continue;
|
|
279
292
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SendSessionPropertyEventValidation = exports.SendEventValidation = void 0;
|
|
3
|
+
exports.SendExceptionEventValidation = exports.SendSessionPropertyEventValidation = exports.SendEventValidation = void 0;
|
|
4
4
|
const ConsoleLogger_1 = require("../../../core/logging/ConsoleLogger");
|
|
5
|
+
const LogMessages_1 = require("../../../core/logging/LogMessages");
|
|
5
6
|
const TimestampProvider_1 = require("../../provider/TimestampProvider");
|
|
6
7
|
const EventTimestamp_1 = require("../EventTimestamp");
|
|
7
8
|
const EventSpecContstants_1 = require("../spec/EventSpecContstants");
|
|
@@ -14,7 +15,9 @@ class SendEventValidationImpl {
|
|
|
14
15
|
this.fieldWhitelist = fieldWhitelist;
|
|
15
16
|
}
|
|
16
17
|
modifyEvent(event) {
|
|
17
|
-
this.logger.debug(
|
|
18
|
+
this.logger.debug(LogMessages_1.LogMessage.MODIFY_EVENT, {
|
|
19
|
+
event: JSON.stringify(event),
|
|
20
|
+
});
|
|
18
21
|
if (event == null) {
|
|
19
22
|
return null;
|
|
20
23
|
}
|
|
@@ -90,7 +93,9 @@ class SendEventValidationImpl {
|
|
|
90
93
|
if ((0, EventModifierUtil_1.isKeyCustomProperty)(entry[0])) {
|
|
91
94
|
amountOfCustomProperties++;
|
|
92
95
|
if (amountOfCustomProperties > EventSpecContstants_1.MAX_CUSTOM_EVENT_FIELDS) {
|
|
93
|
-
this.logger.debug(
|
|
96
|
+
this.logger.debug(LogMessages_1.LogMessage.EVENT_PROPERTY_LIMIT_EXCEEDED, {
|
|
97
|
+
key: entry[0],
|
|
98
|
+
});
|
|
94
99
|
droppedCustomProperties = true;
|
|
95
100
|
return;
|
|
96
101
|
}
|
|
@@ -122,9 +127,10 @@ class SendEventValidationImpl {
|
|
|
122
127
|
if (this.fieldWhitelist.includes(key)) {
|
|
123
128
|
return true;
|
|
124
129
|
}
|
|
125
|
-
this.logger.debug(
|
|
130
|
+
this.logger.debug(LogMessages_1.LogMessage.KEY_NAME_NOT_ALLOWED, { key });
|
|
126
131
|
return false;
|
|
127
132
|
}
|
|
128
133
|
}
|
|
129
134
|
exports.SendEventValidation = new SendEventValidationImpl(TimestampProvider_1.defaultTimestampProvider, EventSpecContstants_1.SEND_EVENT_WHITELIST_NAMESPACES, EventSpecContstants_1.SEND_EVENT_WHITELIST_FIELDS, 'SendEventValidation');
|
|
130
135
|
exports.SendSessionPropertyEventValidation = new SendEventValidationImpl(TimestampProvider_1.defaultTimestampProvider, EventSpecContstants_1.SEND_SESSION_PROPERTY_EVENT_WHITELIST_NAMESPACES, EventSpecContstants_1.SEND_SESSION_PROPERTY_EVENT_WHITELIST_FIELDS, 'SendSessionPropertyEventValidation');
|
|
136
|
+
exports.SendExceptionEventValidation = new SendEventValidationImpl(TimestampProvider_1.defaultTimestampProvider, EventSpecContstants_1.SEND_EXCEPTION_EVENT_WHITELIST_NAMESPACES, EventSpecContstants_1.SEND_EXCEPTION_EVENT_WHITELIST_FIELDS, 'SendExceptionEventValidation');
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.StringLengthEventModifier = void 0;
|
|
4
4
|
const ConsoleLogger_1 = require("../../../core/logging/ConsoleLogger");
|
|
5
|
+
const LogMessages_1 = require("../../../core/logging/LogMessages");
|
|
5
6
|
const EventSpecContstants_1 = require("../spec/EventSpecContstants");
|
|
6
7
|
const EventModifierUtil_1 = require("./EventModifierUtil");
|
|
7
8
|
class StringLengthEventModifier {
|
|
@@ -10,7 +11,9 @@ class StringLengthEventModifier {
|
|
|
10
11
|
}
|
|
11
12
|
modifyEvent(event) {
|
|
12
13
|
if (event == null) {
|
|
13
|
-
this.logger.debug(
|
|
14
|
+
this.logger.debug(LogMessages_1.LogMessage.MODIFY_EVENT_NULL, {
|
|
15
|
+
event: JSON.stringify(event),
|
|
16
|
+
});
|
|
14
17
|
return event;
|
|
15
18
|
}
|
|
16
19
|
if (event["characteristics.is_api_reported"] ===
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ValueRestrictionModifier = void 0;
|
|
4
4
|
const ConsoleLogger_1 = require("../../../core/logging/ConsoleLogger");
|
|
5
|
+
const LogMessages_1 = require("../../../core/logging/LogMessages");
|
|
5
6
|
const EventModifierUtil_1 = require("./EventModifierUtil");
|
|
6
7
|
class ValueRestrictionModifierImpl {
|
|
7
8
|
constructor() {
|
|
@@ -23,7 +24,10 @@ class ValueRestrictionModifierImpl {
|
|
|
23
24
|
if (Object.prototype.hasOwnProperty.call(obj, key) &&
|
|
24
25
|
(this.valueHasRestrictedValues(obj[key]) ||
|
|
25
26
|
obj[key] === undefined)) {
|
|
26
|
-
this.logger.debug(
|
|
27
|
+
this.logger.debug(LogMessages_1.LogMessage.EVENT_NON_FINITE_VALUE, {
|
|
28
|
+
key,
|
|
29
|
+
value: JSON.stringify(obj[key]),
|
|
30
|
+
});
|
|
27
31
|
return true;
|
|
28
32
|
}
|
|
29
33
|
}
|