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
text/typescript
//
// 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)
}
}