@kernaq/verify-react-native 2.0.1 → 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.esm.js +63 -22
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +63 -22
- package/dist/index.js.map +1 -1
- package/package.json +2 -9
- package/src/KernaqVerify.tsx +43 -16
- package/src/steps/LivenessStep.tsx +15 -8
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.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 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 // Begin recording when first task starts\n startRecording(\n (video) => { onCapture(video.uri) },\n () => {}\n )\n setRecording(true)\n }\n\n const task = tasks[taskIdx]\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 = taskIdx + 1\n setTaskDone(prev => prev + 1)\n if (next >= tasks.length) {\n finishLiveness()\n return\n }\n setTaskIdx(next)\n setStarted(false)\n setProgress(0)\n // Short pause then auto-start next task\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((_, i) => (\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 } 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 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 // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [capture, locale])\n\n const reset = useCallback(() => {\n setStep('intro')\n setCapture({})\n setResult(null)\n setError(null)\n }, [])\n\n const submit = useCallback(async () => {\n const { docFrontUri, docBackUri, selfieUri, videoUri } = capture\n if (!docFrontUri && !selfieUri) {\n // At least one capture needed depending on steps\n }\n\n const base = (backendUrl ?? 'https://api.identity.kernaq.com/v1').replace(/\\/$/, '')\n const form = new FormData()\n\n if (docFrontUri) {\n form.append('document', { uri: docFrontUri, name: 'doc_front.jpg', type: 'image/jpeg' } as any)\n }\n if (docBackUri) {\n form.append('document_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 if (sandbox) form.append('sandbox', 'true')\n\n const headers: Record<string, string> = { 'Content-Type': 'multipart/form-data' }\n if (apiKey) headers['X-API-Key'] = apiKey\n\n try {\n const res = await fetch(`${base}/verify`, { 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 }, [capture])\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 setCapture(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 setCapture(c => ({ ...c, docBackUri: uri }))\n next('doc-back')\n }}\n onRetakeFront={() => {\n setCapture(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 setCapture(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 setCapture(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","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","flow","wanted","out","includes","idx","indexOf","nextStep","goto","granted","submit","reset","docFrontUri","docBackUri","selfieUri","videoUri","base","replace","form","FormData","append","name","type","headers","res","method","json","Error","r","verificationId","documentFields","err","msg","code","Modal","animationType","presentationStyle","onRequestClose","SafeAreaView","safe","first","c","undefined","footer","footerText","hairlineWidth","borderTopColor"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kernaq/verify-react-native",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.2",
|
|
4
4
|
"description": "Drop-in KYC verification UI for React Native — document capture, selfie, and liveness in one component.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.esm.js",
|
|
@@ -18,14 +18,7 @@
|
|
|
18
18
|
"build": "rollup -c rollup.config.mjs",
|
|
19
19
|
"lint": "tsc --noEmit"
|
|
20
20
|
},
|
|
21
|
-
"keywords": [
|
|
22
|
-
"react-native",
|
|
23
|
-
"kyc",
|
|
24
|
-
"identity",
|
|
25
|
-
"verification",
|
|
26
|
-
"liveness",
|
|
27
|
-
"kernaq"
|
|
28
|
-
],
|
|
21
|
+
"keywords": ["react-native", "kyc", "identity", "verification", "liveness", "kernaq"],
|
|
29
22
|
"author": "Kernaq",
|
|
30
23
|
"license": "SEE LICENSE IN LICENSE",
|
|
31
24
|
"publishConfig": {
|