@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,69 @@
1
+ package com.ft.sdk.reactnative;
2
+
3
+ import androidx.annotation.NonNull;
4
+
5
+ import com.facebook.react.bridge.Promise;
6
+ import com.facebook.react.bridge.ReactApplicationContext;
7
+ import com.facebook.react.bridge.ReactContextBaseJavaModule;
8
+ import com.facebook.react.bridge.ReactMethod;
9
+ import com.facebook.react.bridge.ReadableMap;
10
+
11
+ public class FTMobileModule extends ReactContextBaseJavaModule {
12
+
13
+ public FTMobileModule(ReactApplicationContext reactContext) {
14
+ super(reactContext);
15
+ }
16
+
17
+ private final FTMobileImpl impl = new FTMobileImpl();
18
+
19
+ @ReactMethod
20
+ public void sdkConfig(ReadableMap context, Promise promise) {
21
+ impl.sdkConfig(context, promise);
22
+ }
23
+
24
+ @ReactMethod
25
+ public void bindRUMUserData(String userId, String userName, String userEmail, ReadableMap extra, Promise promise) {
26
+ impl.bindRUMUserData(userId, userName, userEmail, extra, promise);
27
+ }
28
+
29
+ @ReactMethod
30
+ public void unbindRUMUserData(Promise promise) {
31
+ impl.unbindRUMUserData(promise);
32
+ }
33
+
34
+ @ReactMethod
35
+ public void flushSyncData(Promise promise) {
36
+ impl.flushSyncData(promise);
37
+ }
38
+
39
+ @ReactMethod
40
+ public void appendGlobalContext(ReadableMap extra, Promise promise) {
41
+ impl.appendGlobalContext(extra, promise);
42
+ }
43
+
44
+ @ReactMethod
45
+ public void appendLogGlobalContext(ReadableMap extra, Promise promise) {
46
+ impl.appendLogGlobalContext(extra, promise);
47
+ }
48
+
49
+ @ReactMethod
50
+ public void appendRUMGlobalContext(ReadableMap extra, Promise promise) {
51
+ impl.appendRUMGlobalContext(extra, promise);
52
+ }
53
+
54
+ @ReactMethod
55
+ public void shutDown(Promise promise) {
56
+ impl.shutDown(promise);
57
+ }
58
+
59
+ @ReactMethod
60
+ public void clearAllData(Promise promise) {
61
+ impl.clearAllData(promise);
62
+ }
63
+
64
+ @NonNull
65
+ @Override
66
+ public String getName() {
67
+ return FTMobileImpl.NAME;
68
+ }
69
+ }
@@ -0,0 +1,70 @@
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 FTRUMModule extends ReactContextBaseJavaModule {
10
+ private final FTRUMImpl impl = new FTRUMImpl();
11
+
12
+ public FTRUMModule(ReactApplicationContext reactContext) {
13
+ super(reactContext);
14
+ }
15
+
16
+ @Override
17
+ public String getName() {
18
+ return FTRUMImpl.NAME;
19
+ }
20
+
21
+ @ReactMethod
22
+ public void setConfig(ReadableMap context, Promise promise) {
23
+ impl.setConfig(context, promise);
24
+ }
25
+
26
+ @ReactMethod
27
+ public void startAction(String actionName, String actionType, ReadableMap map, Promise promise) {
28
+ impl.startAction(actionName, actionType, map, promise);
29
+ }
30
+
31
+ @ReactMethod
32
+ public void addAction(String actionName, String actionType, ReadableMap map, Promise promise) {
33
+ impl.addAction(actionName, actionType, map, promise);
34
+ }
35
+
36
+ @ReactMethod
37
+ public void onCreateView(String viewName, Double duration, Promise promise) {
38
+ impl.onCreateView(viewName, duration, promise);
39
+ }
40
+
41
+ @ReactMethod
42
+ public void startView(String viewName, ReadableMap map, Promise promise) {
43
+ impl.startView(viewName, map, promise);
44
+ }
45
+
46
+ @ReactMethod
47
+ public void stopView(ReadableMap map, Promise promise) {
48
+ impl.stopView(map, promise);
49
+ }
50
+
51
+ @ReactMethod
52
+ public void addError(String stack, String message, ReadableMap map, Promise promise) {
53
+ impl.addError(stack, message, map, promise);
54
+ }
55
+
56
+ @ReactMethod
57
+ public void addErrorWithType(String errorType, String stack, String message, ReadableMap map, Promise promise) {
58
+ impl.addErrorWithType(errorType, stack, message, map, promise);
59
+ }
60
+
61
+ @ReactMethod
62
+ public void startResource(String key, ReadableMap map, Promise promise) {
63
+ impl.startResource(key, map, promise);
64
+ }
65
+
66
+ @ReactMethod
67
+ public void stopResource(String key, ReadableMap map, Promise promise) {
68
+ impl.stopResource(key, map, promise);
69
+ }
70
+ }
@@ -0,0 +1,30 @@
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 FTTraceModule extends ReactContextBaseJavaModule {
10
+ private final FTTraceImpl impl = new FTTraceImpl();
11
+
12
+ public FTTraceModule(ReactApplicationContext reactContext) {
13
+ super(reactContext);
14
+ }
15
+
16
+ @Override
17
+ public String getName() {
18
+ return FTTraceImpl.NAME;
19
+ }
20
+
21
+ @ReactMethod
22
+ public void setConfig(ReadableMap context, Promise promise) {
23
+ impl.setConfig(context, promise);
24
+ }
25
+
26
+ @ReactMethod
27
+ public void getTraceHeaderFields(String url, String key, Promise promise) {
28
+ impl.getTraceHeaderFields(url, key, promise);
29
+ }
30
+ }
@@ -0,0 +1,71 @@
1
+ package com.ft.sdk.reactnative;
2
+
3
+ import androidx.annotation.NonNull;
4
+ import androidx.annotation.Nullable;
5
+
6
+ import com.ft.sdk.reactnative.BuildConfig;
7
+ import com.facebook.react.BaseReactPackage;
8
+ import com.facebook.react.bridge.NativeModule;
9
+ import com.facebook.react.bridge.ReactApplicationContext;
10
+ import com.facebook.react.module.model.ReactModuleInfo;
11
+ import com.facebook.react.module.model.ReactModuleInfoProvider;
12
+
13
+ import java.util.HashMap;
14
+ import java.util.Map;
15
+
16
+ public class FTMobilePackage extends BaseReactPackage {
17
+
18
+
19
+ @Nullable
20
+ @Override
21
+ public NativeModule getModule(@NonNull String name, @NonNull ReactApplicationContext reactApplicationContext) {
22
+ switch (name) {
23
+ case FTMobileImpl.NAME:
24
+ return new FTMobileModule(reactApplicationContext);
25
+ case FTLogImpl.NAME:
26
+ return new FTLogModule(reactApplicationContext);
27
+ case FTTraceImpl.NAME:
28
+ return new FTTraceModule(reactApplicationContext);
29
+ case FTRUMImpl.NAME:
30
+ return new FTRUMModule(reactApplicationContext);
31
+ // case FTSessionReplayImpl.NAME:
32
+ // return new FTSessionReplayModule(reactApplicationContext);
33
+ default:
34
+ return null;
35
+ }
36
+ }
37
+
38
+ @Override
39
+ public ReactModuleInfoProvider getReactModuleInfoProvider() {
40
+ return new ReactModuleInfoProvider() {
41
+ @Override
42
+ public Map<String, ReactModuleInfo> getReactModuleInfos() {
43
+ boolean isTurboModule = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
44
+
45
+ String[] moduleNames = {
46
+ FTMobileImpl.NAME,
47
+ FTRUMImpl.NAME,
48
+ FTLogImpl.NAME,
49
+ FTTraceImpl.NAME,
50
+ // FTSessionReplayImpl.NAME,
51
+ };
52
+ Map<String, ReactModuleInfo> moduleInfos = new HashMap<>();
53
+
54
+ for (String moduleName : moduleNames) {
55
+ moduleInfos.put(
56
+ moduleName,
57
+ new ReactModuleInfo(
58
+ moduleName,
59
+ moduleName,
60
+ false, // canOverrideExistingModule
61
+ false, // needsEagerInit
62
+ false, // isCxxModule
63
+ isTurboModule // isTurboModule
64
+ )
65
+ );
66
+ }
67
+ return moduleInfos;
68
+ }
69
+ };
70
+ }
71
+ }
@@ -0,0 +1,33 @@
1
+ package com.ft.sdk.reactnative;
2
+
3
+ import androidx.annotation.NonNull;
4
+
5
+ import com.facebook.react.ReactPackage;
6
+ import com.facebook.react.bridge.NativeModule;
7
+ import com.facebook.react.bridge.ReactApplicationContext;
8
+ import com.facebook.react.uimanager.ViewManager;
9
+
10
+ import java.util.ArrayList;
11
+ import java.util.Collections;
12
+ import java.util.List;
13
+
14
+ public class FTMobilePackage implements ReactPackage {
15
+
16
+ @Override
17
+ public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
18
+ List<NativeModule> modules = new ArrayList<>();
19
+ modules.add(new FTMobileModule(reactContext));
20
+ modules.add(new FTLogModule(reactContext));
21
+ modules.add(new FTTraceModule(reactContext));
22
+ modules.add(new FTRUMModule(reactContext));
23
+ return modules;
24
+ }
25
+
26
+ @NonNull
27
+ @Override
28
+ public List<ViewManager> createViewManagers(@NonNull ReactApplicationContext reactApplicationContext) {
29
+ return Collections.emptyList();
30
+ }
31
+
32
+
33
+ }
@@ -0,0 +1 @@
1
+ FtMobileAgent
@@ -0,0 +1,2 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <module classpath="AppCode" type="CIDR_MODULE" version="4" />
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ProjectModuleManager">
4
+ <modules>
5
+ <module fileurl="file://$PROJECT_DIR$/.idea/ios.iml" filepath="$PROJECT_DIR$/.idea/ios.iml" />
6
+ </modules>
7
+ </component>
8
+ </project>
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="VcsDirectoryMappings">
4
+ <mapping directory="$PROJECT_DIR$/.." vcs="Git" />
5
+ </component>
6
+ </project>
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="XcodeMetaData" PROJECT_DIR="$PROJECT_DIR$" PROJECT_FILE="$PROJECT_DIR$/FtMobileAgent.xcodeproj" />
4
+ </project>
@@ -0,0 +1,18 @@
1
+ //
2
+ // FTMobileReactNative.h
3
+ // FtMobileAgent
4
+ //
5
+ // Created by Hu Leilei on 2021/12/14.
6
+ // Copyright © 2021 Facebook. All rights reserved.
7
+ //
8
+
9
+ #import <Foundation/Foundation.h>
10
+ #import <React/RCTBridgeModule.h>
11
+
12
+ NS_ASSUME_NONNULL_BEGIN
13
+
14
+ @interface FTMobileReactNative : NSObject<RCTBridgeModule>
15
+
16
+ @end
17
+
18
+ NS_ASSUME_NONNULL_END
@@ -0,0 +1,183 @@
1
+ //
2
+ // FTMobileReactNative.m
3
+ // FtMobileAgent
4
+ //
5
+ // Created by Hu Leilei on 2021/12/14.
6
+ // Copyright © 2021 Facebook. All rights reserved.
7
+ //
8
+
9
+ #import "FTMobileReactNative.h"
10
+ #import <FTMobileSDK/FTMobileAgent.h>
11
+ #import <FTMobileSDK/FTMobileConfig+Private.h>
12
+ #import <React/RCTConvert.h>
13
+ #import <FTMobileSDK/FTThreadDispatchManager.h>
14
+ #import <FTMobileSDK/FTConstants.h>
15
+ @implementation FTMobileReactNative
16
+ RCT_EXPORT_MODULE()
17
+ RCT_REMAP_METHOD(sdkConfig,
18
+ context:(NSDictionary *)context
19
+ findEventsWithResolver:(RCTPromiseResolveBlock)resolve
20
+ rejecter:(RCTPromiseRejectBlock)reject)
21
+ {
22
+ [FTThreadDispatchManager performBlockDispatchMainSyncSafe:^{
23
+ FTMobileConfig *config;
24
+ NSString *datakitUrl = [RCTConvert NSString:context[@"datakitUrl"]];
25
+ NSString *dataWayUrl = [RCTConvert NSString:context[@"datawayUrl"]];
26
+ NSString *clientToken = [RCTConvert NSString:context[@"clientToken"]];
27
+ if(dataWayUrl && dataWayUrl.length>0 && clientToken && clientToken.length>0){
28
+ config = [[FTMobileConfig alloc]initWithDatawayUrl:dataWayUrl clientToken:clientToken];
29
+ }else if(datakitUrl && datakitUrl.length>0){
30
+ config = [[FTMobileConfig alloc]initWithDatakitUrl:datakitUrl];
31
+ }else{
32
+ resolve(nil);
33
+ return;
34
+ }
35
+ if ([context.allKeys containsObject:@"debug"]) {
36
+ config.enableSDKDebugLog = [RCTConvert BOOL:context[@"debug"]];
37
+ }
38
+ if ([context.allKeys containsObject:@"service"]) {
39
+ config.service = [RCTConvert NSString:context[@"service"]];
40
+ }
41
+ if([context.allKeys containsObject:@"env"]){
42
+ id env = context[@"env"];
43
+ if([env isKindOfClass:NSString.class]){
44
+ config.env = env;
45
+ }
46
+ }
47
+ if([context.allKeys containsObject:@"envType"]){
48
+ id env = context[@"envType"];
49
+ if([env isKindOfClass:NSNumber.class]){
50
+ int envType = [env intValue];
51
+ if(envType>=0 && envType<5){
52
+ [config setEnvWithType:envType];
53
+ }
54
+ }
55
+ }
56
+ if ([context.allKeys containsObject:@"autoSync"]) {
57
+ config.autoSync = [RCTConvert BOOL:context[@"autoSync"]];
58
+ }
59
+ if ([context.allKeys containsObject:@"syncPageSize"]) {
60
+ config.syncPageSize = [RCTConvert int:context[@"syncPageSize"]];
61
+ }
62
+ if ([context.allKeys containsObject:@"syncSleepTime"]) {
63
+ config.syncSleepTime = [RCTConvert int:context[@"syncSleepTime"]];
64
+ }
65
+ if ([context.allKeys containsObject:@"enableDataIntegerCompatible"]) {
66
+ config.enableDataIntegerCompatible = [RCTConvert BOOL:context[@"enableDataIntegerCompatible"]];
67
+ }
68
+ if ([context.allKeys containsObject:@"compressIntakeRequests"]) {
69
+ config.compressIntakeRequests = [RCTConvert BOOL:context[@"compressIntakeRequests"]];
70
+ }
71
+ if ([context.allKeys containsObject:@"globalContext"]) {
72
+ config.globalContext = [RCTConvert NSDictionary:context[@"globalContext"]];
73
+ }
74
+ if ([context.allKeys containsObject:@"groupIdentifiers"]){
75
+ config.groupIdentifiers = [RCTConvert NSArray:context[@"groupIdentifiers"]];
76
+ }
77
+ if ([context.allKeys containsObject:@"dbDiscardStrategy"]){
78
+ config.dbDiscardType = [RCTConvert int:context[@"dbDiscardStrategy"]];
79
+ }
80
+ if ([context.allKeys containsObject:@"enableLimitWithDbSize"]){
81
+ config.enableLimitWithDbSize = [RCTConvert BOOL:context[@"enableLimitWithDbSize"]];
82
+ }
83
+ if ([context.allKeys containsObject:@"dbCacheLimit"]){
84
+ config.dbCacheLimit = [RCTConvert double:context[@"dbCacheLimit"]];
85
+ }
86
+ if ([context.allKeys containsObject:@"dataModifier"]){
87
+ NSDictionary *dataModifierDict = [[RCTConvert NSDictionary:context[@"dataModifier"]] copy];
88
+ config.dataModifier = ^id _Nullable(NSString * _Nonnull key, id _Nonnull value) {
89
+ if ([dataModifierDict.allKeys containsObject:key]) {
90
+ return dataModifierDict[key];
91
+ }
92
+ return value;
93
+ };
94
+ }
95
+ if ([context.allKeys containsObject:@"lineDataModifier"]){
96
+ NSDictionary *dataModifierDict = [[RCTConvert NSDictionary:context[@"lineDataModifier"]] copy];
97
+ config.lineDataModifier = ^NSDictionary<NSString *,id> * _Nullable(NSString * _Nonnull measurement, NSDictionary<NSString *,id> * _Nonnull data) {
98
+ if ([measurement isEqualToString:FT_LOGGER_SOURCE] || [measurement isEqualToString:FT_LOGGER_TVOS_SOURCE]) {
99
+ return [dataModifierDict valueForKey:@"log"];
100
+ }else{
101
+ return [dataModifierDict valueForKey:measurement];
102
+ }
103
+ };
104
+ }
105
+ NSString *pkgInfo = [RCTConvert NSString:context[@"pkgInfo"]];
106
+ [config addPkgInfo:@"reactnative" value:pkgInfo];
107
+ [FTMobileAgent startWithConfigOptions:config];
108
+ resolve(nil);
109
+ }];
110
+ }
111
+
112
+ RCT_REMAP_METHOD(bindRUMUserData,
113
+ userId:(NSString*)userId userName:(NSString*)userName userEmail:(NSString*)userEmail extra:(NSDictionary *)extra
114
+ findEventsWithResolver:(RCTPromiseResolveBlock)resolve
115
+ rejecter:(RCTPromiseRejectBlock)reject){
116
+ [[FTMobileAgent sharedInstance] bindUserWithUserID:userId userName:userName userEmail:userEmail extra:extra];
117
+ resolve(nil);
118
+ }
119
+
120
+ RCT_REMAP_METHOD(unbindRUMUserData,
121
+ unbindRUMUserData_Resolver:(RCTPromiseResolveBlock)resolve
122
+ rejecter:(RCTPromiseRejectBlock)reject
123
+ ){
124
+ [[FTMobileAgent sharedInstance] unbindUser];
125
+ resolve(nil);
126
+ }
127
+ RCT_REMAP_METHOD(appendGlobalContext,
128
+ appendGlobalContext:(NSDictionary *)context
129
+ findEventsWithResolver:(RCTPromiseResolveBlock)resolve
130
+ rejecter:(RCTPromiseRejectBlock)reject){
131
+ [FTMobileAgent appendGlobalContext:context];
132
+ resolve(nil);
133
+ }
134
+ RCT_REMAP_METHOD(appendRUMGlobalContext,
135
+ appendRUMGlobalContext:(NSDictionary *)context
136
+ findEventsWithResolver:(RCTPromiseResolveBlock)resolve
137
+ rejecter:(RCTPromiseRejectBlock)reject){
138
+ [FTMobileAgent appendRUMGlobalContext:context];
139
+ resolve(nil);
140
+ }
141
+ RCT_REMAP_METHOD(appendLogGlobalContext,
142
+ appendLogGlobalContext:(NSDictionary *)context
143
+ findEventsWithResolver:(RCTPromiseResolveBlock)resolve
144
+ rejecter:(RCTPromiseRejectBlock)reject){
145
+ [FTMobileAgent appendLogGlobalContext:context];
146
+ resolve(nil);
147
+ }
148
+
149
+ RCT_REMAP_METHOD(flushSyncData,
150
+ flushSyncData_Resolver:(RCTPromiseResolveBlock)resolve
151
+ rejecter:(RCTPromiseRejectBlock)reject
152
+ ){
153
+ [[FTMobileAgent sharedInstance] flushSyncData];
154
+ resolve(nil);
155
+ }
156
+ RCT_REMAP_METHOD(trackEventFromExtension,
157
+ identifier:(NSString*)identifier
158
+ findEventsWithResolver:(RCTPromiseResolveBlock)resolve
159
+ rejecter:(RCTPromiseRejectBlock)reject){
160
+ [[FTMobileAgent sharedInstance] trackEventFromExtensionWithGroupIdentifier:identifier completion:^(NSString * _Nonnull groupIdentifier, NSArray * _Nonnull events) {
161
+ if(events.count>0){
162
+ resolve(@{@"groupIdentifier":identifier,
163
+ @"datas":events
164
+ });
165
+ }else{
166
+ resolve(nil);
167
+ }
168
+
169
+ }];
170
+ }
171
+ RCT_REMAP_METHOD(shutDown,
172
+ shutDown_findEventsWithResolver:(RCTPromiseResolveBlock)resolve
173
+ rejecter:(RCTPromiseRejectBlock)reject){
174
+ [FTMobileAgent shutDown];
175
+ resolve(nil);
176
+ }
177
+ RCT_REMAP_METHOD(clearAllData,
178
+ clearAllData_findEventsWithResolver:(RCTPromiseResolveBlock)resolve
179
+ rejecter:(RCTPromiseRejectBlock)reject){
180
+ [FTMobileAgent clearAllData];
181
+ resolve(nil);
182
+ }
183
+ @end
@@ -0,0 +1,18 @@
1
+ //
2
+ // FTReactNativeLog.h
3
+ // FtMobileAgent
4
+ //
5
+ // Created by Hu Leilei on 2021/12/14.
6
+ // Copyright © 2021 Facebook. All rights reserved.
7
+ //
8
+
9
+ #import <Foundation/Foundation.h>
10
+ #import <React/RCTBridgeModule.h>
11
+
12
+ NS_ASSUME_NONNULL_BEGIN
13
+
14
+ @interface FTReactNativeLog : NSObject<RCTBridgeModule>
15
+
16
+ @end
17
+
18
+ NS_ASSUME_NONNULL_END
@@ -0,0 +1,60 @@
1
+ //
2
+ // FTReactNativeLog.m
3
+ // FtMobileAgent
4
+ //
5
+ // Created by Hu Leilei on 2021/12/14.
6
+ // Copyright © 2021 Facebook. All rights reserved.
7
+ //
8
+
9
+ #import "FTReactNativeLog.h"
10
+ #import <FTMobileSDK/FTMobileAgent.h>
11
+ #import <React/RCTConvert.h>
12
+ #import <FTMobileSDK/FTLogger+Private.h>
13
+ @implementation FTReactNativeLog
14
+ RCT_EXPORT_MODULE()
15
+
16
+ RCT_REMAP_METHOD(logConfig,
17
+ context:(NSDictionary *)context
18
+ findEventsWithResolver:(RCTPromiseResolveBlock)resolve
19
+ rejecter:(RCTPromiseRejectBlock)reject){
20
+ FTLoggerConfig *logger = [[FTLoggerConfig alloc]init];
21
+ if ([context.allKeys containsObject:@"sampleRate"]) {
22
+ logger.samplerate = [RCTConvert double:context[@"sampleRate"]]*100;
23
+ }
24
+ NSArray<NSNumber *>*filters = [RCTConvert NSNumberArray:context[@"logLevelFilters"]];
25
+ if (filters) {
26
+ logger.logLevelFilter = filters;
27
+ }
28
+ if([context.allKeys containsObject:@"discardStrategy"]){
29
+ logger.discardType = [RCTConvert int:context[@"discardStrategy"]];
30
+ }
31
+ if ([context.allKeys containsObject:@"globalContext"]) {
32
+ logger.globalContext = [RCTConvert NSDictionary:context[@"globalContext"]];
33
+ }
34
+ logger.enableCustomLog = [RCTConvert BOOL:context[@"enableCustomLog"]];
35
+ logger.enableLinkRumData = [RCTConvert BOOL:context[@"enableLinkRumData"]];
36
+ if ([context.allKeys containsObject:@"logCacheLimitCount"]) {
37
+ logger.logCacheLimitCount = [RCTConvert int:context[@"logCacheLimitCount"]];
38
+ }
39
+ [[FTMobileAgent sharedInstance] startLoggerWithConfigOptions:logger];
40
+ resolve(nil);
41
+ }
42
+
43
+ RCT_REMAP_METHOD(logging,
44
+ logging:(NSString *)content status:(nonnull NSNumber *)status property:(NSDictionary *)property
45
+ findEventsWithResolver:(RCTPromiseResolveBlock)resolve
46
+ rejecter:(RCTPromiseRejectBlock)reject){
47
+
48
+ LogStatus logStatus =(LogStatus)[status integerValue];
49
+ [[FTLogger sharedInstance] log:content statusType:logStatus property:property];
50
+ resolve(nil);
51
+ }
52
+ RCT_REMAP_METHOD(logWithStatusString,
53
+ logWithStatusString:(NSString *)content status:(NSString *)status property:(NSDictionary *)property
54
+ findEventsWithResolver:(RCTPromiseResolveBlock)resolve
55
+ rejecter:(RCTPromiseRejectBlock)reject){
56
+ [[FTLogger sharedInstance] log:content status:status property:property];
57
+ resolve(nil);
58
+ }
59
+ @end
60
+
@@ -0,0 +1,19 @@
1
+ //
2
+ // FTReactNativeRUM.h
3
+ // FtMobileAgent
4
+ //
5
+ // Created by Hu Leilei on 2021/12/14.
6
+ // Copyright © 2021 Facebook. All rights reserved.
7
+ //
8
+
9
+ #import <Foundation/Foundation.h>
10
+ #import <React/RCTBridgeModule.h>
11
+
12
+ NS_ASSUME_NONNULL_BEGIN
13
+
14
+ @interface FTReactNativeRUM : NSObject<RCTBridgeModule>
15
+
16
+ @end
17
+
18
+ NS_ASSUME_NONNULL_END
19
+