UNPKG

react-native-malwarelytics

Version:

Malwarelytics for React Native protects your banking or fintech app from a broad range of mobile security threats with an industry-leading mobile threat intelligence solution.

91 lines (86 loc) 3.73 kB
// // Copyright 2023 Wultra s.r.o. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions // and limitations under the License. // import { NativeModules, Platform } from 'react-native'; import type { NativeModule } from 'react-native'; import type { EventType } from './EventHelper'; import type { MalwarelyticsInitializationResult, MalwarelyticsState } from '../Malwarelytics'; import type { MalwarelyticsAppleDetectableApp, MalwarelyticsConfig } from '../MalwarelyticsConfig'; import { MalwarelyticsError } from '../MalwarelyticsError'; import { RaspEventType } from './RaspEvent'; import { SmartProtectionResult } from '../model/antivirus/SmartProtectionResult'; import { ApkThreat } from 'src/model/antivirus/ApkThreat'; import { ApkInfo } from 'src/model/antivirus/Apk'; import { UpdateInfo } from 'src/model/antivirus/update/UpdateInfo'; /** * Simple object containing module's state and the result. */ export interface StateWithResult { readonly state: MalwarelyticsState readonly result?: MalwarelyticsInitializationResult } /** * Native interface, implemented in Swift / Kotlin. */ export interface MalwarelyticsModuleIfc extends NativeModule { // Module state initialize(config: MalwarelyticsConfig): Promise<MalwarelyticsInitializationResult> shutdown(clearAvUserId: boolean): Promise<void> getState(): Promise<StateWithResult> // config getKnownDetectableApps(): Promise<MalwarelyticsAppleDetectableApp[]> // Internal getSupportedEvents(): Promise<Array<EventType>> // Device / USER ids setClientId(clientId?: string): Promise<void> setDeviceId(deviceId?: string): Promise<void> // AV user ID getAvUserId(): Promise<string | undefined> // RASP getRaspInfo(message: RaspEventType): Promise<any> // AV isAntivirusEnabled(): Promise<boolean> setAntivirusLocalization(languageCode: string | undefined): Promise<void> getAntivirusLocalization(): Promise<string | undefined> triggerSmartProtection(performOnlineUpdate: boolean): Promise<SmartProtectionResult> isSmartProtectionTriggered(): Promise<boolean> getThreatList(): Promise<ApkThreat[]> getApkInfo(packageName: string): Promise<ApkInfo | undefined> getLastUpdateInfo(): Promise<UpdateInfo> } /** * Instance of Native interface */ export const MalwarelyticsModule = NativeModules.Malwarelytics as MalwarelyticsModuleIfc; /** * Wrap call to native interface and handle all possible exceptions. * @param module Module to use. * @param action Action to execute with module. * @returns Promise returned from the action. */ export async function wrapNativeCall<T, M>(module: M, action: (module: M) => Promise<T>): Promise<T> { if (module === undefined) { const message = `The package 'react-native-malwarelytics' doesn't seem to be linked. Make sure: \n\n` + Platform.select({ ios: "- You have run 'pod install'\n", default: '' }) + '- You rebuilt the app after installing the package\n' + '- You are not using Expo Go\n'; throw new MalwarelyticsError("LINKING_ERROR", message) } try { return await action(module) } catch (e) { throw MalwarelyticsError.wrap(e) } }