@truewatchtech/react-native-mobile 0.3.15-alpha.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 (102) hide show
  1. package/FTMobileReactNativeSDK.podspec +22 -0
  2. package/LICENSE +201 -0
  3. package/README.md +37 -0
  4. package/android/.project +17 -0
  5. package/android/.settings/org.eclipse.buildship.core.prefs +13 -0
  6. package/android/build.gradle +183 -0
  7. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  8. package/android/gradle/wrapper/gradle-wrapper.properties +5 -0
  9. package/android/gradle.properties +5 -0
  10. package/android/gradlew +185 -0
  11. package/android/gradlew.bat +89 -0
  12. package/android/local.properties +8 -0
  13. package/android/src/main/AndroidManifest.xml +4 -0
  14. package/android/src/main/AndroidManifestNew.xml +4 -0
  15. package/android/src/main/java/com/ft/sdk/InnerClassProxy.java +8 -0
  16. package/android/src/main/java/com/ft/sdk/reactnative/FTLogImpl.java +133 -0
  17. package/android/src/main/java/com/ft/sdk/reactnative/FTMobileImpl.java +198 -0
  18. package/android/src/main/java/com/ft/sdk/reactnative/FTRUMImpl.java +267 -0
  19. package/android/src/main/java/com/ft/sdk/reactnative/FTTraceImpl.java +89 -0
  20. package/android/src/main/java/com/ft/sdk/reactnative/utils/ReactNativeUtils.java +59 -0
  21. package/android/src/newarch/java/com/ft/sdk/reactnative/FTLogModule.java +39 -0
  22. package/android/src/newarch/java/com/ft/sdk/reactnative/FTMobileModule.java +69 -0
  23. package/android/src/newarch/java/com/ft/sdk/reactnative/FTRUMModule.java +84 -0
  24. package/android/src/newarch/java/com/ft/sdk/reactnative/FTTraceModule.java +34 -0
  25. package/android/src/oldarch/java/com/ft/sdk/reactnative/FTLogModule.java +36 -0
  26. package/android/src/oldarch/java/com/ft/sdk/reactnative/FTMobileModule.java +69 -0
  27. package/android/src/oldarch/java/com/ft/sdk/reactnative/FTRUMModule.java +70 -0
  28. package/android/src/oldarch/java/com/ft/sdk/reactnative/FTTraceModule.java +30 -0
  29. package/android/src/rnpost74/java/com/ft/sdk/reactnative/FTMobilePackage.java +71 -0
  30. package/android/src/rnpre74/java/com/ft/sdk/reactnative/FTMobilePackage.java +33 -0
  31. package/ios/.idea/.name +1 -0
  32. package/ios/.idea/ios.iml +2 -0
  33. package/ios/.idea/modules.xml +8 -0
  34. package/ios/.idea/vcs.xml +6 -0
  35. package/ios/.idea/xcode.xml +4 -0
  36. package/ios/FTMobileReactNative.h +18 -0
  37. package/ios/FTMobileReactNative.m +183 -0
  38. package/ios/FTReactNativeLog.h +18 -0
  39. package/ios/FTReactNativeLog.m +60 -0
  40. package/ios/FTReactNativeRUM.h +19 -0
  41. package/ios/FTReactNativeRUM.m +173 -0
  42. package/ios/FTReactNativeTrace.h +20 -0
  43. package/ios/FTReactNativeTrace.m +58 -0
  44. package/ios/FTReactNativeUtils.h +16 -0
  45. package/ios/FTReactNativeUtils.m +32 -0
  46. package/ios/FtMobileAgent.xcodeproj/project.pbxproj +293 -0
  47. package/ios/FtMobileAgent.xcodeproj/project.xcworkspace/contents.xcworkspacedata +4 -0
  48. package/ios/FtMobileAgent.xcodeproj/project.xcworkspace/xcuserdata/Brandon.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  49. package/ios/FtMobileAgent.xcodeproj/project.xcworkspace/xcuserdata/Brandon.xcuserdatad/xcschemes/xcschememanagement.plist +5 -0
  50. package/ios/FtMobileAgent.xcodeproj/xcuserdata/Brandon.xcuserdatad/xcschemes/FtMobileAgent.xcscheme +56 -0
  51. package/ios/FtMobileAgent.xcodeproj/xcuserdata/Brandon.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  52. package/ios/RCTVersion.h +8 -0
  53. package/lib/commonjs/ft_logger.js +70 -0
  54. package/lib/commonjs/ft_logger.js.map +1 -0
  55. package/lib/commonjs/ft_mobile_agent.js +93 -0
  56. package/lib/commonjs/ft_mobile_agent.js.map +1 -0
  57. package/lib/commonjs/ft_rum.js +143 -0
  58. package/lib/commonjs/ft_rum.js.map +1 -0
  59. package/lib/commonjs/ft_tracing.js +61 -0
  60. package/lib/commonjs/ft_tracing.js.map +1 -0
  61. package/lib/commonjs/index.js +138 -0
  62. package/lib/commonjs/index.js.map +1 -0
  63. package/lib/commonjs/rum/FTRumActionTracking.js +214 -0
  64. package/lib/commonjs/rum/FTRumActionTracking.js.map +1 -0
  65. package/lib/commonjs/rum/FTRumErrorTracking.js +99 -0
  66. package/lib/commonjs/rum/FTRumErrorTracking.js.map +1 -0
  67. package/lib/commonjs/version.js +9 -0
  68. package/lib/commonjs/version.js.map +1 -0
  69. package/lib/module/ft_logger.js +64 -0
  70. package/lib/module/ft_logger.js.map +1 -0
  71. package/lib/module/ft_mobile_agent.js +88 -0
  72. package/lib/module/ft_mobile_agent.js.map +1 -0
  73. package/lib/module/ft_rum.js +138 -0
  74. package/lib/module/ft_rum.js.map +1 -0
  75. package/lib/module/ft_tracing.js +56 -0
  76. package/lib/module/ft_tracing.js.map +1 -0
  77. package/lib/module/index.js +8 -0
  78. package/lib/module/index.js.map +1 -0
  79. package/lib/module/rum/FTRumActionTracking.js +206 -0
  80. package/lib/module/rum/FTRumActionTracking.js.map +1 -0
  81. package/lib/module/rum/FTRumErrorTracking.js +92 -0
  82. package/lib/module/rum/FTRumErrorTracking.js.map +1 -0
  83. package/lib/module/version.js +3 -0
  84. package/lib/module/version.js.map +1 -0
  85. package/lib/typescript/ft_logger.d.ts +52 -0
  86. package/lib/typescript/ft_mobile_agent.d.ts +123 -0
  87. package/lib/typescript/ft_rum.d.ts +200 -0
  88. package/lib/typescript/ft_tracing.d.ts +47 -0
  89. package/lib/typescript/index.d.ts +7 -0
  90. package/lib/typescript/rum/FTRumActionTracking.d.ts +15 -0
  91. package/lib/typescript/rum/FTRumErrorTracking.d.ts +11 -0
  92. package/lib/typescript/version.d.ts +1 -0
  93. package/package.json +167 -0
  94. package/scripts/replace-react-require.js +52 -0
  95. package/src/ft_logger.tsx +77 -0
  96. package/src/ft_mobile_agent.tsx +162 -0
  97. package/src/ft_rum.tsx +247 -0
  98. package/src/ft_tracing.tsx +79 -0
  99. package/src/index.tsx +17 -0
  100. package/src/rum/FTRumActionTracking.tsx +232 -0
  101. package/src/rum/FTRumErrorTracking.tsx +110 -0
  102. package/src/version.ts +2 -0
@@ -0,0 +1,267 @@
1
+ package com.ft.sdk.reactnative;
2
+
3
+ import com.ft.sdk.reactnative.BuildConfig;
4
+ import com.facebook.react.bridge.Promise;
5
+ import com.facebook.react.bridge.ReactMethod;
6
+ import com.facebook.react.bridge.ReadableMap;
7
+ import com.ft.sdk.DetectFrequency;
8
+ import com.ft.sdk.FTInTakeUrlHandler;
9
+ import com.ft.sdk.FTRUMConfig;
10
+ import com.ft.sdk.FTRUMGlobalManager;
11
+ import com.ft.sdk.FTSdk;
12
+ import com.ft.sdk.RUMCacheDiscard;
13
+ import com.ft.sdk.garble.bean.AppState;
14
+ import com.ft.sdk.garble.bean.NetStatusBean;
15
+ import com.ft.sdk.garble.bean.ResourceParams;
16
+ import com.ft.sdk.reactnative.utils.ReactNativeUtils;
17
+
18
+ import java.util.HashMap;
19
+ import java.util.Map;
20
+
21
+ public class FTRUMImpl {
22
+
23
+ private static final String DEFAULT_ERROR_TYPE = "reactnative_crash";
24
+ public static final String NAME = "FTReactNativeRUM";
25
+
26
+ @ReactMethod
27
+ public void setConfig(ReadableMap context, Promise promise) {
28
+ Map<String, Object> map = context.toHashMap();
29
+ String rumAppId = (String) map.get("androidAppId");
30
+ Double sampleRate = (Double) map.get("sampleRate");
31
+ Double sessionOnErrorSampleRate = (Double) map.get("sessionOnErrorSampleRate");
32
+
33
+ Boolean enableNativeUserAction = (Boolean) map.get("enableNativeUserAction");
34
+ Boolean enableNativeUserView = (Boolean) map.get("enableNativeUserView");
35
+ Boolean enableNativeUserResource = (Boolean) map.get("enableNativeUserResource");
36
+ Boolean enableResourceHostIP = (Boolean) map.get("enableResourceHostIP");
37
+ Boolean enableTrackNativeCrash = (Boolean) map.get("enableTrackNativeCrash");
38
+ Boolean enableTrackNativeAppANR = (Boolean) map.get("enableTrackNativeAppANR");
39
+ Boolean enableTrackNativeFreeze = (Boolean) map.get("enableTrackNativeFreeze");
40
+ Double nativeFreezeDurationMs = (Double) map.get("nativeFreezeDurationMs");
41
+ Integer monitorType = ReactNativeUtils.convertToNativeInt(map.get("errorMonitorType"));
42
+ Integer deviceMonitorType = ReactNativeUtils.convertToNativeInt(map.get("deviceMonitorType"));
43
+ Integer detectFrequency = ReactNativeUtils.convertToNativeInt(map.get("detectFrequency"));
44
+ Map<String, Object> globalContext = (Map<String, Object>) map.get("globalContext");
45
+ Integer rumCacheLimitCount = ReactNativeUtils.convertToNativeInt(map.get("rumCacheLimitCount"));
46
+ Integer rumDiscardStrategy = ReactNativeUtils.convertToNativeInt(map.get("rumDiscardStrategy"));
47
+
48
+ FTRUMConfig rumConfig = new FTRUMConfig().setRumAppId(rumAppId);
49
+ if (sampleRate != null) {
50
+ rumConfig.setSamplingRate(sampleRate.floatValue());
51
+ }
52
+ if (sessionOnErrorSampleRate != null) {
53
+ rumConfig.setSessionErrorSampleRate(sessionOnErrorSampleRate.floatValue());
54
+ }
55
+ if (enableNativeUserAction != null) {
56
+ rumConfig.setEnableTraceUserAction(enableNativeUserAction);
57
+ }
58
+ if (enableNativeUserView != null) {
59
+ rumConfig.setEnableTraceUserView(enableNativeUserView);
60
+ }
61
+ if (enableNativeUserResource != null) {
62
+ rumConfig.setEnableTraceUserResource(enableNativeUserResource);
63
+ }
64
+ if (enableResourceHostIP != null) {
65
+ rumConfig.setEnableResourceHostIP(enableResourceHostIP);
66
+ }
67
+ if (enableTrackNativeCrash != null) {
68
+ rumConfig.setEnableTrackAppCrash(enableTrackNativeCrash);
69
+ }
70
+ if (enableTrackNativeFreeze != null) {
71
+ if (nativeFreezeDurationMs != null) {
72
+ rumConfig.setEnableTrackAppUIBlock(enableTrackNativeFreeze, nativeFreezeDurationMs.longValue());
73
+ } else {
74
+ rumConfig.setEnableTrackAppUIBlock(enableTrackNativeFreeze);
75
+ }
76
+ }
77
+ if (enableTrackNativeAppANR != null) {
78
+ rumConfig.setEnableTrackAppANR(enableTrackNativeAppANR);
79
+ }
80
+ if (monitorType != null) {
81
+ rumConfig.setExtraMonitorTypeWithError(monitorType);
82
+ }
83
+ if (deviceMonitorType != null) {
84
+ if (detectFrequency != null) {
85
+ DetectFrequency deviceMetricsDetectFrequency;
86
+ switch (detectFrequency) {
87
+ case 1:
88
+ deviceMetricsDetectFrequency = DetectFrequency.FREQUENT;
89
+ break;
90
+ case 2:
91
+ deviceMetricsDetectFrequency = DetectFrequency.RARE;
92
+ break;
93
+ default:
94
+ deviceMetricsDetectFrequency = DetectFrequency.DEFAULT;
95
+ break;
96
+ }
97
+ rumConfig.setDeviceMetricsMonitorType(deviceMonitorType, deviceMetricsDetectFrequency);
98
+ } else {
99
+ rumConfig.setDeviceMetricsMonitorType(deviceMonitorType);
100
+ }
101
+ }
102
+ if (globalContext != null) {
103
+ for (Map.Entry<String, Object> entry : globalContext.entrySet()) {
104
+ rumConfig.addGlobalContext(entry.getKey(), entry.getValue().toString());
105
+ }
106
+ }
107
+ if (BuildConfig.DEBUG) {
108
+ rumConfig.setResourceUrlHandler(new FTInTakeUrlHandler() {
109
+ @Override
110
+ public boolean isInTakeUrl(String url) {
111
+ return ReactNativeUtils.isReactNativeDevUrl(url);
112
+ }
113
+ });
114
+ }
115
+ if (rumCacheLimitCount != null) {
116
+ rumConfig.setRumCacheLimitCount(rumCacheLimitCount);
117
+ }
118
+ if (rumDiscardStrategy != null) {
119
+ RUMCacheDiscard rumCacheDiscard = RUMCacheDiscard.DISCARD;
120
+ if (rumDiscardStrategy == 1) {
121
+ rumCacheDiscard = RUMCacheDiscard.DISCARD_OLDEST;
122
+ }
123
+ rumConfig.setRumCacheDiscardStrategy(rumCacheDiscard);
124
+ }
125
+ FTSdk.initRUMWithConfig(rumConfig);
126
+ //LogUtils.d("configCheck","rumConfig:"+new Gson().toJson(rumConfig));
127
+ promise.resolve(null);
128
+ }
129
+
130
+ @ReactMethod
131
+ public void startAction(String actionName, String actionType, ReadableMap map, Promise promise) {
132
+ if (map != null) {
133
+ FTRUMGlobalManager.get().startAction(actionName, actionType, map.toHashMap());
134
+ } else {
135
+ FTRUMGlobalManager.get().startAction(actionName, actionType);
136
+ }
137
+ promise.resolve(null);
138
+ }
139
+
140
+ @ReactMethod
141
+ public void addAction(String actionName, String actionType, ReadableMap map, Promise promise) {
142
+ if (map != null) {
143
+ FTRUMGlobalManager.get().addAction(actionName, actionType, map.toHashMap());
144
+ } else {
145
+ FTRUMGlobalManager.get().addAction(actionName, actionType);
146
+ }
147
+ promise.resolve(null);
148
+ }
149
+
150
+ @ReactMethod
151
+ public void onCreateView(String viewName, Double duration, Promise promise) {
152
+ FTRUMGlobalManager.get().onCreateView(viewName, duration.longValue());
153
+ promise.resolve(null);
154
+ }
155
+
156
+ @ReactMethod
157
+ public void startView(String viewName, ReadableMap map, Promise promise) {
158
+ if (map != null) {
159
+ FTRUMGlobalManager.get().startView(viewName, map.toHashMap());
160
+ } else {
161
+ FTRUMGlobalManager.get().startView(viewName);
162
+ }
163
+ promise.resolve(null);
164
+ }
165
+
166
+ @ReactMethod
167
+ public void stopView(ReadableMap map, Promise promise) {
168
+ if (map != null) {
169
+ FTRUMGlobalManager.get().stopView(map.toHashMap());
170
+ } else {
171
+ FTRUMGlobalManager.get().stopView();
172
+ }
173
+ promise.resolve(null);
174
+ }
175
+
176
+ @ReactMethod
177
+ public void addError(String stack, String message, ReadableMap map, Promise promise) {
178
+ if (map != null) {
179
+ FTRUMGlobalManager.get().addError(stack, message, DEFAULT_ERROR_TYPE, AppState.RUN, map.toHashMap());
180
+ } else {
181
+ FTRUMGlobalManager.get().addError(stack, message, DEFAULT_ERROR_TYPE, AppState.RUN);
182
+ }
183
+ promise.resolve(null);
184
+ }
185
+
186
+ @ReactMethod
187
+ public void addErrorWithType(String errorType, String stack, String message, ReadableMap map, Promise promise) {
188
+ if (map != null) {
189
+ FTRUMGlobalManager.get().addError(stack, message, errorType, AppState.RUN, map.toHashMap());
190
+ } else {
191
+ FTRUMGlobalManager.get().addError(stack, message, errorType, AppState.RUN);
192
+ }
193
+ promise.resolve(null);
194
+ }
195
+
196
+ @ReactMethod
197
+ public void startResource(String key, ReadableMap map, Promise promise) {
198
+ if (map != null) {
199
+ FTRUMGlobalManager.get().startResource(key, map.toHashMap());
200
+ } else {
201
+ FTRUMGlobalManager.get().startResource(key);
202
+ }
203
+ promise.resolve(null);
204
+ }
205
+
206
+ @ReactMethod
207
+ public void stopResource(String key, ReadableMap map, Promise promise) {
208
+ if (map != null) {
209
+ FTRUMGlobalManager.get().stopResource(key, map.toHashMap());
210
+ } else {
211
+ FTRUMGlobalManager.get().stopResource(key);
212
+ }
213
+ promise.resolve(null);
214
+ }
215
+
216
+ @ReactMethod
217
+ public void addResource(String key, ReadableMap resourceContext, ReadableMap metricsContext, Promise promise) {
218
+ HashMap<String, Object> resourceMap = resourceContext.toHashMap();
219
+ String url = (String) resourceMap.get("url");
220
+ HashMap<String, String> responseHeader = (HashMap<String, String>) resourceMap.get("responseHeader");
221
+ HashMap<String, String> requestHeader = (HashMap<String, String>) resourceMap.get("requestHeader");
222
+ String method = (String) resourceMap.get("httpMethod");
223
+ Integer resourceStatus = ReactNativeUtils.convertToNativeInt(resourceMap.get("resourceStatus"));
224
+ String responseBody = (String) resourceMap.get("responseBody");
225
+ // String responseConnection = (String) resourceMap.get("responseConnection");
226
+ // String responseContentType = (String) resourceMap.get("responseContentType");
227
+ // String responseContentEncoding = (String) resourceMap.get("responseContentEncoding");
228
+
229
+ // HashMap<String, Object> metricsMap = metricsContext.toHashMap();
230
+ // Long fetchStartTime = ReactNativeUtils.convertToNativeLong(metricsMap.get("fetchStartTime"));
231
+ // Long tcpStartTime = ReactNativeUtils.convertToNativeLong(metricsMap.get("tcpStartTime"));
232
+ // Long tcpEndTime = ReactNativeUtils.convertToNativeLong(metricsMap.get("tcpEndTime"));
233
+ // Long dnsStartTime = ReactNativeUtils.convertToNativeLong(metricsMap.get("dnsStartTime"));
234
+ // Long dnsEndTime = ReactNativeUtils.convertToNativeLong(metricsMap.get("dnsEndTime"));
235
+ // Long responseStartTime = ReactNativeUtils.convertToNativeLong(metricsMap.get("responseStartTime"));
236
+ // Long responseEndTime = ReactNativeUtils.convertToNativeLong(metricsMap.get("responseEndTime"));
237
+ // Long sslStartTime = ReactNativeUtils.convertToNativeLong(metricsMap.get("sslStartTime"));
238
+ // Long sslEndTime = ReactNativeUtils.convertToNativeLong(metricsMap.get("sslEndTime"));
239
+
240
+ ResourceParams params = new ResourceParams();
241
+ params.url = url != null ? url : "";
242
+ params.responseHeader = responseHeader != null ? responseHeader.toString() : "";
243
+ params.resourceMethod = method;
244
+ params.requestHeader = requestHeader != null ? requestHeader.toString() : "";
245
+ params.resourceStatus = resourceStatus != null ? resourceStatus : 0;
246
+ params.responseBody = responseBody != null ? responseBody : "";
247
+ // params.responseConnection = responseConnection != null ? responseConnection : "";
248
+ // params.responseContentType = responseContentType != null ? responseContentType : "";
249
+ // params.responseContentEncoding = responseContentEncoding != null ? responseContentEncoding : "";
250
+
251
+ //not implement
252
+ NetStatusBean netStatusBean = new NetStatusBean();
253
+ // netStatusBean.fetchStartTime = (fetchStartTime != null ? fetchStartTime : -1L);
254
+ // netStatusBean.tcpStartTime = (tcpStartTime != null ? tcpStartTime : -1L);
255
+ // netStatusBean.tcpEndTime = (tcpEndTime != null ? tcpEndTime : -1L);
256
+ // netStatusBean.dnsStartTime = (dnsStartTime != null ? dnsStartTime : -1L);
257
+ // netStatusBean.dnsEndTime = (dnsEndTime != null ? dnsEndTime : -1L);
258
+ // netStatusBean.responseStartTime = (responseStartTime != null ? responseStartTime : -1L);
259
+ // netStatusBean.responseEndTime = (responseEndTime != null ? responseEndTime : -1L);
260
+ // netStatusBean.sslStartTime = (sslStartTime != null ? sslStartTime : -1L);
261
+ // netStatusBean.sslEndTime = (sslEndTime != null ? sslEndTime : -1L);
262
+
263
+ FTRUMGlobalManager.get().addResource(key, params, netStatusBean);
264
+ promise.resolve(null);
265
+ }
266
+
267
+ }
@@ -0,0 +1,89 @@
1
+ package com.ft.sdk.reactnative;
2
+
3
+ import com.facebook.react.bridge.Promise;
4
+ import com.facebook.react.bridge.ReactMethod;
5
+ import com.facebook.react.bridge.ReadableMap;
6
+ import com.facebook.react.bridge.WritableNativeMap;
7
+ import com.ft.sdk.FTSdk;
8
+ import com.ft.sdk.FTTraceConfig;
9
+ import com.ft.sdk.FTTraceManager;
10
+ import com.ft.sdk.TraceType;
11
+ import com.ft.sdk.reactnative.utils.ReactNativeUtils;
12
+
13
+ import java.util.HashMap;
14
+ import java.util.Map;
15
+
16
+ public class FTTraceImpl {
17
+ public static final String NAME = "FTReactNativeTrace";
18
+ private static final String TAG = "FTTraceModule";
19
+
20
+ @ReactMethod
21
+ public void setConfig(ReadableMap context, Promise promise) {
22
+ Map<String, Object> map = context.toHashMap();
23
+ Double sampleRate = (Double) map.get("sampleRate");
24
+ Integer traceType = ReactNativeUtils.convertToNativeInt(map.get("traceType"));
25
+ Boolean enableLinkRUMData = (Boolean) map.get("enableLinkRUMData");
26
+ Boolean enableNativeAutoTrace = (Boolean) map.get("enableNativeAutoTrace");
27
+
28
+ FTTraceConfig traceConfig = new FTTraceConfig();
29
+ if (sampleRate != null) {
30
+ traceConfig.setSamplingRate(sampleRate.floatValue());
31
+ }
32
+
33
+ if (traceType != null) {
34
+ switch (traceType) {
35
+ case 0:
36
+ traceConfig.setTraceType(TraceType.DDTRACE);
37
+ break;
38
+ case 1:
39
+ traceConfig.setTraceType(TraceType.ZIPKIN_MULTI_HEADER);
40
+ break;
41
+ case 2:
42
+ traceConfig.setTraceType(TraceType.ZIPKIN_SINGLE_HEADER);
43
+ break;
44
+ case 3:
45
+ traceConfig.setTraceType(TraceType.TRACEPARENT);
46
+ break;
47
+ case 4:
48
+ traceConfig.setTraceType(TraceType.SKYWALKING);
49
+ break;
50
+ case 5:
51
+ traceConfig.setTraceType(TraceType.JAEGER);
52
+ break;
53
+ default:
54
+ traceConfig.setTraceType(TraceType.JAEGER);
55
+ break;
56
+ }
57
+ }
58
+
59
+ if (enableLinkRUMData != null) {
60
+ traceConfig.setEnableLinkRUMData(enableLinkRUMData);
61
+ }
62
+
63
+ if (enableNativeAutoTrace != null) {
64
+ traceConfig.setEnableAutoTrace(enableNativeAutoTrace);
65
+ }
66
+
67
+ FTSdk.initTraceWithConfig(traceConfig);
68
+ //LogUtils.d("configCheck","traceConfig:"+new Gson().toJson(traceConfig));
69
+ promise.resolve(null);
70
+ }
71
+
72
+ @ReactMethod
73
+ public void getTraceHeaderFields(String url, String key, Promise promise) {
74
+ HashMap<String, String> hashMap = null;
75
+ if (key == null) {
76
+ hashMap = FTTraceManager.get().getTraceHeader(url);
77
+ } else {
78
+ hashMap = FTTraceManager.get().getTraceHeader(key, url);
79
+ }
80
+
81
+ WritableNativeMap map = new WritableNativeMap();
82
+ if (hashMap != null) {
83
+ for (Map.Entry<String, String> entry : hashMap.entrySet()) {
84
+ map.putString(entry.getKey(), entry.getValue());
85
+ }
86
+ }
87
+ promise.resolve(map);
88
+ }
89
+ }
@@ -0,0 +1,59 @@
1
+ package com.ft.sdk.reactnative.utils;
2
+
3
+ import java.util.regex.Pattern;
4
+ import java.util.regex.Matcher;
5
+
6
+ public class ReactNativeUtils {
7
+
8
+ private static final Pattern[] RN_DEV_INNER_URL_REGEX = {
9
+ Pattern.compile("^http://((10|172|192).[0-9]+.[0-9]+.[0-9]+|localhost|127.0.0.1):808[0-9]/logs$"), // expo
10
+ Pattern.compile("^http://localhost:808[0-9]/(hot|symbolicate|message|inspector).*$") // rn
11
+ };
12
+
13
+ private ReactNativeUtils() {
14
+ // Private constructor to prevent instantiation
15
+ }
16
+
17
+ /**
18
+ * Convert React Native number to int
19
+ */
20
+ public static Integer convertToNativeInt(Object value) {
21
+ if (value == null) {
22
+ return null;
23
+ }
24
+ try {
25
+ return (int) Double.parseDouble(value.toString());
26
+ } catch (NumberFormatException e) {
27
+ return null;
28
+ }
29
+ }
30
+
31
+ /**
32
+ * Convert React Native number to long
33
+ */
34
+ public static Long convertToNativeLong(Object value) {
35
+ if (value == null) {
36
+ return null;
37
+ }
38
+ try {
39
+ return (long) Double.parseDouble(value.toString());
40
+ } catch (NumberFormatException e) {
41
+ return null;
42
+ }
43
+ }
44
+
45
+ /**
46
+ * Check if it's a React Native debug stage generated URL request
47
+ * @param url
48
+ * @return
49
+ */
50
+ public static boolean isReactNativeDevUrl(String url) {
51
+ for (Pattern pattern : RN_DEV_INNER_URL_REGEX) {
52
+ Matcher matcher = pattern.matcher(url);
53
+ if (matcher.matches()) {
54
+ return true;
55
+ }
56
+ }
57
+ return false;
58
+ }
59
+ }
@@ -0,0 +1,39 @@
1
+ package com.ft.sdk.reactnative;
2
+
3
+ import androidx.annotation.NonNull;
4
+
5
+ import com.facebook.react.turbomodule.core.interfaces.TurboModule;
6
+ import com.facebook.react.bridge.ReactApplicationContext;
7
+ import com.facebook.react.module.annotations.ReactModule;
8
+ import com.facebook.react.bridge.ReactMethod;
9
+ import com.facebook.react.bridge.Promise;
10
+ import com.facebook.react.bridge.ReadableMap;
11
+
12
+ @ReactModule(name = FTLogModule.NAME)
13
+ public class FTLogModule extends NativeFTLogSpec {
14
+ private final FTLogInterface logImpl = new FTLogImpl();
15
+
16
+ public FTLogModule(ReactApplicationContext reactContext) {
17
+ super(reactContext);
18
+ }
19
+
20
+ @Override
21
+ public String getName() {
22
+ return NAME;
23
+ }
24
+
25
+ @ReactMethod
26
+ public void logConfig(ReadableMap context, Promise promise) {
27
+ logImpl.logConfig(context, promise);
28
+ }
29
+
30
+ @ReactMethod
31
+ public void logging(String content, int logStatus, ReadableMap map, Promise promise) {
32
+ logImpl.logging(content, logStatus, map, promise);
33
+ }
34
+
35
+ @ReactMethod
36
+ public void logWithStatusString(String content, String logStatus, ReadableMap map, Promise promise) {
37
+ logImpl.logWithStatusString(content, logStatus, map, promise);
38
+ }
39
+ }
@@ -0,0 +1,69 @@
1
+ package com.ft.sdk.reactnative;
2
+
3
+ import androidx.annotation.NonNull;
4
+ import com.facebook.react.turbomodule.core.interfaces.TurboModule;
5
+ import com.facebook.react.bridge.ReactApplicationContext;
6
+ import com.facebook.react.module.annotations.ReactModule;
7
+ import com.facebook.react.bridge.ReactMethod;
8
+ import com.facebook.react.bridge.Promise;
9
+ import com.facebook.react.bridge.ReadableMap;
10
+
11
+ @ReactModule(name = FTMobileModule.NAME)
12
+ public class FTMobileModule extends NativeFTMobileSpec {
13
+ public static final String NAME = FTMobileImpl.NAME;
14
+ private final FTMobileImpl impl = new FTMobileImpl();
15
+
16
+ public FTMobileModule(ReactApplicationContext reactContext) {
17
+ super(reactContext);
18
+ }
19
+
20
+ @Override
21
+ public String getName() {
22
+ return NAME;
23
+ }
24
+
25
+ @ReactMethod
26
+ public void sdkConfig(ReadableMap context, Promise promise) {
27
+ impl.sdkConfig(context, promise);
28
+ }
29
+
30
+ @ReactMethod
31
+ public void bindRUMUserData(String userId, String userName, String userEmail, ReadableMap extra, Promise promise) {
32
+ impl.bindRUMUserData(userId, userName, userEmail, extra, promise);
33
+ }
34
+
35
+ @ReactMethod
36
+ public void unbindRUMUserData(Promise promise) {
37
+ impl.unbindRUMUserData(promise);
38
+ }
39
+
40
+ @ReactMethod
41
+ public void flushSyncData(Promise promise) {
42
+ impl.flushSyncData(promise);
43
+ }
44
+
45
+ @ReactMethod
46
+ public void appendGlobalContext(ReadableMap extra, Promise promise) {
47
+ impl.appendGlobalContext(extra, promise);
48
+ }
49
+
50
+ @ReactMethod
51
+ public void appendLogGlobalContext(ReadableMap extra, Promise promise) {
52
+ impl.appendLogGlobalContext(extra, promise);
53
+ }
54
+
55
+ @ReactMethod
56
+ public void appendRUMGlobalContext(ReadableMap extra, Promise promise) {
57
+ impl.appendRUMGlobalContext(extra, promise);
58
+ }
59
+
60
+ @ReactMethod
61
+ public void shutDown(Promise promise) {
62
+ impl.shutDown(promise);
63
+ }
64
+
65
+ @ReactMethod
66
+ public void clearAllData(Promise promise) {
67
+ impl.clearAllData(promise);
68
+ }
69
+ }
@@ -0,0 +1,84 @@
1
+ package com.ft.sdk.reactnative;
2
+
3
+ import androidx.annotation.NonNull;
4
+ import com.facebook.react.turbomodule.core.interfaces.TurboModule;
5
+ import com.facebook.react.bridge.ReactApplicationContext;
6
+ import com.facebook.react.module.annotations.ReactModule;
7
+ import com.facebook.react.bridge.ReactMethod;
8
+ import com.facebook.react.bridge.Promise;
9
+ import com.facebook.react.bridge.ReadableMap;
10
+
11
+ @ReactModule(name = FTRUMModule.NAME)
12
+ public class FTRUMModule extends NativeFTRUMSpec {
13
+ public static final String NAME = FTRUMImpl.NAME;
14
+ private final FTRUMImpl impl = new FTRUMImpl();
15
+
16
+ public FTRUMModule(ReactApplicationContext reactContext) {
17
+ super(reactContext);
18
+ }
19
+
20
+ @Override
21
+ public String getName() {
22
+ return NAME;
23
+ }
24
+
25
+ @Override
26
+ @ReactMethod
27
+ public void setConfig(ReadableMap context, Promise promise) {
28
+ impl.setConfig(context, promise);
29
+ }
30
+
31
+ @Override
32
+ @ReactMethod
33
+ public void startAction(String actionName, String actionType, ReadableMap map, Promise promise) {
34
+ impl.startAction(actionName, actionType, map, promise);
35
+ }
36
+
37
+ @Override
38
+ @ReactMethod
39
+ public void addAction(String actionName, String actionType, ReadableMap map, Promise promise) {
40
+ impl.addAction(actionName, actionType, map, promise);
41
+ }
42
+
43
+ @Override
44
+ @ReactMethod
45
+ public void onCreateView(String viewName, Double duration, Promise promise) {
46
+ impl.onCreateView(viewName, duration, promise);
47
+ }
48
+
49
+ @Override
50
+ @ReactMethod
51
+ public void startView(String viewName, ReadableMap map, Promise promise) {
52
+ impl.startView(viewName, map, promise);
53
+ }
54
+
55
+ @Override
56
+ @ReactMethod
57
+ public void stopView(ReadableMap map, Promise promise) {
58
+ impl.stopView(map, promise);
59
+ }
60
+
61
+ @Override
62
+ @ReactMethod
63
+ public void addError(String stack, String message, ReadableMap map, Promise promise) {
64
+ impl.addError(stack, message, map, promise);
65
+ }
66
+
67
+ @Override
68
+ @ReactMethod
69
+ public void addErrorWithType(String errorType, String stack, String message, ReadableMap map, Promise promise) {
70
+ impl.addErrorWithType(errorType, stack, message, map, promise);
71
+ }
72
+
73
+ @Override
74
+ @ReactMethod
75
+ public void startResource(String key, ReadableMap map, Promise promise) {
76
+ impl.startResource(key, map, promise);
77
+ }
78
+
79
+ @Override
80
+ @ReactMethod
81
+ public void stopResource(String key, ReadableMap map, Promise promise) {
82
+ impl.stopResource(key, map, promise);
83
+ }
84
+ }
@@ -0,0 +1,34 @@
1
+ package com.ft.sdk.reactnative;
2
+
3
+ import com.facebook.react.bridge.Promise;
4
+ import com.facebook.react.bridge.ReactApplicationContext;
5
+ import com.facebook.react.bridge.ReactContextBaseJavaModule;
6
+ import com.facebook.react.bridge.ReactMethod;
7
+ import com.facebook.react.bridge.ReadableMap;
8
+
9
+ @ReactModule(name = FTTraceModule.NAME)
10
+ public class FTTraceModule extends NativeFTTraceSpec{
11
+ public static final String NAME = FTTraceImpl.NAME;
12
+ private final FTTraceImpl impl = new FTTraceImpl();
13
+
14
+ public FTTraceModule(ReactApplicationContext reactContext) {
15
+ super(reactContext);
16
+ }
17
+
18
+ @Override
19
+ public String getName() {
20
+ return NAME;
21
+ }
22
+
23
+ @Override
24
+ @ReactMethod
25
+ public void setConfig(ReadableMap context, Promise promise) {
26
+ impl.setConfig(context, promise);
27
+ }
28
+
29
+ @Override
30
+ @ReactMethod
31
+ public void getTraceHeaderFields(String url, String key, Promise promise) {
32
+ impl.getTraceHeaderFields(url, key, promise);
33
+ }
34
+ }
@@ -0,0 +1,36 @@
1
+ package com.ft.sdk.reactnative;
2
+
3
+ import com.facebook.react.bridge.Promise;
4
+ import com.facebook.react.bridge.ReactApplicationContext;
5
+ import com.facebook.react.bridge.ReactContextBaseJavaModule;
6
+ import com.facebook.react.bridge.ReactMethod;
7
+ import com.facebook.react.bridge.ReadableMap;
8
+
9
+ public class FTLogModule extends ReactContextBaseJavaModule {
10
+ private final FTLogImpl logImpl = new FTLogImpl();
11
+
12
+ public FTLogModule(ReactApplicationContext reactContext) {
13
+ super(reactContext);
14
+ }
15
+
16
+ @Override
17
+ public String getName() {
18
+ return FTLogImpl.NAME;
19
+ }
20
+
21
+ @ReactMethod
22
+ public void logConfig(ReadableMap context, Promise promise) {
23
+ logImpl.logConfig(context, promise);
24
+ }
25
+
26
+ @ReactMethod
27
+ public void logging(String content, int logStatus, ReadableMap map, Promise promise) {
28
+ logImpl.logging(content, logStatus, map, promise);
29
+ }
30
+
31
+ @ReactMethod
32
+ public void logWithStatusString(String content, String logStatus, ReadableMap map, Promise promise) {
33
+ logImpl.logWithStatusString(content, logStatus, map, promise);
34
+ }
35
+
36
+ }