@dreamhorizonorg/pulse-react-native 0.0.2 → 0.0.4
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/android/build.gradle +1 -1
- package/android/src/main/java/com/pulsereactnativeotel/Pulse.kt +6 -0
- package/android/src/main/java/com/pulsereactnativeotel/PulseReactNativeOtelModule.kt +45 -24
- package/ios/PulseReactNativeOtel.mm +124 -63
- package/lib/module/NativePulseReactNativeOtel.js.map +1 -1
- package/lib/module/config.js +79 -19
- package/lib/module/config.js.map +1 -1
- package/lib/module/errorBoundary.js +4 -1
- package/lib/module/errorBoundary.js.map +1 -1
- package/lib/module/errorHandler.js +5 -1
- package/lib/module/errorHandler.js.map +1 -1
- package/lib/module/events.js +2 -2
- package/lib/module/events.js.map +1 -1
- package/lib/module/index.js +2 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/navigation/index.js +21 -3
- package/lib/module/navigation/index.js.map +1 -1
- package/lib/module/navigation/navigation.interface.js +6 -0
- package/lib/module/navigation/navigation.interface.js.map +1 -1
- package/lib/module/navigation/screen-interactive.js +4 -0
- package/lib/module/navigation/screen-interactive.js.map +1 -1
- package/lib/module/navigation/screen-load.js +1 -2
- package/lib/module/navigation/screen-load.js.map +1 -1
- package/lib/module/navigation/useNavigationTracking.js +4 -3
- package/lib/module/navigation/useNavigationTracking.js.map +1 -1
- package/lib/module/network-interceptor/header-helper.js +24 -0
- package/lib/module/network-interceptor/header-helper.js.map +1 -0
- package/lib/module/network-interceptor/initialization.js +31 -2
- package/lib/module/network-interceptor/initialization.js.map +1 -1
- package/lib/module/network-interceptor/request-tracker-xhr.js +74 -5
- package/lib/module/network-interceptor/request-tracker-xhr.js.map +1 -1
- package/lib/module/network-interceptor/span-helpers.js +15 -3
- package/lib/module/network-interceptor/span-helpers.js.map +1 -1
- package/lib/module/pulse.constants.js +11 -6
- package/lib/module/pulse.constants.js.map +1 -1
- package/lib/module/trace.js +16 -10
- package/lib/module/trace.js.map +1 -1
- package/lib/module/user.js +4 -3
- package/lib/module/user.js.map +1 -1
- package/lib/typescript/plugin/src/types.d.ts +6 -0
- package/lib/typescript/plugin/src/types.d.ts.map +1 -1
- package/lib/typescript/plugin/src/utils.d.ts +2 -0
- package/lib/typescript/plugin/src/utils.d.ts.map +1 -1
- package/lib/typescript/plugin/src/withAndroidPulse.d.ts.map +1 -1
- package/lib/typescript/src/NativePulseReactNativeOtel.d.ts +10 -1
- package/lib/typescript/src/NativePulseReactNativeOtel.d.ts.map +1 -1
- package/lib/typescript/src/config.d.ts +11 -7
- package/lib/typescript/src/config.d.ts.map +1 -1
- package/lib/typescript/src/errorBoundary.d.ts.map +1 -1
- package/lib/typescript/src/errorHandler.d.ts +1 -0
- package/lib/typescript/src/errorHandler.d.ts.map +1 -1
- package/lib/typescript/src/events.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +3 -2
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/navigation/index.d.ts +2 -0
- package/lib/typescript/src/navigation/index.d.ts.map +1 -1
- package/lib/typescript/src/navigation/navigation.interface.d.ts +1 -0
- package/lib/typescript/src/navigation/navigation.interface.d.ts.map +1 -1
- package/lib/typescript/src/navigation/screen-interactive.d.ts.map +1 -1
- package/lib/typescript/src/navigation/screen-load.d.ts.map +1 -1
- package/lib/typescript/src/navigation/useNavigationTracking.d.ts +1 -1
- package/lib/typescript/src/navigation/useNavigationTracking.d.ts.map +1 -1
- package/lib/typescript/src/network-interceptor/header-helper.d.ts +15 -0
- package/lib/typescript/src/network-interceptor/header-helper.d.ts.map +1 -0
- package/lib/typescript/src/network-interceptor/initialization.d.ts +5 -1
- package/lib/typescript/src/network-interceptor/initialization.d.ts.map +1 -1
- package/lib/typescript/src/network-interceptor/network.interface.d.ts +3 -0
- package/lib/typescript/src/network-interceptor/network.interface.d.ts.map +1 -1
- package/lib/typescript/src/network-interceptor/request-tracker-xhr.d.ts +5 -1
- package/lib/typescript/src/network-interceptor/request-tracker-xhr.d.ts.map +1 -1
- package/lib/typescript/src/network-interceptor/span-helpers.d.ts.map +1 -1
- package/lib/typescript/src/pulse.constants.d.ts +13 -5
- package/lib/typescript/src/pulse.constants.d.ts.map +1 -1
- package/lib/typescript/src/pulse.interface.d.ts +1 -1
- package/lib/typescript/src/pulse.interface.d.ts.map +1 -1
- package/lib/typescript/src/trace.d.ts.map +1 -1
- package/lib/typescript/src/user.d.ts.map +1 -1
- package/package.json +1 -1
- package/plugin/build/types.d.ts +6 -0
- package/plugin/build/utils.d.ts +2 -0
- package/plugin/build/utils.js +6 -2
- package/plugin/build/withAndroidPulse.js +3 -1
- package/src/NativePulseReactNativeOtel.ts +11 -1
- package/src/config.ts +120 -28
- package/src/errorBoundary.tsx +4 -1
- package/src/errorHandler.ts +6 -1
- package/src/events.ts +6 -2
- package/src/index.tsx +3 -2
- package/src/navigation/index.ts +49 -7
- package/src/navigation/navigation.interface.ts +7 -0
- package/src/navigation/screen-interactive.ts +4 -0
- package/src/navigation/screen-load.ts +1 -7
- package/src/navigation/useNavigationTracking.ts +13 -4
- package/src/network-interceptor/header-helper.ts +26 -0
- package/src/network-interceptor/initialization.ts +36 -2
- package/src/network-interceptor/network.interface.ts +3 -0
- package/src/network-interceptor/request-tracker-xhr.ts +106 -5
- package/src/network-interceptor/span-helpers.ts +23 -3
- package/src/pulse.constants.ts +19 -5
- package/src/pulse.interface.ts +1 -1
- package/src/trace.ts +17 -10
- package/src/user.ts +4 -3
package/android/build.gradle
CHANGED
|
@@ -23,10 +23,13 @@ public object Pulse : PulseSDK by PulseSDK.INSTANCE {
|
|
|
23
23
|
public override fun initialize(
|
|
24
24
|
application: Application,
|
|
25
25
|
endpointBaseUrl: String,
|
|
26
|
+
tenantId: String,
|
|
26
27
|
endpointHeaders: Map<String, String>,
|
|
27
28
|
spanEndpointConnectivity: EndpointConnectivity,
|
|
28
29
|
logEndpointConnectivity: EndpointConnectivity,
|
|
29
30
|
metricEndpointConnectivity: EndpointConnectivity,
|
|
31
|
+
customEventConnectivity: EndpointConnectivity,
|
|
32
|
+
configEndpointUrl: String?,
|
|
30
33
|
resource: (ResourceBuilder.() -> Unit)?,
|
|
31
34
|
sessionConfig: SessionConfig,
|
|
32
35
|
globalAttributes: (() -> Attributes)?,
|
|
@@ -70,10 +73,13 @@ public object Pulse : PulseSDK by PulseSDK.INSTANCE {
|
|
|
70
73
|
PulseSDK.INSTANCE.initialize(
|
|
71
74
|
application = application,
|
|
72
75
|
endpointBaseUrl = endpointBaseUrl,
|
|
76
|
+
tenantId = tenantId,
|
|
73
77
|
endpointHeaders = endpointHeaders,
|
|
74
78
|
spanEndpointConnectivity = spanEndpointConnectivity,
|
|
75
79
|
logEndpointConnectivity = logEndpointConnectivity,
|
|
76
80
|
metricEndpointConnectivity = metricEndpointConnectivity,
|
|
81
|
+
customEventConnectivity = customEventConnectivity,
|
|
82
|
+
configEndpointUrl = configEndpointUrl,
|
|
77
83
|
resource = rnResource,
|
|
78
84
|
sessionConfig = sessionConfig,
|
|
79
85
|
globalAttributes = globalAttributes,
|
|
@@ -89,6 +89,11 @@ internal class PulseReactNativeOtelModule(reactContext: ReactApplicationContext)
|
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
+
override fun shutdown(): Boolean {
|
|
93
|
+
PulseSDK.INSTANCE.shutdown()
|
|
94
|
+
return true
|
|
95
|
+
}
|
|
96
|
+
|
|
92
97
|
override fun triggerAnr() {
|
|
93
98
|
Handler(Looper.getMainLooper()).postAtFrontOfQueue {
|
|
94
99
|
Log.d("[Pulse]", "Now running PostAtFrontQueue: ${Thread.currentThread().name}")
|
|
@@ -96,36 +101,52 @@ internal class PulseReactNativeOtelModule(reactContext: ReactApplicationContext)
|
|
|
96
101
|
}
|
|
97
102
|
}
|
|
98
103
|
|
|
99
|
-
override fun getAllFeatures(): WritableMap {
|
|
100
|
-
val
|
|
104
|
+
override fun getAllFeatures(): WritableMap? {
|
|
105
|
+
val context = reactApplicationContext
|
|
106
|
+
val sharedPrefs = context.getSharedPreferences(
|
|
107
|
+
"pulse_sdk_config",
|
|
108
|
+
Context.MODE_PRIVATE
|
|
109
|
+
)
|
|
101
110
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
)
|
|
107
|
-
|
|
108
|
-
val configJson = sharedPrefs.getString("sdk_config", null)
|
|
109
|
-
if (configJson != null) {
|
|
110
|
-
val json = Json {
|
|
111
|
-
ignoreUnknownKeys = true
|
|
112
|
-
isLenient = true
|
|
113
|
-
}
|
|
114
|
-
val config = json.decodeFromString<PulseSdkConfig>(configJson)
|
|
111
|
+
val configJson = sharedPrefs.getString("sdk_config", null)
|
|
112
|
+
if (configJson == null) {
|
|
113
|
+
return null
|
|
114
|
+
}
|
|
115
115
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
116
|
+
val json = Json {
|
|
117
|
+
ignoreUnknownKeys = true
|
|
118
|
+
isLenient = true
|
|
119
|
+
}
|
|
120
|
+
val config = json.decodeFromString<PulseSdkConfig>(configJson)
|
|
121
121
|
|
|
122
|
-
|
|
123
|
-
|
|
122
|
+
val features = Arguments.createMap()
|
|
123
|
+
val featureMap = mutableMapOf<String, Boolean>()
|
|
124
124
|
|
|
125
|
-
|
|
126
|
-
|
|
125
|
+
config.features.forEach { featureConfig ->
|
|
126
|
+
if (PulseSdkName.ANDROID_RN in featureConfig.sdks) {
|
|
127
|
+
if (featureConfig.featureName == PulseFeatureName.UNKNOWN) {
|
|
128
|
+
return@forEach
|
|
127
129
|
}
|
|
130
|
+
|
|
131
|
+
val featureNameStr = featureConfig.featureName.name.lowercase()
|
|
132
|
+
val isEnabled = featureConfig.sessionSampleRate > 0F
|
|
133
|
+
featureMap[featureNameStr] = isEnabled
|
|
128
134
|
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
val requiredFeatures = listOf(
|
|
138
|
+
"rn_screen_load",
|
|
139
|
+
"screen_session",
|
|
140
|
+
"rn_screen_interactive",
|
|
141
|
+
"network_instrumentation",
|
|
142
|
+
"custom_events",
|
|
143
|
+
"js_crash"
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
requiredFeatures.forEach { featureName ->
|
|
147
|
+
features.putBoolean(featureName, featureMap[featureName] ?: false)
|
|
148
|
+
}
|
|
149
|
+
|
|
129
150
|
return features
|
|
130
151
|
}
|
|
131
152
|
|
|
@@ -21,86 +21,147 @@ RCT_EXPORT_MODULE()
|
|
|
21
21
|
return self;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
- (NSNumber *)isInitialized
|
|
26
|
-
{
|
|
27
|
-
return @NO;
|
|
28
|
-
}
|
|
24
|
+
#pragma mark - Shared implementation
|
|
29
25
|
|
|
30
|
-
|
|
31
|
-
- (NSNumber *)trackEvent:(NSString *)event
|
|
32
|
-
observedTimeMs:(double)observedTimeMs
|
|
33
|
-
properties:(NSDictionary *)properties
|
|
34
|
-
{
|
|
35
|
-
return @NO;
|
|
36
|
-
}
|
|
26
|
+
- (NSNumber *)doIsInitialized { return @NO; }
|
|
37
27
|
|
|
38
|
-
- (
|
|
39
|
-
|
|
40
|
-
inheritContext:(NSNumber *)inheritContext
|
|
41
|
-
{
|
|
42
|
-
return [NSString stringWithFormat:@"noop-ios-%@", [[NSUUID UUID] UUIDString]];
|
|
43
|
-
}
|
|
28
|
+
- (NSNumber *)doTrackEvent:(NSString *)event observedTimeMs:(double)observedTimeMs properties:(NSDictionary *)properties
|
|
29
|
+
{ return @NO; }
|
|
44
30
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
{
|
|
48
|
-
return @NO;
|
|
49
|
-
}
|
|
31
|
+
- (NSString *)doStartSpan:(NSString *)name inheritContext:(NSNumber *)inheritContext attributes:(NSDictionary *)attributes
|
|
32
|
+
{ return [NSString stringWithFormat:@"noop-ios-%@", [[NSUUID UUID] UUIDString]]; }
|
|
50
33
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
name:(NSString *)name
|
|
54
|
-
attributes:(NSDictionary *)attributes
|
|
55
|
-
{
|
|
56
|
-
return @NO;
|
|
57
|
-
}
|
|
34
|
+
- (NSNumber *)doEndSpan:(NSString *)spanId statusCode:(NSString *)statusCode
|
|
35
|
+
{ return @NO; }
|
|
58
36
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
attributes:(NSDictionary *)attributes
|
|
62
|
-
{
|
|
63
|
-
return @NO;
|
|
64
|
-
}
|
|
37
|
+
- (NSNumber *)doAddSpanEvent:(NSString *)spanId name:(NSString *)name attributes:(NSDictionary *)attributes
|
|
38
|
+
{ return @NO; }
|
|
65
39
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
errorMessage:(NSString *)errorMessage
|
|
69
|
-
stackTrace:(NSString *)stackTrace
|
|
70
|
-
{
|
|
71
|
-
return @NO;
|
|
72
|
-
}
|
|
40
|
+
- (NSNumber *)doSetSpanAttributes:(NSString *)spanId attributes:(NSDictionary *)attributes
|
|
41
|
+
{ return @NO; }
|
|
73
42
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
{
|
|
77
|
-
return @NO;
|
|
78
|
-
}
|
|
43
|
+
- (NSNumber *)doRecordSpanException:(NSString *)spanId errorMessage:(NSString *)errorMessage stackTrace:(NSString *)stackTrace
|
|
44
|
+
{ return @NO; }
|
|
79
45
|
|
|
80
|
-
- (
|
|
81
|
-
|
|
82
|
-
}
|
|
46
|
+
- (NSNumber *)doReportException:(NSString *)errorMessage observedTimeMs:(double)observedTimeMs stackTrace:(NSString *)stackTrace isFatal:(BOOL)isFatal errorType:(NSString *)errorType attributes:(NSDictionary *)attributes
|
|
47
|
+
{ return @NO; }
|
|
83
48
|
|
|
49
|
+
- (NSNumber *)doDiscardSpan:(NSString *)spanId { return @NO; }
|
|
84
50
|
|
|
85
|
-
- (void)
|
|
86
|
-
// No op
|
|
87
|
-
}
|
|
51
|
+
- (void)doSetUserId:(NSString *)id { }
|
|
88
52
|
|
|
53
|
+
- (void)doSetUserProperties:(NSDictionary *)properties { }
|
|
89
54
|
|
|
90
|
-
- (void)
|
|
91
|
-
// No op
|
|
92
|
-
}
|
|
55
|
+
- (void)doSetUserProperty:(NSString *)name value:(NSString *)value { }
|
|
93
56
|
|
|
57
|
+
- (void)doTriggerAnr { }
|
|
94
58
|
|
|
95
|
-
- (
|
|
96
|
-
|
|
97
|
-
}
|
|
59
|
+
- (NSNumber *)doSetCurrentScreenName:(NSString *)screenName { return @NO; }
|
|
60
|
+
|
|
61
|
+
- (NSDictionary *)doGetAllFeatures { return nil; }
|
|
62
|
+
|
|
63
|
+
- (NSNumber *)doShutdown { return @YES; }
|
|
64
|
+
|
|
65
|
+
#pragma mark - New Architecture
|
|
66
|
+
|
|
67
|
+
#if RCT_NEW_ARCH_ENABLED
|
|
68
|
+
|
|
69
|
+
- (NSNumber *)isInitialized { return [self doIsInitialized]; }
|
|
70
|
+
|
|
71
|
+
- (NSNumber *)trackEvent:(NSString *)event observedTimeMs:(double)observedTimeMs properties:(NSDictionary *)properties
|
|
72
|
+
{ return [self doTrackEvent:event observedTimeMs:observedTimeMs properties:properties]; }
|
|
73
|
+
|
|
74
|
+
- (NSString *)startSpan:(NSString *)name inheritContext:(NSNumber *)inheritContext attributes:(NSDictionary *)attributes
|
|
75
|
+
{ return [self doStartSpan:name inheritContext:inheritContext attributes:attributes]; }
|
|
76
|
+
|
|
77
|
+
- (NSNumber *)endSpan:(NSString *)spanId statusCode:(NSString *)statusCode
|
|
78
|
+
{ return [self doEndSpan:spanId statusCode:statusCode]; }
|
|
79
|
+
|
|
80
|
+
- (NSNumber *)addSpanEvent:(NSString *)spanId name:(NSString *)name attributes:(NSDictionary *)attributes
|
|
81
|
+
{ return [self doAddSpanEvent:spanId name:name attributes:attributes]; }
|
|
98
82
|
|
|
83
|
+
- (NSNumber *)setSpanAttributes:(NSString *)spanId attributes:(NSDictionary *)attributes
|
|
84
|
+
{ return [self doSetSpanAttributes:spanId attributes:attributes]; }
|
|
99
85
|
|
|
100
|
-
- (
|
|
101
|
-
|
|
86
|
+
- (NSNumber *)recordSpanException:(NSString *)spanId errorMessage:(NSString *)errorMessage stackTrace:(NSString *)stackTrace
|
|
87
|
+
{ return [self doRecordSpanException:spanId errorMessage:errorMessage stackTrace:stackTrace]; }
|
|
88
|
+
|
|
89
|
+
- (NSNumber *)reportException:(NSString *)errorMessage observedTimeMs:(double)observedTimeMs stackTrace:(NSString *)stackTrace isFatal:(BOOL)isFatal errorType:(NSString *)errorType attributes:(NSDictionary *)attributes
|
|
90
|
+
{ return [self doReportException:errorMessage observedTimeMs:observedTimeMs stackTrace:stackTrace isFatal:isFatal errorType:errorType attributes:attributes]; }
|
|
91
|
+
|
|
92
|
+
- (NSNumber *)discardSpan:(NSString *)spanId { return [self doDiscardSpan:spanId]; }
|
|
93
|
+
|
|
94
|
+
- (void)setUserId:(NSString *)id { [self doSetUserId:id]; }
|
|
95
|
+
|
|
96
|
+
- (void)setUserProperties:(NSDictionary *)properties { [self doSetUserProperties:properties]; }
|
|
97
|
+
|
|
98
|
+
- (void)setUserProperty:(NSString *)name value:(NSString *)value { [self doSetUserProperty:name value:value]; }
|
|
99
|
+
|
|
100
|
+
- (void)triggerAnr { [self doTriggerAnr]; }
|
|
101
|
+
|
|
102
|
+
- (NSNumber *)setCurrentScreenName:(NSString *)screenName { return [self doSetCurrentScreenName:screenName]; }
|
|
103
|
+
|
|
104
|
+
- (NSDictionary *)getAllFeatures { return [self doGetAllFeatures]; }
|
|
105
|
+
|
|
106
|
+
- (NSNumber *)shutdown { return [self doShutdown]; }
|
|
107
|
+
|
|
108
|
+
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:(const facebook::react::ObjCTurboModule::InitParams &)params
|
|
102
109
|
{
|
|
103
|
-
|
|
110
|
+
return std::make_shared<facebook::react::NativePulseReactNativeOtelSpecJSI>(params);
|
|
104
111
|
}
|
|
105
112
|
|
|
113
|
+
#pragma mark - Old Architecture
|
|
114
|
+
|
|
115
|
+
#else
|
|
116
|
+
|
|
117
|
+
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(isInitialized)
|
|
118
|
+
{ return [self doIsInitialized]; }
|
|
119
|
+
|
|
120
|
+
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(trackEvent:(NSString *)event observedTimeMs:(double)observedTimeMs properties:(NSDictionary *)properties)
|
|
121
|
+
{ return [self doTrackEvent:event observedTimeMs:observedTimeMs properties:properties]; }
|
|
122
|
+
|
|
123
|
+
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(startSpan:(NSString *)name inheritContext:(NSNumber *)inheritContext attributes:(NSDictionary *)attributes)
|
|
124
|
+
{ return [self doStartSpan:name inheritContext:inheritContext attributes:attributes]; }
|
|
125
|
+
|
|
126
|
+
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(endSpan:(NSString *)spanId statusCode:(NSString *)statusCode)
|
|
127
|
+
{ return [self doEndSpan:spanId statusCode:statusCode]; }
|
|
128
|
+
|
|
129
|
+
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(addSpanEvent:(NSString *)spanId name:(NSString *)name attributes:(NSDictionary *)attributes)
|
|
130
|
+
{ return [self doAddSpanEvent:spanId name:name attributes:attributes]; }
|
|
131
|
+
|
|
132
|
+
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(setSpanAttributes:(NSString *)spanId attributes:(NSDictionary *)attributes)
|
|
133
|
+
{ return [self doSetSpanAttributes:spanId attributes:attributes]; }
|
|
134
|
+
|
|
135
|
+
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(recordSpanException:(NSString *)spanId errorMessage:(NSString *)errorMessage stackTrace:(NSString *)stackTrace)
|
|
136
|
+
{ return [self doRecordSpanException:spanId errorMessage:errorMessage stackTrace:stackTrace]; }
|
|
137
|
+
|
|
138
|
+
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(reportException:(NSString *)errorMessage observedTimeMs:(double)observedTimeMs stackTrace:(NSString *)stackTrace isFatal:(BOOL)isFatal errorType:(NSString *)errorType attributes:(NSDictionary *)attributes)
|
|
139
|
+
{ return [self doReportException:errorMessage observedTimeMs:observedTimeMs stackTrace:stackTrace isFatal:isFatal errorType:errorType attributes:attributes]; }
|
|
140
|
+
|
|
141
|
+
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(discardSpan:(NSString *)spanId)
|
|
142
|
+
{ return [self doDiscardSpan:spanId]; }
|
|
143
|
+
|
|
144
|
+
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(setCurrentScreenName:(NSString *)screenName)
|
|
145
|
+
{ return [self doSetCurrentScreenName:screenName]; }
|
|
146
|
+
|
|
147
|
+
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(getAllFeatures)
|
|
148
|
+
{ return [self doGetAllFeatures]; }
|
|
149
|
+
|
|
150
|
+
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(shutdown)
|
|
151
|
+
{ return [self doShutdown]; }
|
|
152
|
+
|
|
153
|
+
RCT_EXPORT_METHOD(setUserId:(NSString *)id)
|
|
154
|
+
{ [self doSetUserId:id]; }
|
|
155
|
+
|
|
156
|
+
RCT_EXPORT_METHOD(setUserProperties:(NSDictionary *)properties)
|
|
157
|
+
{ [self doSetUserProperties:properties]; }
|
|
158
|
+
|
|
159
|
+
RCT_EXPORT_METHOD(setUserProperty:(NSString *)name value:(NSString *)value)
|
|
160
|
+
{ [self doSetUserProperty:name value:value]; }
|
|
161
|
+
|
|
162
|
+
RCT_EXPORT_METHOD(triggerAnr)
|
|
163
|
+
{ [self doTriggerAnr]; }
|
|
164
|
+
|
|
165
|
+
#endif
|
|
166
|
+
|
|
106
167
|
@end
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativePulseReactNativeOtel.ts"],"mappings":";;AAAA,SAASA,mBAAmB,QAA0B,cAAc;
|
|
1
|
+
{"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativePulseReactNativeOtel.ts"],"mappings":";;AAAA,SAASA,mBAAmB,QAA0B,cAAc;AA2EpE,eAAeA,mBAAmB,CAACC,YAAY,CAAO,sBAAsB,CAAC","ignoreList":[]}
|
package/lib/module/config.js
CHANGED
|
@@ -1,32 +1,50 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { setupErrorHandler } from "./errorHandler.js";
|
|
3
|
+
import { setupErrorHandler, uninstallErrorHandler } from "./errorHandler.js";
|
|
4
4
|
import { isSupportedPlatform } from "./initialization.js";
|
|
5
|
-
import { createReactNavigationIntegration } from "./navigation/index.js";
|
|
6
|
-
import { initializeNetworkInterceptor } from "./network-interceptor/initialization.js";
|
|
5
|
+
import { createReactNavigationIntegration, uninstallNavigationIntegration } from "./navigation/index.js";
|
|
6
|
+
import { initializeNetworkInterceptor, uninstallNetworkInterceptor } from "./network-interceptor/initialization.js";
|
|
7
7
|
import PulseReactNativeOtel from "./NativePulseReactNativeOtel.js";
|
|
8
|
+
import { PULSE_FEATURE_NAMES } from "./pulse.constants.js";
|
|
8
9
|
const defaultConfig = {
|
|
9
10
|
autoDetectExceptions: true,
|
|
10
11
|
autoDetectNavigation: true,
|
|
11
|
-
autoDetectNetwork: true
|
|
12
|
+
autoDetectNetwork: true,
|
|
13
|
+
networkHeaders: {
|
|
14
|
+
requestHeaders: [],
|
|
15
|
+
responseHeaders: []
|
|
16
|
+
}
|
|
12
17
|
};
|
|
13
18
|
let currentConfig = {
|
|
14
19
|
...defaultConfig
|
|
15
20
|
};
|
|
16
21
|
|
|
22
|
+
/** After shutdown, start() and initialize are no-ops; re-initialization is not supported. */
|
|
23
|
+
let isShutdown = false;
|
|
24
|
+
|
|
25
|
+
/** True only after start() has been called at least once. Integrations (e.g. navigation) are no-ops until then. */
|
|
26
|
+
let isStarted = false;
|
|
27
|
+
|
|
17
28
|
// Cache for features from remote SDK config
|
|
18
|
-
let cachedFeatures
|
|
29
|
+
let cachedFeatures;
|
|
30
|
+
export function getIsShutdown() {
|
|
31
|
+
return isShutdown;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** True only after start() has been called at least once. Public APIs (trackEvent, reportException, startSpan, etc.) no-op until then. */
|
|
35
|
+
export function getIsStarted() {
|
|
36
|
+
return isStarted;
|
|
37
|
+
}
|
|
19
38
|
|
|
20
39
|
/**
|
|
21
40
|
* Gets all features from the remote SDK config.
|
|
22
|
-
* @returns Record of feature names to their enabled status
|
|
41
|
+
* @returns Record of feature names to their enabled status, or null if config not available or start() not called
|
|
23
42
|
*/
|
|
24
43
|
export function getFeaturesFromRemoteConfig() {
|
|
25
|
-
if (cachedFeatures !==
|
|
44
|
+
if (cachedFeatures !== undefined) {
|
|
26
45
|
return cachedFeatures;
|
|
27
46
|
}
|
|
28
|
-
|
|
29
|
-
cachedFeatures = features;
|
|
47
|
+
cachedFeatures = PulseReactNativeOtel.getAllFeatures();
|
|
30
48
|
return cachedFeatures;
|
|
31
49
|
}
|
|
32
50
|
function configure(config) {
|
|
@@ -36,22 +54,52 @@ function configure(config) {
|
|
|
36
54
|
};
|
|
37
55
|
setupErrorHandler(currentConfig.autoDetectExceptions ?? true);
|
|
38
56
|
if (currentConfig.autoDetectNetwork) {
|
|
39
|
-
initializeNetworkInterceptor(
|
|
57
|
+
initializeNetworkInterceptor(currentConfig.networkHeaders ?? {
|
|
58
|
+
requestHeaders: [],
|
|
59
|
+
responseHeaders: []
|
|
60
|
+
});
|
|
40
61
|
}
|
|
41
62
|
}
|
|
63
|
+
function resolveFeatureState(features, featureName, optionValue) {
|
|
64
|
+
if (features !== undefined && features !== null) return features[featureName] ?? optionValue;
|
|
65
|
+
return optionValue;
|
|
66
|
+
}
|
|
67
|
+
function resolveNavigationState(features, optionValue) {
|
|
68
|
+
if (features !== undefined && features !== null) {
|
|
69
|
+
const hasAny = features[PULSE_FEATURE_NAMES.SCREEN_SESSION] === true || features[PULSE_FEATURE_NAMES.RN_SCREEN_LOAD] === true || features[PULSE_FEATURE_NAMES.RN_SCREEN_INTERACTIVE] === true;
|
|
70
|
+
return hasAny ?? optionValue;
|
|
71
|
+
}
|
|
72
|
+
return optionValue;
|
|
73
|
+
}
|
|
42
74
|
export function start(options) {
|
|
43
|
-
if (!isSupportedPlatform())
|
|
75
|
+
if (!isSupportedPlatform()) return;
|
|
76
|
+
if (isShutdown) {
|
|
77
|
+
console.log('[Pulse] SDK has been shut down. Pulse.start() is a no-op; re-initialization is not supported.');
|
|
44
78
|
return;
|
|
45
79
|
}
|
|
80
|
+
isStarted = true;
|
|
46
81
|
const features = getFeaturesFromRemoteConfig();
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
82
|
+
const config = {
|
|
83
|
+
autoDetectExceptions: resolveFeatureState(features, PULSE_FEATURE_NAMES.JS_CRASH, options?.autoDetectExceptions ?? defaultConfig.autoDetectExceptions),
|
|
84
|
+
autoDetectNavigation: resolveNavigationState(features, options?.autoDetectNavigation ?? defaultConfig.autoDetectNavigation),
|
|
85
|
+
autoDetectNetwork: resolveFeatureState(features, PULSE_FEATURE_NAMES.NETWORK_INSTRUMENTATION, options?.autoDetectNetwork ?? defaultConfig.autoDetectNetwork),
|
|
86
|
+
networkHeaders: options?.networkHeaders ?? {
|
|
87
|
+
requestHeaders: [],
|
|
88
|
+
responseHeaders: []
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
configure(config);
|
|
92
|
+
}
|
|
93
|
+
export function shutdown() {
|
|
94
|
+
if (isShutdown) {
|
|
95
|
+
console.warn('[Pulse] SDK already shut down.');
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
uninstallErrorHandler();
|
|
99
|
+
uninstallNetworkInterceptor();
|
|
100
|
+
uninstallNavigationIntegration();
|
|
101
|
+
PulseReactNativeOtel.shutdown();
|
|
102
|
+
isShutdown = true;
|
|
55
103
|
}
|
|
56
104
|
export function createNavigationIntegrationWithConfig(options) {
|
|
57
105
|
if (!isSupportedPlatform()) {
|
|
@@ -60,6 +108,18 @@ export function createNavigationIntegrationWithConfig(options) {
|
|
|
60
108
|
markContentReady: () => {}
|
|
61
109
|
};
|
|
62
110
|
}
|
|
111
|
+
if (!isStarted) {
|
|
112
|
+
return {
|
|
113
|
+
registerNavigationContainer: _ => () => {},
|
|
114
|
+
markContentReady: () => {}
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
if (isShutdown) {
|
|
118
|
+
return {
|
|
119
|
+
registerNavigationContainer: _ => () => {},
|
|
120
|
+
markContentReady: () => {}
|
|
121
|
+
};
|
|
122
|
+
}
|
|
63
123
|
if (!currentConfig.autoDetectNavigation) {
|
|
64
124
|
console.warn('[Pulse Navigation] auto-detection disabled via Pulse.start; createNavigationIntegration() returning no-op.');
|
|
65
125
|
const noop = {
|
package/lib/module/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["setupErrorHandler","isSupportedPlatform","createReactNavigationIntegration","initializeNetworkInterceptor","PulseReactNativeOtel","defaultConfig","autoDetectExceptions","autoDetectNavigation","autoDetectNetwork","currentConfig","cachedFeatures","getFeaturesFromRemoteConfig","
|
|
1
|
+
{"version":3,"names":["setupErrorHandler","uninstallErrorHandler","isSupportedPlatform","createReactNavigationIntegration","uninstallNavigationIntegration","initializeNetworkInterceptor","uninstallNetworkInterceptor","PulseReactNativeOtel","PULSE_FEATURE_NAMES","defaultConfig","autoDetectExceptions","autoDetectNavigation","autoDetectNetwork","networkHeaders","requestHeaders","responseHeaders","currentConfig","isShutdown","isStarted","cachedFeatures","getIsShutdown","getIsStarted","getFeaturesFromRemoteConfig","undefined","getAllFeatures","configure","config","resolveFeatureState","features","featureName","optionValue","resolveNavigationState","hasAny","SCREEN_SESSION","RN_SCREEN_LOAD","RN_SCREEN_INTERACTIVE","start","options","console","log","JS_CRASH","NETWORK_INSTRUMENTATION","shutdown","warn","createNavigationIntegrationWithConfig","registerNavigationContainer","_","markContentReady","noop"],"sourceRoot":"../../src","sources":["config.ts"],"mappings":";;AAAA,SAASA,iBAAiB,EAAEC,qBAAqB,QAAQ,mBAAgB;AACzE,SAASC,mBAAmB,QAAQ,qBAAkB;AACtD,SACEC,gCAAgC,EAChCC,8BAA8B,QAGzB,uBAAc;AACrB,SACEC,4BAA4B,EAC5BC,2BAA2B,QACtB,yCAAsC;AAC7C,OAAOC,oBAAoB,MAAM,iCAA8B;AAE/D,SAASC,mBAAmB,QAAQ,sBAAmB;AAcvD,MAAMC,aAAoC,GAAG;EAC3CC,oBAAoB,EAAE,IAAI;EAC1BC,oBAAoB,EAAE,IAAI;EAC1BC,iBAAiB,EAAE,IAAI;EACvBC,cAAc,EAAE;IACdC,cAAc,EAAE,EAAE;IAClBC,eAAe,EAAE;EACnB;AACF,CAAC;AAED,IAAIC,aAA0B,GAAG;EAAE,GAAGP;AAAc,CAAC;;AAErD;AACA,IAAIQ,UAAU,GAAG,KAAK;;AAEtB;AACA,IAAIC,SAAS,GAAG,KAAK;;AAErB;AACA,IAAIC,cAAkC;AAEtC,OAAO,SAASC,aAAaA,CAAA,EAAY;EACvC,OAAOH,UAAU;AACnB;;AAEA;AACA,OAAO,SAASI,YAAYA,CAAA,EAAY;EACtC,OAAOH,SAAS;AAClB;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASI,2BAA2BA,CAAA,EAAuB;EAChE,IAAIH,cAAc,KAAKI,SAAS,EAAE;IAChC,OAAOJ,cAAc;EACvB;EAEAA,cAAc,GAAGZ,oBAAoB,CAACiB,cAAc,CAAC,CAAC;EACtD,OAAOL,cAAc;AACvB;AAEA,SAASM,SAASA,CAACC,MAAmB,EAAQ;EAC5CV,aAAa,GAAG;IACd,GAAGA,aAAa;IAChB,GAAGU;EACL,CAAC;EACD1B,iBAAiB,CAACgB,aAAa,CAACN,oBAAoB,IAAI,IAAI,CAAC;EAE7D,IAAIM,aAAa,CAACJ,iBAAiB,EAAE;IACnCP,4BAA4B,CAC1BW,aAAa,CAACH,cAAc,IAAI;MAC9BC,cAAc,EAAE,EAAE;MAClBC,eAAe,EAAE;IACnB,CACF,CAAC;EACH;AACF;AAEA,SAASY,mBAAmBA,CAC1BC,QAA4B,EAC5BC,WAAmB,EACnBC,WAAoB,EACX;EACT,IAAIF,QAAQ,KAAKL,SAAS,IAAIK,QAAQ,KAAK,IAAI,EAC7C,OAAOA,QAAQ,CAACC,WAAW,CAAC,IAAIC,WAAW;EAC7C,OAAOA,WAAW;AACpB;AAEA,SAASC,sBAAsBA,CAC7BH,QAA4B,EAC5BE,WAAoB,EACX;EACT,IAAIF,QAAQ,KAAKL,SAAS,IAAIK,QAAQ,KAAK,IAAI,EAAE;IAC/C,MAAMI,MAAM,GACVJ,QAAQ,CAACpB,mBAAmB,CAACyB,cAAc,CAAC,KAAK,IAAI,IACrDL,QAAQ,CAACpB,mBAAmB,CAAC0B,cAAc,CAAC,KAAK,IAAI,IACrDN,QAAQ,CAACpB,mBAAmB,CAAC2B,qBAAqB,CAAC,KAAK,IAAI;IAC9D,OAAOH,MAAM,IAAIF,WAAW;EAC9B;EACA,OAAOA,WAAW;AACpB;AAEA,OAAO,SAASM,KAAKA,CAACC,OAAqB,EAAQ;EACjD,IAAI,CAACnC,mBAAmB,CAAC,CAAC,EAAE;EAC5B,IAAIe,UAAU,EAAE;IACdqB,OAAO,CAACC,GAAG,CACT,+FACF,CAAC;IACD;EACF;EAEArB,SAAS,GAAG,IAAI;EAChB,MAAMU,QAAQ,GAAGN,2BAA2B,CAAC,CAAC;EAC9C,MAAMI,MAAmB,GAAG;IAC1BhB,oBAAoB,EAAEiB,mBAAmB,CACvCC,QAAQ,EACRpB,mBAAmB,CAACgC,QAAQ,EAC5BH,OAAO,EAAE3B,oBAAoB,IAAID,aAAa,CAACC,oBACjD,CAAC;IACDC,oBAAoB,EAAEoB,sBAAsB,CAC1CH,QAAQ,EACRS,OAAO,EAAE1B,oBAAoB,IAAIF,aAAa,CAACE,oBACjD,CAAC;IACDC,iBAAiB,EAAEe,mBAAmB,CACpCC,QAAQ,EACRpB,mBAAmB,CAACiC,uBAAuB,EAC3CJ,OAAO,EAAEzB,iBAAiB,IAAIH,aAAa,CAACG,iBAC9C,CAAC;IACDC,cAAc,EAAEwB,OAAO,EAAExB,cAAc,IAAI;MACzCC,cAAc,EAAE,EAAE;MAClBC,eAAe,EAAE;IACnB;EACF,CAAC;EAEDU,SAAS,CAACC,MAAM,CAAC;AACnB;AAEA,OAAO,SAASgB,QAAQA,CAAA,EAAS;EAC/B,IAAIzB,UAAU,EAAE;IACdqB,OAAO,CAACK,IAAI,CAAC,gCAAgC,CAAC;IAC9C;EACF;EACA1C,qBAAqB,CAAC,CAAC;EACvBK,2BAA2B,CAAC,CAAC;EAC7BF,8BAA8B,CAAC,CAAC;EAChCG,oBAAoB,CAACmC,QAAQ,CAAC,CAAC;EAC/BzB,UAAU,GAAG,IAAI;AACnB;AAEA,OAAO,SAAS2B,qCAAqCA,CACnDP,OAAsC,EACV;EAC5B,IAAI,CAACnC,mBAAmB,CAAC,CAAC,EAAE;IAC1B,OAAO;MACL2C,2BAA2B,EAAGC,CAAU,IAAK,MAAM,CAAC,CAAC;MACrDC,gBAAgB,EAAEA,CAAA,KAAM,CAAC;IAC3B,CAAC;EACH;EACA,IAAI,CAAC7B,SAAS,EAAE;IACd,OAAO;MACL2B,2BAA2B,EAAGC,CAAU,IAAK,MAAM,CAAC,CAAC;MACrDC,gBAAgB,EAAEA,CAAA,KAAM,CAAC;IAC3B,CAAC;EACH;EACA,IAAI9B,UAAU,EAAE;IACd,OAAO;MACL4B,2BAA2B,EAAGC,CAAU,IAAK,MAAM,CAAC,CAAC;MACrDC,gBAAgB,EAAEA,CAAA,KAAM,CAAC;IAC3B,CAAC;EACH;EACA,IAAI,CAAC/B,aAAa,CAACL,oBAAoB,EAAE;IACvC2B,OAAO,CAACK,IAAI,CACV,4GACF,CAAC;IACD,MAAMK,IAAgC,GAAG;MACvCH,2BAA2B,EAAGC,CAAU,IAAK,MAAM;QACjDR,OAAO,CAACK,IAAI,CACV,4GACF,CAAC;MACH,CAAC;MACDI,gBAAgB,EAAEA,CAAA,KAAM,CAAC;IAC3B,CAAC;IACD,OAAOC,IAAI;EACb;EACA,OAAO7C,gCAAgC,CAACkC,OAAO,CAAC;AAClD","ignoreList":[]}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { Pulse } from "./index.js";
|
|
5
|
+
import { getIsShutdown } from "./config.js";
|
|
5
6
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
6
7
|
export const UNKNOWN_COMPONENT = 'unknown';
|
|
7
8
|
const COMPONENT_STACK_UNAVAILABLE = '<component stack unavailable>';
|
|
@@ -20,7 +21,9 @@ export class ErrorBoundary extends React.Component {
|
|
|
20
21
|
// Error is handled if a fallback is provided, otherwise it's unhandled (fatal)
|
|
21
22
|
const handled = !!this.props.fallback;
|
|
22
23
|
const errorToReport = error instanceof Error ? error : new Error(String(error));
|
|
23
|
-
|
|
24
|
+
if (!getIsShutdown()) {
|
|
25
|
+
Pulse.reportException(errorToReport, !handled);
|
|
26
|
+
}
|
|
24
27
|
if (onError) {
|
|
25
28
|
onError(error, componentStack);
|
|
26
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Pulse","jsx","_jsx","UNKNOWN_COMPONENT","COMPONENT_STACK_UNAVAILABLE","INITIAL_STATE","componentStack","error","ErrorBoundary","Component","state","componentDidCatch","errorInfo","onError","props","handled","fallback","errorToReport","Error","String","reportException","setState","render","children","element","createElement","isValidElement","withErrorBoundary","WrappedComponent","errorBoundaryOptions","componentDisplayName","displayName","name","Wrapped","memo"],"sourceRoot":"../../src","sources":["errorBoundary.tsx"],"mappings":";;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SAASC,KAAK,QAAQ,YAAS;AAAC,SAAAC,GAAA,IAAAC,IAAA;
|
|
1
|
+
{"version":3,"names":["React","Pulse","getIsShutdown","jsx","_jsx","UNKNOWN_COMPONENT","COMPONENT_STACK_UNAVAILABLE","INITIAL_STATE","componentStack","error","ErrorBoundary","Component","state","componentDidCatch","errorInfo","onError","props","handled","fallback","errorToReport","Error","String","reportException","setState","render","children","element","createElement","isValidElement","withErrorBoundary","WrappedComponent","errorBoundaryOptions","componentDisplayName","displayName","name","Wrapped","memo"],"sourceRoot":"../../src","sources":["errorBoundary.tsx"],"mappings":";;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SAASC,KAAK,QAAQ,YAAS;AAC/B,SAASC,aAAa,QAAQ,aAAU;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEzC,OAAO,MAAMC,iBAAiB,GAAG,SAAS;AAC1C,MAAMC,2BAA2B,GAAG,+BAA+B;AAuBnE,MAAMC,aAAiC,GAAG;EACxCC,cAAc,EAAE,IAAI;EACpBC,KAAK,EAAE;AACT,CAAC;AAED,OAAO,MAAMC,aAAa,SAASV,KAAK,CAACW,SAAS,CAGhD;EACOC,KAAK,GAAuBL,aAAa;EAEzCM,iBAAiBA,CAACJ,KAAc,EAAEK,SAA0B,EAAQ;IACzE,MAAMN,cAAc,GAClBM,SAAS,CAACN,cAAc,IAAIF,2BAA2B;IACzD,MAAM;MAAES;IAAQ,CAAC,GAAG,IAAI,CAACC,KAAK;;IAE9B;IACA,MAAMC,OAAO,GAAG,CAAC,CAAC,IAAI,CAACD,KAAK,CAACE,QAAQ;IAErC,MAAMC,aAAa,GACjBV,KAAK,YAAYW,KAAK,GAAGX,KAAK,GAAG,IAAIW,KAAK,CAACC,MAAM,CAACZ,KAAK,CAAC,CAAC;IAC3D,IAAI,CAACP,aAAa,CAAC,CAAC,EAAE;MACpBD,KAAK,CAACqB,eAAe,CAACH,aAAa,EAAE,CAACF,OAAO,CAAC;IAChD;IAEA,IAAIF,OAAO,EAAE;MACXA,OAAO,CAACN,KAAK,EAAED,cAAc,CAAC;IAChC;IAEA,IAAI,CAACe,QAAQ,CAAC;MAAEd,KAAK;MAAED;IAAe,CAAC,CAAC;EAC1C;EAEOgB,MAAMA,CAAA,EAAoB;IAC/B,MAAM;MAAEN,QAAQ;MAAEO;IAAS,CAAC,GAAG,IAAI,CAACT,KAAK;IACzC,MAAMJ,KAAK,GAAG,IAAI,CAACA,KAAK;IAExB,IAAIA,KAAK,CAACJ,cAAc,KAAK,IAAI,EAAE;MACjC,OAAO,OAAOiB,QAAQ,KAAK,UAAU,GAAGA,QAAQ,CAAC,CAAC,GAAGA,QAAQ;IAC/D;IAEA,MAAMC,OAAO,GACX,OAAOR,QAAQ,KAAK,UAAU,gBAC1BlB,KAAK,CAAC2B,aAAa,CAACT,QAAQ,EAAE;MAC5BT,KAAK,EAAEG,KAAK,CAACH,KAAK;MAClBD,cAAc,EAAEI,KAAK,CAACJ;IACxB,CAAC,CAAC,GACFU,QAAQ;IAEd,iBAAIlB,KAAK,CAAC4B,cAAc,CAACF,OAAO,CAAC,EAAE;MACjC,OAAOA,OAAO;IAChB;IAEA,OAAO,IAAI;EACb;AACF;AAEA,OAAO,SAASG,iBAAiBA,CAC/BC,gBAAwC,EACxCC,oBAAwC,EAC3B;EACb,MAAMC,oBAAoB,GACxBF,gBAAgB,CAACG,WAAW,IAAIH,gBAAgB,CAACI,IAAI,IAAI7B,iBAAiB;EAE5E,MAAM8B,OAAO,gBAAGnC,KAAK,CAACoC,IAAI,CAAEpB,KAAQ,iBAClCZ,IAAA,CAACM,aAAa;IAAA,GAAKqB,oBAAoB;IAAAN,QAAA,eACrCrB,IAAA,CAAC0B,gBAAgB;MAAA,GAAKd;IAAK,CAAG;EAAC,CAClB,CAChB,CAA2B;EAE5BmB,OAAO,CAACF,WAAW,GAAG,iBAAiBD,oBAAoB,GAAG;EAE9D,OAAOG,OAAO;AAChB","ignoreList":[]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import PulseReactNativeOtel from "./NativePulseReactNativeOtel.js";
|
|
4
|
+
import { getIsShutdown, getIsStarted } from "./config.js";
|
|
4
5
|
import { mergeWithGlobalAttributes } from "./globalAttributes.js";
|
|
5
6
|
import { isSupportedPlatform } from "./initialization.js";
|
|
6
7
|
import { extractErrorDetails } from "./utility.js";
|
|
@@ -45,7 +46,7 @@ function handleGlobalError(error, isFatal) {
|
|
|
45
46
|
}
|
|
46
47
|
}
|
|
47
48
|
export function reportException(error, isFatal = false, attributes) {
|
|
48
|
-
if (!isSupportedPlatform()) {
|
|
49
|
+
if (!isSupportedPlatform() || !getIsStarted() || getIsShutdown()) {
|
|
49
50
|
return;
|
|
50
51
|
}
|
|
51
52
|
let errorMessage;
|
|
@@ -102,6 +103,9 @@ function disableErrorHandler() {
|
|
|
102
103
|
previousErrorHandler = null;
|
|
103
104
|
handlingFatal = false;
|
|
104
105
|
}
|
|
106
|
+
export function uninstallErrorHandler() {
|
|
107
|
+
disableErrorHandler();
|
|
108
|
+
}
|
|
105
109
|
export function setupErrorHandler(enableErrorHandler) {
|
|
106
110
|
if (enableErrorHandler) {
|
|
107
111
|
initializeErrorHandler();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["PulseReactNativeOtel","mergeWithGlobalAttributes","isSupportedPlatform","extractErrorDetails","previousErrorHandler","isInitialized","handlingFatal","reportToOpenTelemetry","errorMessage","stackTrace","isFatal","errorType","attributes","observedTimeMs","Date","now","mergedAttributes","reportException","handleGlobalError","error","shouldHandleFatal","trackEvent","message","console","setTimeout","handlerError","details","initializeErrorHandler","warn","ErrorUtils","currentHandler","getGlobalHandler","log","setGlobalHandler","disableErrorHandler","setupErrorHandler","enableErrorHandler"],"sourceRoot":"../../src","sources":["errorHandler.ts"],"mappings":";;AAAA,OAAOA,oBAAoB,MAAM,iCAA8B;AAC/D,SAASC,yBAAyB,QAAQ,uBAAoB;AAC9D,SAASC,mBAAmB,QAAQ,qBAAkB;AACtD,SAASC,mBAAmB,QAAQ,cAAW;AAG/C,IAAIC,oBAAwE,GAC1E,IAAI;AAEN,IAAIC,aAAa,GAAG,KAAK;AACzB,IAAIC,aAAa,GAAG,KAAK;AAEzB,SAASC,qBAAqBA,CAC5BC,YAAoB,EACpBC,UAAkB,EAClBC,OAAgB,EAChBC,SAAiB,EACjBC,UAA4B,EACtB;EACN,MAAMC,cAAc,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;EACjC,MAAMC,gBAAgB,GAAGf,yBAAyB,CAACW,UAAU,IAAI,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"names":["PulseReactNativeOtel","getIsShutdown","getIsStarted","mergeWithGlobalAttributes","isSupportedPlatform","extractErrorDetails","previousErrorHandler","isInitialized","handlingFatal","reportToOpenTelemetry","errorMessage","stackTrace","isFatal","errorType","attributes","observedTimeMs","Date","now","mergedAttributes","reportException","handleGlobalError","error","shouldHandleFatal","trackEvent","message","console","setTimeout","handlerError","details","initializeErrorHandler","warn","ErrorUtils","currentHandler","getGlobalHandler","log","setGlobalHandler","disableErrorHandler","uninstallErrorHandler","setupErrorHandler","enableErrorHandler"],"sourceRoot":"../../src","sources":["errorHandler.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/events.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import PulseReactNativeOtel from "./NativePulseReactNativeOtel.js";
|
|
4
|
-
import { getFeaturesFromRemoteConfig } from "./config.js";
|
|
4
|
+
import { getFeaturesFromRemoteConfig, getIsShutdown, getIsStarted } from "./config.js";
|
|
5
5
|
import { mergeWithGlobalAttributes } from "./globalAttributes.js";
|
|
6
6
|
import { isSupportedPlatform } from "./initialization.js";
|
|
7
7
|
export function trackEvent(event, attributes) {
|
|
8
|
-
if (!isSupportedPlatform()) {
|
|
8
|
+
if (!isSupportedPlatform() || !getIsStarted() || getIsShutdown()) {
|
|
9
9
|
return;
|
|
10
10
|
}
|
|
11
11
|
const features = getFeaturesFromRemoteConfig();
|
package/lib/module/events.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["PulseReactNativeOtel","getFeaturesFromRemoteConfig","mergeWithGlobalAttributes","isSupportedPlatform","trackEvent","event","attributes","features","customEventsEnabled","custom_events","observedTimeMs","Date","now","mergedAttributes"],"sourceRoot":"../../src","sources":["events.ts"],"mappings":";;AAAA,OAAOA,oBAAoB,MAAM,iCAA8B;AAC/D,
|
|
1
|
+
{"version":3,"names":["PulseReactNativeOtel","getFeaturesFromRemoteConfig","getIsShutdown","getIsStarted","mergeWithGlobalAttributes","isSupportedPlatform","trackEvent","event","attributes","features","customEventsEnabled","custom_events","observedTimeMs","Date","now","mergedAttributes"],"sourceRoot":"../../src","sources":["events.ts"],"mappings":";;AAAA,OAAOA,oBAAoB,MAAM,iCAA8B;AAC/D,SACEC,2BAA2B,EAC3BC,aAAa,EACbC,YAAY,QACP,aAAU;AACjB,SAASC,yBAAyB,QAAQ,uBAAoB;AAC9D,SAASC,mBAAmB,QAAQ,qBAAkB;AAGtD,OAAO,SAASC,UAAUA,CAACC,KAAa,EAAEC,UAA4B,EAAQ;EAC5E,IAAI,CAACH,mBAAmB,CAAC,CAAC,IAAI,CAACF,YAAY,CAAC,CAAC,IAAID,aAAa,CAAC,CAAC,EAAE;IAChE;EACF;EACA,MAAMO,QAAQ,GAAGR,2BAA2B,CAAC,CAAC;EAC9C,MAAMS,mBAAmB,GAAGD,QAAQ,EAAEE,aAAa,IAAI,IAAI;EAE3D,IAAI,CAACD,mBAAmB,EAAE;IACxB;EACF;EAEA,MAAME,cAAc,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;EACjC,MAAMC,gBAAgB,GAAGX,yBAAyB,CAACI,UAAU,IAAI,CAAC,CAAC,CAAC;EAEpER,oBAAoB,CAACM,UAAU,CAACC,KAAK,EAAEK,cAAc,EAAEG,gBAAgB,CAAC;AAC1E","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { startSpan, trackSpan } from "./trace.js";
|
|
4
4
|
import { reportException } from "./errorHandler.js";
|
|
5
5
|
import { trackEvent } from "./events.js";
|
|
6
|
-
import { start } from "./config.js";
|
|
6
|
+
import { start, shutdown } from "./config.js";
|
|
7
7
|
import { isInitialized } from "./initialization.js";
|
|
8
8
|
import { setGlobalAttribute } from "./globalAttributes.js";
|
|
9
9
|
import { setUserId, setUserProperty, setUserProperties } from "./user.js";
|
|
@@ -12,6 +12,7 @@ import { useNavigationTracking, markContentReady } from "./navigation/index.js";
|
|
|
12
12
|
export { SpanStatusCode } from "./trace.js";
|
|
13
13
|
export const Pulse = {
|
|
14
14
|
start,
|
|
15
|
+
shutdown,
|
|
15
16
|
isInitialized,
|
|
16
17
|
useNavigationTracking,
|
|
17
18
|
markContentReady,
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["startSpan","trackSpan","reportException","trackEvent","start","isInitialized","setGlobalAttribute","setUserId","setUserProperty","setUserProperties","ErrorBoundary","withErrorBoundary","useNavigationTracking","markContentReady","SpanStatusCode","Pulse"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,SAAS,QAAQ,YAAS;AAC9C,SAASC,eAAe,QAAQ,mBAAgB;AAChD,SAASC,UAAU,QAAQ,aAAU;AACrC,SAASC,KAAK,QAAQ,aAAU;
|
|
1
|
+
{"version":3,"names":["startSpan","trackSpan","reportException","trackEvent","start","shutdown","isInitialized","setGlobalAttribute","setUserId","setUserProperty","setUserProperties","ErrorBoundary","withErrorBoundary","useNavigationTracking","markContentReady","SpanStatusCode","Pulse"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,SAAS,QAAQ,YAAS;AAC9C,SAASC,eAAe,QAAQ,mBAAgB;AAChD,SAASC,UAAU,QAAQ,aAAU;AACrC,SAASC,KAAK,EAAEC,QAAQ,QAAQ,aAAU;AAC1C,SAASC,aAAa,QAAQ,qBAAkB;AAChD,SAASC,kBAAkB,QAAQ,uBAAoB;AACvD,SAASC,SAAS,EAAEC,eAAe,EAAEC,iBAAiB,QAAQ,WAAQ;AACtE,SAASC,aAAa,EAAEC,iBAAiB,QAAQ,oBAAiB;AAClE,SAASC,qBAAqB,EAAEC,gBAAgB,QAAQ,uBAAc;AAatE,SAASC,cAAc,QAAQ,YAAS;AACxC,OAAO,MAAMC,KAAK,GAAG;EACnBZ,KAAK;EACLC,QAAQ;EACRC,aAAa;EACbO,qBAAqB;EACrBC,gBAAgB;EAChBX,UAAU;EACVD,eAAe;EACfD,SAAS;EACTD,SAAS;EACTO,kBAAkB;EAClBC,SAAS;EACTC,eAAe;EACfC,iBAAiB;EACjBC,aAAa;EACbC;AACF,CAAC","ignoreList":[]}
|