diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ba6f44..2685bf2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,54 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [2.4.0] - 2026-02-13 + +- Android SDK version: 18.0.2 +- iOS SDK version: 6.13.0 + +### Capacitor + +#### Added + +- Added cache for freeRASP callbacks when listener is not registered with the app +- Added API for `automation` callback into `ThreatEventActions` (Android only) + +#### Fixed + +- Prevent multiple registration of the freeRASP listeners on the native side + +#### Changed + +- Updated compile and target SDK versions to 36 on Android + +### Android + +#### Added + +- Added support for `KernelSU` to the existing root detection capabilities +- Added support for `HMA` to the existing root detection capabilities +- Added new malware detection capabilities +- Added `onAutomationDetected()` callback to `ThreatDetected` interface + - We are introducing a new capability, detecting whether the device is being automated using tools like Appium +- Added value restrictions to `externalId` + - Method `storeExternalId()` now returns `ExternalIdResult`, which indicates `Success` or `Error` when `externalId` violates restrictions + +#### Fixed + +- Fixed exception handling for the KeyStore `getEntry` operation +- Fixed issue in `ScreenProtector` concerning the `onScreenRecordingDetected` invocations +- Merged internal shared libraries into a single one, reducing the final APK size +- Fixed bug related to key storing in keystore type detection (hw-backed keystore check) +- Fixed manifest queries merge + +#### Changed + +- Removed unused library `tmlib` +- Refactoring of signature verification code +- Updated compile and target API to 36 +- Improved root detection capabilities +- Detection of wireless ADB added to ADB detections + ## [2.3.0] - 2025-12-15 - Android SDK version: 17.0.1 diff --git a/CapacitorFreerasp.podspec b/CapacitorFreerasp.podspec index cba78fa..c571201 100644 --- a/CapacitorFreerasp.podspec +++ b/CapacitorFreerasp.podspec @@ -10,7 +10,11 @@ Pod::Spec.new do |s| s.homepage = package['repository']['url'] s.author = package['author'] s.source = { :git => package['repository']['url'], :tag => s.version.to_s } - s.source_files = 'ios/Plugin/models/*.{swift,h,m,c,cc,mm,cpp}', 'ios/Plugin/utils/*.{swift,h,m,c,cc,mm,cpp}', 'ios/Plugin/*.{swift,h,m,c,cc,mm,cpp}', 'ios/Plugin/TalsecRuntime.xcframework' + s.source_files = 'ios/Plugin/models/*.{swift,h,m,c,cc,mm,cpp}', + 'ios/Plugin/utils/*.{swift,h,m,c,cc,mm,cpp}', + 'ios/Plugin/dispatchers/*.{swift,h,m,c,cc,mm,cpp}', + 'ios/Plugin/*.{swift,h,m,c,cc,mm,cpp}', + 'ios/Plugin/TalsecRuntime.xcframework' s.ios.deployment_target = '13.0' s.dependency 'Capacitor' s.swift_version = '5.1' diff --git a/android/build.gradle b/android/build.gradle index c0f467e..1efe11c 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -27,10 +27,10 @@ apply plugin: 'kotlinx-serialization' android { namespace "com.aheaditec.freerasp" - compileSdk 35 + compileSdk Math.max(36, project.hasProperty('rootProject.ext.compileSdk') ? rootProject.ext.compileSdk as int : 36) defaultConfig { minSdkVersion 23 - targetSdkVersion 35 + targetSdkVersion 36 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -76,5 +76,5 @@ dependencies { androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion" androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion" - implementation 'com.aheaditec.talsec.security:TalsecSecurity-Community-Capacitor:17.0.1' + implementation 'com.aheaditec.talsec.security:TalsecSecurity-Community-Capacitor:18.0.2' } diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 7fc84be..bc60d1f 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-all.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/android/src/main/java/com/aheaditec/freerasp/FreeraspPlugin.kt b/android/src/main/java/com/aheaditec/freerasp/FreeraspPlugin.kt index 5e50b1b..cceaed8 100644 --- a/android/src/main/java/com/aheaditec/freerasp/FreeraspPlugin.kt +++ b/android/src/main/java/com/aheaditec/freerasp/FreeraspPlugin.kt @@ -1,5 +1,6 @@ package com.aheaditec.freerasp +import android.content.Context import android.os.Build import android.os.Handler import android.os.HandlerThread @@ -11,10 +12,11 @@ import com.aheaditec.freerasp.utils.toEncodedJSArray import com.aheaditec.talsec_security.security.api.SuspiciousAppInfo import com.aheaditec.talsec_security.security.api.Talsec import com.aheaditec.talsec_security.security.api.TalsecConfig -import com.aheaditec.talsec_security.security.api.ThreatListener import com.aheaditec.freerasp.events.BaseRaspEvent import com.aheaditec.freerasp.events.RaspExecutionStateEvent import com.aheaditec.freerasp.events.ThreatEvent +import com.aheaditec.freerasp.interfaces.PluginExecutionStateListener +import com.aheaditec.freerasp.interfaces.PluginThreatListener import com.getcapacitor.JSObject import com.getcapacitor.Plugin import com.getcapacitor.PluginCall @@ -22,11 +24,11 @@ import com.getcapacitor.PluginMethod import com.getcapacitor.annotation.CapacitorPlugin import org.json.JSONArray +typealias CapacitorCallback = (String, JSObject) -> Unit + @CapacitorPlugin(name = "Freerasp") class FreeraspPlugin : Plugin() { - private val threatHandler = TalsecThreatHandler(this) - private val listener = ThreatListener(threatHandler, threatHandler, threatHandler) private var registered = true @PluginMethod @@ -38,7 +40,15 @@ class FreeraspPlugin : Plugin() { } try { val talsecConfig = buildTalsecConfigThrowing(config) - listener.registerListener(context) + + val pluginCallback: CapacitorCallback = { eventName, data -> + notifyListeners(eventName, data, true) + } + + PluginThreatHandler.threatDispatcher.listener = PluginListener(context, pluginCallback) + PluginThreatHandler.executionStateDispatcher.listener = PluginListener(context, pluginCallback) + PluginThreatHandler.registerListener(context) + bridge.activity.runOnUiThread { Talsec.start(context, talsecConfig) mainHandler.post { @@ -70,8 +80,10 @@ class FreeraspPlugin : Plugin() { override fun handleOnPause() { super.handleOnPause() if (activity.isFinishing) { - listener.unregisterListener(context) + PluginThreatHandler.unregisterListener(context) registered = false + PluginThreatHandler.threatDispatcher.listener = null + PluginThreatHandler.executionStateDispatcher.listener = null } } @@ -79,7 +91,7 @@ class FreeraspPlugin : Plugin() { super.handleOnResume() if (!registered) { registered = true - listener.registerListener(context) + PluginThreatHandler.registerListener(context) } } @@ -129,15 +141,15 @@ class FreeraspPlugin : Plugin() { * Method to setup the execution state message passing between native and Capacitor * @return list of [CHANNEL_NAME, CHANNEL_KEY] */ - @PluginMethod - fun getRaspExecutionStateChannelData(call: PluginCall) { + @PluginMethod + fun getRaspExecutionStateChannelData(call: PluginCall) { val channelData = JSONArray( (listOf( RaspExecutionStateEvent.CHANNEL_NAME, RaspExecutionStateEvent.CHANNEL_KEY )) ) call.resolve(JSObject().put("ids", channelData)) - } + } /** * We never send an invalid callback over our channel. @@ -253,21 +265,17 @@ class FreeraspPlugin : Plugin() { } } - internal fun notifyListeners(event: BaseRaspEvent) { - notifyListeners(event.channelName, JSObject().put(event.channelKey, event.value), true) - } - - internal fun notifyMalware(suspiciousApps: MutableList) { - // Perform the malware encoding on a background thread - backgroundHandler.post { - - val encodedSuspiciousApps = suspiciousApps.toEncodedJSArray(context) - mainHandler.post { - val params = JSObject() - .put(ThreatEvent.CHANNEL_KEY, ThreatEvent.Malware.value) - .put(ThreatEvent.MALWARE_CHANNEL_KEY, encodedSuspiciousApps) - notifyListeners(ThreatEvent.CHANNEL_NAME, params, true) - } + @PluginMethod + fun removeExternalId(call: PluginCall) { + try { + Talsec.removeExternalId(context) + call.resolve(JSObject().put("result", true)) + } catch (e: Exception) { + call.reject( + "Error during removeExternalId operation in freeRASP Native Plugin", + "NativePluginError" + ) + return } } @@ -298,5 +306,49 @@ class FreeraspPlugin : Plugin() { private val mainHandler = Handler(Looper.getMainLooper()) internal var talsecStarted = false + + internal fun notifyEvent( + event: BaseRaspEvent, + notifyListenersCallback: CapacitorCallback + ) { + val params = JSObject().put(event.channelKey, event.value) + notifyListenersCallback(event.channelName, params) + } + + internal fun notifyMalware( + suspiciousApps: MutableList, + context: Context, + notifyListenersCallback: CapacitorCallback + ) { + // Perform the malware encoding on a background thread + backgroundHandler.post { + + val encodedSuspiciousApps = suspiciousApps.toEncodedJSArray(context) + mainHandler.post { + val params = JSObject() + .put(ThreatEvent.CHANNEL_KEY, ThreatEvent.Malware.value) + .put(ThreatEvent.MALWARE_CHANNEL_KEY, encodedSuspiciousApps) + notifyListenersCallback.invoke(ThreatEvent.CHANNEL_NAME, params) + } + + } + } + } + + internal class PluginListener( + private val context: Context, + private val pluginCallback: CapacitorCallback + ) : PluginThreatListener, PluginExecutionStateListener { + override fun threatDetected(threatEventType: ThreatEvent) { + notifyEvent(threatEventType, pluginCallback) + } + + override fun malwareDetected(suspiciousApps: MutableList) { + notifyMalware(suspiciousApps, context, pluginCallback) + } + + override fun raspExecutionStateChanged(event: RaspExecutionStateEvent) { + notifyEvent(event, pluginCallback) + } } } \ No newline at end of file diff --git a/android/src/main/java/com/aheaditec/freerasp/PluginThreatHandler.kt b/android/src/main/java/com/aheaditec/freerasp/PluginThreatHandler.kt new file mode 100644 index 0000000..3c0f8d3 --- /dev/null +++ b/android/src/main/java/com/aheaditec/freerasp/PluginThreatHandler.kt @@ -0,0 +1,121 @@ +package com.aheaditec.freerasp + +import android.content.Context +import com.aheaditec.talsec_security.security.api.SuspiciousAppInfo +import com.aheaditec.talsec_security.security.api.ThreatListener +import com.aheaditec.freerasp.dispatchers.ExecutionStateDispatcher +import com.aheaditec.freerasp.dispatchers.ThreatDispatcher +import com.aheaditec.freerasp.events.RaspExecutionStateEvent +import com.aheaditec.freerasp.events.ThreatEvent + +internal object PluginThreatHandler { + + internal val threatDispatcher = ThreatDispatcher() + internal val executionStateDispatcher = ExecutionStateDispatcher() + + private val threatDetected = object : ThreatListener.ThreatDetected() { + + override fun onRootDetected() { + threatDispatcher.dispatchThreat(ThreatEvent.PrivilegedAccess) + } + + override fun onDebuggerDetected() { + threatDispatcher.dispatchThreat(ThreatEvent.Debug) + } + + override fun onEmulatorDetected() { + threatDispatcher.dispatchThreat(ThreatEvent.Simulator) + } + + override fun onTamperDetected() { + threatDispatcher.dispatchThreat(ThreatEvent.AppIntegrity) + } + + override fun onUntrustedInstallationSourceDetected() { + threatDispatcher.dispatchThreat(ThreatEvent.UnofficialStore) + } + + override fun onHookDetected() { + threatDispatcher.dispatchThreat(ThreatEvent.Hooks) + } + + override fun onDeviceBindingDetected() { + threatDispatcher.dispatchThreat(ThreatEvent.DeviceBinding) + } + + override fun onObfuscationIssuesDetected() { + threatDispatcher.dispatchThreat(ThreatEvent.ObfuscationIssues) + } + + override fun onMalwareDetected(suspiciousAppInfos: MutableList) { + threatDispatcher.dispatchMalware(suspiciousAppInfos ?: mutableListOf()) + } + + override fun onScreenshotDetected() { + threatDispatcher.dispatchThreat(ThreatEvent.Screenshot) + } + + override fun onScreenRecordingDetected() { + threatDispatcher.dispatchThreat(ThreatEvent.ScreenRecording) + } + + override fun onMultiInstanceDetected() { + threatDispatcher.dispatchThreat(ThreatEvent.MultiInstance) + } + + override fun onUnsecureWifiDetected() { + threatDispatcher.dispatchThreat(ThreatEvent.UnsecureWifi) + } + + override fun onTimeSpoofingDetected() { + threatDispatcher.dispatchThreat(ThreatEvent.TimeSpoofing) + } + + override fun onLocationSpoofingDetected() { + threatDispatcher.dispatchThreat(ThreatEvent.LocationSpoofing) + } + + override fun onAutomationDetected() { + threatDispatcher.dispatchThreat(ThreatEvent.Automation) + } + } + + private val deviceState = object : ThreatListener.DeviceState() { + + override fun onUnlockedDeviceDetected() { + threatDispatcher.dispatchThreat(ThreatEvent.Passcode) + } + + override fun onHardwareBackedKeystoreNotAvailableDetected() { + threatDispatcher.dispatchThreat(ThreatEvent.SecureHardwareNotAvailable) + } + + override fun onDeveloperModeDetected() { + threatDispatcher.dispatchThreat(ThreatEvent.DevMode) + } + + override fun onADBEnabledDetected() { + threatDispatcher.dispatchThreat(ThreatEvent.ADBEnabled) + } + + override fun onSystemVPNDetected() { + threatDispatcher.dispatchThreat(ThreatEvent.SystemVPN) + } + } + + private val raspExecutionState = object : ThreatListener.RaspExecutionState() { + override fun onAllChecksFinished() { + executionStateDispatcher.dispatch(RaspExecutionStateEvent.AllChecksFinished) + } + } + + private val internalListener = ThreatListener(threatDetected, deviceState, raspExecutionState) + + internal fun registerListener(context: Context) { + internalListener.registerListener(context) + } + + internal fun unregisterListener(context: Context) { + internalListener.unregisterListener(context) + } +} \ No newline at end of file diff --git a/android/src/main/java/com/aheaditec/freerasp/ThreatHandler.kt b/android/src/main/java/com/aheaditec/freerasp/ThreatHandler.kt deleted file mode 100644 index b5500fb..0000000 --- a/android/src/main/java/com/aheaditec/freerasp/ThreatHandler.kt +++ /dev/null @@ -1,94 +0,0 @@ -package com.aheaditec.freerasp - -import com.aheaditec.talsec_security.security.api.SuspiciousAppInfo -import com.aheaditec.talsec_security.security.api.ThreatListener -import com.aheaditec.freerasp.events.RaspExecutionStateEvent -import com.aheaditec.freerasp.events.ThreatEvent - -internal class TalsecThreatHandler(private val instance: FreeraspPlugin) : - ThreatListener.ThreatDetected, ThreatListener.DeviceState, ThreatListener.RaspExecutionState() { - - override fun onRootDetected() { - instance.notifyListeners(ThreatEvent.PrivilegedAccess) - } - - override fun onDebuggerDetected() { - instance.notifyListeners(ThreatEvent.Debug) - } - - override fun onEmulatorDetected() { - instance.notifyListeners(ThreatEvent.Simulator) - } - - override fun onTamperDetected() { - instance.notifyListeners(ThreatEvent.AppIntegrity) - } - - override fun onUntrustedInstallationSourceDetected() { - instance.notifyListeners(ThreatEvent.UnofficialStore) - } - - override fun onHookDetected() { - instance.notifyListeners(ThreatEvent.Hooks) - } - - override fun onDeviceBindingDetected() { - instance.notifyListeners(ThreatEvent.DeviceBinding) - } - - override fun onObfuscationIssuesDetected() { - instance.notifyListeners(ThreatEvent.ObfuscationIssues) - } - - override fun onMalwareDetected(suspiciousAppInfos: MutableList) { - instance.notifyMalware(suspiciousAppInfos ?: mutableListOf()) - } - - override fun onUnlockedDeviceDetected() { - instance.notifyListeners(ThreatEvent.Passcode) - } - - override fun onHardwareBackedKeystoreNotAvailableDetected() { - instance.notifyListeners(ThreatEvent.SecureHardwareNotAvailable) - } - - override fun onDeveloperModeDetected() { - instance.notifyListeners(ThreatEvent.DevMode) - } - - override fun onADBEnabledDetected() { - instance.notifyListeners(ThreatEvent.ADBEnabled) - } - - override fun onSystemVPNDetected() { - instance.notifyListeners(ThreatEvent.SystemVPN) - } - - override fun onScreenshotDetected() { - instance.notifyListeners(ThreatEvent.Screenshot) - } - - override fun onScreenRecordingDetected() { - instance.notifyListeners(ThreatEvent.ScreenRecording) - } - - override fun onMultiInstanceDetected() { - instance.notifyListeners(ThreatEvent.MultiInstance) - } - - override fun onUnsecureWifiDetected() { - instance.notifyListeners(ThreatEvent.UnsecureWifi) - } - - override fun onTimeSpoofingDetected() { - instance.notifyListeners(ThreatEvent.TimeSpoofing) - } - - override fun onLocationSpoofingDetected() { - instance.notifyListeners(ThreatEvent.LocationSpoofing) - } - - override fun onAllChecksFinished() { - instance.notifyListeners(RaspExecutionStateEvent.AllChecksFinished) - } -} diff --git a/android/src/main/java/com/aheaditec/freerasp/dispatchers/ExecutionStateDispatcher.kt b/android/src/main/java/com/aheaditec/freerasp/dispatchers/ExecutionStateDispatcher.kt new file mode 100644 index 0000000..03a9e94 --- /dev/null +++ b/android/src/main/java/com/aheaditec/freerasp/dispatchers/ExecutionStateDispatcher.kt @@ -0,0 +1,38 @@ +package com.aheaditec.freerasp.dispatchers + +import com.aheaditec.freerasp.events.RaspExecutionStateEvent +import com.aheaditec.freerasp.interfaces.PluginExecutionStateListener + +internal class ExecutionStateDispatcher { + private val cache = mutableSetOf() + + var listener: PluginExecutionStateListener? = null + set(value) { + field = value + if (value != null) { + flushCache(value) + } + } + + fun dispatch(event: RaspExecutionStateEvent) { + val checkedListener = synchronized(cache) { + val currentListener = listener + if (currentListener != null) { + currentListener + } else { + cache.add(event) + null + } + } + checkedListener?.raspExecutionStateChanged(event) + } + + private fun flushCache(registeredListener: PluginExecutionStateListener) { + val events = synchronized(cache) { + val snapshot = cache.toSet() + cache.clear() + snapshot + } + events.forEach { registeredListener.raspExecutionStateChanged(it) } + } +} diff --git a/android/src/main/java/com/aheaditec/freerasp/dispatchers/ThreatDispatcher.kt b/android/src/main/java/com/aheaditec/freerasp/dispatchers/ThreatDispatcher.kt new file mode 100644 index 0000000..99b1c31 --- /dev/null +++ b/android/src/main/java/com/aheaditec/freerasp/dispatchers/ThreatDispatcher.kt @@ -0,0 +1,62 @@ +package com.aheaditec.freerasp.dispatchers + +import com.aheaditec.talsec_security.security.api.SuspiciousAppInfo +import com.aheaditec.freerasp.events.ThreatEvent +import com.aheaditec.freerasp.interfaces.PluginThreatListener + +internal class ThreatDispatcher { + private val threatCache = mutableSetOf() + private val malwareCache = mutableSetOf() + + var listener: PluginThreatListener? = null + set(value) { + field = value + if (value != null) { + flushCache(value) + } + } + + fun dispatchThreat(event: ThreatEvent) { + val checkedListener = synchronized(threatCache) { + val currentListener = listener + if (currentListener != null) { + currentListener + } else { + threatCache.add(event) + null + } + } + checkedListener?.threatDetected(event) + } + + fun dispatchMalware(apps: MutableList) { + val checkedListener = synchronized(malwareCache) { + val currentListener = listener + if (currentListener != null) { + currentListener + } else { + malwareCache.addAll(apps) + null + } + } + checkedListener?.malwareDetected(apps) + } + + private fun flushCache(registeredListener: PluginThreatListener) { + val threats = synchronized(threatCache) { + val snapshot = threatCache.toSet() + threatCache.clear() + snapshot + } + threats.forEach { registeredListener.threatDetected(it) } + + val malware = synchronized(malwareCache) { + val snapshot = malwareCache.toMutableList() + malwareCache.clear() + snapshot + } + if (malware.isNotEmpty()) { + registeredListener.malwareDetected(malware) + } + } +} diff --git a/android/src/main/java/com/aheaditec/freerasp/events/ThreatEvent.kt b/android/src/main/java/com/aheaditec/freerasp/events/ThreatEvent.kt index 105f2a1..afbdc79 100644 --- a/android/src/main/java/com/aheaditec/freerasp/events/ThreatEvent.kt +++ b/android/src/main/java/com/aheaditec/freerasp/events/ThreatEvent.kt @@ -34,6 +34,7 @@ internal sealed class ThreatEvent(override val value: Int) : BaseRaspEvent { object TimeSpoofing : ThreatEvent(RandomGenerator.next()) object LocationSpoofing : ThreatEvent(RandomGenerator.next()) object UnsecureWifi : ThreatEvent(RandomGenerator.next()) + object Automation : ThreatEvent(RandomGenerator.next()) companion object { @@ -62,7 +63,8 @@ internal sealed class ThreatEvent(override val value: Int) : BaseRaspEvent { MultiInstance, TimeSpoofing, LocationSpoofing, - UnsecureWifi + UnsecureWifi, + Automation ).map { it.value } ) } diff --git a/android/src/main/java/com/aheaditec/freerasp/interfaces/PluginExecutionStateListener.kt b/android/src/main/java/com/aheaditec/freerasp/interfaces/PluginExecutionStateListener.kt new file mode 100644 index 0000000..b13af94 --- /dev/null +++ b/android/src/main/java/com/aheaditec/freerasp/interfaces/PluginExecutionStateListener.kt @@ -0,0 +1,7 @@ +package com.aheaditec.freerasp.interfaces + +import com.aheaditec.freerasp.events.RaspExecutionStateEvent + +internal interface PluginExecutionStateListener { + fun raspExecutionStateChanged(event: RaspExecutionStateEvent) +} diff --git a/android/src/main/java/com/aheaditec/freerasp/interfaces/PluginThreatListener.kt b/android/src/main/java/com/aheaditec/freerasp/interfaces/PluginThreatListener.kt new file mode 100644 index 0000000..7e45473 --- /dev/null +++ b/android/src/main/java/com/aheaditec/freerasp/interfaces/PluginThreatListener.kt @@ -0,0 +1,9 @@ +package com.aheaditec.freerasp.interfaces + +import com.aheaditec.talsec_security.security.api.SuspiciousAppInfo +import com.aheaditec.freerasp.events.ThreatEvent + +internal interface PluginThreatListener { + fun threatDetected(threatEventType: ThreatEvent) + fun malwareDetected(suspiciousApps: MutableList) +} diff --git a/dist/esm/api/listeners/raspExecutionState.d.ts b/dist/esm/api/listeners/raspExecutionState.d.ts index aceccd0..aaf99b0 100644 --- a/dist/esm/api/listeners/raspExecutionState.d.ts +++ b/dist/esm/api/listeners/raspExecutionState.d.ts @@ -1,2 +1,3 @@ import type { RaspExecutionStateEventActions } from '../../types/types'; export declare const registerRaspExecutionStateListener: (config: RaspExecutionStateEventActions) => Promise; +export declare const removeRaspExecutionStateListener: () => Promise; diff --git a/dist/esm/api/listeners/raspExecutionState.js b/dist/esm/api/listeners/raspExecutionState.js index 4e6c47e..308e881 100644 --- a/dist/esm/api/listeners/raspExecutionState.js +++ b/dist/esm/api/listeners/raspExecutionState.js @@ -2,10 +2,20 @@ import { getRaspExecutionStateChannelData, prepareRaspExecutionStateMapping } fr import { RaspExecutionState } from '../../models/raspExecutionState'; import { onInvalidCallback } from '../methods/native'; import { Talsec } from '../nativeModules'; +let eventsListener = null; +let isInitializing = false; export const registerRaspExecutionStateListener = async (config) => { + if (isInitializing) { + return; + } + isInitializing = true; + if (eventsListener) { + await eventsListener.remove(); + eventsListener = null; + } const [channel, key] = await getRaspExecutionStateChannelData(); await prepareRaspExecutionStateMapping(); - await Talsec.addListener(channel, async (event) => { + eventsListener = await Talsec.addListener(channel, async (event) => { var _a; if (event[key] == undefined) { onInvalidCallback(); @@ -19,5 +29,12 @@ export const registerRaspExecutionStateListener = async (config) => { break; } }); + isInitializing = false; +}; +export const removeRaspExecutionStateListener = async () => { + if (eventsListener) { + await eventsListener.remove(); + eventsListener = null; + } }; //# sourceMappingURL=raspExecutionState.js.map \ No newline at end of file diff --git a/dist/esm/api/listeners/raspExecutionState.js.map b/dist/esm/api/listeners/raspExecutionState.js.map index 6a7eb23..5d854eb 100644 --- a/dist/esm/api/listeners/raspExecutionState.js.map +++ b/dist/esm/api/listeners/raspExecutionState.js.map @@ -1 +1 @@ -{"version":3,"file":"raspExecutionState.js","sourceRoot":"","sources":["../../../../src/api/listeners/raspExecutionState.ts"],"names":[],"mappings":"AAAA,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,MAAM,CAAC,MAAM,kCAAkC,GAAG,KAAK,EAAE,MAAsC,EAAiB,EAAE;IAChH,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,MAAM,gCAAgC,EAAE,CAAC;IAChE,MAAM,gCAAgC,EAAE,CAAC;IAEzC,MAAM,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,KAAU,EAAE,EAAE;;QACrD,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;YAC3B,iBAAiB,EAAE,CAAC;SACrB;QACD,QAAQ,KAAK,CAAC,GAAG,CAAC,EAAE;YAClB,KAAK,kBAAkB,CAAC,iBAAiB,CAAC,KAAK;gBAC7C,MAAA,MAAM,CAAC,iBAAiB,sDAAI,CAAC;gBAC7B,MAAM;YACR;gBACE,iBAAiB,EAAE,CAAC;gBACpB,MAAM;SACT;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["import { 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\nexport const registerRaspExecutionStateListener = async (config: RaspExecutionStateEventActions): Promise => {\n const [channel, key] = await getRaspExecutionStateChannelData();\n await prepareRaspExecutionStateMapping();\n\n 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};\n"]} \ No newline at end of file +{"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;QAClB,OAAO;KACR;IACD,cAAc,GAAG,IAAI,CAAC;IAEtB,IAAI,cAAc,EAAE;QAClB,MAAM,cAAc,CAAC,MAAM,EAAE,CAAC;QAC9B,cAAc,GAAG,IAAI,CAAC;KACvB;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;YAC3B,iBAAiB,EAAE,CAAC;SACrB;QACD,QAAQ,KAAK,CAAC,GAAG,CAAC,EAAE;YAClB,KAAK,kBAAkB,CAAC,iBAAiB,CAAC,KAAK;gBAC7C,MAAA,MAAM,CAAC,iBAAiB,sDAAI,CAAC;gBAC7B,MAAM;YACR;gBACE,iBAAiB,EAAE,CAAC;gBACpB,MAAM;SACT;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;QAClB,MAAM,cAAc,CAAC,MAAM,EAAE,CAAC;QAC9B,cAAc,GAAG,IAAI,CAAC;KACvB;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 => {\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 => {\n if (eventsListener) {\n await eventsListener.remove();\n eventsListener = null;\n }\n};\n"]} \ No newline at end of file diff --git a/dist/esm/api/listeners/threat.d.ts b/dist/esm/api/listeners/threat.d.ts index be2c162..fec9456 100644 --- a/dist/esm/api/listeners/threat.d.ts +++ b/dist/esm/api/listeners/threat.d.ts @@ -1,2 +1,3 @@ import type { ThreatEventActions } from '../../types/types'; export declare const registerThreatListener: (config: ThreatEventActions) => Promise; +export declare const removeThreatListener: () => Promise; diff --git a/dist/esm/api/listeners/threat.js b/dist/esm/api/listeners/threat.js index bfef256..16387a9 100644 --- a/dist/esm/api/listeners/threat.js +++ b/dist/esm/api/listeners/threat.js @@ -3,11 +3,21 @@ import { Threat } from '../../models/threat'; import { parseMalwareData } from '../../utils/malware'; import { onInvalidCallback } from '../methods/native'; import { Talsec } from '../nativeModules'; +let eventsListener = null; +let isInitializing = false; export const registerThreatListener = async (config) => { + if (isInitializing) { + return; + } + isInitializing = true; + if (eventsListener) { + await eventsListener.remove(); + eventsListener = null; + } const [channel, key, malwareKey] = await getThreatChannelData(); await prepareThreatMapping(); - await Talsec.addListener(channel, async (event) => { - var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w; + eventsListener = await Talsec.addListener(channel, async (event) => { + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x; if (event[key] == undefined) { onInvalidCallback(); } @@ -75,10 +85,20 @@ export const registerThreatListener = async (config) => { case Threat.UnsecureWifi.value: (_w = config.unsecureWifi) === null || _w === void 0 ? void 0 : _w.call(config); break; + case Threat.Automation.value: + (_x = config.automation) === null || _x === void 0 ? void 0 : _x.call(config); + break; default: onInvalidCallback(); break; } }); + isInitializing = false; +}; +export const removeThreatListener = async () => { + if (eventsListener) { + await eventsListener.remove(); + eventsListener = null; + } }; //# sourceMappingURL=threat.js.map \ No newline at end of file diff --git a/dist/esm/api/listeners/threat.js.map b/dist/esm/api/listeners/threat.js.map index 2c576b0..bff4783 100644 --- a/dist/esm/api/listeners/threat.js.map +++ b/dist/esm/api/listeners/threat.js.map @@ -1 +1 @@ -{"version":3,"file":"threat.js","sourceRoot":"","sources":["../../../../src/api/listeners/threat.ts"],"names":[],"mappings":"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","sourcesContent":["import { 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\nexport const registerThreatListener = async (config: ThreatEventActions): Promise => {\n const [channel, key, malwareKey] = await getThreatChannelData();\n await prepareThreatMapping();\n\n 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 default:\n onInvalidCallback();\n break;\n }\n });\n};\n"]} \ No newline at end of file +{"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 => {\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 => {\n if (eventsListener) {\n await eventsListener.remove();\n eventsListener = null;\n }\n};\n"]} \ No newline at end of file diff --git a/dist/esm/api/methods/native.d.ts b/dist/esm/api/methods/native.d.ts index ad40bfd..f70a1fe 100644 --- a/dist/esm/api/methods/native.d.ts +++ b/dist/esm/api/methods/native.d.ts @@ -2,5 +2,6 @@ export declare const addToWhitelist: (packageName: string) => Promise; export declare const blockScreenCapture: (enable: boolean) => Promise; export declare const isScreenCaptureBlocked: () => Promise; export declare const storeExternalId: (data: string) => Promise; +export declare const removeExternalId: () => Promise; export declare const getAppIcon: (packageName: string) => Promise; export declare const onInvalidCallback: () => void; diff --git a/dist/esm/api/methods/native.js b/dist/esm/api/methods/native.js index daa129d..184966e 100644 --- a/dist/esm/api/methods/native.js +++ b/dist/esm/api/methods/native.js @@ -19,6 +19,10 @@ export const storeExternalId = async (data) => { const { result } = await Talsec.storeExternalId({ data }); return result; }; +export const removeExternalId = async () => { + const { result } = await Talsec.removeExternalId(); + return result; +}; export const getAppIcon = async (packageName) => { if (Capacitor.getPlatform() === 'ios') { return Promise.reject('App icon retrieval for Malware detection is not available on iOS'); diff --git a/dist/esm/api/methods/native.js.map b/dist/esm/api/methods/native.js.map index 961aa7e..6d7bbeb 100644 --- a/dist/esm/api/methods/native.js.map +++ b/dist/esm/api/methods/native.js.map @@ -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;QACrC,OAAO,OAAO,CAAC,MAAM,CAAC,2CAA2C,CAAC,CAAC;KACpE;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,UAAU,GAAG,KAAK,EAAE,WAAmB,EAAmB,EAAE;IACvE,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE;QACrC,OAAO,OAAO,CAAC,MAAM,CAAC,kEAAkE,CAAC,CAAC;KAC3F;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 => {\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 => {\n const { result } = await Talsec.blockScreenCapture({ enable });\n return result;\n};\n\nexport const isScreenCaptureBlocked = async (): Promise => {\n const { result } = await Talsec.isScreenCaptureBlocked();\n return result;\n};\n\nexport const storeExternalId = async (data: string): Promise => {\n const { result } = await Talsec.storeExternalId({ data });\n return result;\n};\n\nexport const getAppIcon = async (packageName: string): Promise => {\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"]} \ No newline at end of file +{"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;QACrC,OAAO,OAAO,CAAC,MAAM,CAAC,2CAA2C,CAAC,CAAC;KACpE;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;QACrC,OAAO,OAAO,CAAC,MAAM,CAAC,kEAAkE,CAAC,CAAC;KAC3F;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 => {\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 => {\n const { result } = await Talsec.blockScreenCapture({ enable });\n return result;\n};\n\nexport const isScreenCaptureBlocked = async (): Promise => {\n const { result } = await Talsec.isScreenCaptureBlocked();\n return result;\n};\n\nexport const storeExternalId = async (data: string): Promise => {\n const { result } = await Talsec.storeExternalId({ data });\n return result;\n};\n\nexport const removeExternalId = async (): Promise => {\n const { result } = await Talsec.removeExternalId();\n return result;\n};\n\nexport const getAppIcon = async (packageName: string): Promise => {\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"]} \ No newline at end of file diff --git a/dist/esm/models/threat.d.ts b/dist/esm/models/threat.d.ts index 1747c7e..2851977 100644 --- a/dist/esm/models/threat.d.ts +++ b/dist/esm/models/threat.d.ts @@ -21,6 +21,7 @@ export declare class Threat { static TimeSpoofing: Threat; static LocationSpoofing: Threat; static UnsecureWifi: Threat; + static Automation: Threat; constructor(value: number); static getValues(): Threat[]; } diff --git a/dist/esm/models/threat.js b/dist/esm/models/threat.js index a65e7a5..c54d5d2 100644 --- a/dist/esm/models/threat.js +++ b/dist/esm/models/threat.js @@ -26,6 +26,7 @@ export class Threat { this.TimeSpoofing, this.LocationSpoofing, this.UnsecureWifi, + this.Automation, ] : [ this.AppIntegrity, @@ -65,4 +66,5 @@ Threat.MultiInstance = new Threat(0); Threat.TimeSpoofing = new Threat(0); Threat.LocationSpoofing = new Threat(0); Threat.UnsecureWifi = new Threat(0); +Threat.Automation = new Threat(0); //# sourceMappingURL=threat.js.map \ No newline at end of file diff --git a/dist/esm/models/threat.js.map b/dist/esm/models/threat.js.map index 748a865..d08b50d 100644 --- a/dist/esm/models/threat.js.map +++ b/dist/esm/models/threat.js.map @@ -1 +1 @@ -{"version":3,"file":"threat.js","sourceRoot":"","sources":["../../../src/models/threat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,OAAO,MAAM;IAyBjB,YAAY,KAAa;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,SAAS;QACd,OAAO,SAAS,CAAC,WAAW,EAAE,KAAK,SAAS;YAC1C,CAAC,CAAC;gBACE,IAAI,CAAC,YAAY;gBACjB,IAAI,CAAC,gBAAgB;gBACrB,IAAI,CAAC,KAAK;gBACV,IAAI,CAAC,KAAK;gBACV,IAAI,CAAC,QAAQ;gBACb,IAAI,CAAC,SAAS;gBACd,IAAI,CAAC,0BAA0B;gBAC/B,IAAI,CAAC,SAAS;gBACd,IAAI,CAAC,aAAa;gBAClB,IAAI,CAAC,eAAe;gBACpB,IAAI,CAAC,iBAAiB;gBACtB,IAAI,CAAC,OAAO;gBACZ,IAAI,CAAC,OAAO;gBACZ,IAAI,CAAC,UAAU;gBACf,IAAI,CAAC,UAAU;gBACf,IAAI,CAAC,eAAe;gBACpB,IAAI,CAAC,aAAa;gBAClB,IAAI,CAAC,YAAY;gBACjB,IAAI,CAAC,gBAAgB;gBACrB,IAAI,CAAC,YAAY;aAClB;YACH,CAAC,CAAC;gBACE,IAAI,CAAC,YAAY;gBACjB,IAAI,CAAC,gBAAgB;gBACrB,IAAI,CAAC,KAAK;gBACV,IAAI,CAAC,KAAK;gBACV,IAAI,CAAC,QAAQ;gBACb,IAAI,CAAC,SAAS;gBACd,IAAI,CAAC,0BAA0B;gBAC/B,IAAI,CAAC,SAAS;gBACd,IAAI,CAAC,aAAa;gBAClB,IAAI,CAAC,QAAQ;gBACb,IAAI,CAAC,eAAe;gBACpB,IAAI,CAAC,UAAU;gBACf,IAAI,CAAC,eAAe;aACrB,CAAC;IACR,CAAC;;AAjEM,mBAAY,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;AAC7B,uBAAgB,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;AACjC,YAAK,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,YAAK,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,eAAQ,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;AACzB,gBAAS,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;AAC1B,iCAA0B,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;AAC3C,gBAAS,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;AAC1B,oBAAa,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;AAC9B,eAAQ,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;AACzB,sBAAe,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;AAChC,wBAAiB,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;AAClC,cAAO,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;AACxB,cAAO,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;AACxB,iBAAU,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;AAC3B,iBAAU,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;AAC3B,sBAAe,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;AAChC,oBAAa,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;AAC9B,mBAAY,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;AAC7B,uBAAgB,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;AACjC,mBAAY,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC","sourcesContent":["import { Capacitor } from '@capacitor/core';\n\nexport class Threat {\n value: number;\n\n static AppIntegrity = new Threat(0);\n static PrivilegedAccess = new Threat(0);\n static Debug = new Threat(0);\n static Hooks = new Threat(0);\n static Passcode = new Threat(0);\n static Simulator = new Threat(0);\n static SecureHardwareNotAvailable = new Threat(0);\n static SystemVPN = new Threat(0);\n static DeviceBinding = new Threat(0);\n static DeviceID = new Threat(0);\n static UnofficialStore = new Threat(0);\n static ObfuscationIssues = new Threat(0);\n static DevMode = new Threat(0);\n static Malware = new Threat(0);\n static ADBEnabled = new Threat(0);\n static Screenshot = new Threat(0);\n static ScreenRecording = new Threat(0);\n static MultiInstance = new Threat(0);\n static TimeSpoofing = new Threat(0);\n static LocationSpoofing = new Threat(0);\n static UnsecureWifi = new Threat(0);\n\n constructor(value: number) {\n this.value = value;\n }\n\n static getValues(): Threat[] {\n return Capacitor.getPlatform() === 'android'\n ? [\n this.AppIntegrity,\n this.PrivilegedAccess,\n this.Debug,\n this.Hooks,\n this.Passcode,\n this.Simulator,\n this.SecureHardwareNotAvailable,\n this.SystemVPN,\n this.DeviceBinding,\n this.UnofficialStore,\n this.ObfuscationIssues,\n this.DevMode,\n this.Malware,\n this.ADBEnabled,\n this.Screenshot,\n this.ScreenRecording,\n this.MultiInstance,\n this.TimeSpoofing,\n this.LocationSpoofing,\n this.UnsecureWifi,\n ]\n : [\n this.AppIntegrity,\n this.PrivilegedAccess,\n this.Debug,\n this.Hooks,\n this.Passcode,\n this.Simulator,\n this.SecureHardwareNotAvailable,\n this.SystemVPN,\n this.DeviceBinding,\n this.DeviceID,\n this.UnofficialStore,\n this.Screenshot,\n this.ScreenRecording,\n ];\n }\n}\n"]} \ No newline at end of file +{"version":3,"file":"threat.js","sourceRoot":"","sources":["../../../src/models/threat.ts"],"names":[],"mappings":"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","sourcesContent":["import { Capacitor } from '@capacitor/core';\n\nexport class Threat {\n value: number;\n\n static AppIntegrity = new Threat(0);\n static PrivilegedAccess = new Threat(0);\n static Debug = new Threat(0);\n static Hooks = new Threat(0);\n static Passcode = new Threat(0);\n static Simulator = new Threat(0);\n static SecureHardwareNotAvailable = new Threat(0);\n static SystemVPN = new Threat(0);\n static DeviceBinding = new Threat(0);\n static DeviceID = new Threat(0);\n static UnofficialStore = new Threat(0);\n static ObfuscationIssues = new Threat(0);\n static DevMode = new Threat(0);\n static Malware = new Threat(0);\n static ADBEnabled = new Threat(0);\n static Screenshot = new Threat(0);\n static ScreenRecording = new Threat(0);\n static MultiInstance = new Threat(0);\n static TimeSpoofing = new Threat(0);\n static LocationSpoofing = new Threat(0);\n static UnsecureWifi = new Threat(0);\n static Automation = new Threat(0);\n\n constructor(value: number) {\n this.value = value;\n }\n\n static getValues(): Threat[] {\n return Capacitor.getPlatform() === 'android'\n ? [\n this.AppIntegrity,\n this.PrivilegedAccess,\n this.Debug,\n this.Hooks,\n this.Passcode,\n this.Simulator,\n this.SecureHardwareNotAvailable,\n this.SystemVPN,\n this.DeviceBinding,\n this.UnofficialStore,\n this.ObfuscationIssues,\n this.DevMode,\n this.Malware,\n this.ADBEnabled,\n this.Screenshot,\n this.ScreenRecording,\n this.MultiInstance,\n this.TimeSpoofing,\n this.LocationSpoofing,\n this.UnsecureWifi,\n this.Automation,\n ]\n : [\n this.AppIntegrity,\n this.PrivilegedAccess,\n this.Debug,\n this.Hooks,\n this.Passcode,\n this.Simulator,\n this.SecureHardwareNotAvailable,\n this.SystemVPN,\n this.DeviceBinding,\n this.DeviceID,\n this.UnofficialStore,\n this.Screenshot,\n this.ScreenRecording,\n ];\n }\n}\n"]} \ No newline at end of file diff --git a/dist/esm/types/types.d.ts b/dist/esm/types/types.d.ts index c078e3e..88f56a0 100644 --- a/dist/esm/types/types.d.ts +++ b/dist/esm/types/types.d.ts @@ -23,6 +23,9 @@ export interface TalsecPlugin { }): Promise<{ result: boolean; }>; + removeExternalId(): Promise<{ + result: boolean; + }>; addToWhitelist(options: { packageName: string; }): Promise<{ @@ -99,6 +102,7 @@ export type ThreatEventActions = { timeSpoofing?: () => any; locationSpoofing?: () => any; unsecureWifi?: () => any; + automation?: () => any; }; export type NativeEvent = { [key: string]: number | string[] | undefined; diff --git a/dist/esm/types/types.js.map b/dist/esm/types/types.js.map index 738eb27..d0d1954 100644 --- a/dist/esm/types/types.js.map +++ b/dist/esm/types/types.js.map @@ -1 +1 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/types/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface TalsecPlugin {\n talsecStart(options: { config: TalsecConfig }): Promise<{ started: boolean }>;\n addListener(listner: string, callback: any): any;\n onInvalidCallback(): void;\n getThreatIdentifiers(): Promise<{ ids: number[] }>;\n getThreatChannelData(): Promise<{ ids: [string, string, string] }>;\n getRaspExecutionStateIdentifiers(): Promise<{ ids: number[] }>;\n getRaspExecutionStateChannelData(): Promise<{ ids: [string, string] }>;\n storeExternalId(options: { data: string }): Promise<{ result: boolean }>;\n addToWhitelist(options: { packageName: string }): Promise<{ result: boolean }>;\n blockScreenCapture(options: { enable: boolean }): Promise<{ result: boolean }>;\n isScreenCaptureBlocked(): Promise<{ result: boolean }>;\n getAppIcon(options: { packageName: string }): Promise<{ result: string }>;\n}\n\nexport type TalsecConfig = {\n androidConfig?: TalsecAndroidConfig;\n iosConfig?: TalsecIosConfig;\n watcherMail: string;\n isProd?: boolean;\n killOnBypass?: boolean;\n};\n\nexport type TalsecAndroidConfig = {\n packageName: string;\n certificateHashes: string[];\n supportedAlternativeStores?: string[];\n malwareConfig?: TalsecMalwareConfig;\n};\n\nexport type TalsecIosConfig = {\n appBundleId: string;\n appTeamId: string;\n};\n\nexport type TalsecMalwareConfig = {\n blacklistedHashes?: string[];\n blacklistedPackageNames?: string[];\n suspiciousPermissions?: string[][];\n whitelistedInstallationSources?: string[];\n};\n\nexport type SuspiciousAppInfo = {\n packageInfo: PackageInfo;\n reason: string;\n permissions?: string[];\n};\n\nexport type PackageInfo = {\n packageName: string;\n appName?: string;\n version?: string;\n appIcon?: string;\n installerStore?: string;\n};\n\nexport type ThreatEventActions = {\n privilegedAccess?: () => any;\n debug?: () => any;\n simulator?: () => any;\n appIntegrity?: () => any;\n unofficialStore?: () => any;\n hooks?: () => any;\n deviceBinding?: () => any;\n deviceID?: () => any;\n passcode?: () => any;\n secureHardwareNotAvailable?: () => any;\n obfuscationIssues?: () => any;\n devMode?: () => any;\n systemVPN?: () => any;\n malware?: (suspiciousApps: SuspiciousAppInfo[]) => any;\n adbEnabled?: () => any;\n screenshot?: () => any;\n screenRecording?: () => any;\n multiInstance?: () => any;\n timeSpoofing?: () => any;\n locationSpoofing?: () => any;\n unsecureWifi?: () => any;\n};\n\nexport type NativeEvent = { [key: string]: number | string[] | undefined };\n\nexport type RaspExecutionStateEventActions = {\n allChecksFinished?: () => any;\n};\n"]} \ No newline at end of file +{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/types/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface TalsecPlugin {\n talsecStart(options: { config: TalsecConfig }): Promise<{ started: boolean }>;\n addListener(listner: string, callback: any): any;\n onInvalidCallback(): void;\n getThreatIdentifiers(): Promise<{ ids: number[] }>;\n getThreatChannelData(): Promise<{ ids: [string, string, string] }>;\n getRaspExecutionStateIdentifiers(): Promise<{ ids: number[] }>;\n getRaspExecutionStateChannelData(): Promise<{ ids: [string, string] }>;\n storeExternalId(options: { data: string }): Promise<{ result: boolean }>;\n removeExternalId(): Promise<{ result: boolean }>;\n addToWhitelist(options: { packageName: string }): Promise<{ result: boolean }>;\n blockScreenCapture(options: { enable: boolean }): Promise<{ result: boolean }>;\n isScreenCaptureBlocked(): Promise<{ result: boolean }>;\n getAppIcon(options: { packageName: string }): Promise<{ result: string }>;\n}\n\nexport type TalsecConfig = {\n androidConfig?: TalsecAndroidConfig;\n iosConfig?: TalsecIosConfig;\n watcherMail: string;\n isProd?: boolean;\n killOnBypass?: boolean;\n};\n\nexport type TalsecAndroidConfig = {\n packageName: string;\n certificateHashes: string[];\n supportedAlternativeStores?: string[];\n malwareConfig?: TalsecMalwareConfig;\n};\n\nexport type TalsecIosConfig = {\n appBundleId: string;\n appTeamId: string;\n};\n\nexport type TalsecMalwareConfig = {\n blacklistedHashes?: string[];\n blacklistedPackageNames?: string[];\n suspiciousPermissions?: string[][];\n whitelistedInstallationSources?: string[];\n};\n\nexport type SuspiciousAppInfo = {\n packageInfo: PackageInfo;\n reason: string;\n permissions?: string[];\n};\n\nexport type PackageInfo = {\n packageName: string;\n appName?: string;\n version?: string;\n appIcon?: string;\n installerStore?: string;\n};\n\nexport type ThreatEventActions = {\n privilegedAccess?: () => any;\n debug?: () => any;\n simulator?: () => any;\n appIntegrity?: () => any;\n unofficialStore?: () => any;\n hooks?: () => any;\n deviceBinding?: () => any;\n deviceID?: () => any;\n passcode?: () => any;\n secureHardwareNotAvailable?: () => any;\n obfuscationIssues?: () => any;\n devMode?: () => any;\n systemVPN?: () => any;\n malware?: (suspiciousApps: SuspiciousAppInfo[]) => any;\n adbEnabled?: () => any;\n screenshot?: () => any;\n screenRecording?: () => any;\n multiInstance?: () => any;\n timeSpoofing?: () => any;\n locationSpoofing?: () => any;\n unsecureWifi?: () => any;\n automation?: () => any;\n};\n\nexport type NativeEvent = { [key: string]: number | string[] | undefined };\n\nexport type RaspExecutionStateEventActions = {\n allChecksFinished?: () => any;\n};\n"]} \ No newline at end of file diff --git a/dist/plugin.cjs.js b/dist/plugin.cjs.js index f1d2686..5b514bf 100644 --- a/dist/plugin.cjs.js +++ b/dist/plugin.cjs.js @@ -25,6 +25,10 @@ const storeExternalId = async (data) => { const { result } = await Talsec.storeExternalId({ data }); return result; }; +const removeExternalId = async () => { + const { result } = await Talsec.removeExternalId(); + return result; +}; const getAppIcon = async (packageName) => { if (core.Capacitor.getPlatform() === 'ios') { return Promise.reject('App icon retrieval for Malware detection is not available on iOS'); @@ -63,6 +67,7 @@ class Threat { this.TimeSpoofing, this.LocationSpoofing, this.UnsecureWifi, + this.Automation, ] : [ this.AppIntegrity, @@ -78,6 +83,7 @@ class Threat { this.UnofficialStore, this.Screenshot, this.ScreenRecording, + this.Automation, ]; } } @@ -102,6 +108,7 @@ Threat.MultiInstance = new Threat(0); Threat.TimeSpoofing = new Threat(0); Threat.LocationSpoofing = new Threat(0); Threat.UnsecureWifi = new Threat(0); +Threat.Automation = new Threat(0); class RaspExecutionState { constructor(value) { @@ -174,11 +181,21 @@ const toSuspiciousAppInfo = (base64Value) => { }; }; +let eventsListener$1 = null; +let isInitializing$1 = false; const registerThreatListener = async (config) => { + if (isInitializing$1) { + return; + } + isInitializing$1 = true; + if (eventsListener$1) { + await eventsListener$1.remove(); + eventsListener$1 = null; + } const [channel, key, malwareKey] = await getThreatChannelData(); await prepareThreatMapping(); - await Talsec.addListener(channel, async (event) => { - var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w; + eventsListener$1 = await Talsec.addListener(channel, async (event) => { + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x; if (event[key] == undefined) { onInvalidCallback(); } @@ -246,11 +263,21 @@ const registerThreatListener = async (config) => { case Threat.UnsecureWifi.value: (_w = config.unsecureWifi) === null || _w === void 0 ? void 0 : _w.call(config); break; + case Threat.Automation.value: + (_x = config.automation) === null || _x === void 0 ? void 0 : _x.call(config); + break; default: onInvalidCallback(); break; } }); + isInitializing$1 = false; +}; +const removeThreatListener = async () => { + if (eventsListener$1) { + await eventsListener$1.remove(); + eventsListener$1 = null; + } }; const getRaspExecutionStateIdentifiers = async () => { @@ -276,10 +303,20 @@ const prepareRaspExecutionStateMapping = async () => { }); }; +let eventsListener = null; +let isInitializing = false; const registerRaspExecutionStateListener = async (config) => { + if (isInitializing) { + return; + } + isInitializing = true; + if (eventsListener) { + await eventsListener.remove(); + eventsListener = null; + } const [channel, key] = await getRaspExecutionStateChannelData(); await prepareRaspExecutionStateMapping(); - await Talsec.addListener(channel, async (event) => { + eventsListener = await Talsec.addListener(channel, async (event) => { var _a; if (event[key] == undefined) { onInvalidCallback(); @@ -293,6 +330,13 @@ const registerRaspExecutionStateListener = async (config) => { break; } }); + isInitializing = false; +}; +const removeRaspExecutionStateListener = async () => { + if (eventsListener) { + await eventsListener.remove(); + eventsListener = null; + } }; const startFreeRASP = async (config, actions, raspExecutionStateActions) => { @@ -311,6 +355,9 @@ exports.isScreenCaptureBlocked = isScreenCaptureBlocked; exports.onInvalidCallback = onInvalidCallback; exports.registerRaspExecutionStateListener = registerRaspExecutionStateListener; exports.registerThreatListener = registerThreatListener; +exports.removeExternalId = removeExternalId; +exports.removeRaspExecutionStateListener = removeRaspExecutionStateListener; +exports.removeThreatListener = removeThreatListener; exports.startFreeRASP = startFreeRASP; exports.storeExternalId = storeExternalId; //# sourceMappingURL=plugin.cjs.js.map diff --git a/dist/plugin.cjs.js.map b/dist/plugin.cjs.js.map index e00aa9e..93a4cd7 100644 --- a/dist/plugin.cjs.js.map +++ b/dist/plugin.cjs.js.map @@ -1 +1 @@ -{"version":3,"file":"plugin.cjs.js","sources":["esm/api/nativeModules.js","esm/api/methods/native.js","esm/models/threat.js","esm/models/raspExecutionState.js","esm/utils/utils.js","esm/channels/threat.js","esm/utils/malware.js","esm/api/listeners/threat.js","esm/channels/raspExecutionState.js","esm/api/listeners/raspExecutionState.js","esm/api/methods/capacitor.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nexport const Talsec = registerPlugin('Freerasp', {});\n//# sourceMappingURL=nativeModules.js.map","import { Capacitor } from '@capacitor/core';\nimport { Talsec } from '../nativeModules';\nexport const addToWhitelist = async (packageName) => {\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};\nexport const blockScreenCapture = async (enable) => {\n const { result } = await Talsec.blockScreenCapture({ enable });\n return result;\n};\nexport const isScreenCaptureBlocked = async () => {\n const { result } = await Talsec.isScreenCaptureBlocked();\n return result;\n};\nexport const storeExternalId = async (data) => {\n const { result } = await Talsec.storeExternalId({ data });\n return result;\n};\nexport const getAppIcon = async (packageName) => {\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};\nexport const onInvalidCallback = () => {\n Talsec.onInvalidCallback();\n};\n//# sourceMappingURL=native.js.map","import { Capacitor } from '@capacitor/core';\nexport class Threat {\n constructor(value) {\n this.value = value;\n }\n static getValues() {\n return Capacitor.getPlatform() === 'android'\n ? [\n this.AppIntegrity,\n this.PrivilegedAccess,\n this.Debug,\n this.Hooks,\n this.Passcode,\n this.Simulator,\n this.SecureHardwareNotAvailable,\n this.SystemVPN,\n this.DeviceBinding,\n this.UnofficialStore,\n this.ObfuscationIssues,\n this.DevMode,\n this.Malware,\n this.ADBEnabled,\n this.Screenshot,\n this.ScreenRecording,\n this.MultiInstance,\n this.TimeSpoofing,\n this.LocationSpoofing,\n this.UnsecureWifi,\n ]\n : [\n this.AppIntegrity,\n this.PrivilegedAccess,\n this.Debug,\n this.Hooks,\n this.Passcode,\n this.Simulator,\n this.SecureHardwareNotAvailable,\n this.SystemVPN,\n this.DeviceBinding,\n this.DeviceID,\n this.UnofficialStore,\n this.Screenshot,\n this.ScreenRecording,\n ];\n }\n}\nThreat.AppIntegrity = new Threat(0);\nThreat.PrivilegedAccess = new Threat(0);\nThreat.Debug = new Threat(0);\nThreat.Hooks = new Threat(0);\nThreat.Passcode = new Threat(0);\nThreat.Simulator = new Threat(0);\nThreat.SecureHardwareNotAvailable = new Threat(0);\nThreat.SystemVPN = new Threat(0);\nThreat.DeviceBinding = new Threat(0);\nThreat.DeviceID = new Threat(0);\nThreat.UnofficialStore = new Threat(0);\nThreat.ObfuscationIssues = new Threat(0);\nThreat.DevMode = new Threat(0);\nThreat.Malware = new Threat(0);\nThreat.ADBEnabled = new Threat(0);\nThreat.Screenshot = new Threat(0);\nThreat.ScreenRecording = new Threat(0);\nThreat.MultiInstance = new Threat(0);\nThreat.TimeSpoofing = new Threat(0);\nThreat.LocationSpoofing = new Threat(0);\nThreat.UnsecureWifi = new Threat(0);\n//# sourceMappingURL=threat.js.map","export class RaspExecutionState {\n constructor(value) {\n this.value = value;\n }\n static getValues() {\n return [this.AllChecksFinished];\n }\n}\nRaspExecutionState.AllChecksFinished = new RaspExecutionState(0);\n//# sourceMappingURL=raspExecutionState.js.map","import { RaspExecutionState } from '../models/raspExecutionState';\nimport { Threat } from '../models/threat';\nexport const getThreatCount = () => {\n return Threat.getValues().length;\n};\nexport const getRaspExecutionStateCount = () => {\n return RaspExecutionState.getValues().length;\n};\nexport const itemsHaveType = (data, expectedType) => {\n return data.every((item) => typeof item === expectedType);\n};\n//# sourceMappingURL=utils.js.map","import { Capacitor } from '@capacitor/core';\nimport { onInvalidCallback } from '../api/methods/native';\nimport { Talsec } from '../api/nativeModules';\nimport { Threat } from '../models/threat';\nimport { getThreatCount, itemsHaveType } from '../utils/utils';\nexport const getThreatIdentifiers = async () => {\n const { ids } = await Talsec.getThreatIdentifiers();\n if (ids.length !== getThreatCount() || !itemsHaveType(ids, 'number')) {\n console.error(`Threat count mismatch: Native ${ids.length} vs JS ${getThreatCount()}. Items are numbers: ${itemsHaveType(ids, 'number')}`);\n // onInvalidCallback();\n }\n return ids;\n};\nexport const getThreatChannelData = async () => {\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};\nexport const prepareThreatMapping = async () => {\n const newValues = await getThreatIdentifiers();\n const threats = Threat.getValues();\n try {\n threats.map((threat, index) => {\n threat.value = newValues[index];\n });\n }\n catch (err) {\n console.error('Could not map Talsec threats', err);\n }\n};\n//# sourceMappingURL=threat.js.map","// parses base64-encoded malware data to SuspiciousAppInfo[]\nexport const parseMalwareData = async (data) => {\n return new Promise((resolve, reject) => {\n try {\n const suspiciousAppData = data.map((entry) => toSuspiciousAppInfo(entry));\n resolve(suspiciousAppData);\n }\n catch (error) {\n reject(`Parsing app data failed: ${error}`);\n }\n });\n};\nexport const toSuspiciousAppInfo = (base64Value) => {\n const data = JSON.parse(atob(base64Value));\n const packageInfo = data.packageInfo;\n return {\n packageInfo,\n reason: data.reason,\n permissions: data.permissions,\n };\n};\n//# sourceMappingURL=malware.js.map","import { getThreatChannelData, prepareThreatMapping } from '../../channels/threat';\nimport { Threat } from '../../models/threat';\nimport { parseMalwareData } from '../../utils/malware';\nimport { onInvalidCallback } from '../methods/native';\nimport { Talsec } from '../nativeModules';\nexport const registerThreatListener = async (config) => {\n const [channel, key, malwareKey] = await getThreatChannelData();\n await prepareThreatMapping();\n await Talsec.addListener(channel, async (event) => {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w;\n if (event[key] == undefined) {\n onInvalidCallback();\n }\n switch (event[key]) {\n case Threat.PrivilegedAccess.value:\n (_a = config.privilegedAccess) === null || _a === void 0 ? void 0 : _a.call(config);\n break;\n case Threat.Debug.value:\n (_b = config.debug) === null || _b === void 0 ? void 0 : _b.call(config);\n break;\n case Threat.Simulator.value:\n (_c = config.simulator) === null || _c === void 0 ? void 0 : _c.call(config);\n break;\n case Threat.AppIntegrity.value:\n (_d = config.appIntegrity) === null || _d === void 0 ? void 0 : _d.call(config);\n break;\n case Threat.UnofficialStore.value:\n (_e = config.unofficialStore) === null || _e === void 0 ? void 0 : _e.call(config);\n break;\n case Threat.Hooks.value:\n (_f = config.hooks) === null || _f === void 0 ? void 0 : _f.call(config);\n break;\n case Threat.DeviceBinding.value:\n (_g = config.deviceBinding) === null || _g === void 0 ? void 0 : _g.call(config);\n break;\n case Threat.Passcode.value:\n (_h = config.passcode) === null || _h === void 0 ? void 0 : _h.call(config);\n break;\n case Threat.SecureHardwareNotAvailable.value:\n (_j = config.secureHardwareNotAvailable) === null || _j === void 0 ? void 0 : _j.call(config);\n break;\n case Threat.ObfuscationIssues.value:\n (_k = config.obfuscationIssues) === null || _k === void 0 ? void 0 : _k.call(config);\n break;\n case Threat.DeviceID.value:\n (_l = config.deviceID) === null || _l === void 0 ? void 0 : _l.call(config);\n break;\n case Threat.DevMode.value:\n (_m = config.devMode) === null || _m === void 0 ? void 0 : _m.call(config);\n break;\n case Threat.SystemVPN.value:\n (_o = config.systemVPN) === null || _o === void 0 ? void 0 : _o.call(config);\n break;\n case Threat.Malware.value:\n (_p = config.malware) === null || _p === void 0 ? void 0 : _p.call(config, await parseMalwareData(event[malwareKey]));\n break;\n case Threat.ADBEnabled.value:\n (_q = config.adbEnabled) === null || _q === void 0 ? void 0 : _q.call(config);\n break;\n case Threat.Screenshot.value:\n (_r = config.screenshot) === null || _r === void 0 ? void 0 : _r.call(config);\n break;\n case Threat.ScreenRecording.value:\n (_s = config.screenRecording) === null || _s === void 0 ? void 0 : _s.call(config);\n break;\n case Threat.MultiInstance.value:\n (_t = config.multiInstance) === null || _t === void 0 ? void 0 : _t.call(config);\n break;\n case Threat.TimeSpoofing.value:\n (_u = config.timeSpoofing) === null || _u === void 0 ? void 0 : _u.call(config);\n break;\n case Threat.LocationSpoofing.value:\n (_v = config.locationSpoofing) === null || _v === void 0 ? void 0 : _v.call(config);\n break;\n case Threat.UnsecureWifi.value:\n (_w = config.unsecureWifi) === null || _w === void 0 ? void 0 : _w.call(config);\n break;\n default:\n onInvalidCallback();\n break;\n }\n });\n};\n//# sourceMappingURL=threat.js.map","import { onInvalidCallback } from '../api/methods/native';\nimport { Talsec } from '../api/nativeModules';\nimport { RaspExecutionState } from '../models/raspExecutionState';\nimport { getRaspExecutionStateCount, itemsHaveType } from '../utils/utils';\nexport const getRaspExecutionStateIdentifiers = async () => {\n const { ids } = await Talsec.getRaspExecutionStateIdentifiers();\n if (ids.length !== getRaspExecutionStateCount() || !itemsHaveType(ids, 'number')) {\n onInvalidCallback();\n }\n return ids;\n};\nexport const getRaspExecutionStateChannelData = async () => {\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};\nexport const prepareRaspExecutionStateMapping = async () => {\n const newValues = await getRaspExecutionStateIdentifiers();\n const threats = RaspExecutionState.getValues();\n threats.map((threat, index) => {\n threat.value = newValues[index];\n });\n};\n//# sourceMappingURL=raspExecutionState.js.map","import { getRaspExecutionStateChannelData, prepareRaspExecutionStateMapping } from '../../channels/raspExecutionState';\nimport { RaspExecutionState } from '../../models/raspExecutionState';\nimport { onInvalidCallback } from '../methods/native';\nimport { Talsec } from '../nativeModules';\nexport const registerRaspExecutionStateListener = async (config) => {\n const [channel, key] = await getRaspExecutionStateChannelData();\n await prepareRaspExecutionStateMapping();\n await Talsec.addListener(channel, async (event) => {\n var _a;\n if (event[key] == undefined) {\n onInvalidCallback();\n }\n switch (event[key]) {\n case RaspExecutionState.AllChecksFinished.value:\n (_a = config.allChecksFinished) === null || _a === void 0 ? void 0 : _a.call(config);\n break;\n default:\n onInvalidCallback();\n break;\n }\n });\n};\n//# sourceMappingURL=raspExecutionState.js.map","import { registerRaspExecutionStateListener } from '../listeners/raspExecutionState';\nimport { registerThreatListener } from '../listeners/threat';\nimport { Talsec } from '../nativeModules';\nexport const startFreeRASP = async (config, actions, raspExecutionStateActions) => {\n await registerThreatListener(actions);\n if (raspExecutionStateActions) {\n await registerRaspExecutionStateListener(raspExecutionStateActions);\n }\n return Talsec.talsecStart({ config });\n};\n//# sourceMappingURL=capacitor.js.map"],"names":["registerPlugin","Capacitor"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"plugin.cjs.js","sources":["esm/api/nativeModules.js","esm/api/methods/native.js","esm/models/threat.js","esm/models/raspExecutionState.js","esm/utils/utils.js","esm/channels/threat.js","esm/utils/malware.js","esm/api/listeners/threat.js","esm/channels/raspExecutionState.js","esm/api/listeners/raspExecutionState.js","esm/api/methods/capacitor.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nexport const Talsec = registerPlugin('Freerasp', {});\n//# sourceMappingURL=nativeModules.js.map","import { Capacitor } from '@capacitor/core';\nimport { Talsec } from '../nativeModules';\nexport const addToWhitelist = async (packageName) => {\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};\nexport const blockScreenCapture = async (enable) => {\n const { result } = await Talsec.blockScreenCapture({ enable });\n return result;\n};\nexport const isScreenCaptureBlocked = async () => {\n const { result } = await Talsec.isScreenCaptureBlocked();\n return result;\n};\nexport const storeExternalId = async (data) => {\n const { result } = await Talsec.storeExternalId({ data });\n return result;\n};\nexport const removeExternalId = async () => {\n const { result } = await Talsec.removeExternalId();\n return result;\n};\nexport const getAppIcon = async (packageName) => {\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};\nexport const onInvalidCallback = () => {\n Talsec.onInvalidCallback();\n};\n//# sourceMappingURL=native.js.map","import { Capacitor } from '@capacitor/core';\nexport class Threat {\n constructor(value) {\n this.value = value;\n }\n static getValues() {\n return Capacitor.getPlatform() === 'android'\n ? [\n this.AppIntegrity,\n this.PrivilegedAccess,\n this.Debug,\n this.Hooks,\n this.Passcode,\n this.Simulator,\n this.SecureHardwareNotAvailable,\n this.SystemVPN,\n this.DeviceBinding,\n this.UnofficialStore,\n this.ObfuscationIssues,\n this.DevMode,\n this.Malware,\n this.ADBEnabled,\n this.Screenshot,\n this.ScreenRecording,\n this.MultiInstance,\n this.TimeSpoofing,\n this.LocationSpoofing,\n this.UnsecureWifi,\n this.Automation,\n ]\n : [\n this.AppIntegrity,\n this.PrivilegedAccess,\n this.Debug,\n this.Hooks,\n this.Passcode,\n this.Simulator,\n this.SecureHardwareNotAvailable,\n this.SystemVPN,\n this.DeviceBinding,\n this.DeviceID,\n this.UnofficialStore,\n this.Screenshot,\n this.ScreenRecording,\n this.Automation,\n ];\n }\n}\nThreat.AppIntegrity = new Threat(0);\nThreat.PrivilegedAccess = new Threat(0);\nThreat.Debug = new Threat(0);\nThreat.Hooks = new Threat(0);\nThreat.Passcode = new Threat(0);\nThreat.Simulator = new Threat(0);\nThreat.SecureHardwareNotAvailable = new Threat(0);\nThreat.SystemVPN = new Threat(0);\nThreat.DeviceBinding = new Threat(0);\nThreat.DeviceID = new Threat(0);\nThreat.UnofficialStore = new Threat(0);\nThreat.ObfuscationIssues = new Threat(0);\nThreat.DevMode = new Threat(0);\nThreat.Malware = new Threat(0);\nThreat.ADBEnabled = new Threat(0);\nThreat.Screenshot = new Threat(0);\nThreat.ScreenRecording = new Threat(0);\nThreat.MultiInstance = new Threat(0);\nThreat.TimeSpoofing = new Threat(0);\nThreat.LocationSpoofing = new Threat(0);\nThreat.UnsecureWifi = new Threat(0);\nThreat.Automation = new Threat(0);\n//# sourceMappingURL=threat.js.map","export class RaspExecutionState {\n constructor(value) {\n this.value = value;\n }\n static getValues() {\n return [this.AllChecksFinished];\n }\n}\nRaspExecutionState.AllChecksFinished = new RaspExecutionState(0);\n//# sourceMappingURL=raspExecutionState.js.map","import { RaspExecutionState } from '../models/raspExecutionState';\nimport { Threat } from '../models/threat';\nexport const getThreatCount = () => {\n return Threat.getValues().length;\n};\nexport const getRaspExecutionStateCount = () => {\n return RaspExecutionState.getValues().length;\n};\nexport const itemsHaveType = (data, expectedType) => {\n return data.every((item) => typeof item === expectedType);\n};\n//# sourceMappingURL=utils.js.map","import { Capacitor } from '@capacitor/core';\nimport { onInvalidCallback } from '../api/methods/native';\nimport { Talsec } from '../api/nativeModules';\nimport { Threat } from '../models/threat';\nimport { getThreatCount, itemsHaveType } from '../utils/utils';\nexport const getThreatIdentifiers = async () => {\n const { ids } = await Talsec.getThreatIdentifiers();\n if (ids.length !== getThreatCount() || !itemsHaveType(ids, 'number')) {\n console.error(`Threat count mismatch: Native ${ids.length} vs JS ${getThreatCount()}. Items are numbers: ${itemsHaveType(ids, 'number')}`);\n // onInvalidCallback();\n }\n return ids;\n};\nexport const getThreatChannelData = async () => {\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};\nexport const prepareThreatMapping = async () => {\n const newValues = await getThreatIdentifiers();\n const threats = Threat.getValues();\n try {\n threats.map((threat, index) => {\n threat.value = newValues[index];\n });\n }\n catch (err) {\n console.error('Could not map Talsec threats', err);\n }\n};\n//# sourceMappingURL=threat.js.map","// parses base64-encoded malware data to SuspiciousAppInfo[]\nexport const parseMalwareData = async (data) => {\n return new Promise((resolve, reject) => {\n try {\n const suspiciousAppData = data.map((entry) => toSuspiciousAppInfo(entry));\n resolve(suspiciousAppData);\n }\n catch (error) {\n reject(`Parsing app data failed: ${error}`);\n }\n });\n};\nexport const toSuspiciousAppInfo = (base64Value) => {\n const data = JSON.parse(atob(base64Value));\n const packageInfo = data.packageInfo;\n return {\n packageInfo,\n reason: data.reason,\n permissions: data.permissions,\n };\n};\n//# sourceMappingURL=malware.js.map","import { getThreatChannelData, prepareThreatMapping } from '../../channels/threat';\nimport { Threat } from '../../models/threat';\nimport { parseMalwareData } from '../../utils/malware';\nimport { onInvalidCallback } from '../methods/native';\nimport { Talsec } from '../nativeModules';\nlet eventsListener = null;\nlet isInitializing = false;\nexport const registerThreatListener = async (config) => {\n if (isInitializing) {\n return;\n }\n isInitializing = true;\n if (eventsListener) {\n await eventsListener.remove();\n eventsListener = null;\n }\n const [channel, key, malwareKey] = await getThreatChannelData();\n await prepareThreatMapping();\n eventsListener = await Talsec.addListener(channel, async (event) => {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;\n if (event[key] == undefined) {\n onInvalidCallback();\n }\n switch (event[key]) {\n case Threat.PrivilegedAccess.value:\n (_a = config.privilegedAccess) === null || _a === void 0 ? void 0 : _a.call(config);\n break;\n case Threat.Debug.value:\n (_b = config.debug) === null || _b === void 0 ? void 0 : _b.call(config);\n break;\n case Threat.Simulator.value:\n (_c = config.simulator) === null || _c === void 0 ? void 0 : _c.call(config);\n break;\n case Threat.AppIntegrity.value:\n (_d = config.appIntegrity) === null || _d === void 0 ? void 0 : _d.call(config);\n break;\n case Threat.UnofficialStore.value:\n (_e = config.unofficialStore) === null || _e === void 0 ? void 0 : _e.call(config);\n break;\n case Threat.Hooks.value:\n (_f = config.hooks) === null || _f === void 0 ? void 0 : _f.call(config);\n break;\n case Threat.DeviceBinding.value:\n (_g = config.deviceBinding) === null || _g === void 0 ? void 0 : _g.call(config);\n break;\n case Threat.Passcode.value:\n (_h = config.passcode) === null || _h === void 0 ? void 0 : _h.call(config);\n break;\n case Threat.SecureHardwareNotAvailable.value:\n (_j = config.secureHardwareNotAvailable) === null || _j === void 0 ? void 0 : _j.call(config);\n break;\n case Threat.ObfuscationIssues.value:\n (_k = config.obfuscationIssues) === null || _k === void 0 ? void 0 : _k.call(config);\n break;\n case Threat.DeviceID.value:\n (_l = config.deviceID) === null || _l === void 0 ? void 0 : _l.call(config);\n break;\n case Threat.DevMode.value:\n (_m = config.devMode) === null || _m === void 0 ? void 0 : _m.call(config);\n break;\n case Threat.SystemVPN.value:\n (_o = config.systemVPN) === null || _o === void 0 ? void 0 : _o.call(config);\n break;\n case Threat.Malware.value:\n (_p = config.malware) === null || _p === void 0 ? void 0 : _p.call(config, await parseMalwareData(event[malwareKey]));\n break;\n case Threat.ADBEnabled.value:\n (_q = config.adbEnabled) === null || _q === void 0 ? void 0 : _q.call(config);\n break;\n case Threat.Screenshot.value:\n (_r = config.screenshot) === null || _r === void 0 ? void 0 : _r.call(config);\n break;\n case Threat.ScreenRecording.value:\n (_s = config.screenRecording) === null || _s === void 0 ? void 0 : _s.call(config);\n break;\n case Threat.MultiInstance.value:\n (_t = config.multiInstance) === null || _t === void 0 ? void 0 : _t.call(config);\n break;\n case Threat.TimeSpoofing.value:\n (_u = config.timeSpoofing) === null || _u === void 0 ? void 0 : _u.call(config);\n break;\n case Threat.LocationSpoofing.value:\n (_v = config.locationSpoofing) === null || _v === void 0 ? void 0 : _v.call(config);\n break;\n case Threat.UnsecureWifi.value:\n (_w = config.unsecureWifi) === null || _w === void 0 ? void 0 : _w.call(config);\n break;\n case Threat.Automation.value:\n (_x = config.automation) === null || _x === void 0 ? void 0 : _x.call(config);\n break;\n default:\n onInvalidCallback();\n break;\n }\n });\n isInitializing = false;\n};\nexport const removeThreatListener = async () => {\n if (eventsListener) {\n await eventsListener.remove();\n eventsListener = null;\n }\n};\n//# sourceMappingURL=threat.js.map","import { onInvalidCallback } from '../api/methods/native';\nimport { Talsec } from '../api/nativeModules';\nimport { RaspExecutionState } from '../models/raspExecutionState';\nimport { getRaspExecutionStateCount, itemsHaveType } from '../utils/utils';\nexport const getRaspExecutionStateIdentifiers = async () => {\n const { ids } = await Talsec.getRaspExecutionStateIdentifiers();\n if (ids.length !== getRaspExecutionStateCount() || !itemsHaveType(ids, 'number')) {\n onInvalidCallback();\n }\n return ids;\n};\nexport const getRaspExecutionStateChannelData = async () => {\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};\nexport const prepareRaspExecutionStateMapping = async () => {\n const newValues = await getRaspExecutionStateIdentifiers();\n const threats = RaspExecutionState.getValues();\n threats.map((threat, index) => {\n threat.value = newValues[index];\n });\n};\n//# sourceMappingURL=raspExecutionState.js.map","import { getRaspExecutionStateChannelData, prepareRaspExecutionStateMapping } from '../../channels/raspExecutionState';\nimport { RaspExecutionState } from '../../models/raspExecutionState';\nimport { onInvalidCallback } from '../methods/native';\nimport { Talsec } from '../nativeModules';\nlet eventsListener = null;\nlet isInitializing = false;\nexport const registerRaspExecutionStateListener = async (config) => {\n if (isInitializing) {\n return;\n }\n isInitializing = true;\n if (eventsListener) {\n await eventsListener.remove();\n eventsListener = null;\n }\n const [channel, key] = await getRaspExecutionStateChannelData();\n await prepareRaspExecutionStateMapping();\n eventsListener = await Talsec.addListener(channel, async (event) => {\n var _a;\n if (event[key] == undefined) {\n onInvalidCallback();\n }\n switch (event[key]) {\n case RaspExecutionState.AllChecksFinished.value:\n (_a = config.allChecksFinished) === null || _a === void 0 ? void 0 : _a.call(config);\n break;\n default:\n onInvalidCallback();\n break;\n }\n });\n isInitializing = false;\n};\nexport const removeRaspExecutionStateListener = async () => {\n if (eventsListener) {\n await eventsListener.remove();\n eventsListener = null;\n }\n};\n//# sourceMappingURL=raspExecutionState.js.map","import { registerRaspExecutionStateListener } from '../listeners/raspExecutionState';\nimport { registerThreatListener } from '../listeners/threat';\nimport { Talsec } from '../nativeModules';\nexport const startFreeRASP = async (config, actions, raspExecutionStateActions) => {\n await registerThreatListener(actions);\n if (raspExecutionStateActions) {\n await registerRaspExecutionStateListener(raspExecutionStateActions);\n }\n return Talsec.talsecStart({ config });\n};\n//# sourceMappingURL=capacitor.js.map"],"names":["registerPlugin","Capacitor","eventsListener","isInitializing"],"mappings":"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"} \ No newline at end of file diff --git a/dist/plugin.js b/dist/plugin.js index c0f2319..e16610f 100644 --- a/dist/plugin.js +++ b/dist/plugin.js @@ -22,6 +22,10 @@ var capacitorFreerasp = (function (exports, core) { const { result } = await Talsec.storeExternalId({ data }); return result; }; + const removeExternalId = async () => { + const { result } = await Talsec.removeExternalId(); + return result; + }; const getAppIcon = async (packageName) => { if (core.Capacitor.getPlatform() === 'ios') { return Promise.reject('App icon retrieval for Malware detection is not available on iOS'); @@ -60,6 +64,7 @@ var capacitorFreerasp = (function (exports, core) { this.TimeSpoofing, this.LocationSpoofing, this.UnsecureWifi, + this.Automation, ] : [ this.AppIntegrity, @@ -75,6 +80,7 @@ var capacitorFreerasp = (function (exports, core) { this.UnofficialStore, this.Screenshot, this.ScreenRecording, + this.Automation, ]; } } @@ -99,6 +105,7 @@ var capacitorFreerasp = (function (exports, core) { Threat.TimeSpoofing = new Threat(0); Threat.LocationSpoofing = new Threat(0); Threat.UnsecureWifi = new Threat(0); + Threat.Automation = new Threat(0); class RaspExecutionState { constructor(value) { @@ -171,11 +178,21 @@ var capacitorFreerasp = (function (exports, core) { }; }; + let eventsListener$1 = null; + let isInitializing$1 = false; const registerThreatListener = async (config) => { + if (isInitializing$1) { + return; + } + isInitializing$1 = true; + if (eventsListener$1) { + await eventsListener$1.remove(); + eventsListener$1 = null; + } const [channel, key, malwareKey] = await getThreatChannelData(); await prepareThreatMapping(); - await Talsec.addListener(channel, async (event) => { - var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w; + eventsListener$1 = await Talsec.addListener(channel, async (event) => { + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x; if (event[key] == undefined) { onInvalidCallback(); } @@ -243,11 +260,21 @@ var capacitorFreerasp = (function (exports, core) { case Threat.UnsecureWifi.value: (_w = config.unsecureWifi) === null || _w === void 0 ? void 0 : _w.call(config); break; + case Threat.Automation.value: + (_x = config.automation) === null || _x === void 0 ? void 0 : _x.call(config); + break; default: onInvalidCallback(); break; } }); + isInitializing$1 = false; + }; + const removeThreatListener = async () => { + if (eventsListener$1) { + await eventsListener$1.remove(); + eventsListener$1 = null; + } }; const getRaspExecutionStateIdentifiers = async () => { @@ -273,10 +300,20 @@ var capacitorFreerasp = (function (exports, core) { }); }; + let eventsListener = null; + let isInitializing = false; const registerRaspExecutionStateListener = async (config) => { + if (isInitializing) { + return; + } + isInitializing = true; + if (eventsListener) { + await eventsListener.remove(); + eventsListener = null; + } const [channel, key] = await getRaspExecutionStateChannelData(); await prepareRaspExecutionStateMapping(); - await Talsec.addListener(channel, async (event) => { + eventsListener = await Talsec.addListener(channel, async (event) => { var _a; if (event[key] == undefined) { onInvalidCallback(); @@ -290,6 +327,13 @@ var capacitorFreerasp = (function (exports, core) { break; } }); + isInitializing = false; + }; + const removeRaspExecutionStateListener = async () => { + if (eventsListener) { + await eventsListener.remove(); + eventsListener = null; + } }; const startFreeRASP = async (config, actions, raspExecutionStateActions) => { @@ -308,6 +352,9 @@ var capacitorFreerasp = (function (exports, core) { exports.onInvalidCallback = onInvalidCallback; exports.registerRaspExecutionStateListener = registerRaspExecutionStateListener; exports.registerThreatListener = registerThreatListener; + exports.removeExternalId = removeExternalId; + exports.removeRaspExecutionStateListener = removeRaspExecutionStateListener; + exports.removeThreatListener = removeThreatListener; exports.startFreeRASP = startFreeRASP; exports.storeExternalId = storeExternalId; diff --git a/dist/plugin.js.map b/dist/plugin.js.map index 3c5b129..550a0b8 100644 --- a/dist/plugin.js.map +++ b/dist/plugin.js.map @@ -1 +1 @@ -{"version":3,"file":"plugin.js","sources":["esm/api/nativeModules.js","esm/api/methods/native.js","esm/models/threat.js","esm/models/raspExecutionState.js","esm/utils/utils.js","esm/channels/threat.js","esm/utils/malware.js","esm/api/listeners/threat.js","esm/channels/raspExecutionState.js","esm/api/listeners/raspExecutionState.js","esm/api/methods/capacitor.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nexport const Talsec = registerPlugin('Freerasp', {});\n//# sourceMappingURL=nativeModules.js.map","import { Capacitor } from '@capacitor/core';\nimport { Talsec } from '../nativeModules';\nexport const addToWhitelist = async (packageName) => {\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};\nexport const blockScreenCapture = async (enable) => {\n const { result } = await Talsec.blockScreenCapture({ enable });\n return result;\n};\nexport const isScreenCaptureBlocked = async () => {\n const { result } = await Talsec.isScreenCaptureBlocked();\n return result;\n};\nexport const storeExternalId = async (data) => {\n const { result } = await Talsec.storeExternalId({ data });\n return result;\n};\nexport const getAppIcon = async (packageName) => {\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};\nexport const onInvalidCallback = () => {\n Talsec.onInvalidCallback();\n};\n//# sourceMappingURL=native.js.map","import { Capacitor } from '@capacitor/core';\nexport class Threat {\n constructor(value) {\n this.value = value;\n }\n static getValues() {\n return Capacitor.getPlatform() === 'android'\n ? [\n this.AppIntegrity,\n this.PrivilegedAccess,\n this.Debug,\n this.Hooks,\n this.Passcode,\n this.Simulator,\n this.SecureHardwareNotAvailable,\n this.SystemVPN,\n this.DeviceBinding,\n this.UnofficialStore,\n this.ObfuscationIssues,\n this.DevMode,\n this.Malware,\n this.ADBEnabled,\n this.Screenshot,\n this.ScreenRecording,\n this.MultiInstance,\n this.TimeSpoofing,\n this.LocationSpoofing,\n this.UnsecureWifi,\n ]\n : [\n this.AppIntegrity,\n this.PrivilegedAccess,\n this.Debug,\n this.Hooks,\n this.Passcode,\n this.Simulator,\n this.SecureHardwareNotAvailable,\n this.SystemVPN,\n this.DeviceBinding,\n this.DeviceID,\n this.UnofficialStore,\n this.Screenshot,\n this.ScreenRecording,\n ];\n }\n}\nThreat.AppIntegrity = new Threat(0);\nThreat.PrivilegedAccess = new Threat(0);\nThreat.Debug = new Threat(0);\nThreat.Hooks = new Threat(0);\nThreat.Passcode = new Threat(0);\nThreat.Simulator = new Threat(0);\nThreat.SecureHardwareNotAvailable = new Threat(0);\nThreat.SystemVPN = new Threat(0);\nThreat.DeviceBinding = new Threat(0);\nThreat.DeviceID = new Threat(0);\nThreat.UnofficialStore = new Threat(0);\nThreat.ObfuscationIssues = new Threat(0);\nThreat.DevMode = new Threat(0);\nThreat.Malware = new Threat(0);\nThreat.ADBEnabled = new Threat(0);\nThreat.Screenshot = new Threat(0);\nThreat.ScreenRecording = new Threat(0);\nThreat.MultiInstance = new Threat(0);\nThreat.TimeSpoofing = new Threat(0);\nThreat.LocationSpoofing = new Threat(0);\nThreat.UnsecureWifi = new Threat(0);\n//# sourceMappingURL=threat.js.map","export class RaspExecutionState {\n constructor(value) {\n this.value = value;\n }\n static getValues() {\n return [this.AllChecksFinished];\n }\n}\nRaspExecutionState.AllChecksFinished = new RaspExecutionState(0);\n//# sourceMappingURL=raspExecutionState.js.map","import { RaspExecutionState } from '../models/raspExecutionState';\nimport { Threat } from '../models/threat';\nexport const getThreatCount = () => {\n return Threat.getValues().length;\n};\nexport const getRaspExecutionStateCount = () => {\n return RaspExecutionState.getValues().length;\n};\nexport const itemsHaveType = (data, expectedType) => {\n return data.every((item) => typeof item === expectedType);\n};\n//# sourceMappingURL=utils.js.map","import { Capacitor } from '@capacitor/core';\nimport { onInvalidCallback } from '../api/methods/native';\nimport { Talsec } from '../api/nativeModules';\nimport { Threat } from '../models/threat';\nimport { getThreatCount, itemsHaveType } from '../utils/utils';\nexport const getThreatIdentifiers = async () => {\n const { ids } = await Talsec.getThreatIdentifiers();\n if (ids.length !== getThreatCount() || !itemsHaveType(ids, 'number')) {\n console.error(`Threat count mismatch: Native ${ids.length} vs JS ${getThreatCount()}. Items are numbers: ${itemsHaveType(ids, 'number')}`);\n // onInvalidCallback();\n }\n return ids;\n};\nexport const getThreatChannelData = async () => {\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};\nexport const prepareThreatMapping = async () => {\n const newValues = await getThreatIdentifiers();\n const threats = Threat.getValues();\n try {\n threats.map((threat, index) => {\n threat.value = newValues[index];\n });\n }\n catch (err) {\n console.error('Could not map Talsec threats', err);\n }\n};\n//# sourceMappingURL=threat.js.map","// parses base64-encoded malware data to SuspiciousAppInfo[]\nexport const parseMalwareData = async (data) => {\n return new Promise((resolve, reject) => {\n try {\n const suspiciousAppData = data.map((entry) => toSuspiciousAppInfo(entry));\n resolve(suspiciousAppData);\n }\n catch (error) {\n reject(`Parsing app data failed: ${error}`);\n }\n });\n};\nexport const toSuspiciousAppInfo = (base64Value) => {\n const data = JSON.parse(atob(base64Value));\n const packageInfo = data.packageInfo;\n return {\n packageInfo,\n reason: data.reason,\n permissions: data.permissions,\n };\n};\n//# sourceMappingURL=malware.js.map","import { getThreatChannelData, prepareThreatMapping } from '../../channels/threat';\nimport { Threat } from '../../models/threat';\nimport { parseMalwareData } from '../../utils/malware';\nimport { onInvalidCallback } from '../methods/native';\nimport { Talsec } from '../nativeModules';\nexport const registerThreatListener = async (config) => {\n const [channel, key, malwareKey] = await getThreatChannelData();\n await prepareThreatMapping();\n await Talsec.addListener(channel, async (event) => {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w;\n if (event[key] == undefined) {\n onInvalidCallback();\n }\n switch (event[key]) {\n case Threat.PrivilegedAccess.value:\n (_a = config.privilegedAccess) === null || _a === void 0 ? void 0 : _a.call(config);\n break;\n case Threat.Debug.value:\n (_b = config.debug) === null || _b === void 0 ? void 0 : _b.call(config);\n break;\n case Threat.Simulator.value:\n (_c = config.simulator) === null || _c === void 0 ? void 0 : _c.call(config);\n break;\n case Threat.AppIntegrity.value:\n (_d = config.appIntegrity) === null || _d === void 0 ? void 0 : _d.call(config);\n break;\n case Threat.UnofficialStore.value:\n (_e = config.unofficialStore) === null || _e === void 0 ? void 0 : _e.call(config);\n break;\n case Threat.Hooks.value:\n (_f = config.hooks) === null || _f === void 0 ? void 0 : _f.call(config);\n break;\n case Threat.DeviceBinding.value:\n (_g = config.deviceBinding) === null || _g === void 0 ? void 0 : _g.call(config);\n break;\n case Threat.Passcode.value:\n (_h = config.passcode) === null || _h === void 0 ? void 0 : _h.call(config);\n break;\n case Threat.SecureHardwareNotAvailable.value:\n (_j = config.secureHardwareNotAvailable) === null || _j === void 0 ? void 0 : _j.call(config);\n break;\n case Threat.ObfuscationIssues.value:\n (_k = config.obfuscationIssues) === null || _k === void 0 ? void 0 : _k.call(config);\n break;\n case Threat.DeviceID.value:\n (_l = config.deviceID) === null || _l === void 0 ? void 0 : _l.call(config);\n break;\n case Threat.DevMode.value:\n (_m = config.devMode) === null || _m === void 0 ? void 0 : _m.call(config);\n break;\n case Threat.SystemVPN.value:\n (_o = config.systemVPN) === null || _o === void 0 ? void 0 : _o.call(config);\n break;\n case Threat.Malware.value:\n (_p = config.malware) === null || _p === void 0 ? void 0 : _p.call(config, await parseMalwareData(event[malwareKey]));\n break;\n case Threat.ADBEnabled.value:\n (_q = config.adbEnabled) === null || _q === void 0 ? void 0 : _q.call(config);\n break;\n case Threat.Screenshot.value:\n (_r = config.screenshot) === null || _r === void 0 ? void 0 : _r.call(config);\n break;\n case Threat.ScreenRecording.value:\n (_s = config.screenRecording) === null || _s === void 0 ? void 0 : _s.call(config);\n break;\n case Threat.MultiInstance.value:\n (_t = config.multiInstance) === null || _t === void 0 ? void 0 : _t.call(config);\n break;\n case Threat.TimeSpoofing.value:\n (_u = config.timeSpoofing) === null || _u === void 0 ? void 0 : _u.call(config);\n break;\n case Threat.LocationSpoofing.value:\n (_v = config.locationSpoofing) === null || _v === void 0 ? void 0 : _v.call(config);\n break;\n case Threat.UnsecureWifi.value:\n (_w = config.unsecureWifi) === null || _w === void 0 ? void 0 : _w.call(config);\n break;\n default:\n onInvalidCallback();\n break;\n }\n });\n};\n//# sourceMappingURL=threat.js.map","import { onInvalidCallback } from '../api/methods/native';\nimport { Talsec } from '../api/nativeModules';\nimport { RaspExecutionState } from '../models/raspExecutionState';\nimport { getRaspExecutionStateCount, itemsHaveType } from '../utils/utils';\nexport const getRaspExecutionStateIdentifiers = async () => {\n const { ids } = await Talsec.getRaspExecutionStateIdentifiers();\n if (ids.length !== getRaspExecutionStateCount() || !itemsHaveType(ids, 'number')) {\n onInvalidCallback();\n }\n return ids;\n};\nexport const getRaspExecutionStateChannelData = async () => {\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};\nexport const prepareRaspExecutionStateMapping = async () => {\n const newValues = await getRaspExecutionStateIdentifiers();\n const threats = RaspExecutionState.getValues();\n threats.map((threat, index) => {\n threat.value = newValues[index];\n });\n};\n//# sourceMappingURL=raspExecutionState.js.map","import { getRaspExecutionStateChannelData, prepareRaspExecutionStateMapping } from '../../channels/raspExecutionState';\nimport { RaspExecutionState } from '../../models/raspExecutionState';\nimport { onInvalidCallback } from '../methods/native';\nimport { Talsec } from '../nativeModules';\nexport const registerRaspExecutionStateListener = async (config) => {\n const [channel, key] = await getRaspExecutionStateChannelData();\n await prepareRaspExecutionStateMapping();\n await Talsec.addListener(channel, async (event) => {\n var _a;\n if (event[key] == undefined) {\n onInvalidCallback();\n }\n switch (event[key]) {\n case RaspExecutionState.AllChecksFinished.value:\n (_a = config.allChecksFinished) === null || _a === void 0 ? void 0 : _a.call(config);\n break;\n default:\n onInvalidCallback();\n break;\n }\n });\n};\n//# sourceMappingURL=raspExecutionState.js.map","import { registerRaspExecutionStateListener } from '../listeners/raspExecutionState';\nimport { registerThreatListener } from '../listeners/threat';\nimport { Talsec } from '../nativeModules';\nexport const startFreeRASP = async (config, actions, raspExecutionStateActions) => {\n await registerThreatListener(actions);\n if (raspExecutionStateActions) {\n await registerRaspExecutionStateListener(raspExecutionStateActions);\n }\n return Talsec.talsecStart({ config });\n};\n//# sourceMappingURL=capacitor.js.map"],"names":["registerPlugin","Capacitor"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"plugin.js","sources":["esm/api/nativeModules.js","esm/api/methods/native.js","esm/models/threat.js","esm/models/raspExecutionState.js","esm/utils/utils.js","esm/channels/threat.js","esm/utils/malware.js","esm/api/listeners/threat.js","esm/channels/raspExecutionState.js","esm/api/listeners/raspExecutionState.js","esm/api/methods/capacitor.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nexport const Talsec = registerPlugin('Freerasp', {});\n//# sourceMappingURL=nativeModules.js.map","import { Capacitor } from '@capacitor/core';\nimport { Talsec } from '../nativeModules';\nexport const addToWhitelist = async (packageName) => {\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};\nexport const blockScreenCapture = async (enable) => {\n const { result } = await Talsec.blockScreenCapture({ enable });\n return result;\n};\nexport const isScreenCaptureBlocked = async () => {\n const { result } = await Talsec.isScreenCaptureBlocked();\n return result;\n};\nexport const storeExternalId = async (data) => {\n const { result } = await Talsec.storeExternalId({ data });\n return result;\n};\nexport const removeExternalId = async () => {\n const { result } = await Talsec.removeExternalId();\n return result;\n};\nexport const getAppIcon = async (packageName) => {\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};\nexport const onInvalidCallback = () => {\n Talsec.onInvalidCallback();\n};\n//# sourceMappingURL=native.js.map","import { Capacitor } from '@capacitor/core';\nexport class Threat {\n constructor(value) {\n this.value = value;\n }\n static getValues() {\n return Capacitor.getPlatform() === 'android'\n ? [\n this.AppIntegrity,\n this.PrivilegedAccess,\n this.Debug,\n this.Hooks,\n this.Passcode,\n this.Simulator,\n this.SecureHardwareNotAvailable,\n this.SystemVPN,\n this.DeviceBinding,\n this.UnofficialStore,\n this.ObfuscationIssues,\n this.DevMode,\n this.Malware,\n this.ADBEnabled,\n this.Screenshot,\n this.ScreenRecording,\n this.MultiInstance,\n this.TimeSpoofing,\n this.LocationSpoofing,\n this.UnsecureWifi,\n this.Automation,\n ]\n : [\n this.AppIntegrity,\n this.PrivilegedAccess,\n this.Debug,\n this.Hooks,\n this.Passcode,\n this.Simulator,\n this.SecureHardwareNotAvailable,\n this.SystemVPN,\n this.DeviceBinding,\n this.DeviceID,\n this.UnofficialStore,\n this.Screenshot,\n this.ScreenRecording,\n this.Automation,\n ];\n }\n}\nThreat.AppIntegrity = new Threat(0);\nThreat.PrivilegedAccess = new Threat(0);\nThreat.Debug = new Threat(0);\nThreat.Hooks = new Threat(0);\nThreat.Passcode = new Threat(0);\nThreat.Simulator = new Threat(0);\nThreat.SecureHardwareNotAvailable = new Threat(0);\nThreat.SystemVPN = new Threat(0);\nThreat.DeviceBinding = new Threat(0);\nThreat.DeviceID = new Threat(0);\nThreat.UnofficialStore = new Threat(0);\nThreat.ObfuscationIssues = new Threat(0);\nThreat.DevMode = new Threat(0);\nThreat.Malware = new Threat(0);\nThreat.ADBEnabled = new Threat(0);\nThreat.Screenshot = new Threat(0);\nThreat.ScreenRecording = new Threat(0);\nThreat.MultiInstance = new Threat(0);\nThreat.TimeSpoofing = new Threat(0);\nThreat.LocationSpoofing = new Threat(0);\nThreat.UnsecureWifi = new Threat(0);\nThreat.Automation = new Threat(0);\n//# sourceMappingURL=threat.js.map","export class RaspExecutionState {\n constructor(value) {\n this.value = value;\n }\n static getValues() {\n return [this.AllChecksFinished];\n }\n}\nRaspExecutionState.AllChecksFinished = new RaspExecutionState(0);\n//# sourceMappingURL=raspExecutionState.js.map","import { RaspExecutionState } from '../models/raspExecutionState';\nimport { Threat } from '../models/threat';\nexport const getThreatCount = () => {\n return Threat.getValues().length;\n};\nexport const getRaspExecutionStateCount = () => {\n return RaspExecutionState.getValues().length;\n};\nexport const itemsHaveType = (data, expectedType) => {\n return data.every((item) => typeof item === expectedType);\n};\n//# sourceMappingURL=utils.js.map","import { Capacitor } from '@capacitor/core';\nimport { onInvalidCallback } from '../api/methods/native';\nimport { Talsec } from '../api/nativeModules';\nimport { Threat } from '../models/threat';\nimport { getThreatCount, itemsHaveType } from '../utils/utils';\nexport const getThreatIdentifiers = async () => {\n const { ids } = await Talsec.getThreatIdentifiers();\n if (ids.length !== getThreatCount() || !itemsHaveType(ids, 'number')) {\n console.error(`Threat count mismatch: Native ${ids.length} vs JS ${getThreatCount()}. Items are numbers: ${itemsHaveType(ids, 'number')}`);\n // onInvalidCallback();\n }\n return ids;\n};\nexport const getThreatChannelData = async () => {\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};\nexport const prepareThreatMapping = async () => {\n const newValues = await getThreatIdentifiers();\n const threats = Threat.getValues();\n try {\n threats.map((threat, index) => {\n threat.value = newValues[index];\n });\n }\n catch (err) {\n console.error('Could not map Talsec threats', err);\n }\n};\n//# sourceMappingURL=threat.js.map","// parses base64-encoded malware data to SuspiciousAppInfo[]\nexport const parseMalwareData = async (data) => {\n return new Promise((resolve, reject) => {\n try {\n const suspiciousAppData = data.map((entry) => toSuspiciousAppInfo(entry));\n resolve(suspiciousAppData);\n }\n catch (error) {\n reject(`Parsing app data failed: ${error}`);\n }\n });\n};\nexport const toSuspiciousAppInfo = (base64Value) => {\n const data = JSON.parse(atob(base64Value));\n const packageInfo = data.packageInfo;\n return {\n packageInfo,\n reason: data.reason,\n permissions: data.permissions,\n };\n};\n//# sourceMappingURL=malware.js.map","import { getThreatChannelData, prepareThreatMapping } from '../../channels/threat';\nimport { Threat } from '../../models/threat';\nimport { parseMalwareData } from '../../utils/malware';\nimport { onInvalidCallback } from '../methods/native';\nimport { Talsec } from '../nativeModules';\nlet eventsListener = null;\nlet isInitializing = false;\nexport const registerThreatListener = async (config) => {\n if (isInitializing) {\n return;\n }\n isInitializing = true;\n if (eventsListener) {\n await eventsListener.remove();\n eventsListener = null;\n }\n const [channel, key, malwareKey] = await getThreatChannelData();\n await prepareThreatMapping();\n eventsListener = await Talsec.addListener(channel, async (event) => {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;\n if (event[key] == undefined) {\n onInvalidCallback();\n }\n switch (event[key]) {\n case Threat.PrivilegedAccess.value:\n (_a = config.privilegedAccess) === null || _a === void 0 ? void 0 : _a.call(config);\n break;\n case Threat.Debug.value:\n (_b = config.debug) === null || _b === void 0 ? void 0 : _b.call(config);\n break;\n case Threat.Simulator.value:\n (_c = config.simulator) === null || _c === void 0 ? void 0 : _c.call(config);\n break;\n case Threat.AppIntegrity.value:\n (_d = config.appIntegrity) === null || _d === void 0 ? void 0 : _d.call(config);\n break;\n case Threat.UnofficialStore.value:\n (_e = config.unofficialStore) === null || _e === void 0 ? void 0 : _e.call(config);\n break;\n case Threat.Hooks.value:\n (_f = config.hooks) === null || _f === void 0 ? void 0 : _f.call(config);\n break;\n case Threat.DeviceBinding.value:\n (_g = config.deviceBinding) === null || _g === void 0 ? void 0 : _g.call(config);\n break;\n case Threat.Passcode.value:\n (_h = config.passcode) === null || _h === void 0 ? void 0 : _h.call(config);\n break;\n case Threat.SecureHardwareNotAvailable.value:\n (_j = config.secureHardwareNotAvailable) === null || _j === void 0 ? void 0 : _j.call(config);\n break;\n case Threat.ObfuscationIssues.value:\n (_k = config.obfuscationIssues) === null || _k === void 0 ? void 0 : _k.call(config);\n break;\n case Threat.DeviceID.value:\n (_l = config.deviceID) === null || _l === void 0 ? void 0 : _l.call(config);\n break;\n case Threat.DevMode.value:\n (_m = config.devMode) === null || _m === void 0 ? void 0 : _m.call(config);\n break;\n case Threat.SystemVPN.value:\n (_o = config.systemVPN) === null || _o === void 0 ? void 0 : _o.call(config);\n break;\n case Threat.Malware.value:\n (_p = config.malware) === null || _p === void 0 ? void 0 : _p.call(config, await parseMalwareData(event[malwareKey]));\n break;\n case Threat.ADBEnabled.value:\n (_q = config.adbEnabled) === null || _q === void 0 ? void 0 : _q.call(config);\n break;\n case Threat.Screenshot.value:\n (_r = config.screenshot) === null || _r === void 0 ? void 0 : _r.call(config);\n break;\n case Threat.ScreenRecording.value:\n (_s = config.screenRecording) === null || _s === void 0 ? void 0 : _s.call(config);\n break;\n case Threat.MultiInstance.value:\n (_t = config.multiInstance) === null || _t === void 0 ? void 0 : _t.call(config);\n break;\n case Threat.TimeSpoofing.value:\n (_u = config.timeSpoofing) === null || _u === void 0 ? void 0 : _u.call(config);\n break;\n case Threat.LocationSpoofing.value:\n (_v = config.locationSpoofing) === null || _v === void 0 ? void 0 : _v.call(config);\n break;\n case Threat.UnsecureWifi.value:\n (_w = config.unsecureWifi) === null || _w === void 0 ? void 0 : _w.call(config);\n break;\n case Threat.Automation.value:\n (_x = config.automation) === null || _x === void 0 ? void 0 : _x.call(config);\n break;\n default:\n onInvalidCallback();\n break;\n }\n });\n isInitializing = false;\n};\nexport const removeThreatListener = async () => {\n if (eventsListener) {\n await eventsListener.remove();\n eventsListener = null;\n }\n};\n//# sourceMappingURL=threat.js.map","import { onInvalidCallback } from '../api/methods/native';\nimport { Talsec } from '../api/nativeModules';\nimport { RaspExecutionState } from '../models/raspExecutionState';\nimport { getRaspExecutionStateCount, itemsHaveType } from '../utils/utils';\nexport const getRaspExecutionStateIdentifiers = async () => {\n const { ids } = await Talsec.getRaspExecutionStateIdentifiers();\n if (ids.length !== getRaspExecutionStateCount() || !itemsHaveType(ids, 'number')) {\n onInvalidCallback();\n }\n return ids;\n};\nexport const getRaspExecutionStateChannelData = async () => {\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};\nexport const prepareRaspExecutionStateMapping = async () => {\n const newValues = await getRaspExecutionStateIdentifiers();\n const threats = RaspExecutionState.getValues();\n threats.map((threat, index) => {\n threat.value = newValues[index];\n });\n};\n//# sourceMappingURL=raspExecutionState.js.map","import { getRaspExecutionStateChannelData, prepareRaspExecutionStateMapping } from '../../channels/raspExecutionState';\nimport { RaspExecutionState } from '../../models/raspExecutionState';\nimport { onInvalidCallback } from '../methods/native';\nimport { Talsec } from '../nativeModules';\nlet eventsListener = null;\nlet isInitializing = false;\nexport const registerRaspExecutionStateListener = async (config) => {\n if (isInitializing) {\n return;\n }\n isInitializing = true;\n if (eventsListener) {\n await eventsListener.remove();\n eventsListener = null;\n }\n const [channel, key] = await getRaspExecutionStateChannelData();\n await prepareRaspExecutionStateMapping();\n eventsListener = await Talsec.addListener(channel, async (event) => {\n var _a;\n if (event[key] == undefined) {\n onInvalidCallback();\n }\n switch (event[key]) {\n case RaspExecutionState.AllChecksFinished.value:\n (_a = config.allChecksFinished) === null || _a === void 0 ? void 0 : _a.call(config);\n break;\n default:\n onInvalidCallback();\n break;\n }\n });\n isInitializing = false;\n};\nexport const removeRaspExecutionStateListener = async () => {\n if (eventsListener) {\n await eventsListener.remove();\n eventsListener = null;\n }\n};\n//# sourceMappingURL=raspExecutionState.js.map","import { registerRaspExecutionStateListener } from '../listeners/raspExecutionState';\nimport { registerThreatListener } from '../listeners/threat';\nimport { Talsec } from '../nativeModules';\nexport const startFreeRASP = async (config, actions, raspExecutionStateActions) => {\n await registerThreatListener(actions);\n if (raspExecutionStateActions) {\n await registerRaspExecutionStateListener(raspExecutionStateActions);\n }\n return Talsec.talsecStart({ config });\n};\n//# sourceMappingURL=capacitor.js.map"],"names":["registerPlugin","Capacitor","eventsListener","isInitializing"],"mappings":"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"} \ No newline at end of file diff --git a/example/android/build.gradle b/example/android/build.gradle index 4365285..007b55b 100644 --- a/example/android/build.gradle +++ b/example/android/build.gradle @@ -11,7 +11,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:8.7.2' + classpath 'com.android.tools.build:gradle:8.11.2' classpath 'com.google.gms:google-services:4.4.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties index c1d5e01..ed4c299 100644 --- a/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/example/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-all.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/example/android/variables.gradle b/example/android/variables.gradle index 2c8e408..821864d 100644 --- a/example/android/variables.gradle +++ b/example/android/variables.gradle @@ -1,7 +1,7 @@ ext { minSdkVersion = 23 - compileSdkVersion = 35 - targetSdkVersion = 35 + compileSdkVersion = 36 + targetSdkVersion = 36 androidxActivityVersion = '1.9.2' androidxAppCompatVersion = '1.7.0' androidxCoordinatorLayoutVersion = '1.2.0' diff --git a/example/ios/App/App.xcodeproj/project.pbxproj b/example/ios/App/App.xcodeproj/project.pbxproj index e5ac2f0..b41cd31 100644 --- a/example/ios/App/App.xcodeproj/project.pbxproj +++ b/example/ios/App/App.xcodeproj/project.pbxproj @@ -281,7 +281,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 14.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -332,7 +332,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 14.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; @@ -349,7 +349,7 @@ CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = 9U2777KN5J; INFOPLIST_FILE = App/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 14.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MARKETING_VERSION = 1.0; OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" \"-DDEBUG\""; @@ -370,7 +370,7 @@ CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = 9U2777KN5J; INFOPLIST_FILE = App/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 14.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = io.ionic.starter; diff --git a/example/ios/App/Podfile b/example/ios/App/Podfile index 0f13fa5..3a23af1 100644 --- a/example/ios/App/Podfile +++ b/example/ios/App/Podfile @@ -1,6 +1,6 @@ require_relative '../../node_modules/@capacitor/ios/scripts/pods_helpers' -platform :ios, '14.0' +platform :ios, '15.0' use_frameworks! # workaround to avoid Xcode caching of Pods that requires diff --git a/example/package-lock.json b/example/package-lock.json index ccb5dd0..c60e86d 100644 --- a/example/package-lock.json +++ b/example/package-lock.json @@ -8,14 +8,14 @@ "name": "CapacitorExample", "version": "0.0.1", "dependencies": { - "@capacitor/android": "^7.0.0", - "@capacitor/app": "^7.0.0", - "@capacitor/core": "^7.0.0", - "@capacitor/geolocation": "^7.0.0", - "@capacitor/haptics": "^7.0.0", - "@capacitor/ios": "^7.0.0", - "@capacitor/keyboard": "^7.0.0", - "@capacitor/status-bar": "^7.0.0", + "@capacitor/android": "^8.0.0", + "@capacitor/app": "^8.0.0", + "@capacitor/core": "^8.0.0", + "@capacitor/geolocation": "^8.0.0", + "@capacitor/haptics": "^8.0.0", + "@capacitor/ios": "^8.0.0", + "@capacitor/keyboard": "^8.0.0", + "@capacitor/status-bar": "^8.0.0", "@ionic/react": "^7.0.0", "@ionic/react-router": "^7.8.6", "@testing-library/jest-dom": "^5.11.9", @@ -49,7 +49,7 @@ "workbox-streams": "^5.1.4" }, "devDependencies": { - "@capacitor/cli": "^7.0.0", + "@capacitor/cli": "^8.0.0", "@typescript-eslint/eslint-plugin": "^5.59.2", "@typescript-eslint/parser": "^5.59.2", "eslint": "^8.35.0", @@ -59,7 +59,7 @@ }, "..": { "name": "capacitor-freerasp", - "version": "2.2.2", + "version": "2.4.0", "license": "MIT", "devDependencies": { "@capacitor/android": "^5.0.0", @@ -133,7 +133,6 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -803,7 +802,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.27.1.tgz", "integrity": "sha512-p9OkPbZ5G7UT1MofwYFigGebnrzGJacoBSQM0/6bi/PUMVE+qlWDD/OalvQKbwgQzU6dl0xAv6r4X7Jme0RYxA==", "license": "MIT", - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1687,7 +1685,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz", "integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==", "license": "MIT", - "peer": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", "@babel/helper-module-imports": "^7.27.1", @@ -2173,27 +2170,27 @@ "license": "MIT" }, "node_modules/@capacitor/android": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@capacitor/android/-/android-7.4.4.tgz", - "integrity": "sha512-y8knfV1JXNrd6XZZLZireGT+EBCN0lvOo+HZ/s7L8LkrPBu4nY5UZn0Wxz4yOezItEII9rqYJSHsS5fMJG9gdw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@capacitor/android/-/android-8.1.0.tgz", + "integrity": "sha512-z0acTPxj5DCy/U2FU7w+GA93oC+wdyKnsOcRg5rutDmSYa8Do1tzYqApKgf+hnuTNPbtrCTHp0Zy1cLiK/4MEw==", "license": "MIT", "peerDependencies": { - "@capacitor/core": "^7.4.0" + "@capacitor/core": "^8.1.0" } }, "node_modules/@capacitor/app": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@capacitor/app/-/app-7.1.1.tgz", - "integrity": "sha512-H4rmMXlL6GEDs2Yds5JvYqZxz4mdp7R4XdGJ7p+oGV+YapuQ2kW38UabuhdP6qSrKfIeLde6qx+8FEX02krypA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@capacitor/app/-/app-8.0.1.tgz", + "integrity": "sha512-yeG3yyA0ETKqvgqexwHMBlmVOF13A1hRXzv/km0Ptv5TrNIZvZJK4MTI3uiqvnbHrzoJGP5DwWAjEXEfi90v3Q==", "license": "MIT", "peerDependencies": { - "@capacitor/core": ">=7.0.0" + "@capacitor/core": ">=8.0.0" } }, "node_modules/@capacitor/cli": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@capacitor/cli/-/cli-7.4.4.tgz", - "integrity": "sha512-J7ciBE7GlJ70sr2s8oz1+H4ZdNk4MGG41fsakUlDHWva5UWgFIZYMiEdDvGbYazAYTaxN3lVZpH9zil9FfZj+Q==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@capacitor/cli/-/cli-8.1.0.tgz", + "integrity": "sha512-JAzA/ckPgTCjZz6YumBLV2dNCFEVXAuR1oOKLD7AJ4LAI5pF5RtRZrf5FoaxvJVb0S4CouZT5cD+7NwsNJX/nw==", "dev": true, "license": "MIT", "dependencies": { @@ -2205,13 +2202,13 @@ "env-paths": "^2.2.0", "fs-extra": "^11.2.0", "kleur": "^4.1.5", - "native-run": "^2.0.1", + "native-run": "^2.0.3", "open": "^8.4.0", "plist": "^3.1.0", "prompts": "^2.4.2", "rimraf": "^6.0.1", "semver": "^7.6.3", - "tar": "^6.1.11", + "tar": "^7.5.3", "tslib": "^2.8.1", "xml2js": "^0.6.2" }, @@ -2220,7 +2217,7 @@ "capacitor": "bin/capacitor" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" } }, "node_modules/@capacitor/cli/node_modules/fs-extra": { @@ -2239,61 +2236,60 @@ } }, "node_modules/@capacitor/core": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-7.4.4.tgz", - "integrity": "sha512-xzjxpr+d2zwTpCaN0k+C6wKSZzWFAb9OVEUtmO72ihjr/NEDoLvsGl4WLfjWPcCO2zOy0b2X52tfRWjECFUjtw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-8.1.0.tgz", + "integrity": "sha512-UfMBMWc1v7J+14AhH03QmeNwV3HZx3qnOWhpwnHfzALEwAwlV/itQOQqcasMQYhOHWL0tiymc5ByaLTn7KKQxw==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.1.0" } }, "node_modules/@capacitor/geolocation": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/@capacitor/geolocation/-/geolocation-7.1.6.tgz", - "integrity": "sha512-K+SXF8X01sEyCLb1ITqir5Gi3qMNnua7TMdxKmxYBAJATUGoHzJQ0itslkoP4HM6JZac+f8lTpRl1RMWKErRIg==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@capacitor/geolocation/-/geolocation-8.1.0.tgz", + "integrity": "sha512-dHeGuVlT3ELxxn8WaoRsGjfx8tmziaC0ZuaKhUBCoKFjOue4fAnmLczCMQsYW7OykgiyBh0pirNPwWZ0/LXB7Q==", "license": "MIT", "dependencies": { - "@capacitor/synapse": "^1.0.3" + "@capacitor/synapse": "^1.0.4" }, "peerDependencies": { - "@capacitor/core": ">=7.0.0" + "@capacitor/core": ">=8.0.0" } }, "node_modules/@capacitor/haptics": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@capacitor/haptics/-/haptics-7.0.3.tgz", - "integrity": "sha512-6O5W4jtYKPGrulqt3pEeXKH1vWT5deSUoiiN2sVj7F6UgrEOxCmm06XS07Eeum0lDXEmksKARwtA+iQwHPswtA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@capacitor/haptics/-/haptics-8.0.0.tgz", + "integrity": "sha512-DY1IUOjke1T4ITl7mFHQIKCaJJyHYAYRYHG9bVApU7PDOZiMVGMp48Yjzdqjya+wv/AHS5mDabSTUmhJ5uDvBA==", "license": "MIT", "peerDependencies": { - "@capacitor/core": ">=7.0.0" + "@capacitor/core": ">=8.0.0" } }, "node_modules/@capacitor/ios": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@capacitor/ios/-/ios-7.4.4.tgz", - "integrity": "sha512-Xp3bGWlSQAwsZGngRMWTdoD2agdMV12Whnm+/xsYPxfQSj+Tksbr7r/8Mso7VWkpnTKO4iMlx762g3PjW+wi4w==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@capacitor/ios/-/ios-8.1.0.tgz", + "integrity": "sha512-wPaQ8ayL0UY+SxydZbrmfzPs8TryZVEB6hrL/XBnXxQtb6rpEmIy/3GIltPwM+/T4m/IuaSDZOToWK65ruC00g==", "license": "MIT", "peerDependencies": { - "@capacitor/core": "^7.4.0" + "@capacitor/core": "^8.1.0" } }, "node_modules/@capacitor/keyboard": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@capacitor/keyboard/-/keyboard-7.0.4.tgz", - "integrity": "sha512-kKHsuDOC0q9iC1XANhQBK35S+hFKx4EfY9I+SEMPR6RuUAIuXQXYaA3+D0LkdRdHIf3OrlTDznPvXQ5Dg2WrCA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@capacitor/keyboard/-/keyboard-8.0.0.tgz", + "integrity": "sha512-ycPW6iQyFwzDK95jihesj5EGiyyGSfbBqNek11iNp9tBOB7zDeYkUA2S/vPpOETt3dhP6pWr7a9gNVGuEfj11g==", "license": "MIT", "peerDependencies": { - "@capacitor/core": ">=7.0.0" + "@capacitor/core": ">=8.0.0" } }, "node_modules/@capacitor/status-bar": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@capacitor/status-bar/-/status-bar-7.0.4.tgz", - "integrity": "sha512-2BszlCqIlBZxHLjRyQbumKyuuisutkeJH+5eSKAEJKaDVJcfmAzr2v3MXWsRLrAHJFteLzRXkOlce5msSy28tQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@capacitor/status-bar/-/status-bar-8.0.1.tgz", + "integrity": "sha512-OR59dlbwvmrV5dKsC9lvwv48QaGbqcbSTBpk+9/WXWxXYSdXXdzJZU9p8oyNPAkuJhCdnSa3XmU43fZRPBJJ5w==", "license": "MIT", "peerDependencies": { - "@capacitor/core": ">=7.0.0" + "@capacitor/core": ">=8.0.0" } }, "node_modules/@capacitor/synapse": { @@ -2969,6 +2965,19 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -4250,6 +4259,7 @@ "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -4269,6 +4279,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "license": "MIT", + "peer": true, "engines": { "node": ">=10" }, @@ -4281,6 +4292,7 @@ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", "license": "Apache-2.0", + "peer": true, "dependencies": { "dequal": "^2.0.3" } @@ -4290,6 +4302,7 @@ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "license": "MIT", + "peer": true, "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -4735,7 +4748,6 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.27.tgz", "integrity": "sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==", "license": "MIT", - "peer": true, "dependencies": { "@types/prop-types": "*", "csstype": "^3.2.2" @@ -4876,7 +4888,6 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/regexpp": "^4.4.0", "@typescript-eslint/scope-manager": "5.62.0", @@ -4930,7 +4941,6 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", "license": "BSD-2-Clause", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "5.62.0", "@typescript-eslint/types": "5.62.0", @@ -5288,7 +5298,6 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -5387,7 +5396,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -6421,7 +6429,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.25", "caniuse-lite": "^1.0.30001754", @@ -6682,13 +6689,13 @@ } }, "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/chrome-trace-event": { @@ -7721,6 +7728,7 @@ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "license": "MIT", + "peer": true, "engines": { "node": ">=6" } @@ -8379,7 +8387,6 @@ "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -9603,39 +9610,6 @@ "node": ">=10" } }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fs-minipass/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, "node_modules/fs-monkey": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.1.0.tgz", @@ -11254,7 +11228,6 @@ "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", "license": "MIT", - "peer": true, "dependencies": { "@jest/core": "^27.5.1", "import-local": "^3.0.2", @@ -12983,7 +12956,6 @@ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", "license": "MIT", - "peer": true, "bin": { "jiti": "bin/jiti.js" } @@ -13607,48 +13579,27 @@ } }, "node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "license": "ISC", "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", "dev": true, "license": "MIT", "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" + "minipass": "^7.1.2" }, "engines": { - "node": ">=8" + "node": ">= 18" } }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -13710,9 +13661,9 @@ } }, "node_modules/native-run": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/native-run/-/native-run-2.0.1.tgz", - "integrity": "sha512-XfG1FBZLM50J10xH9361whJRC9SHZ0Bub4iNRhhI61C8Jv0e1ud19muex6sNKB51ibQNUJNuYn25MuYET/rE6w==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/native-run/-/native-run-2.0.3.tgz", + "integrity": "sha512-U1PllBuzW5d1gfan+88L+Hky2eZx+9gv3Pf6rNBxKbORxi7boHzqiA6QFGSnqMem4j0A9tZ08NMIs5+0m/VS1Q==", "dev": true, "license": "MIT", "dependencies": { @@ -14541,7 +14492,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -15696,7 +15646,6 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "license": "MIT", - "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -16076,7 +16025,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -16150,7 +16098,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" @@ -16176,7 +16123,6 @@ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -16186,7 +16132,6 @@ "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.12.13", "history": "^4.9.0", @@ -16207,7 +16152,6 @@ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.12.13", "history": "^4.9.0", @@ -16758,16 +16702,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rimraf/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/rimraf/node_modules/path-scurry": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", @@ -16790,7 +16724,6 @@ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz", "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==", "license": "MIT", - "peer": true, "bin": { "rollup": "dist/bin/rollup" }, @@ -17049,7 +16982,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -18113,15 +18045,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/sucrase/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -18482,43 +18405,32 @@ } }, "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.7.tgz", + "integrity": "sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" } }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, + "license": "BlueOak-1.0.0", "engines": { - "node": ">=10" + "node": ">=18" } }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, "node_modules/temp-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", @@ -18878,7 +18790,6 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "license": "(MIT OR CC0-1.0)", - "peer": true, "engines": { "node": ">=10" }, @@ -18987,7 +18898,6 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -19312,7 +19222,6 @@ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.103.0.tgz", "integrity": "sha512-HU1JOuV1OavsZ+mfigY0j8d1TgQgbZ6M+J75zDkpEAwYeXjWSqrGJtgnPblJjd/mAyTNQ7ygw0MiKOn6etz8yw==", "license": "MIT", - "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -19384,7 +19293,6 @@ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", "license": "MIT", - "peer": true, "dependencies": { "@types/bonjour": "^3.5.9", "@types/connect-history-api-fallback": "^1.3.5", @@ -19796,7 +19704,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", diff --git a/example/package.json b/example/package.json index 2c5e43b..2fb3829 100644 --- a/example/package.json +++ b/example/package.json @@ -3,14 +3,14 @@ "version": "0.0.1", "private": true, "dependencies": { - "@capacitor/android": "^7.0.0", - "@capacitor/app": "^7.0.0", - "@capacitor/core": "^7.0.0", - "@capacitor/geolocation": "^7.0.0", - "@capacitor/haptics": "^7.0.0", - "@capacitor/ios": "^7.0.0", - "@capacitor/keyboard": "^7.0.0", - "@capacitor/status-bar": "^7.0.0", + "@capacitor/android": "^8.0.0", + "@capacitor/app": "^8.0.0", + "@capacitor/core": "^8.0.0", + "@capacitor/geolocation": "^8.0.0", + "@capacitor/haptics": "^8.0.0", + "@capacitor/ios": "^8.0.0", + "@capacitor/keyboard": "^8.0.0", + "@capacitor/status-bar": "^8.0.0", "@ionic/react": "^7.0.0", "@ionic/react-router": "^7.8.6", "@testing-library/jest-dom": "^5.11.9", @@ -44,7 +44,7 @@ "workbox-streams": "^5.1.4" }, "devDependencies": { - "@capacitor/cli": "^7.0.0", + "@capacitor/cli": "^8.0.0", "@typescript-eslint/eslint-plugin": "^5.59.2", "@typescript-eslint/parser": "^5.59.2", "eslint": "^8.35.0", diff --git a/example/src/App.tsx b/example/src/App.tsx index 2027cf5..c83a883 100644 --- a/example/src/App.tsx +++ b/example/src/App.tsx @@ -262,6 +262,16 @@ const App: React.FC = () => { ), ); }, + // Android only + automation: () => { + setAppChecks(currentState => + currentState.map(threat => + threat.name === 'Automation' + ? { ...threat, isSecure: false } + : threat, + ), + ); + }, }; @@ -269,6 +279,7 @@ const App: React.FC = () => { const raspExecutionStateActions = { allChecksFinished: () => { setAllChecksStatus('completed'); + // eslint-disable-next-line no-console console.log('freeRASP: All checks finished'); } }; @@ -284,6 +295,7 @@ const App: React.FC = () => { if (Capacitor.getPlatform() === 'android') { addToWhitelist('com.example.myApp'); Geolocation.requestPermissions().then((permission) => { + // eslint-disable-next-line no-console console.log('Location permissions:', permission); }); } diff --git a/example/src/components/MalwareItem.tsx b/example/src/components/MalwareItem.tsx index 8f8233f..f362efb 100644 --- a/example/src/components/MalwareItem.tsx +++ b/example/src/components/MalwareItem.tsx @@ -33,11 +33,13 @@ export const MalwareItem: React.FC<{ app: SuspiciousAppInfo }> = ({ app }) => { const whitelistApp = async (packageName: string) => { try { const whitelistResponse = await addToWhitelist(packageName); + // eslint-disable-next-line no-console console.info( `Malware Whitelist response for ${app}: ${whitelistResponse}`, ); alert('Restart app for whitelist to take effect'); - } catch (error: any) { + } catch (error) { + // eslint-disable-next-line no-console console.info('Error while adding app to malware whitelist: ', error); } }; diff --git a/example/src/pages/FreeRaspDemo.tsx b/example/src/pages/FreeRaspDemo.tsx index 0788cd0..35d0685 100644 --- a/example/src/pages/FreeRaspDemo.tsx +++ b/example/src/pages/FreeRaspDemo.tsx @@ -21,6 +21,7 @@ import { IonFooter, IonInput, IonButtons, + IonSpinner, } from '@ionic/react'; import { @@ -29,6 +30,7 @@ import { blockScreenCapture, isScreenCaptureBlocked, storeExternalId, + removeExternalId, } from 'capacitor-freerasp'; import { useEffect } from 'react'; import { Capacitor } from '@capacitor/core'; @@ -47,9 +49,7 @@ const FreeRaspDemo: React.FC<{ const [showToast, setShowToast] = React.useState(false); const [externalIdValue, setExternalIdValue] = React.useState(''); const [toastMessage, setToastMessage] = React.useState(''); - const [toastColor, setToastColor] = React.useState<'success' | 'warning'>( - 'success', - ); + const [toastColor, setToastColor] = React.useState<'success' | 'warning'>('success'); const platform = Capacitor.getPlatform(); useEffect(() => { (async () => { @@ -63,13 +63,13 @@ const FreeRaspDemo: React.FC<{ const addItemsToMalwareWhitelist = async () => { const appsToWhitelist = ['io.ionic.starter', 'com.example.myApp']; await Promise.all( - appsToWhitelist.map(async app => { + appsToWhitelist.map(async (app) => { try { const whitelistResponse = await addToWhitelist(app); - console.info( - `${app} stored to Malware Whitelist: ${whitelistResponse}`, - ); + // eslint-disable-next-line no-console + console.info(`${app} stored to Malware Whitelist: ${whitelistResponse}`); } catch (error) { + // eslint-disable-next-line no-console console.info('Malware whitelist failed: ', error); } }), @@ -81,6 +81,7 @@ const FreeRaspDemo: React.FC<{ const isBlocked = await isScreenCaptureBlocked(); setScreenCaptureBlocked(isBlocked); } catch (error) { + // eslint-disable-next-line no-console console.error('Error fetching screen capture status:', error); } }; @@ -88,34 +89,43 @@ const FreeRaspDemo: React.FC<{ const handleScreenCapture = async (enable: boolean) => { try { const blockScreenCaptureResponse = await blockScreenCapture(enable); - console.info( - 'Changing Screen Capture Status:', - blockScreenCaptureResponse, - ); + // eslint-disable-next-line no-console + console.info('Changing Screen Capture Status:', blockScreenCaptureResponse); await updateScreenCaptureStatus(); - } catch (e: any) { - console.error( - `Failed to ${enable ? 'block' : 'enable'} screen capture: ${e.message}`, - ); + } catch (e) { + // eslint-disable-next-line no-console + console.error(`Failed to ${enable ? 'block' : 'enable'} screen capture: ${(e as Error).message}`); } }; + const handleModalDismiss = () => { + setIsModalOpen(false); + }; + const handleModalSend = async () => { try { await storeExternalId(externalIdValue); setToastColor('success'); setToastMessage('External ID stored'); - } catch (error: any) { + } catch (error) { setToastColor('warning'); - setToastMessage(`Error while storing external ID: ${error.message}`); + setToastMessage(`Error while storing external ID: ${(error as Error).message}`); } setIsModalOpen(false); setShowToast(true); }; - const handleModalDismiss = () => { - setIsModalOpen(false); + const handleRemoveExternalId = async () => { + try { + await removeExternalId(); + setToastColor('success'); + setToastMessage('External ID removed'); + } catch (error) { + setToastColor('warning'); + setToastMessage(`Error while removing external ID: ${(error as Error).message}`); + } + setShowToast(true); }; return ( @@ -137,7 +147,7 @@ const FreeRaspDemo: React.FC<{ fill="solid" value={externalIdValue} placeholder="Type something..." - onIonInput={input => setExternalIdValue(input.detail.value ?? '')} + onIonInput={(input) => setExternalIdValue(input.detail.value ?? '')} >
External ID
@@ -176,17 +186,29 @@ const FreeRaspDemo: React.FC<{ color={screenCaptureBlocked ? 'danger' : 'primary'} onClick={() => handleScreenCapture(!screenCaptureBlocked)} > - {screenCaptureBlocked - ? 'Unblock Screen Capture' - : 'Block Screen Capture'} + {screenCaptureBlocked ? 'Unblock Screen Capture' : 'Block Screen Capture'} - setIsModalOpen(true)} - > + setIsModalOpen(true)}> Store External ID + + Remove External ID + + +

RASP Execution State:

+
+ + + All checks finished +

{allChecksStatus}

+
+ {allChecksStatus === 'completed' ? ( + + ) : ( + + )} +

freeRASP checks:

@@ -202,48 +224,19 @@ const FreeRaspDemo: React.FC<{ {check.name} -

- {check.isSecure ? 'secure' : 'danger'}{' '} -

+

{check.isSecure ? 'secure' : 'danger'}

- {check.name === 'Malware' && ( - - )} + {check.name === 'Malware' && } {check.isSecure ? ( - + ) : ( - + )}
), )} - - - - All Checks Finished -

- {allChecksStatus} -

-
- -
diff --git a/example/src/react-app-env.d.ts b/example/src/react-app-env.d.ts index 6431bc5..0845e41 100644 --- a/example/src/react-app-env.d.ts +++ b/example/src/react-app-env.d.ts @@ -1 +1,6 @@ /// + +declare module '*.css' { + const content: { [className: string]: string }; + export default content; +} diff --git a/example/src/utils/checks.ts b/example/src/utils/checks.ts index 20eadc0..c21f9ed 100644 --- a/example/src/utils/checks.ts +++ b/example/src/utils/checks.ts @@ -24,4 +24,5 @@ export const androidChecks = [ { name: 'Time spoofing', isSecure: true }, { name: 'Location spoofing', isSecure: true }, { name: 'Unsecure Wi-Fi', isSecure: true }, + { name: 'Automation', isSecure: true }, ]; diff --git a/example/tsconfig.json b/example/tsconfig.json index 9d379a3..b3d84be 100644 --- a/example/tsconfig.json +++ b/example/tsconfig.json @@ -1,6 +1,7 @@ { "compilerOptions": { - "target": "es5", + "rootDir": ".", + "target": "esnext", "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, @@ -10,7 +11,7 @@ "forceConsistentCasingInFileNames": true, "noFallthroughCasesInSwitch": true, "module": "esnext", - "moduleResolution": "node", + "moduleResolution": "bundler", "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, diff --git a/ios/Plugin.xcodeproj/project.pbxproj b/ios/Plugin.xcodeproj/project.pbxproj index cb5348d..de1df3d 100644 --- a/ios/Plugin.xcodeproj/project.pbxproj +++ b/ios/Plugin.xcodeproj/project.pbxproj @@ -7,7 +7,7 @@ objects = { /* Begin PBXBuildFile section */ - 2F98D68224C9AAE500613A4C /* Freerasp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F98D68124C9AAE400613A4C /* Freerasp.swift */; }; + 50ADFF92201F53D600D50D53 /* Plugin.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 50ADFF88201F53D600D50D53 /* Plugin.framework */; }; 50ADFF97201F53D600D50D53 /* FreeraspTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50ADFF96201F53D600D50D53 /* FreeraspTests.swift */; }; 50ADFF99201F53D600D50D53 /* FreeraspPlugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 50ADFF8B201F53D600D50D53 /* FreeraspPlugin.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -31,7 +31,7 @@ /* Begin PBXFileReference section */ 0782A87D053F837BC2B90B13 /* Pods-PluginTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PluginTests.release.xcconfig"; path = "Target Support Files/Pods-PluginTests/Pods-PluginTests.release.xcconfig"; sourceTree = ""; }; 0B28BA15B43804D6F3621597 /* Pods-Plugin.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Plugin.debug.xcconfig"; path = "Target Support Files/Pods-Plugin/Pods-Plugin.debug.xcconfig"; sourceTree = ""; }; - 2F98D68124C9AAE400613A4C /* Freerasp.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Freerasp.swift; sourceTree = ""; }; + 4416CCCF74CB10FDB902DA53 /* Pods_PluginTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_PluginTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 50ADFF88201F53D600D50D53 /* Plugin.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Plugin.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 50ADFF8B201F53D600D50D53 /* FreeraspPlugin.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FreeraspPlugin.h; sourceTree = ""; }; @@ -104,7 +104,6 @@ isa = PBXGroup; children = ( 50E1A94720377CB70090CE1A /* FreeraspPlugin.swift */, - 2F98D68124C9AAE400613A4C /* Freerasp.swift */, 50ADFF8B201F53D600D50D53 /* FreeraspPlugin.h */, 50ADFFA72020EE4F00D50D53 /* FreeraspPlugin.m */, 50ADFF8C201F53D600D50D53 /* Info.plist */, @@ -315,7 +314,6 @@ buildActionMask = 2147483647; files = ( 50E1A94820377CB70090CE1A /* FreeraspPlugin.swift in Sources */, - 2F98D68224C9AAE500613A4C /* Freerasp.swift in Sources */, 50ADFFA82020EE4F00D50D53 /* FreeraspPlugin.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/ios/Plugin/FreeraspPlugin.m b/ios/Plugin/FreeraspPlugin.m index 738a4e5..70d6bcd 100644 --- a/ios/Plugin/FreeraspPlugin.m +++ b/ios/Plugin/FreeraspPlugin.m @@ -11,6 +11,7 @@ CAP_PLUGIN_METHOD(onInvalidCallback, CAPPluginReturnPromise); CAP_PLUGIN_METHOD(talsecStart, CAPPluginReturnPromise); CAP_PLUGIN_METHOD(storeExternalId, CAPPluginReturnPromise); + CAP_PLUGIN_METHOD(removeExternalId, CAPPluginReturnPromise); CAP_PLUGIN_METHOD(blockScreenCapture, CAPPluginReturnPromise); CAP_PLUGIN_METHOD(isScreenCaptureBlocked, CAPPluginReturnPromise); ) diff --git a/ios/Plugin/FreeraspPlugin.swift b/ios/Plugin/FreeraspPlugin.swift index 2303772..4bd1b33 100644 --- a/ios/Plugin/FreeraspPlugin.swift +++ b/ios/Plugin/FreeraspPlugin.swift @@ -6,21 +6,17 @@ import TalsecRuntime public class FreeraspPlugin: CAPPlugin { public static var shared: FreeraspPlugin? - - static var threatCache = Set() - static var executionStateCache = Set() override public func load() { FreeraspPlugin.shared = self - FreeraspPlugin.flushCache() - } - - private static func flushCache() { - FreeraspPlugin.threatCache.forEach(FreeraspPlugin.dispatchEvent) - FreeraspPlugin.threatCache.removeAll() - - FreeraspPlugin.executionStateCache.forEach(FreeraspPlugin.dispatchRaspExecutionStateEvent) - FreeraspPlugin.executionStateCache.removeAll() + + ThreatDispatcher.shared.listener = { [weak self] threat in + self?.notifyListeners(EventIdentifiers.threatChannelName, data: [EventIdentifiers.threatChannelKey: threat.callbackIdentifier], retainUntilConsumed: true) + } + + ExecutionStateDispatcher.shared.listener = { [weak self] event in + self?.notifyListeners(EventIdentifiers.raspExecutionStateChannelName, data: [EventIdentifiers.raspExecutionStateChannelKey: event.callbackIdentifier], retainUntilConsumed: true) + } } /// Runs Talsec with given configuration @@ -49,6 +45,11 @@ public class FreeraspPlugin: CAPPlugin { UserDefaults.standard.set(externalId, forKey: "app.talsec.externalid") call.resolve(["result": true]) } + + @objc func removeExternalId(_ call: CAPPluginCall) -> Void { + UserDefaults.standard.removeObject(forKey: "app.talsec.externalid") + call.resolve(["result": true]) + } @objc func blockScreenCapture(_ call: CAPPluginCall) -> Void { guard let enable = call.getBool("enable") else { @@ -76,22 +77,6 @@ public class FreeraspPlugin: CAPPlugin { } } } - - static func dispatchEvent(securityThreat: SecurityThreat) { - if let instance = FreeraspPlugin.shared { - instance.notifyListeners(EventIdentifiers.threatChannelName, data: [EventIdentifiers.threatChannelKey: securityThreat.callbackIdentifier], retainUntilConsumed: true) - } else { - FreeraspPlugin.threatCache.insert(securityThreat) - } - } - - static func dispatchRaspExecutionStateEvent(event: RaspExecutionStates) -> Void { - if let instance = FreeraspPlugin.shared { - instance.notifyListeners(EventIdentifiers.raspExecutionStateChannelName, data: [EventIdentifiers.raspExecutionStateChannelKey: event.callbackIdentifier], retainUntilConsumed: true) - } else { - FreeraspPlugin.executionStateCache.insert(event) - } - } /** * Method to setup the message passing between native and Capacitor @@ -160,11 +145,10 @@ extension SecurityThreatCenter: @retroactive SecurityThreatHandler, @retroactiv if (securityThreat.rawValue == "passcodeChange") { return } - - FreeraspPlugin.dispatchEvent(securityThreat: securityThreat) + ThreatDispatcher.shared.dispatch(threat: securityThreat) } public func onAllChecksFinished() { - FreeraspPlugin.dispatchRaspExecutionStateEvent(event: RaspExecutionStates.allChecksFinished) + ExecutionStateDispatcher.shared.dispatch(event: RaspExecutionStates.allChecksFinished) } -} \ No newline at end of file +} diff --git a/ios/Plugin/dispatchers/ExecutionStateDispatcher.swift b/ios/Plugin/dispatchers/ExecutionStateDispatcher.swift new file mode 100644 index 0000000..28e36ca --- /dev/null +++ b/ios/Plugin/dispatchers/ExecutionStateDispatcher.swift @@ -0,0 +1,35 @@ +import Foundation + +class ExecutionStateDispatcher { + static let shared = ExecutionStateDispatcher() + private var cache: Set = [] + private let lock = NSLock() + + var listener: ((RaspExecutionStates) -> Void)? { + didSet { + if listener != nil { + flushCache() + } + } + } + + func dispatch(event: RaspExecutionStates) { + lock.lock() + defer { lock.unlock() } + + if let listener = listener { + listener(event) + } else { + cache.insert(event) + } + } + + private func flushCache() { + lock.lock() + let events = cache + cache.removeAll() + lock.unlock() + + events.forEach { listener?($0) } + } +} diff --git a/ios/Plugin/dispatchers/ThreatDispatcher.swift b/ios/Plugin/dispatchers/ThreatDispatcher.swift new file mode 100644 index 0000000..f415534 --- /dev/null +++ b/ios/Plugin/dispatchers/ThreatDispatcher.swift @@ -0,0 +1,36 @@ +import Foundation +import TalsecRuntime + +class ThreatDispatcher { + static let shared = ThreatDispatcher() + private var threatCache: Set = [] + private let lock = NSLock() + + var listener: ((SecurityThreat) -> Void)? { + didSet { + if listener != nil { + flushCache() + } + } + } + + func dispatch(threat: SecurityThreat) { + lock.lock() + defer { lock.unlock() } + + if let listener = listener { + listener(threat) + } else { + threatCache.insert(threat) + } + } + + private func flushCache() { + lock.lock() + let threats = threatCache + threatCache.removeAll() + lock.unlock() + + threats.forEach { listener?($0) } + } +} diff --git a/package.json b/package.json index bd55747..72b1af1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "capacitor-freerasp", - "version": "2.3.0", + "version": "2.4.0", "description": "Capacitor plugin for improving app security and threat monitoring on Android and iOS mobile devices", "main": "dist/plugin.cjs.js", "module": "dist/esm/index.js", diff --git a/src/api/listeners/raspExecutionState.ts b/src/api/listeners/raspExecutionState.ts index b3dc655..70e58fe 100644 --- a/src/api/listeners/raspExecutionState.ts +++ b/src/api/listeners/raspExecutionState.ts @@ -1,14 +1,29 @@ +import type { PluginListenerHandle } from '@capacitor/core'; + import { getRaspExecutionStateChannelData, prepareRaspExecutionStateMapping } from '../../channels/raspExecutionState'; import { RaspExecutionState } from '../../models/raspExecutionState'; import type { RaspExecutionStateEventActions } from '../../types/types'; import { onInvalidCallback } from '../methods/native'; import { Talsec } from '../nativeModules'; +let eventsListener: PluginListenerHandle | null = null; +let isInitializing = false; + export const registerRaspExecutionStateListener = async (config: RaspExecutionStateEventActions): Promise => { + if (isInitializing) { + return; + } + isInitializing = true; + + if (eventsListener) { + await eventsListener.remove(); + eventsListener = null; + } + const [channel, key] = await getRaspExecutionStateChannelData(); await prepareRaspExecutionStateMapping(); - await Talsec.addListener(channel, async (event: any) => { + eventsListener = await Talsec.addListener(channel, async (event: any) => { if (event[key] == undefined) { onInvalidCallback(); } @@ -21,4 +36,12 @@ export const registerRaspExecutionStateListener = async (config: RaspExecutionSt break; } }); + isInitializing = false; +}; + +export const removeRaspExecutionStateListener = async (): Promise => { + if (eventsListener) { + await eventsListener.remove(); + eventsListener = null; + } }; diff --git a/src/api/listeners/threat.ts b/src/api/listeners/threat.ts index 1c46a7a..15a7aa1 100644 --- a/src/api/listeners/threat.ts +++ b/src/api/listeners/threat.ts @@ -1,3 +1,5 @@ +import type { PluginListenerHandle } from '@capacitor/core'; + import { getThreatChannelData, prepareThreatMapping } from '../../channels/threat'; import { Threat } from '../../models/threat'; import type { ThreatEventActions } from '../../types/types'; @@ -5,11 +7,24 @@ import { parseMalwareData } from '../../utils/malware'; import { onInvalidCallback } from '../methods/native'; import { Talsec } from '../nativeModules'; +let eventsListener: PluginListenerHandle | null = null; +let isInitializing = false; + export const registerThreatListener = async (config: ThreatEventActions): Promise => { + if (isInitializing) { + return; + } + isInitializing = true; + + if (eventsListener) { + await eventsListener.remove(); + eventsListener = null; + } + const [channel, key, malwareKey] = await getThreatChannelData(); await prepareThreatMapping(); - await Talsec.addListener(channel, async (event: any) => { + eventsListener = await Talsec.addListener(channel, async (event: any) => { if (event[key] == undefined) { onInvalidCallback(); } @@ -77,9 +92,20 @@ export const registerThreatListener = async (config: ThreatEventActions): Promis case Threat.UnsecureWifi.value: config.unsecureWifi?.(); break; + case Threat.Automation.value: + config.automation?.(); + break; default: onInvalidCallback(); break; } }); + isInitializing = false; +}; + +export const removeThreatListener = async (): Promise => { + if (eventsListener) { + await eventsListener.remove(); + eventsListener = null; + } }; diff --git a/src/api/methods/native.ts b/src/api/methods/native.ts index ad858c3..b6d0616 100644 --- a/src/api/methods/native.ts +++ b/src/api/methods/native.ts @@ -25,6 +25,11 @@ export const storeExternalId = async (data: string): Promise => { return result; }; +export const removeExternalId = async (): Promise => { + const { result } = await Talsec.removeExternalId(); + return result; +}; + export const getAppIcon = async (packageName: string): Promise => { if (Capacitor.getPlatform() === 'ios') { return Promise.reject('App icon retrieval for Malware detection is not available on iOS'); diff --git a/src/models/threat.ts b/src/models/threat.ts index d9b3bab..cd399de 100644 --- a/src/models/threat.ts +++ b/src/models/threat.ts @@ -24,6 +24,7 @@ export class Threat { static TimeSpoofing = new Threat(0); static LocationSpoofing = new Threat(0); static UnsecureWifi = new Threat(0); + static Automation = new Threat(0); constructor(value: number) { this.value = value; @@ -52,6 +53,7 @@ export class Threat { this.TimeSpoofing, this.LocationSpoofing, this.UnsecureWifi, + this.Automation, ] : [ this.AppIntegrity, diff --git a/src/types/types.ts b/src/types/types.ts index a6ab6b9..88533a2 100644 --- a/src/types/types.ts +++ b/src/types/types.ts @@ -7,6 +7,7 @@ export interface TalsecPlugin { getRaspExecutionStateIdentifiers(): Promise<{ ids: number[] }>; getRaspExecutionStateChannelData(): Promise<{ ids: [string, string] }>; storeExternalId(options: { data: string }): Promise<{ result: boolean }>; + removeExternalId(): Promise<{ result: boolean }>; addToWhitelist(options: { packageName: string }): Promise<{ result: boolean }>; blockScreenCapture(options: { enable: boolean }): Promise<{ result: boolean }>; isScreenCaptureBlocked(): Promise<{ result: boolean }>; @@ -76,6 +77,7 @@ export type ThreatEventActions = { timeSpoofing?: () => any; locationSpoofing?: () => any; unsecureWifi?: () => any; + automation?: () => any; }; export type NativeEvent = { [key: string]: number | string[] | undefined }; diff --git a/tsconfig.json b/tsconfig.json index d4b045b..6608cb0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,5 +1,6 @@ { "compilerOptions": { + "rootDir": "./src", "allowUnreachableCode": false, "skipLibCheck": true, "declaration": true, @@ -7,7 +8,7 @@ "inlineSources": true, "lib": ["dom", "es2017"], "module": "esnext", - "moduleResolution": "node", + "moduleResolution": "bundler", "noFallthroughCasesInSwitch": true, "noUnusedLocals": true, "noUnusedParameters": true,