@sanctum-key/react-native-sdk 1.0.60 → 1.0.62
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.
- package/README.md +34 -0
- package/android/build/.transforms/ac63f648699cdd4b91e6ee06476f2a70/results.bin +1 -0
- package/android/build/.transforms/ac63f648699cdd4b91e6ee06476f2a70/transformed/classes/classes_dex/classes.dex +0 -0
- package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml +9 -0
- package/android/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar +0 -0
- package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +1 -1
- package/android/build/intermediates/manifest_merge_blame_file/debug/processDebugManifest/manifest-merger-blame-debug-report.txt +45 -25
- package/android/build/intermediates/merged_manifest/debug/processDebugManifest/AndroidManifest.xml +9 -0
- package/android/build/intermediates/runtime_library_classes_jar/debug/bundleLibRuntimeToJarDebug/classes.jar +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/counters.tab +1 -1
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/last-build.bin +0 -0
- package/android/build/kotlin/compileDebugKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin +0 -0
- package/android/build/kotlin/compileDebugKotlin/local-state/build-history.bin +0 -0
- package/android/build/outputs/logs/manifest-merger-debug-report.txt +34 -12
- package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/SanctumKeySdkModule$BarcodeRegion.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/SanctumKeySdkModule$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$1$6$1.class → SanctumKeySdkModule$definition$1$7$1.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$1$6$2.class → SanctumKeySdkModule$definition$1$7$2.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunction$1.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunction$1.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunction$5.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunction$2.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunction$3.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunction$3.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunction$4.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunction$2.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunction$5.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunction$6.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunction$4.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunction$7.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunction$8.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunction$6.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunction$9.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$1.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunctionWithPromise$1.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$2.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunctionWithPromise$2.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$3.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunctionWithPromise$3.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$4.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunctionWithPromise$4.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$5.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunctionWithPromise$5.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$6.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunctionWithPromise$6.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$7.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunctionWithPromise$7.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$View$1.class → SanctumKeySdkModule$definition$lambda$24$$inlined$View$1.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$lambda$15$$inlined$Prop$1.class → SanctumKeySdkModule$definition$lambda$24$lambda$23$$inlined$Prop$1.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$lambda$15$$inlined$Prop$2.class → SanctumKeySdkModule$definition$lambda$24$lambda$23$$inlined$Prop$2.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/SanctumKeySdkModule.class +0 -0
- package/android/src/main/AndroidManifest.xml +9 -0
- package/android/src/main/java/kyc/sanctumkey/com/SanctumKeySdkModule.kt +147 -0
- package/build/package.json +1 -1
- package/build/src/SanctumKeySdkModule.d.ts +2 -0
- package/build/src/SanctumKeySdkModule.d.ts.map +1 -1
- package/build/src/SanctumKeySdkModule.js.map +1 -1
- package/build/src/SanctumKeySdkModule.web.d.ts +2 -0
- package/build/src/SanctumKeySdkModule.web.d.ts.map +1 -1
- package/build/src/SanctumKeySdkModule.web.js +14 -0
- package/build/src/SanctumKeySdkModule.web.js.map +1 -1
- package/build/src/components/KYCElements/CountrySelection.d.ts.map +1 -1
- package/build/src/components/KYCElements/CountrySelection.js +1 -1
- package/build/src/components/KYCElements/CountrySelection.js.map +1 -1
- package/build/src/components/KYCElements/CountrySelectionTemplate.d.ts.map +1 -1
- package/build/src/components/KYCElements/CountrySelectionTemplate.js +27 -17
- package/build/src/components/KYCElements/CountrySelectionTemplate.js.map +1 -1
- package/build/src/components/KYCElements/IDCardCapture.d.ts.map +1 -1
- package/build/src/components/KYCElements/IDCardCapture.js +46 -28
- package/build/src/components/KYCElements/IDCardCapture.js.map +1 -1
- package/build/src/components/OverLay/IdCard.d.ts +1 -1
- package/build/src/components/OverLay/IdCard.d.ts.map +1 -1
- package/build/src/components/OverLay/IdCard.js +47 -14
- package/build/src/components/OverLay/IdCard.js.map +1 -1
- package/build/src/components/OverLay/type.d.ts +2 -0
- package/build/src/components/OverLay/type.d.ts.map +1 -1
- package/build/src/components/OverLay/type.js.map +1 -1
- package/build/src/components/Svgs/scanningLine.d.ts +4 -1
- package/build/src/components/Svgs/scanningLine.d.ts.map +1 -1
- package/build/src/components/Svgs/scanningLine.js +15 -11
- package/build/src/components/Svgs/scanningLine.js.map +1 -1
- package/build/src/components/TemplateKYCExample.d.ts +4 -1
- package/build/src/components/TemplateKYCExample.d.ts.map +1 -1
- package/build/src/components/TemplateKYCExample.js +2 -2
- package/build/src/components/TemplateKYCExample.js.map +1 -1
- package/build/src/components/TemplateKYCFlowRefactored.d.ts +4 -2
- package/build/src/components/TemplateKYCFlowRefactored.d.ts.map +1 -1
- package/build/src/components/TemplateKYCFlowRefactored.js +157 -8
- package/build/src/components/TemplateKYCFlowRefactored.js.map +1 -1
- package/build/src/config/region_mapping.d.ts.map +1 -1
- package/build/src/config/region_mapping.js +28 -0
- package/build/src/config/region_mapping.js.map +1 -1
- package/build/src/config/region_mapping.json +28 -0
- package/build/src/index.d.ts +2 -0
- package/build/src/index.d.ts.map +1 -1
- package/build/src/index.js +2 -0
- package/build/src/index.js.map +1 -1
- package/build/src/security/deviceSecurity.d.ts +30 -0
- package/build/src/security/deviceSecurity.d.ts.map +1 -0
- package/build/src/security/deviceSecurity.js +55 -0
- package/build/src/security/deviceSecurity.js.map +1 -0
- package/build/src/utils/logger.d.ts.map +1 -1
- package/build/src/utils/logger.js +5 -0
- package/build/src/utils/logger.js.map +1 -1
- package/ios/SanctumKeySdkModule.swift +93 -0
- package/package.json +1 -1
- package/src/SanctumKeySdkModule.ts +2 -0
- package/src/SanctumKeySdkModule.web.ts +16 -0
- package/src/components/KYCElements/CountrySelection.tsx +3 -1
- package/src/components/KYCElements/CountrySelectionTemplate.tsx +73 -24
- package/src/components/KYCElements/IDCardCapture.tsx +53 -30
- package/src/components/OverLay/IdCard.tsx +72 -15
- package/src/components/OverLay/type.ts +4 -2
- package/src/components/Svgs/scanningLine.tsx +19 -12
- package/src/components/TemplateKYCExample.tsx +8 -1
- package/src/components/TemplateKYCFlowRefactored.tsx +202 -16
- package/src/config/region_mapping.json +28 -0
- package/src/config/region_mapping.ts +28 -0
- package/src/index.ts +9 -1
- package/src/security/deviceSecurity.ts +106 -0
- package/src/utils/logger.ts +5 -0
|
@@ -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 { cropImageWithBBoxWithTolerance } from '../../utils/cropByObb';\nimport kycService, { authentification, clearAuthToken, errorMessage } from '../../modules/api/KYCService';\nimport { Linking } from 'react-native';\nimport { sdkLogger } from '../../utils/logger'; \nimport SanctumKeySdkModule from '../../SanctumKeySdkModule';\nimport { getCameraPermissionStatus, requestCameraPermission } from '../../utils/cameraPermissions';\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 PendingCanadianImage {\n path: string;\n templateResponse: any;\n templatePath: string;\n bbox?: IBbox;\n}\n\nconst BARCODE_RESPONSE_TEXT_KEYS = [\n 'barcode_data',\n 'raw_barcode',\n 'raw_data',\n 'decoded_data',\n 'decoded_text',\n 'barcode',\n 'text',\n 'value',\n 'data',\n 'detail',\n] as const;\n\n/**\n * The image decoder has returned a few slightly different response envelopes\n * over time. Keep that API variation out of the capture flow and only accept\n * values from fields that are known to contain the raw barcode payload.\n */\nconst getDecodedBarcodeText = (response: unknown, depth = 0): string | null => {\n if (typeof response === 'string') {\n return response.trim().length > 0 ? response : null;\n }\n\n if (!response || typeof response !== 'object' || depth > 3) return null;\n\n if (Array.isArray(response)) {\n for (const item of response) {\n const value = getDecodedBarcodeText(item, depth + 1);\n if (value) return value;\n }\n return null;\n }\n\n const record = response as Record<string, unknown>;\n for (const key of BARCODE_RESPONSE_TEXT_KEYS) {\n const value = record[key];\n if (typeof value === 'string' && value.trim().length > 0) return value;\n }\n\n for (const key of ['result', 'data', 'payload', 'barcodes', 'results'] as const) {\n const nested = record[key];\n if (nested && typeof nested === 'object') {\n const value = getDecodedBarcodeText(nested, depth + 1);\n if (value) return value;\n }\n }\n\n return null;\n};\n\nconst isUsableBarcodeText = (value: unknown, allowShortBarcode: boolean): value is string => {\n if (typeof value !== 'string') return false;\n\n const trimmed = value.trim();\n const isDecoderError = /^(no (?:bar)?code|barcode (?:not|was not)|unable to decode|failed to decode|error\\b)/i.test(trimmed);\n return !isDecoderError && trimmed.length > 0 && (allowShortBarcode || value.length > 50);\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\", \"NB\": \"New Brunswick\",\n \"NL\": \"Newfoundland and Labrador\", \"NT\": \"Northwest Territories\", \"NS\": \"Nova Scotia\",\n \"NU\": \"Nunavut\", \"ON\": \"Ontario\", \"PE\": \"Prince Edward Island\", \"QC\": \"Quebec\",\n \"SK\": \"Saskatchewan\", \"YT\": \"Yukon\"\n};\n\nconst DOCUMENT_TYPE_MAPPING: Record<string, GovernmentDocumentType> = {\n nationalId: 'national_id',\n national_id: 'national_id',\n identity_card: 'national_id',\n passport: 'passport',\n driversLicense: 'drivers_licence',\n drivers_licence: 'drivers_licence',\n residencePermit: 'permanent_residence',\n permanent_residence: 'permanent_residence',\n healthInsuranceCard: 'health_insurance_card',\n health_insurance_card: 'health_insurance_card',\n};\n\nconst ExpiringCodeTimer = ({ initialCode, language }: { initialCode: string, language: string }) => {\n const [timeLeft, setTimeLeft] = useState(300);\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 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 \n const [isProcessingCapture, setIsProcessingCapture] = useState(false);\n const [processingImagePath, setProcessingImagePath] = useState<string | null>(null);\n const [cameraKey, setCameraKey] = useState(0);\n const cameraGenerationRef = useRef(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 console.log(currentUrl)\n const [qrPlatform, setQrPlatform] = useState<'android' | 'ios'>('android');\n const [scanPhase, setScanPhase] = useState<'image' | 'barcode'>('image');\n const [pendingCAImage, setPendingCAImage] = useState<PendingCanadianImage | null>(null);\n const scannedBarcodeRef = useRef<string | null>(null);\n const barcodeImageDecodeSessionRef = useRef<number | null>(null);\n const barcodeServiceDecodeSessionRef = useRef<number | null>(null);\n const barcodeServiceAttemptsRef = useRef<{ session: number | null; count: number }>({ session: null, count: 0 });\n const barcodeFinalizingRef = useRef(false);\n const barcodeCompletedRef = useRef(false);\n const barcodeScanSessionRef = useRef(0);\n const nativeBarcodeDecoderWarningShownRef = useRef(false);\n const [generatedCode, setGeneratedCode] = useState<string | null>(null);\n const [isGeneratingCode, setIsGeneratingCode] = useState(false);\n const { actions, state, env, apiKey } = useTemplateKYCFlowContext();\n\n\n useEffect(() => {\n if (state.session?.session_id) {\n sdkLogger.info(\"User started ID document verification step\", { side: currentSide });\n }\n }, [state.session?.session_id, currentSide]);\n\n const { width: screenWidth, height: screenHeight } = useWindowDimensions();\n\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 = DOCUMENT_TYPE_MAPPING[backendDocType] || backendDocType as GovernmentDocumentType;\n return { type: mappedType, region: countrySelectionData.region || 'root' };\n }, [countrySelectionData]);\n\n const countryData = useMemo(() => countrySelectionData, [countrySelectionData]);\n\n // ==========================================\n // 🚨 CRITICAL FIX: REF MIRRORS FOR IOS BRIDGE \n // Bypass stale native closures by mirroring all state into refs\n // ==========================================\n const isAnalyzingRef = useRef<boolean>(false);\n const isProcessingCaptureRef = useRef<boolean>(false);\n const scanPhaseRef = useRef<'image' | 'barcode'>('image');\n const currentSideRef = useRef(currentSide);\n const capturedImagesRef = useRef(capturedImages);\n const selectedDocTypeRef = useRef(selectedDocumentType);\n const countryDataRef = useRef(countryData);\n\n useEffect(() => { isAnalyzingRef.current = silentCaptureResult.isAnalyzing ?? false; }, [silentCaptureResult.isAnalyzing]);\n useEffect(() => { isProcessingCaptureRef.current = isProcessingCapture; }, [isProcessingCapture]);\n useEffect(() => { scanPhaseRef.current = scanPhase; }, [scanPhase]);\n useEffect(() => { currentSideRef.current = currentSide; }, [currentSide]);\n useEffect(() => { capturedImagesRef.current = capturedImages; }, [capturedImages]);\n useEffect(() => { selectedDocTypeRef.current = selectedDocumentType; }, [selectedDocumentType]);\n useEffect(() => { countryDataRef.current = countryData; }, [countryData]);\n // ==========================================\n\n const handleGenerateCode = async () => {\n if (isGeneratingCode) return;\n setIsGeneratingCode(true);\n try {\n if (!apiKey) {\n showAlert('Error', 'API Key is missing.');\n setIsGeneratingCode(false); return;\n }\n const res = await kycService.generateReferralCode({ session_id: state.session.session_id }, apiKey);\n const newCode = res.code || res.referral_code || res?.data?.code || res?.data?.referral_code;\n if (newCode) setGeneratedCode(newCode);\n else showAlert('Error', 'Failed to parse code from server response.');\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 }, []);\n\n const getLocalizedText = (text: LocalizedText | Record<string, LocalizedText>): string => {\n if (text && typeof text[currentSide] === 'object' && text[currentSide][locale]) return text[currentSide][locale] || '';\n return \"\";\n };\n\n const isWebScanningRestricted = useMemo(() => {\n if (Platform.OS !== 'web') return false;\n if (countryData?.code !== 'CA') return false;\n const docType = selectedDocumentType?.type;\n return docType === 'drivers_licence' || docType === 'health_insurance_card' || docType === 'national_id' || 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') {\n return [\n 'pdf-417', 'code-128', 'code-39', 'code-93', 'codabar',\n // Vision Camera's Android implementation rejects `itf-14`; its `itf`\n // reader already covers ITF-14 payloads.\n 'ean-13', 'ean-8', 'itf', 'upc-a', 'upc-e',\n ];\n }\n return ['pdf-417'];\n }, [selectedDocumentType?.type]);\n\n const refreshCamera = () => {\n const nextCameraGeneration = cameraGenerationRef.current + 1;\n cameraGenerationRef.current = nextCameraGeneration;\n barcodeScanSessionRef.current += 1;\n barcodeImageDecodeSessionRef.current = null;\n barcodeFinalizingRef.current = false;\n barcodeCompletedRef.current = false;\n scannedBarcodeRef.current = null;\n isAnalyzingRef.current = false;\n isProcessingCaptureRef.current = false;\n setIsProcessingCapture(false);\n setProcessingImagePath(null);\n setIsRebootingCamera(true);\n if (scanPhaseRef.current === 'barcode') {\n const activeSide = currentSideRef.current;\n scanPhaseRef.current = 'image';\n setScanPhase('image');\n setPendingCAImage(null);\n const nextImages = { ...capturedImagesRef.current };\n delete nextImages[activeSide];\n capturedImagesRef.current = nextImages;\n setCapturedImages(nextImages);\n if (value) { const newValue = { ...value }; delete newValue[activeSide]; onValueChange(newValue); }\n setSilentCaptureResult({ success: false, isAnalyzing: false, path: '', error: '', templatePath: '', mrz: '', bbox: undefined });\n } else {\n setSilentCaptureResult(prev => ({ ...prev, success: false, isAnalyzing: false, error: '' }));\n }\n setTimeout(() => {\n if (cameraGenerationRef.current !== nextCameraGeneration) return;\n setCameraKey(nextCameraGeneration);\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 && JSON.stringify(value) !== JSON.stringify(capturedImages)) {\n const updatedImages = value as Record<string, IIDCardPayload>;\n capturedImagesRef.current = updatedImages;\n setCapturedImages(updatedImages);\n const currentImageData = updatedImages[currentSide];\n if (currentImageData?.dir) {\n setSilentCaptureResult(prev => ({ ...prev, path: currentImageData.dir, success: true, isAnalyzing: false, mrz: currentImageData.mrz || '', templatePath: currentImageData.templatePath || '' }));\n }\n }\n }, [value, currentSide]);\n\n const handleStartCamera = async () => {\n sdkLogger.info(`Requesting camera start for ${currentSide} document verification`, { os: Platform.OS }); // 🚨 LOG\n if (Platform.OS === 'web') {\n setShowCamera(true);\n refreshCamera();\n actions.showCustomStepper(false);\n return;\n }\n try {\n let status = getCameraPermissionStatus();\n if (status !== 'granted') {\n sdkLogger.info(`Camera permission not granted yet, requesting...`);\n status = await requestCameraPermission();\n }\n if (status === 'granted') {\n sdkLogger.info(`Camera permission granted. Mounting camera...`);\n setShowCamera(true);\n refreshCamera();\n actions.showCustomStepper(false);\n } else {\n sdkLogger.warn(`Camera permission denied by user.`);\n Alert.alert(\n state.currentLanguage === 'en' ? 'Camera Access Required' : 'Accès à la caméra requis',\n state.currentLanguage === 'en' ? 'We need camera access to scan your ID. Please tap \"Settings\" to enable it.' : 'Nous avons besoin de l\\'accès à la caméra pour scanner votre pièce d\\'identité. Veuillez appuyer sur \"Paramètres\" pour l\\'activer.',\n [\n { text: state.currentLanguage === 'en' ? 'Cancel' : 'Annuler', style: 'cancel' },\n { text: state.currentLanguage === 'en' ? 'Settings' : 'Paramètres', onPress: () => Linking.openSettings() }\n ]\n );\n }\n } catch (error: any) {\n sdkLogger.error('Failed to request native camera permission', { error: error?.message }); // 🚨 LOG\n setShowCamera(true);\n refreshCamera();\n actions.showCustomStepper(false);\n }\n };\n\n const startBackCapture = () => {\n sdkLogger.info('Preparing camera for back document capture');\n barcodeScanSessionRef.current += 1;\n barcodeImageDecodeSessionRef.current = null;\n barcodeFinalizingRef.current = false;\n barcodeCompletedRef.current = false;\n scannedBarcodeRef.current = null;\n isAnalyzingRef.current = false;\n isProcessingCaptureRef.current = false;\n currentSideRef.current = 'back';\n scanPhaseRef.current = 'image';\n\n const nextImages = { ...capturedImagesRef.current };\n delete nextImages.back;\n capturedImagesRef.current = nextImages;\n setCapturedImages(nextImages);\n setBboxBySide(prev => {\n const next = { ...prev };\n delete next.back;\n return next;\n });\n\n if (value && Object.prototype.hasOwnProperty.call(value, 'back')) {\n const nextValue = { ...value };\n delete nextValue.back;\n onValueChange(nextValue);\n }\n\n setSilentCaptureResult({\n success: false,\n isAnalyzing: false,\n path: '',\n error: '',\n templatePath: '',\n mrz: '',\n barcode: undefined,\n bbox: undefined,\n });\n setPendingCAImage(null);\n setProcessingImagePath(null);\n setIsProcessingCapture(false);\n setIsRebootingCamera(false);\n setCurrentSide('back');\n cameraGenerationRef.current += 1;\n setCameraKey(cameraGenerationRef.current);\n setShowCamera(true);\n actions.showCustomStepper(false);\n };\n\n const cancelCurrentCapture = () => {\n cameraGenerationRef.current += 1;\n barcodeScanSessionRef.current += 1;\n barcodeImageDecodeSessionRef.current = null;\n barcodeFinalizingRef.current = false;\n barcodeCompletedRef.current = false;\n scannedBarcodeRef.current = null;\n isAnalyzingRef.current = false;\n isProcessingCaptureRef.current = false;\n scanPhaseRef.current = 'image';\n\n const savedImage = capturedImagesRef.current[currentSideRef.current];\n setScanPhase('image');\n setPendingCAImage(null);\n setIsProcessingCapture(false);\n setProcessingImagePath(null);\n setIsRebootingCamera(false);\n setShowCamera(false);\n setSilentCaptureResult(savedImage?.dir\n ? {\n path: savedImage.dir,\n success: true,\n isAnalyzing: false,\n error: '',\n mrz: savedImage.mrz || '',\n templatePath: savedImage.templatePath || '',\n bbox: bboxBySide[currentSideRef.current],\n }\n : { path: '', success: false, isAnalyzing: false, error: '', templatePath: '', mrz: '', bbox: undefined });\n };\n\n const returnToFrontReview = () => {\n cameraGenerationRef.current += 1;\n barcodeScanSessionRef.current += 1;\n barcodeImageDecodeSessionRef.current = null;\n barcodeFinalizingRef.current = false;\n barcodeCompletedRef.current = false;\n scannedBarcodeRef.current = null;\n isAnalyzingRef.current = false;\n isProcessingCaptureRef.current = false;\n currentSideRef.current = 'front';\n scanPhaseRef.current = 'image';\n\n const frontImage = capturedImagesRef.current.front;\n setScanPhase('image');\n setPendingCAImage(null);\n setCurrentSide('front');\n setShowCamera(false);\n setIsProcessingCapture(false);\n setProcessingImagePath(null);\n setIsRebootingCamera(false);\n setSilentCaptureResult(frontImage?.dir\n ? {\n path: frontImage.dir,\n success: true,\n isAnalyzing: false,\n error: '',\n mrz: frontImage.mrz || '',\n templatePath: frontImage.templatePath || '',\n bbox: bboxBySide.front,\n }\n : { path: '', success: false, isAnalyzing: false, error: '', templatePath: '', mrz: '', bbox: undefined });\n };\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 } else {\n const stabilityHint = locale === 'en'\n ? 'Position the entire ID, then hold steady. Capture starts automatically.'\n : 'Positionnez la pièce entière, puis restez immobile. La capture démarre automatiquement.';\n instructions = instructions ? `${instructions}\\n${stabilityHint}` : stabilityHint;\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 const containerWidth = Math.min(screenWidth * 0.95, 1000);\n const containerHeight = isLandscape ? screenHeight * 0.80 : screenHeight * 0.90;\n const boxPixelWidth = containerWidth * boxWidthPercent;\n const boxPixelHeight = boxPixelWidth / 1.59;\n const heightPercent = (boxPixelHeight / containerHeight) * 100;\n yMin = (100 - heightPercent) / 2.5; \n yMax = yMin + heightPercent;\n } else {\n // Standard Horizontal Frame (Width: 90%, Height: 32%)\n xMin = 5; \n xMax = 95;\n yMin = 34; \n yMax = 66;\n }\n \n const platformBbox = { \n xMin, yMin, xMax, 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\n const retakePicture = (sideToRetake: 'front' | 'back') => {\n barcodeScanSessionRef.current += 1;\n barcodeImageDecodeSessionRef.current = null;\n barcodeFinalizingRef.current = false;\n barcodeCompletedRef.current = false;\n scannedBarcodeRef.current = null;\n isAnalyzingRef.current = false;\n isProcessingCaptureRef.current = false;\n currentSideRef.current = sideToRetake;\n scanPhaseRef.current = 'image';\n setCurrentSide(sideToRetake);\n setIsProcessingCapture(false);\n setProcessingImagePath(null);\n setScanPhase('image');\n setPendingCAImage(null);\n setSilentCaptureResult({ path: '', success: false, isAnalyzing: false, error: '', templatePath: '', mrz: '', bbox: undefined });\n const nextImages = { ...capturedImagesRef.current };\n delete nextImages[sideToRetake];\n capturedImagesRef.current = nextImages;\n setCapturedImages(nextImages);\n setBboxBySide(prev => {\n const next = { ...prev };\n delete next[sideToRetake];\n return next;\n });\n if (value) { const newValue = { ...value }; delete newValue[sideToRetake]; onValueChange(newValue); }\n setShowCamera(true);\n refreshCamera();\n actions.showCustomStepper(false);\n };\n\n const getCurrentSideVerification = (side: string, countryKey: string, cData: any) => {\n const rawDocType = cData?.documentType;\n if (!rawDocType || !countryKey) return { authMethod: [], mrzTypes: [], regionMapping: null, key: 'root' };\n \n const jsonDocMap: Record<string, string> = { 'nationalId': 'identity_card', 'national_id': 'identity_card', 'passport': 'passport', 'driversLicense': 'drivers_licence', 'drivers_licence': 'drivers_licence', 'residencePermit': 'permanent_residence', 'healthInsuranceCard': 'health_insurance_card' };\n const searchDocType = jsonDocMap[rawDocType] || rawDocType;\n const rawCountryName = ISO_TO_COUNTRY_NAME[cData?.code || ''] || cData?.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 if (!countryMapping || !countryMapping[searchDocType]) return { authMethod: [], mrzTypes: [], regionMapping: null, key: 'root' };\n \n const authMethod: string[] = []; const mrzTypes: string[] = [];\n const rawRegionKey = cData.region?.trim()?.length > 0 ? cData.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[side]) authMethod.push(item[side]);\n if (item?.mrz_type) mrzTypes.push(item?.mrz_type);\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 (\n capturePath: string,\n verified: ISilentCaptureResult & { region?: string },\n captureSide: 'front' | 'back' = currentSideRef.current,\n captureGeneration: number = cameraGenerationRef.current,\n ) => {\n if (isProcessingCaptureRef.current) return;\n isProcessingCaptureRef.current = true;\n setIsProcessingCapture(true);\n const safeCapturePath = (Platform.OS === 'ios' && !capturePath.startsWith('file://')) ? `file://${capturePath}` : capturePath;\n setProcessingImagePath(safeCapturePath);\n \n try {\n let imagePathForUpload = capturePath;\n const overlayBbox = cameraConfig.overlay.bbox;\n \n // Prefer the backend-detected card bounds. Front verification returns the\n // detect_face OBB-derived bbox; back verification returns extract_mrz's\n // OBB-derived bbox when MRZ is used. The fixed UI guide is only a fallback.\n const detectedBbox = verified.bbox;\n const hasDetectedBbox = detectedBbox\n && Number.isFinite(detectedBbox.minX)\n && Number.isFinite(detectedBbox.minY)\n && Number.isFinite(detectedBbox.width)\n && Number.isFinite(detectedBbox.height)\n && detectedBbox.width > 0\n && detectedBbox.height > 0;\n\n let cropBbox: IBbox = hasDetectedBbox\n ? detectedBbox\n : {\n minX: overlayBbox.xMin / 100,\n minY: overlayBbox.yMin / 100,\n width: (overlayBbox.xMax - overlayBbox.xMin) / 100,\n height: (overlayBbox.yMax - overlayBbox.yMin) / 100,\n };\n const isSpecificPortrait = Boolean(\n verified.templatePath?.includes('cameroon_id_front_1_1_new'),\n );\n\n try {\n if (!hasDetectedBbox && isSpecificPortrait) {\n cropBbox = {\n minX: 0.15,\n minY: 0.15,\n width: 0.70,\n height: 0.70,\n };\n }\n\n // OBB bounds already track the physical card, so only retain a small\n // safety margin. UI-guide fallbacks remain more forgiving.\n const cropTolerance = hasDetectedBbox ? 0.025 : (isSpecificPortrait ? 0.15 : 0.06);\n\n imagePathForUpload = await cropImageWithBBoxWithTolerance(\n safeCapturePath,\n cropBbox,\n cropTolerance,\n isSpecificPortrait ? 'portrait' : 'landscape',\n );\n sdkLogger.info('Prepared captured document using verified card bounds', {\n side: captureSide,\n cropSource: hasDetectedBbox\n ? (captureSide === 'front' ? 'detect_face_obb' : 'extract_mrz_or_template_obb')\n : 'camera_overlay_fallback',\n bbox: cropBbox,\n });\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://')) ? `file://${imagePathForUpload}` : imagePathForUpload;\n const base64 = await pathToBase64(safeCroppedPath);\n if (cameraGenerationRef.current !== captureGeneration) return;\n const side = captureSide;\n \n const newImages = {\n ...capturedImagesRef.current,\n [side]: { dir: safeCroppedPath, file: base64, mrz: verified.mrz || \"\", templatePath: verified.templatePath },\n };\n capturedImagesRef.current = newImages;\n setCapturedImages(newImages);\n\n sdkLogger.info(`User successfully captured ${side} document`);\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({ ...newImages, country: verified.country, documentType: resolvedDocumentType, ...(verified.region ? { region: verified.region } : {}) });\n }\n \n setTimeout(() => {\n if (cameraGenerationRef.current !== captureGeneration) return;\n setShowCamera(false); actions.showCustomStepper(true);\n setSilentCaptureResult(prev => ({ ...prev, isAnalyzing: false }));\n isProcessingCaptureRef.current = false;\n setIsProcessingCapture(false); setProcessingImagePath(null);\n scanPhaseRef.current = 'image';\n setScanPhase('image'); setPendingCAImage(null);\n }, 600);\n \n } catch (e: any) {\n if (cameraGenerationRef.current !== captureGeneration) return;\n sdkLogger.error(`Auto-capture formatting/saving failed`, { error: e.message }); \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 isProcessingCaptureRef.current = false;\n setIsProcessingCapture(false); setProcessingImagePath(null);\n }\n };\n\n const isBarcodeRequired = (side: string, cData: any, docType: any): boolean => {\n if (side !== 'back') return false;\n if (!cData?.code || !docType?.type) return false;\n \n const rawDocType = docType.type;\n const jsonDocMap: Record<string, string> = { 'nationalId': 'identity_card', 'national_id': 'identity_card', 'passport': 'passport', 'driversLicense': 'drivers_licence', 'drivers_licence': 'drivers_licence', 'residencePermit': 'permanent_residence', 'healthInsuranceCard': 'health_insurance_card' };\n const searchDocType = jsonDocMap[rawDocType] || rawDocType;\n const rawCountryName = ISO_TO_COUNTRY_NAME[cData.code] || cData.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() === cData.code.toLowerCase());\n if (foundKey) countryMapping = baseMapping[foundKey];\n }\n if (!countryMapping || !countryMapping[searchDocType]) return false;\n \n const rawRegionKey = cData.region?.trim()?.length > 0 ? cData.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 return regionData.some((item: any) => {\n const method = String(item['back'] || '').toUpperCase();\n return method.includes('BARCODE') || method.includes('2D');\n });\n };\n\n const processCanadianBarcode = async (barcodeString: string, pendingImage: PendingCanadianImage | null = pendingCAImage) => {\n if (\n scanPhaseRef.current !== 'barcode' ||\n isProcessingCaptureRef.current ||\n barcodeFinalizingRef.current ||\n barcodeCompletedRef.current ||\n !pendingImage\n ) return;\n\n const docType = selectedDocTypeRef.current;\n const cData = countryDataRef.current;\n if (!docType || !isUsableBarcodeText(barcodeString, docType.type === 'health_insurance_card')) return;\n\n const scanSession = barcodeScanSessionRef.current;\n const captureGeneration = cameraGenerationRef.current;\n const isStaleBarcode = () => (\n barcodeScanSessionRef.current !== scanSession ||\n cameraGenerationRef.current !== captureGeneration ||\n scanPhaseRef.current !== 'barcode'\n );\n\n barcodeFinalizingRef.current = true;\n setSilentCaptureResult(prev => ({ ...prev, isAnalyzing: true, error: '' }));\n \n try {\n const isHIC = docType.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 if (isStaleBarcode()) return;\n if (!parsedDictionary) throw new Error(\"Could not parse the barcode data.\");\n\n barcodeCompletedRef.current = true;\n \n const verifiedResult: ISilentCaptureResult & { region?: string } = {\n path: pendingImage.path, templatePath: pendingImage.templatePath, bbox: pendingImage.bbox, success: true,\n mrz: JSON.stringify(parsedDictionary), barcode: barcodeString, isAnalyzing: false,\n country: cData?.code, documentType: docType.type, region: docType.region !== 'root' ? docType.region : undefined,\n };\n \n setSilentCaptureResult(verifiedResult);\n if (pendingImage.bbox) {\n const safeBbox = pendingImage.bbox as IBbox;\n setBboxBySide(prev => ({ ...prev, ['back']: safeBbox }));\n }\n await autoCapture(pendingImage.path, verifiedResult, 'back', captureGeneration);\n } catch (error: any) {\n if (isStaleBarcode()) return;\n barcodeCompletedRef.current = false;\n scannedBarcodeRef.current = null;\n sdkLogger.warn('Decoded barcode could not be formatted; continuing to scan', { error: error?.message });\n setSilentCaptureResult(prev => ({\n ...prev,\n isAnalyzing: false,\n success: false,\n error: state.currentLanguage === 'en'\n ? 'Barcode detected but not readable yet. Hold it steady and try again.'\n : 'Code-barres détecté mais pas encore lisible. Maintenez-le stable et réessayez.',\n }));\n } finally {\n if (barcodeScanSessionRef.current === scanSession) {\n barcodeFinalizingRef.current = false;\n }\n }\n };\n\n /**\n * Live scanners favor speed and can receive a relatively small analysis\n * frame. This fallback sends the camera's full-resolution still image to the\n * dedicated decoder, which is much more reliable for high-density PDF417.\n */\n const decodeBarcodeFromImage = async (\n imagePath: string,\n pendingImage: PendingCanadianImage | null = pendingCAImage,\n allowServiceFallback = true,\n ) => {\n if (\n scanPhaseRef.current !== 'barcode' ||\n !pendingImage ||\n barcodeImageDecodeSessionRef.current === barcodeScanSessionRef.current ||\n barcodeFinalizingRef.current ||\n barcodeCompletedRef.current ||\n isProcessingCaptureRef.current\n ) return;\n\n const docType = selectedDocTypeRef.current;\n if (!docType) return;\n\n const scanSession = barcodeScanSessionRef.current;\n barcodeImageDecodeSessionRef.current = scanSession;\n sdkLogger.info('Attempting high-resolution barcode decode', {\n platform: Platform.OS,\n session: scanSession,\n });\n try {\n if (Platform.OS === 'android' && SanctumKeySdkModule.decodeBarcodeFromImage) {\n try {\n const localBarcodeText = await SanctumKeySdkModule.decodeBarcodeFromImage(\n imagePath,\n targetBarcodeTypes as string[],\n );\n if (scanSession !== barcodeScanSessionRef.current || scanPhaseRef.current !== 'barcode') return;\n\n if (isUsableBarcodeText(localBarcodeText, docType.type === 'health_insurance_card')) {\n scannedBarcodeRef.current = localBarcodeText;\n sdkLogger.info('Barcode decoded by enhanced on-device fallback', {\n length: localBarcodeText.length,\n });\n await processCanadianBarcode(localBarcodeText, pendingImage);\n return;\n }\n sdkLogger.info('On-device decoders did not find a usable barcode in this frame', {\n session: scanSession,\n });\n } catch (localError: any) {\n sdkLogger.info('Enhanced on-device barcode fallback could not decode this frame', {\n error: String(errorMessage(localError) || 'Unknown local decoder error'),\n });\n }\n } else if (Platform.OS === 'android' && !nativeBarcodeDecoderWarningShownRef.current) {\n nativeBarcodeDecoderWarningShownRef.current = true;\n sdkLogger.warn('Enhanced on-device barcode decoder is unavailable; rebuild the Android app.');\n }\n } finally {\n if (barcodeImageDecodeSessionRef.current === scanSession) {\n barcodeImageDecodeSessionRef.current = null;\n }\n }\n\n if (scanSession !== barcodeScanSessionRef.current || scanPhaseRef.current !== 'barcode') return;\n if (!allowServiceFallback) {\n sdkLogger.info('Verified back image did not yield a barcode locally; waiting for a close-up frame');\n return;\n }\n\n // Do not let a slow network request block local decoding of subsequent\n // high-resolution frames. At most two service calls are made per session.\n if (barcodeServiceDecodeSessionRef.current === scanSession) return;\n if (barcodeServiceAttemptsRef.current.session !== scanSession) {\n barcodeServiceAttemptsRef.current = { session: scanSession, count: 0 };\n }\n if (barcodeServiceAttemptsRef.current.count >= 2) return;\n\n barcodeServiceAttemptsRef.current.count += 1;\n barcodeServiceDecodeSessionRef.current = scanSession;\n try {\n const token = await authentification();\n if (scanSession !== barcodeScanSessionRef.current || scanPhaseRef.current !== 'barcode') return;\n\n const backendDocType = GovernmentDocumentTypeShorted[docType.type as keyof typeof GovernmentDocumentTypeShorted] || docType.type;\n const response = await kycService.extractBarcode({\n fileUri: imagePath,\n token,\n docType: backendDocType,\n postfix: 'back',\n timeoutMs: 15000,\n }, env);\n if (scanSession !== barcodeScanSessionRef.current || scanPhaseRef.current !== 'barcode') return;\n\n const barcodeText = getDecodedBarcodeText(response);\n if (isUsableBarcodeText(barcodeText, docType.type === 'health_insurance_card')) {\n scannedBarcodeRef.current = barcodeText;\n sdkLogger.info('Barcode decoded by the high-resolution service fallback', { length: barcodeText.length });\n await processCanadianBarcode(barcodeText, pendingImage);\n } else {\n sdkLogger.info('Barcode service returned no usable data; local scanning remains active', {\n session: scanSession,\n });\n }\n } catch (error: any) {\n sdkLogger.info('Barcode service fallback failed; local scanning remains active', {\n error: String(errorMessage(error) || 'Unknown barcode service error'),\n });\n } finally {\n if (barcodeServiceDecodeSessionRef.current === scanSession) {\n barcodeServiceDecodeSessionRef.current = null;\n }\n }\n };\n\n const handleExitKYCFlow = () => {\n cameraGenerationRef.current += 1;\n barcodeScanSessionRef.current += 1;\n barcodeImageDecodeSessionRef.current = null;\n barcodeFinalizingRef.current = false;\n barcodeCompletedRef.current = false;\n scannedBarcodeRef.current = null;\n isAnalyzingRef.current = false;\n isProcessingCaptureRef.current = false;\n currentSideRef.current = 'front';\n scanPhaseRef.current = 'image';\n capturedImagesRef.current = {};\n clearAuthToken();\n // 1. Clear local UI and camera states immediately\n setCapturedImages({});\n if (onValueChange) onValueChange({}); // Clear the parent's form state\n setCurrentSide('front');\n setScanPhase('image');\n setSilentCaptureResult({ success: false, isAnalyzing: false, path: '', error: '' });\n setPendingCAImage(null);\n setIsProcessingCapture(false);\n setProcessingImagePath(null);\n \n // 2. Restart the backend session and context state\n if (actions.restartSession) {\n // This is your new custom action that wipes the token, state, and fetches a new session\n actions.restartSession();\n } else if (actions.resetTemplate) {\n // Fallback\n clearAuthToken();\n actions.resetTemplate();\n } else {\n console.warn(\"Could not restart flow. Ensure restartSession is added to your KYC context actions.\");\n }\n};\n\nconst handleSilentCapture = async (\n result: { success: boolean; path?: string; error?: string; barcode?: unknown },\n frameGeneration: number = cameraGenerationRef.current,\n) => {\n if (cameraGenerationRef.current !== frameGeneration) return;\n if (isProcessingCaptureRef.current) return;\n if (scanPhaseRef.current === 'barcode') {\n if (result.success && result.path) void decodeBarcodeFromImage(result.path);\n return;\n }\n if (isAnalyzingRef.current) return;\n\n // 🚨 SYNCHRONOUS LOCK: Block all subsequent camera frames immediately\n isAnalyzingRef.current = true;\n\n const side = currentSideRef.current;\n const captured = capturedImagesRef.current;\n const docType = selectedDocTypeRef.current;\n const cData = countryDataRef.current;\n const isStaleFrame = () => (\n cameraGenerationRef.current !== frameGeneration ||\n currentSideRef.current !== side ||\n scanPhaseRef.current !== 'image'\n );\n\n if (result.success && result.path) {\n setSilentCaptureResult((prev) => ({ ...prev, isAnalyzing: true, success: false, error: '' }));\n const safeCapturePath = Platform.OS === 'ios' && !result.path.startsWith('file://') ? `file://${result.path}` : result.path;\n \n let templatePath = captured[side]?.templatePath || '';\n let templateBbox: IBbox | undefined;\n let templateResponse: any;\n\n if (!docType) {\n setSilentCaptureResult((prev) => ({ ...prev, isAnalyzing: false, success: false, error: 'Document type not selected' }));\n isAnalyzingRef.current = false; // 🚨 UNLOCK\n return;\n }\n\n const issuingSubdivision = docType.region !== 'root' ? docType.region : undefined;\n \n const watchdog = setTimeout(() => {\n if (!isStaleFrame() && isAnalyzingRef.current) {\n isAnalyzingRef.current = false; // 🚨 UNLOCK inside watchdog\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: docType.type as GovernmentDocumentType, \n docRegion: cData?.code || \"\", \n postfix: side, \n issuingSubdivision: issuingSubdivision \n }, env);\n if (isStaleFrame()) {\n clearTimeout(watchdog);\n return;\n }\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 isAnalyzingRef.current = false; // 🚨 UNLOCK\n return;\n }\n try {\n const crop = await cropByObb(safeCapturePath, (templateType as any).card_obb);\n if (isStaleFrame()) {\n clearTimeout(watchdog);\n return;\n }\n templateBbox = crop.bbox;\n } catch {}\n }\n }\n\n sdkLogger.info(`Template check passed for ${side}`, { templatePath });\n \n const extractedCountryKey = templatePath ? templatePath.split('/')[0] : (ISO_TO_COUNTRY_NAME[cData?.code || ''] || 'root');\n const regionMappings = getCurrentSideVerification(side, extractedCountryKey, cData);\n \n let verificationRes: any;\n if (side === '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[docType.type as keyof typeof GovernmentDocumentTypeShorted] || '', \n code: cData?.code || '', \n currentSide: side, \n templatePath, \n mrzType, \n issuingSubdivision: issuingSubdivision, \n clientSideBarcodeData: silentCaptureResult.barcode \n }, env);\n } else {\n const matchedBackAuthMethod = getCorrespondingAuthMethod(templatePath, regionMappings.regionMapping, regionMappings.key || '', 'back');\n const backMrzType = getCorrespondingMrzType(templatePath, regionMappings.regionMapping, regionMappings.key || '') || '';\n const frontTemplatePath = captured['front']?.templatePath || '';\n \n verificationRes = await backVerification({ \n path: safeCapturePath, \n regionMapping: { authMethod: matchedBackAuthMethod ? [matchedBackAuthMethod] : [], mrzTypes: backMrzType ? [backMrzType] : [] }, \n selectedDocumentType: GovernmentDocumentTypeShorted[docType.type as keyof typeof GovernmentDocumentTypeShorted] || '', \n code: cData?.code || '', \n currentSide: side, \n templatePath, \n mrzType: backMrzType, \n templateResponse, \n issuingSubdivision: issuingSubdivision, \n frontTemplatePath: frontTemplatePath \n }, env);\n }\n\n if (isStaleFrame()) {\n clearTimeout(watchdog);\n return;\n }\n\n const bbox = verificationRes?.bbox || templateBbox;\n const verifiedMrz = verificationRes?.mrz ? JSON.stringify(verificationRes.mrz) : \"\";\n\n if (isBarcodeRequired(side, cData, docType)) {\n const barcodeData = scannedBarcodeRef.current;\n const isHIC = docType.type === 'health_insurance_card';\n const isValidScan = typeof barcodeData === 'string' && ((isHIC && barcodeData.length > 0) || barcodeData.length > 50);\n \n if (isValidScan) {\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 if (isStaleFrame()) {\n clearTimeout(watchdog);\n return;\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: cData?.code, documentType: docType.type, region: docType.region !== 'root' ? docType.region : undefined \n };\n \n clearTimeout(watchdog);\n setSilentCaptureResult(verifiedResult);\n if (bbox) setBboxBySide(prev => ({ ...prev, ['back']: bbox as IBbox }));\n \n isAnalyzingRef.current = false; // 🚨 UNLOCK on success\n await autoCapture(safeCapturePath!, verifiedResult, side, frameGeneration);\n return;\n }\n\n sdkLogger.info('Verification passed. Starting barcode scan phase.', {\n platform: Platform.OS,\n formats: targetBarcodeTypes,\n });\n clearTimeout(watchdog);\n const pendingImage = { path: safeCapturePath!, templateResponse, templatePath, bbox };\n barcodeScanSessionRef.current += 1;\n barcodeCompletedRef.current = false;\n scanPhaseRef.current = 'barcode';\n setPendingCAImage(pendingImage);\n setScanPhase('barcode');\n setSilentCaptureResult(prev => ({ ...prev, isAnalyzing: false }));\n isAnalyzingRef.current = false; // 🚨 UNLOCK before phase shift\n if (Platform.OS === 'android') {\n void decodeBarcodeFromImage(safeCapturePath!, pendingImage, false);\n }\n return;\n }\n\n const verifiedResult: ISilentCaptureResult & { region?: string } = { \n path: safeCapturePath, templatePath, bbox, success: true, mrz: verifiedMrz, isAnalyzing: false, \n country: cData?.code, documentType: docType.type, region: issuingSubdivision \n };\n \n clearTimeout(watchdog);\n setSilentCaptureResult(verifiedResult);\n if (bbox) setBboxBySide(prev => ({ ...prev, [side]: bbox }));\n \n isAnalyzingRef.current = false; // 🚨 UNLOCK on final success\n await autoCapture(safeCapturePath, verifiedResult, side, frameGeneration);\n\n } catch (error: any) {\n clearTimeout(watchdog);\n if (isStaleFrame()) return;\n const rawMessage = (typeof error === 'string' ? error : (error?.message || '')).toLowerCase();\n const statusCode = error?.response?.status || error?.status;\n \n if (\n statusCode === 401 || statusCode === 403 || \n rawMessage.includes('401') || rawMessage.includes('unauthorized') || \n rawMessage.includes('token') || rawMessage.includes('unauthenticated')\n ) {\n sdkLogger.error(`Secure API Session Expired during AI extraction`);\n setShowCamera(false);\n setIsProcessingCapture(false);\n setSilentCaptureResult(prev => ({ ...prev, isAnalyzing: false, success: false, error: '' }));\n \n Alert.alert(\n state.currentLanguage === 'en' ? 'Session Expired' : 'Session Expirée',\n state.currentLanguage === 'en' ? 'Your secure session has expired. Please restart the process.' : 'Votre session sécurisée a expiré. Veuillez recommencer.',\n [{ text: state.currentLanguage === 'en' ? 'Restart' : 'Recommencer', onPress: () => handleExitKYCFlow() }],\n { cancelable: false }\n );\n isAnalyzingRef.current = false; // 🚨 UNLOCK on session expiry\n return;\n }\n\n let hintMessage = '';\n if (rawMessage.includes('card_not_fully_in_frame') || rawMessage.includes('non entièrement visible') || rawMessage.includes('aucun visage détecté') || rawMessage.includes('stabiliser la caméra')) {\n hintMessage = state.currentLanguage === 'en' ? 'Ensure the entire card and your face are clearly inside the frame.' : 'Assurez-vous que toute la carte et le visage sont clairement dans le cadre.';\n } else if (rawMessage.includes('pays sélectionné')) {\n hintMessage = state.currentLanguage === 'en' ? 'This document does not match the selected country.' : 'Ce document ne correspond pas au pays sélectionné.';\n } else if (rawMessage.includes('ne correspond pas au recto') || rawMessage.includes('document différent')) {\n hintMessage = state.currentLanguage === 'en' ? 'Please scan the back of the exact same ID.' : 'Veuillez scanner le verso de la même pièce d\\'identité.';\n } else if (rawMessage.includes('impossible de lire') || rawMessage.includes('impossible d\\'extraire') || rawMessage.includes('mrz') || rawMessage.includes('extraction') || rawMessage.includes('illisible') || rawMessage.includes('invalide')) {\n hintMessage = state.currentLanguage === 'en' ? 'Cannot read document text. Avoid glare, improve lighting, and hold steady.' : 'Impossible de lire le texte. Évitez les reflets, améliorez l\\'éclairage et restez immobile.';\n } else if (rawMessage.includes('cloudflare') || rawMessage.includes('tunnel') || rawMessage.includes('502') || rawMessage.includes('503')) {\n hintMessage = state.currentLanguage === 'en' ? 'Server is temporarily offline. Please try again in a few minutes.' : 'Le serveur est temporairement hors ligne. Veuillez réessayer dans quelques minutes.';\n } else {\n const isNetworkError = error?.isAxiosError || rawMessage === 'network error' || error?.code === 'econnaborted' || rawMessage.includes('network');\n if (isNetworkError) {\n hintMessage = state.currentLanguage === 'en' ? 'Poor connection. Please check your internet.' : 'Connexion faible. Veuillez vérifier votre internet.';\n }\n }\n\n setSilentCaptureResult(prev => ({ ...prev, isAnalyzing: false, success: false, error: hintMessage }));\n isAnalyzingRef.current = false; // 🚨 UNLOCK at end of catch block\n }\n } else {\n // 🚨 UNLOCK if the camera frame was invalid or empty\n isAnalyzingRef.current = false; \n }\n};\n\n useEffect(() => {\n if (scanPhase === 'barcode' && pendingCAImage && silentCaptureResult.barcode) {\n const bData = silentCaptureResult.barcode;\n const allowShortBarcode = selectedDocumentType?.type === 'health_insurance_card';\n if (isUsableBarcodeText(bData, allowShortBarcode)) {\n processCanadianBarcode(bData);\n }\n }\n }, [scanPhase, pendingCAImage, silentCaptureResult.barcode, selectedDocumentType?.type]);\n\n const handleError = (event: { message: string, name?: string, code?: string }) => {\n const errString = `${event.message} ${event.name} ${event.code}`.toLowerCase();\n let friendlyMessage = state.currentLanguage === 'en' ? 'Camera error.' : 'Erreur de caméra.';\n if (errString.includes('notreadableerror') || errString.includes('trackstarterror') || errString.includes('in use') || errString.includes('concurrent') || errString.includes('camera unavailable')) { 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')) { 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')) { friendlyMessage = state.currentLanguage === 'en' ? 'No camera detected.' : 'Aucune caméra détectée.'; }\n\n sdkLogger.error(\"Hardware Camera Error encountered\", { ...event, friendlyMessage }); // 🚨 LOG\n showAlert(state.currentLanguage === 'en' ? 'Camera Error' : 'Erreur', friendlyMessage);\n cancelCurrentCapture();\n };\n\n useEffect(() => { actions.showCustomStepper(!showCamera); }, [showCamera]);\n\n // Render logic remains identical below...\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}>{state.currentLanguage === \"en\" ? \"Please complete the country and document selection first.\" : \"Veuillez d'abord compléter la sélection du pays et du document.\"}</Text>\n </View>\n </View>\n );\n }\n\n if (showCamera) {\n const isBusy = isProcessingCapture;\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 return (\n <View style={styles.root}>\n <View style={[styles.cameraWrapper, { flex: 1 }]}>\n <View style={styles.headerContainer}>\n <Text style={styles.headerTitle}>{selectedDocumentType ? (locale === 'en' ? getDocumentTypeInfo(selectedDocumentType.type).name.en : getDocumentTypeInfo(selectedDocumentType.type).name.fr) : ''}</Text>\n <View style={styles.stepBadge}>\n <Text style={styles.stepText}>{t('kyc.idCardCapture.captureTitle', { side: currentSide === 'front' ? locale === 'en' ? 'Front' : 'Recto' : locale === 'en' ? 'Back' : 'Verso' })}</Text>\n </View>\n </View>\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}><Text style={styles.webFlipText}>🔄 Flip Lens</Text></TouchableOpacity>\n </View>\n )}\n <EnhancedCameraView\n key={`${currentSide}-${scanPhase}-${cameraKey}`} showCamera={true} isProcessing={isBusy} 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={(result) => {\n if (\n cameraGenerationRef.current !== cameraKey ||\n currentSideRef.current !== currentSide ||\n scanPhaseRef.current !== scanPhase\n ) {\n sdkLogger.info('Discarded a stale camera frame after capture-mode transition', {\n frameGeneration: cameraKey,\n activeGeneration: cameraGenerationRef.current,\n frameSide: currentSide,\n activeSide: currentSideRef.current,\n framePhase: scanPhase,\n activePhase: scanPhaseRef.current,\n });\n return;\n }\n void handleSilentCapture(result, cameraKey);\n }}\n silentCaptureResult={silentCaptureResult}\n captureStabilizationDelayMs={scanPhase === 'barcode' ? 3000 : 4000}\n isScanningBarcode={currentSide === 'back' && scanPhase === 'barcode'} barcodeTypes={targetBarcodeTypes}\n onBarcodeScanned={(barcodeString) => {\n const allowShortBarcode = selectedDocumentType?.type === 'health_insurance_card';\n if (!isUsableBarcodeText(barcodeString, allowShortBarcode)) return;\n if (scannedBarcodeRef.current !== barcodeString) {\n sdkLogger.info('Barcode detected by live camera scanner', { length: barcodeString.length });\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 <IdCardOverlay\n xMin={cameraConfig.overlay.bbox.xMin} yMin={cameraConfig.overlay.bbox.yMin} xMax={cameraConfig.overlay.bbox.xMax} yMax={cameraConfig.overlay.bbox.yMax}\n instructions={cameraConfig.overlay.guideText} cornerOpacity={cameraConfig.overlay.bbox.cornerRadius || 0 as number} isSuccess={silentCaptureResult.success || scanPhase === 'barcode'} language={state.currentLanguage}\n stepperProps={{\n back: () => {\n if (currentSide === 'back') {\n returnToFrontReview();\n } else {\n cancelCurrentCapture();\n actions.previousComponent();\n }\n },\n selectedDocumentType: selectedDocumentType ? (locale === 'en' ? getDocumentTypeInfo(selectedDocumentType.type).name.en : getDocumentTypeInfo(selectedDocumentType.type).name.fr) : '', step: state.currentComponentIndex + 1, totalSteps: state.template.components.length, side: currentSide,\n }}\n />\n }\n />\n {scanPhase === 'barcode' && !isBusy && (\n <View style={styles.barcodePromptContainer}>\n <View style={styles.barcodePromptContent}>\n <View style={styles.barcodeIconContainer}><Text style={styles.barcodeIcon}>✓</Text></View>\n <View style={styles.barcodeTextContainer}>\n <Text style={styles.barcodePromptTitle}>{state.currentLanguage === 'en' ? 'Image Verified' : 'Image Vérifiée'}</Text>\n <Text style={styles.barcodePromptDesc}>\n {state.currentLanguage === 'en' \n ? 'Proceed to scan the barcode. Move closer but ensure it is fully visible in the frame.' \n : 'Procédez au scan du code-barres. Rapprochez-vous, mais assurez-vous qu\\'il soit entièrement visible dans le cadre.'}\n </Text>\n </View>\n </View>\n </View>\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}>{state.currentLanguage === 'en' ? 'Scanning...' : 'Analyse...'}</Text>\n </View>\n </View>\n )}\n {isBusy && (\n <View style={[StyleSheet.absoluteFillObject, { zIndex: 9999 }]}>\n {processingImagePath && <Image source={{ uri: processingImagePath.startsWith('file://') ? processingImagePath : `file://${processingImagePath}` }} style={StyleSheet.absoluteFillObject} resizeMode=\"cover\" />}\n <View style={styles.processingOverlay}>\n <ActivityIndicator size=\"large\" color=\"#2DBD60\" />\n <Text style={styles.processingText}>{state.currentLanguage === 'en' ? 'Perfect!\\nProcessing Document...' : 'Parfait!\\nTraitement du document...'}</Text>\n </View>\n </View>\n )}\n {!isBusy && Platform.OS === 'web' ? (\n <View style={styles.webBottomControlBar}>\n {silentCaptureResult.error && <View style={styles.floatingErrorBanner}><Text style={styles.floatingErrorText}>⚠️ {silentCaptureResult.error}</Text></View>}\n <View style={styles.webActionButtonsRow}>\n <TouchableOpacity style={styles.webSecondaryButton} onPress={cancelCurrentCapture}><Text style={styles.webSecondaryButtonText}>Cancel</Text></TouchableOpacity>\n <TouchableOpacity style={styles.webPrimaryButton} onPress={refreshCamera}><Text style={styles.webPrimaryButtonText}>↻ Refresh Camera</Text></TouchableOpacity>\n </View>\n </View>\n ) : !isBusy ? (\n <View style={styles.escapeHatchContainer}>\n <TouchableOpacity style={styles.fallbackRefreshButton} onPress={refreshCamera}><Text style={styles.fallbackRefreshText}>↻ Refresh Camera</Text></TouchableOpacity>\n <TouchableOpacity style={[styles.fallbackRefreshButton, { marginTop: 15, backgroundColor: 'rgba(220, 38, 38, 0.8)', borderColor: '#DC2626' }]} onPress={cancelCurrentCapture}><Text style={styles.fallbackRefreshText}>Cancel / Go Back</Text></TouchableOpacity>\n </View>\n ) : null}\n {silentCaptureResult.error && !isBusy && Platform.OS !== 'web' ? (\n <View style={[styles.floatingErrorBanner, { zIndex: 10000 }]}><Text style={styles.floatingErrorText}>⚠️ {silentCaptureResult.error}</Text></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}>{t('kyc.idCardCapture.captureTitle', { side: currentSide === 'front' ? locale === 'en' ? 'Front' : 'Recto' : locale === 'en' ? 'Back' : 'Verso' })}</Text>\n <Text style={{ fontSize: 14, color: '#666', textAlign: 'center', marginBottom: 16, lineHeight: 22 }}>{getLocalizedText(component.instructions)}</Text>\n <View style={{ alignItems: 'center', justifyContent: 'center', flexDirection: \"column\", gap: 16 }}>\n <View style={styles.imagePreviewWrapper}>\n {capturedImages[currentSide]?.dir ? ( <Image source={{ uri: capturedImages[currentSide].dir }} style={styles.previewImage} /> ) : silentCaptureResult.path ? ( <Image source={{ uri: silentCaptureResult.path }} style={styles.previewImage} /> ) : null}\n </View>\n {!capturedImages[currentSide]?.dir && (\n <View style={{ width: '100%', gap: 12 }}>\n {isWebScanningRestricted ? (\n <>\n <View style={styles.restrictionWarningBanner}>\n <Text style={styles.restrictionWarningTitle}>{state.currentLanguage === 'en' ? '⚠️ Web Scanning Unavailable' : '⚠️ Numérisation Web Indisponible'}</Text>\n <Text style={styles.restrictionWarningText}>{state.currentLanguage === 'en' ? `This document can only be scanned using our mobile app.` : `Ce document ne peut être scanné qu'avec notre application mobile.`}</Text>\n </View>\n <Button title={state.currentLanguage === \"en\" ? \"Continue on Phone\" : \"Continuer sur le téléphone\"} onPress={() => setShowQRModal(true)} variant=\"primary\" size=\"large\" fullWidth />\n </>\n ) : (\n <>\n <Button\n title={state.currentLanguage === \"en\" ? \"Start Scanning\" : \"Commencer la numérisation\"}\n onPress={handleStartCamera}\n variant=\"primary\"\n size=\"large\"\n fullWidth\n />\n {Platform.OS === 'web' && ( <Button title={state.currentLanguage === \"en\" ? \"Continue on Phone\" : \"Continuer sur le téléphone\"} onPress={() => setShowQRModal(true)} variant=\"outline\" size=\"large\" fullWidth /> )}\n </>\n )}\n </View>\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) { showAlert('Error', 'Document type not selected'); return; }\n if (currentSide === 'back' || selectedDocumentType.type === 'passport') {\n sdkLogger.info(\"User submitting document captures and advancing to next step\", {\n documentType: selectedDocumentType.type\n });\n actions.nextComponent();\n } else {\n sdkLogger.info(\"User finished front verification, proceeding to back\");\n startBackCapture();\n }\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: {\n backgroundColor: '#FEF2F2',\n borderWidth: 1,\n borderColor: '#FCA5A5',\n paddingVertical: 12,\n paddingHorizontal: 16,\n borderRadius: 12,\n alignItems: 'center',\n justifyContent: 'center',\n ...Platform.select({\n web: {\n position: 'absolute',\n bottom: '100%',\n marginBottom: 16,\n maxWidth: 500,\n width: '100%', // Safe to keep 100% on web since left/right aren't used\n alignSelf: 'center',\n zIndex: 100000,\n boxShadow: '0 4px 12px rgba(0,0,0,0.15)'\n } as any,\n default: {\n position: 'absolute',\n top: Platform.OS === 'ios' ? 90 : 70,\n left: 24,\n right: 24,\n zIndex: 10000\n }\n })\n },\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});\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, 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 { cropImageWithBBoxWithTolerance } from '../../utils/cropByObb';\nimport kycService, { authentification, clearAuthToken, errorMessage } from '../../modules/api/KYCService';\nimport { Linking } from 'react-native';\nimport { sdkLogger } from '../../utils/logger'; \nimport SanctumKeySdkModule from '../../SanctumKeySdkModule';\nimport { getCameraPermissionStatus, requestCameraPermission } from '../../utils/cameraPermissions';\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 PendingCanadianImage {\n path: string;\n templateResponse: any;\n templatePath: string;\n bbox?: IBbox;\n}\n\nconst BARCODE_RESPONSE_TEXT_KEYS = [\n 'barcode_data',\n 'raw_barcode',\n 'raw_data',\n 'decoded_data',\n 'decoded_text',\n 'barcode',\n 'text',\n 'value',\n 'data',\n 'detail',\n] as const;\n\n/**\n * The image decoder has returned a few slightly different response envelopes\n * over time. Keep that API variation out of the capture flow and only accept\n * values from fields that are known to contain the raw barcode payload.\n */\nconst getDecodedBarcodeText = (response: unknown, depth = 0): string | null => {\n if (typeof response === 'string') {\n return response.trim().length > 0 ? response : null;\n }\n\n if (!response || typeof response !== 'object' || depth > 3) return null;\n\n if (Array.isArray(response)) {\n for (const item of response) {\n const value = getDecodedBarcodeText(item, depth + 1);\n if (value) return value;\n }\n return null;\n }\n\n const record = response as Record<string, unknown>;\n for (const key of BARCODE_RESPONSE_TEXT_KEYS) {\n const value = record[key];\n if (typeof value === 'string' && value.trim().length > 0) return value;\n }\n\n for (const key of ['result', 'data', 'payload', 'barcodes', 'results'] as const) {\n const nested = record[key];\n if (nested && typeof nested === 'object') {\n const value = getDecodedBarcodeText(nested, depth + 1);\n if (value) return value;\n }\n }\n\n return null;\n};\n\nconst isUsableBarcodeText = (value: unknown, allowShortBarcode: boolean): value is string => {\n if (typeof value !== 'string') return false;\n\n const trimmed = value.trim();\n const isDecoderError = /^(no (?:bar)?code|barcode (?:not|was not)|unable to decode|failed to decode|error\\b)/i.test(trimmed);\n return !isDecoderError && trimmed.length > 0 && (allowShortBarcode || value.length > 50);\n};\n\n/**\n * Keep barcode extraction payloads aligned with extract_mrz_text responses.\n * The barcode formatter historically returned its decoded fields under\n * `data`; downstream consumers expect all machine-readable document data\n * under `parsed_data` regardless of whether it came from MRZ or a barcode.\n */\nconst normalizeBarcodePayload = (payload: unknown): unknown => {\n if (!payload || typeof payload !== 'object' || Array.isArray(payload)) return payload;\n\n const record = payload as Record<string, unknown>;\n if (Object.prototype.hasOwnProperty.call(record, 'parsed_data')) return record;\n if (!Object.prototype.hasOwnProperty.call(record, 'data')) return record;\n\n const { data, ...metadata } = record;\n return { ...metadata, data: data };\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\", \"NB\": \"New Brunswick\",\n \"NL\": \"Newfoundland and Labrador\", \"NT\": \"Northwest Territories\", \"NS\": \"Nova Scotia\",\n \"NU\": \"Nunavut\", \"ON\": \"Ontario\", \"PE\": \"Prince Edward Island\", \"QC\": \"Quebec\",\n \"SK\": \"Saskatchewan\", \"YT\": \"Yukon\"\n};\n\nconst DOCUMENT_TYPE_MAPPING: Record<string, GovernmentDocumentType> = {\n nationalId: 'national_id',\n national_id: 'national_id',\n identity_card: 'national_id',\n passport: 'passport',\n driversLicense: 'drivers_licence',\n drivers_licence: 'drivers_licence',\n residencePermit: 'permanent_residence',\n permanent_residence: 'permanent_residence',\n healthInsuranceCard: 'health_insurance_card',\n health_insurance_card: 'health_insurance_card',\n};\n\nconst ExpiringCodeTimer = ({ initialCode, language }: { initialCode: string, language: string }) => {\n const [timeLeft, setTimeLeft] = useState(300);\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 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 \n const [isProcessingCapture, setIsProcessingCapture] = useState(false);\n const [processingImagePath, setProcessingImagePath] = useState<string | null>(null);\n const [cameraKey, setCameraKey] = useState(0);\n const cameraGenerationRef = useRef(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 console.log(currentUrl)\n const [qrPlatform, setQrPlatform] = useState<'android' | 'ios'>('android');\n const [scanPhase, setScanPhase] = useState<'image' | 'barcode'>('image');\n const [pendingCAImage, setPendingCAImage] = useState<PendingCanadianImage | null>(null);\n const scannedBarcodeRef = useRef<string | null>(null);\n const barcodeImageDecodeSessionRef = useRef<number | null>(null);\n const barcodeServiceDecodeSessionRef = useRef<number | null>(null);\n const barcodeServiceAttemptsRef = useRef<{ session: number | null; count: number }>({ session: null, count: 0 });\n const barcodeFinalizingRef = useRef(false);\n const barcodeCompletedRef = useRef(false);\n const barcodeScanSessionRef = useRef(0);\n const nativeBarcodeDecoderWarningShownRef = useRef(false);\n const [generatedCode, setGeneratedCode] = useState<string | null>(null);\n const [isGeneratingCode, setIsGeneratingCode] = useState(false);\n const { actions, state, env, apiKey } = useTemplateKYCFlowContext();\n\n\n useEffect(() => {\n if (state.session?.session_id) {\n sdkLogger.info(\"User started ID document verification step\", { side: currentSide });\n }\n }, [state.session?.session_id, currentSide]);\n\n const { width: screenWidth, height: screenHeight } = useWindowDimensions();\n\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 = DOCUMENT_TYPE_MAPPING[backendDocType] || backendDocType as GovernmentDocumentType;\n return { type: mappedType, region: countrySelectionData.region || 'root' };\n }, [countrySelectionData]);\n\n const countryData = useMemo(() => countrySelectionData, [countrySelectionData]);\n\n // ==========================================\n // 🚨 CRITICAL FIX: REF MIRRORS FOR IOS BRIDGE \n // Bypass stale native closures by mirroring all state into refs\n // ==========================================\n const isAnalyzingRef = useRef<boolean>(false);\n const isProcessingCaptureRef = useRef<boolean>(false);\n const scanPhaseRef = useRef<'image' | 'barcode'>('image');\n const currentSideRef = useRef(currentSide);\n const capturedImagesRef = useRef(capturedImages);\n const selectedDocTypeRef = useRef(selectedDocumentType);\n const countryDataRef = useRef(countryData);\n\n useEffect(() => { isAnalyzingRef.current = silentCaptureResult.isAnalyzing ?? false; }, [silentCaptureResult.isAnalyzing]);\n useEffect(() => { isProcessingCaptureRef.current = isProcessingCapture; }, [isProcessingCapture]);\n useEffect(() => { scanPhaseRef.current = scanPhase; }, [scanPhase]);\n useEffect(() => { currentSideRef.current = currentSide; }, [currentSide]);\n useEffect(() => { capturedImagesRef.current = capturedImages; }, [capturedImages]);\n useEffect(() => { selectedDocTypeRef.current = selectedDocumentType; }, [selectedDocumentType]);\n useEffect(() => { countryDataRef.current = countryData; }, [countryData]);\n // ==========================================\n\n const handleGenerateCode = async () => {\n if (isGeneratingCode) return;\n setIsGeneratingCode(true);\n try {\n if (!apiKey) {\n showAlert('Error', 'API Key is missing.');\n setIsGeneratingCode(false); return;\n }\n const res = await kycService.generateReferralCode({ session_id: state.session.session_id }, apiKey);\n const newCode = res.code || res.referral_code || res?.data?.code || res?.data?.referral_code;\n if (newCode) setGeneratedCode(newCode);\n else showAlert('Error', 'Failed to parse code from server response.');\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 }, []);\n\n const getLocalizedText = (text: LocalizedText | Record<string, LocalizedText>): string => {\n if (text && typeof text[currentSide] === 'object' && text[currentSide][locale]) return text[currentSide][locale] || '';\n return \"\";\n };\n\n const isWebScanningRestricted = useMemo(() => {\n if (Platform.OS !== 'web') return false;\n if (countryData?.code !== 'CA') return false;\n const docType = selectedDocumentType?.type;\n return docType === 'drivers_licence' || docType === 'health_insurance_card' || docType === 'national_id' || 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') {\n return [\n 'pdf-417', 'code-128', 'code-39', 'code-93', 'codabar',\n // Vision Camera's Android implementation rejects `itf-14`; its `itf`\n // reader already covers ITF-14 payloads.\n 'ean-13', 'ean-8', 'itf', 'upc-a', 'upc-e',\n ];\n }\n return ['pdf-417'];\n }, [selectedDocumentType?.type]);\n\n const refreshCamera = () => {\n const nextCameraGeneration = cameraGenerationRef.current + 1;\n cameraGenerationRef.current = nextCameraGeneration;\n barcodeScanSessionRef.current += 1;\n barcodeImageDecodeSessionRef.current = null;\n barcodeFinalizingRef.current = false;\n barcodeCompletedRef.current = false;\n scannedBarcodeRef.current = null;\n isAnalyzingRef.current = false;\n isProcessingCaptureRef.current = false;\n setIsProcessingCapture(false);\n setProcessingImagePath(null);\n setIsRebootingCamera(true);\n if (scanPhaseRef.current === 'barcode') {\n const activeSide = currentSideRef.current;\n scanPhaseRef.current = 'image';\n setScanPhase('image');\n setPendingCAImage(null);\n const nextImages = { ...capturedImagesRef.current };\n delete nextImages[activeSide];\n capturedImagesRef.current = nextImages;\n setCapturedImages(nextImages);\n if (value) { const newValue = { ...value }; delete newValue[activeSide]; onValueChange(newValue); }\n setSilentCaptureResult({ success: false, isAnalyzing: false, path: '', error: '', templatePath: '', mrz: '', bbox: undefined });\n } else {\n setSilentCaptureResult(prev => ({ ...prev, success: false, isAnalyzing: false, error: '' }));\n }\n setTimeout(() => {\n if (cameraGenerationRef.current !== nextCameraGeneration) return;\n setCameraKey(nextCameraGeneration);\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 && JSON.stringify(value) !== JSON.stringify(capturedImages)) {\n const updatedImages = value as Record<string, IIDCardPayload>;\n capturedImagesRef.current = updatedImages;\n setCapturedImages(updatedImages);\n const currentImageData = updatedImages[currentSide];\n if (currentImageData?.dir) {\n setSilentCaptureResult(prev => ({ ...prev, path: currentImageData.dir, success: true, isAnalyzing: false, mrz: currentImageData.mrz || '', templatePath: currentImageData.templatePath || '' }));\n }\n }\n }, [value, currentSide]);\n\n const handleStartCamera = async () => {\n sdkLogger.info(`Requesting camera start for ${currentSide} document verification`, { os: Platform.OS }); // 🚨 LOG\n if (Platform.OS === 'web') {\n setShowCamera(true);\n refreshCamera();\n actions.showCustomStepper(false);\n return;\n }\n try {\n let status = getCameraPermissionStatus();\n if (status !== 'granted') {\n sdkLogger.info(`Camera permission not granted yet, requesting...`);\n status = await requestCameraPermission();\n }\n if (status === 'granted') {\n sdkLogger.info(`Camera permission granted. Mounting camera...`);\n setShowCamera(true);\n refreshCamera();\n actions.showCustomStepper(false);\n } else {\n sdkLogger.warn(`Camera permission denied by user.`);\n Alert.alert(\n state.currentLanguage === 'en' ? 'Camera Access Required' : 'Accès à la caméra requis',\n state.currentLanguage === 'en' ? 'We need camera access to scan your ID. Please tap \"Settings\" to enable it.' : 'Nous avons besoin de l\\'accès à la caméra pour scanner votre pièce d\\'identité. Veuillez appuyer sur \"Paramètres\" pour l\\'activer.',\n [\n { text: state.currentLanguage === 'en' ? 'Cancel' : 'Annuler', style: 'cancel' },\n { text: state.currentLanguage === 'en' ? 'Settings' : 'Paramètres', onPress: () => Linking.openSettings() }\n ]\n );\n }\n } catch (error: any) {\n sdkLogger.error('Failed to request native camera permission', { error: error?.message }); // 🚨 LOG\n setShowCamera(true);\n refreshCamera();\n actions.showCustomStepper(false);\n }\n };\n\n const startBackCapture = () => {\n sdkLogger.info('Preparing camera for back document capture');\n barcodeScanSessionRef.current += 1;\n barcodeImageDecodeSessionRef.current = null;\n barcodeFinalizingRef.current = false;\n barcodeCompletedRef.current = false;\n scannedBarcodeRef.current = null;\n isAnalyzingRef.current = false;\n isProcessingCaptureRef.current = false;\n currentSideRef.current = 'back';\n scanPhaseRef.current = 'image';\n\n const nextImages = { ...capturedImagesRef.current };\n delete nextImages.back;\n capturedImagesRef.current = nextImages;\n setCapturedImages(nextImages);\n setBboxBySide(prev => {\n const next = { ...prev };\n delete next.back;\n return next;\n });\n\n if (value && Object.prototype.hasOwnProperty.call(value, 'back')) {\n const nextValue = { ...value };\n delete nextValue.back;\n onValueChange(nextValue);\n }\n\n setSilentCaptureResult({\n success: false,\n isAnalyzing: false,\n path: '',\n error: '',\n templatePath: '',\n mrz: '',\n barcode: undefined,\n bbox: undefined,\n });\n setPendingCAImage(null);\n setProcessingImagePath(null);\n setIsProcessingCapture(false);\n setIsRebootingCamera(false);\n setCurrentSide('back');\n cameraGenerationRef.current += 1;\n setCameraKey(cameraGenerationRef.current);\n setShowCamera(true);\n actions.showCustomStepper(false);\n };\n\n const cancelCurrentCapture = () => {\n cameraGenerationRef.current += 1;\n barcodeScanSessionRef.current += 1;\n barcodeImageDecodeSessionRef.current = null;\n barcodeFinalizingRef.current = false;\n barcodeCompletedRef.current = false;\n scannedBarcodeRef.current = null;\n isAnalyzingRef.current = false;\n isProcessingCaptureRef.current = false;\n scanPhaseRef.current = 'image';\n\n const savedImage = capturedImagesRef.current[currentSideRef.current];\n setScanPhase('image');\n setPendingCAImage(null);\n setIsProcessingCapture(false);\n setProcessingImagePath(null);\n setIsRebootingCamera(false);\n setShowCamera(false);\n setSilentCaptureResult(savedImage?.dir\n ? {\n path: savedImage.dir,\n success: true,\n isAnalyzing: false,\n error: '',\n mrz: savedImage.mrz || '',\n templatePath: savedImage.templatePath || '',\n bbox: bboxBySide[currentSideRef.current],\n }\n : { path: '', success: false, isAnalyzing: false, error: '', templatePath: '', mrz: '', bbox: undefined });\n };\n\n const returnToFrontReview = () => {\n cameraGenerationRef.current += 1;\n barcodeScanSessionRef.current += 1;\n barcodeImageDecodeSessionRef.current = null;\n barcodeFinalizingRef.current = false;\n barcodeCompletedRef.current = false;\n scannedBarcodeRef.current = null;\n isAnalyzingRef.current = false;\n isProcessingCaptureRef.current = false;\n currentSideRef.current = 'front';\n scanPhaseRef.current = 'image';\n\n const frontImage = capturedImagesRef.current.front;\n setScanPhase('image');\n setPendingCAImage(null);\n setCurrentSide('front');\n setShowCamera(false);\n setIsProcessingCapture(false);\n setProcessingImagePath(null);\n setIsRebootingCamera(false);\n setSilentCaptureResult(frontImage?.dir\n ? {\n path: frontImage.dir,\n success: true,\n isAnalyzing: false,\n error: '',\n mrz: frontImage.mrz || '',\n templatePath: frontImage.templatePath || '',\n bbox: bboxBySide.front,\n }\n : { path: '', success: false, isAnalyzing: false, error: '', templatePath: '', mrz: '', bbox: undefined });\n };\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 } else {\n const stabilityHint = locale === 'en'\n ? 'Position the entire ID, then hold steady. Capture starts automatically.'\n : 'Positionnez la pièce entière, puis restez immobile. La capture démarre automatiquement.';\n instructions = instructions ? `${instructions}\\n${stabilityHint}` : stabilityHint;\n }\n \n const isLandscape = screenWidth > screenHeight;\n let xMin, xMax, yMin, yMax;\n \n if (scanPhase === 'barcode') {\n // Keep the barcode target deliberately compact so users move close\n // enough for dense PDF417 and linear bars to remain individually sharp.\n // Pixel caps prevent the guide from becoming oversized on tablets.\n const guideWidthPx = Math.min(\n screenWidth * (isLandscape ? 0.68 : 0.82),\n isLandscape ? 620 : 440,\n );\n const guideHeightPx = Math.min(\n guideWidthPx / (isLandscape ? 4.2 : 3.2),\n screenHeight * (isLandscape ? 0.34 : 0.12),\n );\n const guideWidthPercent = (guideWidthPx / screenWidth) * 100;\n const guideHeightPercent = (guideHeightPx / screenHeight) * 100;\n\n xMin = (100 - guideWidthPercent) / 2;\n xMax = xMin + guideWidthPercent;\n yMin = (100 - guideHeightPercent) / 2;\n yMax = yMin + guideHeightPercent;\n } else if (Platform.OS === 'web') {\n const boxWidthPercent = isLandscape ? 0.40 : 0.85;\n xMin = isLandscape ? 30 : 7.5; \n xMax = xMin + (boxWidthPercent * 100);\n const containerWidth = Math.min(screenWidth * 0.95, 1000);\n const containerHeight = isLandscape ? screenHeight * 0.80 : screenHeight * 0.90;\n const boxPixelWidth = containerWidth * boxWidthPercent;\n const boxPixelHeight = boxPixelWidth / 1.59;\n const heightPercent = (boxPixelHeight / containerHeight) * 100;\n yMin = (100 - heightPercent) / 2.5; \n yMax = yMin + heightPercent;\n } else {\n // Standard Horizontal Frame (Width: 90%, Height: 32%)\n xMin = 5; \n xMax = 95;\n yMin = 34; \n yMax = 66;\n }\n \n const platformBbox = { \n xMin, yMin, xMax, 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\n const retakePicture = (sideToRetake: 'front' | 'back') => {\n barcodeScanSessionRef.current += 1;\n barcodeImageDecodeSessionRef.current = null;\n barcodeFinalizingRef.current = false;\n barcodeCompletedRef.current = false;\n scannedBarcodeRef.current = null;\n isAnalyzingRef.current = false;\n isProcessingCaptureRef.current = false;\n currentSideRef.current = sideToRetake;\n scanPhaseRef.current = 'image';\n setCurrentSide(sideToRetake);\n setIsProcessingCapture(false);\n setProcessingImagePath(null);\n setScanPhase('image');\n setPendingCAImage(null);\n setSilentCaptureResult({ path: '', success: false, isAnalyzing: false, error: '', templatePath: '', mrz: '', bbox: undefined });\n const nextImages = { ...capturedImagesRef.current };\n delete nextImages[sideToRetake];\n capturedImagesRef.current = nextImages;\n setCapturedImages(nextImages);\n setBboxBySide(prev => {\n const next = { ...prev };\n delete next[sideToRetake];\n return next;\n });\n if (value) { const newValue = { ...value }; delete newValue[sideToRetake]; onValueChange(newValue); }\n setShowCamera(true);\n refreshCamera();\n actions.showCustomStepper(false);\n };\n\n const getCurrentSideVerification = (side: string, countryKey: string, cData: any) => {\n const rawDocType = cData?.documentType;\n if (!rawDocType || !countryKey) return { authMethod: [], mrzTypes: [], regionMapping: null, key: 'root' };\n \n const jsonDocMap: Record<string, string> = { 'nationalId': 'identity_card', 'national_id': 'identity_card', 'passport': 'passport', 'driversLicense': 'drivers_licence', 'drivers_licence': 'drivers_licence', 'residencePermit': 'permanent_residence', 'healthInsuranceCard': 'health_insurance_card' };\n const searchDocType = jsonDocMap[rawDocType] || rawDocType;\n const rawCountryName = ISO_TO_COUNTRY_NAME[cData?.code || ''] || cData?.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 if (!countryMapping || !countryMapping[searchDocType]) return { authMethod: [], mrzTypes: [], regionMapping: null, key: 'root' };\n \n const authMethod: string[] = []; const mrzTypes: string[] = [];\n const rawRegionKey = cData.region?.trim()?.length > 0 ? cData.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[side]) authMethod.push(item[side]);\n if (item?.mrz_type) mrzTypes.push(item?.mrz_type);\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 (\n capturePath: string,\n verified: ISilentCaptureResult & { region?: string },\n captureSide: 'front' | 'back' = currentSideRef.current,\n captureGeneration: number = cameraGenerationRef.current,\n ) => {\n if (isProcessingCaptureRef.current) return;\n isProcessingCaptureRef.current = true;\n setIsProcessingCapture(true);\n const safeCapturePath = (Platform.OS === 'ios' && !capturePath.startsWith('file://')) ? `file://${capturePath}` : capturePath;\n setProcessingImagePath(safeCapturePath);\n \n try {\n let imagePathForUpload = capturePath;\n // Barcode mode has a deliberately tighter visual guide, but this method\n // saves the verified document image. If OBB bounds are unavailable, keep\n // using the original full-card fallback rather than cropping to the\n // barcode-only window.\n const overlayBbox = scanPhaseRef.current === 'barcode'\n ? { xMin: 5, yMin: 34, xMax: 95, yMax: 66 }\n : cameraConfig.overlay.bbox;\n \n // Prefer the backend-detected card bounds. Front verification returns the\n // detect_face OBB-derived bbox; back verification returns extract_mrz's\n // OBB-derived bbox when MRZ is used. The fixed UI guide is only a fallback.\n const detectedBbox = verified.bbox;\n const hasDetectedBbox = detectedBbox\n && Number.isFinite(detectedBbox.minX)\n && Number.isFinite(detectedBbox.minY)\n && Number.isFinite(detectedBbox.width)\n && Number.isFinite(detectedBbox.height)\n && detectedBbox.width > 0\n && detectedBbox.height > 0;\n\n let cropBbox: IBbox = hasDetectedBbox\n ? detectedBbox\n : {\n minX: overlayBbox.xMin / 100,\n minY: overlayBbox.yMin / 100,\n width: (overlayBbox.xMax - overlayBbox.xMin) / 100,\n height: (overlayBbox.yMax - overlayBbox.yMin) / 100,\n };\n const isSpecificPortrait = Boolean(\n verified.templatePath?.includes('cameroon_id_front_1_1_new'),\n );\n\n try {\n if (!hasDetectedBbox && isSpecificPortrait) {\n cropBbox = {\n minX: 0.15,\n minY: 0.15,\n width: 0.70,\n height: 0.70,\n };\n }\n\n // OBB bounds already track the physical card, so only retain a small\n // safety margin. UI-guide fallbacks remain more forgiving.\n const cropTolerance = hasDetectedBbox ? 0.025 : (isSpecificPortrait ? 0.15 : 0.06);\n\n imagePathForUpload = await cropImageWithBBoxWithTolerance(\n safeCapturePath,\n cropBbox,\n cropTolerance,\n isSpecificPortrait ? 'portrait' : 'landscape',\n );\n sdkLogger.info('Prepared captured document using verified card bounds', {\n side: captureSide,\n cropSource: hasDetectedBbox\n ? (captureSide === 'front' ? 'detect_face_obb' : 'extract_mrz_or_template_obb')\n : 'camera_overlay_fallback',\n bbox: cropBbox,\n });\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://')) ? `file://${imagePathForUpload}` : imagePathForUpload;\n const base64 = await pathToBase64(safeCroppedPath);\n if (cameraGenerationRef.current !== captureGeneration) return;\n const side = captureSide;\n \n const newImages = {\n ...capturedImagesRef.current,\n [side]: { dir: safeCroppedPath, file: base64, mrz: verified.mrz || \"\", templatePath: verified.templatePath },\n };\n capturedImagesRef.current = newImages;\n setCapturedImages(newImages);\n\n sdkLogger.info(`User successfully captured ${side} document`);\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({ ...newImages, country: verified.country, documentType: resolvedDocumentType, ...(verified.region ? { region: verified.region } : {}) });\n }\n \n setTimeout(() => {\n if (cameraGenerationRef.current !== captureGeneration) return;\n setShowCamera(false); actions.showCustomStepper(true);\n setSilentCaptureResult(prev => ({ ...prev, success: false, isAnalyzing: false, error: '' }));\n isProcessingCaptureRef.current = false;\n setIsProcessingCapture(false); setProcessingImagePath(null);\n scanPhaseRef.current = 'image';\n setScanPhase('image'); setPendingCAImage(null);\n }, 600);\n \n } catch (e: any) {\n if (cameraGenerationRef.current !== captureGeneration) return;\n sdkLogger.error(`Auto-capture formatting/saving failed`, { error: e.message }); \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 isProcessingCaptureRef.current = false;\n setIsProcessingCapture(false); setProcessingImagePath(null);\n }\n };\n\n const isBarcodeRequired = (side: string, cData: any, docType: any): boolean => {\n if (side !== 'back') return false;\n if (!cData?.code || !docType?.type) return false;\n \n const rawDocType = docType.type;\n const jsonDocMap: Record<string, string> = { 'nationalId': 'identity_card', 'national_id': 'identity_card', 'passport': 'passport', 'driversLicense': 'drivers_licence', 'drivers_licence': 'drivers_licence', 'residencePermit': 'permanent_residence', 'healthInsuranceCard': 'health_insurance_card' };\n const searchDocType = jsonDocMap[rawDocType] || rawDocType;\n const rawCountryName = ISO_TO_COUNTRY_NAME[cData.code] || cData.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() === cData.code.toLowerCase());\n if (foundKey) countryMapping = baseMapping[foundKey];\n }\n if (!countryMapping || !countryMapping[searchDocType]) return false;\n \n const rawRegionKey = cData.region?.trim()?.length > 0 ? cData.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 return regionData.some((item: any) => {\n const method = String(item['back'] || '').toUpperCase();\n return method.includes('BARCODE') || method.includes('2D');\n });\n };\n\n const processCanadianBarcode = async (barcodeString: string, pendingImage: PendingCanadianImage | null = pendingCAImage) => {\n if (\n scanPhaseRef.current !== 'barcode' ||\n isProcessingCaptureRef.current ||\n barcodeFinalizingRef.current ||\n barcodeCompletedRef.current ||\n !pendingImage\n ) return;\n\n const docType = selectedDocTypeRef.current;\n const cData = countryDataRef.current;\n if (!docType || !isUsableBarcodeText(barcodeString, docType.type === 'health_insurance_card')) return;\n\n const scanSession = barcodeScanSessionRef.current;\n const captureGeneration = cameraGenerationRef.current;\n const isStaleBarcode = () => (\n barcodeScanSessionRef.current !== scanSession ||\n cameraGenerationRef.current !== captureGeneration ||\n scanPhaseRef.current !== 'barcode'\n );\n\n barcodeFinalizingRef.current = true;\n setSilentCaptureResult(prev => ({ ...prev, isAnalyzing: true, error: '' }));\n \n try {\n const isHIC = docType.type === 'health_insurance_card';\n let parsedDictionary;\n \n if (isHIC && barcodeString.length < 50) {\n parsedDictionary = { parsed_data: { card_number: barcodeString, barcode_type: \"1D\" } };\n } else {\n const token = await authentification();\n const formattedBarcode = await kycService.formatBarcodeData({ textInput: barcodeString, token }, env);\n parsedDictionary = normalizeBarcodePayload(formattedBarcode);\n }\n if (isStaleBarcode()) return;\n if (!parsedDictionary) throw new Error(\"Could not parse the barcode data.\");\n\n barcodeCompletedRef.current = true;\n \n const verifiedResult: ISilentCaptureResult & { region?: string } = {\n path: pendingImage.path, templatePath: pendingImage.templatePath, bbox: pendingImage.bbox, success: true,\n mrz: JSON.stringify(parsedDictionary), barcode: barcodeString, isAnalyzing: false,\n country: cData?.code, documentType: docType.type, region: docType.region !== 'root' ? docType.region : undefined,\n };\n \n setSilentCaptureResult(verifiedResult);\n if (pendingImage.bbox) {\n const safeBbox = pendingImage.bbox as IBbox;\n setBboxBySide(prev => ({ ...prev, ['back']: safeBbox }));\n }\n await autoCapture(pendingImage.path, verifiedResult, 'back', captureGeneration);\n } catch (error: any) {\n if (isStaleBarcode()) return;\n barcodeCompletedRef.current = false;\n scannedBarcodeRef.current = null;\n sdkLogger.warn('Decoded barcode could not be formatted; continuing to scan', { error: error?.message });\n setSilentCaptureResult(prev => ({\n ...prev,\n isAnalyzing: false,\n success: false,\n error: state.currentLanguage === 'en'\n ? 'Barcode detected but not readable yet. Hold it steady and try again.'\n : 'Code-barres détecté mais pas encore lisible. Maintenez-le stable et réessayez.',\n }));\n } finally {\n if (barcodeScanSessionRef.current === scanSession) {\n barcodeFinalizingRef.current = false;\n }\n }\n };\n\n /**\n * Live scanners favor speed and can receive a relatively small analysis\n * frame. This fallback sends the camera's full-resolution still image to the\n * dedicated decoder, which is much more reliable for high-density PDF417.\n */\n const decodeBarcodeFromImage = async (\n imagePath: string,\n pendingImage: PendingCanadianImage | null = pendingCAImage,\n allowServiceFallback = true,\n ) => {\n if (\n scanPhaseRef.current !== 'barcode' ||\n !pendingImage ||\n barcodeImageDecodeSessionRef.current === barcodeScanSessionRef.current ||\n barcodeFinalizingRef.current ||\n barcodeCompletedRef.current ||\n isProcessingCaptureRef.current\n ) return;\n\n const docType = selectedDocTypeRef.current;\n if (!docType) return;\n\n const scanSession = barcodeScanSessionRef.current;\n barcodeImageDecodeSessionRef.current = scanSession;\n sdkLogger.info('Attempting high-resolution barcode decode', {\n platform: Platform.OS,\n session: scanSession,\n });\n try {\n if (Platform.OS === 'android' && SanctumKeySdkModule.decodeBarcodeFromImage) {\n try {\n const localBarcodeText = await SanctumKeySdkModule.decodeBarcodeFromImage(\n imagePath,\n targetBarcodeTypes as string[],\n );\n if (scanSession !== barcodeScanSessionRef.current || scanPhaseRef.current !== 'barcode') return;\n\n if (isUsableBarcodeText(localBarcodeText, docType.type === 'health_insurance_card')) {\n scannedBarcodeRef.current = localBarcodeText;\n sdkLogger.info('Barcode decoded by enhanced on-device fallback', {\n length: localBarcodeText.length,\n });\n await processCanadianBarcode(localBarcodeText, pendingImage);\n return;\n }\n sdkLogger.info('On-device decoders did not find a usable barcode in this frame', {\n session: scanSession,\n });\n } catch (localError: any) {\n sdkLogger.info('Enhanced on-device barcode fallback could not decode this frame', {\n error: String(errorMessage(localError) || 'Unknown local decoder error'),\n });\n }\n } else if (Platform.OS === 'android' && !nativeBarcodeDecoderWarningShownRef.current) {\n nativeBarcodeDecoderWarningShownRef.current = true;\n sdkLogger.warn('Enhanced on-device barcode decoder is unavailable; rebuild the Android app.');\n }\n } finally {\n if (barcodeImageDecodeSessionRef.current === scanSession) {\n barcodeImageDecodeSessionRef.current = null;\n }\n }\n\n if (scanSession !== barcodeScanSessionRef.current || scanPhaseRef.current !== 'barcode') return;\n if (!allowServiceFallback) {\n sdkLogger.info('Verified back image did not yield a barcode locally; waiting for a close-up frame');\n return;\n }\n\n // Do not let a slow network request block local decoding of subsequent\n // high-resolution frames. At most two service calls are made per session.\n if (barcodeServiceDecodeSessionRef.current === scanSession) return;\n if (barcodeServiceAttemptsRef.current.session !== scanSession) {\n barcodeServiceAttemptsRef.current = { session: scanSession, count: 0 };\n }\n if (barcodeServiceAttemptsRef.current.count >= 2) return;\n\n barcodeServiceAttemptsRef.current.count += 1;\n barcodeServiceDecodeSessionRef.current = scanSession;\n try {\n const token = await authentification();\n if (scanSession !== barcodeScanSessionRef.current || scanPhaseRef.current !== 'barcode') return;\n\n const backendDocType = GovernmentDocumentTypeShorted[docType.type as keyof typeof GovernmentDocumentTypeShorted] || docType.type;\n const response = await kycService.extractBarcode({\n fileUri: imagePath,\n token,\n docType: backendDocType,\n postfix: 'back',\n timeoutMs: 15000,\n }, env);\n if (scanSession !== barcodeScanSessionRef.current || scanPhaseRef.current !== 'barcode') return;\n\n const barcodeText = getDecodedBarcodeText(response);\n if (isUsableBarcodeText(barcodeText, docType.type === 'health_insurance_card')) {\n scannedBarcodeRef.current = barcodeText;\n sdkLogger.info('Barcode decoded by the high-resolution service fallback', { length: barcodeText.length });\n await processCanadianBarcode(barcodeText, pendingImage);\n } else {\n sdkLogger.info('Barcode service returned no usable data; local scanning remains active', {\n session: scanSession,\n });\n }\n } catch (error: any) {\n sdkLogger.info('Barcode service fallback failed; local scanning remains active', {\n error: String(errorMessage(error) || 'Unknown barcode service error'),\n });\n } finally {\n if (barcodeServiceDecodeSessionRef.current === scanSession) {\n barcodeServiceDecodeSessionRef.current = null;\n }\n }\n };\n\n const handleExitKYCFlow = () => {\n cameraGenerationRef.current += 1;\n barcodeScanSessionRef.current += 1;\n barcodeImageDecodeSessionRef.current = null;\n barcodeFinalizingRef.current = false;\n barcodeCompletedRef.current = false;\n scannedBarcodeRef.current = null;\n isAnalyzingRef.current = false;\n isProcessingCaptureRef.current = false;\n currentSideRef.current = 'front';\n scanPhaseRef.current = 'image';\n capturedImagesRef.current = {};\n clearAuthToken();\n // 1. Clear local UI and camera states immediately\n setCapturedImages({});\n if (onValueChange) onValueChange({}); // Clear the parent's form state\n setCurrentSide('front');\n setScanPhase('image');\n setSilentCaptureResult({ success: false, isAnalyzing: false, path: '', error: '' });\n setPendingCAImage(null);\n setIsProcessingCapture(false);\n setProcessingImagePath(null);\n \n // 2. Restart the backend session and context state\n if (actions.restartSession) {\n // This is your new custom action that wipes the token, state, and fetches a new session\n actions.restartSession();\n } else if (actions.resetTemplate) {\n // Fallback\n clearAuthToken();\n actions.resetTemplate();\n } else {\n console.warn(\"Could not restart flow. Ensure restartSession is added to your KYC context actions.\");\n }\n};\n\nconst handleSilentCapture = async (\n result: { success: boolean; path?: string; error?: string; barcode?: unknown },\n frameGeneration: number = cameraGenerationRef.current,\n) => {\n if (cameraGenerationRef.current !== frameGeneration) return;\n if (isProcessingCaptureRef.current) return;\n if (scanPhaseRef.current === 'barcode') {\n if (result.success && result.path) void decodeBarcodeFromImage(result.path);\n return;\n }\n if (isAnalyzingRef.current) return;\n\n // 🚨 SYNCHRONOUS LOCK: Block all subsequent camera frames immediately\n isAnalyzingRef.current = true;\n\n const side = currentSideRef.current;\n const captured = capturedImagesRef.current;\n const docType = selectedDocTypeRef.current;\n const cData = countryDataRef.current;\n const isStaleFrame = () => (\n cameraGenerationRef.current !== frameGeneration ||\n currentSideRef.current !== side ||\n scanPhaseRef.current !== 'image'\n );\n\n if (result.success && result.path) {\n setSilentCaptureResult((prev) => ({ ...prev, isAnalyzing: true, success: false, error: '' }));\n const safeCapturePath = Platform.OS === 'ios' && !result.path.startsWith('file://') ? `file://${result.path}` : result.path;\n \n let templatePath = captured[side]?.templatePath || '';\n let templateBbox: IBbox | undefined;\n let templateResponse: any;\n\n if (!docType) {\n setSilentCaptureResult((prev) => ({ ...prev, isAnalyzing: false, success: false, error: 'Document type not selected' }));\n isAnalyzingRef.current = false; // 🚨 UNLOCK\n return;\n }\n\n const issuingSubdivision = docType.region !== 'root' ? docType.region : undefined;\n \n const watchdog = setTimeout(() => {\n if (!isStaleFrame() && isAnalyzingRef.current) {\n isAnalyzingRef.current = false; // 🚨 UNLOCK inside watchdog\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: docType.type as GovernmentDocumentType, \n docRegion: cData?.code || \"\", \n postfix: side, \n issuingSubdivision: issuingSubdivision \n }, env);\n if (isStaleFrame()) {\n clearTimeout(watchdog);\n return;\n }\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 isAnalyzingRef.current = false; // 🚨 UNLOCK\n return;\n }\n try {\n const crop = await cropByObb(safeCapturePath, (templateType as any).card_obb);\n if (isStaleFrame()) {\n clearTimeout(watchdog);\n return;\n }\n templateBbox = crop.bbox;\n } catch {}\n }\n }\n\n sdkLogger.info(`Template check passed for ${side}`, { templatePath });\n \n const extractedCountryKey = templatePath ? templatePath.split('/')[0] : (ISO_TO_COUNTRY_NAME[cData?.code || ''] || 'root');\n const regionMappings = getCurrentSideVerification(side, extractedCountryKey, cData);\n \n let verificationRes: any;\n if (side === '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[docType.type as keyof typeof GovernmentDocumentTypeShorted] || '', \n code: cData?.code || '', \n currentSide: side, \n templatePath, \n mrzType, \n issuingSubdivision: issuingSubdivision, \n clientSideBarcodeData: silentCaptureResult.barcode \n }, env);\n } else {\n const matchedBackAuthMethod = getCorrespondingAuthMethod(templatePath, regionMappings.regionMapping, regionMappings.key || '', 'back');\n const backMrzType = getCorrespondingMrzType(templatePath, regionMappings.regionMapping, regionMappings.key || '') || '';\n const frontTemplatePath = captured['front']?.templatePath || '';\n \n verificationRes = await backVerification({ \n path: safeCapturePath, \n regionMapping: { authMethod: matchedBackAuthMethod ? [matchedBackAuthMethod] : [], mrzTypes: backMrzType ? [backMrzType] : [] }, \n selectedDocumentType: GovernmentDocumentTypeShorted[docType.type as keyof typeof GovernmentDocumentTypeShorted] || '', \n code: cData?.code || '', \n currentSide: side, \n templatePath, \n mrzType: backMrzType, \n templateResponse, \n issuingSubdivision: issuingSubdivision, \n frontTemplatePath: frontTemplatePath \n }, env);\n }\n\n if (isStaleFrame()) {\n clearTimeout(watchdog);\n return;\n }\n\n const bbox = verificationRes?.bbox || templateBbox;\n const verifiedMrz = verificationRes?.mrz ? JSON.stringify(verificationRes.mrz) : \"\";\n\n if (isBarcodeRequired(side, cData, docType)) {\n const barcodeData = scannedBarcodeRef.current;\n const isHIC = docType.type === 'health_insurance_card';\n const isValidScan = typeof barcodeData === 'string' && ((isHIC && barcodeData.length > 0) || barcodeData.length > 50);\n \n if (isValidScan) {\n let parsedDictionary;\n if (isHIC && barcodeData.length < 50) {\n parsedDictionary = { parsed_data: { card_number: barcodeData, barcode_type: \"1D\" } };\n } else {\n const token = await authentification();\n const formattedBarcode = await kycService.formatBarcodeData({ textInput: barcodeData, token }, env);\n parsedDictionary = normalizeBarcodePayload(formattedBarcode);\n }\n if (isStaleFrame()) {\n clearTimeout(watchdog);\n return;\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: cData?.code, documentType: docType.type, region: docType.region !== 'root' ? docType.region : undefined \n };\n \n clearTimeout(watchdog);\n setSilentCaptureResult(verifiedResult);\n if (bbox) setBboxBySide(prev => ({ ...prev, ['back']: bbox as IBbox }));\n \n isAnalyzingRef.current = false; // 🚨 UNLOCK on success\n await autoCapture(safeCapturePath!, verifiedResult, side, frameGeneration);\n return;\n }\n\n sdkLogger.info('Verification passed. Starting barcode scan phase.', {\n platform: Platform.OS,\n formats: targetBarcodeTypes,\n });\n clearTimeout(watchdog);\n const pendingImage = { path: safeCapturePath!, templateResponse, templatePath, bbox };\n barcodeScanSessionRef.current += 1;\n barcodeCompletedRef.current = false;\n scanPhaseRef.current = 'barcode';\n setPendingCAImage(pendingImage);\n setScanPhase('barcode');\n setSilentCaptureResult(prev => ({ ...prev, isAnalyzing: false }));\n isAnalyzingRef.current = false; // 🚨 UNLOCK before phase shift\n if (Platform.OS === 'android') {\n void decodeBarcodeFromImage(safeCapturePath!, pendingImage, false);\n }\n return;\n }\n\n const verifiedResult: ISilentCaptureResult & { region?: string } = { \n path: safeCapturePath, templatePath, bbox, success: true, mrz: verifiedMrz, isAnalyzing: false, \n country: cData?.code, documentType: docType.type, region: issuingSubdivision \n };\n \n clearTimeout(watchdog);\n setSilentCaptureResult(verifiedResult);\n if (bbox) setBboxBySide(prev => ({ ...prev, [side]: bbox }));\n \n isAnalyzingRef.current = false; // 🚨 UNLOCK on final success\n await autoCapture(safeCapturePath, verifiedResult, side, frameGeneration);\n\n } catch (error: any) {\n clearTimeout(watchdog);\n if (isStaleFrame()) return;\n const rawMessage = (typeof error === 'string' ? error : (error?.message || '')).toLowerCase();\n const statusCode = error?.response?.status || error?.status;\n \n if (\n statusCode === 401 || statusCode === 403 || \n rawMessage.includes('401') || rawMessage.includes('unauthorized') || \n rawMessage.includes('token') || rawMessage.includes('unauthenticated')\n ) {\n sdkLogger.error(`Secure API Session Expired during AI extraction`);\n setShowCamera(false);\n setIsProcessingCapture(false);\n setSilentCaptureResult(prev => ({ ...prev, isAnalyzing: false, success: false, error: '' }));\n \n Alert.alert(\n state.currentLanguage === 'en' ? 'Session Expired' : 'Session Expirée',\n state.currentLanguage === 'en' ? 'Your secure session has expired. Please restart the process.' : 'Votre session sécurisée a expiré. Veuillez recommencer.',\n [{ text: state.currentLanguage === 'en' ? 'Restart' : 'Recommencer', onPress: () => handleExitKYCFlow() }],\n { cancelable: false }\n );\n isAnalyzingRef.current = false; // 🚨 UNLOCK on session expiry\n return;\n }\n\n let hintMessage = '';\n if (rawMessage.includes('card_not_fully_in_frame') || rawMessage.includes('non entièrement visible') || rawMessage.includes('aucun visage détecté') || rawMessage.includes('stabiliser la caméra')) {\n hintMessage = state.currentLanguage === 'en' ? 'Ensure the entire card and your face are clearly inside the frame.' : 'Assurez-vous que toute la carte et le visage sont clairement dans le cadre.';\n } else if (rawMessage.includes('pays sélectionné')) {\n hintMessage = state.currentLanguage === 'en' ? 'This document does not match the selected country.' : 'Ce document ne correspond pas au pays sélectionné.';\n } else if (rawMessage.includes('ne correspond pas au recto') || rawMessage.includes('document différent')) {\n hintMessage = state.currentLanguage === 'en' ? 'Please scan the back of the exact same ID.' : 'Veuillez scanner le verso de la même pièce d\\'identité.';\n } else if (rawMessage.includes('impossible de lire') || rawMessage.includes('impossible d\\'extraire') || rawMessage.includes('mrz') || rawMessage.includes('extraction') || rawMessage.includes('illisible') || rawMessage.includes('invalide')) {\n hintMessage = state.currentLanguage === 'en' ? 'Cannot read document text. Avoid glare, improve lighting, and hold steady.' : 'Impossible de lire le texte. Évitez les reflets, améliorez l\\'éclairage et restez immobile.';\n } else if (rawMessage.includes('cloudflare') || rawMessage.includes('tunnel') || rawMessage.includes('502') || rawMessage.includes('503')) {\n hintMessage = state.currentLanguage === 'en' ? 'Server is temporarily offline. Please try again in a few minutes.' : 'Le serveur est temporairement hors ligne. Veuillez réessayer dans quelques minutes.';\n } else {\n const isNetworkError = error?.isAxiosError || rawMessage === 'network error' || error?.code === 'econnaborted' || rawMessage.includes('network');\n if (isNetworkError) {\n hintMessage = state.currentLanguage === 'en' ? 'Poor connection. Please check your internet.' : 'Connexion faible. Veuillez vérifier votre internet.';\n }\n }\n\n setSilentCaptureResult(prev => ({ ...prev, isAnalyzing: false, success: false, error: hintMessage }));\n isAnalyzingRef.current = false; // 🚨 UNLOCK at end of catch block\n }\n } else {\n // 🚨 UNLOCK if the camera frame was invalid or empty\n isAnalyzingRef.current = false; \n }\n};\n\n useEffect(() => {\n if (scanPhase === 'barcode' && pendingCAImage && silentCaptureResult.barcode) {\n const bData = silentCaptureResult.barcode;\n const allowShortBarcode = selectedDocumentType?.type === 'health_insurance_card';\n if (isUsableBarcodeText(bData, allowShortBarcode)) {\n processCanadianBarcode(bData);\n }\n }\n }, [scanPhase, pendingCAImage, silentCaptureResult.barcode, selectedDocumentType?.type]);\n\n const handleError = (event: { message: string, name?: string, code?: string }) => {\n const errString = `${event.message} ${event.name} ${event.code}`.toLowerCase();\n let friendlyMessage = state.currentLanguage === 'en' ? 'Camera error.' : 'Erreur de caméra.';\n if (errString.includes('notreadableerror') || errString.includes('trackstarterror') || errString.includes('in use') || errString.includes('concurrent') || errString.includes('camera unavailable')) { 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')) { 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')) { friendlyMessage = state.currentLanguage === 'en' ? 'No camera detected.' : 'Aucune caméra détectée.'; }\n\n sdkLogger.error(\"Hardware Camera Error encountered\", { ...event, friendlyMessage }); // 🚨 LOG\n showAlert(state.currentLanguage === 'en' ? 'Camera Error' : 'Erreur', friendlyMessage);\n cancelCurrentCapture();\n };\n\n useEffect(() => { actions.showCustomStepper(!showCamera); }, [showCamera]);\n\n // Render logic remains identical below...\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}>{state.currentLanguage === \"en\" ? \"Please complete the country and document selection first.\" : \"Veuillez d'abord compléter la sélection du pays et du document.\"}</Text>\n </View>\n </View>\n );\n }\n\n if (showCamera) {\n const isBusy = isProcessingCapture;\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 return (\n <View style={styles.root}>\n <View style={[styles.cameraWrapper, { flex: 1 }]}>\n <View style={styles.headerContainer}>\n <Text style={styles.headerTitle}>{selectedDocumentType ? (locale === 'en' ? getDocumentTypeInfo(selectedDocumentType.type).name.en : getDocumentTypeInfo(selectedDocumentType.type).name.fr) : ''}</Text>\n <View style={styles.stepBadge}>\n <Text style={styles.stepText}>{t('kyc.idCardCapture.captureTitle', { side: currentSide === 'front' ? locale === 'en' ? 'Front' : 'Recto' : locale === 'en' ? 'Back' : 'Verso' })}</Text>\n </View>\n </View>\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}><Text style={styles.webFlipText}>🔄 Flip Lens</Text></TouchableOpacity>\n </View>\n )}\n <EnhancedCameraView\n key={`${currentSide}-${scanPhase}-${cameraKey}`} showCamera={true} isProcessing={isBusy} 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={(result) => {\n if (\n cameraGenerationRef.current !== cameraKey ||\n currentSideRef.current !== currentSide ||\n scanPhaseRef.current !== scanPhase\n ) {\n sdkLogger.info('Discarded a stale camera frame after capture-mode transition', {\n frameGeneration: cameraKey,\n activeGeneration: cameraGenerationRef.current,\n frameSide: currentSide,\n activeSide: currentSideRef.current,\n framePhase: scanPhase,\n activePhase: scanPhaseRef.current,\n });\n return;\n }\n void handleSilentCapture(result, cameraKey);\n }}\n silentCaptureResult={silentCaptureResult}\n captureStabilizationDelayMs={scanPhase === 'barcode' ? 3000 : 4000}\n isScanningBarcode={currentSide === 'back' && scanPhase === 'barcode'} barcodeTypes={targetBarcodeTypes}\n onBarcodeScanned={(barcodeString) => {\n const allowShortBarcode = selectedDocumentType?.type === 'health_insurance_card';\n if (!isUsableBarcodeText(barcodeString, allowShortBarcode)) return;\n if (scannedBarcodeRef.current !== barcodeString) {\n sdkLogger.info('Barcode detected by live camera scanner', { length: barcodeString.length });\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 <IdCardOverlay\n xMin={cameraConfig.overlay.bbox.xMin} yMin={cameraConfig.overlay.bbox.yMin} xMax={cameraConfig.overlay.bbox.xMax} yMax={cameraConfig.overlay.bbox.yMax}\n instructions={cameraConfig.overlay.guideText} cornerOpacity={cameraConfig.overlay.bbox.cornerRadius || 0 as number} isSuccess={silentCaptureResult.success} language={state.currentLanguage}\n mode={scanPhase === 'barcode' ? 'barcode' : 'document'}\n stepperProps={{\n back: () => {\n if (currentSide === 'back') {\n returnToFrontReview();\n } else {\n cancelCurrentCapture();\n actions.previousComponent();\n }\n },\n selectedDocumentType: selectedDocumentType ? (locale === 'en' ? getDocumentTypeInfo(selectedDocumentType.type).name.en : getDocumentTypeInfo(selectedDocumentType.type).name.fr) : '', step: state.currentComponentIndex + 1, totalSteps: state.template.components.length, side: currentSide,\n }}\n />\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}>{state.currentLanguage === 'en' ? 'Scanning...' : 'Analyse...'}</Text>\n </View>\n </View>\n )}\n {isBusy && (\n <View style={[StyleSheet.absoluteFillObject, { zIndex: 9999 }]}>\n {processingImagePath && <Image source={{ uri: processingImagePath.startsWith('file://') ? processingImagePath : `file://${processingImagePath}` }} style={StyleSheet.absoluteFillObject} resizeMode=\"cover\" />}\n <View style={styles.processingOverlay}>\n <ActivityIndicator size=\"large\" color=\"#2DBD60\" />\n <Text style={styles.processingText}>{state.currentLanguage === 'en' ? 'Perfect!\\nProcessing Document...' : 'Parfait!\\nTraitement du document...'}</Text>\n </View>\n </View>\n )}\n {!isBusy && Platform.OS === 'web' ? (\n <View style={styles.webBottomControlBar}>\n {silentCaptureResult.error && <View style={styles.floatingErrorBanner}><Text style={styles.floatingErrorText}>⚠️ {silentCaptureResult.error}</Text></View>}\n <View style={styles.webActionButtonsRow}>\n <TouchableOpacity style={styles.webSecondaryButton} onPress={cancelCurrentCapture}><Text style={styles.webSecondaryButtonText}>Cancel</Text></TouchableOpacity>\n <TouchableOpacity style={styles.webPrimaryButton} onPress={refreshCamera}><Text style={styles.webPrimaryButtonText}>↻ Refresh Camera</Text></TouchableOpacity>\n </View>\n </View>\n ) : !isBusy ? (\n <View style={styles.escapeHatchContainer}>\n <TouchableOpacity style={styles.fallbackRefreshButton} onPress={refreshCamera}><Text style={styles.fallbackRefreshText}>↻ Refresh Camera</Text></TouchableOpacity>\n <TouchableOpacity style={[styles.fallbackRefreshButton, { marginTop: 15, backgroundColor: 'rgba(220, 38, 38, 0.8)', borderColor: '#DC2626' }]} onPress={cancelCurrentCapture}><Text style={styles.fallbackRefreshText}>Cancel / Go Back</Text></TouchableOpacity>\n </View>\n ) : null}\n {silentCaptureResult.error && !isBusy && Platform.OS !== 'web' ? (\n <View style={[styles.floatingErrorBanner, { zIndex: 10000 }]}><Text style={styles.floatingErrorText}>⚠️ {silentCaptureResult.error}</Text></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}>{t('kyc.idCardCapture.captureTitle', { side: currentSide === 'front' ? locale === 'en' ? 'Front' : 'Recto' : locale === 'en' ? 'Back' : 'Verso' })}</Text>\n <Text style={{ fontSize: 14, color: '#666', textAlign: 'center', marginBottom: 16, lineHeight: 22 }}>{getLocalizedText(component.instructions)}</Text>\n <View style={{ alignItems: 'center', justifyContent: 'center', flexDirection: \"column\", gap: 16 }}>\n <View style={styles.imagePreviewWrapper}>\n {capturedImages[currentSide]?.dir ? ( <Image source={{ uri: capturedImages[currentSide].dir }} style={styles.previewImage} /> ) : silentCaptureResult.path ? ( <Image source={{ uri: silentCaptureResult.path }} style={styles.previewImage} /> ) : null}\n </View>\n {!capturedImages[currentSide]?.dir && (\n <View style={{ width: '100%', gap: 12 }}>\n {isWebScanningRestricted ? (\n <>\n <View style={styles.restrictionWarningBanner}>\n <Text style={styles.restrictionWarningTitle}>{state.currentLanguage === 'en' ? '⚠️ Web Scanning Unavailable' : '⚠️ Numérisation Web Indisponible'}</Text>\n <Text style={styles.restrictionWarningText}>{state.currentLanguage === 'en' ? `This document can only be scanned using our mobile app.` : `Ce document ne peut être scanné qu'avec notre application mobile.`}</Text>\n </View>\n <Button title={state.currentLanguage === \"en\" ? \"Continue on Phone\" : \"Continuer sur le téléphone\"} onPress={() => setShowQRModal(true)} variant=\"primary\" size=\"large\" fullWidth />\n </>\n ) : (\n <>\n <Button\n title={state.currentLanguage === \"en\" ? \"Start Scanning\" : \"Commencer la numérisation\"}\n onPress={handleStartCamera}\n variant=\"primary\"\n size=\"large\"\n fullWidth\n />\n {Platform.OS === 'web' && ( <Button title={state.currentLanguage === \"en\" ? \"Continue on Phone\" : \"Continuer sur le téléphone\"} onPress={() => setShowQRModal(true)} variant=\"outline\" size=\"large\" fullWidth /> )}\n </>\n )}\n </View>\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) { showAlert('Error', 'Document type not selected'); return; }\n if (currentSide === 'back' || selectedDocumentType.type === 'passport') {\n sdkLogger.info(\"User submitting document captures and advancing to next step\", {\n documentType: selectedDocumentType.type\n });\n actions.nextComponent();\n } else {\n sdkLogger.info(\"User finished front verification, proceeding to back\");\n startBackCapture();\n }\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: {\n backgroundColor: '#FEF2F2',\n borderWidth: 1,\n borderColor: '#FCA5A5',\n paddingVertical: 12,\n paddingHorizontal: 16,\n borderRadius: 12,\n alignItems: 'center',\n justifyContent: 'center',\n ...Platform.select({\n web: {\n position: 'absolute',\n bottom: '100%',\n marginBottom: 16,\n maxWidth: 500,\n width: '100%', // Safe to keep 100% on web since left/right aren't used\n alignSelf: 'center',\n zIndex: 100000,\n boxShadow: '0 4px 12px rgba(0,0,0,0.15)'\n } as any,\n default: {\n position: 'absolute',\n top: Platform.OS === 'ios' ? 90 : 70,\n left: 24,\n right: 24,\n zIndex: 10000\n }\n })\n },\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 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});\n"]}
|