@kernaq/verify-react-native 1.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.
@@ -0,0 +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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"}