import Logger from '../utils/logger'; import { API_ENDPOINTS } from './apiEndpoints'; import type { UploadDocumentResponse } from '../types/apiTypes'; import type { GetIdSdk } from '@get-id/react-native-sdk'; import { Platform } from 'react-native'; const { version } = require('../../package'); type UploadDocumentProps = { imageUri: string; docType: 'front' | 'back'; sdk: GetIdSdk; }; type UploadDocumentResult = Promise; const uploadDocument = async ({ imageUri, docType, sdk, }: UploadDocumentProps): UploadDocumentResult => { Logger.log(`Uploading ${docType} Document...`); try { const formData = new FormData(); formData.append(docType, { uri: imageUri, type: 'image/jpeg', name: 'image.jpg', }); if (docType === 'back') { // Get front document const frontDoc = sdk.docFiles.find((doc) => doc.type === 'front'); if (frontDoc) { formData.append('front', { uri: frontDoc.uri, type: 'image/jpeg', name: 'image.jpg', }); } } const headers = { 'x-sdk-platform': Platform.OS, 'x-sdk-version': version || '', 'Authorization': 'Bearer ' + sdk.config.token, }; const response = await fetch(sdk.config.apiUrl + API_ENDPOINTS.DOCUMENT, { method: 'POST', headers: headers, body: formData, }); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } Logger.log(`${docType} DOCUMENT successfully uploaded!`); const responseData = (await response.json()) as UploadDocumentResponse; return responseData; } catch (error: any) { Logger.error( `Error while upload ${docType} DOCUMENT`, sdk.tracking.trySendEvent ); Logger.error(error.response.data); throw new Error('Error while uploading document'); } }; export default uploadDocument;