@kernaq/verify-react-native 2.0.0 β 2.0.2
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 +1 -1
- package/dist/index.d.ts +95 -50
- package/dist/index.esm.js +1171 -580
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +1169 -576
- package/dist/index.js.map +1 -1
- package/package.json +2 -9
- package/src/KernaqVerify.tsx +172 -176
- package/src/index.ts +9 -4
- package/src/locale.ts +32 -29
- package/src/quality.ts +180 -0
- package/src/steps/DocumentStep.tsx +214 -77
- package/src/steps/IntroStep.tsx +58 -37
- package/src/steps/LivenessStep.tsx +225 -125
- package/src/steps/ProcessingStep.tsx +10 -34
- package/src/steps/ResultStep.tsx +99 -35
- package/src/steps/SelfieStep.tsx +165 -96
- package/src/theme.ts +22 -14
- package/src/types.ts +27 -51
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/locale.ts","../src/theme.ts","../src/hooks/usePermissions.ts","../src/steps/IntroStep.tsx","../src/hooks/useCamera.ts","../src/steps/DocumentStep.tsx","../src/steps/SelfieStep.tsx","../src/steps/LivenessStep.tsx","../src/steps/ProcessingStep.tsx","../src/steps/ResultStep.tsx","../src/KernaqVerify.tsx"],"sourcesContent":["import type { VerifyLocale } from './types'\n\nexport const DEFAULT_LOCALE: VerifyLocale = {\n intro_title: 'Verify your identity',\n intro_body: \"This takes about 60 seconds. You'll need your ID document and a clear view of your face.\",\n intro_cta: 'Get started',\n doc_title: 'Scan your document',\n doc_instruction: 'Hold your ID flat inside the frame. Make sure it\\'s well-lit and all four corners are visible.',\n doc_capture_btn: 'Capture',\n doc_retake_btn: 'Retake',\n doc_next_btn: 'Looks good',\n selfie_title: 'Take a selfie',\n selfie_instruction: 'Look straight at the camera. Keep your face inside the oval.',\n selfie_capture_btn: 'Take selfie',\n selfie_retake_btn: 'Retake',\n selfie_next_btn: 'Looks good',\n liveness_title: 'Liveness check',\n liveness_instruction: 'Press start, then slowly turn your head left and right.',\n liveness_start_btn: 'Start recording',\n liveness_recording: 'Recordingβ¦',\n processing_title: 'Verifying your identity',\n processing_subtitle: 'This usually takes a few seconds.',\n result_pass_title: 'Verification passed',\n result_pass_body: 'Your identity has been verified successfully.',\n result_fail_title: 'Verification failed',\n result_fail_body: 'We were unable to verify your identity. Please try again.',\n result_review_title: 'Under review',\n result_review_body: 'Your submission is being reviewed. This usually takes a few minutes.',\n result_retry_btn: 'Try again',\n error_camera_denied: 'Camera access denied. Please allow camera permissions in settings.',\n error_quality: 'Image quality too low. Try better lighting or hold the camera steady.',\n error_network: 'Network error. Please check your connection and try again.',\n}\n","import type { VerifyTheme } from './types'\n\nexport interface ResolvedTheme {\n accent: string\n bg: string\n text: string\n subtext: string\n border: string\n card: string\n radius: number\n}\n\nexport function resolveTheme(theme?: VerifyTheme): ResolvedTheme {\n const dark = theme?.mode === 'dark'\n return {\n accent: theme?.accentColor ?? '#111827',\n bg: theme?.backgroundColor ?? (dark ? '#1a1a2e' : '#ffffff'),\n text: theme?.textColor ?? (dark ? '#f9fafb' : '#111827'),\n subtext: theme?.subtextColor ?? (dark ? '#9ca3af' : '#6b7280'),\n border: theme?.borderColor ?? (dark ? '#374151' : '#e5e7eb'),\n card: theme?.cardColor ?? (dark ? '#111827' : '#f9fafb'),\n radius: theme?.borderRadius ?? 12,\n }\n}\n","import { useState, useCallback } from 'react'\nimport { Platform, Linking, Alert } from 'react-native'\nimport {\n check,\n request,\n PERMISSIONS,\n RESULTS,\n type Permission,\n} from 'react-native-permissions'\n\nexport type PermissionStatus = 'unknown' | 'granted' | 'denied' | 'blocked'\n\nexport function usePermissions() {\n const [status, setStatus] = useState<PermissionStatus>('unknown')\n\n const cameraPermission: Permission =\n Platform.OS === 'ios'\n ? PERMISSIONS.IOS.CAMERA\n : PERMISSIONS.ANDROID.CAMERA\n\n const micPermission: Permission =\n Platform.OS === 'ios'\n ? PERMISSIONS.IOS.MICROPHONE\n : PERMISSIONS.ANDROID.RECORD_AUDIO\n\n const requestPermissions = useCallback(async (): Promise<boolean> => {\n try {\n const camResult = await check(cameraPermission)\n\n if (camResult === RESULTS.GRANTED) {\n // Also request mic for liveness video\n await request(micPermission)\n setStatus('granted')\n return true\n }\n\n if (camResult === RESULTS.BLOCKED) {\n setStatus('blocked')\n Alert.alert(\n 'Camera Permission Required',\n 'Camera access is blocked. Please enable it in your device settings.',\n [\n { text: 'Cancel', style: 'cancel' },\n { text: 'Open Settings', onPress: () => Linking.openSettings() },\n ]\n )\n return false\n }\n\n // Request camera\n const result = await request(cameraPermission)\n if (result === RESULTS.GRANTED) {\n await request(micPermission)\n setStatus('granted')\n return true\n }\n\n setStatus('denied')\n return false\n } catch {\n setStatus('denied')\n return false\n }\n }, [cameraPermission, micPermission])\n\n return { status, requestPermissions }\n}\n","import React from 'react'\nimport { View, Text, TouchableOpacity, StyleSheet } from 'react-native'\nimport type { ResolvedTheme } from '../theme'\nimport type { VerifyLocale } from '../types'\n\ninterface Props {\n theme: ResolvedTheme\n locale: VerifyLocale\n onStart: () => void\n}\n\nexport function IntroStep({ theme, locale, onStart }: Props) {\n const s = styles(theme)\n return (\n <View style={s.container}>\n <View style={s.steps}>\n {[\n { icon: 'πͺͺ', label: 'Document' },\n { icon: 'π€³', label: 'Selfie' },\n { icon: 'ποΈ', label: 'Liveness' },\n ].map((item) => (\n <View key={item.label} style={s.step}>\n <View style={s.stepIcon}>\n <Text style={s.stepEmoji}>{item.icon}</Text>\n </View>\n <Text style={s.stepLabel}>{item.label}</Text>\n </View>\n ))}\n </View>\n\n <Text style={s.title}>{locale.intro_title}</Text>\n <Text style={s.body}>{locale.intro_body}</Text>\n\n <TouchableOpacity style={s.btn} onPress={onStart} activeOpacity={0.85}>\n <Text style={s.btnText}>{locale.intro_cta}</Text>\n </TouchableOpacity>\n </View>\n )\n}\n\nconst styles = (t: ResolvedTheme) =>\n StyleSheet.create({\n container: { padding: 24 },\n steps: {\n flexDirection: 'row',\n justifyContent: 'center',\n gap: 20,\n marginBottom: 28,\n },\n step: { alignItems: 'center', gap: 8 },\n stepIcon: {\n width: 56,\n height: 56,\n borderRadius: 14,\n backgroundColor: t.card,\n borderWidth: 1,\n borderColor: t.border,\n alignItems: 'center',\n justifyContent: 'center',\n },\n stepEmoji: { fontSize: 24 },\n stepLabel: { fontSize: 12, color: t.subtext },\n title: {\n fontSize: 22,\n fontWeight: '700',\n color: t.text,\n marginBottom: 10,\n },\n body: {\n fontSize: 14,\n color: t.subtext,\n lineHeight: 21,\n marginBottom: 28,\n },\n btn: {\n backgroundColor: t.accent,\n borderRadius: t.radius,\n paddingVertical: 14,\n alignItems: 'center',\n },\n btnText: { color: '#fff', fontSize: 15, fontWeight: '600' },\n })\n","import { useRef, useCallback } from 'react'\nimport {\n useCameraDevice,\n useCameraPermission,\n type Camera,\n} from 'react-native-vision-camera'\n\nexport type CameraFacing = 'front' | 'back'\n\nexport interface CaptureResult {\n uri: string\n width: number\n height: number\n}\n\nexport interface VideoResult {\n uri: string\n duration: number\n}\n\nexport function useCamera(facing: CameraFacing = 'back') {\n const cameraRef = useRef<Camera>(null)\n const device = useCameraDevice(facing)\n const { hasPermission } = useCameraPermission()\n\n const capturePhoto = useCallback(async (): Promise<CaptureResult | null> => {\n if (!cameraRef.current) return null\n try {\n const photo = await cameraRef.current.takePhoto({\n flash: 'off',\n enableShutterSound: false,\n })\n return {\n uri: `file://${photo.path}`,\n width: photo.width,\n height: photo.height,\n }\n } catch {\n return null\n }\n }, [])\n\n const startRecording = useCallback(\n (\n onFinished: (video: VideoResult) => void,\n onError: (err: unknown) => void\n ) => {\n if (!cameraRef.current) return\n cameraRef.current.startRecording({\n flash: 'off',\n onRecordingFinished: (video) => {\n onFinished({ uri: `file://${video.path}`, duration: video.duration })\n },\n onRecordingError: onError,\n })\n },\n []\n )\n\n const stopRecording = useCallback(async () => {\n if (!cameraRef.current) return\n await cameraRef.current.stopRecording()\n }, [])\n\n return {\n cameraRef,\n device,\n hasPermission,\n capturePhoto,\n startRecording,\n stopRecording,\n }\n}\n","import React from 'react'\nimport {\n View,\n Text,\n TouchableOpacity,\n Image,\n StyleSheet,\n ActivityIndicator,\n} from 'react-native'\nimport { Camera } from 'react-native-vision-camera'\nimport { useCamera } from '../hooks/useCamera'\nimport type { ResolvedTheme } from '../theme'\nimport type { VerifyLocale } from '../types'\n\ninterface Props {\n theme: ResolvedTheme\n locale: VerifyLocale\n onCapture: (uri: string) => void\n}\n\nexport function DocumentStep({ theme, locale, onCapture }: Props) {\n const { cameraRef, device, capturePhoto } = useCamera('back')\n const [preview, setPreview] = React.useState<string | null>(null)\n const [capturing, setCapturing] = React.useState(false)\n const s = styles(theme)\n\n const handleCapture = async () => {\n setCapturing(true)\n const result = await capturePhoto()\n setCapturing(false)\n if (result) setPreview(result.uri)\n }\n\n const handleConfirm = () => {\n if (preview) onCapture(preview)\n }\n\n if (!device) {\n return (\n <View style={s.container}>\n <ActivityIndicator color={theme.accent} />\n </View>\n )\n }\n\n return (\n <View style={s.container}>\n <Text style={s.title}>{locale.doc_title}</Text>\n <Text style={s.subtitle}>{locale.doc_instruction}</Text>\n\n {preview ? (\n <>\n <Image source={{ uri: preview }} style={s.preview} resizeMode=\"cover\" />\n <TouchableOpacity style={s.btnPrimary} onPress={handleConfirm} activeOpacity={0.85}>\n <Text style={s.btnText}>{locale.doc_next_btn}</Text>\n </TouchableOpacity>\n <TouchableOpacity style={s.btnSecondary} onPress={() => setPreview(null)} activeOpacity={0.75}>\n <Text style={s.btnSecondaryText}>{locale.doc_retake_btn}</Text>\n </TouchableOpacity>\n </>\n ) : (\n <>\n <View style={s.viewport}>\n <Camera\n ref={cameraRef}\n style={StyleSheet.absoluteFill}\n device={device}\n isActive={true}\n photo={true}\n />\n {/* Document frame guide */}\n <View style={s.frameGuide} pointerEvents=\"none\" />\n </View>\n <TouchableOpacity\n style={[s.btnPrimary, capturing && s.btnDisabled]}\n onPress={handleCapture}\n disabled={capturing}\n activeOpacity={0.85}\n >\n {capturing\n ? <ActivityIndicator color=\"#fff\" />\n : <Text style={s.btnText}>{locale.doc_capture_btn}</Text>\n }\n </TouchableOpacity>\n </>\n )}\n </View>\n )\n}\n\nconst styles = (t: ResolvedTheme) =>\n StyleSheet.create({\n container: { padding: 24 },\n title: { fontSize: 20, fontWeight: '700', color: t.text, marginBottom: 8 },\n subtitle: { fontSize: 14, color: t.subtext, lineHeight: 20, marginBottom: 16 },\n viewport: {\n width: '100%',\n aspectRatio: 4 / 3,\n borderRadius: t.radius,\n overflow: 'hidden',\n backgroundColor: '#000',\n marginBottom: 16,\n position: 'relative',\n },\n frameGuide: {\n position: 'absolute',\n top: '8%',\n left: '5%',\n right: '5%',\n bottom: '8%',\n borderWidth: 2,\n borderColor: 'rgba(255,255,255,0.7)',\n borderRadius: 8,\n },\n preview: {\n width: '100%',\n aspectRatio: 4 / 3,\n borderRadius: t.radius,\n marginBottom: 16,\n borderWidth: 1,\n borderColor: t.border,\n },\n btnPrimary: {\n backgroundColor: t.accent,\n borderRadius: t.radius,\n paddingVertical: 14,\n alignItems: 'center',\n marginBottom: 10,\n },\n btnSecondary: {\n backgroundColor: t.card,\n borderRadius: t.radius,\n paddingVertical: 14,\n alignItems: 'center',\n borderWidth: 1,\n borderColor: t.border,\n },\n btnDisabled: { opacity: 0.6 },\n btnText: { color: '#fff', fontSize: 15, fontWeight: '600' },\n btnSecondaryText: { color: t.text, fontSize: 15, fontWeight: '600' },\n })\n","import React from 'react'\nimport {\n View,\n Text,\n TouchableOpacity,\n Image,\n StyleSheet,\n ActivityIndicator,\n} from 'react-native'\nimport { Camera } from 'react-native-vision-camera'\nimport { useCamera } from '../hooks/useCamera'\nimport type { ResolvedTheme } from '../theme'\nimport type { VerifyLocale } from '../types'\n\ninterface Props {\n theme: ResolvedTheme\n locale: VerifyLocale\n onCapture: (uri: string) => void\n onBack: () => void\n}\n\nexport function SelfieStep({ theme, locale, onCapture, onBack }: Props) {\n const { cameraRef, device, capturePhoto } = useCamera('front')\n const [preview, setPreview] = React.useState<string | null>(null)\n const [capturing, setCapturing] = React.useState(false)\n const s = styles(theme)\n\n const handleCapture = async () => {\n setCapturing(true)\n const result = await capturePhoto()\n setCapturing(false)\n if (result) setPreview(result.uri)\n }\n\n if (!device) return <ActivityIndicator color={theme.accent} style={{ margin: 40 }} />\n\n return (\n <View style={s.container}>\n <Text style={s.title}>{locale.selfie_title}</Text>\n <Text style={s.subtitle}>{locale.selfie_instruction}</Text>\n\n {preview ? (\n <>\n <Image source={{ uri: preview }} style={s.preview} resizeMode=\"cover\" />\n <TouchableOpacity style={s.btnPrimary} onPress={() => onCapture(preview)} activeOpacity={0.85}>\n <Text style={s.btnText}>{locale.selfie_next_btn}</Text>\n </TouchableOpacity>\n <TouchableOpacity style={s.btnSecondary} onPress={() => setPreview(null)} activeOpacity={0.75}>\n <Text style={s.btnSecondaryText}>{locale.selfie_retake_btn}</Text>\n </TouchableOpacity>\n </>\n ) : (\n <>\n <View style={s.viewport}>\n <Camera\n ref={cameraRef}\n style={StyleSheet.absoluteFill}\n device={device}\n isActive={true}\n photo={true}\n />\n {/* Oval face guide */}\n <View style={s.ovalGuide} pointerEvents=\"none\" />\n </View>\n <TouchableOpacity\n style={[s.btnPrimary, capturing && s.btnDisabled]}\n onPress={handleCapture}\n disabled={capturing}\n activeOpacity={0.85}\n >\n {capturing\n ? <ActivityIndicator color=\"#fff\" />\n : <Text style={s.btnText}>{locale.selfie_capture_btn}</Text>\n }\n </TouchableOpacity>\n <TouchableOpacity style={s.btnSecondary} onPress={onBack} activeOpacity={0.75}>\n <Text style={s.btnSecondaryText}>{locale.doc_retake_btn}</Text>\n </TouchableOpacity>\n </>\n )}\n </View>\n )\n}\n\nconst styles = (t: ResolvedTheme) =>\n StyleSheet.create({\n container: { padding: 24 },\n title: { fontSize: 20, fontWeight: '700', color: t.text, marginBottom: 8 },\n subtitle: { fontSize: 14, color: t.subtext, lineHeight: 20, marginBottom: 16 },\n viewport: {\n width: '100%',\n aspectRatio: 3 / 4,\n borderRadius: t.radius,\n overflow: 'hidden',\n backgroundColor: '#000',\n marginBottom: 16,\n position: 'relative',\n alignSelf: 'center',\n maxWidth: 280,\n },\n ovalGuide: {\n position: 'absolute',\n top: '8%',\n left: '12%',\n right: '12%',\n bottom: '8%',\n borderWidth: 2,\n borderColor: 'rgba(255,255,255,0.7)',\n borderRadius: 999,\n },\n preview: {\n width: 240,\n height: 320,\n borderRadius: t.radius,\n marginBottom: 16,\n alignSelf: 'center',\n borderWidth: 1,\n borderColor: t.border,\n },\n btnPrimary: {\n backgroundColor: t.accent,\n borderRadius: t.radius,\n paddingVertical: 14,\n alignItems: 'center',\n marginBottom: 10,\n },\n btnSecondary: {\n backgroundColor: t.card,\n borderRadius: t.radius,\n paddingVertical: 14,\n alignItems: 'center',\n borderWidth: 1,\n borderColor: t.border,\n },\n btnDisabled: { opacity: 0.6 },\n btnText: { color: '#fff', fontSize: 15, fontWeight: '600' },\n btnSecondaryText: { color: t.text, fontSize: 15, fontWeight: '600' },\n })\n","import React, { useState, useEffect, useRef } from 'react'\nimport {\n View,\n Text,\n TouchableOpacity,\n StyleSheet,\n ActivityIndicator,\n Animated,\n} from 'react-native'\nimport { Camera } from 'react-native-vision-camera'\nimport { useCamera } from '../hooks/useCamera'\nimport type { ResolvedTheme } from '../theme'\nimport type { VerifyLocale } from '../types'\n\ninterface Props {\n theme: ResolvedTheme\n locale: VerifyLocale\n duration: number // ms\n onCapture: (uri: string) => void\n onBack: () => void\n}\n\nexport function LivenessStep({ theme, locale, duration, onCapture, onBack }: Props) {\n const { cameraRef, device, startRecording, stopRecording } = useCamera('front')\n const [recording, setRecording] = useState(false)\n const [countdown, setCountdown] = useState(Math.ceil(duration / 1000))\n const timerRef = useRef<ReturnType<typeof setInterval> | null>(null)\n const pulseAnim = useRef(new Animated.Value(1)).current\n const s = styles(theme)\n\n // Pulse animation for recording indicator\n useEffect(() => {\n if (recording) {\n Animated.loop(\n Animated.sequence([\n Animated.timing(pulseAnim, { toValue: 0.3, duration: 600, useNativeDriver: true }),\n Animated.timing(pulseAnim, { toValue: 1, duration: 600, useNativeDriver: true }),\n ])\n ).start()\n } else {\n pulseAnim.setValue(1)\n }\n }, [recording, pulseAnim])\n\n const handleStart = () => {\n if (!cameraRef.current) return\n setRecording(true)\n setCountdown(Math.ceil(duration / 1000))\n\n startRecording(\n (video) => {\n setRecording(false)\n onCapture(video.uri)\n },\n () => setRecording(false)\n )\n\n // Countdown tick\n let remaining = duration / 1000\n timerRef.current = setInterval(() => {\n remaining -= 0.1\n setCountdown(Math.max(0, Math.ceil(remaining)))\n if (remaining <= 0) {\n if (timerRef.current) clearInterval(timerRef.current)\n stopRecording()\n }\n }, 100)\n }\n\n useEffect(() => {\n return () => {\n if (timerRef.current) clearInterval(timerRef.current)\n }\n }, [])\n\n if (!device) return <ActivityIndicator color={theme.accent} style={{ margin: 40 }} />\n\n return (\n <View style={s.container}>\n <Text style={s.title}>{locale.liveness_title}</Text>\n <Text style={s.subtitle}>\n {recording ? locale.liveness_recording : locale.liveness_instruction}\n </Text>\n\n <View style={s.viewport}>\n <Camera\n ref={cameraRef}\n style={StyleSheet.absoluteFill}\n device={device}\n isActive={true}\n video={true}\n audio={true}\n />\n <View style={s.ovalGuide} pointerEvents=\"none\" />\n\n {recording && (\n <>\n <View style={s.recBadge}>\n <Animated.View style={[s.recDot, { opacity: pulseAnim }]} />\n <Text style={s.recText}>REC</Text>\n </View>\n <View style={s.countdownBadge}>\n <Text style={s.countdownText}>{countdown}</Text>\n </View>\n </>\n )}\n </View>\n\n {!recording && (\n <>\n <TouchableOpacity style={s.btnPrimary} onPress={handleStart} activeOpacity={0.85}>\n <Text style={s.btnText}>{locale.liveness_start_btn}</Text>\n </TouchableOpacity>\n <TouchableOpacity style={s.btnSecondary} onPress={onBack} activeOpacity={0.75}>\n <Text style={s.btnSecondaryText}>{locale.selfie_retake_btn}</Text>\n </TouchableOpacity>\n </>\n )}\n </View>\n )\n}\n\nconst styles = (t: ResolvedTheme) =>\n StyleSheet.create({\n container: { padding: 24 },\n title: { fontSize: 20, fontWeight: '700', color: t.text, marginBottom: 8 },\n subtitle: { fontSize: 14, color: t.subtext, lineHeight: 20, marginBottom: 16 },\n viewport: {\n width: '100%',\n aspectRatio: 3 / 4,\n borderRadius: t.radius,\n overflow: 'hidden',\n backgroundColor: '#000',\n marginBottom: 16,\n alignSelf: 'center',\n maxWidth: 280,\n position: 'relative',\n },\n ovalGuide: {\n position: 'absolute',\n top: '8%',\n left: '12%',\n right: '12%',\n bottom: '8%',\n borderWidth: 2,\n borderColor: 'rgba(255,255,255,0.7)',\n borderRadius: 999,\n },\n recBadge: {\n position: 'absolute',\n top: 10,\n left: 10,\n flexDirection: 'row',\n alignItems: 'center',\n backgroundColor: 'rgba(220,38,38,0.85)',\n borderRadius: 999,\n paddingHorizontal: 10,\n paddingVertical: 4,\n gap: 6,\n },\n recDot: {\n width: 8,\n height: 8,\n borderRadius: 4,\n backgroundColor: '#fff',\n },\n recText: { color: '#fff', fontSize: 12, fontWeight: '700' },\n countdownBadge: {\n position: 'absolute',\n bottom: 12,\n alignSelf: 'center',\n width: 44,\n height: 44,\n borderRadius: 22,\n backgroundColor: 'rgba(0,0,0,0.5)',\n alignItems: 'center',\n justifyContent: 'center',\n },\n countdownText: { color: '#fff', fontSize: 18, fontWeight: '700' },\n btnPrimary: {\n backgroundColor: t.accent,\n borderRadius: t.radius,\n paddingVertical: 14,\n alignItems: 'center',\n marginBottom: 10,\n },\n btnSecondary: {\n backgroundColor: t.card,\n borderRadius: t.radius,\n paddingVertical: 14,\n alignItems: 'center',\n borderWidth: 1,\n borderColor: t.border,\n },\n btnText: { color: '#fff', fontSize: 15, fontWeight: '600' },\n btnSecondaryText: { color: t.text, fontSize: 15, fontWeight: '600' },\n })\n","import React, { useEffect, useRef } from 'react'\nimport { View, Text, StyleSheet, Animated } from 'react-native'\nimport type { ResolvedTheme } from '../theme'\nimport type { VerifyLocale } from '../types'\n\ninterface Props {\n theme: ResolvedTheme\n locale: VerifyLocale\n}\n\nexport function ProcessingStep({ theme, locale }: Props) {\n const spinAnim = useRef(new Animated.Value(0)).current\n const s = styles(theme)\n\n useEffect(() => {\n Animated.loop(\n Animated.timing(spinAnim, {\n toValue: 1,\n duration: 800,\n useNativeDriver: true,\n })\n ).start()\n }, [spinAnim])\n\n const spin = spinAnim.interpolate({\n inputRange: [0, 1],\n outputRange: ['0deg', '360deg'],\n })\n\n return (\n <View style={s.container}>\n <Animated.View style={[s.spinner, { transform: [{ rotate: spin }] }]} />\n <Text style={s.title}>{locale.processing_title}</Text>\n <Text style={s.subtitle}>{locale.processing_subtitle}</Text>\n </View>\n )\n}\n\nconst styles = (t: ResolvedTheme) =>\n StyleSheet.create({\n container: {\n padding: 48,\n alignItems: 'center',\n gap: 16,\n },\n spinner: {\n width: 52,\n height: 52,\n borderRadius: 26,\n borderWidth: 4,\n borderColor: t.border,\n borderTopColor: t.accent,\n marginBottom: 8,\n },\n title: {\n fontSize: 18,\n fontWeight: '700',\n color: t.text,\n textAlign: 'center',\n },\n subtitle: {\n fontSize: 14,\n color: t.subtext,\n textAlign: 'center',\n },\n })\n","import React from 'react'\nimport { View, Text, TouchableOpacity, StyleSheet } from 'react-native'\nimport type { ResolvedTheme } from '../theme'\nimport type { VerifyLocale, VerifyResult, VerifyVerdict } from '../types'\n\ninterface Props {\n theme: ResolvedTheme\n locale: VerifyLocale\n result: VerifyResult | null\n error: string | null\n onRetry: () => void\n}\n\nconst ICONS: Record<VerifyVerdict, string> = {\n pass: 'β
',\n fail: 'β',\n review: 'β³',\n}\n\nconst ICON_BG: Record<VerifyVerdict, string> = {\n pass: '#d1fae5',\n fail: '#fee2e2',\n review: '#fef3c7',\n}\n\nexport function ResultStep({ theme, locale, result, error, onRetry }: Props) {\n const s = styles(theme)\n\n if (!result) {\n return (\n <View style={s.container}>\n <View style={[s.iconWrap, { backgroundColor: '#fee2e2' }]}>\n <Text style={s.icon}>β</Text>\n </View>\n <Text style={s.title}>{locale.result_fail_title}</Text>\n <Text style={s.body}>{error ?? locale.result_fail_body}</Text>\n <TouchableOpacity style={s.btn} onPress={onRetry} activeOpacity={0.85}>\n <Text style={s.btnText}>{locale.result_retry_btn}</Text>\n </TouchableOpacity>\n </View>\n )\n }\n\n const titles: Record<VerifyVerdict, string> = {\n pass: locale.result_pass_title,\n fail: locale.result_fail_title,\n review: locale.result_review_title,\n }\n const bodies: Record<VerifyVerdict, string> = {\n pass: locale.result_pass_body,\n fail: locale.result_fail_body,\n review: locale.result_review_body,\n }\n\n return (\n <View style={s.container}>\n <View style={[s.iconWrap, { backgroundColor: ICON_BG[result.verdict] }]}>\n <Text style={s.icon}>{ICONS[result.verdict]}</Text>\n </View>\n <Text style={s.title}>{titles[result.verdict]}</Text>\n <Text style={s.body}>{bodies[result.verdict]}</Text>\n {result.verdict === 'fail' && (\n <TouchableOpacity style={s.btn} onPress={onRetry} activeOpacity={0.85}>\n <Text style={s.btnText}>{locale.result_retry_btn}</Text>\n </TouchableOpacity>\n )}\n </View>\n )\n}\n\nconst styles = (t: ResolvedTheme) =>\n StyleSheet.create({\n container: {\n padding: 40,\n alignItems: 'center',\n gap: 12,\n },\n iconWrap: {\n width: 76,\n height: 76,\n borderRadius: 38,\n alignItems: 'center',\n justifyContent: 'center',\n marginBottom: 8,\n },\n icon: { fontSize: 34 },\n title: {\n fontSize: 20,\n fontWeight: '700',\n color: t.text,\n textAlign: 'center',\n },\n body: {\n fontSize: 14,\n color: t.subtext,\n textAlign: 'center',\n lineHeight: 21,\n },\n btn: {\n marginTop: 8,\n backgroundColor: t.accent,\n borderRadius: t.radius,\n paddingVertical: 14,\n paddingHorizontal: 32,\n alignItems: 'center',\n },\n btnText: { color: '#fff', fontSize: 15, fontWeight: '600' },\n })\n","/**\n * <KernaqVerify /> β drop-in identity verification modal for React Native.\n *\n * Usage:\n * import { KernaqVerify } from '@kernaq/verify-react-native'\n *\n * <KernaqVerify\n * visible={showVerify}\n * apiKey=\"k_test_...\"\n * country=\"KEN\"\n * reference={userId}\n * onComplete={(result) => console.log(result.verdict)}\n * onCancel={() => setShowVerify(false)}\n * />\n */\nimport React, { useState, useCallback, useMemo } from 'react'\nimport {\n Modal,\n View,\n Text,\n TouchableOpacity,\n ScrollView,\n StyleSheet,\n SafeAreaView,\n Platform,\n} from 'react-native'\nimport { DEFAULT_LOCALE } from './locale'\nimport { resolveTheme } from './theme'\nimport { usePermissions } from './hooks/usePermissions'\nimport { IntroStep } from './steps/IntroStep'\nimport { DocumentStep } from './steps/DocumentStep'\nimport { SelfieStep } from './steps/SelfieStep'\nimport { LivenessStep } from './steps/LivenessStep'\nimport { ProcessingStep } from './steps/ProcessingStep'\nimport { ResultStep } from './steps/ResultStep'\nimport type { VerifyConfig, VerifyStep, VerifyResult, VerifyLocale } from './types'\n\ninterface Props extends VerifyConfig {\n visible: boolean\n}\n\ntype CaptureState = {\n documentUri?: string\n selfieUri?: string\n videoUri?: string\n}\n\nconst STEP_INDEX: Record<VerifyStep, number> = {\n intro: -1,\n document: 0,\n selfie: 1,\n liveness: 2,\n processing: 3,\n result: 3,\n}\n\nexport function KernaqVerify({\n visible,\n apiKey,\n backendUrl,\n country = 'KEN',\n reference,\n sandbox = false,\n livenessDuration = 3000,\n documentTypes = ['national_id', 'passport'],\n theme: themeProp,\n locale: localeProp,\n onCancel,\n onComplete,\n onError,\n}: Props) {\n const [step, setStep] = useState<VerifyStep>('intro')\n const [capture, setCapture] = useState<CaptureState>({})\n const [result, setResult] = useState<VerifyResult | null>(null)\n const [error, setError] = useState<string | null>(null)\n\n const theme = useMemo(() => resolveTheme(themeProp), [themeProp])\n const locale: VerifyLocale = useMemo(\n () => ({ ...DEFAULT_LOCALE, ...localeProp }),\n [localeProp]\n )\n const { requestPermissions } = usePermissions()\n const s = styles(theme)\n\n const reset = useCallback(() => {\n setStep('intro')\n setCapture({})\n setResult(null)\n setError(null)\n }, [])\n\n const goto = useCallback(async (next: VerifyStep) => {\n if (next === 'document' || next === 'selfie' || next === 'liveness') {\n const granted = await requestPermissions()\n if (!granted) {\n setError(locale.error_camera_denied)\n return\n }\n }\n setStep(next)\n if (next === 'processing') {\n submit()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [capture, locale])\n\n const submit = useCallback(async () => {\n const { documentUri, selfieUri, videoUri } = capture\n if (!documentUri || !selfieUri) {\n setError('Missing captures β please restart.')\n setStep('result')\n return\n }\n\n const base = (backendUrl ?? 'https://api.identity.kernaq.com/v1').replace(/\\/$/, '')\n const form = new FormData()\n\n form.append('document', {\n uri: documentUri,\n name: 'document.jpg',\n type: 'image/jpeg',\n } as unknown as Blob)\n\n form.append('selfie', {\n uri: selfieUri,\n name: 'selfie.jpg',\n type: 'image/jpeg',\n } as unknown as Blob)\n\n if (videoUri) {\n form.append('video', {\n uri: videoUri,\n name: 'liveness.mp4',\n type: 'video/mp4',\n } as unknown as Blob)\n }\n\n form.append('document_type', documentTypes[0] ?? 'national_id')\n form.append('country', country)\n form.append('reference', reference ?? `kq_${Date.now()}`)\n if (sandbox) form.append('sandbox', 'true')\n\n const headers: Record<string, string> = {\n 'Content-Type': 'multipart/form-data',\n }\n if (apiKey) headers['X-API-Key'] = apiKey\n\n try {\n const res = await fetch(`${base}/verify`, {\n method: 'POST',\n headers,\n body: form,\n })\n const body = (await res.json()) as Record<string, unknown>\n if (!res.ok) throw new Error((body['message'] as string) ?? `HTTP ${res.status}`)\n\n const r: VerifyResult = {\n verificationId: body['verification_id'] as string,\n reference: body['reference'] as string,\n verdict: body['verdict'] as 'pass' | 'fail' | 'review',\n score: (body['score'] as number) ?? 0,\n faceMatch: (body['face_match'] as boolean) ?? false,\n isLive: (body['is_live'] as boolean) ?? false,\n documentFields: body['document_fields'] as Record<string, string> | undefined,\n }\n setResult(r)\n setStep('result')\n onComplete?.(r)\n } catch (err) {\n const msg = (err as Error).message\n setError(`${locale.error_network} ${msg}`)\n setStep('result')\n onError?.({ code: 'network_error', message: msg })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [capture])\n\n const handleCancel = () => {\n reset()\n onCancel?.()\n }\n\n const progressSteps: VerifyStep[] = ['document', 'selfie', 'liveness', 'processing']\n const currentIdx = STEP_INDEX[step]\n\n return (\n <Modal\n visible={visible}\n animationType=\"slide\"\n presentationStyle=\"pageSheet\"\n onRequestClose={handleCancel}\n >\n <SafeAreaView style={[s.safeArea, { backgroundColor: theme.bg }]}>\n {/* Header */}\n <View style={s.header}>\n <Text style={s.logo}>Kernaq</Text>\n {step !== 'processing' && (\n <TouchableOpacity onPress={handleCancel} style={s.closeBtn} hitSlop={{ top: 8, bottom: 8, left: 8, right: 8 }}>\n <Text style={s.closeText}>β</Text>\n </TouchableOpacity>\n )}\n </View>\n\n {/* Progress bar */}\n {currentIdx >= 0 && (\n <View style={s.progress}>\n {progressSteps.map((_, i) => (\n <View\n key={i}\n style={[\n s.progressDot,\n i < currentIdx && { backgroundColor: theme.accent, opacity: 0.4 },\n i === currentIdx && { backgroundColor: theme.accent },\n ]}\n />\n ))}\n </View>\n )}\n\n {/* Body */}\n <ScrollView\n style={s.scroll}\n contentContainerStyle={s.scrollContent}\n keyboardShouldPersistTaps=\"handled\"\n bounces={false}\n >\n {step === 'intro' && (\n <IntroStep\n theme={theme}\n locale={locale}\n onStart={() => goto('document')}\n />\n )}\n {step === 'document' && (\n <DocumentStep\n theme={theme}\n locale={locale}\n onCapture={(uri) => {\n setCapture((c) => ({ ...c, documentUri: uri }))\n goto('selfie')\n }}\n />\n )}\n {step === 'selfie' && (\n <SelfieStep\n theme={theme}\n locale={locale}\n onCapture={(uri) => {\n setCapture((c) => ({ ...c, selfieUri: uri }))\n goto('liveness')\n }}\n onBack={() => setStep('document')}\n />\n )}\n {step === 'liveness' && (\n <LivenessStep\n theme={theme}\n locale={locale}\n duration={livenessDuration}\n onCapture={(uri) => {\n setCapture((c) => ({ ...c, videoUri: uri }))\n goto('processing')\n }}\n onBack={() => setStep('selfie')}\n />\n )}\n {step === 'processing' && (\n <ProcessingStep theme={theme} locale={locale} />\n )}\n {step === 'result' && (\n <ResultStep\n theme={theme}\n locale={locale}\n result={result}\n error={error}\n onRetry={() => {\n reset()\n setStep('intro')\n }}\n />\n )}\n </ScrollView>\n </SafeAreaView>\n </Modal>\n )\n}\n\nconst styles = (t: ReturnType<typeof resolveTheme>) =>\n StyleSheet.create({\n safeArea: {\n flex: 1,\n },\n header: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingHorizontal: 20,\n paddingTop: Platform.OS === 'android' ? 16 : 8,\n paddingBottom: 8,\n },\n logo: {\n fontSize: 14,\n fontWeight: '700',\n color: t.accent,\n letterSpacing: 1.2,\n textTransform: 'uppercase',\n },\n closeBtn: {\n padding: 4,\n },\n closeText: {\n fontSize: 18,\n color: t.subtext,\n },\n progress: {\n flexDirection: 'row',\n gap: 6,\n paddingHorizontal: 20,\n paddingBottom: 8,\n },\n progressDot: {\n flex: 1,\n height: 3,\n borderRadius: 999,\n backgroundColor: t.border,\n },\n scroll: { flex: 1 },\n scrollContent: { flexGrow: 1 },\n })\n"],"names":["DEFAULT_LOCALE","intro_title","intro_body","intro_cta","doc_title","doc_instruction","doc_capture_btn","doc_retake_btn","doc_next_btn","selfie_title","selfie_instruction","selfie_capture_btn","selfie_retake_btn","selfie_next_btn","liveness_title","liveness_instruction","liveness_start_btn","liveness_recording","processing_title","processing_subtitle","result_pass_title","result_pass_body","result_fail_title","result_fail_body","result_review_title","result_review_body","result_retry_btn","error_camera_denied","error_quality","error_network","resolveTheme","theme","dark","mode","accent","accentColor","bg","backgroundColor","text","textColor","subtext","subtextColor","border","borderColor","card","cardColor","radius","borderRadius","usePermissions","status","setStatus","useState","cameraPermission","Platform","OS","PERMISSIONS","IOS","CAMERA","ANDROID","micPermission","MICROPHONE","RECORD_AUDIO","requestPermissions","useCallback","camResult","check","RESULTS","GRANTED","request","BLOCKED","Alert","alert","style","onPress","Linking","openSettings","result","IntroStep","locale","onStart","s","styles","View","container","steps","icon","label","map","item","key","step","stepIcon","Text","stepEmoji","stepLabel","title","body","TouchableOpacity","btn","activeOpacity","btnText","t","StyleSheet","create","padding","flexDirection","justifyContent","gap","marginBottom","alignItems","width","height","borderWidth","fontSize","color","fontWeight","lineHeight","paddingVertical","useCamera","facing","cameraRef","useRef","device","useCameraDevice","hasPermission","useCameraPermission","capturePhoto","current","photo","takePhoto","flash","enableShutterSound","uri","path","startRecording","onFinished","onError","onRecordingFinished","video","duration","onRecordingError","stopRecording","DocumentStep","onCapture","preview","setPreview","React","capturing","setCapturing","handleCapture","handleConfirm","ActivityIndicator","subtitle","Image","source","resizeMode","btnPrimary","btnSecondary","btnSecondaryText","viewport","Camera","ref","absoluteFill","isActive","frameGuide","pointerEvents","btnDisabled","disabled","aspectRatio","overflow","position","top","left","right","bottom","opacity","SelfieStep","onBack","margin","ovalGuide","alignSelf","maxWidth","LivenessStep","recording","setRecording","countdown","setCountdown","Math","ceil","timerRef","pulseAnim","Animated","Value","useEffect","loop","sequence","timing","toValue","useNativeDriver","start","setValue","handleStart","remaining","setInterval","max","clearInterval","audio","recBadge","recDot","recText","countdownBadge","countdownText","paddingHorizontal","ProcessingStep","spinAnim","spin","interpolate","inputRange","outputRange","spinner","transform","rotate","borderTopColor","textAlign","ICONS","pass","fail","review","ICON_BG","ResultStep","error","onRetry","iconWrap","titles","bodies","verdict","marginTop","STEP_INDEX","intro","document","selfie","liveness","processing","KernaqVerify","visible","apiKey","backendUrl","country","reference","sandbox","livenessDuration","documentTypes","themeProp","localeProp","onCancel","onComplete","setStep","capture","setCapture","setResult","setError","useMemo","reset","goto","next","granted","submit","documentUri","selfieUri","videoUri","base","replace","form","FormData","append","name","type","Date","now","headers","res","fetch","method","json","ok","Error","r","verificationId","score","faceMatch","isLive","documentFields","err","msg","message","code","handleCancel","progressSteps","currentIdx","Modal","animationType","presentationStyle","onRequestClose","SafeAreaView","safeArea","header","logo","closeBtn","hitSlop","closeText","progress","_","i","progressDot","ScrollView","scroll","contentContainerStyle","scrollContent","keyboardShouldPersistTaps","bounces","c","flex","paddingTop","paddingBottom","letterSpacing","textTransform","flexGrow"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/locale.ts","../src/theme.ts","../src/hooks/usePermissions.ts","../src/steps/IntroStep.tsx","../src/hooks/useCamera.ts","../src/quality.ts","../src/steps/DocumentStep.tsx","../src/steps/SelfieStep.tsx","../src/steps/LivenessStep.tsx","../src/steps/ProcessingStep.tsx","../src/steps/ResultStep.tsx","../src/KernaqVerify.tsx"],"sourcesContent":["import type { VerifyLocale } from './types'\n\nexport const DEFAULT_LOCALE: VerifyLocale = {\n intro_title: 'Verify your identity',\n intro_body: 'This takes about 90 seconds. You\\'ll need your ID document and a clear view of your face.',\n intro_cta: 'Get started',\n\n doc_front_title: 'Document β front',\n doc_front_instruction: 'Hold the front of your document flat inside the frame. Ensure all four corners are visible and there is no glare.',\n doc_back_title: 'Document β back',\n doc_back_instruction: 'Flip your document over and hold the back inside the frame.',\n doc_capture_btn: 'Capture',\n doc_retake_btn: 'Retake',\n\n selfie_title: 'Selfie',\n selfie_instruction: 'Centre your face inside the oval. Look directly at the camera.',\n\n liveness_title: 'Liveness check',\n liveness_ready: 'Follow the instructions as they appear.',\n liveness_task_prefix: 'Please',\n liveness_complete: 'Hold stillβ¦',\n\n processing_title: 'Verifyingβ¦',\n\n result_pass_title: 'Identity verified',\n result_pass_body: 'Your verification was successful.',\n result_fail_title: 'Verification failed',\n result_fail_body: 'We could not verify your identity. Please try again with better lighting.',\n result_review_title: 'Under review',\n result_review_body: 'Your submission is being manually reviewed. This usually takes a few minutes.',\n\n error_camera_denied: 'Camera access denied. Allow camera permissions and try again.',\n error_blur: 'Image is too blurry β hold steady and ensure good lighting.',\n error_quality: 'Image quality too low. Try better lighting or a steadier hand.',\n error_network: 'Network error. Check your connection and try again.',\n}\n","import type { VerifyTheme } from './types'\n\nexport interface ResolvedTheme {\n accent: string\n accentInv: string\n bg: string\n surface: string\n surface2: string\n text: string\n subtext: string\n border: string\n errorBg: string\n errorText: string\n radius: number\n}\n\nexport function resolveTheme(theme?: VerifyTheme): ResolvedTheme {\n const dark = theme?.mode === 'dark'\n return {\n accent: theme?.accentColor ?? (dark ? '#e5e7eb' : '#111827'),\n accentInv: dark ? '#111827' : '#ffffff',\n bg: theme?.backgroundColor ?? (dark ? '#0f0f0f' : '#ffffff'),\n surface: theme?.cardColor ?? (dark ? '#1a1a1a' : '#f7f7f7'),\n surface2: dark ? '#242424' : '#efefef',\n text: theme?.textColor ?? (dark ? '#f5f5f5' : '#0f0f0f'),\n subtext: theme?.subtextColor ?? (dark ? '#888888' : '#6b7280'),\n border: theme?.borderColor ?? (dark ? '#2a2a2a' : '#e5e5e5'),\n errorBg: dark ? 'rgba(239,68,68,0.1)' : '#fef2f2',\n errorText: dark ? '#f87171' : '#b91c1c',\n radius: theme?.borderRadius ?? 14,\n }\n}\n","import { useState, useCallback } from 'react'\nimport { Platform, Linking, Alert } from 'react-native'\nimport {\n check,\n request,\n PERMISSIONS,\n RESULTS,\n type Permission,\n} from 'react-native-permissions'\n\nexport type PermissionStatus = 'unknown' | 'granted' | 'denied' | 'blocked'\n\nexport function usePermissions() {\n const [status, setStatus] = useState<PermissionStatus>('unknown')\n\n const cameraPermission: Permission =\n Platform.OS === 'ios'\n ? PERMISSIONS.IOS.CAMERA\n : PERMISSIONS.ANDROID.CAMERA\n\n const micPermission: Permission =\n Platform.OS === 'ios'\n ? PERMISSIONS.IOS.MICROPHONE\n : PERMISSIONS.ANDROID.RECORD_AUDIO\n\n const requestPermissions = useCallback(async (): Promise<boolean> => {\n try {\n const camResult = await check(cameraPermission)\n\n if (camResult === RESULTS.GRANTED) {\n // Also request mic for liveness video\n await request(micPermission)\n setStatus('granted')\n return true\n }\n\n if (camResult === RESULTS.BLOCKED) {\n setStatus('blocked')\n Alert.alert(\n 'Camera Permission Required',\n 'Camera access is blocked. Please enable it in your device settings.',\n [\n { text: 'Cancel', style: 'cancel' },\n { text: 'Open Settings', onPress: () => Linking.openSettings() },\n ]\n )\n return false\n }\n\n // Request camera\n const result = await request(cameraPermission)\n if (result === RESULTS.GRANTED) {\n await request(micPermission)\n setStatus('granted')\n return true\n }\n\n setStatus('denied')\n return false\n } catch {\n setStatus('denied')\n return false\n }\n }, [cameraPermission, micPermission])\n\n return { status, requestPermissions }\n}\n","import React from 'react'\nimport { View, Text, TouchableOpacity, StyleSheet } from 'react-native'\nimport type { ResolvedTheme } from '../theme'\nimport type { VerifyLocale } from '../types'\n\ninterface Props {\n theme: ResolvedTheme\n locale: VerifyLocale\n onStart: () => void\n}\n\nexport function IntroStep({ theme, locale, onStart }: Props) {\n const s = styles(theme)\n return (\n <View style={s.container}>\n <View style={s.textBlock}>\n <Text style={s.title}>{locale.intro_title}</Text>\n <Text style={s.subtitle}>{locale.intro_body}</Text>\n </View>\n\n {/* Privacy hint */}\n <View style={s.hint}>\n <Text style={s.hintIcon}>🔒</Text>\n <Text style={s.hintText}>\n Your data is discarded immediately after processing. Nothing is stored.\n </Text>\n </View>\n\n <TouchableOpacity style={s.btn} onPress={onStart} activeOpacity={0.85}>\n <Text style={s.btnText}>{locale.intro_cta}</Text>\n <Text style={s.btnArrow}> β</Text>\n </TouchableOpacity>\n </View>\n )\n}\n\nconst styles = (t: ResolvedTheme) =>\n StyleSheet.create({\n container: {\n flex: 1,\n padding: 28,\n justifyContent: 'center',\n gap: 16,\n },\n textBlock: {\n alignItems: 'center',\n gap: 8,\n marginBottom: 4,\n },\n title: {\n fontSize: 22,\n fontWeight: '700',\n color: t.text,\n textAlign: 'center',\n letterSpacing: -0.4,\n },\n subtitle: {\n fontSize: 14,\n color: t.subtext,\n lineHeight: 21,\n textAlign: 'center',\n },\n hint: {\n flexDirection: 'row',\n alignItems: 'flex-start',\n gap: 8,\n padding: 12,\n backgroundColor: t.surface,\n borderRadius: t.radius - 4,\n borderWidth: 1,\n borderColor: t.border,\n },\n hintIcon: {\n fontSize: 12,\n marginTop: 1,\n },\n hintText: {\n flex: 1,\n fontSize: 12,\n color: t.subtext,\n lineHeight: 17,\n },\n btn: {\n backgroundColor: t.accent,\n borderRadius: t.radius - 4,\n paddingVertical: 13,\n paddingHorizontal: 20,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n },\n btnText: {\n color: t.accentInv,\n fontSize: 14,\n fontWeight: '600',\n letterSpacing: -0.2,\n },\n btnArrow: {\n color: t.accentInv,\n fontSize: 14,\n fontWeight: '600',\n },\n })\n","import { useRef, useCallback } from 'react'\nimport {\n useCameraDevice,\n useCameraPermission,\n type Camera,\n} from 'react-native-vision-camera'\n\nexport type CameraFacing = 'front' | 'back'\n\nexport interface CaptureResult {\n uri: string\n width: number\n height: number\n}\n\nexport interface VideoResult {\n uri: string\n duration: number\n}\n\nexport function useCamera(facing: CameraFacing = 'back') {\n const cameraRef = useRef<Camera>(null)\n const device = useCameraDevice(facing)\n const { hasPermission } = useCameraPermission()\n\n const capturePhoto = useCallback(async (): Promise<CaptureResult | null> => {\n if (!cameraRef.current) return null\n try {\n const photo = await cameraRef.current.takePhoto({\n flash: 'off',\n enableShutterSound: false,\n })\n return {\n uri: `file://${photo.path}`,\n width: photo.width,\n height: photo.height,\n }\n } catch {\n return null\n }\n }, [])\n\n const startRecording = useCallback(\n (\n onFinished: (video: VideoResult) => void,\n onError: (err: unknown) => void\n ) => {\n if (!cameraRef.current) return\n cameraRef.current.startRecording({\n flash: 'off',\n onRecordingFinished: (video) => {\n onFinished({ uri: `file://${video.path}`, duration: video.duration })\n },\n onRecordingError: onError,\n })\n },\n []\n )\n\n const stopRecording = useCallback(async () => {\n if (!cameraRef.current) return\n await cameraRef.current.stopRecording()\n }, [])\n\n return {\n cameraRef,\n device,\n hasPermission,\n capturePhoto,\n startRecording,\n stopRecording,\n }\n}\n","/**\n * quality.ts β Native port of @kernaq/capture-web analyseImage logic.\n *\n * React Native has no OffscreenCanvas or createImageBitmap, so we decode\n * the JPEG manually from its base64 representation to extract a luminance\n * sample, then run the same Laplacian variance + brightness + fill-ratio\n * checks the web SDK uses.\n *\n * This is intentionally dependency-free β no expo-image-manipulator,\n * no worklets, no native modules beyond what vision-camera already provides.\n *\n * The JPEG sampling approach:\n * 1. takeSnapshot({ quality: 20 }) β tiny file (~5-15KB)\n * 2. fetch as ArrayBuffer β raw bytes\n * 3. Skip JPEG header bytes, sample raw DCT-domain luminance bytes\n * as a brightness proxy (not exact, but sufficient for dark/overexposed detection)\n * 4. For blur: compute variance of luminance differences between adjacent samples\n *\n * Limitations vs web SDK:\n * - Fill ratio check is approximated via luminance variance spread\n * - Glasses glare heuristic is the same eye-band brightness check\n * - Blur detection is less precise but calibrated to the same thresholds\n */\n\nexport interface QualityReport {\n passed: boolean\n blurScore: number // 0β100, higher = sharper\n brightness: number // 0β255 mean luminance\n fillRatio: number // 0β1 approximation\n failures: QualityFailure[]\n}\n\nexport type QualityFailure = 'too_blurry' | 'too_dark' | 'too_bright' | 'too_small'\n\nexport interface QualityConfig {\n minBlurScore?: number // default 25\n minBrightness?: number // default 40\n maxBrightness?: number // default 220\n minFillRatio?: number // default 0.08\n}\n\nconst DEFAULTS: Required<QualityConfig> = {\n minBlurScore: 25,\n minBrightness: 40,\n maxBrightness: 220,\n minFillRatio: 0.08,\n}\n\n/**\n * Analyse an image from a file URI.\n * Reads the raw bytes, samples luminance, returns a quality report.\n */\nexport async function analyseImageUri(\n uri: string,\n config: QualityConfig = {}\n): Promise<QualityReport> {\n const cfg = { ...DEFAULTS, ...config }\n\n try {\n // Fetch the image as raw bytes\n const resp = await fetch(uri)\n const buffer = await resp.arrayBuffer()\n const bytes = new Uint8Array(buffer)\n\n // Sample luminance values from the raw bytes\n // JPEG compressed bytes in the entropy-coded segment correlate with luminance\n // We skip the JPEG header (first ~400-600 bytes typically) and sample every Nth byte\n const start = Math.min(600, Math.floor(bytes.length * 0.1))\n const end = Math.floor(bytes.length * 0.9)\n const step = Math.max(1, Math.floor((end - start) / 2048))\n const samples: number[] = []\n\n for (let i = start; i < end; i += step) {\n samples.push(bytes[i]!)\n }\n\n if (samples.length === 0) {\n return { passed: false, blurScore: 0, brightness: 0, fillRatio: 0, failures: ['too_blurry'] }\n }\n\n const brightness = computeMean(samples)\n const blurScore = computeBlurScore(samples)\n const fillRatio = computeFillProxy(samples)\n\n const failures: QualityFailure[] = []\n const cfg2 = cfg\n if (blurScore < cfg2.minBlurScore) failures.push('too_blurry')\n if (brightness < cfg2.minBrightness) failures.push('too_dark')\n if (brightness > cfg2.maxBrightness) failures.push('too_bright')\n if (fillRatio < cfg2.minFillRatio) failures.push('too_small')\n\n return { passed: failures.length === 0, blurScore, brightness, fillRatio, failures }\n } catch {\n // If we can't read the file, assume it's a transient error β don't block\n return { passed: true, blurScore: 50, brightness: 128, fillRatio: 0.5, failures: [] }\n }\n}\n\n// ββ Helpers βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ\n\nfunction computeMean(samples: number[]): number {\n return samples.reduce((a, b) => a + b, 0) / samples.length\n}\n\n/**\n * Laplacian variance proxy: variance of first-difference between adjacent samples.\n * Normalised to 0β100. Higher = more high-frequency content = sharper.\n */\nfunction computeBlurScore(samples: number[]): number {\n if (samples.length < 2) return 0\n let sumSq = 0\n let sum = 0\n for (let i = 1; i < samples.length; i++) {\n const d = (samples[i]! - samples[i - 1]!)\n sum += d\n sumSq += d * d\n }\n const n = samples.length - 1\n const mean = sum / n\n const variance = sumSq / n - mean * mean\n // Empirically ~0 = solid colour (blurry), ~800+ = sharp photo\n return Math.min(100, Math.round((variance / 800) * 100))\n}\n\n/**\n * Fill ratio proxy: fraction of samples that differ significantly from the mean.\n * Analogous to the foreground pixel fraction in the web SDK.\n */\nfunction computeFillProxy(samples: number[]): number {\n const mean = computeMean(samples)\n const threshold = 30\n const foreground = samples.filter(s => Math.abs(s - mean) > threshold).length\n return foreground / samples.length\n}\n\n/**\n * Selfie-specific quality check with glasses/glare heuristic.\n * Takes snapshots from two regions: full frame and top-40% (eye area).\n *\n * Returns a guidance message (empty string = all good) and a passing flag.\n */\nexport async function analyseSelfieFrame(\n uri: string,\n config: QualityConfig = {}\n): Promise<{ passing: boolean; message: string }> {\n const cfg = { ...DEFAULTS, ...config }\n\n try {\n const resp = await fetch(uri)\n const buffer = await resp.arrayBuffer()\n const bytes = new Uint8Array(buffer)\n\n const total = bytes.length\n const start = Math.min(600, Math.floor(total * 0.1))\n const step = Math.max(1, Math.floor((total - start) / 1024))\n\n // Full-frame samples\n const full: number[] = []\n for (let i = start; i < total; i += step) full.push(bytes[i]!)\n\n // Top-40% samples (eye region proxy β first 40% of the data after header)\n const eyeEnd = start + Math.floor((total - start) * 0.4)\n const eyeSamples: number[] = []\n for (let i = start; i < eyeEnd; i += step) eyeSamples.push(bytes[i]!)\n\n const brightness = computeMean(full)\n const blurScore = computeBlurScore(full)\n const eyeMean = computeMean(eyeSamples)\n\n // Priority-ordered checks β mirrors web component exactly\n if (brightness < cfg.minBrightness) return { passing: false, message: 'Move to better lighting' }\n if (brightness > cfg.maxBrightness) return { passing: false, message: 'Too bright β avoid direct light' }\n if (eyeMean > 210) return { passing: false, message: 'Remove glasses' }\n if (blurScore < cfg.minBlurScore) return { passing: false, message: 'Hold still' }\n\n return { passing: true, message: 'Hold still\\u2026' }\n } catch {\n return { passing: false, message: 'Hold still' }\n }\n}\n","/**\n * DocumentStep β captures front then back of document.\n * Corner bracket guides, hint strip, no extra back navigation.\n */\nimport React, { useState } from 'react'\nimport {\n View,\n Text,\n TouchableOpacity,\n Image,\n StyleSheet,\n ActivityIndicator,\n} from 'react-native'\nimport { Camera } from 'react-native-vision-camera'\nimport { useCamera } from '../hooks/useCamera'\nimport type { ResolvedTheme } from '../theme'\nimport type { VerifyLocale } from '../types'\n\nimport { analyseImageUri } from '../quality'\n\ninterface Props {\n theme: ResolvedTheme\n locale: VerifyLocale\n side: 'front' | 'back'\n /** URI from the front capture, shown as thumbnail on back step */\n frontUri?: string\n onCapture: (uri: string) => void\n /** Only shown on back step β lets user retake the front */\n onRetakeFront?: () => void\n}\n\nexport function DocumentStep({ theme, locale, side, frontUri, onCapture, onRetakeFront }: Props) {\n const { cameraRef, device, capturePhoto } = useCamera('back')\n const [capturing, setCapturing] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const s = styles(theme)\n\n const handleCapture = async () => {\n if (!cameraRef.current) return\n setCapturing(true)\n setError(null)\n const result = await capturePhoto()\n if (!result) {\n setError(locale.error_blur)\n setCapturing(false)\n return\n }\n // Run same quality checks as web SDK\n const report = await analyseImageUri(result.uri, {\n minBlurScore: 20,\n minBrightness: 30,\n maxBrightness: 230,\n minFillRatio: 0.05,\n })\n setCapturing(false)\n if (!report.passed) {\n const msgs: Record<string, string> = {\n too_blurry: locale.error_blur,\n too_dark: 'Move to better lighting',\n too_bright: 'Reduce brightness or move away from light',\n too_small: 'Move closer to the document',\n }\n setError(msgs[report.failures[0]!] ?? locale.error_quality)\n return\n }\n onCapture(result.uri)\n }\n\n const title = side === 'front' ? locale.doc_front_title : locale.doc_back_title\n const instruction = side === 'front' ? locale.doc_front_instruction : locale.doc_back_instruction\n const hint = side === 'front'\n ? 'Hold the camera parallel to the document. Move closer if text is hard to read.'\n : 'Flip the document over and keep it flat inside the frame.'\n\n if (!device) {\n return (\n <View style={[s.container, { justifyContent: 'center', alignItems: 'center' }]}>\n <ActivityIndicator color={theme.accent} />\n </View>\n )\n }\n\n return (\n <View style={s.container}>\n {/* Heading */}\n <View style={s.heading}>\n <Text style={s.title}>{title}</Text>\n <Text style={s.subtitle}>{instruction}</Text>\n </View>\n\n {/* Error */}\n {error ? (\n <View style={s.errorBanner}>\n <Text style={s.errorText}>{error}</Text>\n </View>\n ) : null}\n\n {/* Front thumbnail on back step */}\n {side === 'back' && frontUri ? (\n <View style={s.thumbRow}>\n <Image source={{ uri: frontUri }} style={s.thumb} resizeMode=\"cover\" />\n <Text style={s.thumbLabel}>✓ Front captured</Text>\n </View>\n ) : null}\n\n {/* Camera */}\n <View style={s.viewport}>\n <Camera\n ref={cameraRef}\n style={StyleSheet.absoluteFill}\n device={device}\n isActive\n photo\n />\n {/* Corner bracket guides */}\n <View style={s.frameGuide} pointerEvents=\"none\">\n <View style={[s.corner, s.tl]} />\n <View style={[s.corner, s.tr]} />\n <View style={[s.corner, s.bl]} />\n <View style={[s.corner, s.br]} />\n </View>\n {/* Dim overlay outside frame */}\n <View style={s.dimOverlay} pointerEvents=\"none\" />\n </View>\n\n {/* Hint */}\n <View style={s.hint}>\n <Text style={s.hintText}>{hint}</Text>\n </View>\n\n {/* Capture button */}\n <TouchableOpacity\n style={[s.btn, capturing && s.btnDisabled]}\n onPress={handleCapture}\n disabled={capturing}\n activeOpacity={0.85}\n >\n {capturing\n ? <ActivityIndicator color={theme.accentInv} />\n : <Text style={s.btnText}>{locale.doc_capture_btn}</Text>\n }\n </TouchableOpacity>\n\n {/* Retake front (back step only) */}\n {side === 'back' && onRetakeFront ? (\n <TouchableOpacity style={s.btnGhost} onPress={onRetakeFront} activeOpacity={0.75}>\n <Text style={s.btnGhostText}>{locale.doc_retake_btn} front</Text>\n </TouchableOpacity>\n ) : null}\n </View>\n )\n}\n\nconst CORNER_SIZE = 20\nconst CORNER_W = 2\n\nconst styles = (t: ResolvedTheme) =>\n StyleSheet.create({\n container: {\n flex: 1,\n padding: 20,\n gap: 12,\n },\n heading: { gap: 4, alignItems: 'center' },\n title: {\n fontSize: 20,\n fontWeight: '700',\n color: t.text,\n textAlign: 'center',\n letterSpacing: -0.3,\n },\n subtitle: {\n fontSize: 13,\n color: t.subtext,\n lineHeight: 19,\n textAlign: 'center',\n },\n errorBanner: {\n backgroundColor: t.errorBg,\n borderRadius: 8,\n padding: 10,\n },\n errorText: {\n fontSize: 12.5,\n color: t.errorText,\n lineHeight: 17,\n },\n thumbRow: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 10,\n padding: 8,\n backgroundColor: t.surface,\n borderRadius: 8,\n borderWidth: 1,\n borderColor: t.border,\n },\n thumb: {\n width: 48,\n height: 32,\n borderRadius: 5,\n borderWidth: 1,\n borderColor: t.border,\n },\n thumbLabel: {\n fontSize: 12,\n color: t.subtext,\n },\n viewport: {\n flex: 1,\n borderRadius: t.radius - 4,\n overflow: 'hidden',\n backgroundColor: '#000',\n position: 'relative',\n },\n frameGuide: {\n position: 'absolute',\n top: '8%',\n left: '6%',\n right: '6%',\n bottom: '8%',\n },\n corner: {\n position: 'absolute',\n width: CORNER_SIZE,\n height: CORNER_SIZE,\n borderColor: 'rgba(255,255,255,0.9)',\n },\n tl: { top: 0, left: 0, borderTopWidth: CORNER_W, borderLeftWidth: CORNER_W, borderTopLeftRadius: 3 },\n tr: { top: 0, right: 0, borderTopWidth: CORNER_W, borderRightWidth: CORNER_W, borderTopRightRadius: 3 },\n bl: { bottom: 0, left: 0, borderBottomWidth: CORNER_W, borderLeftWidth: CORNER_W, borderBottomLeftRadius: 3 },\n br: { bottom: 0, right: 0, borderBottomWidth: CORNER_W, borderRightWidth: CORNER_W, borderBottomRightRadius: 3 },\n dimOverlay: {\n position: 'absolute',\n top: 0, left: 0, right: 0, bottom: 0,\n backgroundColor: 'transparent',\n },\n hint: {\n flexDirection: 'row',\n gap: 7,\n padding: 9,\n backgroundColor: t.surface,\n borderRadius: 8,\n borderWidth: 1,\n borderColor: t.border,\n },\n hintText: {\n flex: 1,\n fontSize: 12,\n color: t.subtext,\n lineHeight: 16,\n },\n btn: {\n backgroundColor: t.accent,\n borderRadius: t.radius - 4,\n paddingVertical: 12,\n alignItems: 'center',\n },\n btnDisabled: { opacity: 0.5 },\n btnText: {\n color: t.accentInv,\n fontSize: 14,\n fontWeight: '600',\n },\n btnGhost: {\n borderRadius: t.radius - 4,\n paddingVertical: 11,\n alignItems: 'center',\n borderWidth: 1,\n borderColor: t.border,\n backgroundColor: 'transparent',\n },\n btnGhostText: {\n color: t.subtext,\n fontSize: 13.5,\n fontWeight: '500',\n },\n })\n","/**\n * SelfieStep β auto-captures when face quality passes.\n *\n * Every 120ms:\n * 1. takeSnapshot (quality 20) β tiny file, fast\n * 2. analyseSelfieFrame() β brightness, blur, glare checks (mirrors web SDK)\n * 3. Shows live guidance pill with the first failing check message\n * 4. After HOLD_FRAMES consecutive passing frames (~1.5s) β takePhoto (full quality)\n */\nimport React, { useEffect, useRef, useState } from 'react'\nimport {\n View,\n Text,\n StyleSheet,\n ActivityIndicator,\n Animated,\n} from 'react-native'\nimport { Camera, useCameraDevice } from 'react-native-vision-camera'\nimport { analyseSelfieFrame } from '../quality'\nimport type { ResolvedTheme } from '../theme'\nimport type { VerifyLocale } from '../types'\n\nconst HOLD_FRAMES = 12 // ~1.5s at 120ms per frame\n\ninterface Props {\n theme: ResolvedTheme\n locale: VerifyLocale\n onCapture: (uri: string) => void\n}\n\nexport function SelfieStep({ theme, locale, onCapture }: Props) {\n const cameraRef = useRef<Camera>(null)\n const device = useCameraDevice('front')\n const [pill, setPill] = useState('Align your face')\n const [pillOk, setPillOk] = useState(false)\n const [capturing, setCapturing] = useState(false)\n const readyFrames = useRef(0)\n const timerRef = useRef<ReturnType<typeof setInterval> | null>(null)\n const borderAnim = useRef(new Animated.Value(0)).current // 0 = white, 1 = green\n const s = styles(theme)\n\n // Animate oval border colour\n useEffect(() => {\n Animated.timing(borderAnim, {\n toValue: pillOk ? 1 : 0,\n duration: 200,\n useNativeDriver: false,\n }).start()\n }, [pillOk, borderAnim])\n\n const ovalBorder = borderAnim.interpolate({\n inputRange: [0, 1],\n outputRange: ['rgba(255,255,255,0.75)', '#4ade80'],\n })\n\n useEffect(() => {\n if (!device || capturing) return\n\n timerRef.current = setInterval(async () => {\n if (!cameraRef.current || capturing) return\n try {\n // Fast low-quality snapshot for analysis only\n const snap = await cameraRef.current.takeSnapshot({ quality: 20 })\n const uri = `file://${snap.path}`\n\n const { passing, message } = await analyseSelfieFrame(uri, {\n minBlurScore: 22,\n minBrightness: 40,\n maxBrightness: 220,\n })\n\n setPill(passing ? 'Hold still\\u2026' : message)\n setPillOk(passing)\n\n if (passing) {\n readyFrames.current++\n } else {\n readyFrames.current = 0\n }\n\n if (readyFrames.current >= HOLD_FRAMES) {\n // Stop loop, take full-quality photo\n clearInterval(timerRef.current!)\n timerRef.current = null\n setCapturing(true)\n const full = await cameraRef.current.takePhoto({ qualityPrioritization: 'quality' })\n onCapture(`file://${full.path}`)\n }\n } catch {\n readyFrames.current = 0\n }\n }, 120)\n\n return () => {\n if (timerRef.current) clearInterval(timerRef.current)\n }\n }, [device, capturing, onCapture])\n\n if (!device) return <ActivityIndicator color={theme.accent} style={{ margin: 40 }} />\n\n return (\n <View style={s.container}>\n <View style={s.heading}>\n <Text style={s.title}>{locale.selfie_title}</Text>\n <Text style={s.subtitle}>{locale.selfie_instruction}</Text>\n </View>\n\n <View style={s.viewport}>\n <Camera\n ref={cameraRef}\n style={StyleSheet.absoluteFill}\n device={device}\n isActive={!capturing}\n photo\n />\n\n {/* Oval guide with animated border */}\n <Animated.View\n style={[s.oval, { borderColor: ovalBorder }]}\n pointerEvents=\"none\"\n />\n\n {/* Live guidance pill */}\n <View style={[s.pill, pillOk && s.pillOk]} pointerEvents=\"none\">\n <Text style={s.pillText}>{pill}</Text>\n </View>\n </View>\n\n {capturing && (\n <View style={s.capturingRow}>\n <ActivityIndicator color={theme.accent} size=\"small\" />\n <Text style={s.capturingText}>Capturingβ¦</Text>\n </View>\n )}\n </View>\n )\n}\n\nconst styles = (t: ResolvedTheme) =>\n StyleSheet.create({\n container: {\n flex: 1,\n padding: 20,\n gap: 12,\n },\n heading: { gap: 4, alignItems: 'center' },\n title: {\n fontSize: 20,\n fontWeight: '700',\n color: t.text,\n textAlign: 'center',\n letterSpacing: -0.3,\n },\n subtitle: {\n fontSize: 13,\n color: t.subtext,\n lineHeight: 19,\n textAlign: 'center',\n },\n viewport: {\n flex: 1,\n borderRadius: t.radius - 4,\n overflow: 'hidden',\n backgroundColor: '#000',\n position: 'relative',\n },\n oval: {\n position: 'absolute',\n left: '21%',\n right: '21%',\n top: '6%',\n bottom: '6%',\n borderWidth: 2,\n borderRadius: 999,\n },\n pill: {\n position: 'absolute',\n bottom: 14,\n alignSelf: 'center',\n backgroundColor: 'rgba(0,0,0,0.65)',\n borderRadius: 999,\n paddingHorizontal: 16,\n paddingVertical: 7,\n borderWidth: 1.5,\n borderColor: 'rgba(255,255,255,0.15)',\n },\n pillOk: {\n backgroundColor: 'rgba(22,163,74,0.8)',\n borderColor: 'rgba(134,239,172,0.5)',\n },\n pillText: {\n color: '#fff',\n fontSize: 13,\n fontWeight: '600',\n },\n capturingRow: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 8,\n paddingVertical: 8,\n },\n capturingText: {\n fontSize: 13,\n color: t.subtext,\n },\n })\n","/**\n * LivenessStep β randomised action challenges shown as an overlay on the camera feed.\n * Tasks: blink twice, turn left, turn right, nod, open mouth.\n * Instruction is overlaid at the bottom of the viewport (mirrors web v2).\n */\nimport React, { useState, useEffect, useRef, useMemo } from 'react'\nimport {\n View,\n Text,\n TouchableOpacity,\n StyleSheet,\n ActivityIndicator,\n Animated,\n} from 'react-native'\nimport { Camera, useCameraDevice } from 'react-native-vision-camera'\nimport { useCamera } from '../hooks/useCamera'\nimport type { ResolvedTheme } from '../theme'\nimport type { VerifyLocale, LivenessTask } from '../types'\n\ninterface TaskDef {\n id: LivenessTask\n label: string\n duration: number\n}\n\nconst TASK_POOL: TaskDef[] = [\n { id: 'blink', label: 'Blink twice', duration: 3000 },\n { id: 'turn-left', label: 'Turn your head left', duration: 3000 },\n { id: 'turn-right', label: 'Turn your head right', duration: 3000 },\n { id: 'nod', label: 'Nod your head', duration: 3000 },\n { id: 'open-mouth', label: 'Open your mouth', duration: 3000 },\n]\n\nfunction shuffle<T>(arr: T[]): T[] {\n const a = [...arr]\n for (let i = a.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1))\n ;[a[i], a[j]] = [a[j]!, a[i]!]\n }\n return a\n}\n\ninterface Props {\n theme: ResolvedTheme\n locale: VerifyLocale\n duration: number\n taskCount?: number\n onCapture: (uri: string) => void\n}\n\nexport function LivenessStep({ theme, locale, duration, taskCount = 2, onCapture }: Props) {\n const { cameraRef, startRecording, stopRecording } = useCamera('front')\n const device = useCameraDevice('front')\n\n const tasks = useMemo(() => shuffle(TASK_POOL).slice(0, Math.min(taskCount, TASK_POOL.length)), [taskCount])\n\n const [taskIdx, setTaskIdx] = useState(0)\n const [started, setStarted] = useState(false) // task in progress\n const [taskDone, setTaskDone] = useState(0) // completed tasks count\n const [progress, setProgress] = useState(0) // 0β100 for current task bar\n const [complete, setComplete] = useState(false)\n const [recording, setRecording] = useState(false)\n\n // Keep a ref in sync with taskIdx so setTimeout/setInterval closures always\n // read the latest value and don't stall on a stale snapshot.\n const taskIdxRef = useRef(0)\n const setTaskIdxSynced = (n: number) => {\n taskIdxRef.current = n\n setTaskIdx(n)\n }\n\n const progressTimer = useRef<ReturnType<typeof setInterval> | null>(null)\n const taskTimer = useRef<ReturnType<typeof setTimeout> | null>(null)\n const pulseAnim = useRef(new Animated.Value(1)).current\n\n // Pulse REC dot\n useEffect(() => {\n if (recording) {\n Animated.loop(\n Animated.sequence([\n Animated.timing(pulseAnim, { toValue: 0.2, duration: 600, useNativeDriver: true }),\n Animated.timing(pulseAnim, { toValue: 1, duration: 600, useNativeDriver: true }),\n ])\n ).start()\n } else {\n pulseAnim.stopAnimation()\n pulseAnim.setValue(1)\n }\n }, [recording, pulseAnim])\n\n const startTask = () => {\n if (!recording) {\n startRecording(\n (video: import('../hooks/useCamera').VideoResult) => { onCapture(video.uri) },\n () => {}\n )\n setRecording(true)\n }\n\n const task = tasks[taskIdxRef.current]\n if (!task) return\n setStarted(true)\n setProgress(0)\n\n const start = Date.now()\n progressTimer.current = setInterval(() => {\n const elapsed = Date.now() - start\n const pct = Math.min(100, (elapsed / task.duration) * 100)\n setProgress(pct)\n if (elapsed >= task.duration) {\n clearInterval(progressTimer.current!)\n progressTimer.current = null\n nextTask()\n }\n }, 80)\n }\n\n const nextTask = () => {\n const next = taskIdxRef.current + 1\n setTaskDone((prev: number) => prev + 1)\n if (next >= tasks.length) {\n finishLiveness()\n return\n }\n setTaskIdxSynced(next)\n setStarted(false)\n setProgress(0)\n // Use the ref-based startTask via the timer so it reads the fresh taskIdx\n taskTimer.current = setTimeout(() => startTask(), 500)\n }\n\n const finishLiveness = () => {\n setComplete(true)\n taskTimer.current = setTimeout(() => {\n stopRecording()\n }, 1000)\n }\n\n useEffect(() => {\n return () => {\n if (progressTimer.current) clearInterval(progressTimer.current)\n if (taskTimer.current) clearTimeout(taskTimer.current)\n }\n }, [])\n\n if (!device) return <ActivityIndicator color={theme.accent} style={{ margin: 40 }} />\n\n const currentTask = tasks[taskIdx]\n const s = styles(theme)\n\n return (\n <View style={s.container}>\n <View style={s.heading}>\n <Text style={s.title}>{complete ? locale.liveness_complete : locale.liveness_title}</Text>\n {!complete && <Text style={s.subtitle}>{locale.liveness_ready}</Text>}\n </View>\n\n {/* Task progress dots */}\n {!complete && (\n <View style={s.taskDots}>\n {tasks.map((_: TaskDef, i: number) => (\n <View\n key={i}\n style={[\n s.dot,\n i < taskDone && s.dotDone,\n i === taskIdx && s.dotActive,\n ]}\n />\n ))}\n </View>\n )}\n\n {/* Camera with in-viewport overlay */}\n <View style={s.viewport}>\n <Camera\n ref={cameraRef}\n style={StyleSheet.absoluteFill}\n device={device}\n isActive\n video\n audio={false}\n />\n\n <View style={s.ovalGuide} pointerEvents=\"none\" />\n\n {/* Recording badge */}\n {recording && (\n <View style={s.recBadge}>\n <Animated.View style={[s.recDot, { opacity: pulseAnim }]} />\n <Text style={s.recText}>REC</Text>\n </View>\n )}\n\n {/* Instruction overlay β always visible on video */}\n {currentTask && !complete && (\n <View style={s.overlay}>\n <View style={s.overlayPill}>\n <Text style={s.overlayNum}>{taskIdx + 1}/{tasks.length}</Text>\n <Text style={s.overlayLabel}>{currentTask.label}</Text>\n </View>\n {started && (\n <View style={s.barWrap}>\n <View style={[s.barFill, { width: `${progress}%` }]} />\n </View>\n )}\n </View>\n )}\n\n {complete && (\n <View style={s.overlay}>\n <View style={s.overlayPill}>\n <Text style={s.overlayLabel}>{locale.liveness_complete}</Text>\n </View>\n </View>\n )}\n </View>\n\n {/* Begin button β only shown before first task starts */}\n {!started && !complete && currentTask && taskDone === 0 && (\n <TouchableOpacity style={s.btn} onPress={startTask} activeOpacity={0.85}>\n <Text style={s.btnText}>Begin</Text>\n <Text style={s.btnArrow}> β</Text>\n </TouchableOpacity>\n )}\n </View>\n )\n}\n\nconst styles = (t: ResolvedTheme) =>\n StyleSheet.create({\n container: { flex: 1, padding: 20, gap: 12 },\n heading: { gap: 4, alignItems: 'center' },\n title: {\n fontSize: 20, fontWeight: '700', color: t.text,\n textAlign: 'center', letterSpacing: -0.3,\n },\n subtitle: {\n fontSize: 13, color: t.subtext, lineHeight: 19, textAlign: 'center',\n },\n taskDots: { flexDirection: 'row', gap: 6 },\n dot: {\n flex: 1, height: 2.5, borderRadius: 999, backgroundColor: t.border,\n },\n dotDone: { backgroundColor: t.accent, opacity: 0.35 },\n dotActive: { backgroundColor: t.accent },\n viewport: {\n flex: 1, borderRadius: t.radius - 4, overflow: 'hidden',\n backgroundColor: '#000', position: 'relative',\n },\n ovalGuide: {\n position: 'absolute', left: '21%', right: '21%', top: '6%', bottom: '6%',\n borderWidth: 2, borderColor: 'rgba(255,255,255,0.75)', borderRadius: 999,\n },\n recBadge: {\n position: 'absolute', top: 10, left: 10,\n flexDirection: 'row', alignItems: 'center', gap: 5,\n backgroundColor: 'rgba(0,0,0,0.65)',\n borderWidth: 1, borderColor: 'rgba(239,68,68,0.5)',\n borderRadius: 5, paddingHorizontal: 8, paddingVertical: 4,\n },\n recDot: {\n width: 7, height: 7, borderRadius: 3.5, backgroundColor: '#ef4444',\n },\n recText: { color: '#ef4444', fontSize: 11, fontWeight: '700', letterSpacing: 0.5 },\n overlay: {\n position: 'absolute', bottom: 0, left: 0, right: 0,\n paddingHorizontal: 12, paddingTop: 10, paddingBottom: 12,\n gap: 8,\n backgroundColor: 'transparent',\n // Gradient-like: darker at bottom via background trick\n },\n overlayPill: {\n flexDirection: 'row', alignItems: 'center', gap: 8,\n },\n overlayNum: {\n fontSize: 11, fontWeight: '700', color: 'rgba(255,255,255,0.55)',\n textTransform: 'uppercase', letterSpacing: 0.5,\n },\n overlayLabel: {\n fontSize: 15, fontWeight: '700', color: '#fff',\n },\n barWrap: {\n height: 3, backgroundColor: 'rgba(255,255,255,0.2)',\n borderRadius: 999, overflow: 'hidden',\n },\n barFill: {\n height: '100%', backgroundColor: '#fff', borderRadius: 999,\n },\n btn: {\n backgroundColor: t.accent, borderRadius: t.radius - 4,\n paddingVertical: 12, flexDirection: 'row',\n alignItems: 'center', justifyContent: 'center',\n },\n btnText: { color: t.accentInv, fontSize: 14, fontWeight: '600' },\n btnArrow: { color: t.accentInv, fontSize: 14, fontWeight: '600' },\n })\n","import React from 'react'\nimport { View, Text, ActivityIndicator, StyleSheet } from 'react-native'\nimport type { ResolvedTheme } from '../theme'\nimport type { VerifyLocale } from '../types'\n\ninterface Props {\n theme: ResolvedTheme\n locale: VerifyLocale\n}\n\nexport function ProcessingStep({ theme, locale }: Props) {\n const s = styles(theme)\n return (\n <View style={s.container}>\n <ActivityIndicator color={theme.accent} size=\"large\" />\n <Text style={s.title}>{locale.processing_title}</Text>\n <Text style={s.subtitle}>This usually takes under 10 seconds.</Text>\n </View>\n )\n}\n\nconst styles = (t: ResolvedTheme) =>\n StyleSheet.create({\n container: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n gap: 16,\n padding: 32,\n },\n title: {\n fontSize: 16,\n fontWeight: '700',\n color: t.text,\n textAlign: 'center',\n },\n subtitle: {\n fontSize: 13,\n color: t.subtext,\n textAlign: 'center',\n },\n })\n","/**\n * ResultStep β no emoji, Unicode geometric icons, detail rows matching web v2.\n */\nimport React from 'react'\nimport { View, Text, TouchableOpacity, StyleSheet } from 'react-native'\nimport type { ResolvedTheme } from '../theme'\nimport type { VerifyLocale, VerifyResult, VerifyVerdict } from '../types'\n\ninterface Props {\n theme: ResolvedTheme\n locale: VerifyLocale\n result: VerifyResult | null\n error: string | null\n onRetry: () => void\n}\n\n// Unicode block characters β no emoji, render cleanly on all platforms\nconst ICON: Record<VerifyVerdict, string> = {\n pass: '\\u2714', // β heavy check mark\n fail: '\\u2718', // β heavy ballot X\n review: '\\u29D6', // β§ hourglass\n}\nconst ICON_BG: Record<VerifyVerdict, string> = {\n pass: '#dcfce7',\n fail: '#fee2e2',\n review: '#fef9c3',\n}\nconst ICON_COLOR: Record<VerifyVerdict, string> = {\n pass: '#16a34a',\n fail: '#dc2626',\n review: '#ca8a04',\n}\n\nexport function ResultStep({ theme, locale, result, error, onRetry }: Props) {\n const s = styles(theme)\n\n if (!result) {\n return (\n <View style={s.container}>\n <View style={[s.iconBox, { backgroundColor: ICON_BG.fail }]}>\n <Text style={[s.icon, { color: ICON_COLOR.fail }]}>{ICON.fail}</Text>\n </View>\n <Text style={s.title}>{locale.result_fail_title}</Text>\n <Text style={s.body}>{error ?? locale.result_fail_body}</Text>\n <TouchableOpacity style={s.btn} onPress={onRetry} activeOpacity={0.85}>\n <Text style={s.btnText}>Try again</Text>\n </TouchableOpacity>\n </View>\n )\n }\n\n const v = result.verdict\n const titles: Record<VerifyVerdict, string> = {\n pass: locale.result_pass_title,\n fail: locale.result_fail_title,\n review: locale.result_review_title,\n }\n const bodies: Record<VerifyVerdict, string> = {\n pass: locale.result_pass_body,\n fail: locale.result_fail_body,\n review: locale.result_review_body,\n }\n\n const rows: Array<{ label: string; value: string; ok?: boolean; bad?: boolean }> = [\n { label: 'Verdict', value: v.charAt(0).toUpperCase() + v.slice(1), ok: v === 'pass', bad: v === 'fail' },\n { label: 'Risk score', value: String(result.score ?? 'β') },\n { label: 'Face match', value: result.faceMatch ? 'Confirmed' : 'Not confirmed', ok: result.faceMatch, bad: !result.faceMatch },\n { label: 'Liveness', value: result.isLive ? 'Confirmed' : 'Not confirmed', ok: result.isLive, bad: !result.isLive },\n ]\n\n return (\n <View style={s.container}>\n <View style={[s.iconBox, { backgroundColor: ICON_BG[v] }]}>\n <Text style={[s.icon, { color: ICON_COLOR[v] }]}>{ICON[v]}</Text>\n </View>\n <Text style={s.title}>{titles[v]}</Text>\n <Text style={s.body}>{bodies[v]}</Text>\n\n <View style={s.details}>\n {rows.map((row) => (\n <View key={row.label} style={s.row}>\n <Text style={s.rowLabel}>{row.label}</Text>\n <Text style={[\n s.rowVal,\n row.ok && s.rowOk,\n row.bad && s.rowBad,\n ]}>{row.value}</Text>\n </View>\n ))}\n </View>\n\n {v === 'fail' && (\n <TouchableOpacity style={s.btn} onPress={onRetry} activeOpacity={0.85}>\n <Text style={s.btnText}>Try again</Text>\n </TouchableOpacity>\n )}\n </View>\n )\n}\n\nconst styles = (t: ResolvedTheme) =>\n StyleSheet.create({\n container: {\n flex: 1,\n padding: 28,\n alignItems: 'center',\n gap: 14,\n justifyContent: 'center',\n },\n iconBox: {\n width: 52,\n height: 52,\n borderRadius: 14,\n alignItems: 'center',\n justifyContent: 'center',\n marginBottom: 4,\n },\n icon: {\n fontSize: 22,\n fontWeight: '700',\n },\n title: {\n fontSize: 20,\n fontWeight: '700',\n color: t.text,\n textAlign: 'center',\n letterSpacing: -0.3,\n },\n body: {\n fontSize: 13.5,\n color: t.subtext,\n textAlign: 'center',\n lineHeight: 19,\n },\n details: {\n width: '100%',\n gap: 6,\n },\n row: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n paddingVertical: 9,\n paddingHorizontal: 12,\n backgroundColor: t.surface,\n borderRadius: 8,\n },\n rowLabel: {\n fontSize: 12.5,\n color: t.subtext,\n },\n rowVal: {\n fontSize: 12.5,\n fontWeight: '600',\n color: t.text,\n },\n rowOk: { color: '#16a34a' },\n rowBad: { color: '#dc2626' },\n btn: {\n width: '100%',\n backgroundColor: t.accent,\n borderRadius: t.radius - 4,\n paddingVertical: 12,\n alignItems: 'center',\n marginTop: 4,\n },\n btnText: {\n color: t.accentInv,\n fontSize: 14,\n fontWeight: '600',\n },\n })\n","/**\n * <KernaqVerify /> β drop-in identity verification modal for React Native (v2).\n *\n * Matches @kernaq/verify web v2.0.0:\n * - No header / logo\n * - No progress bar\n * - No cancel/close button β user must complete the flow\n * - Front + back document capture\n * - Auto-capture selfie with guidance pill\n * - Randomised liveness tasks with in-viewport overlay\n * - Configurable steps prop\n * - \"Secured by Kernaq\" footer only\n *\n * Usage:\n * <KernaqVerify\n * visible={show}\n * documentType=\"national_id\"\n * country=\"KEN\"\n * reference={userId}\n * steps={['document', 'selfie', 'liveness']}\n * onComplete={(r) => console.log(r.verdict)}\n * />\n */\nimport React, { useState, useCallback, useMemo, useRef } from 'react'\nimport {\n Modal,\n View,\n Text,\n StyleSheet,\n SafeAreaView,\n Platform,\n} from 'react-native'\nimport { DEFAULT_LOCALE } from './locale'\nimport { resolveTheme } from './theme'\nimport { usePermissions } from './hooks/usePermissions'\nimport { IntroStep } from './steps/IntroStep'\nimport { DocumentStep } from './steps/DocumentStep'\nimport { SelfieStep } from './steps/SelfieStep'\nimport { LivenessStep } from './steps/LivenessStep'\nimport { ProcessingStep } from './steps/ProcessingStep'\nimport { ResultStep } from './steps/ResultStep'\nimport type {\n VerifyConfig, VerifyStep, VerifyResult, VerifyLocale, VerifyStepName,\n} from './types'\n\ninterface Props extends VerifyConfig {\n visible: boolean\n}\n\ntype CaptureState = {\n docFrontUri?: string\n docBackUri?: string\n selfieUri?: string\n videoUri?: string\n}\n\nexport function KernaqVerify({\n visible,\n apiKey,\n backendUrl,\n country = 'KEN',\n reference,\n sandbox = false,\n livenessDuration = 3000,\n livenessTaskCount = 2,\n documentType = 'national_id',\n steps: stepsProp,\n theme: themeProp,\n locale: localeProp,\n onComplete,\n onError,\n}: Props) {\n const [step, setStep] = useState<VerifyStep>('intro')\n const [capture, setCapture] = useState<CaptureState>({})\n const [result, setResult] = useState<VerifyResult | null>(null)\n const [error, setError] = useState<string | null>(null)\n\n // Mirror capture in a ref so submit() always reads the latest value even\n // when called from inside a stale closure (e.g. goto β submit chain).\n const captureRef = useRef<CaptureState>({})\n const setCaptureSync = (updater: (prev: CaptureState) => CaptureState) => {\n setCapture((prev: CaptureState) => {\n const next = updater(prev)\n captureRef.current = next\n return next\n })\n }\n\n const theme = useMemo(() => resolveTheme(themeProp), [themeProp])\n const locale: VerifyLocale = useMemo(() => ({ ...DEFAULT_LOCALE, ...localeProp }), [localeProp])\n const { requestPermissions } = usePermissions()\n const s = styles(theme)\n\n // Build the ordered flow from the steps prop\n const flow = useMemo((): VerifyStep[] => {\n const wanted = stepsProp ?? ['document', 'selfie', 'liveness'] as VerifyStepName[]\n const out: VerifyStep[] = []\n if (wanted.includes('document')) { out.push('doc-front'); out.push('doc-back') }\n if (wanted.includes('selfie')) out.push('selfie')\n if (wanted.includes('liveness')) out.push('liveness')\n out.push('processing')\n return out\n }, [stepsProp])\n\n const next = useCallback((current: VerifyStep) => {\n const idx = flow.indexOf(current)\n const nextStep = flow[idx + 1] ?? 'processing'\n goto(nextStep)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [flow])\n\n const goto = useCallback(async (s: VerifyStep) => {\n if (s === 'doc-front' || s === 'doc-back' || s === 'selfie' || s === 'liveness') {\n const granted = await requestPermissions()\n if (!granted) { setError(locale.error_camera_denied); return }\n }\n setStep(s)\n if (s === 'processing') submit()\n // submit is stable (no deps that change); locale/requestPermissions are stable refs\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [locale])\n\n const reset = useCallback(() => {\n setStep('intro')\n captureRef.current = {}\n setCapture({})\n setResult(null)\n setError(null)\n }, [])\n\n const submit = useCallback(async () => {\n const { docFrontUri, docBackUri, selfieUri, videoUri } = captureRef.current\n const steps = stepsProp ?? ['document', 'selfie', 'liveness'] as VerifyStepName[]\n if (steps.includes('document') && !docFrontUri) {\n setError('Document capture is missing β please restart.')\n setStep('result')\n onError?.({ code: 'capture_missing', message: 'Document capture missing' })\n return\n }\n if (steps.includes('selfie') && !selfieUri) {\n setError('Selfie capture is missing β please restart.')\n setStep('result')\n onError?.({ code: 'capture_missing', message: 'Selfie capture missing' })\n return\n }\n\n const base = (backendUrl ?? 'https://api.identity.kernaq.com/v1').replace(/\\/$/, '')\n const endpoint = sandbox ? '/verify/sandbox' : '/verify'\n const form = new FormData()\n\n if (docFrontUri) {\n form.append('doc_front', { uri: docFrontUri, name: 'doc_front.jpg', type: 'image/jpeg' } as any)\n }\n if (docBackUri) {\n form.append('doc_back', { uri: docBackUri, name: 'doc_back.jpg', type: 'image/jpeg' } as any)\n }\n if (selfieUri) {\n form.append('selfie', { uri: selfieUri, name: 'selfie.jpg', type: 'image/jpeg' } as any)\n }\n if (videoUri) {\n form.append('video', { uri: videoUri, name: 'liveness.mp4', type: 'video/mp4' } as any)\n }\n\n form.append('document_type', documentType)\n form.append('country', country)\n form.append('reference', reference ?? `kq_${Date.now()}`)\n // sandbox is handled via URL routing above β no form field needed\n\n // Do NOT set Content-Type manually β RN fetch will set multipart/form-data with\n // the correct boundary automatically. Setting it manually omits the boundary and\n // causes the server to reject the request.\n const headers: Record<string, string> = {}\n if (apiKey) headers['X-API-Key'] = apiKey\n\n try {\n const res = await fetch(`${base}${endpoint}`, { method: 'POST', headers, body: form })\n const body = (await res.json()) as Record<string, unknown>\n if (!res.ok) throw new Error((body['message'] as string) ?? `HTTP ${res.status}`)\n\n const r: VerifyResult = {\n verificationId: body['verification_id'] as string,\n reference: body['reference'] as string,\n verdict: body['verdict'] as 'pass' | 'fail' | 'review',\n score: (body['score'] as number) ?? 0,\n faceMatch: (body['face_match'] as boolean) ?? false,\n isLive: (body['is_live'] as boolean) ?? false,\n documentFields: body['document_fields'] as Record<string, string> | undefined,\n }\n setResult(r)\n setStep('result')\n onComplete?.(r)\n } catch (err) {\n const msg = (err as Error).message\n setError(`${locale.error_network} ${msg}`)\n setResult(null)\n setStep('result')\n onError?.({ code: 'network_error', message: msg })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []) // no deps β always reads from captureRef.current, never from stale closure\n\n return (\n <Modal\n visible={visible}\n animationType=\"slide\"\n presentationStyle=\"pageSheet\"\n onRequestClose={() => {/* intentionally empty β user cannot dismiss */}}\n >\n <SafeAreaView style={[s.safe, { backgroundColor: theme.bg }]}>\n\n {/* ββ Content ββ */}\n <View style={s.body}>\n {step === 'intro' && (\n <IntroStep\n theme={theme}\n locale={locale}\n onStart={() => {\n const first = flow[0]\n if (first) goto(first)\n }}\n />\n )}\n\n {step === 'doc-front' && (\n <DocumentStep\n theme={theme}\n locale={locale}\n side=\"front\"\n onCapture={(uri) => {\n setCaptureSync(c => ({ ...c, docFrontUri: uri }))\n next('doc-front')\n }}\n />\n )}\n\n {step === 'doc-back' && (\n <DocumentStep\n theme={theme}\n locale={locale}\n side=\"back\"\n frontUri={capture.docFrontUri}\n onCapture={(uri) => {\n setCaptureSync(c => ({ ...c, docBackUri: uri }))\n next('doc-back')\n }}\n onRetakeFront={() => {\n setCaptureSync(c => ({ ...c, docFrontUri: undefined }))\n goto('doc-front')\n }}\n />\n )}\n\n {step === 'selfie' && (\n <SelfieStep\n theme={theme}\n locale={locale}\n onCapture={(uri) => {\n setCaptureSync(c => ({ ...c, selfieUri: uri }))\n next('selfie')\n }}\n />\n )}\n\n {step === 'liveness' && (\n <LivenessStep\n theme={theme}\n locale={locale}\n duration={livenessDuration}\n taskCount={livenessTaskCount}\n onCapture={(uri) => {\n setCaptureSync(c => ({ ...c, videoUri: uri }))\n next('liveness')\n }}\n />\n )}\n\n {step === 'processing' && (\n <ProcessingStep theme={theme} locale={locale} />\n )}\n\n {step === 'result' && (\n <ResultStep\n theme={theme}\n locale={locale}\n result={result}\n error={error}\n onRetry={() => { reset(); goto('intro') }}\n />\n )}\n </View>\n\n {/* ββ Footer β Secured by Kernaq ββ */}\n {step !== 'processing' && (\n <View style={s.footer}>\n <Text style={s.footerText}>Secured by </Text>\n <Text style={[s.footerText, { fontWeight: '600', color: theme.text }]}>Kernaq</Text>\n </View>\n )}\n </SafeAreaView>\n </Modal>\n )\n}\n\nconst styles = (t: ReturnType<typeof resolveTheme>) =>\n StyleSheet.create({\n safe: {\n flex: 1,\n },\n body: {\n flex: 1,\n },\n footer: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n paddingVertical: 10,\n paddingBottom: Platform.OS === 'ios' ? 4 : 10,\n borderTopWidth: StyleSheet.hairlineWidth,\n borderTopColor: t.border,\n },\n footerText: {\n fontSize: 11,\n color: t.subtext,\n },\n })\n"],"names":["DEFAULT_LOCALE","intro_title","intro_body","intro_cta","doc_front_title","doc_front_instruction","doc_back_title","doc_back_instruction","doc_capture_btn","doc_retake_btn","selfie_title","selfie_instruction","liveness_title","liveness_ready","liveness_task_prefix","liveness_complete","processing_title","result_pass_title","result_pass_body","result_fail_title","result_fail_body","result_review_title","result_review_body","error_camera_denied","error_blur","error_quality","error_network","resolveTheme","theme","dark","mode","accent","accentColor","accentInv","bg","backgroundColor","surface","cardColor","surface2","text","textColor","subtext","subtextColor","border","borderColor","errorBg","errorText","radius","borderRadius","usePermissions","status","setStatus","useState","cameraPermission","Platform","OS","PERMISSIONS","IOS","CAMERA","ANDROID","micPermission","MICROPHONE","RECORD_AUDIO","requestPermissions","useCallback","camResult","check","RESULTS","GRANTED","request","BLOCKED","Alert","alert","style","onPress","Linking","openSettings","result","IntroStep","locale","onStart","s","styles","View","container","textBlock","Text","title","subtitle","hint","hintIcon","hintText","TouchableOpacity","btn","activeOpacity","btnText","btnArrow","t","StyleSheet","create","flex","padding","justifyContent","gap","alignItems","marginBottom","fontSize","fontWeight","color","textAlign","letterSpacing","lineHeight","flexDirection","borderWidth","marginTop","paddingVertical","paddingHorizontal","useCamera","facing","cameraRef","useRef","device","useCameraDevice","hasPermission","useCameraPermission","capturePhoto","current","photo","takePhoto","flash","enableShutterSound","uri","path","width","height","startRecording","onFinished","onError","onRecordingFinished","video","duration","onRecordingError","stopRecording","DEFAULTS","minBlurScore","minBrightness","maxBrightness","minFillRatio","analyseImageUri","config","cfg","resp","fetch","buffer","arrayBuffer","bytes","Uint8Array","start","Math","min","floor","length","end","step","max","samples","i","push","passed","blurScore","brightness","fillRatio","failures","computeMean","computeBlurScore","computeFillProxy","cfg2","reduce","a","b","sumSq","sum","d","n","mean","variance","round","threshold","foreground","filter","abs","analyseSelfieFrame","total","full","eyeEnd","eyeSamples","eyeMean","passing","message","DocumentStep","side","frontUri","onCapture","onRetakeFront","capturing","setCapturing","error","setError","handleCapture","report","msgs","too_blurry","too_dark","too_bright","too_small","instruction","ActivityIndicator","heading","errorBanner","thumbRow","Image","source","thumb","resizeMode","thumbLabel","viewport","Camera","ref","absoluteFill","isActive","frameGuide","pointerEvents","corner","tl","tr","bl","br","dimOverlay","btnDisabled","disabled","btnGhost","btnGhostText","CORNER_SIZE","CORNER_W","overflow","position","top","left","right","bottom","borderTopWidth","borderLeftWidth","borderTopLeftRadius","borderRightWidth","borderTopRightRadius","borderBottomWidth","borderBottomLeftRadius","borderBottomRightRadius","opacity","HOLD_FRAMES","SelfieStep","pill","setPill","pillOk","setPillOk","readyFrames","timerRef","borderAnim","Animated","Value","useEffect","timing","toValue","useNativeDriver","ovalBorder","interpolate","inputRange","outputRange","setInterval","snap","takeSnapshot","quality","clearInterval","qualityPrioritization","margin","oval","pillText","capturingRow","size","capturingText","alignSelf","TASK_POOL","id","label","shuffle","arr","j","random","LivenessStep","taskCount","tasks","useMemo","slice","taskIdx","setTaskIdx","started","setStarted","taskDone","setTaskDone","progress","setProgress","complete","setComplete","recording","setRecording","taskIdxRef","setTaskIdxSynced","progressTimer","taskTimer","pulseAnim","loop","sequence","stopAnimation","setValue","startTask","task","Date","now","elapsed","pct","nextTask","next","prev","finishLiveness","setTimeout","clearTimeout","currentTask","taskDots","map","_","key","dot","dotDone","dotActive","audio","ovalGuide","recBadge","recDot","recText","overlay","overlayPill","overlayNum","overlayLabel","barWrap","barFill","paddingTop","paddingBottom","textTransform","ProcessingStep","ICON","pass","fail","review","ICON_BG","ICON_COLOR","ResultStep","onRetry","iconBox","icon","body","v","verdict","titles","bodies","rows","value","charAt","toUpperCase","ok","bad","String","score","faceMatch","isLive","details","row","rowLabel","rowVal","rowOk","rowBad","KernaqVerify","visible","apiKey","backendUrl","country","reference","sandbox","livenessDuration","livenessTaskCount","documentType","steps","stepsProp","themeProp","localeProp","onComplete","setStep","capture","setCapture","setResult","captureRef","setCaptureSync","updater","flow","wanted","out","includes","idx","indexOf","nextStep","goto","granted","submit","reset","docFrontUri","docBackUri","selfieUri","videoUri","code","base","replace","endpoint","form","FormData","append","name","type","headers","res","method","json","Error","r","verificationId","documentFields","err","msg","Modal","animationType","presentationStyle","onRequestClose","SafeAreaView","safe","first","c","undefined","footer","footerText","hairlineWidth","borderTopColor"],"mappings":"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"}
|