freerasp-react-native 3.9.3 → 3.10.0

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 (75) hide show
  1. package/CHANGELOG.md +42 -2
  2. package/android/build.gradle +4 -1
  3. package/android/src/main/java/com/freeraspreactnative/FreeraspReactNativeModule.kt +49 -4
  4. package/android/src/main/java/com/freeraspreactnative/FreeraspThreatHandler.kt +5 -1
  5. package/android/src/main/java/com/freeraspreactnative/Threat.kt +3 -1
  6. package/android/src/main/java/com/freeraspreactnative/models/RNSuspiciousAppInfo.kt +25 -0
  7. package/android/src/main/java/com/freeraspreactnative/utils/Extensions.kt +116 -0
  8. package/android/src/main/java/com/freeraspreactnative/utils/Utils.kt +82 -0
  9. package/example/assets/arrow-down.png +0 -0
  10. package/example/assets/arrow-up.png +0 -0
  11. package/example/ios/FreeraspReactNativeExample.xcodeproj/project.pbxproj +45 -45
  12. package/example/src/App.tsx +57 -2
  13. package/example/src/DemoApp.tsx +16 -2
  14. package/example/src/MalwareItem.tsx +158 -0
  15. package/example/src/MalwareModal.tsx +126 -0
  16. package/example/src/checks.ts +1 -0
  17. package/example/src/styles.ts +1 -0
  18. package/ios/TalsecRuntime.xcframework/_CodeSignature/CodeDirectory +0 -0
  19. package/ios/TalsecRuntime.xcframework/_CodeSignature/CodeRequirements +0 -0
  20. package/ios/TalsecRuntime.xcframework/_CodeSignature/CodeRequirements-1 +0 -0
  21. package/ios/TalsecRuntime.xcframework/_CodeSignature/CodeResources +60 -60
  22. package/ios/TalsecRuntime.xcframework/_CodeSignature/CodeSignature +0 -0
  23. package/ios/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Headers/CurlWrapper.h +1 -1
  24. package/ios/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Headers/TalsecRuntime-Swift.h +1 -1
  25. package/ios/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Headers/curl.h +7 -7
  26. package/ios/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Headers/multi.h +4 -4
  27. package/ios/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Headers/options.h +1 -1
  28. package/ios/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Headers/urlapi.h +1 -1
  29. package/ios/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Info.plist +0 -0
  30. package/ios/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Modules/TalsecRuntime.swiftmodule/arm64-apple-ios.abi.json +135 -135
  31. package/ios/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/TalsecRuntime +0 -0
  32. package/ios/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Headers/CurlWrapper.h +1 -1
  33. package/ios/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Headers/TalsecRuntime-Swift.h +2 -2
  34. package/ios/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Headers/curl.h +7 -7
  35. package/ios/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Headers/multi.h +4 -4
  36. package/ios/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Headers/options.h +1 -1
  37. package/ios/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Headers/urlapi.h +1 -1
  38. package/ios/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Info.plist +0 -0
  39. package/ios/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Modules/TalsecRuntime.swiftmodule/arm64-apple-ios-simulator.abi.json +135 -135
  40. package/ios/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Modules/TalsecRuntime.swiftmodule/x86_64-apple-ios-simulator.abi.json +135 -135
  41. package/ios/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/TalsecRuntime +0 -0
  42. package/ios/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/_CodeSignature/CodeResources +21 -21
  43. package/lib/commonjs/index.js +63 -19
  44. package/lib/commonjs/index.js.map +1 -1
  45. package/lib/commonjs/{definitions.js → threat.js} +3 -2
  46. package/lib/commonjs/threat.js.map +1 -0
  47. package/lib/commonjs/types.js +2 -0
  48. package/lib/commonjs/types.js.map +1 -0
  49. package/lib/commonjs/utils.js +2 -2
  50. package/lib/commonjs/utils.js.map +1 -1
  51. package/lib/module/index.js +30 -5
  52. package/lib/module/index.js.map +1 -1
  53. package/lib/module/{definitions.js → threat.js} +3 -2
  54. package/lib/module/threat.js.map +1 -0
  55. package/lib/module/types.js +2 -0
  56. package/lib/module/types.js.map +1 -0
  57. package/lib/module/utils.js +1 -1
  58. package/lib/module/utils.js.map +1 -1
  59. package/lib/typescript/src/index.d.ts +3 -1
  60. package/lib/typescript/src/index.d.ts.map +1 -1
  61. package/lib/typescript/src/threat.d.ts +20 -0
  62. package/lib/typescript/src/threat.d.ts.map +1 -0
  63. package/lib/typescript/src/types.d.ts +50 -0
  64. package/lib/typescript/src/types.d.ts.map +1 -0
  65. package/package.json +3 -24
  66. package/plugin/build/index.d.ts +1 -1
  67. package/src/index.tsx +35 -8
  68. package/src/{definitions.ts → threat.ts} +2 -30
  69. package/src/types.ts +55 -0
  70. package/src/utils.ts +1 -1
  71. package/android/src/main/java/com/freeraspreactnative/Utils.kt +0 -40
  72. package/lib/commonjs/definitions.js.map +0 -1
  73. package/lib/module/definitions.js.map +0 -1
  74. package/lib/typescript/src/definitions.d.ts +0 -47
  75. package/lib/typescript/src/definitions.d.ts.map +0 -1
@@ -8,11 +8,11 @@
8
8
 
9
9
  /* Begin PBXBuildFile section */
10
10
  00E356F31AD99517003FC87E /* FreeraspReactNativeExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* FreeraspReactNativeExampleTests.m */; };
11
- 0C80B921A6F3F58F76C31292 /* libPods-FreeraspReactNativeExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-FreeraspReactNativeExample.a */; };
11
+ 030014488BDA0448D18833AA /* libPods-FreeraspReactNativeExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8488310E7CEBAD4453B2B105 /* libPods-FreeraspReactNativeExample.a */; };
12
12
  13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };
13
13
  13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
14
14
  13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
15
- 7699B88040F8A987B510C191 /* libPods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 19F6CBCC0A4E27FBF8BF4A61 /* libPods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.a */; };
15
+ 4ED36F23A824FA42AAF69DEA /* libPods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 09A90BCC7156013BB41680E2 /* libPods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.a */; };
16
16
  81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
17
17
  /* End PBXBuildFile section */
18
18
 
@@ -30,19 +30,19 @@
30
30
  00E356EE1AD99517003FC87E /* FreeraspReactNativeExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FreeraspReactNativeExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
31
31
  00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
32
32
  00E356F21AD99517003FC87E /* FreeraspReactNativeExampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FreeraspReactNativeExampleTests.m; sourceTree = "<group>"; };
33
+ 038937FFB95426BE2297B416 /* Pods-FreeraspReactNativeExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FreeraspReactNativeExample.debug.xcconfig"; path = "Target Support Files/Pods-FreeraspReactNativeExample/Pods-FreeraspReactNativeExample.debug.xcconfig"; sourceTree = "<group>"; };
34
+ 09A90BCC7156013BB41680E2 /* libPods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
33
35
  13B07F961A680F5B00A75B9A /* FreeraspReactNativeExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FreeraspReactNativeExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
34
36
  13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = FreeraspReactNativeExample/AppDelegate.h; sourceTree = "<group>"; };
35
37
  13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = FreeraspReactNativeExample/AppDelegate.mm; sourceTree = "<group>"; };
36
38
  13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = FreeraspReactNativeExample/Images.xcassets; sourceTree = "<group>"; };
37
39
  13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = FreeraspReactNativeExample/Info.plist; sourceTree = "<group>"; };
38
40
  13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = FreeraspReactNativeExample/main.m; sourceTree = "<group>"; };
39
- 19F6CBCC0A4E27FBF8BF4A61 /* libPods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
40
- 3B4392A12AC88292D35C810B /* Pods-FreeraspReactNativeExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FreeraspReactNativeExample.debug.xcconfig"; path = "Target Support Files/Pods-FreeraspReactNativeExample/Pods-FreeraspReactNativeExample.debug.xcconfig"; sourceTree = "<group>"; };
41
- 5709B34CF0A7D63546082F79 /* Pods-FreeraspReactNativeExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FreeraspReactNativeExample.release.xcconfig"; path = "Target Support Files/Pods-FreeraspReactNativeExample/Pods-FreeraspReactNativeExample.release.xcconfig"; sourceTree = "<group>"; };
42
- 5B7EB9410499542E8C5724F5 /* Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.debug.xcconfig"; path = "Target Support Files/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.debug.xcconfig"; sourceTree = "<group>"; };
43
- 5DCACB8F33CDC322A6C60F78 /* libPods-FreeraspReactNativeExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-FreeraspReactNativeExample.a"; sourceTree = BUILT_PRODUCTS_DIR; };
41
+ 1BFFF7106D93FA70E5F83B56 /* Pods-FreeraspReactNativeExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FreeraspReactNativeExample.release.xcconfig"; path = "Target Support Files/Pods-FreeraspReactNativeExample/Pods-FreeraspReactNativeExample.release.xcconfig"; sourceTree = "<group>"; };
42
+ 2DDE1F099A37D62A4850E520 /* Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.release.xcconfig"; path = "Target Support Files/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.release.xcconfig"; sourceTree = "<group>"; };
44
43
  81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = FreeraspReactNativeExample/LaunchScreen.storyboard; sourceTree = "<group>"; };
45
- 89C6BE57DB24E9ADA2F236DE /* Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.release.xcconfig"; path = "Target Support Files/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.release.xcconfig"; sourceTree = "<group>"; };
44
+ 8488310E7CEBAD4453B2B105 /* libPods-FreeraspReactNativeExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-FreeraspReactNativeExample.a"; sourceTree = BUILT_PRODUCTS_DIR; };
45
+ 85E04B3D386AA8B417F2AAF3 /* Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.debug.xcconfig"; path = "Target Support Files/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.debug.xcconfig"; sourceTree = "<group>"; };
46
46
  8C2BD8B529DF06E4000304E9 /* Talsec */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Talsec; path = ../../ios/Talsec; sourceTree = "<group>"; };
47
47
  8C2BD8BB29DF0976000304E9 /* TalsecRuntime.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = TalsecRuntime.xcframework; path = ../../ios/Talsec/TalsecRuntime.xcframework; sourceTree = "<group>"; };
48
48
  A41E05172962B9FD00B363A8 /* TalsecRuntime.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = TalsecRuntime.xcframework; path = "../../../../React/test2/someTestProject/node_modules/freerasp-react-native/ios/TalsecRuntime.xcframework"; sourceTree = "<group>"; };
@@ -57,7 +57,7 @@
57
57
  isa = PBXFrameworksBuildPhase;
58
58
  buildActionMask = 2147483647;
59
59
  files = (
60
- 7699B88040F8A987B510C191 /* libPods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.a in Frameworks */,
60
+ 4ED36F23A824FA42AAF69DEA /* libPods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.a in Frameworks */,
61
61
  );
62
62
  runOnlyForDeploymentPostprocessing = 0;
63
63
  };
@@ -65,7 +65,7 @@
65
65
  isa = PBXFrameworksBuildPhase;
66
66
  buildActionMask = 2147483647;
67
67
  files = (
68
- 0C80B921A6F3F58F76C31292 /* libPods-FreeraspReactNativeExample.a in Frameworks */,
68
+ 030014488BDA0448D18833AA /* libPods-FreeraspReactNativeExample.a in Frameworks */,
69
69
  );
70
70
  runOnlyForDeploymentPostprocessing = 0;
71
71
  };
@@ -112,8 +112,8 @@
112
112
  A44E69A2295DA98F000A719C /* TalsecRuntime.xcframework */,
113
113
  A41E05172962B9FD00B363A8 /* TalsecRuntime.xcframework */,
114
114
  ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
115
- 5DCACB8F33CDC322A6C60F78 /* libPods-FreeraspReactNativeExample.a */,
116
- 19F6CBCC0A4E27FBF8BF4A61 /* libPods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.a */,
115
+ 8488310E7CEBAD4453B2B105 /* libPods-FreeraspReactNativeExample.a */,
116
+ 09A90BCC7156013BB41680E2 /* libPods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.a */,
117
117
  );
118
118
  name = Frameworks;
119
119
  sourceTree = "<group>";
@@ -152,10 +152,10 @@
152
152
  BBD78D7AC51CEA395F1C20DB /* Pods */ = {
153
153
  isa = PBXGroup;
154
154
  children = (
155
- 3B4392A12AC88292D35C810B /* Pods-FreeraspReactNativeExample.debug.xcconfig */,
156
- 5709B34CF0A7D63546082F79 /* Pods-FreeraspReactNativeExample.release.xcconfig */,
157
- 5B7EB9410499542E8C5724F5 /* Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.debug.xcconfig */,
158
- 89C6BE57DB24E9ADA2F236DE /* Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.release.xcconfig */,
155
+ 038937FFB95426BE2297B416 /* Pods-FreeraspReactNativeExample.debug.xcconfig */,
156
+ 1BFFF7106D93FA70E5F83B56 /* Pods-FreeraspReactNativeExample.release.xcconfig */,
157
+ 85E04B3D386AA8B417F2AAF3 /* Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.debug.xcconfig */,
158
+ 2DDE1F099A37D62A4850E520 /* Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.release.xcconfig */,
159
159
  );
160
160
  path = Pods;
161
161
  sourceTree = "<group>";
@@ -167,12 +167,12 @@
167
167
  isa = PBXNativeTarget;
168
168
  buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "FreeraspReactNativeExampleTests" */;
169
169
  buildPhases = (
170
- A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */,
170
+ A4BC7293855B5A05F4C72AC9 /* [CP] Check Pods Manifest.lock */,
171
171
  00E356EA1AD99517003FC87E /* Sources */,
172
172
  00E356EB1AD99517003FC87E /* Frameworks */,
173
173
  00E356EC1AD99517003FC87E /* Resources */,
174
- C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */,
175
- F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */,
174
+ 995743924976FEBF7E02912B /* [CP] Embed Pods Frameworks */,
175
+ E336F02480C5189A28C1E46B /* [CP] Copy Pods Resources */,
176
176
  );
177
177
  buildRules = (
178
178
  );
@@ -188,14 +188,14 @@
188
188
  isa = PBXNativeTarget;
189
189
  buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "FreeraspReactNativeExample" */;
190
190
  buildPhases = (
191
- C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */,
191
+ A46062B41DA6D2651EEB7340 /* [CP] Check Pods Manifest.lock */,
192
192
  FD10A7F022414F080027D42C /* Start Packager */,
193
193
  13B07F871A680F5B00A75B9A /* Sources */,
194
194
  13B07F8C1A680F5B00A75B9A /* Frameworks */,
195
195
  13B07F8E1A680F5B00A75B9A /* Resources */,
196
196
  00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
197
- 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */,
198
- E235C05ADACE081382539298 /* [CP] Copy Pods Resources */,
197
+ 98A5FD6C0A62A5C5AA93C483 /* [CP] Embed Pods Frameworks */,
198
+ BE093CB94A51CDDBD748D259 /* [CP] Copy Pods Resources */,
199
199
  );
200
200
  buildRules = (
201
201
  );
@@ -278,7 +278,7 @@
278
278
  shellPath = /bin/sh;
279
279
  shellScript = "set -e\n\nWITH_ENVIRONMENT=\"../node_modules/react-native/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"../node_modules/react-native/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n";
280
280
  };
281
- 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */ = {
281
+ 98A5FD6C0A62A5C5AA93C483 /* [CP] Embed Pods Frameworks */ = {
282
282
  isa = PBXShellScriptBuildPhase;
283
283
  buildActionMask = 2147483647;
284
284
  files = (
@@ -295,29 +295,24 @@
295
295
  shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FreeraspReactNativeExample/Pods-FreeraspReactNativeExample-frameworks.sh\"\n";
296
296
  showEnvVarsInLog = 0;
297
297
  };
298
- A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */ = {
298
+ 995743924976FEBF7E02912B /* [CP] Embed Pods Frameworks */ = {
299
299
  isa = PBXShellScriptBuildPhase;
300
300
  buildActionMask = 2147483647;
301
301
  files = (
302
302
  );
303
303
  inputFileListPaths = (
304
+ "${PODS_ROOT}/Target Support Files/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests-frameworks-${CONFIGURATION}-input-files.xcfilelist",
304
305
  );
305
- inputPaths = (
306
- "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
307
- "${PODS_ROOT}/Manifest.lock",
308
- );
309
- name = "[CP] Check Pods Manifest.lock";
306
+ name = "[CP] Embed Pods Frameworks";
310
307
  outputFileListPaths = (
311
- );
312
- outputPaths = (
313
- "$(DERIVED_FILE_DIR)/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests-checkManifestLockResult.txt",
308
+ "${PODS_ROOT}/Target Support Files/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests-frameworks-${CONFIGURATION}-output-files.xcfilelist",
314
309
  );
315
310
  runOnlyForDeploymentPostprocessing = 0;
316
311
  shellPath = /bin/sh;
317
- shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
312
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests-frameworks.sh\"\n";
318
313
  showEnvVarsInLog = 0;
319
314
  };
320
- C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = {
315
+ A46062B41DA6D2651EEB7340 /* [CP] Check Pods Manifest.lock */ = {
321
316
  isa = PBXShellScriptBuildPhase;
322
317
  buildActionMask = 2147483647;
323
318
  files = (
@@ -339,24 +334,29 @@
339
334
  shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
340
335
  showEnvVarsInLog = 0;
341
336
  };
342
- C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */ = {
337
+ A4BC7293855B5A05F4C72AC9 /* [CP] Check Pods Manifest.lock */ = {
343
338
  isa = PBXShellScriptBuildPhase;
344
339
  buildActionMask = 2147483647;
345
340
  files = (
346
341
  );
347
342
  inputFileListPaths = (
348
- "${PODS_ROOT}/Target Support Files/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests-frameworks-${CONFIGURATION}-input-files.xcfilelist",
349
343
  );
350
- name = "[CP] Embed Pods Frameworks";
344
+ inputPaths = (
345
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
346
+ "${PODS_ROOT}/Manifest.lock",
347
+ );
348
+ name = "[CP] Check Pods Manifest.lock";
351
349
  outputFileListPaths = (
352
- "${PODS_ROOT}/Target Support Files/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests-frameworks-${CONFIGURATION}-output-files.xcfilelist",
350
+ );
351
+ outputPaths = (
352
+ "$(DERIVED_FILE_DIR)/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests-checkManifestLockResult.txt",
353
353
  );
354
354
  runOnlyForDeploymentPostprocessing = 0;
355
355
  shellPath = /bin/sh;
356
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests-frameworks.sh\"\n";
356
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
357
357
  showEnvVarsInLog = 0;
358
358
  };
359
- E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = {
359
+ BE093CB94A51CDDBD748D259 /* [CP] Copy Pods Resources */ = {
360
360
  isa = PBXShellScriptBuildPhase;
361
361
  buildActionMask = 2147483647;
362
362
  files = (
@@ -373,7 +373,7 @@
373
373
  shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FreeraspReactNativeExample/Pods-FreeraspReactNativeExample-resources.sh\"\n";
374
374
  showEnvVarsInLog = 0;
375
375
  };
376
- F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */ = {
376
+ E336F02480C5189A28C1E46B /* [CP] Copy Pods Resources */ = {
377
377
  isa = PBXShellScriptBuildPhase;
378
378
  buildActionMask = 2147483647;
379
379
  files = (
@@ -442,7 +442,7 @@
442
442
  /* Begin XCBuildConfiguration section */
443
443
  00E356F61AD99517003FC87E /* Debug */ = {
444
444
  isa = XCBuildConfiguration;
445
- baseConfigurationReference = 5B7EB9410499542E8C5724F5 /* Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.debug.xcconfig */;
445
+ baseConfigurationReference = 85E04B3D386AA8B417F2AAF3 /* Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.debug.xcconfig */;
446
446
  buildSettings = {
447
447
  BUNDLE_LOADER = "$(TEST_HOST)";
448
448
  GCC_PREPROCESSOR_DEFINITIONS = (
@@ -469,7 +469,7 @@
469
469
  };
470
470
  00E356F71AD99517003FC87E /* Release */ = {
471
471
  isa = XCBuildConfiguration;
472
- baseConfigurationReference = 89C6BE57DB24E9ADA2F236DE /* Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.release.xcconfig */;
472
+ baseConfigurationReference = 2DDE1F099A37D62A4850E520 /* Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.release.xcconfig */;
473
473
  buildSettings = {
474
474
  BUNDLE_LOADER = "$(TEST_HOST)";
475
475
  COPY_PHASE_STRIP = NO;
@@ -493,7 +493,7 @@
493
493
  };
494
494
  13B07F941A680F5B00A75B9A /* Debug */ = {
495
495
  isa = XCBuildConfiguration;
496
- baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-FreeraspReactNativeExample.debug.xcconfig */;
496
+ baseConfigurationReference = 038937FFB95426BE2297B416 /* Pods-FreeraspReactNativeExample.debug.xcconfig */;
497
497
  buildSettings = {
498
498
  ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
499
499
  CLANG_ENABLE_MODULES = YES;
@@ -519,7 +519,7 @@
519
519
  };
520
520
  13B07F951A680F5B00A75B9A /* Release */ = {
521
521
  isa = XCBuildConfiguration;
522
- baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-FreeraspReactNativeExample.release.xcconfig */;
522
+ baseConfigurationReference = 1BFFF7106D93FA70E5F83B56 /* Pods-FreeraspReactNativeExample.release.xcconfig */;
523
523
  buildSettings = {
524
524
  ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
525
525
  CLANG_ENABLE_MODULES = YES;
@@ -1,21 +1,48 @@
1
1
  import * as React from 'react';
2
2
 
3
3
  import { Platform } from 'react-native';
4
- import { useFreeRasp } from 'freerasp-react-native';
4
+ import {
5
+ addToWhitelist,
6
+ useFreeRasp,
7
+ type SuspiciousAppInfo,
8
+ } from 'freerasp-react-native';
5
9
  import { DemoApp } from './DemoApp';
6
10
  import { commonChecks, iosChecks, androidChecks } from './checks';
11
+ import { useEffect } from 'react';
7
12
 
8
13
  const App = () => {
9
14
  const [appChecks, setAppChecks] = React.useState([
10
15
  ...commonChecks,
11
16
  ...(Platform.OS === 'ios' ? iosChecks : androidChecks),
12
17
  ]);
18
+ const [suspiciousApps, setSuspiciousApps] = React.useState<
19
+ SuspiciousAppInfo[]
20
+ >([]);
21
+
22
+ useEffect(() => {
23
+ (async () => {
24
+ Platform.OS === 'android' && (await addItemsToMalwareWhitelist());
25
+ })();
26
+ }, []);
13
27
 
14
28
  const config = {
15
29
  androidConfig: {
16
30
  packageName: 'com.freeraspreactnativeexample',
17
31
  certificateHashes: ['AKoRuyLMM91E7lX/Zqp3u4jMmd0A7hH/Iqozu0TMVd0='],
18
32
  // supportedAlternativeStores: ['storeOne', 'storeTwo'],
33
+ malwareConfig: {
34
+ blacklistedHashes: ['FgvSehLMM91E7lX/Zqp3u4jMmd0A7hH/Iqozu0TMVd0u'],
35
+ blacklistedPackageNames: ['com.wultra.app.screenlogger'],
36
+ suspiciousPermissions: [
37
+ [
38
+ 'android.permission.INTERNET',
39
+ 'android.permission.ACCESS_COARSE_LOCATION',
40
+ ],
41
+ ['android.permission.BLUETOOTH'],
42
+ ['android.permission.BATTERY_STATS'],
43
+ ],
44
+ whitelistedInstallationSources: ['com.apkpure.aegon'],
45
+ },
19
46
  },
20
47
  iosConfig: {
21
48
  appBundleId: 'com.freeraspreactnativeexample',
@@ -144,11 +171,39 @@ const App = () => {
144
171
  )
145
172
  );
146
173
  },
174
+ // Android only
175
+ malware: (detectedApps: SuspiciousAppInfo[]) => {
176
+ setSuspiciousApps(detectedApps);
177
+ setAppChecks((currentState) =>
178
+ currentState.map((threat) =>
179
+ threat.name === 'Malware' ? { ...threat, status: 'nok' } : threat
180
+ )
181
+ );
182
+ },
183
+ };
184
+
185
+ const addItemsToMalwareWhitelist = async () => {
186
+ const appsToWhitelist = [
187
+ 'com.talsecreactnativesecuritypluginexample',
188
+ 'com.example.myApp',
189
+ ];
190
+ await Promise.all(
191
+ appsToWhitelist.map(async (app) => {
192
+ try {
193
+ const whitelistResponse = await addToWhitelist(app);
194
+ console.info(
195
+ `${app} stored to Malware Whitelist: ${whitelistResponse}`
196
+ );
197
+ } catch (error) {
198
+ console.info('Malware whitelist failed: ', error);
199
+ }
200
+ })
201
+ );
147
202
  };
148
203
 
149
204
  useFreeRasp(config, actions);
150
205
 
151
- return <DemoApp checks={appChecks} />;
206
+ return <DemoApp checks={appChecks} suspiciousApps={suspiciousApps} />;
152
207
  };
153
208
 
154
209
  export default App;
@@ -6,8 +6,16 @@ import CloseCircle from '../assets/close-circle-outline.png';
6
6
  import TalsecLogo from '../assets/talsec-logo.png';
7
7
  import { Image } from 'react-native';
8
8
  import { Colors } from './styles';
9
+ import { MalwareModal } from './MalwareModal';
10
+ import type { SuspiciousAppInfo } from 'freerasp-react-native';
9
11
 
10
- export const DemoApp = (props: any) => {
12
+ export const DemoApp: React.FC<{
13
+ checks: {
14
+ name: string;
15
+ status: string;
16
+ }[];
17
+ suspiciousApps: SuspiciousAppInfo[];
18
+ }> = ({ checks, suspiciousApps }) => {
11
19
  return (
12
20
  <>
13
21
  <Flex
@@ -30,7 +38,7 @@ export const DemoApp = (props: any) => {
30
38
  >
31
39
  freeRASP checks:
32
40
  </Text>
33
- {props.checks.map((check: any, idx: number) => (
41
+ {checks.map((check: any, idx: number) => (
34
42
  <Box
35
43
  key={idx}
36
44
  style={{
@@ -60,6 +68,12 @@ export const DemoApp = (props: any) => {
60
68
  >
61
69
  {check.name}
62
70
  </Text>
71
+ {check.name === 'Malware' && (
72
+ <MalwareModal
73
+ isDisabled={check.status === 'ok'}
74
+ suspiciousApps={suspiciousApps}
75
+ />
76
+ )}
63
77
  {check.status === 'ok' ? (
64
78
  <Image
65
79
  source={CheckmarkCircle}
@@ -0,0 +1,158 @@
1
+ import { Button, HStack } from '@react-native-material/core';
2
+ import { addToWhitelist, type SuspiciousAppInfo } from 'freerasp-react-native';
3
+ import ArrowUp from '../assets/arrow-up.png';
4
+ import ArrowDown from '../assets/arrow-down.png';
5
+ import React from 'react';
6
+ import { useState } from 'react';
7
+ import { TouchableOpacity, View, Text, Image, StyleSheet } from 'react-native';
8
+ import { Colors } from './styles';
9
+
10
+ export const MalwareItem: React.FC<{ app: SuspiciousAppInfo }> = ({ app }) => {
11
+ const [expanded, setExpanded] = useState(false);
12
+
13
+ const appUninstall = async () => {
14
+ alert('Implement yourself!');
15
+ };
16
+
17
+ const whitelistApp = async (packageName: string) => {
18
+ try {
19
+ const whitelistResponse = await addToWhitelist(packageName);
20
+ console.info(
21
+ `Malware Whitelist response for ${app}: ${whitelistResponse}`
22
+ );
23
+ alert('Restart app for whitelist to take effect');
24
+ } catch (error: any) {
25
+ console.info('Error while adding app to malware whitelist: ', error);
26
+ }
27
+ };
28
+
29
+ return (
30
+ <View style={styles.item}>
31
+ <TouchableOpacity onPress={() => setExpanded(!expanded)}>
32
+ <HStack>
33
+ <Image
34
+ style={styles.iconSmall}
35
+ source={{
36
+ uri: `data:image/png;base64,${app.packageInfo.appIcon}`,
37
+ }}
38
+ />
39
+ <View style={styles.textView}>
40
+ <Text numberOfLines={1} style={styles.titleText}>
41
+ {app.packageInfo.appName}
42
+ </Text>
43
+ </View>
44
+
45
+ <View style={styles.buttonView}>
46
+ <Image
47
+ source={expanded ? ArrowUp : ArrowDown}
48
+ style={styles.expandArrow}
49
+ />
50
+ </View>
51
+ </HStack>
52
+ </TouchableOpacity>
53
+ {expanded && (
54
+ <>
55
+ <View style={styles.spacer} />
56
+ <Text style={styles.listItemTitle}>Package name:</Text>
57
+ <Text style={styles.listItem}>{app.packageInfo.packageName}</Text>
58
+ <Text style={styles.listItemTitle}>App name:</Text>
59
+ <Text style={styles.listItem}>
60
+ {app.packageInfo.appName ?? 'Not specified'}
61
+ </Text>
62
+ <Text style={styles.listItemTitle}>App version:</Text>
63
+ <Text style={styles.listItem}>
64
+ {app.packageInfo.version ?? 'Not specified'}
65
+ </Text>
66
+ <Text style={styles.listItemTitle}>App Icon:</Text>
67
+ {app.packageInfo.appIcon ? (
68
+ <Image
69
+ style={styles.icon}
70
+ source={{
71
+ uri: `data:image/png;base64,${app.packageInfo.appIcon}`,
72
+ }}
73
+ />
74
+ ) : (
75
+ <Text style={styles.listItem}>Not specified</Text>
76
+ )}
77
+ <Text style={styles.listItemTitle}>Installer store:</Text>
78
+ <Text style={styles.listItem}>
79
+ {app.packageInfo.installerStore ?? 'Not specified'}
80
+ </Text>
81
+ <Text style={styles.listItemTitle}>Detection reason:</Text>
82
+ <Text style={styles.listItem}>{app.reason}</Text>
83
+ <HStack style={styles.buttonGroup}>
84
+ <Button
85
+ title={'Add to whitelist'}
86
+ onPress={() => whitelistApp(app.packageInfo.packageName)}
87
+ />
88
+ <Button title={'Uninstall'} onPress={appUninstall} />
89
+ </HStack>
90
+ </>
91
+ )}
92
+ </View>
93
+ );
94
+ };
95
+
96
+ const styles = StyleSheet.create({
97
+ button: {
98
+ borderRadius: 20,
99
+ paddingHorizontal: 30,
100
+ paddingVertical: 10,
101
+ marginTop: 15,
102
+ elevation: 2,
103
+ },
104
+ buttonOpen: {
105
+ backgroundColor: '#F194FF',
106
+ },
107
+ buttonClose: {
108
+ backgroundColor: '#2196F3',
109
+ },
110
+ item: {
111
+ backgroundColor: '#d4e4ff',
112
+ borderRadius: 20,
113
+ padding: 20,
114
+ marginVertical: 8,
115
+ },
116
+ listItemTitle: {
117
+ fontSize: 20,
118
+ fontWeight: 'bold',
119
+ },
120
+ listItem: {
121
+ fontSize: 16,
122
+ paddingBottom: 5,
123
+ },
124
+ titleText: {
125
+ fontSize: 20,
126
+ },
127
+ icon: {
128
+ marginTop: 5,
129
+ marginBottom: 5,
130
+ width: 50,
131
+ height: 50,
132
+ },
133
+ iconSmall: {
134
+ width: 40,
135
+ height: 40,
136
+ },
137
+ textView: {
138
+ justifyContent: 'center',
139
+ flex: 1,
140
+ marginLeft: 20,
141
+ marginRight: 30,
142
+ },
143
+ buttonView: {
144
+ justifyContent: 'center',
145
+ },
146
+ spacer: {
147
+ height: 15,
148
+ },
149
+ buttonGroup: {
150
+ marginTop: 10,
151
+ justifyContent: 'space-between',
152
+ },
153
+ expandArrow: {
154
+ tintColor: Colors.grey,
155
+ width: 30,
156
+ height: 30,
157
+ },
158
+ });
@@ -0,0 +1,126 @@
1
+ import React, { useState } from 'react';
2
+ import {
3
+ Alert,
4
+ FlatList,
5
+ Modal,
6
+ Pressable,
7
+ SafeAreaView,
8
+ StyleSheet,
9
+ Text,
10
+ View,
11
+ Button,
12
+ } from 'react-native';
13
+ import type { SuspiciousAppInfo } from 'freerasp-react-native';
14
+ import { MalwareItem } from './MalwareItem';
15
+
16
+ export const MalwareModal: React.FC<{
17
+ isDisabled: boolean;
18
+ suspiciousApps: SuspiciousAppInfo[];
19
+ }> = ({ isDisabled, suspiciousApps }) => {
20
+ const [modalVisible, setModalVisible] = useState(false);
21
+
22
+ return (
23
+ <>
24
+ {!isDisabled && (
25
+ <>
26
+ <View style={styles.viewFlex} />
27
+ <Button
28
+ title={'Details'}
29
+ color="#cf000a"
30
+ disabled={isDisabled}
31
+ onPress={() => setModalVisible(true)}
32
+ />
33
+ <View style={styles.viewWithMargin} />
34
+ </>
35
+ )}
36
+
37
+ <Modal
38
+ animationType="slide"
39
+ transparent={true}
40
+ visible={modalVisible}
41
+ style={styles.modal}
42
+ onRequestClose={() => {
43
+ Alert.alert('Modal has been closed.');
44
+ setModalVisible(false);
45
+ }}
46
+ >
47
+ <View style={styles.centeredView}>
48
+ <View style={styles.modalView}>
49
+ <SafeAreaView style={styles.container}>
50
+ <Text style={styles.title}>Detected malware:</Text>
51
+ <FlatList
52
+ data={suspiciousApps}
53
+ renderItem={({ item }) => <MalwareItem app={item} />}
54
+ keyExtractor={(_, index) => index.toString()}
55
+ />
56
+ </SafeAreaView>
57
+ <Pressable
58
+ style={[styles.button, styles.buttonClose]}
59
+ onPress={() => setModalVisible(false)}
60
+ >
61
+ <Text style={styles.textStyle}>Close</Text>
62
+ </Pressable>
63
+ </View>
64
+ </View>
65
+ </Modal>
66
+ </>
67
+ );
68
+ };
69
+
70
+ const styles = StyleSheet.create({
71
+ centeredView: {
72
+ flex: 1,
73
+ justifyContent: 'center',
74
+ alignItems: 'center',
75
+ },
76
+ modalView: {
77
+ margin: 10,
78
+ backgroundColor: 'white',
79
+ borderRadius: 20,
80
+ padding: 15,
81
+ alignItems: 'center',
82
+ shadowColor: '#000',
83
+ shadowOffset: {
84
+ width: 0,
85
+ height: 2,
86
+ },
87
+ shadowOpacity: 0.25,
88
+ shadowRadius: 4,
89
+ elevation: 5,
90
+ flex: 1,
91
+ width: '98%',
92
+ },
93
+ button: {
94
+ borderRadius: 20,
95
+ paddingHorizontal: 30,
96
+ paddingVertical: 10,
97
+ marginTop: 15,
98
+ elevation: 2,
99
+ },
100
+ buttonClose: {
101
+ backgroundColor: '#2196F3',
102
+ },
103
+ textStyle: {
104
+ color: 'white',
105
+ fontWeight: 'bold',
106
+ textAlign: 'center',
107
+ },
108
+ container: {
109
+ flex: 1,
110
+ width: '100%',
111
+ },
112
+ title: {
113
+ fontSize: 32,
114
+ fontWeight: 'bold',
115
+ textAlign: 'center',
116
+ },
117
+ viewFlex: {
118
+ flex: 1,
119
+ },
120
+ viewWithMargin: {
121
+ margin: 5,
122
+ },
123
+ modal: {
124
+ flex: 1,
125
+ },
126
+ });
@@ -16,4 +16,5 @@ export const iosChecks = [{ name: 'Device ID', status: 'ok' }];
16
16
  export const androidChecks = [
17
17
  { name: 'Obfuscation Issues', status: 'ok' },
18
18
  { name: 'Developer Mode', status: 'ok' },
19
+ { name: 'Malware', status: 'ok' },
19
20
  ];