import type { GetIdSdk } from '@get-id/react-native-sdk'; import verifyApplication from '../api/verifyApplication'; import { VerificationStatus, type SubmitForVerificationProps, type VerificationResult, } from '../types/sdkTypes'; import Logger from '../utils/logger'; import getVerificationResults from '../api/getVerificationResults'; type SubmitVerificationFuncProps = SubmitForVerificationProps & { sdk: GetIdSdk; }; async function submitForVerification({ sdk, timeoutInSeconds = 180, // 3 minutes onVerificationStatusChange, onApplicationIdChange, }: SubmitVerificationFuncProps): Promise { Logger.log('Submitting for verification...'); let result: VerificationResult; const timeoutId = setTimeout(() => { throw new Error('Timeout reached while waiting for verification'); }, timeoutInSeconds * 1000); // Create application const verifyResults = await verifyApplication({ sdk }); onApplicationIdChange(verifyResults.applicationId); result = { id: verifyResults.applicationId, status: VerificationStatus.NOT_STARTED, }; // Wait for verification to complete sdk.tracking.trySendEvent('waiting-complete', 'started'); let hasCalledInReviewEvent = false; while (true) { const verificationResults = await getVerificationResults({ sdk }); const processingState = verificationResults.processingState; const isSentToCs = verificationResults.summary.csSent; if (isSentToCs && !hasCalledInReviewEvent) { hasCalledInReviewEvent = true; onVerificationStatusChange(VerificationStatus.PENDING_VERIFICATION); } if (processingState === 'done') { clearInterval(timeoutId); const status = verificationResults.summary.status; onVerificationStatusChange(status); result.status = status; break; } // Wait for a short period of time before the next iteration await new Promise((resolve) => setTimeout(resolve, 1000)); } sdk.tracking.trySendEvent('waiting-complete', 'completed'); return result; } export default submitForVerification;