@ha_tecno/react-native-sdk
Version:
React Native SDK for biometric authentication, liveness detection, and fingerprint recognition
150 lines (135 loc) • 3.9 kB
text/typescript
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.',
};
}
},
};