UNPKG

@ha_tecno/react-native-sdk

Version:

React Native SDK for biometric authentication, liveness detection, and fingerprint recognition

150 lines (135 loc) 3.9 kB
import { Platform } from 'react-native'; import { getModel } from 'react-native-device-info'; import { v4 as uuid } from 'uuid'; import { api } from '../http/api'; export type BiometricCalibrationParams = { images: string[]; exposure: number; exposureMin: number; exposureMax: number; exposureScaleZeroToOne: number; zoom: number; zoomMin: number; zoomMax: number; zoomScaleZeroToOne: number; deviceModel?: string; }; export type LivenessCalibrationParams = { videoPath: string; exposure: number; exposureMin: number; exposureMax: number; exposureScaleZeroToOne: number; deviceModel?: string; }; export type CalibrationResponse = { status: number; message: string; hasConfig?: boolean; }; export const calibrationService = { registerOperationPointsBiometrics: async ({ images, exposure, exposureMin, exposureMax, exposureScaleZeroToOne, zoom, zoomMin, zoomMax, zoomScaleZeroToOne, deviceModel, }: BiometricCalibrationParams): Promise<CalibrationResponse> => { try { const device_model = deviceModel || getModel(); const payload = { device_model, images, exposure, exposureMin, exposureMax, exposureScaleZeroToOne, zoom, zoomMin, zoomMax, zoomScaleZeroToOne, operationalSystem: Platform.OS, }; const data = await api.post<{ status: number; message?: string }>( '/v2/images-quality', payload ); if (data.status === 400) { throw new Error( 'Houve um problema ao tentar cadastrar o ponto de operação, tente novamente!' ); } return { status: data.status, message: data.message || 'Cadastro do dispositivo foi realizado com sucesso! Agora você pode acessar o LiveID.', }; } catch (error: any) { console.error('[Biometric Calibration Error]:', error); return { status: error?.status || 400, message: error?.message || 'Erro ao calibrar pontos de operação para biometria', }; } }, registerOperationPointsLiveness: async ({ videoPath, exposure, exposureMin, exposureMax, exposureScaleZeroToOne, deviceModel, }: LivenessCalibrationParams): Promise<CalibrationResponse> => { try { const uuidv4 = uuid(); const device_model = deviceModel || getModel(); const formData = new FormData(); formData.append('video', { uri: Platform.select({ ios: videoPath, android: `file://${videoPath}`, }), type: 'video/mp4', name: `${uuidv4}.mp4`, } as any); formData.append('video_key', uuidv4); formData.append('device_model', device_model); formData.append('operationalSystem', Platform.OS); formData.append('exposure', exposure.toString()); formData.append('exposureMin', exposureMin.toString()); formData.append('exposureMax', exposureMax.toString()); formData.append( 'exposureScaleZeroToOne', exposureScaleZeroToOne.toString() ); const data = await api.postFormData<{ status: number; message?: string; config?: any; }>('/v1/video-quality', formData); const hasConfig = data.config !== undefined; return { status: data.status, message: hasConfig ? 'Cadastro do dispositivo foi realizado com sucesso! Agora você pode acessar o LiveID.' : 'Tudo certo! Repita o processo mais uma vez!', hasConfig, }; } catch (error: any) { console.error('[Liveness Calibration Error]:', error); return { status: error?.status || 400, message: error?.message || 'Continue, faça com o próximo ponto de operação.', }; } }, };