capacitor-freerasp 2.2.2 → 2.4.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 +105 -0
- package/CapacitorFreerasp.podspec +5 -1
- package/README.md +8 -8
- package/android/build.gradle +3 -3
- package/android/src/main/java/com/aheaditec/freerasp/FreeraspPlugin.kt +106 -33
- package/android/src/main/java/com/aheaditec/freerasp/PluginThreatHandler.kt +121 -0
- package/android/src/main/java/com/aheaditec/freerasp/ScreenProtector.kt +24 -2
- package/android/src/main/java/com/aheaditec/freerasp/dispatchers/ExecutionStateDispatcher.kt +38 -0
- package/android/src/main/java/com/aheaditec/freerasp/dispatchers/ThreatDispatcher.kt +62 -0
- package/android/src/main/java/com/aheaditec/freerasp/events/BaseRaspEvent.kt +7 -0
- package/android/src/main/java/com/aheaditec/freerasp/events/RaspExecutionStateEvent.kt +22 -0
- package/android/src/main/java/com/aheaditec/freerasp/events/ThreatEvent.kt +71 -0
- package/android/src/main/java/com/aheaditec/freerasp/interfaces/PluginExecutionStateListener.kt +7 -0
- package/android/src/main/java/com/aheaditec/freerasp/interfaces/PluginThreatListener.kt +9 -0
- package/android/src/main/java/com/aheaditec/freerasp/models/CapSuspiciousAppInfo.kt +1 -0
- package/android/src/main/java/com/aheaditec/freerasp/utils/Extensions.kt +1 -0
- package/android/src/main/java/com/aheaditec/freerasp/utils/RandomGenerator.kt +24 -0
- package/android/src/main/java/com/aheaditec/freerasp/utils/Utils.kt +3 -5
- package/dist/esm/api/listeners/raspExecutionState.d.ts +3 -0
- package/dist/esm/api/listeners/raspExecutionState.js +40 -0
- package/dist/esm/api/listeners/raspExecutionState.js.map +1 -0
- package/dist/esm/api/listeners/threat.d.ts +3 -0
- package/dist/esm/api/listeners/threat.js +104 -0
- package/dist/esm/api/listeners/threat.js.map +1 -0
- package/dist/esm/api/methods/capacitor.d.ts +4 -0
- package/dist/esm/api/methods/capacitor.js +11 -0
- package/dist/esm/api/methods/capacitor.js.map +1 -0
- package/dist/esm/api/methods/native.d.ts +7 -0
- package/dist/esm/api/methods/native.js +36 -0
- package/dist/esm/api/methods/native.js.map +1 -0
- package/dist/esm/api/nativeModules.d.ts +2 -0
- package/dist/esm/api/nativeModules.js +3 -0
- package/dist/esm/api/nativeModules.js.map +1 -0
- package/dist/esm/channels/raspExecutionState.d.ts +3 -0
- package/dist/esm/channels/raspExecutionState.js +27 -0
- package/dist/esm/channels/raspExecutionState.js.map +1 -0
- package/dist/esm/channels/threat.d.ts +3 -0
- package/dist/esm/channels/threat.js +34 -0
- package/dist/esm/channels/threat.js.map +1 -0
- package/dist/esm/index.d.ts +7 -12
- package/dist/esm/index.js +7 -158
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/models/raspExecutionState.d.ts +6 -0
- package/dist/esm/models/raspExecutionState.js +10 -0
- package/dist/esm/models/raspExecutionState.js.map +1 -0
- package/dist/esm/models/threat.d.ts +27 -0
- package/dist/esm/{definitions.js → models/threat.js} +9 -3
- package/dist/esm/models/threat.js.map +1 -0
- package/dist/esm/{definitions.d.ts → types/types.d.ts} +41 -44
- package/dist/esm/types/types.js +2 -0
- package/dist/esm/types/types.js.map +1 -0
- package/dist/esm/utils/malware.d.ts +3 -0
- package/dist/esm/utils/malware.js +22 -0
- package/dist/esm/utils/malware.js.map +1 -0
- package/dist/esm/utils/utils.d.ts +3 -0
- package/dist/esm/utils/utils.js +12 -0
- package/dist/esm/utils/utils.js.map +1 -0
- package/dist/plugin.cjs.js +197 -76
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +197 -76
- package/dist/plugin.js.map +1 -1
- package/ios/Plugin/FreeraspPlugin.m +3 -0
- package/ios/Plugin/FreeraspPlugin.swift +36 -77
- package/ios/Plugin/Info.plist +1 -1
- package/ios/Plugin/TalsecRuntime.xcframework/_CodeSignature/CodeDirectory +0 -0
- package/ios/Plugin/TalsecRuntime.xcframework/_CodeSignature/CodeResources +100 -298
- package/ios/Plugin/TalsecRuntime.xcframework/_CodeSignature/CodeSignature +0 -0
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Headers/CurlWrapper.h +1 -1
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Headers/TalsecRuntime-Swift.h +7 -2
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Headers/curl.h +380 -281
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Headers/curlver.h +5 -6
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Headers/easy.h +4 -4
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Headers/header.h +1 -1
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Headers/mprintf.h +11 -4
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Headers/multi.h +62 -22
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Headers/options.h +2 -2
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Headers/system.h +76 -164
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Headers/typecheck-gcc.h +947 -0
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Headers/urlapi.h +5 -4
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Headers/websockets.h +17 -3
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Info.plist +0 -0
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Modules/TalsecRuntime.swiftmodule/arm64-apple-ios.abi.json +233 -528
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Modules/TalsecRuntime.swiftmodule/arm64-apple-ios.private.swiftinterface +7 -3
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Modules/TalsecRuntime.swiftmodule/arm64-apple-ios.swiftdoc +0 -0
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Modules/TalsecRuntime.swiftmodule/arm64-apple-ios.swiftinterface +7 -3
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/TalsecRuntime +0 -0
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Headers/CurlWrapper.h +1 -1
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Headers/TalsecRuntime-Swift.h +14 -4
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Headers/curl.h +380 -281
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Headers/curlver.h +5 -6
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Headers/easy.h +4 -4
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Headers/header.h +1 -1
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Headers/mprintf.h +11 -4
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Headers/multi.h +62 -22
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Headers/options.h +2 -2
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Headers/system.h +76 -164
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Headers/typecheck-gcc.h +947 -0
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Headers/urlapi.h +5 -4
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Headers/websockets.h +17 -3
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Info.plist +0 -0
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Modules/TalsecRuntime.swiftmodule/arm64-apple-ios-simulator.abi.json +233 -528
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Modules/TalsecRuntime.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +7 -3
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Modules/TalsecRuntime.swiftmodule/arm64-apple-ios-simulator.swiftdoc +0 -0
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Modules/TalsecRuntime.swiftmodule/arm64-apple-ios-simulator.swiftinterface +7 -3
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Modules/TalsecRuntime.swiftmodule/x86_64-apple-ios-simulator.abi.json +233 -528
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Modules/TalsecRuntime.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface +7 -3
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Modules/TalsecRuntime.swiftmodule/x86_64-apple-ios-simulator.swiftdoc +0 -0
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Modules/TalsecRuntime.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +7 -3
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/TalsecRuntime +0 -0
- package/ios/Plugin/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/_CodeSignature/CodeResources +56 -45
- package/ios/Plugin/dispatchers/ExecutionStateDispatcher.swift +35 -0
- package/ios/Plugin/dispatchers/ThreatDispatcher.swift +36 -0
- package/ios/Plugin/models/RaspExecutionStates.swift +15 -0
- package/ios/Plugin/models/SecurityThreat.swift +40 -0
- package/ios/Plugin/utils/EventIdentifiers.swift +17 -0
- package/ios/Plugin/utils/RandomGenerator.swift +23 -0
- package/ios/Plugin/utils/Utils.swift +32 -0
- package/package.json +15 -10
- package/android/src/main/java/com/aheaditec/freerasp/Threat.kt +0 -58
- package/android/src/main/java/com/aheaditec/freerasp/ThreatHandler.kt +0 -76
- package/dist/esm/definitions.js.map +0 -1
- package/dist/esm/utils.d.ts +0 -2
- package/dist/esm/utils.js +0 -8
- package/dist/esm/utils.js.map +0 -1
- package/ios/Plugin/TalsecRuntime.xcframework/_CodeSignature/CodeRequirements-1 +0 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
package com.aheaditec.freerasp.dispatchers
|
|
2
|
+
|
|
3
|
+
import com.aheaditec.talsec_security.security.api.SuspiciousAppInfo
|
|
4
|
+
import com.aheaditec.freerasp.events.ThreatEvent
|
|
5
|
+
import com.aheaditec.freerasp.interfaces.PluginThreatListener
|
|
6
|
+
|
|
7
|
+
internal class ThreatDispatcher {
|
|
8
|
+
private val threatCache = mutableSetOf<ThreatEvent>()
|
|
9
|
+
private val malwareCache = mutableSetOf<SuspiciousAppInfo>()
|
|
10
|
+
|
|
11
|
+
var listener: PluginThreatListener? = null
|
|
12
|
+
set(value) {
|
|
13
|
+
field = value
|
|
14
|
+
if (value != null) {
|
|
15
|
+
flushCache(value)
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
fun dispatchThreat(event: ThreatEvent) {
|
|
20
|
+
val checkedListener = synchronized(threatCache) {
|
|
21
|
+
val currentListener = listener
|
|
22
|
+
if (currentListener != null) {
|
|
23
|
+
currentListener
|
|
24
|
+
} else {
|
|
25
|
+
threatCache.add(event)
|
|
26
|
+
null
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
checkedListener?.threatDetected(event)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
fun dispatchMalware(apps: MutableList<SuspiciousAppInfo>) {
|
|
33
|
+
val checkedListener = synchronized(malwareCache) {
|
|
34
|
+
val currentListener = listener
|
|
35
|
+
if (currentListener != null) {
|
|
36
|
+
currentListener
|
|
37
|
+
} else {
|
|
38
|
+
malwareCache.addAll(apps)
|
|
39
|
+
null
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
checkedListener?.malwareDetected(apps)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
private fun flushCache(registeredListener: PluginThreatListener) {
|
|
46
|
+
val threats = synchronized(threatCache) {
|
|
47
|
+
val snapshot = threatCache.toSet()
|
|
48
|
+
threatCache.clear()
|
|
49
|
+
snapshot
|
|
50
|
+
}
|
|
51
|
+
threats.forEach { registeredListener.threatDetected(it) }
|
|
52
|
+
|
|
53
|
+
val malware = synchronized(malwareCache) {
|
|
54
|
+
val snapshot = malwareCache.toMutableList()
|
|
55
|
+
malwareCache.clear()
|
|
56
|
+
snapshot
|
|
57
|
+
}
|
|
58
|
+
if (malware.isNotEmpty()) {
|
|
59
|
+
registeredListener.malwareDetected(malware)
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
package com.aheaditec.freerasp.events
|
|
2
|
+
|
|
3
|
+
import com.aheaditec.freerasp.utils.RandomGenerator
|
|
4
|
+
import org.json.JSONArray
|
|
5
|
+
|
|
6
|
+
internal sealed class RaspExecutionStateEvent(override val value: Int) : BaseRaspEvent {
|
|
7
|
+
override val channelName: String get() = CHANNEL_NAME
|
|
8
|
+
override val channelKey: String get() = CHANNEL_KEY
|
|
9
|
+
|
|
10
|
+
object AllChecksFinished : RaspExecutionStateEvent(RandomGenerator.next())
|
|
11
|
+
|
|
12
|
+
companion object {
|
|
13
|
+
internal val CHANNEL_NAME = RandomGenerator.next().toString()
|
|
14
|
+
internal val CHANNEL_KEY = RandomGenerator.next().toString()
|
|
15
|
+
|
|
16
|
+
internal val ALL_EVENTS = JSONArray(
|
|
17
|
+
listOf(
|
|
18
|
+
AllChecksFinished.value
|
|
19
|
+
)
|
|
20
|
+
)
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
package com.aheaditec.freerasp.events
|
|
2
|
+
|
|
3
|
+
import com.aheaditec.freerasp.utils.RandomGenerator
|
|
4
|
+
import org.json.JSONArray
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Sealed class to represent the error codes.
|
|
8
|
+
*
|
|
9
|
+
* Sealed classes are used because of obfuscation - enums classes are not obfuscated well enough.
|
|
10
|
+
*
|
|
11
|
+
* @property value integer value of the error code.
|
|
12
|
+
*/
|
|
13
|
+
internal sealed class ThreatEvent(override val value: Int) : BaseRaspEvent {
|
|
14
|
+
override val channelName: String get() = CHANNEL_NAME
|
|
15
|
+
override val channelKey: String get() = CHANNEL_KEY
|
|
16
|
+
|
|
17
|
+
object AppIntegrity : ThreatEvent(RandomGenerator.next())
|
|
18
|
+
object PrivilegedAccess : ThreatEvent(RandomGenerator.next())
|
|
19
|
+
object Debug : ThreatEvent(RandomGenerator.next())
|
|
20
|
+
object Hooks : ThreatEvent(RandomGenerator.next())
|
|
21
|
+
object Passcode : ThreatEvent(RandomGenerator.next())
|
|
22
|
+
object Simulator : ThreatEvent(RandomGenerator.next())
|
|
23
|
+
object SecureHardwareNotAvailable : ThreatEvent(RandomGenerator.next())
|
|
24
|
+
object DeviceBinding : ThreatEvent(RandomGenerator.next())
|
|
25
|
+
object UnofficialStore : ThreatEvent(RandomGenerator.next())
|
|
26
|
+
object ObfuscationIssues : ThreatEvent(RandomGenerator.next())
|
|
27
|
+
object SystemVPN : ThreatEvent(RandomGenerator.next())
|
|
28
|
+
object DevMode : ThreatEvent(RandomGenerator.next())
|
|
29
|
+
object Malware : ThreatEvent(RandomGenerator.next())
|
|
30
|
+
object ADBEnabled : ThreatEvent(RandomGenerator.next())
|
|
31
|
+
object Screenshot : ThreatEvent(RandomGenerator.next())
|
|
32
|
+
object ScreenRecording : ThreatEvent(RandomGenerator.next())
|
|
33
|
+
object MultiInstance : ThreatEvent(RandomGenerator.next())
|
|
34
|
+
object TimeSpoofing : ThreatEvent(RandomGenerator.next())
|
|
35
|
+
object LocationSpoofing : ThreatEvent(RandomGenerator.next())
|
|
36
|
+
object UnsecureWifi : ThreatEvent(RandomGenerator.next())
|
|
37
|
+
object Automation : ThreatEvent(RandomGenerator.next())
|
|
38
|
+
|
|
39
|
+
companion object {
|
|
40
|
+
|
|
41
|
+
internal val CHANNEL_NAME = RandomGenerator.next().toString()
|
|
42
|
+
internal val CHANNEL_KEY = RandomGenerator.next().toString()
|
|
43
|
+
internal val MALWARE_CHANNEL_KEY = RandomGenerator.next().toString()
|
|
44
|
+
|
|
45
|
+
internal val ALL_EVENTS = JSONArray(
|
|
46
|
+
listOf(
|
|
47
|
+
AppIntegrity,
|
|
48
|
+
PrivilegedAccess,
|
|
49
|
+
Debug,
|
|
50
|
+
Hooks,
|
|
51
|
+
Passcode,
|
|
52
|
+
Simulator,
|
|
53
|
+
SecureHardwareNotAvailable,
|
|
54
|
+
SystemVPN,
|
|
55
|
+
DeviceBinding,
|
|
56
|
+
UnofficialStore,
|
|
57
|
+
ObfuscationIssues,
|
|
58
|
+
DevMode,
|
|
59
|
+
Malware,
|
|
60
|
+
ADBEnabled,
|
|
61
|
+
Screenshot,
|
|
62
|
+
ScreenRecording,
|
|
63
|
+
MultiInstance,
|
|
64
|
+
TimeSpoofing,
|
|
65
|
+
LocationSpoofing,
|
|
66
|
+
UnsecureWifi,
|
|
67
|
+
Automation
|
|
68
|
+
).map { it.value }
|
|
69
|
+
)
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
package com.aheaditec.freerasp.interfaces
|
|
2
|
+
|
|
3
|
+
import com.aheaditec.talsec_security.security.api.SuspiciousAppInfo
|
|
4
|
+
import com.aheaditec.freerasp.events.ThreatEvent
|
|
5
|
+
|
|
6
|
+
internal interface PluginThreatListener {
|
|
7
|
+
fun threatDetected(threatEventType: ThreatEvent)
|
|
8
|
+
fun malwareDetected(suspiciousApps: MutableList<SuspiciousAppInfo>)
|
|
9
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
package com.aheaditec.freerasp.utils
|
|
2
|
+
|
|
3
|
+
import java.security.SecureRandom
|
|
4
|
+
import java.util.concurrent.ConcurrentHashMap
|
|
5
|
+
|
|
6
|
+
internal object RandomGenerator {
|
|
7
|
+
private val secureRandom = SecureRandom()
|
|
8
|
+
|
|
9
|
+
private val generatedNumbers = ConcurrentHashMap.newKeySet<Int>()
|
|
10
|
+
|
|
11
|
+
internal fun next(): Int {
|
|
12
|
+
val min = 10_000_000
|
|
13
|
+
val max = 999_999_999
|
|
14
|
+
val range = (max - min) + 1
|
|
15
|
+
|
|
16
|
+
var nextNumber: Int
|
|
17
|
+
do {
|
|
18
|
+
nextNumber = secureRandom.nextInt(range) + min
|
|
19
|
+
} while (!generatedNumbers.add(nextNumber))
|
|
20
|
+
|
|
21
|
+
return nextNumber
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
}
|
|
@@ -9,6 +9,8 @@ import android.os.Build
|
|
|
9
9
|
import android.util.Base64
|
|
10
10
|
import android.util.Log
|
|
11
11
|
import java.io.ByteArrayOutputStream
|
|
12
|
+
import androidx.core.graphics.createBitmap
|
|
13
|
+
|
|
12
14
|
|
|
13
15
|
internal object Utils {
|
|
14
16
|
|
|
@@ -42,11 +44,7 @@ internal object Utils {
|
|
|
42
44
|
}
|
|
43
45
|
|
|
44
46
|
if (drawable.intrinsicWidth > 0 && drawable.intrinsicHeight > 0) {
|
|
45
|
-
val bitmap =
|
|
46
|
-
drawable.intrinsicWidth,
|
|
47
|
-
drawable.intrinsicHeight,
|
|
48
|
-
Bitmap.Config.ARGB_8888
|
|
49
|
-
)
|
|
47
|
+
val bitmap = createBitmap(drawable.intrinsicWidth, drawable.intrinsicHeight)
|
|
50
48
|
val canvas = Canvas(bitmap)
|
|
51
49
|
drawable.setBounds(0, 0, canvas.width, canvas.height)
|
|
52
50
|
drawable.draw(canvas)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { getRaspExecutionStateChannelData, prepareRaspExecutionStateMapping } from '../../channels/raspExecutionState';
|
|
2
|
+
import { RaspExecutionState } from '../../models/raspExecutionState';
|
|
3
|
+
import { onInvalidCallback } from '../methods/native';
|
|
4
|
+
import { Talsec } from '../nativeModules';
|
|
5
|
+
let eventsListener = null;
|
|
6
|
+
let isInitializing = false;
|
|
7
|
+
export const registerRaspExecutionStateListener = async (config) => {
|
|
8
|
+
if (isInitializing) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
isInitializing = true;
|
|
12
|
+
if (eventsListener) {
|
|
13
|
+
await eventsListener.remove();
|
|
14
|
+
eventsListener = null;
|
|
15
|
+
}
|
|
16
|
+
const [channel, key] = await getRaspExecutionStateChannelData();
|
|
17
|
+
await prepareRaspExecutionStateMapping();
|
|
18
|
+
eventsListener = await Talsec.addListener(channel, async (event) => {
|
|
19
|
+
var _a;
|
|
20
|
+
if (event[key] == undefined) {
|
|
21
|
+
onInvalidCallback();
|
|
22
|
+
}
|
|
23
|
+
switch (event[key]) {
|
|
24
|
+
case RaspExecutionState.AllChecksFinished.value:
|
|
25
|
+
(_a = config.allChecksFinished) === null || _a === void 0 ? void 0 : _a.call(config);
|
|
26
|
+
break;
|
|
27
|
+
default:
|
|
28
|
+
onInvalidCallback();
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
isInitializing = false;
|
|
33
|
+
};
|
|
34
|
+
export const removeRaspExecutionStateListener = async () => {
|
|
35
|
+
if (eventsListener) {
|
|
36
|
+
await eventsListener.remove();
|
|
37
|
+
eventsListener = null;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=raspExecutionState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"raspExecutionState.js","sourceRoot":"","sources":["../../../../src/api/listeners/raspExecutionState.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gCAAgC,EAAE,gCAAgC,EAAE,MAAM,mCAAmC,CAAC;AACvH,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAErE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,IAAI,cAAc,GAAgC,IAAI,CAAC;AACvD,IAAI,cAAc,GAAG,KAAK,CAAC;AAE3B,MAAM,CAAC,MAAM,kCAAkC,GAAG,KAAK,EAAE,MAAsC,EAAiB,EAAE;IAChH,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO;IACT,CAAC;IACD,cAAc,GAAG,IAAI,CAAC;IAEtB,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,cAAc,CAAC,MAAM,EAAE,CAAC;QAC9B,cAAc,GAAG,IAAI,CAAC;IACxB,CAAC;IAED,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,MAAM,gCAAgC,EAAE,CAAC;IAChE,MAAM,gCAAgC,EAAE,CAAC;IAEzC,cAAc,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,KAAU,EAAE,EAAE;;QACtE,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE,CAAC;YAC5B,iBAAiB,EAAE,CAAC;QACtB,CAAC;QACD,QAAQ,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,KAAK,kBAAkB,CAAC,iBAAiB,CAAC,KAAK;gBAC7C,MAAA,MAAM,CAAC,iBAAiB,sDAAI,CAAC;gBAC7B,MAAM;YACR;gBACE,iBAAiB,EAAE,CAAC;gBACpB,MAAM;QACV,CAAC;IACH,CAAC,CAAC,CAAC;IACH,cAAc,GAAG,KAAK,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gCAAgC,GAAG,KAAK,IAAmB,EAAE;IACxE,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,cAAc,CAAC,MAAM,EAAE,CAAC;QAC9B,cAAc,GAAG,IAAI,CAAC;IACxB,CAAC;AACH,CAAC,CAAC","sourcesContent":["import type { PluginListenerHandle } from '@capacitor/core';\n\nimport { getRaspExecutionStateChannelData, prepareRaspExecutionStateMapping } from '../../channels/raspExecutionState';\nimport { RaspExecutionState } from '../../models/raspExecutionState';\nimport type { RaspExecutionStateEventActions } from '../../types/types';\nimport { onInvalidCallback } from '../methods/native';\nimport { Talsec } from '../nativeModules';\n\nlet eventsListener: PluginListenerHandle | null = null;\nlet isInitializing = false;\n\nexport const registerRaspExecutionStateListener = async (config: RaspExecutionStateEventActions): Promise<void> => {\n if (isInitializing) {\n return;\n }\n isInitializing = true;\n\n if (eventsListener) {\n await eventsListener.remove();\n eventsListener = null;\n }\n\n const [channel, key] = await getRaspExecutionStateChannelData();\n await prepareRaspExecutionStateMapping();\n\n eventsListener = await Talsec.addListener(channel, async (event: any) => {\n if (event[key] == undefined) {\n onInvalidCallback();\n }\n switch (event[key]) {\n case RaspExecutionState.AllChecksFinished.value:\n config.allChecksFinished?.();\n break;\n default:\n onInvalidCallback();\n break;\n }\n });\n isInitializing = false;\n};\n\nexport const removeRaspExecutionStateListener = async (): Promise<void> => {\n if (eventsListener) {\n await eventsListener.remove();\n eventsListener = null;\n }\n};\n"]}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { getThreatChannelData, prepareThreatMapping } from '../../channels/threat';
|
|
2
|
+
import { Threat } from '../../models/threat';
|
|
3
|
+
import { parseMalwareData } from '../../utils/malware';
|
|
4
|
+
import { onInvalidCallback } from '../methods/native';
|
|
5
|
+
import { Talsec } from '../nativeModules';
|
|
6
|
+
let eventsListener = null;
|
|
7
|
+
let isInitializing = false;
|
|
8
|
+
export const registerThreatListener = async (config) => {
|
|
9
|
+
if (isInitializing) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
isInitializing = true;
|
|
13
|
+
if (eventsListener) {
|
|
14
|
+
await eventsListener.remove();
|
|
15
|
+
eventsListener = null;
|
|
16
|
+
}
|
|
17
|
+
const [channel, key, malwareKey] = await getThreatChannelData();
|
|
18
|
+
await prepareThreatMapping();
|
|
19
|
+
eventsListener = await Talsec.addListener(channel, async (event) => {
|
|
20
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;
|
|
21
|
+
if (event[key] == undefined) {
|
|
22
|
+
onInvalidCallback();
|
|
23
|
+
}
|
|
24
|
+
switch (event[key]) {
|
|
25
|
+
case Threat.PrivilegedAccess.value:
|
|
26
|
+
(_a = config.privilegedAccess) === null || _a === void 0 ? void 0 : _a.call(config);
|
|
27
|
+
break;
|
|
28
|
+
case Threat.Debug.value:
|
|
29
|
+
(_b = config.debug) === null || _b === void 0 ? void 0 : _b.call(config);
|
|
30
|
+
break;
|
|
31
|
+
case Threat.Simulator.value:
|
|
32
|
+
(_c = config.simulator) === null || _c === void 0 ? void 0 : _c.call(config);
|
|
33
|
+
break;
|
|
34
|
+
case Threat.AppIntegrity.value:
|
|
35
|
+
(_d = config.appIntegrity) === null || _d === void 0 ? void 0 : _d.call(config);
|
|
36
|
+
break;
|
|
37
|
+
case Threat.UnofficialStore.value:
|
|
38
|
+
(_e = config.unofficialStore) === null || _e === void 0 ? void 0 : _e.call(config);
|
|
39
|
+
break;
|
|
40
|
+
case Threat.Hooks.value:
|
|
41
|
+
(_f = config.hooks) === null || _f === void 0 ? void 0 : _f.call(config);
|
|
42
|
+
break;
|
|
43
|
+
case Threat.DeviceBinding.value:
|
|
44
|
+
(_g = config.deviceBinding) === null || _g === void 0 ? void 0 : _g.call(config);
|
|
45
|
+
break;
|
|
46
|
+
case Threat.Passcode.value:
|
|
47
|
+
(_h = config.passcode) === null || _h === void 0 ? void 0 : _h.call(config);
|
|
48
|
+
break;
|
|
49
|
+
case Threat.SecureHardwareNotAvailable.value:
|
|
50
|
+
(_j = config.secureHardwareNotAvailable) === null || _j === void 0 ? void 0 : _j.call(config);
|
|
51
|
+
break;
|
|
52
|
+
case Threat.ObfuscationIssues.value:
|
|
53
|
+
(_k = config.obfuscationIssues) === null || _k === void 0 ? void 0 : _k.call(config);
|
|
54
|
+
break;
|
|
55
|
+
case Threat.DeviceID.value:
|
|
56
|
+
(_l = config.deviceID) === null || _l === void 0 ? void 0 : _l.call(config);
|
|
57
|
+
break;
|
|
58
|
+
case Threat.DevMode.value:
|
|
59
|
+
(_m = config.devMode) === null || _m === void 0 ? void 0 : _m.call(config);
|
|
60
|
+
break;
|
|
61
|
+
case Threat.SystemVPN.value:
|
|
62
|
+
(_o = config.systemVPN) === null || _o === void 0 ? void 0 : _o.call(config);
|
|
63
|
+
break;
|
|
64
|
+
case Threat.Malware.value:
|
|
65
|
+
(_p = config.malware) === null || _p === void 0 ? void 0 : _p.call(config, await parseMalwareData(event[malwareKey]));
|
|
66
|
+
break;
|
|
67
|
+
case Threat.ADBEnabled.value:
|
|
68
|
+
(_q = config.adbEnabled) === null || _q === void 0 ? void 0 : _q.call(config);
|
|
69
|
+
break;
|
|
70
|
+
case Threat.Screenshot.value:
|
|
71
|
+
(_r = config.screenshot) === null || _r === void 0 ? void 0 : _r.call(config);
|
|
72
|
+
break;
|
|
73
|
+
case Threat.ScreenRecording.value:
|
|
74
|
+
(_s = config.screenRecording) === null || _s === void 0 ? void 0 : _s.call(config);
|
|
75
|
+
break;
|
|
76
|
+
case Threat.MultiInstance.value:
|
|
77
|
+
(_t = config.multiInstance) === null || _t === void 0 ? void 0 : _t.call(config);
|
|
78
|
+
break;
|
|
79
|
+
case Threat.TimeSpoofing.value:
|
|
80
|
+
(_u = config.timeSpoofing) === null || _u === void 0 ? void 0 : _u.call(config);
|
|
81
|
+
break;
|
|
82
|
+
case Threat.LocationSpoofing.value:
|
|
83
|
+
(_v = config.locationSpoofing) === null || _v === void 0 ? void 0 : _v.call(config);
|
|
84
|
+
break;
|
|
85
|
+
case Threat.UnsecureWifi.value:
|
|
86
|
+
(_w = config.unsecureWifi) === null || _w === void 0 ? void 0 : _w.call(config);
|
|
87
|
+
break;
|
|
88
|
+
case Threat.Automation.value:
|
|
89
|
+
(_x = config.automation) === null || _x === void 0 ? void 0 : _x.call(config);
|
|
90
|
+
break;
|
|
91
|
+
default:
|
|
92
|
+
onInvalidCallback();
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
isInitializing = false;
|
|
97
|
+
};
|
|
98
|
+
export const removeThreatListener = async () => {
|
|
99
|
+
if (eventsListener) {
|
|
100
|
+
await eventsListener.remove();
|
|
101
|
+
eventsListener = null;
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
//# sourceMappingURL=threat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"threat.js","sourceRoot":"","sources":["../../../../src/api/listeners/threat.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PluginListenerHandle } from '@capacitor/core';\n\nimport { getThreatChannelData, prepareThreatMapping } from '../../channels/threat';\nimport { Threat } from '../../models/threat';\nimport type { ThreatEventActions } from '../../types/types';\nimport { parseMalwareData } from '../../utils/malware';\nimport { onInvalidCallback } from '../methods/native';\nimport { Talsec } from '../nativeModules';\n\nlet eventsListener: PluginListenerHandle | null = null;\nlet isInitializing = false;\n\nexport const registerThreatListener = async (config: ThreatEventActions): Promise<void> => {\n if (isInitializing) {\n return;\n }\n isInitializing = true;\n\n if (eventsListener) {\n await eventsListener.remove();\n eventsListener = null;\n }\n\n const [channel, key, malwareKey] = await getThreatChannelData();\n await prepareThreatMapping();\n\n eventsListener = await Talsec.addListener(channel, async (event: any) => {\n if (event[key] == undefined) {\n onInvalidCallback();\n }\n switch (event[key]) {\n case Threat.PrivilegedAccess.value:\n config.privilegedAccess?.();\n break;\n case Threat.Debug.value:\n config.debug?.();\n break;\n case Threat.Simulator.value:\n config.simulator?.();\n break;\n case Threat.AppIntegrity.value:\n config.appIntegrity?.();\n break;\n case Threat.UnofficialStore.value:\n config.unofficialStore?.();\n break;\n case Threat.Hooks.value:\n config.hooks?.();\n break;\n case Threat.DeviceBinding.value:\n config.deviceBinding?.();\n break;\n case Threat.Passcode.value:\n config.passcode?.();\n break;\n case Threat.SecureHardwareNotAvailable.value:\n config.secureHardwareNotAvailable?.();\n break;\n case Threat.ObfuscationIssues.value:\n config.obfuscationIssues?.();\n break;\n case Threat.DeviceID.value:\n config.deviceID?.();\n break;\n case Threat.DevMode.value:\n config.devMode?.();\n break;\n case Threat.SystemVPN.value:\n config.systemVPN?.();\n break;\n case Threat.Malware.value:\n config.malware?.(await parseMalwareData(event[malwareKey]));\n break;\n case Threat.ADBEnabled.value:\n config.adbEnabled?.();\n break;\n case Threat.Screenshot.value:\n config.screenshot?.();\n break;\n case Threat.ScreenRecording.value:\n config.screenRecording?.();\n break;\n case Threat.MultiInstance.value:\n config.multiInstance?.();\n break;\n case Threat.TimeSpoofing.value:\n config.timeSpoofing?.();\n break;\n case Threat.LocationSpoofing.value:\n config.locationSpoofing?.();\n break;\n case Threat.UnsecureWifi.value:\n config.unsecureWifi?.();\n break;\n case Threat.Automation.value:\n config.automation?.();\n break;\n default:\n onInvalidCallback();\n break;\n }\n });\n isInitializing = false;\n};\n\nexport const removeThreatListener = async (): Promise<void> => {\n if (eventsListener) {\n await eventsListener.remove();\n eventsListener = null;\n }\n};\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { TalsecConfig, ThreatEventActions, RaspExecutionStateEventActions } from '../../types/types';
|
|
2
|
+
export declare const startFreeRASP: (config: TalsecConfig, actions: ThreatEventActions, raspExecutionStateActions?: RaspExecutionStateEventActions) => Promise<{
|
|
3
|
+
started: boolean;
|
|
4
|
+
}>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { registerRaspExecutionStateListener } from '../listeners/raspExecutionState';
|
|
2
|
+
import { registerThreatListener } from '../listeners/threat';
|
|
3
|
+
import { Talsec } from '../nativeModules';
|
|
4
|
+
export const startFreeRASP = async (config, actions, raspExecutionStateActions) => {
|
|
5
|
+
await registerThreatListener(actions);
|
|
6
|
+
if (raspExecutionStateActions) {
|
|
7
|
+
await registerRaspExecutionStateListener(raspExecutionStateActions);
|
|
8
|
+
}
|
|
9
|
+
return Talsec.talsecStart({ config });
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=capacitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capacitor.js","sourceRoot":"","sources":["../../../../src/api/methods/capacitor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kCAAkC,EAAE,MAAM,iCAAiC,CAAC;AACrF,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAChC,MAAoB,EACpB,OAA2B,EAC3B,yBAA0D,EAC3B,EAAE;IACjC,MAAM,sBAAsB,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,yBAAyB,EAAE,CAAC;QAC9B,MAAM,kCAAkC,CAAC,yBAAyB,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;AACxC,CAAC,CAAC","sourcesContent":["import type { TalsecConfig, ThreatEventActions, RaspExecutionStateEventActions } from '../../types/types';\nimport { registerRaspExecutionStateListener } from '../listeners/raspExecutionState';\nimport { registerThreatListener } from '../listeners/threat';\nimport { Talsec } from '../nativeModules';\n\nexport const startFreeRASP = async (\n config: TalsecConfig,\n actions: ThreatEventActions,\n raspExecutionStateActions?: RaspExecutionStateEventActions,\n): Promise<{ started: boolean }> => {\n await registerThreatListener(actions);\n if (raspExecutionStateActions) {\n await registerRaspExecutionStateListener(raspExecutionStateActions);\n }\n return Talsec.talsecStart({ config });\n};\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const addToWhitelist: (packageName: string) => Promise<boolean>;
|
|
2
|
+
export declare const blockScreenCapture: (enable: boolean) => Promise<boolean>;
|
|
3
|
+
export declare const isScreenCaptureBlocked: () => Promise<boolean>;
|
|
4
|
+
export declare const storeExternalId: (data: string) => Promise<boolean>;
|
|
5
|
+
export declare const removeExternalId: () => Promise<boolean>;
|
|
6
|
+
export declare const getAppIcon: (packageName: string) => Promise<string>;
|
|
7
|
+
export declare const onInvalidCallback: () => void;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Capacitor } from '@capacitor/core';
|
|
2
|
+
import { Talsec } from '../nativeModules';
|
|
3
|
+
export const addToWhitelist = async (packageName) => {
|
|
4
|
+
if (Capacitor.getPlatform() === 'ios') {
|
|
5
|
+
return Promise.reject('Malware detection is not available on iOS');
|
|
6
|
+
}
|
|
7
|
+
const { result } = await Talsec.addToWhitelist({ packageName });
|
|
8
|
+
return result;
|
|
9
|
+
};
|
|
10
|
+
export const blockScreenCapture = async (enable) => {
|
|
11
|
+
const { result } = await Talsec.blockScreenCapture({ enable });
|
|
12
|
+
return result;
|
|
13
|
+
};
|
|
14
|
+
export const isScreenCaptureBlocked = async () => {
|
|
15
|
+
const { result } = await Talsec.isScreenCaptureBlocked();
|
|
16
|
+
return result;
|
|
17
|
+
};
|
|
18
|
+
export const storeExternalId = async (data) => {
|
|
19
|
+
const { result } = await Talsec.storeExternalId({ data });
|
|
20
|
+
return result;
|
|
21
|
+
};
|
|
22
|
+
export const removeExternalId = async () => {
|
|
23
|
+
const { result } = await Talsec.removeExternalId();
|
|
24
|
+
return result;
|
|
25
|
+
};
|
|
26
|
+
export const getAppIcon = async (packageName) => {
|
|
27
|
+
if (Capacitor.getPlatform() === 'ios') {
|
|
28
|
+
return Promise.reject('App icon retrieval for Malware detection is not available on iOS');
|
|
29
|
+
}
|
|
30
|
+
const { result } = await Talsec.getAppIcon({ packageName });
|
|
31
|
+
return result;
|
|
32
|
+
};
|
|
33
|
+
export const onInvalidCallback = () => {
|
|
34
|
+
Talsec.onInvalidCallback();
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native.js","sourceRoot":"","sources":["../../../../src/api/methods/native.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,WAAmB,EAAoB,EAAE;IAC5E,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,CAAC;QACtC,OAAO,OAAO,CAAC,MAAM,CAAC,2CAA2C,CAAC,CAAC;IACrE,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IAChE,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAE,MAAe,EAAoB,EAAE;IAC5E,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/D,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,IAAsB,EAAE;IACjE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,EAAE,CAAC;IACzD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,IAAY,EAAoB,EAAE;IACtE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,IAAsB,EAAE;IAC3D,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,EAAE,CAAC;IACnD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,WAAmB,EAAmB,EAAE;IACvE,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,CAAC;QACtC,OAAO,OAAO,CAAC,MAAM,CAAC,kEAAkE,CAAC,CAAC;IAC5F,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IAC5D,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAS,EAAE;IAC1C,MAAM,CAAC,iBAAiB,EAAE,CAAC;AAC7B,CAAC,CAAC","sourcesContent":["import { Capacitor } from '@capacitor/core';\n\nimport { Talsec } from '../nativeModules';\n\nexport const addToWhitelist = async (packageName: string): Promise<boolean> => {\n if (Capacitor.getPlatform() === 'ios') {\n return Promise.reject('Malware detection is not available on iOS');\n }\n const { result } = await Talsec.addToWhitelist({ packageName });\n return result;\n};\n\nexport const blockScreenCapture = async (enable: boolean): Promise<boolean> => {\n const { result } = await Talsec.blockScreenCapture({ enable });\n return result;\n};\n\nexport const isScreenCaptureBlocked = async (): Promise<boolean> => {\n const { result } = await Talsec.isScreenCaptureBlocked();\n return result;\n};\n\nexport const storeExternalId = async (data: string): Promise<boolean> => {\n const { result } = await Talsec.storeExternalId({ data });\n return result;\n};\n\nexport const removeExternalId = async (): Promise<boolean> => {\n const { result } = await Talsec.removeExternalId();\n return result;\n};\n\nexport const getAppIcon = async (packageName: string): Promise<string> => {\n if (Capacitor.getPlatform() === 'ios') {\n return Promise.reject('App icon retrieval for Malware detection is not available on iOS');\n }\n const { result } = await Talsec.getAppIcon({ packageName });\n return result;\n};\n\nexport const onInvalidCallback = (): void => {\n Talsec.onInvalidCallback();\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nativeModules.js","sourceRoot":"","sources":["../../../src/api/nativeModules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAIjD,MAAM,CAAC,MAAM,MAAM,GAAG,cAAc,CAAe,UAAU,EAAE,EAAE,CAAC,CAAC","sourcesContent":["import { registerPlugin } from '@capacitor/core';\n\nimport type { TalsecPlugin } from '../types/types';\n\nexport const Talsec = registerPlugin<TalsecPlugin>('Freerasp', {});\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { onInvalidCallback } from '../api/methods/native';
|
|
2
|
+
import { Talsec } from '../api/nativeModules';
|
|
3
|
+
import { RaspExecutionState } from '../models/raspExecutionState';
|
|
4
|
+
import { getRaspExecutionStateCount, itemsHaveType } from '../utils/utils';
|
|
5
|
+
export const getRaspExecutionStateIdentifiers = async () => {
|
|
6
|
+
const { ids } = await Talsec.getRaspExecutionStateIdentifiers();
|
|
7
|
+
if (ids.length !== getRaspExecutionStateCount() || !itemsHaveType(ids, 'number')) {
|
|
8
|
+
onInvalidCallback();
|
|
9
|
+
}
|
|
10
|
+
return ids;
|
|
11
|
+
};
|
|
12
|
+
export const getRaspExecutionStateChannelData = async () => {
|
|
13
|
+
const dataLength = 2;
|
|
14
|
+
const { ids } = await Talsec.getRaspExecutionStateChannelData();
|
|
15
|
+
if (ids.length !== dataLength || !itemsHaveType(ids, 'string')) {
|
|
16
|
+
onInvalidCallback();
|
|
17
|
+
}
|
|
18
|
+
return ids;
|
|
19
|
+
};
|
|
20
|
+
export const prepareRaspExecutionStateMapping = async () => {
|
|
21
|
+
const newValues = await getRaspExecutionStateIdentifiers();
|
|
22
|
+
const threats = RaspExecutionState.getValues();
|
|
23
|
+
threats.map((threat, index) => {
|
|
24
|
+
threat.value = newValues[index];
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=raspExecutionState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"raspExecutionState.js","sourceRoot":"","sources":["../../../src/channels/raspExecutionState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,0BAA0B,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE3E,MAAM,CAAC,MAAM,gCAAgC,GAAG,KAAK,IAAuB,EAAE;IAC5E,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,EAAE,CAAC;IAChE,IAAI,GAAG,CAAC,MAAM,KAAK,0BAA0B,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC;QACjF,iBAAiB,EAAE,CAAC;IACtB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gCAAgC,GAAG,KAAK,IAA+B,EAAE;IACpF,MAAM,UAAU,GAAG,CAAC,CAAC;IACrB,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,EAAE,CAAC;IAChE,IAAI,GAAG,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC/D,iBAAiB,EAAE,CAAC;IACtB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gCAAgC,GAAG,KAAK,IAAmB,EAAE;IACxE,MAAM,SAAS,GAAG,MAAM,gCAAgC,EAAE,CAAC;IAC3D,MAAM,OAAO,GAAG,kBAAkB,CAAC,SAAS,EAAE,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAC5B,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAE,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["import { onInvalidCallback } from '../api/methods/native';\nimport { Talsec } from '../api/nativeModules';\nimport { RaspExecutionState } from '../models/raspExecutionState';\nimport { getRaspExecutionStateCount, itemsHaveType } from '../utils/utils';\n\nexport const getRaspExecutionStateIdentifiers = async (): Promise<number[]> => {\n const { ids } = await Talsec.getRaspExecutionStateIdentifiers();\n if (ids.length !== getRaspExecutionStateCount() || !itemsHaveType(ids, 'number')) {\n onInvalidCallback();\n }\n return ids;\n};\n\nexport const getRaspExecutionStateChannelData = async (): Promise<[string, string]> => {\n const dataLength = 2;\n const { ids } = await Talsec.getRaspExecutionStateChannelData();\n if (ids.length !== dataLength || !itemsHaveType(ids, 'string')) {\n onInvalidCallback();\n }\n return ids;\n};\n\nexport const prepareRaspExecutionStateMapping = async (): Promise<void> => {\n const newValues = await getRaspExecutionStateIdentifiers();\n const threats = RaspExecutionState.getValues();\n threats.map((threat, index) => {\n threat.value = newValues[index]!;\n });\n};\n"]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Capacitor } from '@capacitor/core';
|
|
2
|
+
import { onInvalidCallback } from '../api/methods/native';
|
|
3
|
+
import { Talsec } from '../api/nativeModules';
|
|
4
|
+
import { Threat } from '../models/threat';
|
|
5
|
+
import { getThreatCount, itemsHaveType } from '../utils/utils';
|
|
6
|
+
export const getThreatIdentifiers = async () => {
|
|
7
|
+
const { ids } = await Talsec.getThreatIdentifiers();
|
|
8
|
+
if (ids.length !== getThreatCount() || !itemsHaveType(ids, 'number')) {
|
|
9
|
+
console.error(`Threat count mismatch: Native ${ids.length} vs JS ${getThreatCount()}. Items are numbers: ${itemsHaveType(ids, 'number')}`);
|
|
10
|
+
// onInvalidCallback();
|
|
11
|
+
}
|
|
12
|
+
return ids;
|
|
13
|
+
};
|
|
14
|
+
export const getThreatChannelData = async () => {
|
|
15
|
+
const dataLength = Capacitor.getPlatform() === 'ios' ? 2 : 3;
|
|
16
|
+
const { ids } = await Talsec.getThreatChannelData();
|
|
17
|
+
if (ids.length !== dataLength || !itemsHaveType(ids, 'string')) {
|
|
18
|
+
onInvalidCallback();
|
|
19
|
+
}
|
|
20
|
+
return ids;
|
|
21
|
+
};
|
|
22
|
+
export const prepareThreatMapping = async () => {
|
|
23
|
+
const newValues = await getThreatIdentifiers();
|
|
24
|
+
const threats = Threat.getValues();
|
|
25
|
+
try {
|
|
26
|
+
threats.map((threat, index) => {
|
|
27
|
+
threat.value = newValues[index];
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
console.error('Could not map Talsec threats', err);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=threat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"threat.js","sourceRoot":"","sources":["../../../src/channels/threat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/D,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,IAAuB,EAAE;IAChE,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,EAAE,CAAC;IACpD,IAAI,GAAG,CAAC,MAAM,KAAK,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC;QACrE,OAAO,CAAC,KAAK,CACX,iCAAiC,GAAG,CAAC,MAAM,UAAU,cAAc,EAAE,wBAAwB,aAAa,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,CAC5H,CAAC;QACF,uBAAuB;IACzB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,IAAuC,EAAE;IAChF,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,EAAE,CAAC;IACpD,IAAI,GAAG,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC/D,iBAAiB,EAAE,CAAC;IACtB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,IAAmB,EAAE;IAC5D,MAAM,SAAS,GAAG,MAAM,oBAAoB,EAAE,CAAC;IAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;IAEnC,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC5B,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAC;IACrD,CAAC;AACH,CAAC,CAAC","sourcesContent":["import { Capacitor } from '@capacitor/core';\n\nimport { onInvalidCallback } from '../api/methods/native';\nimport { Talsec } from '../api/nativeModules';\nimport { Threat } from '../models/threat';\nimport { getThreatCount, itemsHaveType } from '../utils/utils';\n\nexport const getThreatIdentifiers = async (): Promise<number[]> => {\n const { ids } = await Talsec.getThreatIdentifiers();\n if (ids.length !== getThreatCount() || !itemsHaveType(ids, 'number')) {\n console.error(\n `Threat count mismatch: Native ${ids.length} vs JS ${getThreatCount()}. Items are numbers: ${itemsHaveType(ids, 'number')}`,\n );\n // onInvalidCallback();\n }\n return ids;\n};\n\nexport const getThreatChannelData = async (): Promise<[string, string, string]> => {\n const dataLength = Capacitor.getPlatform() === 'ios' ? 2 : 3;\n const { ids } = await Talsec.getThreatChannelData();\n if (ids.length !== dataLength || !itemsHaveType(ids, 'string')) {\n onInvalidCallback();\n }\n return ids;\n};\n\nexport const prepareThreatMapping = async (): Promise<void> => {\n const newValues = await getThreatIdentifiers();\n const threats = Threat.getValues();\n\n try {\n threats.map((threat, index) => {\n threat.value = newValues[index];\n });\n } catch (err) {\n console.error('Could not map Talsec threats', err);\n }\n};\n"]}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
declare const blockScreenCapture: (enable: boolean) => Promise<boolean>;
|
|
9
|
-
declare const isScreenCaptureBlocked: () => Promise<boolean>;
|
|
10
|
-
declare const storeExternalId: (data: string) => Promise<boolean>;
|
|
11
|
-
export * from './definitions';
|
|
12
|
-
export { Freerasp, startFreeRASP, setThreatListeners, removeThreatListeners, addToWhitelist, getAppIcon, blockScreenCapture, isScreenCaptureBlocked, storeExternalId, };
|
|
1
|
+
import { onInvalidCallback } from './api/methods/native';
|
|
2
|
+
export * from './types/types';
|
|
3
|
+
export * from './api/methods/native';
|
|
4
|
+
export * from './api/listeners/threat';
|
|
5
|
+
export * from './api/listeners/raspExecutionState';
|
|
6
|
+
export * from './api/methods/capacitor';
|
|
7
|
+
export { onInvalidCallback as abortApp };
|