freerasp-react-native 4.5.2 → 5.0.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.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,42 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [5.0.0] - 2026-05-15
9
+
10
+ - Android SDK version: 18.3.0
11
+ - iOS SDK version: 6.14.4
12
+
13
+ ### Breaking
14
+
15
+ - `SuspiciousAppInfo.reason` (String) renamed to `reasons` (string[])
16
+ - Value `"blacklist"` in `reasons` renamed to `"blocklist"`
17
+ - Removed `MalwareConfig` and `AndroidConfig.malwareConfig`
18
+
19
+ ### React Native
20
+
21
+ #### Removed
22
+
23
+ - `TalsecMalwareConfig` type and `TalsecAndroidConfig.malwareConfig` field
24
+
25
+ ### Android
26
+
27
+ #### Added
28
+
29
+ - New API class `SuspiciousAppDetectionConfig` that can be used to configure malware detection
30
+ - New API for malware detection configuration in `TalsecConfig`, see `TalsecConfig.Builder#suspiciousAppDetection`
31
+
32
+ #### Fixed
33
+
34
+ - Fixed `VerifyError` caused by `JaCoCo` bytecode instrumentation
35
+ - Fixed a potential cause of crash in the multi-instance detector
36
+ - Fixed Java interoperability of `ScreenProtector` methods
37
+ - Fixed Kotlin classpath conflicts in SDK dependency resolution (Kotlin 2.0.0)
38
+
39
+ #### Changed
40
+
41
+ - Fine-tuned location spoofing detection
42
+ - Modified malware incident log structure for better aggregation
43
+
8
44
  ## [4.5.2] - 2026-03-24
9
45
 
10
46
  - Android SDK version: 18.0.4
@@ -105,7 +105,7 @@ dependencies {
105
105
  implementation "com.facebook.react:react-native:$react_native_version"
106
106
  implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
107
107
  implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.1"
108
- implementation "com.aheaditec.talsec.security:TalsecSecurity-Community-ReactNative:18.0.4"
108
+ implementation "com.aheaditec.talsec.security:TalsecSecurity-Community-ReactNative:18.3.0"
109
109
  }
110
110
 
111
111
  if (isNewArchitectureEnabled()) {
@@ -33,6 +33,7 @@ import com.freeraspreactnative.utils.getMapThrowing
33
33
  import com.freeraspreactnative.utils.getNestedArraySafe
34
34
  import com.freeraspreactnative.utils.getStringThrowing
35
35
  import com.freeraspreactnative.utils.toEncodedWritableArray
36
+ import com.freeraspreactnative.utils.toSuspiciousAppDetectionConfig
36
37
 
37
38
  class FreeraspReactNativeModule(private val reactContext: ReactApplicationContext) :
38
39
  ReactContextBaseJavaModule(reactContext) {
@@ -298,12 +299,9 @@ class FreeraspReactNativeModule(private val reactContext: ReactApplicationContex
298
299
  .killOnBypass(config.getBooleanSafe("killOnBypass", false))
299
300
  .supportedAlternativeStores(androidConfig.getArraySafe("supportedAlternativeStores"))
300
301
 
301
- if (androidConfig.hasKey("malwareConfig")) {
302
- val malwareConfig = androidConfig.getMapThrowing("malwareConfig")
303
- talsecBuilder.whitelistedInstallationSources(malwareConfig.getArraySafe("whitelistedInstallationSources"))
304
- talsecBuilder.blacklistedHashes(malwareConfig.getArraySafe("blacklistedHashes"))
305
- talsecBuilder.blacklistedPackageNames(malwareConfig.getArraySafe("blacklistedPackageNames"))
306
- talsecBuilder.suspiciousPermissions(malwareConfig.getNestedArraySafe("suspiciousPermissions"))
302
+ if (androidConfig.hasKey("suspiciousAppDetectionConfig")) {
303
+ val suspiciousAppConfig = androidConfig.getMapThrowing("suspiciousAppDetectionConfig")
304
+ talsecBuilder.suspiciousAppDetection(suspiciousAppConfig.toSuspiciousAppDetectionConfig())
307
305
  }
308
306
 
309
307
  return talsecBuilder.build()
@@ -9,7 +9,7 @@ import kotlinx.serialization.Serializable
9
9
  @Serializable
10
10
  data class RNSuspiciousAppInfo(
11
11
  val packageInfo: RNPackageInfo,
12
- val reason: String,
12
+ val reasons: Set<String>,
13
13
  val permissions: Set<String>?
14
14
  )
15
15
 
@@ -3,6 +3,10 @@ package com.freeraspreactnative.utils
3
3
  import android.content.pm.PackageInfo
4
4
  import android.util.Base64
5
5
  import android.util.Log
6
+ import com.aheaditec.talsec_security.security.api.MalwareScanScope
7
+ import com.aheaditec.talsec_security.security.api.ReasonMode
8
+ import com.aheaditec.talsec_security.security.api.ScopeType
9
+ import com.aheaditec.talsec_security.security.api.SuspiciousAppDetectionConfig
6
10
  import com.aheaditec.talsec_security.security.api.SuspiciousAppInfo
7
11
  import com.facebook.react.bridge.Arguments
8
12
  import com.facebook.react.bridge.ReactContext
@@ -32,7 +36,7 @@ internal fun ReadableMap.getBooleanSafe(key: String, defaultValue: Boolean = tru
32
36
  return defaultValue
33
37
  }
34
38
 
35
- private inline fun <reified T> ReadableArray.toPrimitiveArray(): Array<T> {
39
+ internal inline fun <reified T> ReadableArray.toPrimitiveArray(): Array<T> {
36
40
  val output = mutableListOf<T>()
37
41
 
38
42
  for (i in 0 until this.size()) {
@@ -74,7 +78,7 @@ internal fun ReadableMap.getNestedArraySafe(key: String): Array<Array<String>> {
74
78
  internal fun SuspiciousAppInfo.toRNSuspiciousAppInfo(context: ReactContext): RNSuspiciousAppInfo {
75
79
  return RNSuspiciousAppInfo(
76
80
  packageInfo = this.packageInfo.toRNPackageInfo(context),
77
- reason = this.reason,
81
+ reasons = this.reasons,
78
82
  permissions = this.permissions
79
83
  )
80
84
  }
@@ -92,6 +96,22 @@ internal fun PackageInfo.toRNPackageInfo(context: ReactContext): RNPackageInfo {
92
96
  )
93
97
  }
94
98
 
99
+ internal fun ReadableMap.toScanScope(): MalwareScanScope {
100
+ val scopeType = ScopeType.valueOf(getStringThrowing("scopeType"))
101
+ val trustedInstallSources = getArraySafe("trustedInstallSources").toList().ifEmpty { null }
102
+ return MalwareScanScope(scopeType, trustedInstallSources)
103
+ }
104
+
105
+ internal fun ReadableMap.toSuspiciousAppDetectionConfig(): SuspiciousAppDetectionConfig {
106
+ val packageNames = getArraySafe("packageNames").toSet().ifEmpty { null }
107
+ val hashes = getArraySafe("hashes").toSet().ifEmpty { null }
108
+ val requestedPermissions = getNestedArraySafe("requestedPermissions").map { it.toSet() }.toSet().ifEmpty { null }
109
+ val grantedPermissions = getNestedArraySafe("grantedPermissions").map { it.toSet() }.toSet().ifEmpty { null }
110
+ val scanScope = getMapThrowing("scanScope").toScanScope()
111
+ val reasonMode = ReasonMode.valueOf(getStringThrowing("reasonMode"))
112
+ return SuspiciousAppDetectionConfig(packageNames, hashes, requestedPermissions, grantedPermissions, scanScope, reasonMode)
113
+ }
114
+
95
115
  /**
96
116
  * Convert the Talsec's SuspiciousAppInfo to base64-encoded json array,
97
117
  * which can be then sent to React Native
@@ -6,8 +6,9 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.talsecStart = exports.storeExternalId = exports.removeListenerForEvent = exports.removeExternalId = exports.onInvalidCallback = exports.isScreenCaptureBlocked = exports.getAppIcon = exports.blockScreenCapture = exports.addToWhitelist = void 0;
7
7
  var _reactNative = require("react-native");
8
8
  var _nativeModules = require("../nativeModules");
9
+ var _config = require("../../utils/config");
9
10
  const talsecStart = async options => {
10
- return _nativeModules.FreeraspReactNative.talsecStart(options);
11
+ return _nativeModules.FreeraspReactNative.talsecStart((0, _config.withDefaults)(options));
11
12
  };
12
13
  exports.talsecStart = talsecStart;
13
14
  const addToWhitelist = async packageName => {
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_nativeModules","talsecStart","options","FreeraspReactNative","exports","addToWhitelist","packageName","Platform","OS","Promise","reject","blockScreenCapture","enable","isScreenCaptureBlocked","storeExternalId","data","removeExternalId","getAppIcon","onInvalidCallback","removeListenerForEvent","channel"],"sourceRoot":"../../../../src","sources":["api/methods/native.ts"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA;AAGO,MAAME,WAAW,GAAG,MAAOC,OAAqB,IAAsB;EAC3E,OAAOC,kCAAmB,CAACF,WAAW,CAACC,OAAO,CAAC;AACjD,CAAC;AAACE,OAAA,CAAAH,WAAA,GAAAA,WAAA;AAEK,MAAMI,cAAc,GAAG,MAAOC,WAAmB,IAAuB;EAC7E,IAAIC,qBAAQ,CAACC,EAAE,KAAK,KAAK,EAAE;IACzB,OAAOC,OAAO,CAACC,MAAM,CAAC,wCAAwC,CAAC;EACjE;EACA,OAAOP,kCAAmB,CAACE,cAAc,CAACC,WAAW,CAAC;AACxD,CAAC;AAACF,OAAA,CAAAC,cAAA,GAAAA,cAAA;AAEK,MAAMM,kBAAkB,GAAIC,MAAe,IAAsB;EACtE,OAAOT,kCAAmB,CAACQ,kBAAkB,CAACC,MAAM,CAAC;AACvD,CAAC;AAACR,OAAA,CAAAO,kBAAA,GAAAA,kBAAA;AAEK,MAAME,sBAAsB,GAAGA,CAAA,KAAwB;EAC5D,OAAOV,kCAAmB,CAACU,sBAAsB,CAAC,CAAC;AACrD,CAAC;AAACT,OAAA,CAAAS,sBAAA,GAAAA,sBAAA;AAEK,MAAMC,eAAe,GAAIC,IAAY,IAAsB;EAChE,OAAOZ,kCAAmB,CAACW,eAAe,CAACC,IAAI,CAAC;AAClD,CAAC;AAACX,OAAA,CAAAU,eAAA,GAAAA,eAAA;AAEK,MAAME,gBAAgB,GAAGA,CAAA,KAAuB;EACrD,OAAOb,kCAAmB,CAACa,gBAAgB,CAAC,CAAC;AAC/C,CAAC;AAACZ,OAAA,CAAAY,gBAAA,GAAAA,gBAAA;AAEK,MAAMC,UAAU,GAAIX,WAAmB,IAAsB;EAClE,IAAIC,qBAAQ,CAACC,EAAE,KAAK,KAAK,EAAE;IACzB,OAAOC,OAAO,CAACC,MAAM,CACnB,+DACF,CAAC;EACH;EACA,OAAOP,kCAAmB,CAACc,UAAU,CAACX,WAAW,CAAC;AACpD,CAAC;AAACF,OAAA,CAAAa,UAAA,GAAAA,UAAA;AAEK,MAAMC,iBAAiB,GAAGA,CAAA,KAAY;EAC3Cf,kCAAmB,CAACe,iBAAiB,CAAC,CAAC;AACzC,CAAC;AAACd,OAAA,CAAAc,iBAAA,GAAAA,iBAAA;AAEK,MAAMC,sBAAsB,GAAIC,OAAe,IAAsB;EAC1E,OAAOjB,kCAAmB,CAACgB,sBAAsB,CAACC,OAAO,CAAC;AAC5D,CAAC;AAAChB,OAAA,CAAAe,sBAAA,GAAAA,sBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","_nativeModules","_config","talsecStart","options","FreeraspReactNative","withDefaults","exports","addToWhitelist","packageName","Platform","OS","Promise","reject","blockScreenCapture","enable","isScreenCaptureBlocked","storeExternalId","data","removeExternalId","getAppIcon","onInvalidCallback","removeListenerForEvent","channel"],"sourceRoot":"../../../../src","sources":["api/methods/native.ts"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA;AAEA,IAAAE,OAAA,GAAAF,OAAA;AAEO,MAAMG,WAAW,GAAG,MAAOC,OAAqB,IAAsB;EAC3E,OAAOC,kCAAmB,CAACF,WAAW,CAAC,IAAAG,oBAAY,EAACF,OAAO,CAAC,CAAC;AAC/D,CAAC;AAACG,OAAA,CAAAJ,WAAA,GAAAA,WAAA;AAEK,MAAMK,cAAc,GAAG,MAAOC,WAAmB,IAAuB;EAC7E,IAAIC,qBAAQ,CAACC,EAAE,KAAK,KAAK,EAAE;IACzB,OAAOC,OAAO,CAACC,MAAM,CAAC,wCAAwC,CAAC;EACjE;EACA,OAAOR,kCAAmB,CAACG,cAAc,CAACC,WAAW,CAAC;AACxD,CAAC;AAACF,OAAA,CAAAC,cAAA,GAAAA,cAAA;AAEK,MAAMM,kBAAkB,GAAIC,MAAe,IAAsB;EACtE,OAAOV,kCAAmB,CAACS,kBAAkB,CAACC,MAAM,CAAC;AACvD,CAAC;AAACR,OAAA,CAAAO,kBAAA,GAAAA,kBAAA;AAEK,MAAME,sBAAsB,GAAGA,CAAA,KAAwB;EAC5D,OAAOX,kCAAmB,CAACW,sBAAsB,CAAC,CAAC;AACrD,CAAC;AAACT,OAAA,CAAAS,sBAAA,GAAAA,sBAAA;AAEK,MAAMC,eAAe,GAAIC,IAAY,IAAsB;EAChE,OAAOb,kCAAmB,CAACY,eAAe,CAACC,IAAI,CAAC;AAClD,CAAC;AAACX,OAAA,CAAAU,eAAA,GAAAA,eAAA;AAEK,MAAME,gBAAgB,GAAGA,CAAA,KAAuB;EACrD,OAAOd,kCAAmB,CAACc,gBAAgB,CAAC,CAAC;AAC/C,CAAC;AAACZ,OAAA,CAAAY,gBAAA,GAAAA,gBAAA;AAEK,MAAMC,UAAU,GAAIX,WAAmB,IAAsB;EAClE,IAAIC,qBAAQ,CAACC,EAAE,KAAK,KAAK,EAAE;IACzB,OAAOC,OAAO,CAACC,MAAM,CACnB,+DACF,CAAC;EACH;EACA,OAAOR,kCAAmB,CAACe,UAAU,CAACX,WAAW,CAAC;AACpD,CAAC;AAACF,OAAA,CAAAa,UAAA,GAAAA,UAAA;AAEK,MAAMC,iBAAiB,GAAGA,CAAA,KAAY;EAC3ChB,kCAAmB,CAACgB,iBAAiB,CAAC,CAAC;AACzC,CAAC;AAACd,OAAA,CAAAc,iBAAA,GAAAA,iBAAA;AAEK,MAAMC,sBAAsB,GAAIC,OAAe,IAAsB;EAC1E,OAAOlB,kCAAmB,CAACiB,sBAAsB,CAACC,OAAO,CAAC;AAC5D,CAAC;AAAChB,OAAA,CAAAe,sBAAA,GAAAA,sBAAA","ignoreList":[]}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.withDefaults = exports.normalizeAndroidConfig = void 0;
7
+ const DEFAULT_SCAN_SCOPE = {
8
+ scopeType: 'SIDELOADED_ONLY'
9
+ };
10
+ const DEFAULT_REASON_MODE = 'HIGHEST_CONFIDENCE';
11
+ const withDetectionDefaults = config => ({
12
+ ...config,
13
+ scanScope: config.scanScope ?? DEFAULT_SCAN_SCOPE,
14
+ reasonMode: config.reasonMode ?? DEFAULT_REASON_MODE
15
+ });
16
+ const normalizeAndroidConfig = androidConfig => {
17
+ if (!androidConfig.suspiciousAppDetectionConfig) {
18
+ return androidConfig;
19
+ }
20
+ return {
21
+ ...androidConfig,
22
+ suspiciousAppDetectionConfig: withDetectionDefaults(androidConfig.suspiciousAppDetectionConfig)
23
+ };
24
+ };
25
+ exports.normalizeAndroidConfig = normalizeAndroidConfig;
26
+ const withDefaults = options => ({
27
+ ...options,
28
+ androidConfig: options.androidConfig ? normalizeAndroidConfig(options.androidConfig) : undefined
29
+ });
30
+ exports.withDefaults = withDefaults;
31
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["DEFAULT_SCAN_SCOPE","scopeType","DEFAULT_REASON_MODE","withDetectionDefaults","config","scanScope","reasonMode","normalizeAndroidConfig","androidConfig","suspiciousAppDetectionConfig","exports","withDefaults","options","undefined"],"sourceRoot":"../../../src","sources":["utils/config.ts"],"mappings":";;;;;;AAQA,MAAMA,kBAA6B,GAAG;EACpCC,SAAS,EAAE;AACb,CAAC;AAED,MAAMC,mBAA+B,GAAG,oBAAoB;AAE5D,MAAMC,qBAAqB,GACzBC,MAAoC,KACF;EAClC,GAAGA,MAAM;EACTC,SAAS,EAAED,MAAM,CAACC,SAAS,IAAIL,kBAAkB;EACjDM,UAAU,EAAEF,MAAM,CAACE,UAAU,IAAIJ;AACnC,CAAC,CAAC;AAEK,MAAMK,sBAAsB,GACjCC,aAAkC,IACV;EACxB,IAAI,CAACA,aAAa,CAACC,4BAA4B,EAAE;IAC/C,OAAOD,aAAa;EACtB;EACA,OAAO;IACL,GAAGA,aAAa;IAChBC,4BAA4B,EAAEN,qBAAqB,CACjDK,aAAa,CAACC,4BAChB;EACF,CAAC;AACH,CAAC;AAACC,OAAA,CAAAH,sBAAA,GAAAA,sBAAA;AAEK,MAAMI,YAAY,GAAIC,OAAqB,KAAoB;EACpE,GAAGA,OAAO;EACVJ,aAAa,EAAEI,OAAO,CAACJ,aAAa,GAChCD,sBAAsB,CAACK,OAAO,CAACJ,aAAa,CAAC,GAC7CK;AACN,CAAC,CAAC;AAACH,OAAA,CAAAC,YAAA,GAAAA,YAAA","ignoreList":[]}
@@ -20,7 +20,7 @@ const toSuspiciousAppInfo = base64Value => {
20
20
  const packageInfo = data.packageInfo;
21
21
  return {
22
22
  packageInfo,
23
- reason: data.reason,
23
+ reasons: data.reasons,
24
24
  permissions: data.permissions
25
25
  };
26
26
  };
@@ -1 +1 @@
1
- {"version":3,"names":["_buffer","require","parseMalwareData","data","Promise","resolve","reject","map","entry","toSuspiciousAppInfo","error","exports","base64Value","JSON","parse","Buffer","from","toString","packageInfo","reason","permissions"],"sourceRoot":"../../../src","sources":["utils/malware.ts"],"mappings":";;;;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AAEO,MAAMC,gBAAgB,GAAG,MAC9BC,IAAc,IACmB;EACjC,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;IACtC,IAAI;MACFD,OAAO,CAACF,IAAI,CAACI,GAAG,CAAEC,KAAK,IAAKC,mBAAmB,CAACD,KAAK,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,OAAOE,KAAU,EAAE;MACnBJ,MAAM,CAAE,iCAAgCI,KAAM,EAAC,CAAC;IAClD;EACF,CAAC,CAAC;AACJ,CAAC;AAACC,OAAA,CAAAT,gBAAA,GAAAA,gBAAA;AAEK,MAAMO,mBAAmB,GAAIG,WAAmB,IAAwB;EAC7E,MAAMT,IAAI,GAAGU,IAAI,CAACC,KAAK,CAACC,cAAM,CAACC,IAAI,CAACJ,WAAW,EAAE,QAAQ,CAAC,CAACK,QAAQ,CAAC,MAAM,CAAC,CAAC;EAC5E,MAAMC,WAAW,GAAGf,IAAI,CAACe,WAA0B;EACnD,OAAO;IACLA,WAAW;IACXC,MAAM,EAAEhB,IAAI,CAACgB,MAAM;IACnBC,WAAW,EAAEjB,IAAI,CAACiB;EACpB,CAAC;AACH,CAAC;AAACT,OAAA,CAAAF,mBAAA,GAAAA,mBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_buffer","require","parseMalwareData","data","Promise","resolve","reject","map","entry","toSuspiciousAppInfo","error","exports","base64Value","JSON","parse","Buffer","from","toString","packageInfo","reasons","permissions"],"sourceRoot":"../../../src","sources":["utils/malware.ts"],"mappings":";;;;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AAEO,MAAMC,gBAAgB,GAAG,MAC9BC,IAAc,IACmB;EACjC,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;IACtC,IAAI;MACFD,OAAO,CAACF,IAAI,CAACI,GAAG,CAAEC,KAAK,IAAKC,mBAAmB,CAACD,KAAK,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,OAAOE,KAAU,EAAE;MACnBJ,MAAM,CAAE,iCAAgCI,KAAM,EAAC,CAAC;IAClD;EACF,CAAC,CAAC;AACJ,CAAC;AAACC,OAAA,CAAAT,gBAAA,GAAAA,gBAAA;AAEK,MAAMO,mBAAmB,GAAIG,WAAmB,IAAwB;EAC7E,MAAMT,IAAI,GAAGU,IAAI,CAACC,KAAK,CAACC,cAAM,CAACC,IAAI,CAACJ,WAAW,EAAE,QAAQ,CAAC,CAACK,QAAQ,CAAC,MAAM,CAAC,CAAC;EAC5E,MAAMC,WAAW,GAAGf,IAAI,CAACe,WAA0B;EACnD,OAAO;IACLA,WAAW;IACXC,OAAO,EAAEhB,IAAI,CAACgB,OAAO;IACrBC,WAAW,EAAEjB,IAAI,CAACiB;EACpB,CAAC;AACH,CAAC;AAACT,OAAA,CAAAF,mBAAA,GAAAA,mBAAA","ignoreList":[]}
@@ -1,7 +1,8 @@
1
1
  import { Platform } from 'react-native';
2
2
  import { FreeraspReactNative } from '../nativeModules';
3
+ import { withDefaults } from '../../utils/config';
3
4
  export const talsecStart = async options => {
4
- return FreeraspReactNative.talsecStart(options);
5
+ return FreeraspReactNative.talsecStart(withDefaults(options));
5
6
  };
6
7
  export const addToWhitelist = async packageName => {
7
8
  if (Platform.OS === 'ios') {
@@ -1 +1 @@
1
- {"version":3,"names":["Platform","FreeraspReactNative","talsecStart","options","addToWhitelist","packageName","OS","Promise","reject","blockScreenCapture","enable","isScreenCaptureBlocked","storeExternalId","data","removeExternalId","getAppIcon","onInvalidCallback","removeListenerForEvent","channel"],"sourceRoot":"../../../../src","sources":["api/methods/native.ts"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,cAAc;AACvC,SAASC,mBAAmB,QAAQ,kBAAkB;AAGtD,OAAO,MAAMC,WAAW,GAAG,MAAOC,OAAqB,IAAsB;EAC3E,OAAOF,mBAAmB,CAACC,WAAW,CAACC,OAAO,CAAC;AACjD,CAAC;AAED,OAAO,MAAMC,cAAc,GAAG,MAAOC,WAAmB,IAAuB;EAC7E,IAAIL,QAAQ,CAACM,EAAE,KAAK,KAAK,EAAE;IACzB,OAAOC,OAAO,CAACC,MAAM,CAAC,wCAAwC,CAAC;EACjE;EACA,OAAOP,mBAAmB,CAACG,cAAc,CAACC,WAAW,CAAC;AACxD,CAAC;AAED,OAAO,MAAMI,kBAAkB,GAAIC,MAAe,IAAsB;EACtE,OAAOT,mBAAmB,CAACQ,kBAAkB,CAACC,MAAM,CAAC;AACvD,CAAC;AAED,OAAO,MAAMC,sBAAsB,GAAGA,CAAA,KAAwB;EAC5D,OAAOV,mBAAmB,CAACU,sBAAsB,CAAC,CAAC;AACrD,CAAC;AAED,OAAO,MAAMC,eAAe,GAAIC,IAAY,IAAsB;EAChE,OAAOZ,mBAAmB,CAACW,eAAe,CAACC,IAAI,CAAC;AAClD,CAAC;AAED,OAAO,MAAMC,gBAAgB,GAAGA,CAAA,KAAuB;EACrD,OAAOb,mBAAmB,CAACa,gBAAgB,CAAC,CAAC;AAC/C,CAAC;AAED,OAAO,MAAMC,UAAU,GAAIV,WAAmB,IAAsB;EAClE,IAAIL,QAAQ,CAACM,EAAE,KAAK,KAAK,EAAE;IACzB,OAAOC,OAAO,CAACC,MAAM,CACnB,+DACF,CAAC;EACH;EACA,OAAOP,mBAAmB,CAACc,UAAU,CAACV,WAAW,CAAC;AACpD,CAAC;AAED,OAAO,MAAMW,iBAAiB,GAAGA,CAAA,KAAY;EAC3Cf,mBAAmB,CAACe,iBAAiB,CAAC,CAAC;AACzC,CAAC;AAED,OAAO,MAAMC,sBAAsB,GAAIC,OAAe,IAAsB;EAC1E,OAAOjB,mBAAmB,CAACgB,sBAAsB,CAACC,OAAO,CAAC;AAC5D,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Platform","FreeraspReactNative","withDefaults","talsecStart","options","addToWhitelist","packageName","OS","Promise","reject","blockScreenCapture","enable","isScreenCaptureBlocked","storeExternalId","data","removeExternalId","getAppIcon","onInvalidCallback","removeListenerForEvent","channel"],"sourceRoot":"../../../../src","sources":["api/methods/native.ts"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,cAAc;AACvC,SAASC,mBAAmB,QAAQ,kBAAkB;AAEtD,SAASC,YAAY,QAAQ,oBAAoB;AAEjD,OAAO,MAAMC,WAAW,GAAG,MAAOC,OAAqB,IAAsB;EAC3E,OAAOH,mBAAmB,CAACE,WAAW,CAACD,YAAY,CAACE,OAAO,CAAC,CAAC;AAC/D,CAAC;AAED,OAAO,MAAMC,cAAc,GAAG,MAAOC,WAAmB,IAAuB;EAC7E,IAAIN,QAAQ,CAACO,EAAE,KAAK,KAAK,EAAE;IACzB,OAAOC,OAAO,CAACC,MAAM,CAAC,wCAAwC,CAAC;EACjE;EACA,OAAOR,mBAAmB,CAACI,cAAc,CAACC,WAAW,CAAC;AACxD,CAAC;AAED,OAAO,MAAMI,kBAAkB,GAAIC,MAAe,IAAsB;EACtE,OAAOV,mBAAmB,CAACS,kBAAkB,CAACC,MAAM,CAAC;AACvD,CAAC;AAED,OAAO,MAAMC,sBAAsB,GAAGA,CAAA,KAAwB;EAC5D,OAAOX,mBAAmB,CAACW,sBAAsB,CAAC,CAAC;AACrD,CAAC;AAED,OAAO,MAAMC,eAAe,GAAIC,IAAY,IAAsB;EAChE,OAAOb,mBAAmB,CAACY,eAAe,CAACC,IAAI,CAAC;AAClD,CAAC;AAED,OAAO,MAAMC,gBAAgB,GAAGA,CAAA,KAAuB;EACrD,OAAOd,mBAAmB,CAACc,gBAAgB,CAAC,CAAC;AAC/C,CAAC;AAED,OAAO,MAAMC,UAAU,GAAIV,WAAmB,IAAsB;EAClE,IAAIN,QAAQ,CAACO,EAAE,KAAK,KAAK,EAAE;IACzB,OAAOC,OAAO,CAACC,MAAM,CACnB,+DACF,CAAC;EACH;EACA,OAAOR,mBAAmB,CAACe,UAAU,CAACV,WAAW,CAAC;AACpD,CAAC;AAED,OAAO,MAAMW,iBAAiB,GAAGA,CAAA,KAAY;EAC3ChB,mBAAmB,CAACgB,iBAAiB,CAAC,CAAC;AACzC,CAAC;AAED,OAAO,MAAMC,sBAAsB,GAAIC,OAAe,IAAsB;EAC1E,OAAOlB,mBAAmB,CAACiB,sBAAsB,CAACC,OAAO,CAAC;AAC5D,CAAC","ignoreList":[]}
@@ -0,0 +1,23 @@
1
+ const DEFAULT_SCAN_SCOPE = {
2
+ scopeType: 'SIDELOADED_ONLY'
3
+ };
4
+ const DEFAULT_REASON_MODE = 'HIGHEST_CONFIDENCE';
5
+ const withDetectionDefaults = config => ({
6
+ ...config,
7
+ scanScope: config.scanScope ?? DEFAULT_SCAN_SCOPE,
8
+ reasonMode: config.reasonMode ?? DEFAULT_REASON_MODE
9
+ });
10
+ export const normalizeAndroidConfig = androidConfig => {
11
+ if (!androidConfig.suspiciousAppDetectionConfig) {
12
+ return androidConfig;
13
+ }
14
+ return {
15
+ ...androidConfig,
16
+ suspiciousAppDetectionConfig: withDetectionDefaults(androidConfig.suspiciousAppDetectionConfig)
17
+ };
18
+ };
19
+ export const withDefaults = options => ({
20
+ ...options,
21
+ androidConfig: options.androidConfig ? normalizeAndroidConfig(options.androidConfig) : undefined
22
+ });
23
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["DEFAULT_SCAN_SCOPE","scopeType","DEFAULT_REASON_MODE","withDetectionDefaults","config","scanScope","reasonMode","normalizeAndroidConfig","androidConfig","suspiciousAppDetectionConfig","withDefaults","options","undefined"],"sourceRoot":"../../../src","sources":["utils/config.ts"],"mappings":"AAQA,MAAMA,kBAA6B,GAAG;EACpCC,SAAS,EAAE;AACb,CAAC;AAED,MAAMC,mBAA+B,GAAG,oBAAoB;AAE5D,MAAMC,qBAAqB,GACzBC,MAAoC,KACF;EAClC,GAAGA,MAAM;EACTC,SAAS,EAAED,MAAM,CAACC,SAAS,IAAIL,kBAAkB;EACjDM,UAAU,EAAEF,MAAM,CAACE,UAAU,IAAIJ;AACnC,CAAC,CAAC;AAEF,OAAO,MAAMK,sBAAsB,GACjCC,aAAkC,IACV;EACxB,IAAI,CAACA,aAAa,CAACC,4BAA4B,EAAE;IAC/C,OAAOD,aAAa;EACtB;EACA,OAAO;IACL,GAAGA,aAAa;IAChBC,4BAA4B,EAAEN,qBAAqB,CACjDK,aAAa,CAACC,4BAChB;EACF,CAAC;AACH,CAAC;AAED,OAAO,MAAMC,YAAY,GAAIC,OAAqB,KAAoB;EACpE,GAAGA,OAAO;EACVH,aAAa,EAAEG,OAAO,CAACH,aAAa,GAChCD,sBAAsB,CAACI,OAAO,CAACH,aAAa,CAAC,GAC7CI;AACN,CAAC,CAAC","ignoreList":[]}
@@ -13,7 +13,7 @@ export const toSuspiciousAppInfo = base64Value => {
13
13
  const packageInfo = data.packageInfo;
14
14
  return {
15
15
  packageInfo,
16
- reason: data.reason,
16
+ reasons: data.reasons,
17
17
  permissions: data.permissions
18
18
  };
19
19
  };
@@ -1 +1 @@
1
- {"version":3,"names":["Buffer","parseMalwareData","data","Promise","resolve","reject","map","entry","toSuspiciousAppInfo","error","base64Value","JSON","parse","from","toString","packageInfo","reason","permissions"],"sourceRoot":"../../../src","sources":["utils/malware.ts"],"mappings":"AACA,SAASA,MAAM,QAAQ,QAAQ;AAE/B,OAAO,MAAMC,gBAAgB,GAAG,MAC9BC,IAAc,IACmB;EACjC,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;IACtC,IAAI;MACFD,OAAO,CAACF,IAAI,CAACI,GAAG,CAAEC,KAAK,IAAKC,mBAAmB,CAACD,KAAK,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,OAAOE,KAAU,EAAE;MACnBJ,MAAM,CAAE,iCAAgCI,KAAM,EAAC,CAAC;IAClD;EACF,CAAC,CAAC;AACJ,CAAC;AAED,OAAO,MAAMD,mBAAmB,GAAIE,WAAmB,IAAwB;EAC7E,MAAMR,IAAI,GAAGS,IAAI,CAACC,KAAK,CAACZ,MAAM,CAACa,IAAI,CAACH,WAAW,EAAE,QAAQ,CAAC,CAACI,QAAQ,CAAC,MAAM,CAAC,CAAC;EAC5E,MAAMC,WAAW,GAAGb,IAAI,CAACa,WAA0B;EACnD,OAAO;IACLA,WAAW;IACXC,MAAM,EAAEd,IAAI,CAACc,MAAM;IACnBC,WAAW,EAAEf,IAAI,CAACe;EACpB,CAAC;AACH,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Buffer","parseMalwareData","data","Promise","resolve","reject","map","entry","toSuspiciousAppInfo","error","base64Value","JSON","parse","from","toString","packageInfo","reasons","permissions"],"sourceRoot":"../../../src","sources":["utils/malware.ts"],"mappings":"AACA,SAASA,MAAM,QAAQ,QAAQ;AAE/B,OAAO,MAAMC,gBAAgB,GAAG,MAC9BC,IAAc,IACmB;EACjC,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;IACtC,IAAI;MACFD,OAAO,CAACF,IAAI,CAACI,GAAG,CAAEC,KAAK,IAAKC,mBAAmB,CAACD,KAAK,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,OAAOE,KAAU,EAAE;MACnBJ,MAAM,CAAE,iCAAgCI,KAAM,EAAC,CAAC;IAClD;EACF,CAAC,CAAC;AACJ,CAAC;AAED,OAAO,MAAMD,mBAAmB,GAAIE,WAAmB,IAAwB;EAC7E,MAAMR,IAAI,GAAGS,IAAI,CAACC,KAAK,CAACZ,MAAM,CAACa,IAAI,CAACH,WAAW,EAAE,QAAQ,CAAC,CAACI,QAAQ,CAAC,MAAM,CAAC,CAAC;EAC5E,MAAMC,WAAW,GAAGb,IAAI,CAACa,WAA0B;EACnD,OAAO;IACLA,WAAW;IACXC,OAAO,EAAEd,IAAI,CAACc,OAAO;IACrBC,WAAW,EAAEf,IAAI,CAACe;EACpB,CAAC;AACH,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../../../../src/api/methods/native.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,eAAO,MAAM,WAAW,YAAmB,YAAY,KAAG,QAAQ,MAAM,CAEvE,CAAC;AAEF,eAAO,MAAM,cAAc,gBAAuB,MAAM,KAAG,QAAQ,OAAO,CAKzE,CAAC;AAEF,eAAO,MAAM,kBAAkB,WAAY,OAAO,KAAG,QAAQ,MAAM,CAElE,CAAC;AAEF,eAAO,MAAM,sBAAsB,QAAO,QAAQ,OAAO,CAExD,CAAC;AAEF,eAAO,MAAM,eAAe,SAAU,MAAM,KAAG,QAAQ,MAAM,CAE5D,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAO,QAAQ,MAAM,CAEjD,CAAC;AAEF,eAAO,MAAM,UAAU,gBAAiB,MAAM,KAAG,QAAQ,MAAM,CAO9D,CAAC;AAEF,eAAO,MAAM,iBAAiB,QAAO,IAEpC,CAAC;AAEF,eAAO,MAAM,sBAAsB,YAAa,MAAM,KAAG,QAAQ,MAAM,CAEtE,CAAC"}
1
+ {"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../../../../src/api/methods/native.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD,eAAO,MAAM,WAAW,YAAmB,YAAY,KAAG,QAAQ,MAAM,CAEvE,CAAC;AAEF,eAAO,MAAM,cAAc,gBAAuB,MAAM,KAAG,QAAQ,OAAO,CAKzE,CAAC;AAEF,eAAO,MAAM,kBAAkB,WAAY,OAAO,KAAG,QAAQ,MAAM,CAElE,CAAC;AAEF,eAAO,MAAM,sBAAsB,QAAO,QAAQ,OAAO,CAExD,CAAC;AAEF,eAAO,MAAM,eAAe,SAAU,MAAM,KAAG,QAAQ,MAAM,CAE5D,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAO,QAAQ,MAAM,CAEjD,CAAC;AAEF,eAAO,MAAM,UAAU,gBAAiB,MAAM,KAAG,QAAQ,MAAM,CAO9D,CAAC;AAEF,eAAO,MAAM,iBAAiB,QAAO,IAEpC,CAAC;AAEF,eAAO,MAAM,sBAAsB,YAAa,MAAM,KAAG,QAAQ,MAAM,CAEtE,CAAC"}
@@ -5,25 +5,33 @@ export type TalsecConfig = {
5
5
  isProd?: boolean;
6
6
  killOnBypass?: boolean;
7
7
  };
8
+ export type ScopeType = 'SIDELOADED_ONLY' | 'SIDELOADED_AND_SYSTEM_EXCLUDE_OEM' | 'SIDELOADED_AND_OEM' | 'SIDELOADED_AND_SYSTEM_AND_OEM' | 'ALL';
9
+ export type ReasonMode = 'ALL' | 'HIGHEST_CONFIDENCE';
10
+ export type ScanScope = {
11
+ scopeType: ScopeType;
12
+ trustedInstallSources?: string[];
13
+ };
14
+ export type SuspiciousAppDetectionConfig = {
15
+ packageNames?: string[];
16
+ hashes?: string[];
17
+ requestedPermissions?: string[][];
18
+ grantedPermissions?: string[][];
19
+ scanScope: ScanScope;
20
+ reasonMode: ReasonMode;
21
+ };
8
22
  export type TalsecAndroidConfig = {
9
23
  packageName: string;
10
24
  certificateHashes: string[];
11
25
  supportedAlternativeStores?: string[];
12
- malwareConfig?: TalsecMalwareConfig;
26
+ suspiciousAppDetectionConfig?: SuspiciousAppDetectionConfig;
13
27
  };
14
28
  export type TalsecIosConfig = {
15
29
  appBundleId: string;
16
30
  appTeamId: string;
17
31
  };
18
- export type TalsecMalwareConfig = {
19
- blacklistedHashes?: string[];
20
- blacklistedPackageNames?: string[];
21
- suspiciousPermissions?: string[][];
22
- whitelistedInstallationSources?: string[];
23
- };
24
32
  export type SuspiciousAppInfo = {
25
33
  packageInfo: PackageInfo;
26
- reason: string;
34
+ reasons: string[];
27
35
  permissions?: string[];
28
36
  };
29
37
  export type PackageInfo = {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/types/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG;IACzB,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,0BAA0B,CAAC,EAAE,MAAM,EAAE,CAAC;IACtC,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;IACnC,qBAAqB,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;IACnC,8BAA8B,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,GAAG,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,GAAG,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,GAAG,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,GAAG,CAAC;IACrB,0BAA0B,CAAC,EAAE,MAAM,GAAG,CAAC;IACvC,iBAAiB,CAAC,EAAE,MAAM,GAAG,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC;IACtB,OAAO,CAAC,EAAE,CAAC,cAAc,EAAE,iBAAiB,EAAE,KAAK,GAAG,CAAC;IACvD,UAAU,CAAC,EAAE,MAAM,GAAG,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,GAAG,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,GAAG,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,GAAG,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,GAAG,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,GAAG,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAA;CAAE,CAAC;AAE3E,MAAM,MAAM,8BAA8B,GAAG;IAC3C,iBAAiB,CAAC,EAAE,MAAM,GAAG,CAAC;CAC/B,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/types/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { TalsecAndroidConfig, TalsecConfig } from '../types/types';
2
+ export declare const normalizeAndroidConfig: (androidConfig: TalsecAndroidConfig) => TalsecAndroidConfig;
3
+ export declare const withDefaults: (options: TalsecConfig) => TalsecConfig;
4
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,mBAAmB,EACnB,YAAY,EACb,MAAM,gBAAgB,CAAC;AAgBxB,eAAO,MAAM,sBAAsB,kBAClB,mBAAmB,KACjC,mBAUF,CAAC;AAEF,eAAO,MAAM,YAAY,YAAa,YAAY,KAAG,YAKnD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "freerasp-react-native",
3
- "version": "4.5.2",
3
+ "version": "5.0.0",
4
4
  "description": "React Native plugin for improving app security and threat monitoring on Android and iOS mobile devices.",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -1,9 +1,10 @@
1
1
  import { Platform } from 'react-native';
2
2
  import { FreeraspReactNative } from '../nativeModules';
3
3
  import type { TalsecConfig } from '../../types/types';
4
+ import { withDefaults } from '../../utils/config';
4
5
 
5
6
  export const talsecStart = async (options: TalsecConfig): Promise<string> => {
6
- return FreeraspReactNative.talsecStart(options);
7
+ return FreeraspReactNative.talsecStart(withDefaults(options));
7
8
  };
8
9
 
9
10
  export const addToWhitelist = async (packageName: string): Promise<boolean> => {
@@ -6,11 +6,34 @@ export type TalsecConfig = {
6
6
  killOnBypass?: boolean;
7
7
  };
8
8
 
9
+ export type ScopeType =
10
+ | 'SIDELOADED_ONLY'
11
+ | 'SIDELOADED_AND_SYSTEM_EXCLUDE_OEM'
12
+ | 'SIDELOADED_AND_OEM'
13
+ | 'SIDELOADED_AND_SYSTEM_AND_OEM'
14
+ | 'ALL';
15
+
16
+ export type ReasonMode = 'ALL' | 'HIGHEST_CONFIDENCE';
17
+
18
+ export type ScanScope = {
19
+ scopeType: ScopeType;
20
+ trustedInstallSources?: string[];
21
+ };
22
+
23
+ export type SuspiciousAppDetectionConfig = {
24
+ packageNames?: string[];
25
+ hashes?: string[];
26
+ requestedPermissions?: string[][];
27
+ grantedPermissions?: string[][];
28
+ scanScope: ScanScope;
29
+ reasonMode: ReasonMode;
30
+ };
31
+
9
32
  export type TalsecAndroidConfig = {
10
33
  packageName: string;
11
34
  certificateHashes: string[];
12
35
  supportedAlternativeStores?: string[];
13
- malwareConfig?: TalsecMalwareConfig;
36
+ suspiciousAppDetectionConfig?: SuspiciousAppDetectionConfig;
14
37
  };
15
38
 
16
39
  export type TalsecIosConfig = {
@@ -18,16 +41,9 @@ export type TalsecIosConfig = {
18
41
  appTeamId: string;
19
42
  };
20
43
 
21
- export type TalsecMalwareConfig = {
22
- blacklistedHashes?: string[];
23
- blacklistedPackageNames?: string[];
24
- suspiciousPermissions?: string[][];
25
- whitelistedInstallationSources?: string[];
26
- };
27
-
28
44
  export type SuspiciousAppInfo = {
29
45
  packageInfo: PackageInfo;
30
- reason: string;
46
+ reasons: string[];
31
47
  permissions?: string[];
32
48
  };
33
49
 
@@ -0,0 +1,42 @@
1
+ import type {
2
+ ReasonMode,
3
+ ScanScope,
4
+ SuspiciousAppDetectionConfig,
5
+ TalsecAndroidConfig,
6
+ TalsecConfig,
7
+ } from '../types/types';
8
+
9
+ const DEFAULT_SCAN_SCOPE: ScanScope = {
10
+ scopeType: 'SIDELOADED_ONLY',
11
+ };
12
+
13
+ const DEFAULT_REASON_MODE: ReasonMode = 'HIGHEST_CONFIDENCE';
14
+
15
+ const withDetectionDefaults = (
16
+ config: SuspiciousAppDetectionConfig
17
+ ): SuspiciousAppDetectionConfig => ({
18
+ ...config,
19
+ scanScope: config.scanScope ?? DEFAULT_SCAN_SCOPE,
20
+ reasonMode: config.reasonMode ?? DEFAULT_REASON_MODE,
21
+ });
22
+
23
+ export const normalizeAndroidConfig = (
24
+ androidConfig: TalsecAndroidConfig
25
+ ): TalsecAndroidConfig => {
26
+ if (!androidConfig.suspiciousAppDetectionConfig) {
27
+ return androidConfig;
28
+ }
29
+ return {
30
+ ...androidConfig,
31
+ suspiciousAppDetectionConfig: withDetectionDefaults(
32
+ androidConfig.suspiciousAppDetectionConfig
33
+ ),
34
+ };
35
+ };
36
+
37
+ export const withDefaults = (options: TalsecConfig): TalsecConfig => ({
38
+ ...options,
39
+ androidConfig: options.androidConfig
40
+ ? normalizeAndroidConfig(options.androidConfig)
41
+ : undefined,
42
+ });
@@ -18,7 +18,7 @@ export const toSuspiciousAppInfo = (base64Value: string): SuspiciousAppInfo => {
18
18
  const packageInfo = data.packageInfo as PackageInfo;
19
19
  return {
20
20
  packageInfo,
21
- reason: data.reason,
21
+ reasons: data.reasons,
22
22
  permissions: data.permissions,
23
23
  } as SuspiciousAppInfo;
24
24
  };