@sanctum-key/react-native-sdk 1.0.36 → 1.0.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sanctum-key/react-native-sdk",
3
- "version": "1.0.36",
3
+ "version": "1.0.37",
4
4
  "description": "Sanctum Key React Native SDK",
5
5
  "main": "build/src/index.js",
6
6
  "types": "build/src/index.d.ts",
@@ -1 +1 @@
1
- {"version":3,"file":"IDCardCapture.d.ts","sourceRoot":"","sources":["../../../../src/components/KYCElements/IDCardCapture.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAIpE,OAAO,EAAE,iBAAiB,EAAoI,MAAM,uBAAuB,CAAC;AAsB5L,UAAU,cAAc;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,kBAAkB;IAC1B,SAAS,EAAE,iBAAiB,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACvC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAsCD,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAyoCtD,CAAC"}
1
+ {"version":3,"file":"IDCardCapture.d.ts","sourceRoot":"","sources":["../../../../src/components/KYCElements/IDCardCapture.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAIpE,OAAO,EAAE,iBAAiB,EAAoI,MAAM,uBAAuB,CAAC;AAsB5L,UAAU,cAAc;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,kBAAkB;IAC1B,SAAS,EAAE,iBAAiB,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACvC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAsCD,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CA2lCtD,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import React, { useEffect, useMemo, useRef, useState } from 'react';
2
- import { View, Text, StyleSheet, Image, ScrollView, Platform, ActivityIndicator, TouchableOpacity, useWindowDimensions, Alert } from 'react-native';
2
+ import { View, Text, StyleSheet, Image, ScrollView, Platform, ActivityIndicator, TouchableOpacity, useWindowDimensions } from 'react-native';
3
3
  import { showAlert } from '../../utils/platformAlert';
4
4
  import { EnhancedCameraView } from '../EnhancedCameraView';
5
5
  import { GovernmentDocumentTypeShorted, GovernmentDocumentTypeBackend } from '../../types/KYC.types';
@@ -484,9 +484,7 @@ export const IDCardCapture = ({ component, value = {}, onValueChange, error, lan
484
484
  return;
485
485
  if (result.success && result.path) {
486
486
  setSilentCaptureResult((prev) => ({ ...prev, isAnalyzing: true, success: false, error: '' }));
487
- const safeCapturePath = Platform.OS === 'ios' && !result.path.startsWith('file://')
488
- ? `file://${result.path}`
489
- : result.path;
487
+ const safeCapturePath = Platform.OS === 'ios' && !result.path.startsWith('file://') ? `file://${result.path}` : result.path;
490
488
  let templatePath = capturedImages[currentSide]?.templatePath || '';
491
489
  let templateBbox;
492
490
  let templateResponse;
@@ -495,18 +493,15 @@ export const IDCardCapture = ({ component, value = {}, onValueChange, error, lan
495
493
  return;
496
494
  }
497
495
  const issuingSubdivision = selectedDocumentType.region !== 'root' ? selectedDocumentType.region : undefined;
498
- // 🚨 WATCHDOG TIMER: If the iOS network drops and doesn't throw, this guarantees the UI unlocks after 20 seconds.
496
+ // Subtle timeout handling without blocking pop-ups
499
497
  const watchdog = setTimeout(() => {
500
498
  if (isAnalyzingRef.current) {
501
499
  setSilentCaptureResult((prev) => ({
502
500
  ...prev,
503
501
  isAnalyzing: false,
504
502
  success: false,
505
- error: state.currentLanguage === 'en' ? 'Connection timeout. Please try again.' : 'Délai de connexion dépassé. Veuillez réessayer.'
503
+ error: state.currentLanguage === 'en' ? 'Taking longer than expected. Hold steady.' : 'Traitement long. Veuillez rester immobile.'
506
504
  }));
507
- Alert.alert(state.currentLanguage === 'en' ? "Timeout" : "Délai dépassé", state.currentLanguage === 'en'
508
- ? "The request took too long. Please verify your network and try again."
509
- : "La requête a pris trop de temps. Veuillez vérifier votre connexion et réessayer.");
510
505
  }
511
506
  }, 20000);
512
507
  try {
@@ -543,10 +538,7 @@ export const IDCardCapture = ({ component, value = {}, onValueChange, error, lan
543
538
  const mrzType = getCorrespondingMrzType(templatePath, regionMappings.regionMapping, regionMappings.key || '') || 'TD1';
544
539
  verificationRes = await frontVerification({
545
540
  path: safeCapturePath,
546
- regionMapping: {
547
- authMethod: matchedAuthMethod ? [matchedAuthMethod] : [],
548
- mrzTypes: mrzType ? [mrzType] : []
549
- },
541
+ regionMapping: { authMethod: matchedAuthMethod ? [matchedAuthMethod] : [], mrzTypes: mrzType ? [mrzType] : [] },
550
542
  selectedDocumentType: GovernmentDocumentTypeShorted[selectedDocumentType?.type] || '',
551
543
  code: countryData?.code || '',
552
544
  currentSide,
@@ -563,10 +555,7 @@ export const IDCardCapture = ({ component, value = {}, onValueChange, error, lan
563
555
  const frontTemplatePath = capturedImages['front']?.templatePath || '';
564
556
  verificationRes = await backVerification({
565
557
  path: safeCapturePath,
566
- regionMapping: {
567
- authMethod: matchedBackAuthMethod ? [matchedBackAuthMethod] : [],
568
- mrzTypes: backMrzType ? [backMrzType] : []
569
- },
558
+ regionMapping: { authMethod: matchedBackAuthMethod ? [matchedBackAuthMethod] : [], mrzTypes: backMrzType ? [backMrzType] : [] },
570
559
  selectedDocumentType: GovernmentDocumentTypeShorted[selectedDocumentType.type] || '',
571
560
  code: countryData?.code || '',
572
561
  currentSide,
@@ -629,34 +618,28 @@ export const IDCardCapture = ({ component, value = {}, onValueChange, error, lan
629
618
  }
630
619
  catch (error) {
631
620
  clearTimeout(watchdog);
632
- console.log("Backend Verification Error:", error);
633
- const isNetworkError = !error.response ||
634
- error.message === 'Network Error' ||
635
- error.code === 'ECONNABORTED' ||
636
- error.message?.includes('Network');
637
- let userFriendlyMessage = 'Verification failed. Please try again.';
621
+ const isNetworkError = !error.response || error.message === 'Network Error' || error.code === 'ECONNABORTED' || error.message?.includes('Network');
622
+ // Keep UI errors extremely brief and actionable
623
+ let hintMessage = '';
638
624
  if (isNetworkError) {
639
- userFriendlyMessage = state.currentLanguage === 'en'
640
- ? 'Cannot connect to verification server. Please check your internet connection.'
641
- : 'Impossible de se connecter au serveur de vérification. Veuillez vérifier votre connexion internet.';
642
- Alert.alert(state.currentLanguage === 'en' ? "Connection Failed" : "Échec de connexion", userFriendlyMessage);
625
+ hintMessage = state.currentLanguage === 'en' ? 'Poor connection. Retrying...' : 'Connexion faible. Nouvelle tentative...';
643
626
  }
644
627
  else {
645
628
  const rawMessage = (error?.message || '').toLowerCase();
646
629
  if (rawMessage.includes('impossible') || rawMessage.includes('unreadable')) {
647
- userFriendlyMessage = 'Document unreadable. Please hold the camera steady in good light.';
630
+ hintMessage = state.currentLanguage === 'en' ? 'Move to better lighting.' : 'Améliorez l\'éclairage.';
648
631
  }
649
632
  else if (rawMessage.includes('country mismatch') || rawMessage.includes('pays sélectionné')) {
650
- userFriendlyMessage = 'The document does not match your selected country.';
633
+ hintMessage = state.currentLanguage === 'en' ? 'Wrong document type.' : 'Mauvais type de document.';
651
634
  }
652
635
  else if (rawMessage.includes('card_not_fully_in_frame')) {
653
- userFriendlyMessage = 'Move closer to the document and ensure all corners are visible.';
636
+ hintMessage = state.currentLanguage === 'en' ? 'Move closer.' : 'Rapprochez-vous.';
654
637
  }
655
638
  else if (rawMessage.includes('ne correspond pas au recto')) {
656
- userFriendlyMessage = 'The back of the document does not match the front. You must scan the same ID.';
639
+ hintMessage = state.currentLanguage === 'en' ? 'Scan the same ID.' : 'Scannez la même pièce.';
657
640
  }
658
641
  }
659
- setSilentCaptureResult(prev => ({ ...prev, isAnalyzing: false, success: false, error: userFriendlyMessage }));
642
+ setSilentCaptureResult(prev => ({ ...prev, isAnalyzing: false, success: false, error: hintMessage }));
660
643
  }
661
644
  }
662
645
  };
@@ -671,34 +654,18 @@ export const IDCardCapture = ({ component, value = {}, onValueChange, error, lan
671
654
  }, [scanPhase, pendingCAImage, silentCaptureResult.barcode]);
672
655
  const handleError = (event) => {
673
656
  logger.error("Camera Error:", event);
674
- // Normalize the error to lowercase for easy checking
675
657
  const errString = `${event.message} ${event.name} ${event.code}`.toLowerCase();
676
- let friendlyMessage = state.currentLanguage === 'en'
677
- ? 'An unknown camera error occurred.'
678
- : 'Une erreur de caméra inconnue est survenue.';
679
- // 1. Detect Hardware Lock (Camera in use by Zoom, Teams, or another app)
680
- if (errString.includes('notreadableerror') ||
681
- errString.includes('trackstarterror') ||
682
- errString.includes('in use') ||
683
- errString.includes('concurrent') ||
684
- errString.includes('camera unavailable')) {
685
- friendlyMessage = state.currentLanguage === 'en'
686
- ? 'Your camera is currently being used by another application (like Zoom or Teams). Please close the other app and try again.'
687
- : 'Votre caméra est actuellement utilisée par une autre application. Veuillez fermer l\'autre application et réessayer.';
658
+ let friendlyMessage = state.currentLanguage === 'en' ? 'Camera error.' : 'Erreur de caméra.';
659
+ if (errString.includes('notreadableerror') || errString.includes('trackstarterror') || errString.includes('in use') || errString.includes('concurrent') || errString.includes('camera unavailable')) {
660
+ friendlyMessage = state.currentLanguage === 'en' ? 'Camera is in use by another app.' : 'Caméra utilisée par une autre application.';
688
661
  }
689
- // 2. Detect Permission Denied
690
662
  else if (errString.includes('notallowederror') || errString.includes('permission')) {
691
- friendlyMessage = state.currentLanguage === 'en'
692
- ? 'Camera permission denied. Please allow camera access in your settings to proceed.'
693
- : 'Autorisation de la caméra refusée. Veuillez autoriser l\'accès dans vos paramètres.';
663
+ friendlyMessage = state.currentLanguage === 'en' ? 'Allow camera access in settings.' : 'Autorisez l\'accès à la caméra.';
694
664
  }
695
- // 3. Detect No Camera Found
696
665
  else if (errString.includes('notfounderror') || errString.includes('no camera')) {
697
- friendlyMessage = state.currentLanguage === 'en'
698
- ? 'No camera detected on this device.'
699
- : 'Aucune caméra détectée sur cet appareil.';
666
+ friendlyMessage = state.currentLanguage === 'en' ? 'No camera detected.' : 'Aucune caméra détectée.';
700
667
  }
701
- showAlert(state.currentLanguage === 'en' ? 'Camera Error' : 'Erreur de Caméra', friendlyMessage);
668
+ showAlert(state.currentLanguage === 'en' ? 'Camera Error' : 'Erreur', friendlyMessage);
702
669
  setShowCamera(false);
703
670
  setIsProcessingCapture(false);
704
671
  };
@@ -1 +1 @@
1
- {"version":3,"file":"IDCardCapture.js","sourceRoot":"","sources":["../../../../src/components/KYCElements/IDCardCapture.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { View, Text, StyleSheet, Image, ScrollView, Platform, ActivityIndicator, TouchableOpacity, useWindowDimensions, Alert } from 'react-native';\nimport { showAlert } from '../../utils/platformAlert';\nimport { EnhancedCameraView } from '../EnhancedCameraView';\nimport { TemplateComponent, LocalizedText, GovernmentDocumentType, ISilentCaptureResult, IBbox, GovernmentDocumentTypeShorted, GovernmentDocumentTypeBackend } from '../../types/KYC.types';\nimport IdCardOverlay from '../OverLay/IdCard';\nimport { useTemplateKYCFlowContext } from '../../hooks/useTemplateKYCFlow';\nimport { useI18n } from '../../hooks/useI18n';\nimport { Button } from '../ui/Button';\nimport { removeDuplicates } from '../../utils/remove-duplicate';\nimport { backVerification, checkTemplateType, frontVerification } from '../../modules/api/CardAuthentification';\nimport { getDocumentTypeInfo } from '../../utils/get-document-type-info';\nimport pathToBase64 from '../../utils/pathToBase64';\nimport { cropByObb, getObbConfidence, OBB_CONFIDENCE_THRESHOLD } from '../../utils/cropByObb';\nimport REGION_MAPPING from '../../config/region_mapping.json';\nimport QRCode from 'react-native-qrcode-svg';\nimport { logger } from '../../utils/logger';\nimport { cropImageWithBBoxWithTolerance } from '../../utils/cropByObb'; \nimport kycService, { authentification } from '../../modules/api/KYCService';\n\nconst ISO_TO_COUNTRY_NAME: Record<string, string> = {\n 'KE': 'Kenya', 'CM': 'Cameroon', 'NG': 'Nigeria', 'CA': 'Canada',\n 'FR': 'France', 'GH': 'Ghana', 'ZA': 'South Africa', 'GB': 'Britain',\n 'CI': 'Ivory Coast', 'SN': 'Senegal', 'TG': 'Togo', 'ML': 'Mali'\n};\n\ninterface IIDCardPayload {\n dir: string;\n file: string;\n mrz: string;\n templatePath?: string;\n}\n\ninterface IDCardCaptureProps {\n component: TemplateComponent;\n value?: Record<string, IIDCardPayload>;\n onValueChange: (value: Record<string, IIDCardPayload | string>) => void;\n error?: string;\n language?: string;\n currentSide?: string;\n}\n\nconst SHORT_TO_LONG_REGION: Record<string, string> = {\n \"AB\": \"Alberta\", \"BC\": \"British Columbia\", \"MB\": \"Manitoba\",\n \"NB\": \"New Brunswick\", \"NL\": \"Newfoundland and Labrador\",\n \"NT\": \"Northwest Territories\", \"NS\": \"Nova Scotia\", \"NU\": \"Nunavut\",\n \"ON\": \"Ontario\", \"PE\": \"Prince Edward Island\", \"QC\": \"Quebec\",\n \"SK\": \"Saskatchewan\", \"YT\": \"Yukon\"\n};\n\n// 🚨 Isolates the 1-second re-renders away from the Camera!\nconst ExpiringCodeTimer = ({ initialCode, language }: { initialCode: string, language: string }) => {\n const [timeLeft, setTimeLeft] = useState(300);\n\n useEffect(() => {\n if (timeLeft <= 0) return;\n const timer = setInterval(() => setTimeLeft((prev) => prev - 1), 1000);\n return () => clearInterval(timer);\n }, [timeLeft]);\n\n const formatTime = (seconds: number) => {\n const m = Math.floor(seconds / 60);\n const s = seconds % 60;\n return `${m}:${s.toString().padStart(2, '0')}`;\n };\n\n if (timeLeft <= 0) return null;\n\n return (\n <View style={styles.activeCodeContainer}>\n <Text style={styles.activeCodeText}>{initialCode}</Text>\n <Text style={styles.timerText}>\n {language === 'en' ? `Expires in ${formatTime(timeLeft)}` : `Expire dans ${formatTime(timeLeft)}`}\n </Text>\n </View>\n );\n};\n\nexport const IDCardCapture: React.FC<IDCardCaptureProps> = ({ component, value = {}, onValueChange, error, language = 'en' }) => {\n const { t, locale } = useI18n();\n const [showCamera, setShowCamera] = useState(false);\n const [capturedImages, setCapturedImages] = useState<Record<string, IIDCardPayload>>(value || {});\n const [currentSide, setCurrentSide] = useState<'front' | 'back'>('front');\n const [bboxBySide, setBboxBySide] = useState<Record<string, IBbox>>({});\n const [silentCaptureResult, setSilentCaptureResult] = useState<ISilentCaptureResult>({ success: false, isAnalyzing: false });\n const [isProcessingCapture, setIsProcessingCapture] = useState(false);\n const [processingImagePath, setProcessingImagePath] = useState<string | null>(null);\n const [cameraKey, setCameraKey] = useState(0);\n const [isRebootingCamera, setIsRebootingCamera] = useState(false);\n const [cameraType, setCameraType] = useState<'back' | 'front'>('back');\n const [showQRModal, setShowQRModal] = useState(false);\n const [currentUrl, setCurrentUrl] = useState('');\n const [qrPlatform, setQrPlatform] = useState<'android' | 'ios'>('android');\n \n const [scanPhase, setScanPhase] = useState<'image' | 'barcode'>('image');\n const [pendingCAImage, setPendingCAImage] = useState<{ path: string, templateResponse: any, templatePath: string, bbox?: IBbox } | null>(null);\n \n const scannedBarcodeRef = useRef<string | null>(null);\n // Ref mirrors — prevent stale closure reads in handleSilentCapture on iOS\n const isAnalyzingRef = useRef<boolean>(false);\n const isProcessingCaptureRef = useRef<boolean>(false);\n const scanPhaseRef = useRef<'image' | 'barcode'>('image');\n\n const [generatedCode, setGeneratedCode] = useState<string | null>(null);\n const [isGeneratingCode, setIsGeneratingCode] = useState(false);\n\n\n const handleGenerateCode = async () => {\n if (isGeneratingCode) return;\n setIsGeneratingCode(true);\n \n try {\n if (!apiKey) {\n showAlert('Error', 'API Key is missing.');\n setIsGeneratingCode(false);\n return;\n }\n\n // Pass the dynamic apiKey to your service\n const res = await kycService.generateReferralCode(\n { session_id: state.session.session_id }, \n apiKey\n );\n\n // Extract the code from the response\n const newCode = res.code || res.referral_code || res?.data?.code || res?.data?.referral_code; \n \n if (newCode) {\n setGeneratedCode(newCode);\n } else {\n showAlert('Error', 'Failed to parse code from server response.');\n }\n } catch (error: any) {\n showAlert('Error', error.message || 'Failed to generate code');\n } finally {\n setIsGeneratingCode(false);\n }\n };\n\n useEffect(() => {\n if (typeof window !== 'undefined' && window.location) setCurrentUrl(window.location.href);\n console.log(currentUrl)\n }, []);\n\n const documentTypeMapping: Record<string, GovernmentDocumentType> = {\n 'nationalId': 'national_id', 'national_id': 'national_id', 'identity_card': 'national_id',\n 'passport': 'passport', 'driversLicense': 'drivers_licence', 'drivers_licence': 'drivers_licence',\n 'residencePermit': 'permanent_residence', 'permanent_residence': 'permanent_residence',\n 'healthInsuranceCard': 'health_insurance_card', 'health_insurance_card': 'health_insurance_card',\n };\n\n const { actions, state, env, apiKey } = useTemplateKYCFlowContext();\n const { width: screenWidth, height: screenHeight } = useWindowDimensions();\n\n const getLocalizedText = (text: LocalizedText | Record<string, LocalizedText>): string => {\n if (text && typeof text[currentSide] === 'object' && text[currentSide][locale])\n return text[currentSide][locale] || '';\n return \"\";\n };\n\n useEffect(() => {\n if (Platform.OS === 'web' && typeof window !== 'undefined') {\n const baseUrl = window.location.origin + window.location.pathname;\n const handoffUrl = `${baseUrl}?session_id=${state.session.session_id}&resume=true`;\n setCurrentUrl(handoffUrl);\n }\n }, [state.session.session_id]);\n\n const countrySelectionData = useMemo(() => {\n const countrySelectionComponent = state.template.components.find(c => c.type === 'country_selection');\n return countrySelectionComponent ? state.componentData[countrySelectionComponent.id] : null;\n }, [state.template.components, state.componentData]);\n\n const selectedDocumentType = useMemo<{ type: GovernmentDocumentType; region: string } | null>(() => {\n if (!countrySelectionData?.documentType) return null;\n const backendDocType = countrySelectionData.documentType;\n const mappedType = documentTypeMapping[backendDocType] || backendDocType as GovernmentDocumentType;\n return { type: mappedType, region: countrySelectionData.region || 'root' };\n }, [countrySelectionData, documentTypeMapping]);\n\n const countryData = useMemo(() => countrySelectionData, [countrySelectionData]);\n\n const isWebScanningRestricted = useMemo(() => {\n if (Platform.OS !== 'web') return false;\n if (countryData?.code !== 'CA') return false;\n \n const docType = selectedDocumentType?.type;\n return docType === 'drivers_licence' || \n docType === 'health_insurance_card' || \n docType === 'national_id' || \n docType === 'identity_card';\n }, [countryData?.code, selectedDocumentType?.type]);\n\n const targetBarcodeTypes = useMemo<any[]>(() => {\n const docType = selectedDocumentType?.type;\n if (docType === 'health_insurance_card') return ['code-128', 'code-39', 'pdf-417'];\n return ['pdf-417'];\n }, [selectedDocumentType]);\n\n const refreshCamera = () => {\n setIsRebootingCamera(true);\n\n if (scanPhase === 'barcode') {\n setScanPhase('image');\n setPendingCAImage(null);\n scannedBarcodeRef.current = null;\n \n setCapturedImages((prev) => {\n const newState = { ...prev };\n delete newState[currentSide];\n return newState;\n });\n\n if (value) {\n const newValue = { ...value };\n delete newValue[currentSide];\n onValueChange(newValue);\n }\n\n setSilentCaptureResult({\n success: false,\n isAnalyzing: false,\n path: '',\n error: '',\n templatePath: '',\n mrz: '',\n bbox: undefined\n });\n }\n\n setTimeout(() => {\n setCameraKey(prev => prev + 1);\n setIsRebootingCamera(false);\n }, 1000);\n };\n\n const toggleCameraLens = () => {\n setCameraType(prev => prev === 'back' ? 'front' : 'back');\n refreshCamera();\n };\n\n useEffect(() => {\n if (value && Object.keys(value).length > 0) {\n if (JSON.stringify(value) !== JSON.stringify(capturedImages)) {\n const updatedImages = value as Record<string, IIDCardPayload>;\n setCapturedImages(updatedImages);\n const currentImageData = updatedImages[currentSide];\n \n if (currentImageData?.dir) {\n setSilentCaptureResult(prev => ({\n ...prev,\n path: currentImageData.dir,\n success: true,\n isAnalyzing: false,\n mrz: currentImageData.mrz || '',\n templatePath: currentImageData.templatePath || '',\n }));\n }\n }\n }\n }, [value, currentSide]);\n\n // Keep refs in sync with state so handleSilentCapture always reads current values\n useEffect(() => { isAnalyzingRef.current = silentCaptureResult.isAnalyzing ?? false; }, [silentCaptureResult.isAnalyzing]);\n useEffect(() => { isProcessingCaptureRef.current = isProcessingCapture; }, [isProcessingCapture]);\n useEffect(() => { scanPhaseRef.current = scanPhase; }, [scanPhase]);\n\n const cameraConfig = useMemo(() => {\n let instructions = selectedDocumentType\n ? (locale === 'en' ? getDocumentTypeInfo(selectedDocumentType.type).instructions.en : getDocumentTypeInfo(selectedDocumentType.type).instructions.fr)\n : getLocalizedText(component.instructions as Record<string, LocalizedText>);\n\n if (scanPhase === 'barcode') {\n instructions = '';\n }\n\n const isLandscape = screenWidth > screenHeight;\n let xMin, xMax, yMin, yMax;\n\n if (Platform.OS === 'web') {\n const boxWidthPercent = isLandscape ? 0.40 : 0.85;\n xMin = isLandscape ? 30 : 7.5;\n xMax = xMin + (boxWidthPercent * 100);\n\n const containerWidth = Math.min(screenWidth * 0.95, 1000);\n const containerHeight = isLandscape ? screenHeight * 0.80 : screenHeight * 0.90;\n\n const boxPixelWidth = containerWidth * boxWidthPercent;\n const boxPixelHeight = boxPixelWidth / 1.59;\n\n const heightPercent = (boxPixelHeight / containerHeight) * 100;\n yMin = (100 - heightPercent) / 2.5;\n yMax = yMin + heightPercent;\n } else {\n xMin = 5;\n xMax = 95;\n yMin = 34;\n yMax = 66;\n }\n\n const platformBbox = {\n xMin,\n yMin,\n xMax,\n yMax,\n borderColor: scanPhase === 'barcode' ? '#EAB308' : '#2DBD60',\n borderWidth: Platform.OS === 'web' ? 2 : 3,\n cornerRadius: 8\n };\n\n return {\n cameraType: Platform.OS === 'web' ? cameraType : 'back',\n flashMode: 'auto' as const,\n overlay: { guideText: instructions, bbox: platformBbox }\n };\n }, [selectedDocumentType, locale, component.instructions, cameraType, screenWidth, screenHeight, scanPhase]);\n\n const retakePicture = (sideToRetake: 'front' | 'back') => {\n setIsProcessingCapture(false);\n setProcessingImagePath(null);\n scannedBarcodeRef.current = null;\n setScanPhase('image');\n setPendingCAImage(null);\n setSilentCaptureResult({ path: '', success: false, isAnalyzing: false, error: '', templatePath: '', mrz: '', bbox: undefined });\n setShowCamera(true);\n refreshCamera();\n actions.showCustomStepper(false);\n setCapturedImages((prev) => {\n const newState = { ...prev };\n delete newState[sideToRetake];\n return newState;\n });\n\n if (value) {\n const newValue = { ...value };\n delete newValue[sideToRetake];\n onValueChange(newValue);\n }\n };\n\n const getCurrentSideVerification = (currentSide: string, countryKey: string) => {\n const rawDocType = countrySelectionData?.documentType;\n if (!rawDocType || !countryKey) return { authMethod: [], mrzTypes: [], regionMapping: null, key: 'root' };\n\n const jsonDocMap: Record<string, string> = {\n 'nationalId': 'identity_card', 'national_id': 'identity_card', 'passport': 'passport',\n 'driversLicense': 'drivers_licence', 'drivers_licence': 'drivers_licence',\n 'residencePermit': 'permanent_residence', 'healthInsuranceCard': 'health_insurance_card'\n };\n\n const searchDocType = jsonDocMap[rawDocType] || rawDocType;\n const rawCountryName = ISO_TO_COUNTRY_NAME[countryData?.code || ''] || countryData?.code || countryKey;\n const baseMapping = (REGION_MAPPING as any).regionMapping || REGION_MAPPING;\n \n let countryMapping = baseMapping[rawCountryName];\n if (!countryMapping) {\n const foundKey = Object.keys(baseMapping).find(k => k.toLowerCase() === rawCountryName.toLowerCase() || k.toLowerCase() === countryKey.toLowerCase());\n if (foundKey) countryMapping = baseMapping[foundKey];\n }\n \n if (!countryMapping || !countryMapping[searchDocType]) return { authMethod: [], mrzTypes: [], regionMapping: null, key: 'root' };\n\n const authMethod: string[] = [];\n const mrzTypes: string[] = [];\n const rawRegionKey = countrySelectionData.region?.trim()?.length > 0 ? countrySelectionData.region.trim() : 'root';\n const key = SHORT_TO_LONG_REGION[rawRegionKey] || rawRegionKey;\n const regionMapping = countryMapping[searchDocType];\n\n if (regionMapping?.[key] && Array.isArray(regionMapping[key])) {\n regionMapping[key].forEach((item: any) => {\n if (item[currentSide]) authMethod.push(item[currentSide]);\n if (item?.mrz_type) mrzTypes.push(item?.mrz_type);\n });\n }\n\n return { authMethod: removeDuplicates(authMethod), mrzTypes: removeDuplicates(mrzTypes), regionMapping, key };\n }\n\n const getCorrespondingMrzType = (templatePath: string, mapping: any, regionKey: string = \"root\") => {\n if (!mapping || !mapping[regionKey]) return null;\n const fileName = templatePath.split(\"/\").pop()?.replace(/\\.(jpg|jpeg|png|py)$/i, \"\");\n if (!fileName) return null;\n const pyName = `${fileName}.py`;\n const found = mapping[regionKey].find((item: any) => item.py_file === pyName);\n return found?.mrz_type || null;\n };\n\n const getCorrespondingAuthMethod = (templatePath: string, mapping: any, regionKey: string = \"root\", side: 'front' | 'back') => {\n if (!mapping || !mapping[regionKey]) return null;\n const fileName = templatePath.split(\"/\").pop()?.replace(/\\.(jpg|jpeg|png|py)$/i, \"\");\n if (!fileName) return null;\n const pyName = `${fileName}.py`;\n const found = mapping[regionKey].find((item: any) => item.py_file === pyName);\n return found?.[side] || null;\n };\n\n const autoCapture = async (capturePath: string, verified: ISilentCaptureResult & { region?: string }) => {\n if (isProcessingCapture) return;\n setIsProcessingCapture(true);\n\n const safeCapturePath = (Platform.OS === 'ios' && !capturePath.startsWith('file://')) \n ? `file://${capturePath}` \n : capturePath;\n\n setProcessingImagePath(safeCapturePath);\n\n try {\n let imagePathForUpload = capturePath;\n const overlayBbox = cameraConfig.overlay.bbox;\n const uiCropBbox = {\n minX: overlayBbox.xMin / 100, minY: overlayBbox.yMin / 100,\n width: (overlayBbox.xMax - overlayBbox.xMin) / 100,\n height: (overlayBbox.yMax - overlayBbox.yMin) / 100,\n };\n\n try {\n imagePathForUpload = await cropImageWithBBoxWithTolerance(safeCapturePath, uiCropBbox, 0.06);\n } catch (e) {\n console.warn(\"Crop failed, falling back to original image\", e);\n imagePathForUpload = safeCapturePath; \n }\n\n const safeCroppedPath = (Platform.OS === 'ios' && !imagePathForUpload.startsWith('file://')) \n ? `file://${imagePathForUpload}` \n : imagePathForUpload;\n\n const base64 = await pathToBase64(safeCroppedPath);\n const newImages = {\n ...capturedImages,\n // Store safeCroppedPath (guaranteed file:// on iOS) as dir so\n // Image source={{ uri }} never receives a bare path on iOS.\n [currentSide]: { dir: safeCroppedPath, file: base64, mrz: verified.mrz || \"\", templatePath: verified.templatePath },\n };\n\n setCapturedImages(newImages);\n\n if (verified.country && verified.documentType) {\n const docType = verified.documentType as string;\n const resolvedDocumentType = GovernmentDocumentTypeBackend[docType] || (Object.values(GovernmentDocumentTypeBackend).includes(docType as GovernmentDocumentType) ? docType : null) || Object.entries(GovernmentDocumentTypeBackend).find(([, v]) => v === docType)?.[1] || docType;\n onValueChange({\n ...newImages,\n country: verified.country,\n documentType: resolvedDocumentType,\n ...(verified.region ? { region: verified.region } : {})\n });\n }\n\n setTimeout(() => {\n setShowCamera(false);\n actions.showCustomStepper(true);\n setSilentCaptureResult(prev => ({ ...prev, isAnalyzing: false }));\n setIsProcessingCapture(false);\n setProcessingImagePath(null);\n setScanPhase('image');\n setPendingCAImage(null);\n }, 600);\n } catch (e: any) {\n console.error(\"Backend Error:\", e);\n const friendlyError = state.currentLanguage === 'en' ? 'Unable to process document. Please try again.' : 'Impossible de traiter le document. Veuillez réessayer.';\n showAlert('Error', friendlyError);\n setSilentCaptureResult(prev => ({ ...prev, isAnalyzing: false, success: false }));\n setIsProcessingCapture(false);\n setProcessingImagePath(null);\n }\n };\n\n const isBarcodeRequired = (): boolean => {\n if (currentSide !== 'back') return false;\n if (!countryData?.code || !selectedDocumentType?.type) return false;\n\n const rawDocType = selectedDocumentType.type;\n const jsonDocMap: Record<string, string> = {\n 'nationalId': 'identity_card', 'national_id': 'identity_card', 'passport': 'passport',\n 'driversLicense': 'drivers_licence', 'drivers_licence': 'drivers_licence',\n 'residencePermit': 'permanent_residence', 'healthInsuranceCard': 'health_insurance_card'\n };\n \n const searchDocType = jsonDocMap[rawDocType] || rawDocType;\n const rawCountryName = ISO_TO_COUNTRY_NAME[countryData.code] || countryData.code;\n const baseMapping = (REGION_MAPPING as any).regionMapping || REGION_MAPPING;\n \n let countryMapping = baseMapping[rawCountryName];\n if (!countryMapping) {\n const foundKey = Object.keys(baseMapping).find(k => k.toLowerCase() === rawCountryName.toLowerCase() || k.toLowerCase() === countryData.code.toLowerCase());\n if (foundKey) countryMapping = baseMapping[foundKey];\n }\n \n if (!countryMapping || !countryMapping[searchDocType]) return false;\n\n const rawRegionKey = countryData.region?.trim()?.length > 0 ? countryData.region.trim() : 'root';\n const regionKey = SHORT_TO_LONG_REGION[rawRegionKey] || rawRegionKey;\n const regionData = countryMapping[searchDocType][regionKey];\n \n if (!regionData || !Array.isArray(regionData)) return false;\n\n const requiresBarcode = regionData.some((item: any) => {\n const method = String(item['back'] || '').toUpperCase();\n return method.includes('BARCODE') || method.includes('2D');\n });\n\n logger.log(`[Barcode Check] Dynamic check for ${countryData.code} - ${searchDocType} - ${regionKey}: requiresBarcode=${requiresBarcode}`);\n return requiresBarcode;\n };\n\n const processCanadianBarcode = async (barcodeString: string) => {\n if (isProcessingCapture || !pendingCAImage) return;\n logger.log('[CA Barcode] Valid barcode decoded. Sending to parser...');\n \n setSilentCaptureResult(prev => ({ ...prev, isAnalyzing: true, error: '' }));\n \n try {\n const isHIC = selectedDocumentType!.type === 'health_insurance_card';\n let parsedDictionary;\n \n if (isHIC && barcodeString.length < 50) {\n parsedDictionary = { data: { card_number: barcodeString, barcode_type: \"1D\" } };\n } else {\n const token = await authentification();\n parsedDictionary = await kycService.formatBarcodeData({ textInput: barcodeString, token }, env);\n }\n \n if (!parsedDictionary) throw new Error(\"Could not parse the barcode data.\");\n\n const verifiedResult: ISilentCaptureResult & { region?: string } = {\n path: pendingCAImage.path,\n templatePath: pendingCAImage.templatePath,\n bbox: pendingCAImage.bbox,\n success: true,\n mrz: JSON.stringify(parsedDictionary),\n barcode: barcodeString,\n isAnalyzing: false,\n country: countryData?.code,\n documentType: selectedDocumentType!.type,\n region: selectedDocumentType!.region !== 'root' ? selectedDocumentType!.region : undefined,\n };\n\n setSilentCaptureResult(verifiedResult);\n if (pendingCAImage.bbox) {\n const safeBbox = pendingCAImage.bbox as IBbox;\n setBboxBySide(prev => ({ ...prev, ['back']: safeBbox }));\n }\n \n await autoCapture(pendingCAImage.path, verifiedResult);\n } catch (error: any) {\n console.error(\"Barcode processing failed\", error);\n setScanPhase('image');\n setPendingCAImage(null);\n scannedBarcodeRef.current = null;\n setSilentCaptureResult(prev => ({ ...prev, isAnalyzing: false, success: false, error: 'Failed to process barcode. Please retake the photo.' }));\n }\n };\n\n const handleSilentCapture = async (result: { success: boolean; path?: string; error?: string; barcode?: unknown }) => {\n if (isProcessingCaptureRef.current) return;\n if (scanPhaseRef.current === 'barcode') return;\n if (isAnalyzingRef.current) return;\n\n if (result.success && result.path) {\n setSilentCaptureResult((prev) => ({ ...prev, isAnalyzing: true, success: false, error: '' }));\n\n const safeCapturePath = Platform.OS === 'ios' && !result.path.startsWith('file://') \n ? `file://${result.path}` \n : result.path;\n\n let templatePath = capturedImages[currentSide]?.templatePath || '';\n let templateBbox: IBbox | undefined;\n let templateResponse: any;\n\n if (!selectedDocumentType) {\n setSilentCaptureResult((prev) => ({ ...prev, isAnalyzing: false, success: false, error: 'Document type not selected' }));\n return;\n }\n\n const issuingSubdivision = selectedDocumentType.region !== 'root' ? selectedDocumentType.region : undefined;\n\n // 🚨 WATCHDOG TIMER: If the iOS network drops and doesn't throw, this guarantees the UI unlocks after 20 seconds.\n const watchdog = setTimeout(() => {\n if (isAnalyzingRef.current) {\n setSilentCaptureResult((prev) => ({\n ...prev,\n isAnalyzing: false,\n success: false,\n error: state.currentLanguage === 'en' ? 'Connection timeout. Please try again.' : 'Délai de connexion dépassé. Veuillez réessayer.'\n }));\n Alert.alert(\n state.currentLanguage === 'en' ? \"Timeout\" : \"Délai dépassé\",\n state.currentLanguage === 'en' \n ? \"The request took too long. Please verify your network and try again.\" \n : \"La requête a pris trop de temps. Veuillez vérifier votre connexion et réessayer.\"\n );\n }\n }, 20000);\n\n try {\n if (!templatePath) {\n const templateType = await checkTemplateType({\n path: safeCapturePath,\n docType: selectedDocumentType?.type as GovernmentDocumentType,\n docRegion: countryData?.code || \"\",\n postfix: currentSide,\n issuingSubdivision: issuingSubdivision\n }, env);\n\n templateResponse = templateType;\n if (templateType.template_path) templatePath = templateType.template_path;\n if (templateType.card_obb) {\n const obbConfidence = getObbConfidence((templateType as any).card_obb);\n if (obbConfidence !== null && obbConfidence < OBB_CONFIDENCE_THRESHOLD) {\n clearTimeout(watchdog);\n setSilentCaptureResult((prev) => ({ ...prev, isAnalyzing: false, success: false, error: t('kyc.idCardCapture.cardNotFullyInFrame') }));\n return;\n }\n try {\n const crop = await cropByObb(safeCapturePath, (templateType as any).card_obb);\n templateBbox = crop.bbox;\n } catch {}\n }\n }\n\n const extractedCountryKey = templatePath ? templatePath.split('/')[0] : (ISO_TO_COUNTRY_NAME[countryData?.code || ''] || 'root');\n const regionMappings = getCurrentSideVerification(currentSide, extractedCountryKey);\n\n let verificationRes: any;\n if (currentSide === 'front') {\n const matchedAuthMethod = getCorrespondingAuthMethod(templatePath, regionMappings.regionMapping, regionMappings.key || '', 'front');\n const mrzType = getCorrespondingMrzType(templatePath, regionMappings.regionMapping, regionMappings.key || '') || 'TD1';\n\n verificationRes = await frontVerification({\n path: safeCapturePath,\n regionMapping: {\n authMethod: matchedAuthMethod ? [matchedAuthMethod] : [],\n mrzTypes: mrzType ? [mrzType] : []\n },\n selectedDocumentType: GovernmentDocumentTypeShorted[selectedDocumentType?.type as keyof typeof GovernmentDocumentTypeShorted] || '',\n code: countryData?.code || '',\n currentSide,\n templatePath,\n mrzType,\n issuingSubdivision: issuingSubdivision,\n clientSideBarcodeData: silentCaptureResult.barcode\n }, env);\n\n } else {\n logger.log(\"Attempting backVerification with:\", { path: safeCapturePath, templatePath, side: currentSide });\n const matchedBackAuthMethod = getCorrespondingAuthMethod(templatePath, regionMappings.regionMapping, regionMappings.key || '', 'back');\n const backMrzType = getCorrespondingMrzType(templatePath, regionMappings.regionMapping, regionMappings.key || '') || '';\n const frontTemplatePath = capturedImages['front']?.templatePath || '';\n\n verificationRes = await backVerification({\n path: safeCapturePath,\n regionMapping: {\n authMethod: matchedBackAuthMethod ? [matchedBackAuthMethod] : [],\n mrzTypes: backMrzType ? [backMrzType] : []\n },\n selectedDocumentType: GovernmentDocumentTypeShorted[selectedDocumentType.type as keyof typeof GovernmentDocumentTypeShorted] || '',\n code: countryData?.code || '',\n currentSide,\n templatePath,\n mrzType: backMrzType,\n templateResponse,\n issuingSubdivision: issuingSubdivision,\n frontTemplatePath: frontTemplatePath\n }, env);\n }\n\n const bbox = verificationRes?.bbox || templateBbox;\n const verifiedMrz = verificationRes?.mrz ? JSON.stringify(verificationRes.mrz) : \"\";\n\n if (isBarcodeRequired()) {\n const barcodeData = scannedBarcodeRef.current;\n const docTypeStr = selectedDocumentType!.type;\n const isHIC = docTypeStr === 'health_insurance_card';\n const isValidScan = typeof barcodeData === 'string' && ((isHIC && barcodeData.length > 0) || barcodeData.length > 50);\n\n if (isValidScan) {\n logger.log('[CA Barcode] Image captured, verified & barcode ALREADY scanned! Skipping Phase 2.');\n let parsedDictionary;\n if (isHIC && barcodeData.length < 50) {\n parsedDictionary = { data: { card_number: barcodeData, barcode_type: \"1D\" } };\n } else {\n const token = await authentification();\n parsedDictionary = await kycService.formatBarcodeData({ textInput: barcodeData, token }, env);\n }\n\n const verifiedResult: ISilentCaptureResult & { region?: string } = {\n path: safeCapturePath, templatePath: templatePath, bbox: bbox, success: true,\n mrz: JSON.stringify(parsedDictionary), barcode: barcodeData, isAnalyzing: false,\n country: countryData?.code, documentType: selectedDocumentType!.type,\n region: selectedDocumentType!.region !== 'root' ? selectedDocumentType!.region : undefined,\n };\n\n clearTimeout(watchdog);\n setSilentCaptureResult(verifiedResult);\n if (bbox) {\n const safeBbox = bbox as IBbox;\n setBboxBySide(prev => ({ ...prev, ['back']: safeBbox }));\n }\n await autoCapture(safeCapturePath!, verifiedResult);\n return;\n }\n\n logger.log('[CA Barcode] Image captured & template VERIFIED. Switching to Barcode phase.');\n clearTimeout(watchdog);\n setPendingCAImage({ path: safeCapturePath!, templateResponse, templatePath, bbox });\n setScanPhase('barcode');\n setSilentCaptureResult(prev => ({ ...prev, isAnalyzing: false }));\n return;\n }\n\n const verifiedResult: ISilentCaptureResult & { region?: string } = {\n path: safeCapturePath, templatePath, bbox, success: true, mrz: verifiedMrz,\n isAnalyzing: false, country: countryData?.code, documentType: selectedDocumentType.type,\n region: issuingSubdivision\n };\n \n clearTimeout(watchdog);\n setSilentCaptureResult(verifiedResult);\n if (bbox) setBboxBySide(prev => ({ ...prev, [currentSide]: bbox }));\n await autoCapture(safeCapturePath, verifiedResult);\n\n } catch (error: any) {\n clearTimeout(watchdog);\n console.log(\"Backend Verification Error:\", error);\n \n const isNetworkError = \n !error.response || \n error.message === 'Network Error' || \n error.code === 'ECONNABORTED' ||\n error.message?.includes('Network');\n\n let userFriendlyMessage = 'Verification failed. Please try again.';\n\n if (isNetworkError) {\n userFriendlyMessage = state.currentLanguage === 'en' \n ? 'Cannot connect to verification server. Please check your internet connection.'\n : 'Impossible de se connecter au serveur de vérification. Veuillez vérifier votre connexion internet.';\n \n Alert.alert(\n state.currentLanguage === 'en' ? \"Connection Failed\" : \"Échec de connexion\", \n userFriendlyMessage\n );\n } else {\n const rawMessage = (error?.message || '').toLowerCase();\n if (rawMessage.includes('impossible') || rawMessage.includes('unreadable')) {\n userFriendlyMessage = 'Document unreadable. Please hold the camera steady in good light.';\n } else if (rawMessage.includes('country mismatch') || rawMessage.includes('pays sélectionné')) {\n userFriendlyMessage = 'The document does not match your selected country.';\n } else if (rawMessage.includes('card_not_fully_in_frame')) {\n userFriendlyMessage = 'Move closer to the document and ensure all corners are visible.';\n } else if (rawMessage.includes('ne correspond pas au recto')) {\n userFriendlyMessage = 'The back of the document does not match the front. You must scan the same ID.';\n }\n }\n\n setSilentCaptureResult(prev => ({ ...prev, isAnalyzing: false, success: false, error: userFriendlyMessage }));\n }\n }\n };\n\n useEffect(() => {\n if (scanPhase === 'barcode' && pendingCAImage && silentCaptureResult.barcode) {\n const bData = silentCaptureResult.barcode;\n if (typeof bData === 'string' && bData.length > 50) {\n logger.log('[CA Barcode] Safety Net Triggered: Processing barcode.');\n processCanadianBarcode(bData);\n }\n }\n }, [scanPhase, pendingCAImage, silentCaptureResult.barcode]);\n\n const handleError = (event: { message: string, name?: string, code?: string }) => {\n logger.error(\"Camera Error:\", event);\n \n // Normalize the error to lowercase for easy checking\n const errString = `${event.message} ${event.name} ${event.code}`.toLowerCase();\n \n let friendlyMessage = state.currentLanguage === 'en' \n ? 'An unknown camera error occurred.' \n : 'Une erreur de caméra inconnue est survenue.';\n\n // 1. Detect Hardware Lock (Camera in use by Zoom, Teams, or another app)\n if (\n errString.includes('notreadableerror') || \n errString.includes('trackstarterror') || \n errString.includes('in use') || \n errString.includes('concurrent') ||\n errString.includes('camera unavailable')\n ) {\n friendlyMessage = state.currentLanguage === 'en'\n ? 'Your camera is currently being used by another application (like Zoom or Teams). Please close the other app and try again.'\n : 'Votre caméra est actuellement utilisée par une autre application. Veuillez fermer l\\'autre application et réessayer.';\n } \n // 2. Detect Permission Denied\n else if (errString.includes('notallowederror') || errString.includes('permission')) {\n friendlyMessage = state.currentLanguage === 'en'\n ? 'Camera permission denied. Please allow camera access in your settings to proceed.'\n : 'Autorisation de la caméra refusée. Veuillez autoriser l\\'accès dans vos paramètres.';\n }\n // 3. Detect No Camera Found\n else if (errString.includes('notfounderror') || errString.includes('no camera')) {\n friendlyMessage = state.currentLanguage === 'en'\n ? 'No camera detected on this device.'\n : 'Aucune caméra détectée sur cet appareil.';\n }\n\n showAlert(state.currentLanguage === 'en' ? 'Camera Error' : 'Erreur de Caméra', friendlyMessage);\n \n setShowCamera(false);\n setIsProcessingCapture(false);\n };\n\n useEffect(() => {\n actions.showCustomStepper(!showCamera);\n }, [showCamera]);\n\n useEffect(() => {\n if (Platform.OS === 'web' && typeof window !== 'undefined') {\n try {\n const url = new URL(window.location.origin);\n if (url.hostname === 'localhost') {\n url.hostname = '192.168.0.33';\n }\n const params = new URLSearchParams(window.location.search);\n params.set('session_id', state.session.session_id);\n params.set('resume', 'true');\n \n if (state.currentComponentIndex !== undefined) {\n params.set('component_index', String(state.currentComponentIndex));\n }\n if (countryData?.code) {\n params.set('country', countryData.code);\n }\n if (selectedDocumentType?.type) {\n params.set('document_type', selectedDocumentType.type);\n }\n if (selectedDocumentType?.region && selectedDocumentType.region !== 'root') {\n params.set('region', selectedDocumentType.region);\n }\n \n url.hash = params.toString();\n setCurrentUrl(url.toString());\n } catch (e) {\n console.error(\"Failed to construct QR handoff URL\", e);\n }\n }\n }, [state.session.session_id, state.currentComponentIndex, countryData, selectedDocumentType]);\n\n if (!countrySelectionData || !selectedDocumentType) {\n return (\n <View style={styles.root}>\n <View style={styles.previewContainer}>\n <Text style={styles.title}>{getLocalizedText(component.labels)}</Text>\n <Text style={styles.description}>\n {state.currentLanguage === \"en\" ? \"Please complete the country and document selection first.\" : \"Veuillez d'abord compléter la sélection du pays et du document.\"}\n </Text>\n </View>\n </View>\n );\n }\n\n if (showCamera) {\n const isBusy = isProcessingCapture;\n\n if (isRebootingCamera) {\n return (\n <View style={[styles.root, { justifyContent: 'center', alignItems: 'center', backgroundColor: '#000' }]}>\n <ActivityIndicator size=\"large\" color=\"#2DBD60\" />\n <Text style={{ color: 'white', marginTop: 20, fontSize: 16 }}>Initializing Camera...</Text>\n </View>\n );\n }\n\n return (\n <View style={styles.root}>\n <View style={[styles.cameraWrapper, { flex: 1 }]}>\n <View style={styles.headerContainer}>\n <Text style={styles.headerTitle}>\n {selectedDocumentType ? (locale === 'en' ? getDocumentTypeInfo(selectedDocumentType.type).name.en : getDocumentTypeInfo(selectedDocumentType.type).name.fr) : ''}\n </Text>\n <View style={styles.stepBadge}>\n <Text style={styles.stepText}>\n {t('kyc.idCardCapture.captureTitle', { side: currentSide === 'front' ? locale === 'en' ? 'Front' : 'Recto' : locale === 'en' ? 'Back' : 'Verso' })}\n </Text>\n </View>\n </View>\n\n <View style={[styles.cameraFeedContainer, { flex: 1, backgroundColor: '#000' }]}>\n {Platform.OS === 'web' && (\n <View style={styles.webTopControls}>\n <TouchableOpacity style={styles.webFlipButton} onPress={toggleCameraLens}>\n <Text style={styles.webFlipText}>🔄 Flip Lens</Text>\n </TouchableOpacity>\n </View>\n )}\n\n <EnhancedCameraView\n key={`${currentSide}-${cameraKey}`}\n showCamera={true}\n isProcessing={isBusy}\n cameraType={cameraConfig.cameraType}\n style={{ ...StyleSheet.absoluteFillObject, ...(Platform.OS === 'web' ? { width: '100%', height: '100%', left: 0, top: 0 } as any : {}) }}\n onError={handleError}\n onSilentCapture={handleSilentCapture}\n silentCaptureResult={silentCaptureResult}\n isScanningBarcode={currentSide === 'back'}\n barcodeTypes={targetBarcodeTypes}\n onBarcodeScanned={(barcodeString) => {\n const docTypeStr = selectedDocumentType?.type;\n const isFullDataDoc = docTypeStr === 'drivers_licence' || docTypeStr === 'national_id' || docTypeStr === 'identity_card';\n if (isFullDataDoc && barcodeString.length < 50) return;\n\n if (scannedBarcodeRef.current !== barcodeString) {\n scannedBarcodeRef.current = barcodeString;\n if (scanPhase === 'barcode' && pendingCAImage) {\n processCanadianBarcode(barcodeString);\n } else {\n setSilentCaptureResult(prev => ({ ...prev, barcode: barcodeString }));\n }\n }\n }}\n overlayComponent={\n <>\n <IdCardOverlay\n xMin={cameraConfig.overlay.bbox.xMin}\n yMin={cameraConfig.overlay.bbox.yMin}\n xMax={cameraConfig.overlay.bbox.xMax}\n yMax={cameraConfig.overlay.bbox.yMax}\n instructions={cameraConfig.overlay.guideText}\n cornerOpacity={cameraConfig.overlay.bbox.cornerRadius || 0 as number}\n isSuccess={silentCaptureResult.success || scanPhase === 'barcode'}\n language={state.currentLanguage}\n stepperProps={{\n back: () => {\n if (currentSide === 'back') {\n scannedBarcodeRef.current = null;\n setScanPhase('image');\n setPendingCAImage(null);\n setCurrentSide('front');\n setShowCamera(false);\n setIsProcessingCapture(false);\n setProcessingImagePath(null);\n if (capturedImages['front']?.dir) {\n const frontImage = capturedImages['front'];\n setSilentCaptureResult((prev) => ({\n ...prev, path: frontImage.dir, success: true, isAnalyzing: false, error: '', mrz: frontImage.mrz || '', templatePath: frontImage.templatePath || '', bbox: bboxBySide['front']\n }));\n } else {\n setSilentCaptureResult((prev) => ({ ...prev, path: '', success: false, isAnalyzing: false, error: '', templatePath: '' }));\n }\n } else {\n actions.previousComponent();\n }\n },\n selectedDocumentType: selectedDocumentType ? (locale === 'en' ? getDocumentTypeInfo(selectedDocumentType.type).name.en : getDocumentTypeInfo(selectedDocumentType.type).name.fr) : '',\n step: state.currentComponentIndex + 1,\n totalSteps: state.template.components.length,\n side: currentSide,\n }}\n />\n </>\n }\n />\n\n {scanPhase === 'barcode' && !isBusy && (\n <View style={styles.barcodePromptContainer}>\n <View style={styles.barcodePromptContent}>\n <View style={styles.barcodeIconContainer}>\n <Text style={styles.barcodeIcon}>✓</Text>\n </View>\n <View style={styles.barcodeTextContainer}>\n <Text style={styles.barcodePromptTitle}>\n {state.currentLanguage === 'en' ? 'Image Verified' : 'Image Vérifiée'}\n </Text>\n <Text style={styles.barcodePromptDesc}>\n {state.currentLanguage === 'en' ? 'Move closer to fill the screen with the 2D barcode.' : 'Rapprochez-vous pour scanner le code-barres 2D.'}\n </Text>\n </View>\n </View>\n </View>\n )}\n\n {!isBusy && silentCaptureResult.isAnalyzing && (\n <View style={styles.topAnalyzingPillContainer}>\n <View style={styles.topAnalyzingPill}>\n <ActivityIndicator size=\"small\" color=\"white\" />\n <Text style={styles.analyzingPillText}>\n {state.currentLanguage === 'en' ? 'Scanning...' : 'Analyse...'}\n </Text>\n </View>\n </View>\n )}\n\n {isBusy && (\n <View style={[StyleSheet.absoluteFillObject, { zIndex: 9999 }]}>\n {processingImagePath && (\n <Image source={{ uri: processingImagePath.startsWith('file://') ? processingImagePath : `file://${processingImagePath}` }} style={StyleSheet.absoluteFillObject} resizeMode=\"cover\" />\n )}\n <View style={styles.processingOverlay}>\n <ActivityIndicator size=\"large\" color=\"#2DBD60\" />\n <Text style={styles.processingText}>\n {state.currentLanguage === 'en' ? 'Perfect!\\nProcessing Document...' : 'Parfait!\\nTraitement du document...'}\n </Text>\n </View>\n </View>\n )}\n\n {!isBusy && Platform.OS === 'web' ? (\n <View style={styles.webBottomControlBar}>\n {silentCaptureResult.error && (\n <View style={styles.floatingErrorBanner}>\n <Text style={styles.floatingErrorText}>⚠️ {silentCaptureResult.error}</Text>\n </View>\n )}\n <View style={styles.webActionButtonsRow}>\n <TouchableOpacity style={styles.webSecondaryButton} onPress={() => setShowCamera(false)}>\n <Text style={styles.webSecondaryButtonText}>Cancel</Text>\n </TouchableOpacity>\n <TouchableOpacity style={styles.webPrimaryButton} onPress={refreshCamera}>\n <Text style={styles.webPrimaryButtonText}>↻ Refresh Camera</Text>\n </TouchableOpacity>\n </View>\n </View>\n ) : !isBusy ? (\n <View style={styles.escapeHatchContainer}>\n <TouchableOpacity style={styles.fallbackRefreshButton} onPress={refreshCamera}>\n <Text style={styles.fallbackRefreshText}>↻ Refresh Camera</Text>\n </TouchableOpacity>\n <TouchableOpacity style={[styles.fallbackRefreshButton, { marginTop: 15, backgroundColor: 'rgba(220, 38, 38, 0.8)', borderColor: '#DC2626' }]} onPress={() => setShowCamera(false)}>\n <Text style={styles.fallbackRefreshText}>Cancel / Go Back</Text>\n </TouchableOpacity>\n </View>\n ) : null}\n\n {silentCaptureResult.error && !isBusy && Platform.OS !== 'web' ? (\n <View style={[styles.floatingErrorBanner, { zIndex: 10000 }]}>\n <Text style={styles.floatingErrorText}>⚠️ {silentCaptureResult.error}</Text>\n </View>\n ) : null}\n </View>\n </View>\n </View>\n );\n }\n\n return (\n <View style={styles.root}>\n <View style={styles.previewContainer}>\n <ScrollView style={styles.previewItemContainer} showsVerticalScrollIndicator={false}>\n <View key={currentSide} style={styles.sideContainer}>\n <Text style={styles.sideTitle}>\n {t('kyc.idCardCapture.captureTitle', { side: currentSide === 'front' ? locale === 'en' ? 'Front' : 'Recto' : locale === 'en' ? 'Back' : 'Verso' })}\n </Text>\n <Text style={{ fontSize: 14, color: '#666', textAlign: 'center', marginBottom: 16, lineHeight: 22 }}>\n {getLocalizedText(component.instructions)}\n </Text>\n\n <View style={{ alignItems: 'center', justifyContent: 'center', flexDirection: \"column\", gap: 16 }}>\n <View style={styles.imagePreviewWrapper}>\n {capturedImages[currentSide]?.dir ? (\n <Image source={{ uri: capturedImages[currentSide].dir }} style={styles.previewImage} />\n ) : silentCaptureResult.path ? (\n <Image source={{ uri: silentCaptureResult.path }} style={styles.previewImage} />\n ) : null}\n </View>\n\n {!capturedImages[currentSide]?.dir && (\n <View style={{ width: '100%', gap: 12 }}>\n \n {isWebScanningRestricted ? (\n <>\n <View style={styles.restrictionWarningBanner}>\n <Text style={styles.restrictionWarningTitle}>\n {state.currentLanguage === 'en' ? '⚠️ Web Scanning Unavailable' : '⚠️ Numérisation Web Indisponible'}\n </Text>\n <Text style={styles.restrictionWarningText}>\n {state.currentLanguage === 'en'\n ? `This document can only be scanned using our mobile app.`\n : `Ce document ne peut être scanné qu'avec notre application mobile.`}\n </Text>\n </View>\n \n <Button \n title={state.currentLanguage === \"en\" ? \"Continue on Phone\" : \"Continuer sur le téléphone\"} \n onPress={() => setShowQRModal(true)} \n variant=\"primary\" \n size=\"large\" \n fullWidth \n />\n </>\n ) : (\n /* 🟢 NORMAL FLOW: Show \"Start Scanning\" and optional web handoff */\n <>\n <Button \n title={state.currentLanguage === \"en\" ? \"Start Scanning\" : \"Commencer la numérisation\"} \n onPress={() => {\n setShowCamera(true);\n refreshCamera();\n actions.showCustomStepper(false);\n }} \n variant=\"primary\" \n size=\"large\" \n fullWidth \n />\n \n {Platform.OS === 'web' && (\n <Button \n title={state.currentLanguage === \"en\" ? \"Continue on Phone\" : \"Continuer sur le téléphone\"} \n onPress={() => setShowQRModal(true)} \n variant=\"outline\" \n size=\"large\" \n fullWidth \n />\n )}\n </>\n )}\n \n </View>\n )}\n\n {capturedImages[currentSide]?.dir && (\n <>\n <Button title={t('kyc.idCardCapture.retakeButton')} onPress={() => retakePicture(currentSide)} variant=\"outline\" size=\"medium\" fullWidth />\n <Button title={t('common.next')} onPress={() => {\n if (!selectedDocumentType) {\n showAlert('Error', 'Document type not selected');\n return;\n }\n if (currentSide === 'back' || selectedDocumentType.type === 'passport') {\n actions.nextComponent();\n } else {\n setShowCamera(true);\n refreshCamera();\n setCurrentSide('back');\n setSilentCaptureResult({ success: false, isAnalyzing: false, path: '', error: '', templatePath: undefined });\n setIsProcessingCapture(false);\n setProcessingImagePath(null);\n setScanPhase('image');\n setPendingCAImage(null);\n }\n }} variant=\"primary\" size=\"large\" fullWidth />\n </>\n )}\n </View>\n </View>\n </ScrollView>\n </View>\n\n {showQRModal && Platform.OS === 'web' && (\n <View style={styles.qrModalOverlay}>\n <View style={styles.qrModalContainer}>\n <View style={styles.qrModalHeader}>\n <Text style={styles.qrModalTitle}>\n {state.currentLanguage === 'en' ? 'Continue on your phone' : 'Continuer sur votre téléphone'}\n </Text>\n <Text style={styles.qrModalText}>\n {state.currentLanguage === 'en'\n ? \"Scan the QR code to download our mobile app and complete the scanning process securely.\"\n : \"Scannez le code QR pour télécharger notre application et terminer la numérisation en toute sécurité.\"}\n </Text>\n </View>\n\n <View style={styles.qrToggleContainer}>\n <TouchableOpacity\n style={[styles.qrToggleButton, qrPlatform === 'android' && styles.qrToggleButtonActive]}\n onPress={() => setQrPlatform('android')}\n >\n <Text style={[styles.qrToggleText, qrPlatform === 'android' && styles.qrToggleTextActive]}>\n Android\n </Text>\n </TouchableOpacity>\n <TouchableOpacity\n style={[styles.qrToggleButton, qrPlatform === 'ios' && styles.qrToggleButtonActive]}\n onPress={() => setQrPlatform('ios')}\n >\n <Text style={[styles.qrToggleText, qrPlatform === 'ios' && styles.qrToggleTextActive]}>\n iOS (Apple)\n </Text>\n </TouchableOpacity>\n </View>\n\n <View style={styles.qrCodeWrapper}>\n <QRCode\n value={\n qrPlatform === 'android'\n ? 'https://play.google.com/store/apps/details?id=transfergratis.com&hl=en_CA&gl=US'\n : 'https://apps.apple.com/ca/app/transfergratis-money-transfer/id1605411731'\n }\n size={180} \n backgroundColor=\"#FFFFFF\"\n color=\"#0F172A\"\n />\n </View>\n\n <View style={styles.linkCodeSection}>\n <Text style={styles.linkCodeHeader}>\n {state.currentLanguage === 'en' ? 'Use code below to proceed on the Sanctum Key App.' : 'Vous avez déjà l\\'application ? Liez-la :'}\n </Text>\n \n {generatedCode ? (\n <ExpiringCodeTimer initialCode={generatedCode} language={state.currentLanguage} />\n ) : (\n <TouchableOpacity style={styles.generateCodeButton} onPress={handleGenerateCode} disabled={isGeneratingCode}>\n {isGeneratingCode ? (\n <ActivityIndicator size=\"small\" color=\"#0F172A\" />\n ) : (\n <Text style={styles.generateCodeButtonText}>\n {state.currentLanguage === 'en' ? 'Generate 5-Digit Link Code' : 'Générer un code à 5 chiffres'}\n </Text>\n )}\n </TouchableOpacity>\n )}\n </View>\n\n {isWebScanningRestricted && (\n <View style={styles.storeLinksContainer}>\n <Text style={styles.storeLinksTitle}>\n {state.currentLanguage === 'en' ? 'Or click to open directly:' : 'Ou cliquez pour ouvrir directement :'}\n </Text>\n <View style={styles.storeButtonsRow}>\n <TouchableOpacity style={styles.storeButton} onPress={() => window.open('https://play.google.com/store/apps/details?id=transfergratis.com&hl=en_CA&gl=US', '_blank')} >\n <Text style={styles.storeButtonText}>Google Play</Text>\n </TouchableOpacity>\n <TouchableOpacity style={styles.storeButton} onPress={() => window.open('https://apps.apple.com/ca/app/transfergratis-money-transfer/id1605411731', '_blank')} >\n <Text style={styles.storeButtonText}>App Store</Text>\n </TouchableOpacity>\n </View>\n </View>\n )}\n\n <Button\n title={state.currentLanguage === 'en' ? \"Cancel & Stay on Laptop\" : \"Annuler et rester sur l'ordinateur\"}\n onPress={() => setShowQRModal(false)}\n variant=\"outline\"\n fullWidth\n />\n </View>\n </View>\n)}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n root: { flex: 1, width: '100%', backgroundColor: 'transparent', alignSelf: 'center', ...Platform.select({ web: { minHeight: '85vh', justifyContent: 'center', alignItems: 'center' } as any, }) },\n cameraWrapper: { width: '100%', backgroundColor: '#000000', overflow: 'hidden', ...Platform.select({ web: { maxWidth: 1000, width: '95%', height: '80vh', minHeight: 600, borderRadius: 24, shadowColor: '#000', shadowOffset: { width: 0, height: 10 }, shadowOpacity: 0.15, shadowRadius: 30, elevation: 24 } as any, default: { flex: 1 } }) },\n headerContainer: { flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', flexWrap: 'wrap', gap: 10, paddingHorizontal: 20, paddingVertical: 18, backgroundColor: '#FFFFFF', borderBottomWidth: 1, borderBottomColor: '#F1F5F9', zIndex: 10, ...Platform.select({ web: { display: 'flex' }, default: { display: 'none' } }) },\n headerTitle: { fontSize: 18, fontWeight: '700', color: '#0F172A', flexShrink: 1 },\n stepBadge: { backgroundColor: '#F1F5F9', paddingHorizontal: 12, paddingVertical: 6, borderRadius: 20, },\n stepText: { fontSize: 13, fontWeight: '600', color: '#64748B', },\n cameraFeedContainer: { flex: 1, position: 'relative', backgroundColor: '#000', },\n escapeHatchContainer: { position: 'absolute', bottom: 40, left: 0, right: 0, alignItems: 'center', justifyContent: 'center', zIndex: 99999 },\n fallbackRefreshButton: { backgroundColor: 'rgba(0, 0, 0, 0.8)', borderWidth: 1, borderColor: 'rgba(255, 255, 255, 0.5)', paddingVertical: 12, paddingHorizontal: 24, borderRadius: 24, shadowColor: '#000', shadowOffset: { width: 0, height: 4 }, shadowOpacity: 0.3, shadowRadius: 5, elevation: 8 },\n fallbackRefreshText: { color: '#FFFFFF', fontWeight: 'bold', fontSize: 16 },\n webBottomControlBar: { position: 'absolute', bottom: 0, left: 0, right: 0, paddingHorizontal: 24, paddingBottom: 24, paddingTop: 30, backgroundColor: 'rgba(0,0,0,0.6)', zIndex: 99999 },\n webActionButtonsRow: { flexDirection: 'row', justifyContent: 'center', gap: 16, marginTop: 12, maxWidth: 500, alignSelf: 'center', width: '100%' },\n webPrimaryButton: { flex: 1, backgroundColor: '#2DBD60', paddingVertical: 14, borderRadius: 12, alignItems: 'center' },\n webPrimaryButtonText: { color: 'white', fontWeight: 'bold', fontSize: 16 },\n webSecondaryButton: { flex: 1, backgroundColor: 'rgba(255,255,255,0.15)', borderWidth: 1, borderColor: 'rgba(255,255,255,0.3)', paddingVertical: 14, borderRadius: 12, alignItems: 'center' },\n webSecondaryButtonText: { color: 'white', fontWeight: 'bold', fontSize: 16 },\n webTopControls: { position: 'absolute', top: Platform.OS === 'ios' ? 70 : 20, right: 20, zIndex: 9999 },\n webFlipButton: { backgroundColor: 'rgba(0,0,0,0.6)', paddingHorizontal: 16, paddingVertical: 10, borderRadius: 20, borderWidth: 1, borderColor: 'rgba(255,255,255,0.4)', ...Platform.select({ web: { backdropFilter: 'blur(4px)' } as any }) },\n webFlipText: { color: 'white', fontWeight: 'bold', fontSize: 14 },\n previewContainer: { width: '100%', backgroundColor: 'white', borderRadius: 12, paddingVertical: 30, paddingHorizontal: 24, shadowColor: '#000', shadowOffset: { width: 0, height: 4 }, shadowOpacity: 0.08, shadowRadius: 16, elevation: 8, ...Platform.select({ web: { alignSelf: 'center', maxWidth: 650 }, default: { margin: 10, width: '95%' }}) },\n previewItemContainer: { flexGrow: 1, },\n title: { fontSize: 24, fontWeight: 'bold', color: '#333', marginBottom: 8, textAlign: 'center' },\n description: { fontSize: 16, color: '#666', textAlign: 'center', marginBottom: 24, lineHeight: 22 },\n sideContainer: { marginBottom: 24 },\n sideTitle: { fontSize: 22, fontWeight: 'bold', color: '#000', marginBottom: 12, textAlign: 'center' },\n imagePreviewWrapper: { width: '100%', borderRadius: 12, padding: 1, overflow: 'hidden', shadowColor: '#000', shadowOffset: { width: 0, height: 4 }, shadowOpacity: 0.12, shadowRadius: 8, elevation: 8, backgroundColor: '#f0f0f0', ...Platform.select({ web: { aspectRatio: 1.59, height: 'auto', maxWidth: 450, alignSelf: 'center' } as any, default: { height: 220 } }) },\n previewImage: { width: '100%', height: '100%', borderRadius: 12, resizeMode: 'cover' },\n floatingErrorBanner: { backgroundColor: '#FEF2F2', borderWidth: 1, borderColor: '#FCA5A5', paddingVertical: 12, paddingHorizontal: 16, borderRadius: 12, alignItems: 'center', justifyContent: 'center', width: '100%', ...Platform.select({ web: { position: 'absolute', bottom: '100%', marginBottom: 16, maxWidth: 500, alignSelf: 'center', zIndex: 100000, boxShadow: '0 4px 12px rgba(0,0,0,0.15)' } as any, default: { position: 'absolute', top: Platform.OS === 'ios' ? 90 : 70, left: 24, right: 24, zIndex: 10000 } }) },\n floatingErrorText: { color: '#991B1B', fontSize: 14, fontWeight: '700', textAlign: 'center' },\n processingOverlay: { flex: 1, backgroundColor: 'rgba(0, 0, 0, 0.7)', justifyContent: 'center', alignItems: 'center', zIndex: 9999, ...Platform.select({ web: { backdropFilter: 'blur(4px)' } as any }) },\n processingText: { color: '#FFF', fontSize: 18, fontWeight: 'bold', marginTop: 16, textAlign: 'center' },\n errorText: { color: '#dc2626', fontSize: 14, marginTop: 8, textAlign: 'center' },\n topAnalyzingPillContainer: { position: 'absolute', top: Platform.OS === 'android' ? 60 : 75, left: 0, right: 0, alignItems: 'center', zIndex: 100 },\n topAnalyzingPill: { flexDirection: 'row', alignItems: 'center', backgroundColor: 'rgba(0,0,0,0.7)', paddingVertical: 10, paddingHorizontal: 20, borderRadius: 30, gap: 10, shadowColor: '#000', shadowOffset: {width: 0, height: 4}, shadowOpacity: 0.3, shadowRadius: 8 },\n analyzingPillText: { color: 'white', fontSize: 14, fontWeight: 'bold' },\n qrModalOverlay: { ...StyleSheet.absoluteFillObject, backgroundColor: 'rgba(15, 23, 42, 0.85)', justifyContent: 'center', alignItems: 'center', zIndex: 999999, ...Platform.select({ web: { backdropFilter: 'blur(8px)' } as any }) },\n qrModalContainer: { backgroundColor: '#FFFFFF', borderRadius: 24, padding: 32, width: '90%', maxWidth: 420, alignItems: 'center', shadowColor: '#000', shadowOffset: { width: 0, height: 20 }, shadowOpacity: 0.25, shadowRadius: 40, elevation: 24 },\n qrModalHeader: { alignItems: 'center', marginBottom: 24 },\n qrModalTitle: { fontSize: 24, fontWeight: '800', color: '#0F172A', marginBottom: 12, textAlign: 'center' },\n qrModalText: { fontSize: 15, color: '#475569', textAlign: 'center', lineHeight: 22 },\n qrCodeWrapper: { padding: 20, backgroundColor: '#FFFFFF', borderRadius: 20, borderWidth: 2, borderColor: '#E2E8F0', marginBottom: 16, shadowColor: '#000', shadowOffset: { width: 0, height: 4 }, shadowOpacity: 0.05, shadowRadius: 10 },\n listeningContainer: { flexDirection: 'row', alignItems: 'center', backgroundColor: '#F0FDF4', paddingVertical: 12, paddingHorizontal: 20, borderRadius: 12, marginBottom: 24, borderWidth: 1, borderColor: '#BBF7D0' },\n listeningText: { marginLeft: 12, color: '#166534', fontSize: 14, fontWeight: '600' },\n barcodePromptContainer: { position: 'absolute', top: Platform.OS === 'android' ? 60 : 75, left: 0, right: 0, alignItems: 'center', zIndex: 150, paddingHorizontal: 24, },\n barcodePromptContent: { flexDirection: 'row', alignItems: 'center', backgroundColor: 'rgba(15, 23, 42, 0.85)', paddingVertical: 14, paddingHorizontal: 20, borderRadius: 16, borderWidth: 1, borderColor: 'rgba(255, 255, 255, 0.15)', shadowColor: '#000', shadowOffset: { width: 0, height: 8 }, shadowOpacity: 0.3, shadowRadius: 12, elevation: 10, maxWidth: 400, ...Platform.select({ web: { backdropFilter: 'blur(8px)' } as any, ios: { backdropFilter: 'blur(8px)' } as any, }), },\n barcodeIconContainer: { width: 36, height: 36, borderRadius: 18, backgroundColor: 'rgba(45, 189, 96, 0.2)', justifyContent: 'center', alignItems: 'center', marginRight: 14, borderWidth: 1, borderColor: 'rgba(45, 189, 96, 0.5)', },\n barcodeIcon: { fontSize: 16, color: '#2DBD60', fontWeight: 'bold', },\n barcodeTextContainer: { flex: 1, },\n barcodePromptTitle: { color: '#2DBD60', fontSize: 16, fontWeight: '700', marginBottom: 4, },\n barcodePromptDesc: { color: '#F8FAFC', fontSize: 14, fontWeight: '500', lineHeight: 20, },\n storeLinksContainer: { width: '100%', alignItems: 'center', marginBottom: 24, paddingTop: 16, borderTopWidth: 1, borderTopColor: '#E2E8F0' },\n storeLinksTitle: { fontSize: 14, color: '#64748B', fontWeight: '600', marginBottom: 12 },\n storeButtonsRow: { flexDirection: 'row', gap: 12, width: '100%', justifyContent: 'center' },\n storeButton: { flex: 1, backgroundColor: '#0F172A', paddingVertical: 12, borderRadius: 10, alignItems: 'center' },\n storeButtonText: { color: '#FFFFFF', fontWeight: 'bold', fontSize: 14 },\n restrictionWarningBanner: {\n backgroundColor: '#FFFBEB', // Light amber background\n borderWidth: 1,\n borderColor: '#F59E0B', // Amber border\n borderRadius: 12,\n padding: 16,\n marginBottom: 4,\n width: '100%',\n shadowColor: '#F59E0B',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.1,\n shadowRadius: 4,\n },\n restrictionWarningTitle: {\n color: '#B45309', // Dark amber text\n fontSize: 15,\n fontWeight: '800',\n marginBottom: 6,\n textAlign: 'center'\n },\n restrictionWarningText: {\n color: '#D97706',\n fontSize: 13,\n fontWeight: '500',\n textAlign: 'center',\n lineHeight: 18\n },\n qrToggleContainer: {\n flexDirection: 'row',\n backgroundColor: '#F1F5F9', // Light gray background\n borderRadius: 12,\n padding: 4,\n marginBottom: 20,\n width: '100%',\n },\n qrToggleButton: {\n flex: 1,\n paddingVertical: 10,\n borderRadius: 8,\n alignItems: 'center',\n justifyContent: 'center',\n },\n qrToggleButtonActive: {\n backgroundColor: '#FFFFFF',\n shadowColor: '#0F172A',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.08,\n shadowRadius: 4,\n elevation: 2,\n },\n qrToggleText: {\n fontSize: 14,\n fontWeight: '600',\n color: '#64748B', // Inactive text color\n },\n qrToggleTextActive: {\n color: '#0F172A', // Active text color\n },\n linkCodeSection: {\n width: '100%',\n alignItems: 'center',\n backgroundColor: '#F8FAFC', // Very light slate\n borderRadius: 16,\n padding: 16,\n marginBottom: 20,\n borderWidth: 1,\n borderColor: '#E2E8F0',\n },\n linkCodeHeader: {\n fontSize: 13,\n color: '#475569',\n fontWeight: '600',\n marginBottom: 12,\n },\n generateCodeButton: {\n backgroundColor: '#E2E8F0',\n paddingVertical: 12,\n paddingHorizontal: 20,\n borderRadius: 10,\n width: '100%',\n alignItems: 'center',\n justifyContent: 'center',\n height: 44, // Fixed height to prevent jumping during loading state\n },\n generateCodeButtonText: {\n color: '#0F172A',\n fontWeight: '700',\n fontSize: 14,\n },\n activeCodeContainer: {\n alignItems: 'center',\n width: '100%',\n },\n activeCodeText: {\n fontSize: 32,\n fontWeight: '900',\n color: '#2DBD60',\n letterSpacing: 4,\n marginBottom: 4,\n },\n timerText: {\n fontSize: 12,\n color: '#EF4444', // Red to indicate urgency\n fontWeight: '600',\n },\n});"]}
1
+ {"version":3,"file":"IDCardCapture.js","sourceRoot":"","sources":["../../../../src/components/KYCElements/IDCardCapture.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { View, Text, StyleSheet, Image, ScrollView, Platform, ActivityIndicator, TouchableOpacity, useWindowDimensions } from 'react-native';\nimport { showAlert } from '../../utils/platformAlert';\nimport { EnhancedCameraView } from '../EnhancedCameraView';\nimport { TemplateComponent, LocalizedText, GovernmentDocumentType, ISilentCaptureResult, IBbox, GovernmentDocumentTypeShorted, GovernmentDocumentTypeBackend } from '../../types/KYC.types';\nimport IdCardOverlay from '../OverLay/IdCard';\nimport { useTemplateKYCFlowContext } from '../../hooks/useTemplateKYCFlow';\nimport { useI18n } from '../../hooks/useI18n';\nimport { Button } from '../ui/Button';\nimport { removeDuplicates } from '../../utils/remove-duplicate';\nimport { backVerification, checkTemplateType, frontVerification } from '../../modules/api/CardAuthentification';\nimport { getDocumentTypeInfo } from '../../utils/get-document-type-info';\nimport pathToBase64 from '../../utils/pathToBase64';\nimport { cropByObb, getObbConfidence, OBB_CONFIDENCE_THRESHOLD } from '../../utils/cropByObb';\nimport REGION_MAPPING from '../../config/region_mapping.json';\nimport QRCode from 'react-native-qrcode-svg';\nimport { logger } from '../../utils/logger';\nimport { cropImageWithBBoxWithTolerance } from '../../utils/cropByObb'; \nimport kycService, { authentification } from '../../modules/api/KYCService';\n\nconst ISO_TO_COUNTRY_NAME: Record<string, string> = {\n 'KE': 'Kenya', 'CM': 'Cameroon', 'NG': 'Nigeria', 'CA': 'Canada',\n 'FR': 'France', 'GH': 'Ghana', 'ZA': 'South Africa', 'GB': 'Britain',\n 'CI': 'Ivory Coast', 'SN': 'Senegal', 'TG': 'Togo', 'ML': 'Mali'\n};\n\ninterface IIDCardPayload {\n dir: string;\n file: string;\n mrz: string;\n templatePath?: string;\n}\n\ninterface IDCardCaptureProps {\n component: TemplateComponent;\n value?: Record<string, IIDCardPayload>;\n onValueChange: (value: Record<string, IIDCardPayload | string>) => void;\n error?: string;\n language?: string;\n currentSide?: string;\n}\n\nconst SHORT_TO_LONG_REGION: Record<string, string> = {\n \"AB\": \"Alberta\", \"BC\": \"British Columbia\", \"MB\": \"Manitoba\",\n \"NB\": \"New Brunswick\", \"NL\": \"Newfoundland and Labrador\",\n \"NT\": \"Northwest Territories\", \"NS\": \"Nova Scotia\", \"NU\": \"Nunavut\",\n \"ON\": \"Ontario\", \"PE\": \"Prince Edward Island\", \"QC\": \"Quebec\",\n \"SK\": \"Saskatchewan\", \"YT\": \"Yukon\"\n};\n\n// 🚨 Isolates the 1-second re-renders away from the Camera!\nconst ExpiringCodeTimer = ({ initialCode, language }: { initialCode: string, language: string }) => {\n const [timeLeft, setTimeLeft] = useState(300);\n\n useEffect(() => {\n if (timeLeft <= 0) return;\n const timer = setInterval(() => setTimeLeft((prev) => prev - 1), 1000);\n return () => clearInterval(timer);\n }, [timeLeft]);\n\n const formatTime = (seconds: number) => {\n const m = Math.floor(seconds / 60);\n const s = seconds % 60;\n return `${m}:${s.toString().padStart(2, '0')}`;\n };\n\n if (timeLeft <= 0) return null;\n\n return (\n <View style={styles.activeCodeContainer}>\n <Text style={styles.activeCodeText}>{initialCode}</Text>\n <Text style={styles.timerText}>\n {language === 'en' ? `Expires in ${formatTime(timeLeft)}` : `Expire dans ${formatTime(timeLeft)}`}\n </Text>\n </View>\n );\n};\n\nexport const IDCardCapture: React.FC<IDCardCaptureProps> = ({ component, value = {}, onValueChange, error, language = 'en' }) => {\n const { t, locale } = useI18n();\n const [showCamera, setShowCamera] = useState(false);\n const [capturedImages, setCapturedImages] = useState<Record<string, IIDCardPayload>>(value || {});\n const [currentSide, setCurrentSide] = useState<'front' | 'back'>('front');\n const [bboxBySide, setBboxBySide] = useState<Record<string, IBbox>>({});\n const [silentCaptureResult, setSilentCaptureResult] = useState<ISilentCaptureResult>({ success: false, isAnalyzing: false });\n const [isProcessingCapture, setIsProcessingCapture] = useState(false);\n const [processingImagePath, setProcessingImagePath] = useState<string | null>(null);\n const [cameraKey, setCameraKey] = useState(0);\n const [isRebootingCamera, setIsRebootingCamera] = useState(false);\n const [cameraType, setCameraType] = useState<'back' | 'front'>('back');\n const [showQRModal, setShowQRModal] = useState(false);\n const [currentUrl, setCurrentUrl] = useState('');\n const [qrPlatform, setQrPlatform] = useState<'android' | 'ios'>('android');\n \n const [scanPhase, setScanPhase] = useState<'image' | 'barcode'>('image');\n const [pendingCAImage, setPendingCAImage] = useState<{ path: string, templateResponse: any, templatePath: string, bbox?: IBbox } | null>(null);\n \n const scannedBarcodeRef = useRef<string | null>(null);\n // Ref mirrors — prevent stale closure reads in handleSilentCapture on iOS\n const isAnalyzingRef = useRef<boolean>(false);\n const isProcessingCaptureRef = useRef<boolean>(false);\n const scanPhaseRef = useRef<'image' | 'barcode'>('image');\n\n const [generatedCode, setGeneratedCode] = useState<string | null>(null);\n const [isGeneratingCode, setIsGeneratingCode] = useState(false);\n\n\n const handleGenerateCode = async () => {\n if (isGeneratingCode) return;\n setIsGeneratingCode(true);\n \n try {\n if (!apiKey) {\n showAlert('Error', 'API Key is missing.');\n setIsGeneratingCode(false);\n return;\n }\n\n // Pass the dynamic apiKey to your service\n const res = await kycService.generateReferralCode(\n { session_id: state.session.session_id }, \n apiKey\n );\n\n // Extract the code from the response\n const newCode = res.code || res.referral_code || res?.data?.code || res?.data?.referral_code; \n \n if (newCode) {\n setGeneratedCode(newCode);\n } else {\n showAlert('Error', 'Failed to parse code from server response.');\n }\n } catch (error: any) {\n showAlert('Error', error.message || 'Failed to generate code');\n } finally {\n setIsGeneratingCode(false);\n }\n };\n\n useEffect(() => {\n if (typeof window !== 'undefined' && window.location) setCurrentUrl(window.location.href);\n console.log(currentUrl)\n }, []);\n\n const documentTypeMapping: Record<string, GovernmentDocumentType> = {\n 'nationalId': 'national_id', 'national_id': 'national_id', 'identity_card': 'national_id',\n 'passport': 'passport', 'driversLicense': 'drivers_licence', 'drivers_licence': 'drivers_licence',\n 'residencePermit': 'permanent_residence', 'permanent_residence': 'permanent_residence',\n 'healthInsuranceCard': 'health_insurance_card', 'health_insurance_card': 'health_insurance_card',\n };\n\n const { actions, state, env, apiKey } = useTemplateKYCFlowContext();\n const { width: screenWidth, height: screenHeight } = useWindowDimensions();\n\n const getLocalizedText = (text: LocalizedText | Record<string, LocalizedText>): string => {\n if (text && typeof text[currentSide] === 'object' && text[currentSide][locale])\n return text[currentSide][locale] || '';\n return \"\";\n };\n\n useEffect(() => {\n if (Platform.OS === 'web' && typeof window !== 'undefined') {\n const baseUrl = window.location.origin + window.location.pathname;\n const handoffUrl = `${baseUrl}?session_id=${state.session.session_id}&resume=true`;\n setCurrentUrl(handoffUrl);\n }\n }, [state.session.session_id]);\n\n const countrySelectionData = useMemo(() => {\n const countrySelectionComponent = state.template.components.find(c => c.type === 'country_selection');\n return countrySelectionComponent ? state.componentData[countrySelectionComponent.id] : null;\n }, [state.template.components, state.componentData]);\n\n const selectedDocumentType = useMemo<{ type: GovernmentDocumentType; region: string } | null>(() => {\n if (!countrySelectionData?.documentType) return null;\n const backendDocType = countrySelectionData.documentType;\n const mappedType = documentTypeMapping[backendDocType] || backendDocType as GovernmentDocumentType;\n return { type: mappedType, region: countrySelectionData.region || 'root' };\n }, [countrySelectionData, documentTypeMapping]);\n\n const countryData = useMemo(() => countrySelectionData, [countrySelectionData]);\n\n const isWebScanningRestricted = useMemo(() => {\n if (Platform.OS !== 'web') return false;\n if (countryData?.code !== 'CA') return false;\n \n const docType = selectedDocumentType?.type;\n return docType === 'drivers_licence' || \n docType === 'health_insurance_card' || \n docType === 'national_id' || \n docType === 'identity_card';\n }, [countryData?.code, selectedDocumentType?.type]);\n\n const targetBarcodeTypes = useMemo<any[]>(() => {\n const docType = selectedDocumentType?.type;\n if (docType === 'health_insurance_card') return ['code-128', 'code-39', 'pdf-417'];\n return ['pdf-417'];\n }, [selectedDocumentType]);\n\n const refreshCamera = () => {\n setIsRebootingCamera(true);\n\n if (scanPhase === 'barcode') {\n setScanPhase('image');\n setPendingCAImage(null);\n scannedBarcodeRef.current = null;\n \n setCapturedImages((prev) => {\n const newState = { ...prev };\n delete newState[currentSide];\n return newState;\n });\n\n if (value) {\n const newValue = { ...value };\n delete newValue[currentSide];\n onValueChange(newValue);\n }\n\n setSilentCaptureResult({\n success: false,\n isAnalyzing: false,\n path: '',\n error: '',\n templatePath: '',\n mrz: '',\n bbox: undefined\n });\n }\n\n setTimeout(() => {\n setCameraKey(prev => prev + 1);\n setIsRebootingCamera(false);\n }, 1000);\n };\n\n const toggleCameraLens = () => {\n setCameraType(prev => prev === 'back' ? 'front' : 'back');\n refreshCamera();\n };\n\n useEffect(() => {\n if (value && Object.keys(value).length > 0) {\n if (JSON.stringify(value) !== JSON.stringify(capturedImages)) {\n const updatedImages = value as Record<string, IIDCardPayload>;\n setCapturedImages(updatedImages);\n const currentImageData = updatedImages[currentSide];\n \n if (currentImageData?.dir) {\n setSilentCaptureResult(prev => ({\n ...prev,\n path: currentImageData.dir,\n success: true,\n isAnalyzing: false,\n mrz: currentImageData.mrz || '',\n templatePath: currentImageData.templatePath || '',\n }));\n }\n }\n }\n }, [value, currentSide]);\n\n // Keep refs in sync with state so handleSilentCapture always reads current values\n useEffect(() => { isAnalyzingRef.current = silentCaptureResult.isAnalyzing ?? false; }, [silentCaptureResult.isAnalyzing]);\n useEffect(() => { isProcessingCaptureRef.current = isProcessingCapture; }, [isProcessingCapture]);\n useEffect(() => { scanPhaseRef.current = scanPhase; }, [scanPhase]);\n\n const cameraConfig = useMemo(() => {\n let instructions = selectedDocumentType\n ? (locale === 'en' ? getDocumentTypeInfo(selectedDocumentType.type).instructions.en : getDocumentTypeInfo(selectedDocumentType.type).instructions.fr)\n : getLocalizedText(component.instructions as Record<string, LocalizedText>);\n\n if (scanPhase === 'barcode') {\n instructions = '';\n }\n\n const isLandscape = screenWidth > screenHeight;\n let xMin, xMax, yMin, yMax;\n\n if (Platform.OS === 'web') {\n const boxWidthPercent = isLandscape ? 0.40 : 0.85;\n xMin = isLandscape ? 30 : 7.5;\n xMax = xMin + (boxWidthPercent * 100);\n\n const containerWidth = Math.min(screenWidth * 0.95, 1000);\n const containerHeight = isLandscape ? screenHeight * 0.80 : screenHeight * 0.90;\n\n const boxPixelWidth = containerWidth * boxWidthPercent;\n const boxPixelHeight = boxPixelWidth / 1.59;\n\n const heightPercent = (boxPixelHeight / containerHeight) * 100;\n yMin = (100 - heightPercent) / 2.5;\n yMax = yMin + heightPercent;\n } else {\n xMin = 5;\n xMax = 95;\n yMin = 34;\n yMax = 66;\n }\n\n const platformBbox = {\n xMin,\n yMin,\n xMax,\n yMax,\n borderColor: scanPhase === 'barcode' ? '#EAB308' : '#2DBD60',\n borderWidth: Platform.OS === 'web' ? 2 : 3,\n cornerRadius: 8\n };\n\n return {\n cameraType: Platform.OS === 'web' ? cameraType : 'back',\n flashMode: 'auto' as const,\n overlay: { guideText: instructions, bbox: platformBbox }\n };\n }, [selectedDocumentType, locale, component.instructions, cameraType, screenWidth, screenHeight, scanPhase]);\n\n const retakePicture = (sideToRetake: 'front' | 'back') => {\n setIsProcessingCapture(false);\n setProcessingImagePath(null);\n scannedBarcodeRef.current = null;\n setScanPhase('image');\n setPendingCAImage(null);\n setSilentCaptureResult({ path: '', success: false, isAnalyzing: false, error: '', templatePath: '', mrz: '', bbox: undefined });\n setShowCamera(true);\n refreshCamera();\n actions.showCustomStepper(false);\n setCapturedImages((prev) => {\n const newState = { ...prev };\n delete newState[sideToRetake];\n return newState;\n });\n\n if (value) {\n const newValue = { ...value };\n delete newValue[sideToRetake];\n onValueChange(newValue);\n }\n };\n\n const getCurrentSideVerification = (currentSide: string, countryKey: string) => {\n const rawDocType = countrySelectionData?.documentType;\n if (!rawDocType || !countryKey) return { authMethod: [], mrzTypes: [], regionMapping: null, key: 'root' };\n\n const jsonDocMap: Record<string, string> = {\n 'nationalId': 'identity_card', 'national_id': 'identity_card', 'passport': 'passport',\n 'driversLicense': 'drivers_licence', 'drivers_licence': 'drivers_licence',\n 'residencePermit': 'permanent_residence', 'healthInsuranceCard': 'health_insurance_card'\n };\n\n const searchDocType = jsonDocMap[rawDocType] || rawDocType;\n const rawCountryName = ISO_TO_COUNTRY_NAME[countryData?.code || ''] || countryData?.code || countryKey;\n const baseMapping = (REGION_MAPPING as any).regionMapping || REGION_MAPPING;\n \n let countryMapping = baseMapping[rawCountryName];\n if (!countryMapping) {\n const foundKey = Object.keys(baseMapping).find(k => k.toLowerCase() === rawCountryName.toLowerCase() || k.toLowerCase() === countryKey.toLowerCase());\n if (foundKey) countryMapping = baseMapping[foundKey];\n }\n \n if (!countryMapping || !countryMapping[searchDocType]) return { authMethod: [], mrzTypes: [], regionMapping: null, key: 'root' };\n\n const authMethod: string[] = [];\n const mrzTypes: string[] = [];\n const rawRegionKey = countrySelectionData.region?.trim()?.length > 0 ? countrySelectionData.region.trim() : 'root';\n const key = SHORT_TO_LONG_REGION[rawRegionKey] || rawRegionKey;\n const regionMapping = countryMapping[searchDocType];\n\n if (regionMapping?.[key] && Array.isArray(regionMapping[key])) {\n regionMapping[key].forEach((item: any) => {\n if (item[currentSide]) authMethod.push(item[currentSide]);\n if (item?.mrz_type) mrzTypes.push(item?.mrz_type);\n });\n }\n\n return { authMethod: removeDuplicates(authMethod), mrzTypes: removeDuplicates(mrzTypes), regionMapping, key };\n }\n\n const getCorrespondingMrzType = (templatePath: string, mapping: any, regionKey: string = \"root\") => {\n if (!mapping || !mapping[regionKey]) return null;\n const fileName = templatePath.split(\"/\").pop()?.replace(/\\.(jpg|jpeg|png|py)$/i, \"\");\n if (!fileName) return null;\n const pyName = `${fileName}.py`;\n const found = mapping[regionKey].find((item: any) => item.py_file === pyName);\n return found?.mrz_type || null;\n };\n\n const getCorrespondingAuthMethod = (templatePath: string, mapping: any, regionKey: string = \"root\", side: 'front' | 'back') => {\n if (!mapping || !mapping[regionKey]) return null;\n const fileName = templatePath.split(\"/\").pop()?.replace(/\\.(jpg|jpeg|png|py)$/i, \"\");\n if (!fileName) return null;\n const pyName = `${fileName}.py`;\n const found = mapping[regionKey].find((item: any) => item.py_file === pyName);\n return found?.[side] || null;\n };\n\n const autoCapture = async (capturePath: string, verified: ISilentCaptureResult & { region?: string }) => {\n if (isProcessingCapture) return;\n setIsProcessingCapture(true);\n\n const safeCapturePath = (Platform.OS === 'ios' && !capturePath.startsWith('file://')) \n ? `file://${capturePath}` \n : capturePath;\n\n setProcessingImagePath(safeCapturePath);\n\n try {\n let imagePathForUpload = capturePath;\n const overlayBbox = cameraConfig.overlay.bbox;\n const uiCropBbox = {\n minX: overlayBbox.xMin / 100, minY: overlayBbox.yMin / 100,\n width: (overlayBbox.xMax - overlayBbox.xMin) / 100,\n height: (overlayBbox.yMax - overlayBbox.yMin) / 100,\n };\n\n try {\n imagePathForUpload = await cropImageWithBBoxWithTolerance(safeCapturePath, uiCropBbox, 0.06);\n } catch (e) {\n console.warn(\"Crop failed, falling back to original image\", e);\n imagePathForUpload = safeCapturePath; \n }\n\n const safeCroppedPath = (Platform.OS === 'ios' && !imagePathForUpload.startsWith('file://')) \n ? `file://${imagePathForUpload}` \n : imagePathForUpload;\n\n const base64 = await pathToBase64(safeCroppedPath);\n const newImages = {\n ...capturedImages,\n // Store safeCroppedPath (guaranteed file:// on iOS) as dir so\n // Image source={{ uri }} never receives a bare path on iOS.\n [currentSide]: { dir: safeCroppedPath, file: base64, mrz: verified.mrz || \"\", templatePath: verified.templatePath },\n };\n\n setCapturedImages(newImages);\n\n if (verified.country && verified.documentType) {\n const docType = verified.documentType as string;\n const resolvedDocumentType = GovernmentDocumentTypeBackend[docType] || (Object.values(GovernmentDocumentTypeBackend).includes(docType as GovernmentDocumentType) ? docType : null) || Object.entries(GovernmentDocumentTypeBackend).find(([, v]) => v === docType)?.[1] || docType;\n onValueChange({\n ...newImages,\n country: verified.country,\n documentType: resolvedDocumentType,\n ...(verified.region ? { region: verified.region } : {})\n });\n }\n\n setTimeout(() => {\n setShowCamera(false);\n actions.showCustomStepper(true);\n setSilentCaptureResult(prev => ({ ...prev, isAnalyzing: false }));\n setIsProcessingCapture(false);\n setProcessingImagePath(null);\n setScanPhase('image');\n setPendingCAImage(null);\n }, 600);\n } catch (e: any) {\n console.error(\"Backend Error:\", e);\n const friendlyError = state.currentLanguage === 'en' ? 'Unable to process document. Please try again.' : 'Impossible de traiter le document. Veuillez réessayer.';\n showAlert('Error', friendlyError);\n setSilentCaptureResult(prev => ({ ...prev, isAnalyzing: false, success: false }));\n setIsProcessingCapture(false);\n setProcessingImagePath(null);\n }\n };\n\n const isBarcodeRequired = (): boolean => {\n if (currentSide !== 'back') return false;\n if (!countryData?.code || !selectedDocumentType?.type) return false;\n\n const rawDocType = selectedDocumentType.type;\n const jsonDocMap: Record<string, string> = {\n 'nationalId': 'identity_card', 'national_id': 'identity_card', 'passport': 'passport',\n 'driversLicense': 'drivers_licence', 'drivers_licence': 'drivers_licence',\n 'residencePermit': 'permanent_residence', 'healthInsuranceCard': 'health_insurance_card'\n };\n \n const searchDocType = jsonDocMap[rawDocType] || rawDocType;\n const rawCountryName = ISO_TO_COUNTRY_NAME[countryData.code] || countryData.code;\n const baseMapping = (REGION_MAPPING as any).regionMapping || REGION_MAPPING;\n \n let countryMapping = baseMapping[rawCountryName];\n if (!countryMapping) {\n const foundKey = Object.keys(baseMapping).find(k => k.toLowerCase() === rawCountryName.toLowerCase() || k.toLowerCase() === countryData.code.toLowerCase());\n if (foundKey) countryMapping = baseMapping[foundKey];\n }\n \n if (!countryMapping || !countryMapping[searchDocType]) return false;\n\n const rawRegionKey = countryData.region?.trim()?.length > 0 ? countryData.region.trim() : 'root';\n const regionKey = SHORT_TO_LONG_REGION[rawRegionKey] || rawRegionKey;\n const regionData = countryMapping[searchDocType][regionKey];\n \n if (!regionData || !Array.isArray(regionData)) return false;\n\n const requiresBarcode = regionData.some((item: any) => {\n const method = String(item['back'] || '').toUpperCase();\n return method.includes('BARCODE') || method.includes('2D');\n });\n\n logger.log(`[Barcode Check] Dynamic check for ${countryData.code} - ${searchDocType} - ${regionKey}: requiresBarcode=${requiresBarcode}`);\n return requiresBarcode;\n };\n\n const processCanadianBarcode = async (barcodeString: string) => {\n if (isProcessingCapture || !pendingCAImage) return;\n logger.log('[CA Barcode] Valid barcode decoded. Sending to parser...');\n \n setSilentCaptureResult(prev => ({ ...prev, isAnalyzing: true, error: '' }));\n \n try {\n const isHIC = selectedDocumentType!.type === 'health_insurance_card';\n let parsedDictionary;\n \n if (isHIC && barcodeString.length < 50) {\n parsedDictionary = { data: { card_number: barcodeString, barcode_type: \"1D\" } };\n } else {\n const token = await authentification();\n parsedDictionary = await kycService.formatBarcodeData({ textInput: barcodeString, token }, env);\n }\n \n if (!parsedDictionary) throw new Error(\"Could not parse the barcode data.\");\n\n const verifiedResult: ISilentCaptureResult & { region?: string } = {\n path: pendingCAImage.path,\n templatePath: pendingCAImage.templatePath,\n bbox: pendingCAImage.bbox,\n success: true,\n mrz: JSON.stringify(parsedDictionary),\n barcode: barcodeString,\n isAnalyzing: false,\n country: countryData?.code,\n documentType: selectedDocumentType!.type,\n region: selectedDocumentType!.region !== 'root' ? selectedDocumentType!.region : undefined,\n };\n\n setSilentCaptureResult(verifiedResult);\n if (pendingCAImage.bbox) {\n const safeBbox = pendingCAImage.bbox as IBbox;\n setBboxBySide(prev => ({ ...prev, ['back']: safeBbox }));\n }\n \n await autoCapture(pendingCAImage.path, verifiedResult);\n } catch (error: any) {\n console.error(\"Barcode processing failed\", error);\n setScanPhase('image');\n setPendingCAImage(null);\n scannedBarcodeRef.current = null;\n setSilentCaptureResult(prev => ({ ...prev, isAnalyzing: false, success: false, error: 'Failed to process barcode. Please retake the photo.' }));\n }\n };\n\n const handleSilentCapture = async (result: { success: boolean; path?: string; error?: string; barcode?: unknown }) => {\n if (isProcessingCaptureRef.current) return;\n if (scanPhaseRef.current === 'barcode') return;\n if (isAnalyzingRef.current) return;\n \n if (result.success && result.path) {\n setSilentCaptureResult((prev) => ({ ...prev, isAnalyzing: true, success: false, error: '' }));\n \n const safeCapturePath = Platform.OS === 'ios' && !result.path.startsWith('file://') ? `file://${result.path}` : result.path;\n let templatePath = capturedImages[currentSide]?.templatePath || '';\n let templateBbox: IBbox | undefined;\n let templateResponse: any;\n \n if (!selectedDocumentType) {\n setSilentCaptureResult((prev) => ({ ...prev, isAnalyzing: false, success: false, error: 'Document type not selected' }));\n return;\n }\n \n const issuingSubdivision = selectedDocumentType.region !== 'root' ? selectedDocumentType.region : undefined;\n \n // Subtle timeout handling without blocking pop-ups\n const watchdog = setTimeout(() => {\n if (isAnalyzingRef.current) {\n setSilentCaptureResult((prev) => ({\n ...prev,\n isAnalyzing: false,\n success: false,\n error: state.currentLanguage === 'en' ? 'Taking longer than expected. Hold steady.' : 'Traitement long. Veuillez rester immobile.'\n }));\n }\n }, 20000);\n \n try {\n if (!templatePath) {\n const templateType = await checkTemplateType({\n path: safeCapturePath,\n docType: selectedDocumentType?.type as GovernmentDocumentType,\n docRegion: countryData?.code || \"\",\n postfix: currentSide,\n issuingSubdivision: issuingSubdivision\n }, env);\n \n templateResponse = templateType;\n if (templateType.template_path) templatePath = templateType.template_path;\n \n if (templateType.card_obb) {\n const obbConfidence = getObbConfidence((templateType as any).card_obb);\n if (obbConfidence !== null && obbConfidence < OBB_CONFIDENCE_THRESHOLD) {\n clearTimeout(watchdog);\n setSilentCaptureResult((prev) => ({ ...prev, isAnalyzing: false, success: false, error: t('kyc.idCardCapture.cardNotFullyInFrame') }));\n return;\n }\n try {\n const crop = await cropByObb(safeCapturePath, (templateType as any).card_obb);\n templateBbox = crop.bbox;\n } catch {}\n }\n }\n \n const extractedCountryKey = templatePath ? templatePath.split('/')[0] : (ISO_TO_COUNTRY_NAME[countryData?.code || ''] || 'root');\n const regionMappings = getCurrentSideVerification(currentSide, extractedCountryKey);\n let verificationRes: any;\n \n if (currentSide === 'front') {\n const matchedAuthMethod = getCorrespondingAuthMethod(templatePath, regionMappings.regionMapping, regionMappings.key || '', 'front');\n const mrzType = getCorrespondingMrzType(templatePath, regionMappings.regionMapping, regionMappings.key || '') || 'TD1';\n \n verificationRes = await frontVerification({\n path: safeCapturePath,\n regionMapping: { authMethod: matchedAuthMethod ? [matchedAuthMethod] : [], mrzTypes: mrzType ? [mrzType] : [] },\n selectedDocumentType: GovernmentDocumentTypeShorted[selectedDocumentType?.type as keyof typeof GovernmentDocumentTypeShorted] || '',\n code: countryData?.code || '',\n currentSide,\n templatePath,\n mrzType,\n issuingSubdivision: issuingSubdivision,\n clientSideBarcodeData: silentCaptureResult.barcode\n }, env);\n } else {\n logger.log(\"Attempting backVerification with:\", { path: safeCapturePath, templatePath, side: currentSide });\n const matchedBackAuthMethod = getCorrespondingAuthMethod(templatePath, regionMappings.regionMapping, regionMappings.key || '', 'back');\n const backMrzType = getCorrespondingMrzType(templatePath, regionMappings.regionMapping, regionMappings.key || '') || '';\n const frontTemplatePath = capturedImages['front']?.templatePath || '';\n \n verificationRes = await backVerification({\n path: safeCapturePath,\n regionMapping: { authMethod: matchedBackAuthMethod ? [matchedBackAuthMethod] : [], mrzTypes: backMrzType ? [backMrzType] : [] },\n selectedDocumentType: GovernmentDocumentTypeShorted[selectedDocumentType.type as keyof typeof GovernmentDocumentTypeShorted] || '',\n code: countryData?.code || '',\n currentSide,\n templatePath,\n mrzType: backMrzType,\n templateResponse,\n issuingSubdivision: issuingSubdivision,\n frontTemplatePath: frontTemplatePath\n }, env);\n }\n \n const bbox = verificationRes?.bbox || templateBbox;\n const verifiedMrz = verificationRes?.mrz ? JSON.stringify(verificationRes.mrz) : \"\";\n \n if (isBarcodeRequired()) {\n const barcodeData = scannedBarcodeRef.current;\n const docTypeStr = selectedDocumentType!.type;\n const isHIC = docTypeStr === 'health_insurance_card';\n const isValidScan = typeof barcodeData === 'string' && ((isHIC && barcodeData.length > 0) || barcodeData.length > 50);\n \n if (isValidScan) {\n logger.log('[CA Barcode] Image captured, verified & barcode ALREADY scanned! Skipping Phase 2.');\n let parsedDictionary;\n \n if (isHIC && barcodeData.length < 50) {\n parsedDictionary = { data: { card_number: barcodeData, barcode_type: \"1D\" } };\n } else {\n const token = await authentification();\n parsedDictionary = await kycService.formatBarcodeData({ textInput: barcodeData, token }, env);\n }\n \n const verifiedResult: ISilentCaptureResult & { region?: string } = {\n path: safeCapturePath, templatePath: templatePath, bbox: bbox, success: true,\n mrz: JSON.stringify(parsedDictionary), barcode: barcodeData, isAnalyzing: false,\n country: countryData?.code, documentType: selectedDocumentType!.type,\n region: selectedDocumentType!.region !== 'root' ? selectedDocumentType!.region : undefined,\n };\n \n clearTimeout(watchdog);\n setSilentCaptureResult(verifiedResult);\n \n if (bbox) {\n const safeBbox = bbox as IBbox;\n setBboxBySide(prev => ({ ...prev, ['back']: safeBbox }));\n }\n await autoCapture(safeCapturePath!, verifiedResult);\n return;\n }\n \n logger.log('[CA Barcode] Image captured & template VERIFIED. Switching to Barcode phase.');\n clearTimeout(watchdog);\n setPendingCAImage({ path: safeCapturePath!, templateResponse, templatePath, bbox });\n setScanPhase('barcode');\n setSilentCaptureResult(prev => ({ ...prev, isAnalyzing: false }));\n return;\n }\n \n const verifiedResult: ISilentCaptureResult & { region?: string } = {\n path: safeCapturePath, templatePath, bbox, success: true, mrz: verifiedMrz,\n isAnalyzing: false, country: countryData?.code, documentType: selectedDocumentType.type,\n region: issuingSubdivision\n };\n \n clearTimeout(watchdog);\n setSilentCaptureResult(verifiedResult);\n if (bbox) setBboxBySide(prev => ({ ...prev, [currentSide]: bbox }));\n await autoCapture(safeCapturePath, verifiedResult);\n \n } catch (error: any) {\n clearTimeout(watchdog);\n const isNetworkError = !error.response || error.message === 'Network Error' || error.code === 'ECONNABORTED' || error.message?.includes('Network');\n \n // Keep UI errors extremely brief and actionable\n let hintMessage = '';\n \n if (isNetworkError) {\n hintMessage = state.currentLanguage === 'en' ? 'Poor connection. Retrying...' : 'Connexion faible. Nouvelle tentative...';\n } else {\n const rawMessage = (error?.message || '').toLowerCase();\n if (rawMessage.includes('impossible') || rawMessage.includes('unreadable')) {\n hintMessage = state.currentLanguage === 'en' ? 'Move to better lighting.' : 'Améliorez l\\'éclairage.';\n } else if (rawMessage.includes('country mismatch') || rawMessage.includes('pays sélectionné')) {\n hintMessage = state.currentLanguage === 'en' ? 'Wrong document type.' : 'Mauvais type de document.';\n } else if (rawMessage.includes('card_not_fully_in_frame')) {\n hintMessage = state.currentLanguage === 'en' ? 'Move closer.' : 'Rapprochez-vous.';\n } else if (rawMessage.includes('ne correspond pas au recto')) {\n hintMessage = state.currentLanguage === 'en' ? 'Scan the same ID.' : 'Scannez la même pièce.';\n }\n }\n \n setSilentCaptureResult(prev => ({ ...prev, isAnalyzing: false, success: false, error: hintMessage }));\n }\n }\n };\n \n useEffect(() => {\n if (scanPhase === 'barcode' && pendingCAImage && silentCaptureResult.barcode) {\n const bData = silentCaptureResult.barcode;\n if (typeof bData === 'string' && bData.length > 50) {\n logger.log('[CA Barcode] Safety Net Triggered: Processing barcode.');\n processCanadianBarcode(bData);\n }\n }\n }, [scanPhase, pendingCAImage, silentCaptureResult.barcode]);\n \n\n const handleError = (event: { message: string, name?: string, code?: string }) => {\n logger.error(\"Camera Error:\", event);\n const errString = `${event.message} ${event.name} ${event.code}`.toLowerCase();\n \n let friendlyMessage = state.currentLanguage === 'en' ? 'Camera error.' : 'Erreur de caméra.';\n \n if (errString.includes('notreadableerror') || errString.includes('trackstarterror') || errString.includes('in use') || errString.includes('concurrent') || errString.includes('camera unavailable')) {\n friendlyMessage = state.currentLanguage === 'en' ? 'Camera is in use by another app.' : 'Caméra utilisée par une autre application.';\n } else if (errString.includes('notallowederror') || errString.includes('permission')) {\n friendlyMessage = state.currentLanguage === 'en' ? 'Allow camera access in settings.' : 'Autorisez l\\'accès à la caméra.';\n } else if (errString.includes('notfounderror') || errString.includes('no camera')) {\n friendlyMessage = state.currentLanguage === 'en' ? 'No camera detected.' : 'Aucune caméra détectée.';\n }\n \n showAlert(state.currentLanguage === 'en' ? 'Camera Error' : 'Erreur', friendlyMessage);\n setShowCamera(false);\n setIsProcessingCapture(false);\n };\n\n useEffect(() => {\n actions.showCustomStepper(!showCamera);\n }, [showCamera]);\n\n useEffect(() => {\n if (Platform.OS === 'web' && typeof window !== 'undefined') {\n try {\n const url = new URL(window.location.origin);\n if (url.hostname === 'localhost') {\n url.hostname = '192.168.0.33';\n }\n const params = new URLSearchParams(window.location.search);\n params.set('session_id', state.session.session_id);\n params.set('resume', 'true');\n \n if (state.currentComponentIndex !== undefined) {\n params.set('component_index', String(state.currentComponentIndex));\n }\n if (countryData?.code) {\n params.set('country', countryData.code);\n }\n if (selectedDocumentType?.type) {\n params.set('document_type', selectedDocumentType.type);\n }\n if (selectedDocumentType?.region && selectedDocumentType.region !== 'root') {\n params.set('region', selectedDocumentType.region);\n }\n \n url.hash = params.toString();\n setCurrentUrl(url.toString());\n } catch (e) {\n console.error(\"Failed to construct QR handoff URL\", e);\n }\n }\n }, [state.session.session_id, state.currentComponentIndex, countryData, selectedDocumentType]);\n\n if (!countrySelectionData || !selectedDocumentType) {\n return (\n <View style={styles.root}>\n <View style={styles.previewContainer}>\n <Text style={styles.title}>{getLocalizedText(component.labels)}</Text>\n <Text style={styles.description}>\n {state.currentLanguage === \"en\" ? \"Please complete the country and document selection first.\" : \"Veuillez d'abord compléter la sélection du pays et du document.\"}\n </Text>\n </View>\n </View>\n );\n }\n\n if (showCamera) {\n const isBusy = isProcessingCapture;\n\n if (isRebootingCamera) {\n return (\n <View style={[styles.root, { justifyContent: 'center', alignItems: 'center', backgroundColor: '#000' }]}>\n <ActivityIndicator size=\"large\" color=\"#2DBD60\" />\n <Text style={{ color: 'white', marginTop: 20, fontSize: 16 }}>Initializing Camera...</Text>\n </View>\n );\n }\n\n return (\n <View style={styles.root}>\n <View style={[styles.cameraWrapper, { flex: 1 }]}>\n <View style={styles.headerContainer}>\n <Text style={styles.headerTitle}>\n {selectedDocumentType ? (locale === 'en' ? getDocumentTypeInfo(selectedDocumentType.type).name.en : getDocumentTypeInfo(selectedDocumentType.type).name.fr) : ''}\n </Text>\n <View style={styles.stepBadge}>\n <Text style={styles.stepText}>\n {t('kyc.idCardCapture.captureTitle', { side: currentSide === 'front' ? locale === 'en' ? 'Front' : 'Recto' : locale === 'en' ? 'Back' : 'Verso' })}\n </Text>\n </View>\n </View>\n\n <View style={[styles.cameraFeedContainer, { flex: 1, backgroundColor: '#000' }]}>\n {Platform.OS === 'web' && (\n <View style={styles.webTopControls}>\n <TouchableOpacity style={styles.webFlipButton} onPress={toggleCameraLens}>\n <Text style={styles.webFlipText}>🔄 Flip Lens</Text>\n </TouchableOpacity>\n </View>\n )}\n\n <EnhancedCameraView\n key={`${currentSide}-${cameraKey}`}\n showCamera={true}\n isProcessing={isBusy}\n cameraType={cameraConfig.cameraType}\n style={{ ...StyleSheet.absoluteFillObject, ...(Platform.OS === 'web' ? { width: '100%', height: '100%', left: 0, top: 0 } as any : {}) }}\n onError={handleError}\n onSilentCapture={handleSilentCapture}\n silentCaptureResult={silentCaptureResult}\n isScanningBarcode={currentSide === 'back'}\n barcodeTypes={targetBarcodeTypes}\n onBarcodeScanned={(barcodeString) => {\n const docTypeStr = selectedDocumentType?.type;\n const isFullDataDoc = docTypeStr === 'drivers_licence' || docTypeStr === 'national_id' || docTypeStr === 'identity_card';\n if (isFullDataDoc && barcodeString.length < 50) return;\n\n if (scannedBarcodeRef.current !== barcodeString) {\n scannedBarcodeRef.current = barcodeString;\n if (scanPhase === 'barcode' && pendingCAImage) {\n processCanadianBarcode(barcodeString);\n } else {\n setSilentCaptureResult(prev => ({ ...prev, barcode: barcodeString }));\n }\n }\n }}\n overlayComponent={\n <>\n <IdCardOverlay\n xMin={cameraConfig.overlay.bbox.xMin}\n yMin={cameraConfig.overlay.bbox.yMin}\n xMax={cameraConfig.overlay.bbox.xMax}\n yMax={cameraConfig.overlay.bbox.yMax}\n instructions={cameraConfig.overlay.guideText}\n cornerOpacity={cameraConfig.overlay.bbox.cornerRadius || 0 as number}\n isSuccess={silentCaptureResult.success || scanPhase === 'barcode'}\n language={state.currentLanguage}\n stepperProps={{\n back: () => {\n if (currentSide === 'back') {\n scannedBarcodeRef.current = null;\n setScanPhase('image');\n setPendingCAImage(null);\n setCurrentSide('front');\n setShowCamera(false);\n setIsProcessingCapture(false);\n setProcessingImagePath(null);\n if (capturedImages['front']?.dir) {\n const frontImage = capturedImages['front'];\n setSilentCaptureResult((prev) => ({\n ...prev, path: frontImage.dir, success: true, isAnalyzing: false, error: '', mrz: frontImage.mrz || '', templatePath: frontImage.templatePath || '', bbox: bboxBySide['front']\n }));\n } else {\n setSilentCaptureResult((prev) => ({ ...prev, path: '', success: false, isAnalyzing: false, error: '', templatePath: '' }));\n }\n } else {\n actions.previousComponent();\n }\n },\n selectedDocumentType: selectedDocumentType ? (locale === 'en' ? getDocumentTypeInfo(selectedDocumentType.type).name.en : getDocumentTypeInfo(selectedDocumentType.type).name.fr) : '',\n step: state.currentComponentIndex + 1,\n totalSteps: state.template.components.length,\n side: currentSide,\n }}\n />\n </>\n }\n />\n\n {scanPhase === 'barcode' && !isBusy && (\n <View style={styles.barcodePromptContainer}>\n <View style={styles.barcodePromptContent}>\n <View style={styles.barcodeIconContainer}>\n <Text style={styles.barcodeIcon}>✓</Text>\n </View>\n <View style={styles.barcodeTextContainer}>\n <Text style={styles.barcodePromptTitle}>\n {state.currentLanguage === 'en' ? 'Image Verified' : 'Image Vérifiée'}\n </Text>\n <Text style={styles.barcodePromptDesc}>\n {state.currentLanguage === 'en' ? 'Move closer to fill the screen with the 2D barcode.' : 'Rapprochez-vous pour scanner le code-barres 2D.'}\n </Text>\n </View>\n </View>\n </View>\n )}\n\n {!isBusy && silentCaptureResult.isAnalyzing && (\n <View style={styles.topAnalyzingPillContainer}>\n <View style={styles.topAnalyzingPill}>\n <ActivityIndicator size=\"small\" color=\"white\" />\n <Text style={styles.analyzingPillText}>\n {state.currentLanguage === 'en' ? 'Scanning...' : 'Analyse...'}\n </Text>\n </View>\n </View>\n )}\n\n {isBusy && (\n <View style={[StyleSheet.absoluteFillObject, { zIndex: 9999 }]}>\n {processingImagePath && (\n <Image source={{ uri: processingImagePath.startsWith('file://') ? processingImagePath : `file://${processingImagePath}` }} style={StyleSheet.absoluteFillObject} resizeMode=\"cover\" />\n )}\n <View style={styles.processingOverlay}>\n <ActivityIndicator size=\"large\" color=\"#2DBD60\" />\n <Text style={styles.processingText}>\n {state.currentLanguage === 'en' ? 'Perfect!\\nProcessing Document...' : 'Parfait!\\nTraitement du document...'}\n </Text>\n </View>\n </View>\n )}\n\n {!isBusy && Platform.OS === 'web' ? (\n <View style={styles.webBottomControlBar}>\n {silentCaptureResult.error && (\n <View style={styles.floatingErrorBanner}>\n <Text style={styles.floatingErrorText}>⚠️ {silentCaptureResult.error}</Text>\n </View>\n )}\n <View style={styles.webActionButtonsRow}>\n <TouchableOpacity style={styles.webSecondaryButton} onPress={() => setShowCamera(false)}>\n <Text style={styles.webSecondaryButtonText}>Cancel</Text>\n </TouchableOpacity>\n <TouchableOpacity style={styles.webPrimaryButton} onPress={refreshCamera}>\n <Text style={styles.webPrimaryButtonText}>↻ Refresh Camera</Text>\n </TouchableOpacity>\n </View>\n </View>\n ) : !isBusy ? (\n <View style={styles.escapeHatchContainer}>\n <TouchableOpacity style={styles.fallbackRefreshButton} onPress={refreshCamera}>\n <Text style={styles.fallbackRefreshText}>↻ Refresh Camera</Text>\n </TouchableOpacity>\n <TouchableOpacity style={[styles.fallbackRefreshButton, { marginTop: 15, backgroundColor: 'rgba(220, 38, 38, 0.8)', borderColor: '#DC2626' }]} onPress={() => setShowCamera(false)}>\n <Text style={styles.fallbackRefreshText}>Cancel / Go Back</Text>\n </TouchableOpacity>\n </View>\n ) : null}\n\n {silentCaptureResult.error && !isBusy && Platform.OS !== 'web' ? (\n <View style={[styles.floatingErrorBanner, { zIndex: 10000 }]}>\n <Text style={styles.floatingErrorText}>⚠️ {silentCaptureResult.error}</Text>\n </View>\n ) : null}\n </View>\n </View>\n </View>\n );\n }\n\n return (\n <View style={styles.root}>\n <View style={styles.previewContainer}>\n <ScrollView style={styles.previewItemContainer} showsVerticalScrollIndicator={false}>\n <View key={currentSide} style={styles.sideContainer}>\n <Text style={styles.sideTitle}>\n {t('kyc.idCardCapture.captureTitle', { side: currentSide === 'front' ? locale === 'en' ? 'Front' : 'Recto' : locale === 'en' ? 'Back' : 'Verso' })}\n </Text>\n <Text style={{ fontSize: 14, color: '#666', textAlign: 'center', marginBottom: 16, lineHeight: 22 }}>\n {getLocalizedText(component.instructions)}\n </Text>\n\n <View style={{ alignItems: 'center', justifyContent: 'center', flexDirection: \"column\", gap: 16 }}>\n <View style={styles.imagePreviewWrapper}>\n {capturedImages[currentSide]?.dir ? (\n <Image source={{ uri: capturedImages[currentSide].dir }} style={styles.previewImage} />\n ) : silentCaptureResult.path ? (\n <Image source={{ uri: silentCaptureResult.path }} style={styles.previewImage} />\n ) : null}\n </View>\n\n {!capturedImages[currentSide]?.dir && (\n <View style={{ width: '100%', gap: 12 }}>\n \n {isWebScanningRestricted ? (\n <>\n <View style={styles.restrictionWarningBanner}>\n <Text style={styles.restrictionWarningTitle}>\n {state.currentLanguage === 'en' ? '⚠️ Web Scanning Unavailable' : '⚠️ Numérisation Web Indisponible'}\n </Text>\n <Text style={styles.restrictionWarningText}>\n {state.currentLanguage === 'en'\n ? `This document can only be scanned using our mobile app.`\n : `Ce document ne peut être scanné qu'avec notre application mobile.`}\n </Text>\n </View>\n \n <Button \n title={state.currentLanguage === \"en\" ? \"Continue on Phone\" : \"Continuer sur le téléphone\"} \n onPress={() => setShowQRModal(true)} \n variant=\"primary\" \n size=\"large\" \n fullWidth \n />\n </>\n ) : (\n /* 🟢 NORMAL FLOW: Show \"Start Scanning\" and optional web handoff */\n <>\n <Button \n title={state.currentLanguage === \"en\" ? \"Start Scanning\" : \"Commencer la numérisation\"} \n onPress={() => {\n setShowCamera(true);\n refreshCamera();\n actions.showCustomStepper(false);\n }} \n variant=\"primary\" \n size=\"large\" \n fullWidth \n />\n \n {Platform.OS === 'web' && (\n <Button \n title={state.currentLanguage === \"en\" ? \"Continue on Phone\" : \"Continuer sur le téléphone\"} \n onPress={() => setShowQRModal(true)} \n variant=\"outline\" \n size=\"large\" \n fullWidth \n />\n )}\n </>\n )}\n \n </View>\n )}\n\n {capturedImages[currentSide]?.dir && (\n <>\n <Button title={t('kyc.idCardCapture.retakeButton')} onPress={() => retakePicture(currentSide)} variant=\"outline\" size=\"medium\" fullWidth />\n <Button title={t('common.next')} onPress={() => {\n if (!selectedDocumentType) {\n showAlert('Error', 'Document type not selected');\n return;\n }\n if (currentSide === 'back' || selectedDocumentType.type === 'passport') {\n actions.nextComponent();\n } else {\n setShowCamera(true);\n refreshCamera();\n setCurrentSide('back');\n setSilentCaptureResult({ success: false, isAnalyzing: false, path: '', error: '', templatePath: undefined });\n setIsProcessingCapture(false);\n setProcessingImagePath(null);\n setScanPhase('image');\n setPendingCAImage(null);\n }\n }} variant=\"primary\" size=\"large\" fullWidth />\n </>\n )}\n </View>\n </View>\n </ScrollView>\n </View>\n\n {showQRModal && Platform.OS === 'web' && (\n <View style={styles.qrModalOverlay}>\n <View style={styles.qrModalContainer}>\n <View style={styles.qrModalHeader}>\n <Text style={styles.qrModalTitle}>\n {state.currentLanguage === 'en' ? 'Continue on your phone' : 'Continuer sur votre téléphone'}\n </Text>\n <Text style={styles.qrModalText}>\n {state.currentLanguage === 'en'\n ? \"Scan the QR code to download our mobile app and complete the scanning process securely.\"\n : \"Scannez le code QR pour télécharger notre application et terminer la numérisation en toute sécurité.\"}\n </Text>\n </View>\n\n <View style={styles.qrToggleContainer}>\n <TouchableOpacity\n style={[styles.qrToggleButton, qrPlatform === 'android' && styles.qrToggleButtonActive]}\n onPress={() => setQrPlatform('android')}\n >\n <Text style={[styles.qrToggleText, qrPlatform === 'android' && styles.qrToggleTextActive]}>\n Android\n </Text>\n </TouchableOpacity>\n <TouchableOpacity\n style={[styles.qrToggleButton, qrPlatform === 'ios' && styles.qrToggleButtonActive]}\n onPress={() => setQrPlatform('ios')}\n >\n <Text style={[styles.qrToggleText, qrPlatform === 'ios' && styles.qrToggleTextActive]}>\n iOS (Apple)\n </Text>\n </TouchableOpacity>\n </View>\n\n <View style={styles.qrCodeWrapper}>\n <QRCode\n value={\n qrPlatform === 'android'\n ? 'https://play.google.com/store/apps/details?id=transfergratis.com&hl=en_CA&gl=US'\n : 'https://apps.apple.com/ca/app/transfergratis-money-transfer/id1605411731'\n }\n size={180} \n backgroundColor=\"#FFFFFF\"\n color=\"#0F172A\"\n />\n </View>\n\n <View style={styles.linkCodeSection}>\n <Text style={styles.linkCodeHeader}>\n {state.currentLanguage === 'en' ? 'Use code below to proceed on the Sanctum Key App.' : 'Vous avez déjà l\\'application ? Liez-la :'}\n </Text>\n \n {generatedCode ? (\n <ExpiringCodeTimer initialCode={generatedCode} language={state.currentLanguage} />\n ) : (\n <TouchableOpacity style={styles.generateCodeButton} onPress={handleGenerateCode} disabled={isGeneratingCode}>\n {isGeneratingCode ? (\n <ActivityIndicator size=\"small\" color=\"#0F172A\" />\n ) : (\n <Text style={styles.generateCodeButtonText}>\n {state.currentLanguage === 'en' ? 'Generate 5-Digit Link Code' : 'Générer un code à 5 chiffres'}\n </Text>\n )}\n </TouchableOpacity>\n )}\n </View>\n\n {isWebScanningRestricted && (\n <View style={styles.storeLinksContainer}>\n <Text style={styles.storeLinksTitle}>\n {state.currentLanguage === 'en' ? 'Or click to open directly:' : 'Ou cliquez pour ouvrir directement :'}\n </Text>\n <View style={styles.storeButtonsRow}>\n <TouchableOpacity style={styles.storeButton} onPress={() => window.open('https://play.google.com/store/apps/details?id=transfergratis.com&hl=en_CA&gl=US', '_blank')} >\n <Text style={styles.storeButtonText}>Google Play</Text>\n </TouchableOpacity>\n <TouchableOpacity style={styles.storeButton} onPress={() => window.open('https://apps.apple.com/ca/app/transfergratis-money-transfer/id1605411731', '_blank')} >\n <Text style={styles.storeButtonText}>App Store</Text>\n </TouchableOpacity>\n </View>\n </View>\n )}\n\n <Button\n title={state.currentLanguage === 'en' ? \"Cancel & Stay on Laptop\" : \"Annuler et rester sur l'ordinateur\"}\n onPress={() => setShowQRModal(false)}\n variant=\"outline\"\n fullWidth\n />\n </View>\n </View>\n)}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n root: { flex: 1, width: '100%', backgroundColor: 'transparent', alignSelf: 'center', ...Platform.select({ web: { minHeight: '85vh', justifyContent: 'center', alignItems: 'center' } as any, }) },\n cameraWrapper: { width: '100%', backgroundColor: '#000000', overflow: 'hidden', ...Platform.select({ web: { maxWidth: 1000, width: '95%', height: '80vh', minHeight: 600, borderRadius: 24, shadowColor: '#000', shadowOffset: { width: 0, height: 10 }, shadowOpacity: 0.15, shadowRadius: 30, elevation: 24 } as any, default: { flex: 1 } }) },\n headerContainer: { flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', flexWrap: 'wrap', gap: 10, paddingHorizontal: 20, paddingVertical: 18, backgroundColor: '#FFFFFF', borderBottomWidth: 1, borderBottomColor: '#F1F5F9', zIndex: 10, ...Platform.select({ web: { display: 'flex' }, default: { display: 'none' } }) },\n headerTitle: { fontSize: 18, fontWeight: '700', color: '#0F172A', flexShrink: 1 },\n stepBadge: { backgroundColor: '#F1F5F9', paddingHorizontal: 12, paddingVertical: 6, borderRadius: 20, },\n stepText: { fontSize: 13, fontWeight: '600', color: '#64748B', },\n cameraFeedContainer: { flex: 1, position: 'relative', backgroundColor: '#000', },\n escapeHatchContainer: { position: 'absolute', bottom: 40, left: 0, right: 0, alignItems: 'center', justifyContent: 'center', zIndex: 99999 },\n fallbackRefreshButton: { backgroundColor: 'rgba(0, 0, 0, 0.8)', borderWidth: 1, borderColor: 'rgba(255, 255, 255, 0.5)', paddingVertical: 12, paddingHorizontal: 24, borderRadius: 24, shadowColor: '#000', shadowOffset: { width: 0, height: 4 }, shadowOpacity: 0.3, shadowRadius: 5, elevation: 8 },\n fallbackRefreshText: { color: '#FFFFFF', fontWeight: 'bold', fontSize: 16 },\n webBottomControlBar: { position: 'absolute', bottom: 0, left: 0, right: 0, paddingHorizontal: 24, paddingBottom: 24, paddingTop: 30, backgroundColor: 'rgba(0,0,0,0.6)', zIndex: 99999 },\n webActionButtonsRow: { flexDirection: 'row', justifyContent: 'center', gap: 16, marginTop: 12, maxWidth: 500, alignSelf: 'center', width: '100%' },\n webPrimaryButton: { flex: 1, backgroundColor: '#2DBD60', paddingVertical: 14, borderRadius: 12, alignItems: 'center' },\n webPrimaryButtonText: { color: 'white', fontWeight: 'bold', fontSize: 16 },\n webSecondaryButton: { flex: 1, backgroundColor: 'rgba(255,255,255,0.15)', borderWidth: 1, borderColor: 'rgba(255,255,255,0.3)', paddingVertical: 14, borderRadius: 12, alignItems: 'center' },\n webSecondaryButtonText: { color: 'white', fontWeight: 'bold', fontSize: 16 },\n webTopControls: { position: 'absolute', top: Platform.OS === 'ios' ? 70 : 20, right: 20, zIndex: 9999 },\n webFlipButton: { backgroundColor: 'rgba(0,0,0,0.6)', paddingHorizontal: 16, paddingVertical: 10, borderRadius: 20, borderWidth: 1, borderColor: 'rgba(255,255,255,0.4)', ...Platform.select({ web: { backdropFilter: 'blur(4px)' } as any }) },\n webFlipText: { color: 'white', fontWeight: 'bold', fontSize: 14 },\n previewContainer: { width: '100%', backgroundColor: 'white', borderRadius: 12, paddingVertical: 30, paddingHorizontal: 24, shadowColor: '#000', shadowOffset: { width: 0, height: 4 }, shadowOpacity: 0.08, shadowRadius: 16, elevation: 8, ...Platform.select({ web: { alignSelf: 'center', maxWidth: 650 }, default: { margin: 10, width: '95%' }}) },\n previewItemContainer: { flexGrow: 1, },\n title: { fontSize: 24, fontWeight: 'bold', color: '#333', marginBottom: 8, textAlign: 'center' },\n description: { fontSize: 16, color: '#666', textAlign: 'center', marginBottom: 24, lineHeight: 22 },\n sideContainer: { marginBottom: 24 },\n sideTitle: { fontSize: 22, fontWeight: 'bold', color: '#000', marginBottom: 12, textAlign: 'center' },\n imagePreviewWrapper: { width: '100%', borderRadius: 12, padding: 1, overflow: 'hidden', shadowColor: '#000', shadowOffset: { width: 0, height: 4 }, shadowOpacity: 0.12, shadowRadius: 8, elevation: 8, backgroundColor: '#f0f0f0', ...Platform.select({ web: { aspectRatio: 1.59, height: 'auto', maxWidth: 450, alignSelf: 'center' } as any, default: { height: 220 } }) },\n previewImage: { width: '100%', height: '100%', borderRadius: 12, resizeMode: 'cover' },\n floatingErrorBanner: { backgroundColor: '#FEF2F2', borderWidth: 1, borderColor: '#FCA5A5', paddingVertical: 12, paddingHorizontal: 16, borderRadius: 12, alignItems: 'center', justifyContent: 'center', width: '100%', ...Platform.select({ web: { position: 'absolute', bottom: '100%', marginBottom: 16, maxWidth: 500, alignSelf: 'center', zIndex: 100000, boxShadow: '0 4px 12px rgba(0,0,0,0.15)' } as any, default: { position: 'absolute', top: Platform.OS === 'ios' ? 90 : 70, left: 24, right: 24, zIndex: 10000 } }) },\n floatingErrorText: { color: '#991B1B', fontSize: 14, fontWeight: '700', textAlign: 'center' },\n processingOverlay: { flex: 1, backgroundColor: 'rgba(0, 0, 0, 0.7)', justifyContent: 'center', alignItems: 'center', zIndex: 9999, ...Platform.select({ web: { backdropFilter: 'blur(4px)' } as any }) },\n processingText: { color: '#FFF', fontSize: 18, fontWeight: 'bold', marginTop: 16, textAlign: 'center' },\n errorText: { color: '#dc2626', fontSize: 14, marginTop: 8, textAlign: 'center' },\n topAnalyzingPillContainer: { position: 'absolute', top: Platform.OS === 'android' ? 60 : 75, left: 0, right: 0, alignItems: 'center', zIndex: 100 },\n topAnalyzingPill: { flexDirection: 'row', alignItems: 'center', backgroundColor: 'rgba(0,0,0,0.7)', paddingVertical: 10, paddingHorizontal: 20, borderRadius: 30, gap: 10, shadowColor: '#000', shadowOffset: {width: 0, height: 4}, shadowOpacity: 0.3, shadowRadius: 8 },\n analyzingPillText: { color: 'white', fontSize: 14, fontWeight: 'bold' },\n qrModalOverlay: { ...StyleSheet.absoluteFillObject, backgroundColor: 'rgba(15, 23, 42, 0.85)', justifyContent: 'center', alignItems: 'center', zIndex: 999999, ...Platform.select({ web: { backdropFilter: 'blur(8px)' } as any }) },\n qrModalContainer: { backgroundColor: '#FFFFFF', borderRadius: 24, padding: 32, width: '90%', maxWidth: 420, alignItems: 'center', shadowColor: '#000', shadowOffset: { width: 0, height: 20 }, shadowOpacity: 0.25, shadowRadius: 40, elevation: 24 },\n qrModalHeader: { alignItems: 'center', marginBottom: 24 },\n qrModalTitle: { fontSize: 24, fontWeight: '800', color: '#0F172A', marginBottom: 12, textAlign: 'center' },\n qrModalText: { fontSize: 15, color: '#475569', textAlign: 'center', lineHeight: 22 },\n qrCodeWrapper: { padding: 20, backgroundColor: '#FFFFFF', borderRadius: 20, borderWidth: 2, borderColor: '#E2E8F0', marginBottom: 16, shadowColor: '#000', shadowOffset: { width: 0, height: 4 }, shadowOpacity: 0.05, shadowRadius: 10 },\n listeningContainer: { flexDirection: 'row', alignItems: 'center', backgroundColor: '#F0FDF4', paddingVertical: 12, paddingHorizontal: 20, borderRadius: 12, marginBottom: 24, borderWidth: 1, borderColor: '#BBF7D0' },\n listeningText: { marginLeft: 12, color: '#166534', fontSize: 14, fontWeight: '600' },\n barcodePromptContainer: { position: 'absolute', top: Platform.OS === 'android' ? 60 : 75, left: 0, right: 0, alignItems: 'center', zIndex: 150, paddingHorizontal: 24, },\n barcodePromptContent: { flexDirection: 'row', alignItems: 'center', backgroundColor: 'rgba(15, 23, 42, 0.85)', paddingVertical: 14, paddingHorizontal: 20, borderRadius: 16, borderWidth: 1, borderColor: 'rgba(255, 255, 255, 0.15)', shadowColor: '#000', shadowOffset: { width: 0, height: 8 }, shadowOpacity: 0.3, shadowRadius: 12, elevation: 10, maxWidth: 400, ...Platform.select({ web: { backdropFilter: 'blur(8px)' } as any, ios: { backdropFilter: 'blur(8px)' } as any, }), },\n barcodeIconContainer: { width: 36, height: 36, borderRadius: 18, backgroundColor: 'rgba(45, 189, 96, 0.2)', justifyContent: 'center', alignItems: 'center', marginRight: 14, borderWidth: 1, borderColor: 'rgba(45, 189, 96, 0.5)', },\n barcodeIcon: { fontSize: 16, color: '#2DBD60', fontWeight: 'bold', },\n barcodeTextContainer: { flex: 1, },\n barcodePromptTitle: { color: '#2DBD60', fontSize: 16, fontWeight: '700', marginBottom: 4, },\n barcodePromptDesc: { color: '#F8FAFC', fontSize: 14, fontWeight: '500', lineHeight: 20, },\n storeLinksContainer: { width: '100%', alignItems: 'center', marginBottom: 24, paddingTop: 16, borderTopWidth: 1, borderTopColor: '#E2E8F0' },\n storeLinksTitle: { fontSize: 14, color: '#64748B', fontWeight: '600', marginBottom: 12 },\n storeButtonsRow: { flexDirection: 'row', gap: 12, width: '100%', justifyContent: 'center' },\n storeButton: { flex: 1, backgroundColor: '#0F172A', paddingVertical: 12, borderRadius: 10, alignItems: 'center' },\n storeButtonText: { color: '#FFFFFF', fontWeight: 'bold', fontSize: 14 },\n restrictionWarningBanner: {\n backgroundColor: '#FFFBEB', // Light amber background\n borderWidth: 1,\n borderColor: '#F59E0B', // Amber border\n borderRadius: 12,\n padding: 16,\n marginBottom: 4,\n width: '100%',\n shadowColor: '#F59E0B',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.1,\n shadowRadius: 4,\n },\n restrictionWarningTitle: {\n color: '#B45309', // Dark amber text\n fontSize: 15,\n fontWeight: '800',\n marginBottom: 6,\n textAlign: 'center'\n },\n restrictionWarningText: {\n color: '#D97706',\n fontSize: 13,\n fontWeight: '500',\n textAlign: 'center',\n lineHeight: 18\n },\n qrToggleContainer: {\n flexDirection: 'row',\n backgroundColor: '#F1F5F9', // Light gray background\n borderRadius: 12,\n padding: 4,\n marginBottom: 20,\n width: '100%',\n },\n qrToggleButton: {\n flex: 1,\n paddingVertical: 10,\n borderRadius: 8,\n alignItems: 'center',\n justifyContent: 'center',\n },\n qrToggleButtonActive: {\n backgroundColor: '#FFFFFF',\n shadowColor: '#0F172A',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.08,\n shadowRadius: 4,\n elevation: 2,\n },\n qrToggleText: {\n fontSize: 14,\n fontWeight: '600',\n color: '#64748B', // Inactive text color\n },\n qrToggleTextActive: {\n color: '#0F172A', // Active text color\n },\n linkCodeSection: {\n width: '100%',\n alignItems: 'center',\n backgroundColor: '#F8FAFC', // Very light slate\n borderRadius: 16,\n padding: 16,\n marginBottom: 20,\n borderWidth: 1,\n borderColor: '#E2E8F0',\n },\n linkCodeHeader: {\n fontSize: 13,\n color: '#475569',\n fontWeight: '600',\n marginBottom: 12,\n },\n generateCodeButton: {\n backgroundColor: '#E2E8F0',\n paddingVertical: 12,\n paddingHorizontal: 20,\n borderRadius: 10,\n width: '100%',\n alignItems: 'center',\n justifyContent: 'center',\n height: 44, // Fixed height to prevent jumping during loading state\n },\n generateCodeButtonText: {\n color: '#0F172A',\n fontWeight: '700',\n fontSize: 14,\n },\n activeCodeContainer: {\n alignItems: 'center',\n width: '100%',\n },\n activeCodeText: {\n fontSize: 32,\n fontWeight: '900',\n color: '#2DBD60',\n letterSpacing: 4,\n marginBottom: 4,\n },\n timerText: {\n fontSize: 12,\n color: '#EF4444', // Red to indicate urgency\n fontWeight: '600',\n },\n});"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sanctum-key/react-native-sdk",
3
- "version": "1.0.36",
3
+ "version": "1.0.37",
4
4
  "description": "Sanctum Key React Native SDK",
5
5
  "main": "build/src/index.js",
6
6
  "types": "build/src/index.d.ts",
@@ -1,5 +1,5 @@
1
1
  import React, { useEffect, useMemo, useRef, useState } from 'react';
2
- import { View, Text, StyleSheet, Image, ScrollView, Platform, ActivityIndicator, TouchableOpacity, useWindowDimensions, Alert } from 'react-native';
2
+ import { View, Text, StyleSheet, Image, ScrollView, Platform, ActivityIndicator, TouchableOpacity, useWindowDimensions } from 'react-native';
3
3
  import { showAlert } from '../../utils/platformAlert';
4
4
  import { EnhancedCameraView } from '../EnhancedCameraView';
5
5
  import { TemplateComponent, LocalizedText, GovernmentDocumentType, ISilentCaptureResult, IBbox, GovernmentDocumentTypeShorted, GovernmentDocumentTypeBackend } from '../../types/KYC.types';
@@ -554,43 +554,34 @@ export const IDCardCapture: React.FC<IDCardCaptureProps> = ({ component, value =
554
554
  if (isProcessingCaptureRef.current) return;
555
555
  if (scanPhaseRef.current === 'barcode') return;
556
556
  if (isAnalyzingRef.current) return;
557
-
557
+
558
558
  if (result.success && result.path) {
559
559
  setSilentCaptureResult((prev) => ({ ...prev, isAnalyzing: true, success: false, error: '' }));
560
-
561
- const safeCapturePath = Platform.OS === 'ios' && !result.path.startsWith('file://')
562
- ? `file://${result.path}`
563
- : result.path;
564
-
560
+
561
+ const safeCapturePath = Platform.OS === 'ios' && !result.path.startsWith('file://') ? `file://${result.path}` : result.path;
565
562
  let templatePath = capturedImages[currentSide]?.templatePath || '';
566
563
  let templateBbox: IBbox | undefined;
567
564
  let templateResponse: any;
568
-
565
+
569
566
  if (!selectedDocumentType) {
570
567
  setSilentCaptureResult((prev) => ({ ...prev, isAnalyzing: false, success: false, error: 'Document type not selected' }));
571
568
  return;
572
569
  }
573
-
570
+
574
571
  const issuingSubdivision = selectedDocumentType.region !== 'root' ? selectedDocumentType.region : undefined;
575
-
576
- // 🚨 WATCHDOG TIMER: If the iOS network drops and doesn't throw, this guarantees the UI unlocks after 20 seconds.
572
+
573
+ // Subtle timeout handling without blocking pop-ups
577
574
  const watchdog = setTimeout(() => {
578
575
  if (isAnalyzingRef.current) {
579
576
  setSilentCaptureResult((prev) => ({
580
577
  ...prev,
581
578
  isAnalyzing: false,
582
579
  success: false,
583
- error: state.currentLanguage === 'en' ? 'Connection timeout. Please try again.' : 'Délai de connexion dépassé. Veuillez réessayer.'
580
+ error: state.currentLanguage === 'en' ? 'Taking longer than expected. Hold steady.' : 'Traitement long. Veuillez rester immobile.'
584
581
  }));
585
- Alert.alert(
586
- state.currentLanguage === 'en' ? "Timeout" : "Délai dépassé",
587
- state.currentLanguage === 'en'
588
- ? "The request took too long. Please verify your network and try again."
589
- : "La requête a pris trop de temps. Veuillez vérifier votre connexion et réessayer."
590
- );
591
582
  }
592
583
  }, 20000);
593
-
584
+
594
585
  try {
595
586
  if (!templatePath) {
596
587
  const templateType = await checkTemplateType({
@@ -600,9 +591,10 @@ export const IDCardCapture: React.FC<IDCardCaptureProps> = ({ component, value =
600
591
  postfix: currentSide,
601
592
  issuingSubdivision: issuingSubdivision
602
593
  }, env);
603
-
594
+
604
595
  templateResponse = templateType;
605
596
  if (templateType.template_path) templatePath = templateType.template_path;
597
+
606
598
  if (templateType.card_obb) {
607
599
  const obbConfidence = getObbConfidence((templateType as any).card_obb);
608
600
  if (obbConfidence !== null && obbConfidence < OBB_CONFIDENCE_THRESHOLD) {
@@ -616,21 +608,18 @@ export const IDCardCapture: React.FC<IDCardCaptureProps> = ({ component, value =
616
608
  } catch {}
617
609
  }
618
610
  }
619
-
611
+
620
612
  const extractedCountryKey = templatePath ? templatePath.split('/')[0] : (ISO_TO_COUNTRY_NAME[countryData?.code || ''] || 'root');
621
613
  const regionMappings = getCurrentSideVerification(currentSide, extractedCountryKey);
622
-
623
614
  let verificationRes: any;
615
+
624
616
  if (currentSide === 'front') {
625
617
  const matchedAuthMethod = getCorrespondingAuthMethod(templatePath, regionMappings.regionMapping, regionMappings.key || '', 'front');
626
618
  const mrzType = getCorrespondingMrzType(templatePath, regionMappings.regionMapping, regionMappings.key || '') || 'TD1';
627
-
619
+
628
620
  verificationRes = await frontVerification({
629
621
  path: safeCapturePath,
630
- regionMapping: {
631
- authMethod: matchedAuthMethod ? [matchedAuthMethod] : [],
632
- mrzTypes: mrzType ? [mrzType] : []
633
- },
622
+ regionMapping: { authMethod: matchedAuthMethod ? [matchedAuthMethod] : [], mrzTypes: mrzType ? [mrzType] : [] },
634
623
  selectedDocumentType: GovernmentDocumentTypeShorted[selectedDocumentType?.type as keyof typeof GovernmentDocumentTypeShorted] || '',
635
624
  code: countryData?.code || '',
636
625
  currentSide,
@@ -639,19 +628,15 @@ export const IDCardCapture: React.FC<IDCardCaptureProps> = ({ component, value =
639
628
  issuingSubdivision: issuingSubdivision,
640
629
  clientSideBarcodeData: silentCaptureResult.barcode
641
630
  }, env);
642
-
643
631
  } else {
644
632
  logger.log("Attempting backVerification with:", { path: safeCapturePath, templatePath, side: currentSide });
645
633
  const matchedBackAuthMethod = getCorrespondingAuthMethod(templatePath, regionMappings.regionMapping, regionMappings.key || '', 'back');
646
634
  const backMrzType = getCorrespondingMrzType(templatePath, regionMappings.regionMapping, regionMappings.key || '') || '';
647
635
  const frontTemplatePath = capturedImages['front']?.templatePath || '';
648
-
636
+
649
637
  verificationRes = await backVerification({
650
638
  path: safeCapturePath,
651
- regionMapping: {
652
- authMethod: matchedBackAuthMethod ? [matchedBackAuthMethod] : [],
653
- mrzTypes: backMrzType ? [backMrzType] : []
654
- },
639
+ regionMapping: { authMethod: matchedBackAuthMethod ? [matchedBackAuthMethod] : [], mrzTypes: backMrzType ? [backMrzType] : [] },
655
640
  selectedDocumentType: GovernmentDocumentTypeShorted[selectedDocumentType.type as keyof typeof GovernmentDocumentTypeShorted] || '',
656
641
  code: countryData?.code || '',
657
642
  currentSide,
@@ -662,35 +647,37 @@ export const IDCardCapture: React.FC<IDCardCaptureProps> = ({ component, value =
662
647
  frontTemplatePath: frontTemplatePath
663
648
  }, env);
664
649
  }
665
-
650
+
666
651
  const bbox = verificationRes?.bbox || templateBbox;
667
652
  const verifiedMrz = verificationRes?.mrz ? JSON.stringify(verificationRes.mrz) : "";
668
-
653
+
669
654
  if (isBarcodeRequired()) {
670
655
  const barcodeData = scannedBarcodeRef.current;
671
656
  const docTypeStr = selectedDocumentType!.type;
672
657
  const isHIC = docTypeStr === 'health_insurance_card';
673
658
  const isValidScan = typeof barcodeData === 'string' && ((isHIC && barcodeData.length > 0) || barcodeData.length > 50);
674
-
659
+
675
660
  if (isValidScan) {
676
661
  logger.log('[CA Barcode] Image captured, verified & barcode ALREADY scanned! Skipping Phase 2.');
677
662
  let parsedDictionary;
663
+
678
664
  if (isHIC && barcodeData.length < 50) {
679
665
  parsedDictionary = { data: { card_number: barcodeData, barcode_type: "1D" } };
680
666
  } else {
681
667
  const token = await authentification();
682
668
  parsedDictionary = await kycService.formatBarcodeData({ textInput: barcodeData, token }, env);
683
669
  }
684
-
670
+
685
671
  const verifiedResult: ISilentCaptureResult & { region?: string } = {
686
672
  path: safeCapturePath, templatePath: templatePath, bbox: bbox, success: true,
687
673
  mrz: JSON.stringify(parsedDictionary), barcode: barcodeData, isAnalyzing: false,
688
674
  country: countryData?.code, documentType: selectedDocumentType!.type,
689
675
  region: selectedDocumentType!.region !== 'root' ? selectedDocumentType!.region : undefined,
690
676
  };
691
-
677
+
692
678
  clearTimeout(watchdog);
693
679
  setSilentCaptureResult(verifiedResult);
680
+
694
681
  if (bbox) {
695
682
  const safeBbox = bbox as IBbox;
696
683
  setBboxBySide(prev => ({ ...prev, ['back']: safeBbox }));
@@ -698,7 +685,7 @@ export const IDCardCapture: React.FC<IDCardCaptureProps> = ({ component, value =
698
685
  await autoCapture(safeCapturePath!, verifiedResult);
699
686
  return;
700
687
  }
701
-
688
+
702
689
  logger.log('[CA Barcode] Image captured & template VERIFIED. Switching to Barcode phase.');
703
690
  clearTimeout(watchdog);
704
691
  setPendingCAImage({ path: safeCapturePath!, templateResponse, templatePath, bbox });
@@ -706,7 +693,7 @@ export const IDCardCapture: React.FC<IDCardCaptureProps> = ({ component, value =
706
693
  setSilentCaptureResult(prev => ({ ...prev, isAnalyzing: false }));
707
694
  return;
708
695
  }
709
-
696
+
710
697
  const verifiedResult: ISilentCaptureResult & { region?: string } = {
711
698
  path: safeCapturePath, templatePath, bbox, success: true, mrz: verifiedMrz,
712
699
  isAnalyzing: false, country: countryData?.code, documentType: selectedDocumentType.type,
@@ -717,46 +704,34 @@ export const IDCardCapture: React.FC<IDCardCaptureProps> = ({ component, value =
717
704
  setSilentCaptureResult(verifiedResult);
718
705
  if (bbox) setBboxBySide(prev => ({ ...prev, [currentSide]: bbox }));
719
706
  await autoCapture(safeCapturePath, verifiedResult);
720
-
707
+
721
708
  } catch (error: any) {
722
709
  clearTimeout(watchdog);
723
- console.log("Backend Verification Error:", error);
710
+ const isNetworkError = !error.response || error.message === 'Network Error' || error.code === 'ECONNABORTED' || error.message?.includes('Network');
724
711
 
725
- const isNetworkError =
726
- !error.response ||
727
- error.message === 'Network Error' ||
728
- error.code === 'ECONNABORTED' ||
729
- error.message?.includes('Network');
730
-
731
- let userFriendlyMessage = 'Verification failed. Please try again.';
732
-
712
+ // Keep UI errors extremely brief and actionable
713
+ let hintMessage = '';
714
+
733
715
  if (isNetworkError) {
734
- userFriendlyMessage = state.currentLanguage === 'en'
735
- ? 'Cannot connect to verification server. Please check your internet connection.'
736
- : 'Impossible de se connecter au serveur de vérification. Veuillez vérifier votre connexion internet.';
737
-
738
- Alert.alert(
739
- state.currentLanguage === 'en' ? "Connection Failed" : "Échec de connexion",
740
- userFriendlyMessage
741
- );
716
+ hintMessage = state.currentLanguage === 'en' ? 'Poor connection. Retrying...' : 'Connexion faible. Nouvelle tentative...';
742
717
  } else {
743
718
  const rawMessage = (error?.message || '').toLowerCase();
744
719
  if (rawMessage.includes('impossible') || rawMessage.includes('unreadable')) {
745
- userFriendlyMessage = 'Document unreadable. Please hold the camera steady in good light.';
720
+ hintMessage = state.currentLanguage === 'en' ? 'Move to better lighting.' : 'Améliorez l\'éclairage.';
746
721
  } else if (rawMessage.includes('country mismatch') || rawMessage.includes('pays sélectionné')) {
747
- userFriendlyMessage = 'The document does not match your selected country.';
722
+ hintMessage = state.currentLanguage === 'en' ? 'Wrong document type.' : 'Mauvais type de document.';
748
723
  } else if (rawMessage.includes('card_not_fully_in_frame')) {
749
- userFriendlyMessage = 'Move closer to the document and ensure all corners are visible.';
724
+ hintMessage = state.currentLanguage === 'en' ? 'Move closer.' : 'Rapprochez-vous.';
750
725
  } else if (rawMessage.includes('ne correspond pas au recto')) {
751
- userFriendlyMessage = 'The back of the document does not match the front. You must scan the same ID.';
726
+ hintMessage = state.currentLanguage === 'en' ? 'Scan the same ID.' : 'Scannez la même pièce.';
752
727
  }
753
728
  }
754
-
755
- setSilentCaptureResult(prev => ({ ...prev, isAnalyzing: false, success: false, error: userFriendlyMessage }));
729
+
730
+ setSilentCaptureResult(prev => ({ ...prev, isAnalyzing: false, success: false, error: hintMessage }));
756
731
  }
757
732
  }
758
733
  };
759
-
734
+
760
735
  useEffect(() => {
761
736
  if (scanPhase === 'barcode' && pendingCAImage && silentCaptureResult.barcode) {
762
737
  const bData = silentCaptureResult.barcode;
@@ -766,44 +741,23 @@ export const IDCardCapture: React.FC<IDCardCaptureProps> = ({ component, value =
766
741
  }
767
742
  }
768
743
  }, [scanPhase, pendingCAImage, silentCaptureResult.barcode]);
744
+
769
745
 
770
746
  const handleError = (event: { message: string, name?: string, code?: string }) => {
771
747
  logger.error("Camera Error:", event);
772
-
773
- // Normalize the error to lowercase for easy checking
774
748
  const errString = `${event.message} ${event.name} ${event.code}`.toLowerCase();
775
749
 
776
- let friendlyMessage = state.currentLanguage === 'en'
777
- ? 'An unknown camera error occurred.'
778
- : 'Une erreur de caméra inconnue est survenue.';
779
-
780
- // 1. Detect Hardware Lock (Camera in use by Zoom, Teams, or another app)
781
- if (
782
- errString.includes('notreadableerror') ||
783
- errString.includes('trackstarterror') ||
784
- errString.includes('in use') ||
785
- errString.includes('concurrent') ||
786
- errString.includes('camera unavailable')
787
- ) {
788
- friendlyMessage = state.currentLanguage === 'en'
789
- ? 'Your camera is currently being used by another application (like Zoom or Teams). Please close the other app and try again.'
790
- : 'Votre caméra est actuellement utilisée par une autre application. Veuillez fermer l\'autre application et réessayer.';
791
- }
792
- // 2. Detect Permission Denied
793
- else if (errString.includes('notallowederror') || errString.includes('permission')) {
794
- friendlyMessage = state.currentLanguage === 'en'
795
- ? 'Camera permission denied. Please allow camera access in your settings to proceed.'
796
- : 'Autorisation de la caméra refusée. Veuillez autoriser l\'accès dans vos paramètres.';
797
- }
798
- // 3. Detect No Camera Found
799
- else if (errString.includes('notfounderror') || errString.includes('no camera')) {
800
- friendlyMessage = state.currentLanguage === 'en'
801
- ? 'No camera detected on this device.'
802
- : 'Aucune caméra détectée sur cet appareil.';
750
+ let friendlyMessage = state.currentLanguage === 'en' ? 'Camera error.' : 'Erreur de caméra.';
751
+
752
+ if (errString.includes('notreadableerror') || errString.includes('trackstarterror') || errString.includes('in use') || errString.includes('concurrent') || errString.includes('camera unavailable')) {
753
+ friendlyMessage = state.currentLanguage === 'en' ? 'Camera is in use by another app.' : 'Caméra utilisée par une autre application.';
754
+ } else if (errString.includes('notallowederror') || errString.includes('permission')) {
755
+ friendlyMessage = state.currentLanguage === 'en' ? 'Allow camera access in settings.' : 'Autorisez l\'accès à la caméra.';
756
+ } else if (errString.includes('notfounderror') || errString.includes('no camera')) {
757
+ friendlyMessage = state.currentLanguage === 'en' ? 'No camera detected.' : 'Aucune caméra détectée.';
803
758
  }
804
-
805
- showAlert(state.currentLanguage === 'en' ? 'Camera Error' : 'Erreur de Caméra', friendlyMessage);
806
-
759
+
760
+ showAlert(state.currentLanguage === 'en' ? 'Camera Error' : 'Erreur', friendlyMessage);
807
761
  setShowCamera(false);
808
762
  setIsProcessingCapture(false);
809
763
  };