{"version":3,"sources":["../src/VerificationSDK.ts","../src/components/kycModal.tsx","../src/components/MobileKycPage.tsx","../src/components/WebQRRedirect.tsx","../src/components/MobileKycRouter.tsx","../src/components/KycInitForm.tsx","../src/components/TermsScreen.tsx","../src/components/KycFlow.tsx","../src/components/StandaloneKycPage.tsx","../src/sdk.ts"],"names":["_a","_b","_c","_d","useState","useRef","useEffect","toast","drawMPLandmarks","jsx","jsxs","effectiveServerKey","mobileUrl"],"mappings":"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","file":"index.mjs","sourcesContent":["import axios from \"axios\";\r\nconst SDK_LOG_PREFIX = \"[VerificationSDK]\";\r\nfunction sdkLog(...args: any[]) {\r\n  try { console.log(SDK_LOG_PREFIX, ...args); } catch {}\r\n}\r\nexport interface InitOptions {\r\n  reference?: string; // Unique reference from org\r\n  email?: string;\r\n  callback_url?: string; // Where server posts results\r\n  redirect_url?: string; // Where user is redirected after KYC\r\n  device_type?: \"WEB\" | \"MOBILE\"; // Optional\r\n  // Optional default UI configuration for SDK-driven components\r\n  ui?: {\r\n    classNames?: Record<string, string>;\r\n    styles?: Record<string, any>;\r\n  };\r\n}\r\n\r\nexport interface InitResponseData {\r\n  session_id: string;\r\n  device_type: \"WEB\" | \"MOBILE\";\r\n  next_step: string;\r\n  resume: boolean;\r\n  verification_url: string;\r\n  qrcode_url?: string;\r\n  callback_url: string;\r\n  redirect_url: string;\r\n  expired_at: string;\r\n}\r\n\r\nexport interface InitResponse {\r\n  status: string; // e.g., \"success\" | \"error\"\r\n  message: string;\r\n  data: InitResponseData;\r\n}\r\n\r\n\r\n// Default API base URL (can be overridden via constructor)\r\n// const DEFAULT_API_BASE_URL = \"https://f4bc2a63837d.ngrok-free.app\";\r\nconst DEFAULT_API_BASE_URL = \"https://api.probusiness.astraprotocol.com\";\r\n\r\n// Utility to detect device type\r\nfunction detectDeviceType(): \"WEB\" | \"MOBILE\" {\r\n  if (typeof navigator !== \"undefined\") {\r\n    const ua = navigator.userAgent || navigator.vendor || (window as any).opera || \"\";\r\n    if (/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(ua)) {\r\n      return \"MOBILE\";\r\n    }\r\n  }\r\n  return \"WEB\";\r\n}\r\n\r\nexport default class VerificationSDK {\r\n  public serverKey: string;\r\n  public sessionId: string | null = null;\r\n  public deviceType: \"WEB\" | \"MOBILE\" = detectDeviceType();\r\n  public qrCodeUrl: string | null = null;\r\n  public uiConfig: { classNames?: Record<string, string>; styles?: Record<string, any> } = {};\r\n  public static defaultUi: { classNames?: Record<string, string>; styles?: Record<string, any> } | null = null;\r\n  public apiBaseUrl: string = DEFAULT_API_BASE_URL;\r\n\r\n  constructor({ serverKey, apiBaseUrl }: { serverKey: string; apiBaseUrl?: string }) {\r\n    this.serverKey = serverKey;\r\n    if (apiBaseUrl) this.apiBaseUrl = apiBaseUrl;\r\n    sdkLog(\"constructor\", { hasServerKey: Boolean(serverKey), apiBaseUrl: this.apiBaseUrl });\r\n  }\r\n\r\n  /**\r\n   * Expose server key so web can embed it in QR for mobile handoff\r\n   */\r\n  getServerKey(): string {\r\n    sdkLog(\"getServerKey\");\r\n    return this.serverKey;\r\n  }\r\n\r\n  /**\r\n   * Set session ID for existing sessions (used for mobile continuation)\r\n   */\r\n  setSessionId(sessionId: string): void {\r\n    sdkLog(\"setSessionId\", { sessionId });\r\n    this.sessionId = sessionId;\r\n  }\r\n\r\n  /**\r\n   * Clear the active session and related cached artifacts\r\n   */\r\n  resetSession(): void {\r\n    sdkLog(\"resetSession\", { hadSession: Boolean(this.sessionId) });\r\n    this.sessionId = null;\r\n\r\n    const storage =\r\n      typeof window !== \"undefined\" && typeof window.localStorage !== \"undefined\"\r\n        ? window.localStorage\r\n        : null;\r\n\r\n    if (storage) {\r\n      try {\r\n        storage.removeItem(\"kyc_session_id\");\r\n        storage.removeItem(\"kyc_face_done\");\r\n        storage.removeItem(\"kyc_qrcode_url\");\r\n      } catch (error: any) {\r\n        sdkLog(\"resetSession:storageError\", error?.message || error);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get QR code URL for mobile switching (if available from init response)\r\n   */\r\n  getQrCodeUrl(): string | null {\r\n    sdkLog(\"getQrCodeUrl\", { qrCodeUrl: this.qrCodeUrl });\r\n    return this.qrCodeUrl;\r\n  }\r\n\r\n  /**\r\n   * Set QR code URL from init response\r\n   */\r\n  setQrCodeUrl(url: string): void {\r\n    sdkLog(\"setQrCodeUrl\", { url });\r\n    this.qrCodeUrl = url;\r\n  }\r\n\r\n  /**\r\n   * Get current session ID\r\n   */\r\n  getSessionId(): string | null {\r\n    sdkLog(\"getSessionId\", { sessionId: this.sessionId });\r\n    return this.sessionId;\r\n  }\r\n\r\n  /**\r\n   * Step 1: Initialize session\r\n   */\r\n\r\n  async init(options: InitOptions): Promise<InitResponse> {\r\n    sdkLog(\"init:start\", { options });\r\n    const deviceType = options?.device_type || detectDeviceType();\r\n    this.deviceType = deviceType;\r\n    const hasBody = Boolean(\r\n      options && (options.reference || options.email || options.callback_url || options.redirect_url || options.ui)\r\n    );\r\n\r\n    try {\r\n      const res = await axios.post<InitResponse>(\r\n        `${this.apiBaseUrl}/api/v2/dashboard/merchant/onsite/initiate`,\r\n        hasBody ? options : undefined,\r\n        {\r\n          headers: {\r\n            \"Content-Type\": \"application/json\",\r\n            \"x-server-key\": this.serverKey,\r\n            \"device-type\": deviceType,\r\n          },\r\n          withCredentials: true,\r\n        }\r\n      );\r\n\r\n      const json = res.data;\r\n\r\n      if (!json || !json.data || !json.data.session_id) {\r\n        throw new Error(\"Init failed: Invalid server response\");\r\n      }\r\n\r\n      this.sessionId = json.data.session_id;\r\n      this.deviceType = json.data.device_type || deviceType;\r\n\r\n      if (options.ui) {\r\n        const merged = {\r\n          classNames: { ...(options.ui.classNames || {}) },\r\n          styles: { ...(options.ui.styles || {}) },\r\n        };\r\n        this.uiConfig = merged;\r\n        VerificationSDK.defaultUi = merged;\r\n      } else if (VerificationSDK.defaultUi) {\r\n        this.uiConfig = VerificationSDK.defaultUi;\r\n      }\r\n\r\n      if (json.data.qrcode_url) {\r\n        this.setQrCodeUrl(json.data.qrcode_url);\r\n      }\r\n\r\n      sdkLog(\"init:success\", { sessionId: this.sessionId, deviceType: this.deviceType, hasQr: Boolean(json.data.qrcode_url) });\r\n      return json;\r\n    } catch (error: any) {\r\n      const msg = error?.response?.data?.message || error?.message || \"Init failed\";\r\n      sdkLog(\"init:error\", msg);\r\n      throw new Error(`Init failed: ${msg}`);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Step 2: Upload face scan\r\n   */\r\n  async face(faceBlob: Blob, serverKey: any): Promise<any> {\r\n    sdkLog(\"face:start\", { hasSession: Boolean(this.serverKey) });\r\n    if (!this.sessionId) throw new Error(\"Session not initialized\");\r\n\r\n    const formData = new FormData();\r\n    const faceFileName =\r\n      (faceBlob as File)?.name || `face-${Date.now()}.jpg`;\r\n    formData.append(\"face_scan_img\", faceBlob, faceFileName);\r\n\r\n    try {\r\n      const res = await axios.post(\r\n        `${this.apiBaseUrl}/api/v2/dashboard/merchant/onsite/session/${this.sessionId}/face`,\r\n        formData,\r\n        {\r\n          headers: {\r\n            \"x-server-key\": serverKey,\r\n            \"device-type\": this.deviceType || detectDeviceType(),\r\n          },\r\n          withCredentials: true,\r\n        }\r\n      );\r\n      sdkLog(\"face:success\");\r\n      return res.data;\r\n    } catch (error: any) {\r\n      const msg = error?.response?.data?.message || error?.message || \"Face upload failed\";\r\n      sdkLog(\"face:error\", msg);\r\n      throw new Error(`Face upload failed: ${msg}`);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Backwards-compatible alias to match UI usage\r\n   */\r\n  async uploadFace(faceBlob: Blob,serverKey: any): Promise<any> {\r\n    console.log(\"showing face id in upload face in 1: \",serverKey)\r\n    return this.face(faceBlob, serverKey);\r\n  }\r\n\r\n  /**\r\n   * Step 3: Upload document (ID_CARD, PASSPORT, etc.)\r\n   */\r\n  async uploadDocument(docBlob: Blob, type: string, serverKey:any): Promise<any> {\r\n    sdkLog(\"uploadDocument:start\", { hasSession: Boolean(this.sessionId), type });\r\n    if (!this.sessionId) throw new Error(\"Session not initialized\");\r\n\r\n    const formData = new FormData();\r\n    const docFileName =\r\n      (docBlob as File)?.name || `document-${Date.now()}.jpg`;\r\n    formData.append(\"docs_scan_img\", docBlob, docFileName);\r\n    formData.append(\"docType\", type);\r\n\r\n    try {\r\n      const res = await axios.post(\r\n        `${this.apiBaseUrl}/api/v2/dashboard/merchant/onsite/session/${this.sessionId}/docs`,\r\n        formData,\r\n        {\r\n          headers: {\r\n            \"x-server-key\": serverKey,\r\n            \"device-type\": this.deviceType || detectDeviceType(),\r\n          },\r\n          withCredentials: true,\r\n        }\r\n      );\r\n      sdkLog(\"uploadDocument:success\");\r\n      return res.data;\r\n    } catch (error: any) {\r\n      const msg = error?.response?.data?.message || error?.message || \"Document upload failed\";\r\n      sdkLog(\"uploadDocument:error\", msg);\r\n      throw new Error(`Document upload failed: ${msg}`);\r\n    }\r\n  }\r\n\r\n  // danish\r\n\r\n  /**\r\n   * Step 4: Check verification status\r\n   */\r\n  async getStatus(serverKey:any): Promise<any> {\r\n    sdkLog(\"getStatus:start\", { hasSession: Boolean(this.sessionId) });\r\n    if (!this.sessionId) throw new Error(\"Session not initialized\");\r\n    try {\r\n      const res = await axios.get(\r\n        `${this.apiBaseUrl}/api/v2/dashboard/merchant/onsite/session/${this.sessionId}/status`,\r\n        {\r\n          headers: {\r\n            \"x-server-key\": serverKey,\r\n            \"device-type\": this.deviceType || detectDeviceType(),\r\n            \"Content-Type\": \"application/json\",\r\n          },\r\n          withCredentials: true,\r\n        }\r\n      );\r\n      sdkLog(\"getStatus:success\");\r\n      return res.data;\r\n    } catch (error: any) {\r\n      const msg = error?.response?.data?.message || error?.message || \"Status fetch failed\";\r\n      sdkLog(\"getStatus:error\", msg);\r\n      throw new Error(`Status fetch failed: ${msg}`);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Step 5: Fetch final KYC result for the session\r\n   */\r\n  async getResult(serverKey:any): Promise<any> {\r\n    sdkLog(\"getResult:start\", { hasSession: Boolean(this.sessionId) });\r\n    if (!this.sessionId) throw new Error(\"Session not initialized\");\r\n    try {\r\n      const res = await axios.get(\r\n        `${this.apiBaseUrl}/api/v2/dashboard/merchant/onsite/session/${this.sessionId}/result`,\r\n        {\r\n          headers: {\r\n            \"x-server-key\": serverKey,\r\n            \"device-type\": this.deviceType || detectDeviceType(),\r\n            \"Content-Type\": \"application/json\",\r\n          },\r\n          withCredentials: true,\r\n        }\r\n      );\r\n      sdkLog(\"getResult:success\");\r\n      return res.data;\r\n    } catch (error: any) {\r\n      const msg = error?.response?.data?.message || error?.message || \"Result fetch failed\";\r\n      sdkLog(\"getResult:error\", msg);\r\n      throw new Error(`Result fetch failed: ${msg}`);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Retry an onsite KYC session (e.g. when face is already registered)\r\n   */\r\n  async retrySession(serverKey: any): Promise<any> {\r\n    sdkLog(\"retrySession:start\", { hasSession: Boolean(this.sessionId) });\r\n    if (!this.sessionId) throw new Error(\"Session not initialized\");\r\n\r\n    try {\r\n      const res = await axios.post(\r\n        `${this.apiBaseUrl}/api/v2/dashboard/merchant/onsite/session/${this.sessionId}/retry`,\r\n        undefined,\r\n        {\r\n          headers: {\r\n            \"x-server-key\": serverKey,\r\n            \"device-type\": this.deviceType || detectDeviceType(),\r\n            \"Content-Type\": \"application/json\",\r\n          },\r\n          withCredentials: true,\r\n        }\r\n      );\r\n      sdkLog(\"retrySession:success\");\r\n      return res.data;\r\n    } catch (error: any) {\r\n      const msg = error?.response?.data?.message || error?.message || \"Retry failed\";\r\n      sdkLog(\"retrySession:error\", msg);\r\n      throw new Error(`Retry failed: ${msg}`);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get default UI configuration provided at init\r\n   */\r\n  getUiConfig(): { classNames?: Record<string, string>; styles?: Record<string, any> } {\r\n    // Prefer per-instance overrides, fallback to global default to keep consistency\r\n    return this.uiConfig || VerificationSDK.defaultUi || {};\r\n  }\r\n}\r\n","import React, { useEffect, useRef, useState } from \"react\";\r\nimport { toast } from \"react-toastify\";\r\nimport VerificationSDK from \"../VerificationSDK\";\r\nimport \"./kycModal.css\";\r\n\r\n// Simple QR Code generator using canvas\r\nconst generateQRCode = (text: string, size: number = 120): string => {\r\n  const canvas = document.createElement('canvas');\r\n  const ctx = canvas.getContext('2d');\r\n  if (!ctx) return '';\r\n  \r\n  canvas.width = size;\r\n  canvas.height = size;\r\n  \r\n  // Simple QR-like pattern (for demo purposes)\r\n  // In production, use a proper QR code library like 'qrcode' or 'qr-scanner'\r\n  ctx.fillStyle = '#000000';\r\n  ctx.fillRect(0, 0, size, size);\r\n  \r\n  // Create a simple pattern that looks like a QR code\r\n  const moduleSize = size / 25;\r\n  for (let i = 0; i < 25; i++) {\r\n    for (let j = 0; j < 25; j++) {\r\n      if ((i + j) % 3 === 0 || (i * j) % 7 === 0) {\r\n        ctx.fillStyle = '#ffffff';\r\n        ctx.fillRect(i * moduleSize, j * moduleSize, moduleSize, moduleSize);\r\n      }\r\n    }\r\n  }\r\n  \r\n  // Add corner markers\r\n  ctx.fillStyle = '#000000';\r\n  ctx.fillRect(0, 0, moduleSize * 7, moduleSize * 7);\r\n  ctx.fillRect(0, 0, moduleSize * 3, moduleSize * 3);\r\n  ctx.fillRect(moduleSize * 4, 0, moduleSize * 3, moduleSize * 3);\r\n  ctx.fillRect(0, moduleSize * 4, moduleSize * 3, moduleSize * 3);\r\n  \r\n  return canvas.toDataURL();\r\n};\r\n\r\ninterface KycModalClassNames {\r\n  backdrop?: string;\r\n  container?: string;\r\n  closeButton?: string;\r\n  title?: string;\r\n  input?: string;\r\n  statusBlock?: string;\r\n  error?: string;\r\n  loading?: string;\r\n}\r\n\r\ninterface KycModalStyleOverrides {\r\n  backdrop?: React.CSSProperties;\r\n  container?: React.CSSProperties;\r\n  closeButton?: React.CSSProperties;\r\n  title?: React.CSSProperties;\r\n  input?: React.CSSProperties;\r\n  statusBlock?: React.CSSProperties;\r\n  error?: React.CSSProperties;\r\n  loading?: React.CSSProperties;\r\n}\r\n\r\ninterface KycModalProps {\r\n  sdk: VerificationSDK;\r\n  onClose: () => void;// e.g., \"PASSPORT\", \"ID_CARD\"\r\n  classNames?: KycModalClassNames;\r\n  styles?: KycModalStyleOverrides;\r\n  defaultDocumentType?: string;  // Add this\r\n}\r\n\r\ntype Step = \"FACE\" | \"DOCUMENT\" | \"STATUS\";\r\n\r\nexport const KycModal: React.FC<KycModalProps> = ({ sdk, onClose, classNames, styles, defaultDocumentType = \"CNIC\" }: KycModalProps) => {\r\n  try { console.log('[KycModal] render'); } catch {}\r\n  // Merge SDK-provided defaults with component props (props win)\r\n  const uiDefaults = sdk.getUiConfig?.() || {};\r\n  const mergedClassNames = { ...(uiDefaults.classNames || {}), ...(classNames || {}) } as KycModalClassNames;\r\n  const mergedStyles = { ...(uiDefaults.styles || {}), ...(styles || {}) } as KycModalStyleOverrides;\r\n  const sessionId = sdk.getSessionId?.() || localStorage.getItem(\"kyc_session_id\") || null;\r\n  const qrFromServer = sdk.getQrCodeUrl?.() || localStorage.getItem(\"kyc_qrcode_url\") || null;\r\n  const mobileUrl = sessionId ? (() => {\r\n    const key = (sdk as any)?.getServerKey?.();\r\n    const origin = (typeof window !== 'undefined' && window.location && window.location.origin) ? window.location.origin : '';\r\n    return `${origin}/mobile-kyc/${sessionId}?mode=face${key ? `&key=${encodeURIComponent(key)}` : \"\"}`;\r\n  })() : null;\r\n  const showQr = Boolean(qrFromServer || sessionId);\r\n  try { console.log('[KycModal] computed', { sessionId, showQr, hasKey: Boolean((sdk as any)?.getServerKey?.()) }); } catch {}\r\n  const computedQrSrc = qrFromServer || (mobileUrl ? `https://api.qrserver.com/v1/create-qr-code/?size=220x220&data=${encodeURIComponent(mobileUrl)}` : \"\");\r\n  const [step, setStep] = useState<Step>(\"FACE\");\r\n  const [loading, setLoading] = useState(false);\r\n  const [status, setStatus] = useState<any>(null);\r\n  const videoRef = useRef<HTMLVideoElement | null>(null);\r\n  const streamRef = useRef<MediaStream | null>(null);\r\n  const [cameraReady, setCameraReady] = useState(false);\r\n  const [toastMessage, setToastMessage] = useState<string | null>(null);\r\n  const [docType, setDocType] = useState<string>(defaultDocumentType);\r\n  const [docFileName, setDocFileName] = useState<string>(\"\");\r\n  const fileInputRef = useRef<HTMLInputElement | null>(null);\r\n\r\n  // Map backend next_step/completed_steps to local Step\r\n  const mapStatusToStep = (response: any): Step | null => {\r\n    const data = response?.data ?? response ?? {};\r\n    const nextStepRaw: string | undefined = data?.next_step ?? data?.nextStep;\r\n    const completedSteps: string[] = Array.isArray(data?.completed_steps)\r\n      ? data.completed_steps\r\n      : (Array.isArray(data?.completedSteps) ? data.completedSteps : []);\r\n    const norm = (s: string) => String(s || \"\").toLowerCase().replace(/\\s+/g, \"_\");\r\n    const next = nextStepRaw ? norm(nextStepRaw) : \"\";\r\n    if (next.includes(\"face\")) return \"FACE\";\r\n    if (next.includes(\"doc\")) return \"DOCUMENT\";\r\n    if (next.includes(\"status\") || next.includes(\"result\")) return \"STATUS\";\r\n    // Fallback using completed steps when next_step is missing\r\n    const cs = completedSteps.map(norm);\r\n    if (cs.includes(\"face_scan\") && !cs.includes(\"document_upload\")) return \"DOCUMENT\";\r\n    if (cs.includes(\"face_scan\") && cs.includes(\"document_upload\")) return \"STATUS\";\r\n    return null;\r\n  };\r\n\r\n  // Extract a human-friendly error from SDK/network errors\r\n  const getDisplayError = (err: unknown): string => {\r\n    const raw = (err && (err as any).message) ? String((err as any).message) : String(err || \"\");\r\n    // Try to extract JSON payload after a colon\r\n    const afterColon = raw.includes(\":\") ? raw.split(\":\").slice(1).join(\":\").trim() : raw;\r\n    try {\r\n      const parsed = JSON.parse(afterColon);\r\n      if (parsed && typeof parsed.message === \"string\") return parsed.message;\r\n    } catch {}\r\n    // Pull common phrases (e.g., \"Face does not match\") if present in raw\r\n    const match = raw.match(/(Face does not match[^\\n]*)/i) || raw.match(/(Document[^\\n]*failed[^\\n]*)/i);\r\n    if (match && match[1]) return match[1];\r\n    // Fallback to trimmed raw message without the generic prefix\r\n    return afterColon.replace(/^document upload failed\\s*/i, \"\").replace(/^face upload failed\\s*/i, \"\").trim() || \"Something went wrong\";\r\n  };\r\n\r\n  const handleRetryDocument = () => {\r\n    setDocFileName(\"\");\r\n    if (fileInputRef.current) {\r\n      fileInputRef.current.value = \"\";\r\n      fileInputRef.current.click();\r\n    }\r\n  };\r\n\r\n  // Auto-hide toast after 3 seconds\r\n  useEffect(() => {\r\n    if (!toastMessage) return;\r\n    const id = setTimeout(() => setToastMessage(null), 3000);\r\n    return () => clearTimeout(id);\r\n  }, [toastMessage]);\r\n\r\n  // Start camera when FACE step shows\r\n  useEffect(() => {\r\n    const startCamera = async () => {\r\n      try {\r\n        const stream = await navigator.mediaDevices.getUserMedia({ video: { facingMode: \"user\" }, audio: false });\r\n        if (videoRef.current) {\r\n          videoRef.current.srcObject = stream;\r\n          await videoRef.current.play().catch(() => {});\r\n        }\r\n        streamRef.current = stream;\r\n        setCameraReady(true);\r\n      } catch (e: any) {\r\n        toast.error(e?.message || \"Could not access camera\");\r\n      }\r\n    };\r\n    if (step === \"FACE\") {\r\n      startCamera();\r\n    }\r\n    return () => {\r\n      // Stop camera when leaving screen/component\r\n      if (streamRef.current) {\r\n        streamRef.current.getTracks().forEach((t) => t.stop());\r\n        streamRef.current = null;\r\n      }\r\n      setCameraReady(false);\r\n    };\r\n  }, [step]);\r\n\r\n  // On each step, check session status; if expired, inform and close\r\n  useEffect(() => {\r\n    if (!sessionId) return; // avoid calling status without a session\r\n    let cancelled = false;\r\n    const checkStatus = async () => {\r\n      try {\r\n        const res: any = await sdk.getStatus(sdk?.getServerKey());\r\n        if (cancelled) return;\r\n        // Detect expired by explicit status or heuristics\r\n        const explicitStatus: string | undefined = res?.data?.status ?? res?.status;\r\n        const msg: string | undefined = res?.message;\r\n        const expiredFlag: boolean | undefined = res?.data?.expired ?? res?.expired;\r\n        const expiredAt: string | undefined = res?.data?.expired_at ?? res?.expired_at;\r\n        const expiredByDate = expiredAt ? new Date(expiredAt).getTime() < Date.now() : false;\r\n        const expiredByMsg = typeof msg === \"string\" && msg.toLowerCase().includes(\"expired\");\r\n        if ((explicitStatus && explicitStatus.toUpperCase() === \"EXPIRED\") || expiredFlag || expiredByDate || expiredByMsg) {\r\n          setToastMessage(\"Session expired. Returning to previous screen...\");\r\n          setTimeout(() => {\r\n            if (!cancelled) onClose();\r\n          }, 1200);\r\n        }\r\n        // Drive UI using next_step/completed_steps\r\n        const suggested = mapStatusToStep(res);\r\n        if (suggested && suggested !== step) {\r\n          setStep(suggested);\r\n          if (suggested === \"STATUS\") {\r\n            try {\r\n              const result = await sdk.getResult(sdk?.getServerKey());\r\n              setStatus(result);\r\n            } catch {\r\n              setStatus(res);\r\n            }\r\n          }\r\n        }\r\n      } catch (e: any) {\r\n        // If the server signals expiry via error message\r\n        const emsg = e?.message as string | undefined;\r\n        if (emsg && emsg.toLowerCase().includes(\"expired\")) {\r\n          setToastMessage(\"Session expired. Returning to previous screen...\");\r\n          setTimeout(() => {\r\n            if (!cancelled) onClose();\r\n          }, 1200);\r\n        }\r\n        // else ignore to avoid disrupting other flows\r\n      }\r\n    };\r\n    checkStatus();\r\n    return () => {\r\n      cancelled = true;\r\n    };\r\n  }, [step, sdk, onClose]);\r\n\r\n  // On mount, hydrate step from status so refresh returns to the correct place\r\n  useEffect(() => {\r\n    let cancelled = false;\r\n    const hydrate = async () => {\r\n      try {\r\n        const res = await sdk.getStatus(sdk?.getServerKey());\r\n        if (cancelled) return;\r\n        const suggested = mapStatusToStep(res);\r\n        if (suggested) {\r\n          setStep(suggested);\r\n          if (suggested === \"STATUS\") {\r\n            try {\r\n              const result = await sdk.getResult(sdk?.getServerKey());\r\n              setStatus(result);\r\n            } catch {\r\n              setStatus(res);\r\n            }\r\n          }\r\n        }\r\n      } catch {}\r\n    };\r\n    hydrate();\r\n    return () => { cancelled = true; };\r\n  }, []);\r\n\r\n  // Capture a frame from the camera and upload as base64\r\n  const handleFaceCapture = async () => {\r\n    if (!videoRef.current) return;\r\n    setLoading(true);\r\n    try {\r\n      const video = videoRef.current;\r\n      const canvas = document.createElement(\"canvas\");\r\n      const width = video.videoWidth || 640;\r\n      const height = video.videoHeight || 480;\r\n      canvas.width = width;\r\n      canvas.height = height;\r\n      const ctx = canvas.getContext(\"2d\");\r\n      if (!ctx) throw new Error(\"Canvas not supported\");\r\n      ctx.drawImage(video, 0, 0, width, height);\r\n      const dataUrl = canvas.toDataURL(\"image/jpeg\", 0.92);\r\n      const base64 = dataUrl.split(\",\")[1] || dataUrl;\r\n      console.log(\"sdk from kycmodal\",sdk,sdk?.getServerKey());\r\n      \r\n      await sdk.uploadFace(await (await fetch(dataUrl)).blob(), sdk?.getServerKey());\r\n       setStep(\"DOCUMENT\");\r\n    } catch (err: any) {\r\n      const msg = getDisplayError(err) || \"Face capture failed\";\r\n      // If face already exists, do not proceed further\r\n      if (typeof msg === \"string\" && msg.toLowerCase().includes(\"face already registered\")) {\r\n        toast.info(\"Face already registered. Please proceed later or use a different session.\");\r\n      } else {\r\n        toast.error(msg);\r\n      }\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  // Handle document upload\r\n  const handleDocumentUpload = async (event: React.ChangeEvent<HTMLInputElement>) => {\r\n    if (loading) return; // prevent concurrent uploads\r\n    if (!event.target.files?.[0]) return;\r\n    setDocFileName(event.target.files[0].name || \"\");\r\n    setLoading(true);\r\n\r\n    try {\r\n      const file = event.target.files[0];\r\n      // Single attempt only; user can click \"Upload again\" if it fails\r\n      await sdk.uploadDocument(file, docType, sdk?.getServerKey());\r\n\r\n      setStep(\"STATUS\");\r\n      // Prefer final result if available, fallback to status\r\n      try {\r\n        const result = await sdk.getResult(sdk?.getServerKey());\r\n        setStatus(result);\r\n      } catch {\r\n        const res = await sdk.getStatus(sdk?.getServerKey());\r\n        setStatus(res);\r\n      }\r\n    } catch (err: any) {\r\n      const msg = getDisplayError(err);\r\n      if (msg && msg.toLowerCase().includes(\"document\") && msg.toLowerCase().includes(\"already exists\")) {\r\n        toast.info(\"Document already exists. Please do not upload again.\");\r\n      } else {\r\n        toast.error(msg || \"Document upload failed\");\r\n      }\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  return (\r\n    <div className={`kyc-backdrop ${mergedClassNames?.backdrop || \"\"}`} style={mergedStyles?.backdrop}>\r\n      <div className={`kyc-container ${mergedClassNames?.container || \"\"}`} style={mergedStyles?.container}>\r\n        {toastMessage && (\r\n          <div style={{\r\n            background: \"#10b981\",\r\n            color: \"#ffffff\",\r\n            padding: 8,\r\n            borderRadius: 8,\r\n            marginBottom: 8,\r\n            textAlign: \"center\"\r\n          }}>\r\n            {toastMessage}\r\n          </div>\r\n        )}\r\n        <button\r\n          onClick={onClose}\r\n          className={`kyc-close ${mergedClassNames?.closeButton || \"\"}`}\r\n          style={mergedStyles?.closeButton}\r\n          aria-label=\"Close\"\r\n        >\r\n          ✕\r\n        </button>\r\n\r\n        {/* Loading indicator will be shown contextually within steps */}\r\n\r\n        {step === \"FACE\" && (\r\n          <div>\r\n            <h2 className={`kyc-title ${mergedClassNames?.title || \"\"}`} style={mergedStyles?.title}>Capture Face</h2>\r\n            <div style={{ display: \"grid\", gap: 8 }}>\r\n              <video ref={videoRef} playsInline muted style={{ width: \"100%\", borderRadius: 8, background: \"#000\" }} />\r\n              <button\r\n                type=\"button\"\r\n                disabled={!cameraReady || loading}\r\n                onClick={handleFaceCapture}\r\n              className={`kyc-input ${mergedClassNames?.input || \"\"}`}\r\n              style={{\r\n                ...(mergedStyles?.input || {}),\r\n                background: cameraReady && !loading ? \"linear-gradient(90deg, #FF8A00 0%, #FF3D77 100%)\" : \"#9ca3af\",\r\n                color: \"#ffffff\",\r\n                border: cameraReady && !loading ? \"none\" : \"1px solid #d1d5db\",\r\n                borderRadius: 8\r\n              }}\r\n              >\r\n                {loading ? \"Capturing...\" : \"Capture & Continue\"}\r\n              </button>\r\n              \r\n              {showQr && (\r\n                <div style={{ textAlign: \"center\", marginTop: \"16px\" }}>\r\n                  <p style={{ margin: \"0 0 8px 0\", fontSize: \"14px\", color: \"#6b7280\" }}>\r\n                    Or continue on mobile for better camera quality\r\n                  </p>\r\n                  <div style={{\r\n                    display: \"inline-block\",\r\n                    padding: \"16px\",\r\n                    background: \"#f9fafb\",\r\n                    border: \"1px solid #e5e7eb\",\r\n                    borderRadius: \"8px\",\r\n                    marginBottom: \"8px\"\r\n                  }}>\r\n                    <div style={{\r\n                      width: \"120px\",\r\n                      height: \"120px\",\r\n                      background: \"#ffffff\",\r\n                      border: \"1px solid #d1d5db\",\r\n                      borderRadius: \"4px\",\r\n                      display: \"flex\",\r\n                      alignItems: \"center\",\r\n                      justifyContent: \"center\",\r\n                      fontSize: \"10px\",\r\n                      color: \"#6b7280\",\r\n                      textAlign: \"center\",\r\n                      padding: \"8px\",\r\n                      wordBreak: \"break-all\"\r\n                    }}>\r\n                      <img \r\n                        src={computedQrSrc} \r\n                        alt=\"QR Code for mobile continuation\" \r\n                        style={{ \r\n                          width: \"100%\", \r\n                          height: \"100%\",\r\n                          objectFit: \"contain\"\r\n                        }} \r\n                      />\r\n                    </div>\r\n                  </div>\r\n                  <p style={{ margin: \"0\", fontSize: \"12px\", color: \"#9ca3af\" }}>\r\n                    Scan QR code with your mobile device\r\n                  </p>\r\n                  {mobileUrl && (\r\n                    <p style={{ margin: \"4px 0 0 0\", fontSize: \"10px\", color: \"#9ca3af\" }}>\r\n                      Or visit: <a href={mobileUrl} style={{ color: \"#2563eb\" }}>{mobileUrl}</a>\r\n                    </p>\r\n                  )}\r\n                </div>\r\n              )}\r\n            </div>\r\n          </div>\r\n        )}\r\n\r\n        {step === \"DOCUMENT\" && (\r\n          <div style={{ minHeight: 380, display: \"flex\", flexDirection: \"column\" }}>\r\n            <h2 className={`kyc-title ${mergedClassNames?.title || \"\"}`} style={mergedStyles?.title}>Upload Document</h2>\r\n            <div style={{ display: \"flex\", gap: 8, marginBottom: 8 }}>\r\n              <label style={{ display: \"flex\", alignItems: \"center\", gap: 6, color: \"#000\" }}>\r\n                <input\r\n                  type=\"radio\"\r\n                  name=\"doc-type\"\r\n                  value=\"CNIC\"\r\n                  checked={docType === \"CNIC\"}\r\n                  onChange={() => setDocType(\"CNIC\")}\r\n                />\r\n                NIC\r\n              </label>\r\n              <label style={{ display: \"flex\", alignItems: \"center\", gap: 6, color: \"#000\" }}>\r\n                <input\r\n                  type=\"radio\"\r\n                  name=\"doc-type\"\r\n                  value=\"PASSPORT\"\r\n                  checked={docType === \"PASSPORT\"}\r\n                  onChange={() => setDocType(\"PASSPORT\")}\r\n                />\r\n                Passport\r\n              </label>\r\n            </div>\r\n            <input\r\n              ref={fileInputRef}\r\n              type=\"file\"\r\n              accept=\"image/*,.pdf\"\r\n              onChange={handleDocumentUpload}\r\n              className={`kyc-input ${mergedClassNames?.input || \"\"}`}\r\n              style={{ ...mergedStyles?.input, display: \"none\" }}\r\n            />\r\n            {loading && (\r\n              <p className={`kyc-loading ${mergedClassNames?.loading || \"\"}`} style={mergedStyles?.loading}>Processing...</p>\r\n            )}\r\n            {docFileName && (\r\n              <div style={{\r\n                marginTop: 6,\r\n                display: \"inline-flex\",\r\n                alignItems: \"center\",\r\n                gap: 8,\r\n                padding: \"6px 10px\",\r\n                borderRadius: 9999,\r\n                background: \"#eef2ff\",\r\n                color: \"#111827\",\r\n                fontSize: 13,\r\n              }}>\r\n                <span aria-hidden>✔</span>\r\n                <span>File selected</span>\r\n              </div>\r\n            )}\r\n            <div style={{ flex: 1 }} />\r\n            {!docFileName && (\r\n              <button\r\n                type=\"button\"\r\n                onClick={() => fileInputRef.current?.click()}\r\n                className={`kyc-input ${mergedClassNames?.input || \"\"}`}\r\n                style={{\r\n                  ...mergedStyles?.input,\r\n                  background: \"linear-gradient(90deg, #FF8A00 0%, #FF3D77 100%)\",\r\n                  color: \"#fff\",\r\n                  border: \"none\",\r\n                  borderRadius: 8,\r\n                  padding: 10,\r\n                  marginTop: 12\r\n                }}\r\n              >\r\n                Choose file\r\n              </button>\r\n            )}\r\n          </div>\r\n        )}\r\n\r\n        {step === \"STATUS\" && (\r\n          <div>\r\n            <h2 className={`kyc-title ${mergedClassNames?.title || \"\"}`} style={mergedStyles?.title}>Verification Status</h2>\r\n            {status ? (\r\n              <div className={`kyc-status ${mergedClassNames?.statusBlock || \"\"}`} style={mergedStyles?.statusBlock}>\r\n                {(() => {\r\n                  const data: any = status?.data ?? status;\r\n                  const reference: string | undefined = data?.reference ?? data?.ref;\r\n                  const email: string | undefined = data?.email;\r\n                  const faceStatus: string | undefined = data?.face_recognition_status ?? data?.face_status ?? data?.face ?? data?.faceRecognitionStatus;\r\n                  const kycStatus: string | undefined = data?.kyc_status ?? data?.status ?? status?.status;\r\n                  const redirectUrl: string | undefined = data?.redirect_url ?? data?.redirectUrl;\r\n                  return (\r\n                    <div style={{ display: \"grid\", gap: 8, color: \"#000\", padding: 0 }}>\r\n                      {reference && (\r\n                        <div><strong>Reference:</strong> {reference}</div>\r\n                      )}\r\n                      {email && (\r\n                        <div><strong>Email:</strong> {email}</div>\r\n                      )}\r\n                      {faceStatus && (\r\n                        <div><strong>Face Status:</strong> {String(faceStatus)}</div>\r\n                      )}\r\n                      {kycStatus && (\r\n                        <div><strong>KYC Status:</strong> {String(kycStatus)}</div>\r\n                      )}\r\n                      {redirectUrl && (\r\n                        <div style={{ overflowWrap: \"anywhere\" }}>\r\n                          <strong>Redirect URL:</strong> {redirectUrl}\r\n                        </div>\r\n                      )}\r\n                      {!reference && !email && !faceStatus && !kycStatus && !redirectUrl && (\r\n                        <pre style={{ margin: 0 }}>{JSON.stringify(status, null, 2)}</pre>\r\n                      )}\r\n                    </div>\r\n                  );\r\n                })()}\r\n              </div>\r\n            ) : (\r\n              <p>No status available.</p>\r\n            )}\r\n            <div style={{ marginTop: 12 }}>\r\n              <button\r\n                type=\"button\"\r\n                onClick={onClose}\r\n                className={`kyc-input ${mergedClassNames?.input || \"\"}`}\r\n                style={{ ...(mergedStyles?.input || {}), background: \"#111827\", color: \"#fff\", border: \"none\", borderRadius: 8, padding: 10 }}\r\n              >\r\n                Close\r\n              </button>\r\n            </div>\r\n          </div>\r\n        )}\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n","import React, { useEffect, useRef, useState } from \"react\";\r\nimport { FaceMesh, FACEMESH_TESSELATION, FACEMESH_FACE_OVAL, FACEMESH_LEFT_EYE, FACEMESH_RIGHT_EYE, FACEMESH_LIPS } from \"@mediapipe/face_mesh\";\r\nimport { drawConnectors, drawLandmarks as drawMPLandmarks } from \"@mediapipe/drawing_utils\";\r\nimport { toast } from \"react-toastify\";\r\nimport VerificationSDK from \"../VerificationSDK\";\r\nimport \"./kycModal.css\";\r\n\r\ninterface MobileKycPageProps {\r\n  sessionId?: string;\r\n  serverKey?: string;\r\n  sdk?: VerificationSDK;\r\n  showFinalStatus?: boolean; // when true, show STATUS on mobile after document\r\n  apiBaseUrl?: string;\r\n}\r\n\r\ntype Step = \"FACE\" | \"DOCUMENT\" | \"STATUS\";\r\n\r\nexport const MobileKycPage: React.FC<MobileKycPageProps> = ({ sessionId, serverKey, sdk: providedSdk, showFinalStatus = false, apiBaseUrl }) => {\r\n  try { console.log('[MobileKycPage] render', { sessionId, hasServerKey: Boolean(serverKey), hasProvidedSdk: Boolean(providedSdk), showFinalStatus }); } catch {}\r\n  const [step, setStep] = useState<Step>(\"FACE\");\r\n  const [loading, setLoading] = useState(false);\r\n  const [status, setStatus] = useState<any>(null);\r\n  const [toastMessage, setToastMessage] = useState<string | null>(null);\r\n  const [docType, setDocType] = useState<string>(\"CNIC\");\r\n  const [docFileName, setDocFileName] = useState<string>(\"\");\r\n  const fileInputRef = useRef<HTMLInputElement | null>(null);\r\n  const videoRef = useRef<HTMLVideoElement | null>(null);\r\n  const faceCanvasRef = useRef<HTMLCanvasElement | null>(null);\r\n  const streamRef = useRef<MediaStream | null>(null);\r\n  const [cameraReady, setCameraReady] = useState(false);\r\n  const [livenessStage, setLivenessStage] = useState<\"CENTER\" | \"LEFT\" | \"RIGHT\" | \"SNAP\" | \"DONE\">(\"CENTER\");\r\n  const [livenessReady, setLivenessReady] = useState(false);\r\n  const [livenessFailed, setLivenessFailed] = useState(false);\r\n  const [modelLoading, setModelLoading] = useState(true);\r\n  const [modelLoaded, setModelLoaded] = useState(false);\r\n  const modelLoadedRef = useRef<boolean>(false);\r\n  const livenessFailedRef = useRef<boolean>(false);\r\n  const livenessTimerRef = useRef<number | null>(null);\r\n  const cameraDriverRef = useRef<number | null>(null);\r\n  const [livenessInstruction, setLivenessInstruction] = useState<string>(\"Look straight at the camera\");\r\n  const centerHoldRef = useRef<number>(0);\r\n  const leftHoldRef = useRef<number>(0);\r\n  const rightHoldRef = useRef<number>(0);\r\n  const centerAfterHoldRef = useRef<number>(0);\r\n  const snapTriggeredRef = useRef<boolean>(false);\r\n  const rafIdRef = useRef<number | null>(null);\r\n  const lastResultsAtRef = useRef<number>(0);\r\n  const [isDocScanMode, setIsDocScanMode] = useState(false);\r\n  const docVideoRef = useRef<HTMLVideoElement | null>(null);\r\n  const docStreamRef = useRef<MediaStream | null>(null);\r\n  const [docPreviewUrl, setDocPreviewUrl] = useState<string | null>(null);\r\n  const docPendingBlobRef = useRef<Blob | null>(null);\r\n  const livenessStageRef = useRef<\"CENTER\" | \"LEFT\" | \"RIGHT\" | \"SNAP\" | \"DONE\">(\"CENTER\");\r\n  const [faceAlreadyRegistered, setFaceAlreadyRegistered] = useState(false);\r\n  const [retryingFace, setRetryingFace] = useState(false);\r\n  // (Optional) Offscreen/cv placeholders if needed later\r\n  const offscreenRef = useRef<HTMLCanvasElement | null>(null);\r\n\r\n  // Keep ref in sync with state to avoid stale reads inside callbacks\r\n  useEffect(() => {\r\n    livenessStageRef.current = livenessStage;\r\n  }, [livenessStage]);\r\n\r\n  // Revoke object URL when preview is replaced/removed\r\n  useEffect(() => {\r\n    return () => {\r\n      if (docPreviewUrl && docPreviewUrl.startsWith(\"blob:\")) {\r\n        try { URL.revokeObjectURL(docPreviewUrl); } catch { }\r\n      }\r\n    };\r\n  }, [docPreviewUrl]);\r\n\r\n  // Helper to set stage while keeping ref/state aligned\r\n  const setStage = (next: \"CENTER\" | \"LEFT\" | \"RIGHT\" | \"SNAP\" | \"DONE\") => {\r\n    try { console.log('[MobileKycPage] setStage', { from: livenessStageRef.current, to: next }); } catch {}\r\n    livenessStageRef.current = next;\r\n    setLivenessStage(next);\r\n  };\r\n\r\n  const getDisplayError = (err: unknown): string => {\r\n    const raw = (err && (err as any).message) ? String((err as any).message) : String(err || \"\");\r\n    const afterColon = raw.includes(\":\") ? raw.split(\":\").slice(1).join(\":\").trim() : raw;\r\n    try {\r\n      const parsed = JSON.parse(afterColon);\r\n      if (parsed && typeof parsed.message === \"string\") return parsed.message;\r\n    } catch { }\r\n    const match = raw.match(/(Face does not match[^\\n]*)/i) || raw.match(/(Document[^\\n]*failed[^\\n]*)/i);\r\n    if (match && match[1]) return match[1];\r\n    return afterColon.replace(/^document upload failed\\s*/i, \"\").replace(/^face upload failed\\s*/i, \"\").trim() || \"Something went wrong\";\r\n  };\r\n\r\n  const handleRetryDocument = () => {\r\n    setDocFileName(\"\");\r\n    if (fileInputRef.current) {\r\n      fileInputRef.current.value = \"\";\r\n      fileInputRef.current.click();\r\n    }\r\n  };\r\n\r\n  // Use provided SDK instance if given, otherwise create one from serverKey and apiBaseUrl (to avoid default backend on mobile)\r\n  const sdk = providedSdk || (serverKey ? new VerificationSDK({ serverKey, apiBaseUrl }) : new VerificationSDK({ serverKey: \"\", apiBaseUrl }));\r\n  try { console.log('[MobileKycPage] sdk:init', { hasSdk: Boolean(sdk), sessionId }); } catch {}\r\n  // If caller passed a sessionId prop (or init response), assign it to the SDK so uploads/status checks work\r\n  if (sessionId) {\r\n    try {\r\n      sdk.setSessionId(sessionId);\r\n      try { console.log('[MobileKycPage] sdk:setSessionId', { sessionId }); } catch {}\r\n    } catch (e) {\r\n      // noop - defensive in case sdk implementation is missing the method\r\n    }\r\n  }\r\n\r\n  // Auto-hide toast after 3 seconds\r\n  useEffect(() => {\r\n    if (!toastMessage) return;\r\n    try { console.log('[MobileKycPage] effect:autoHideToast', { toastMessage }); } catch {}\r\n    const id = setTimeout(() => setToastMessage(null), 3000);\r\n    return () => clearTimeout(id);\r\n  }, [toastMessage]);\r\n\r\n  // Ensure document type always has a default\r\n  useEffect(() => {\r\n    if (!docType) setDocType(\"CNIC\");\r\n  }, [docType]);\r\n\r\n  // Map backend next_step/completed_steps to local Step\r\n  const mapStatusToStep = (response: any): Step | null => {\r\n    try { console.log('[MobileKycPage] mapStatusToStep:input', response); } catch {}\r\n    const data = response?.data ?? response ?? {};\r\n    const nextStepRaw: string | undefined = data?.next_step ?? data?.nextStep;\r\n    const completedSteps: string[] = Array.isArray(data?.completed_steps)\r\n      ? data.completed_steps\r\n      : (Array.isArray(data?.completedSteps) ? data.completedSteps : []);\r\n    const norm = (s: string) => String(s || \"\").toLowerCase().replace(/\\s+/g, \"_\");\r\n    const next = nextStepRaw ? norm(nextStepRaw) : \"\";\r\n    if (next.includes(\"face\")) return \"FACE\";\r\n    if (next.includes(\"doc\")) return \"DOCUMENT\";\r\n    if (next.includes(\"status\") || next.includes(\"result\")) return \"STATUS\";\r\n    // Fallback using completed steps when next_step is missing\r\n    const cs = completedSteps.map(norm);\r\n    if (cs.includes(\"face_scan\") && !cs.includes(\"document_upload\")) return \"DOCUMENT\";\r\n    if (cs.includes(\"face_scan\") && cs.includes(\"document_upload\")) return showFinalStatus ? \"STATUS\" : \"DOCUMENT\";\r\n    const out = null as Step | null;\r\n    try { console.log('[MobileKycPage] mapStatusToStep:output', out); } catch {}\r\n    return out;\r\n  };\r\n\r\n  // Start camera when FACE step shows (front camera)\r\n  useEffect(() => {\r\n    const startCamera = async () => {\r\n      try {\r\n        try { console.log('[MobileKycPage] camera:startFace'); } catch {}\r\n        const stream = await navigator.mediaDevices.getUserMedia({ \r\n          video: { \r\n            facingMode: \"user\",\r\n            width: { ideal: 1280 },\r\n            height: { ideal: 720 }\r\n          }, \r\n          audio: false \r\n        });\r\n        if (videoRef.current) {\r\n          videoRef.current.srcObject = stream;\r\n          await videoRef.current.play().catch(() => { });\r\n          // Sync overlay canvas size with video\r\n          \r\n          requestAnimationFrame(() => {\r\n            try {\r\n              const v = videoRef.current!;\r\n              if (faceCanvasRef.current) {\r\n                faceCanvasRef.current.width = v.videoWidth || v.clientWidth || 640;\r\n                faceCanvasRef.current.height = v.videoHeight || v.clientHeight || 480;\r\n              }\r\n            } catch { }\r\n          });\r\n        }\r\n        streamRef.current = stream;\r\n        setCameraReady(true);\r\n      } catch (e: any) {\r\n        try { console.log('[MobileKycPage] camera:errorFace', e?.message || e); } catch {}\r\n        toast.error(e?.message || \"Could not access camera\");\r\n      }\r\n    };\r\n    if (step === \"FACE\") {\r\n      startCamera();\r\n    }\r\n    return () => {\r\n      if (streamRef.current) {\r\n        streamRef.current.getTracks().forEach((t) => t.stop());\r\n        streamRef.current = null;\r\n      }\r\n      setCameraReady(false);\r\n      setLivenessStage(\"CENTER\");\r\n      setLivenessReady(false);\r\n      setLivenessFailed(false);\r\n      livenessFailedRef.current = false;\r\n      setLivenessInstruction(\"Look straight at the camera\");\r\n      centerHoldRef.current = 0;\r\n      leftHoldRef.current = 0;\r\n      rightHoldRef.current = 0;\r\n      centerAfterHoldRef.current = 0;\r\n      snapTriggeredRef.current = false;\r\n      setModelLoading(true);\r\n      setModelLoaded(false);\r\n      modelLoadedRef.current = false;\r\n      if (livenessTimerRef.current) {\r\n        window.clearInterval(livenessTimerRef.current);\r\n        livenessTimerRef.current = null;\r\n      }\r\n      if (rafIdRef.current) {\r\n        cancelAnimationFrame(rafIdRef.current);\r\n        rafIdRef.current = null;\r\n      }\r\n      // No mediapipe instance retained here\r\n    };\r\n  }, [step]);\r\n\r\n  // Use native MediaPipe FaceMesh and run liveness using 468 landmarks\r\n  useEffect(() => {\r\n    if (step !== \"FACE\" || !cameraReady) return;\r\n    let cancelled = false;\r\n    let initTimeoutId: number | null = null;\r\n    let localFaceMesh: any = null;\r\n    const start = async () => {\r\n      try {\r\n        try { console.log('[MobileKycPage] facemesh:init'); } catch {}\r\n        const fm = new FaceMesh({ locateFile: (file: string) => `https://cdn.jsdelivr.net/npm/@mediapipe/face_mesh@0.4.1633559619/${file}` });\r\n        fm.setOptions({\r\n          selfieMode: true,\r\n          maxNumFaces: 1,\r\n          refineLandmarks: true,\r\n          minDetectionConfidence: 0.5,\r\n          minTrackingConfidence: 0.5\r\n        } as any);\r\n        localFaceMesh = fm;\r\n        if (cancelled) return;\r\n        setModelLoaded(true);\r\n        setModelLoading(false);\r\n        modelLoadedRef.current = true;\r\n        const drawOverlays = (ctx: CanvasRenderingContext2D, normalized: Array<{ x: number; y: number }>, w: number, h: number) => {\r\n          // Mesh and contours using MediaPipe helpers (expects normalized coords)\r\n          drawConnectors(ctx, normalized as any, FACEMESH_TESSELATION, { color: \"#60a5fa\", lineWidth: 0.5 });\r\n          drawConnectors(ctx, normalized as any, FACEMESH_FACE_OVAL, { color: \"#f59e0b\", lineWidth: 2 });\r\n          drawConnectors(ctx, normalized as any, FACEMESH_LEFT_EYE, { color: \"#10b981\", lineWidth: 1.5 });\r\n          drawConnectors(ctx, normalized as any, FACEMESH_RIGHT_EYE, { color: \"#ef4444\", lineWidth: 1.5 });\r\n          drawConnectors(ctx, normalized as any, FACEMESH_LIPS, { color: \"#a855f7\", lineWidth: 1.5 });\r\n          // Points for extra clarity\r\n          drawMPLandmarks(ctx, normalized as any, { color: \"#2563eb\", lineWidth: 0, radius: 1.5 });\r\n        };\r\n        const onResults = (results: any) => {\r\n          const canvas = faceCanvasRef.current;\r\n          if (!canvas) return;\r\n          const ctx = canvas.getContext(\"2d\");\r\n          if (!ctx) return;\r\n          // Sync canvas internal size to device pixels for crisp drawing and correct mapping\r\n          const dpr = Math.max(1, Math.min(3, window.devicePixelRatio || 1));\r\n          const displayW = (canvas.parentElement as HTMLElement)?.clientWidth || canvas.width;\r\n          const displayH = (canvas.parentElement as HTMLElement)?.clientHeight || canvas.height;\r\n          if (canvas.width !== Math.round(displayW * dpr) || canvas.height !== Math.round(displayH * dpr)) {\r\n            canvas.width = Math.round(displayW * dpr);\r\n            canvas.height = Math.round(displayH * dpr);\r\n          }\r\n          const w = canvas.width, h = canvas.height;\r\n          ctx.clearRect(0, 0, w, h);\r\n          const faces = results.multiFaceLandmarks as Array<Array<{ x: number; y: number }>> | undefined;\r\n          const face = faces && faces[0];\r\n          if (face) {\r\n            // Map MediaPipe normalized coords into canvas space consistent with video objectFit: cover\r\n            const vid = videoRef.current as HTMLVideoElement | null;\r\n            const vidW = Math.max(1, vid?.videoWidth || displayW);\r\n            const vidH = Math.max(1, vid?.videoHeight || displayH);\r\n            const scale = Math.max(w / vidW, h / vidH);\r\n            const offsetX = (w - vidW * scale) / 2;\r\n            const offsetY = (h - vidH * scale) / 2;\r\n            const faceOnCanvas = face.map(p => ({\r\n              x: (p.x * vidW * scale + offsetX) / w,\r\n              y: (p.y * vidH * scale + offsetY) / h,\r\n            }));\r\n\r\n            drawOverlays(ctx, faceOnCanvas as any, w, h);\r\n            // After drawing using normalized coords, draw a vertical line at the world center for orientation debug (optional)\r\n            // ctx.save(); ctx.strokeStyle = \"rgba(0,0,0,0.15)\"; ctx.beginPath(); ctx.moveTo(w/2, 0); ctx.lineTo(w/2, h); ctx.stroke(); ctx.restore();\r\n            lastResultsAtRef.current = Date.now();\r\n            const eyeA = faceOnCanvas[33];\r\n            const eyeB = faceOnCanvas[263];\r\n            // Because the video is mirrored for user-friendly preview, landmark x is mirrored too.\r\n            // Flip x to compute yaw in real-world orientation (so turning LEFT yields negative yaw).\r\n            const flipX = (p: any) => ({ x: 1 - p.x, y: p.y });\r\n            const eA = flipX(eyeA);\r\n            const eB = flipX(eyeB);\r\n            const n1 = faceOnCanvas[1];\r\n            const n4 = faceOnCanvas[4];\r\n            const nT = flipX(n1 && n4 ? { x: (n1.x + n4.x) / 2, y: (n1.y + n4.y) / 2 } : (n1 || n4 || faceOnCanvas[197]));\r\n            const leftEyeOuter = eA.x < eB.x ? eA : eB;\r\n            const rightEyeOuter = eA.x < eB.x ? eB : eA;\r\n            const noseTip = faceOnCanvas[1] || faceOnCanvas[4] || faceOnCanvas[197];\r\n            if (leftEyeOuter && rightEyeOuter && nT) {\r\n              const faceWidth = Math.abs(rightEyeOuter.x - leftEyeOuter.x);\r\n              const midX = (leftEyeOuter.x + rightEyeOuter.x) / 2;\r\n              const yaw = (nT.x - midX) / Math.max(1e-6, faceWidth);\r\n              const absYaw = Math.abs(yaw);\r\n              // Centering help: check if face fits inside guide\r\n              const xs = faceOnCanvas.map(p => p.x), ys = faceOnCanvas.map(p => p.y);\r\n              const minX = Math.min(...xs) * w, maxX = Math.max(...xs) * w;\r\n              const minY = Math.min(...ys) * h, maxY = Math.max(...ys) * h;\r\n              const boxCX = (minX + maxX) / 2, boxCY = (minY + maxY) / 2;\r\n              // Define circular guide consistent with UI mask (~45% of min dimension)\r\n              const guideCX = w / 2;\r\n              const guideCY = h / 2;\r\n              const guideR = Math.min(w, h) * 0.45;\r\n              const dx = boxCX - guideCX;\r\n              const dy = boxCY - guideCY;\r\n              const insideGuide = (dx * dx + dy * dy) <= (guideR * guideR)\r\n                && (maxX - minX) <= guideR * 2 * 1.05 && (maxY - minY) <= guideR * 2 * 1.05;\r\n              if (!livenessReady) setLivenessReady(true);\r\n              const centerThreshold = 0.05; // allow slight yaw for center\r\n              const leftThreshold = 0.08;   // require a clearer left turn\r\n              const rightThreshold = 0.08;  // require a clearer right turn\r\n              const holdFramesCenter = 12;  // require ~200-400ms centered\r\n              const holdFramesTurn = 12;    // require ~200-400ms turned\r\n              if (livenessStageRef.current === \"CENTER\") {\r\n                if (!insideGuide) {\r\n                  setLivenessInstruction(\"Center your face inside the circle\");\r\n                } else if (absYaw < centerThreshold) {\r\n                  centerHoldRef.current += 1;\r\n                  if (centerHoldRef.current >= holdFramesCenter) {\r\n                    setStage(\"LEFT\");\r\n                    setLivenessInstruction(\"Turn your face LEFT\");\r\n                    centerHoldRef.current = 0;\r\n                  }\r\n                } else {\r\n                  centerHoldRef.current = 0;\r\n                  if (yaw > 0) setLivenessInstruction(\"Move your face slightly LEFT\"); else setLivenessInstruction(\"Move your face slightly RIGHT\");\r\n                }\r\n              } else if (livenessStageRef.current === \"LEFT\") {\r\n                if (faceWidth < 0.08) {\r\n                  setLivenessInstruction(\"Move closer to the camera\");\r\n                } else if (yaw < -leftThreshold) {\r\n                  leftHoldRef.current += 1;\r\n                  if (leftHoldRef.current >= holdFramesTurn) {\r\n                    setStage(\"RIGHT\");\r\n                    setLivenessInstruction(\"Great! Now turn your face RIGHT\");\r\n                    leftHoldRef.current = 0;\r\n                  }\r\n                } else {\r\n                  leftHoldRef.current = 0;\r\n                  if (yaw > rightThreshold) setLivenessInstruction(\"You're facing right. Turn LEFT\"); else setLivenessInstruction(\"Turn a bit more LEFT\");\r\n                }\r\n              } else if (livenessStageRef.current === \"RIGHT\") {\r\n                if (faceWidth < 0.08) {\r\n                  setLivenessInstruction(\"Move closer to the camera\");\r\n                } else if (yaw > rightThreshold) {\r\n                  rightHoldRef.current += 1;\r\n                  if (rightHoldRef.current >= holdFramesTurn) {\r\n                    rightHoldRef.current = 0;\r\n                    if (!snapTriggeredRef.current) {\r\n                      snapTriggeredRef.current = true;\r\n                      setStage(\"DONE\");\r\n                      setLivenessInstruction(\"Capturing...\");\r\n                      handleFaceCapture();\r\n                    }\r\n                  }\r\n                  } else {\r\n                  rightHoldRef.current = 0;\r\n                  if (yaw < -leftThreshold) setLivenessInstruction(\"You're facing left. Turn RIGHT\"); else setLivenessInstruction(\"Turn a bit more RIGHT\");\r\n                }\r\n              } else if (livenessStageRef.current === \"SNAP\") {\r\n                // legacy path not used\r\n              }\r\n            }\r\n          } else {\r\n            if (Date.now() - lastResultsAtRef.current > 2000) setLivenessInstruction(\"No face detected. Center your face in frame with good lighting.\");\r\n          }\r\n        };\r\n\r\n        fm.onResults(onResults);\r\n        if (videoRef.current) {\r\n          const tick = async () => {\r\n            if (cancelled) return;\r\n            if (!videoRef.current) return;\r\n            await fm.send({ image: videoRef.current as HTMLVideoElement });\r\n            cameraDriverRef.current = requestAnimationFrame(tick);\r\n          };\r\n          cameraDriverRef.current = requestAnimationFrame(tick);\r\n        }\r\n      } catch (e) {\r\n        if (!cancelled) {\r\n          setLivenessFailed(true);\r\n          setModelLoading(false);\r\n          setModelLoaded(false);\r\n          livenessFailedRef.current = true;\r\n          console.error(\"mediapipe facemesh init error\", e);\r\n          toast.error((e as any)?.message || String(e));\r\n        }\r\n      }\r\n    };\r\n\r\n    // Fail-safe timeout to fallback to manual capture\r\n    initTimeoutId = window.setTimeout(() => {\r\n      if (!modelLoadedRef.current && !livenessFailedRef.current && !cancelled) {\r\n        setLivenessFailed(true);\r\n        setModelLoading(false);\r\n        livenessFailedRef.current = true;\r\n        toast.error(\"Face model initialization timed out. Continuing without liveness.\");\r\n      }\r\n    }, 8000);\r\n\r\n    start();\r\n    return () => {\r\n      cancelled = true;\r\n      if (initTimeoutId) {\r\n        window.clearTimeout(initTimeoutId);\r\n        initTimeoutId = null;\r\n      }\r\n      if (cameraDriverRef.current) {\r\n        cancelAnimationFrame(cameraDriverRef.current);\r\n        cameraDriverRef.current = null;\r\n      }\r\n      if (localFaceMesh) {\r\n        try { (localFaceMesh as any).close?.(); } catch { }\r\n      }\r\n    };\r\n  }, [step, cameraReady]);\r\n\r\n  // Manage back camera for document scan mode\r\n  useEffect(() => {\r\n    const getRearStream = async (): Promise<MediaStream> => {\r\n      const attempts: MediaStreamConstraints[] = [\r\n        { video: { facingMode: { exact: 'environment' }, width: { ideal: 1280 }, height: { ideal: 1920 } }, audio: false } as MediaStreamConstraints,\r\n        { video: { facingMode: 'environment', width: { ideal: 1280 }, height: { ideal: 1920 } }, audio: false } as unknown as MediaStreamConstraints,\r\n        { video: { facingMode: { exact: 'environment' }, width: { ideal: 720 }, height: { ideal: 1280 } }, audio: false } as MediaStreamConstraints,\r\n        { video: { facingMode: 'environment', width: { ideal: 720 }, height: { ideal: 1280 } }, audio: false } as unknown as MediaStreamConstraints,\r\n      ];\r\n\r\n      // Try direct environment-facing attempts first\r\n      for (const c of attempts) {\r\n        try { return await navigator.mediaDevices.getUserMedia(c); } catch { /* continue */ }\r\n      }\r\n\r\n      // Request a generic stream to unlock labels, then enumerate and choose rear device\r\n      let temp: MediaStream | null = null;\r\n      try {\r\n        temp = await navigator.mediaDevices.getUserMedia({ video: true, audio: false });\r\n      } catch (e) {\r\n        // If generic itself fails, rethrow\r\n        throw e;\r\n      } finally {\r\n        try { temp?.getTracks().forEach(t => t.stop()); } catch {}\r\n      }\r\n\r\n      const devices = await navigator.mediaDevices.enumerateDevices();\r\n      const videoInputs = devices.filter(d => d.kind === 'videoinput');\r\n      // Prefer labels that look like rear; else pick the first that is not obviously front/selfie\r\n      const rear = videoInputs.find(d => /back|rear|environment/i.test(d.label));\r\n      const chosen = rear || videoInputs.find(d => !/front|user|face/i.test(d.label)) || videoInputs[0];\r\n      if (!chosen) throw new Error('No video input devices found');\r\n\r\n      const byDeviceAttempts: MediaStreamConstraints[] = [\r\n        { video: { deviceId: { exact: chosen.deviceId }, width: { ideal: 1280 }, height: { ideal: 1920 } }, audio: false },\r\n        { video: { deviceId: { exact: chosen.deviceId }, width: { ideal: 720 }, height: { ideal: 1280 } }, audio: false },\r\n        { video: { deviceId: { exact: chosen.deviceId } }, audio: false } as MediaStreamConstraints,\r\n      ];\r\n      for (const c of byDeviceAttempts) {\r\n        try { return await navigator.mediaDevices.getUserMedia(c); } catch { /* continue */ }\r\n      }\r\n\r\n      // Final fallback\r\n      return await navigator.mediaDevices.getUserMedia({ video: true, audio: false });\r\n    };\r\n\r\n    const startDocCamera = async () => {\r\n      try {\r\n        try { console.log('[MobileKycPage] camera:startDoc'); } catch {}\r\n        // Stop any existing document stream first\r\n        if (docStreamRef.current) {\r\n          try { docStreamRef.current.getTracks().forEach(t => t.stop()); } catch {}\r\n          docStreamRef.current = null;\r\n        }\r\n        const stream = await getRearStream();\r\n        if (docVideoRef.current) {\r\n          docVideoRef.current.srcObject = stream;\r\n          await docVideoRef.current.play().catch(() => {});\r\n        }\r\n        docStreamRef.current = stream;\r\n      } catch (e: any) {\r\n        try { console.log('[MobileKycPage] camera:errorDoc', e?.message || e); } catch {}\r\n        toast.error((e && (e.name || e.message)) ? `${e.name || 'Error'}: ${e.message || 'Could not start video source'}` : 'Could not start video source');\r\n        setIsDocScanMode(false);\r\n      }\r\n    };\r\n    if (step === \"DOCUMENT\" && isDocScanMode) {\r\n      startDocCamera();\r\n    }\r\n    return () => {\r\n      if (docStreamRef.current) {\r\n        docStreamRef.current.getTracks().forEach((t) => t.stop());\r\n        docStreamRef.current = null;\r\n      }\r\n    };\r\n  }, [step, isDocScanMode]);\r\n\r\n  // Check session status on each step\r\n  useEffect(() => {\r\n    let cancelled = false;\r\n    const checkStatus = async () => {\r\n      try {\r\n        const res: any = await sdk.getStatus(serverKey);\r\n        try { console.log('[MobileKycPage] status:check', res); } catch {}\r\n        if (cancelled) return;\r\n        const explicitStatus: string | undefined = res?.data?.status ?? res?.status;\r\n        if (explicitStatus && explicitStatus.toUpperCase() === \"EXPIRED\") {\r\n          setToastMessage(\"Session expired. Please start a new KYC session.\");\r\n          setTimeout(() => {\r\n            if (!cancelled) window.location.href = \"/\";\r\n          }, 2000);\r\n        }\r\n        // Drive UI using next_step/completed_steps\r\n        const suggested = mapStatusToStep(res);\r\n        if (suggested && suggested !== step) {\r\n          // If STATUS is suggested and we should show final status, also fetch it\r\n          if (suggested === \"STATUS\" && showFinalStatus) {\r\n            try {\r\n              const result = await sdk.getResult(serverKey);\r\n              setStatus(result);\r\n            } catch {\r\n              setStatus(res);\r\n            }\r\n          }\r\n          setStep(suggested);\r\n        }\r\n      } catch (e: any) {\r\n        // Ignore status check errors to avoid disrupting flow\r\n        try { console.log('[MobileKycPage] status:error', e?.message || e); } catch {}\r\n      }\r\n    };\r\n    checkStatus();\r\n    return () => { cancelled = true; };\r\n  }, [step, sdk]);\r\n\r\n  // On mount, hydrate step from status so refresh returns to the correct place\r\n  useEffect(() => {\r\n    let cancelled = false;\r\n    const hydrate = async () => {\r\n      try {\r\n        const res = await sdk.getStatus(serverKey);\r\n        try { console.log('[MobileKycPage] hydrate', res); } catch {}\r\n        if (cancelled) return;\r\n        const suggested = mapStatusToStep(res);\r\n        if (suggested) {\r\n          if (suggested === \"STATUS\" && showFinalStatus) {\r\n            try {\r\n              const result = await sdk.getResult(serverKey);\r\n              setStatus(result);\r\n            } catch {\r\n              setStatus(res);\r\n            }\r\n          }\r\n          setStep(suggested);\r\n        }\r\n      } catch {}\r\n    };\r\n    hydrate();\r\n    return () => { cancelled = true; };\r\n  }, []);\r\n\r\n  // Capture face from mobile camera\r\n  const handleFaceCapture = async () => {\r\n    try { console.log('[MobileKycPage] handleFaceCapture:start'); } catch {}\r\n    if (!videoRef.current) return;\r\n    setLoading(true);\r\n    try {\r\n      setFaceAlreadyRegistered(false);\r\n      const video = videoRef.current;\r\n      const canvas = document.createElement(\"canvas\");\r\n      const width = video.videoWidth || 640;\r\n      const height = video.videoHeight || 480;\r\n      canvas.width = width;\r\n      canvas.height = height;\r\n      const ctx = canvas.getContext(\"2d\");\r\n      if (!ctx) throw new Error(\"Canvas not supported\");\r\n      ctx.drawImage(video, 0, 0, width, height);\r\n      const dataUrl = canvas.toDataURL(\"image/jpeg\", 0.92);\r\n      // @ts-ignore\r\n     await sdk.uploadFace(await (await fetch(dataUrl)).blob(),  serverKey);\r\n      try { console.log('[MobileKycPage] handleFaceCapture:success'); } catch {}\r\n      setStep(\"DOCUMENT\");\r\n    } catch (err: any) {\r\n      const msg = getDisplayError(err) || \"Face capture failed\";\r\n      if (typeof msg === \"string\" && msg.toLowerCase().includes(\"face already registered\")) {\r\n        setFaceAlreadyRegistered(true);\r\n        toast.info(\"Face already registered. You can request a retry to scan again.\");\r\n      } else {\r\n        toast.error(msg);\r\n      }\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  const handleRetryFace = async () => {\r\n    if (!serverKey) {\r\n      toast.error(\"Missing server key for retry.\");\r\n      return;\r\n    }\r\n    setRetryingFace(true);\r\n    try {\r\n      await sdk.retrySession(serverKey);\r\n      setFaceAlreadyRegistered(false);\r\n      setStage(\"CENTER\");\r\n      setToastMessage(\"Retry processed. Please scan your face again.\");\r\n    } catch (err: any) {\r\n      toast.error(getDisplayError(err) || \"Unable to process retry\");\r\n    } finally {\r\n      setRetryingFace(false);\r\n    }\r\n  };\r\n\r\n  // Handle document upload\r\n  const handleDocumentUpload = async (event: React.ChangeEvent<HTMLInputElement>) => {\r\n    try { console.log('[MobileKycPage] handleDocumentUpload:start'); } catch {}\r\n    if (loading) return; // prevent concurrent actions\r\n    const file = event.target.files?.[0];\r\n    if (!file) return;\r\n    setDocFileName(file.name || \"\");\r\n    try {\r\n      // Show preview and defer actual upload until user confirms\r\n      const objectUrl = URL.createObjectURL(file);\r\n      setDocPreviewUrl(objectUrl);\r\n      docPendingBlobRef.current = file;\r\n    } catch (err: any) {\r\n      toast.error(getDisplayError(err) || \"Could not preview document\");\r\n    }\r\n  };\r\n\r\n  const handleConfirmDocumentUpload = async () => {\r\n    try { console.log('[MobileKycPage] handleConfirmDocumentUpload:start', { hasPending: Boolean(docPendingBlobRef.current), docType }); } catch {}\r\n    if (loading || !docPendingBlobRef.current) return;\r\n    setLoading(true);\r\n    try {\r\n      await sdk.uploadDocument(docPendingBlobRef.current, docType,serverKey);\r\n      if (showFinalStatus) {\r\n        setStep(\"STATUS\");\r\n        try {\r\n          const result = await sdk.getResult(serverKey);\r\n          setStatus(result);\r\n        } catch {\r\n          const res = await sdk.getStatus(serverKey);\r\n          setStatus(res);\r\n        }\r\n      } else {\r\n        setToastMessage(\"Document uploaded. Please return to desktop to check status.\");\r\n      }\r\n      setDocPreviewUrl(null);\r\n      docPendingBlobRef.current = null;\r\n      setDocFileName(\"\");\r\n    } catch (err: any) {\r\n      toast.error(getDisplayError(err) || \"Document upload failed\");\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  // Capture from back camera for document scan and upload\r\n  const handleDocumentScanCapture = async () => {\r\n    try { console.log('[MobileKycPage] handleDocumentScanCapture:start'); } catch {}\r\n    if (!docVideoRef.current) return;\r\n    setLoading(true);\r\n    try {\r\n      const video = docVideoRef.current;\r\n      const canvas = document.createElement(\"canvas\");\r\n      const width = video.videoWidth || 1280;\r\n      const height = video.videoHeight || 720;\r\n      canvas.width = width;\r\n      canvas.height = height;\r\n      const ctx = canvas.getContext(\"2d\");\r\n      if (!ctx) throw new Error(\"Canvas not supported\");\r\n      ctx.drawImage(video, 0, 0, width, height);\r\n      const dataUrl = canvas.toDataURL(\"image/jpeg\", 0.92);\r\n      const blob = await (await fetch(dataUrl)).blob();\r\n      await sdk.uploadDocument(blob, docType,serverKey);\r\n      try { console.log('[MobileKycPage] handleDocumentScanCapture:success'); } catch {}\r\n      setIsDocScanMode(false);\r\n      // Stop camera after capture\r\n      if (docStreamRef.current) {\r\n        docStreamRef.current.getTracks().forEach((t) => t.stop());\r\n        docStreamRef.current = null;\r\n      }\r\n      if (showFinalStatus) {\r\n        setStep(\"STATUS\");\r\n        try {\r\n          const result = await sdk.getResult(serverKey);\r\n          setStatus(result);\r\n        } catch {\r\n          const res = await sdk.getStatus(serverKey);\r\n          setStatus(res);\r\n        }\r\n      } else {\r\n        setToastMessage(\"Document scanned and uploaded. Please return to desktop to check status.\");\r\n      }\r\n    } catch (err: any) {\r\n      toast.error(getDisplayError(err) || \"Document scan failed\");\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  return (\r\n    <div style={{ \r\n      minHeight: \"100vh\", \r\n      background: \"#000000\", \r\n      padding: \"20px\",\r\n      fontFamily: \"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\"\r\n    }}>\r\n      <div style={{ \r\n        maxWidth: \"400px\", \r\n        margin: \"0 auto\", \r\n        background: \"#0b0f17\", \r\n        borderRadius: \"16px\", \r\n        padding: \"24px\",\r\n        boxShadow: \"0 4px 6px -1px rgba(0, 0, 0, 0.6)\"\r\n      }}>\r\n        {toastMessage && (\r\n          <div style={{\r\n            background: \"#065f46\",\r\n            color: \"#ffffff\",\r\n            padding: \"12px\",\r\n            borderRadius: \"8px\",\r\n            marginBottom: \"16px\",\r\n            textAlign: \"center\",\r\n            fontSize: \"14px\"\r\n          }}>\r\n            {toastMessage}\r\n          </div>\r\n        )}\r\n\r\n\r\n        {step === \"FACE\" && (\r\n          <div>\r\n            <h2 style={{ margin: \"0 0 16px 0\", fontSize: \"26px\", fontWeight: 700, color: \"#ffffff\", textAlign: \"center\" }}>\r\n              Capture Face\r\n            </h2>\r\n            <div style={{ display: \"grid\", gap: \"16px\" }}>\r\n              {!modelLoading && modelLoaded && !livenessFailed && (\r\n                <div style={{\r\n                  background: \"#0a2315\",\r\n                  color: \"#34d399\",\r\n                  padding: \"14px 16px\",\r\n                  borderRadius: \"12px\",\r\n                  fontSize: \"14px\",\r\n                  border: \"1px solid #155e3b\",\r\n                  textAlign: \"left\"\r\n                }}>\r\n                  Face detection model loaded.\r\n                </div>\r\n              )}\r\n              {modelLoading && !livenessFailed && (\r\n                <div style={{\r\n                  background: \"#1f2937\",\r\n                  color: \"#e5e7eb\",\r\n                  padding: \"14px 16px\",\r\n                  borderRadius: \"12px\",\r\n                  fontSize: \"14px\",\r\n                  border: \"1px solid #374151\",\r\n                  textAlign: \"left\"\r\n                }}>\r\n                  Loading face detection model...\r\n                </div>\r\n              )}\r\n              <div style={{ position: \"relative\", width: \"100%\", aspectRatio: \"1 / 1\", borderRadius: \"9999px\", overflow: \"hidden\", background: \"#000\" }}>\r\n                <video \r\n                  ref={videoRef} \r\n                  playsInline \r\n                  muted \r\n                  style={{ \r\n                    width: \"100%\", \r\n                    height: \"100%\",\r\n                    display: \"block\",\r\n                    background: \"#000\",\r\n                    objectFit: \"cover\",\r\n                    transform: \"scaleX(-1)\",\r\n                    transformOrigin: \"center\"\r\n                  }}\r\n                />\r\n                {/* Canvas for any drawing (kept below ring) */}\r\n                <canvas\r\n                  ref={faceCanvasRef}\r\n                  style={{\r\n                    position: \"absolute\",\r\n                    top: 0,\r\n                    left: 0,\r\n                    width: \"100%\",\r\n                    height: \"100%\",\r\n                    pointerEvents: \"none\",\r\n                    zIndex: 2\r\n                  }}\r\n                />\r\n                {/* Dotted green ring */}\r\n                <svg viewBox=\"0 0 100 100\" preserveAspectRatio=\"none\" style={{ position: \"absolute\", inset: 0, pointerEvents: \"none\", zIndex: 3 }}>\r\n                  <circle cx=\"50\" cy=\"50\" r=\"44\" fill=\"none\" stroke=\"#22c55e\" strokeWidth=\"2\" strokeDasharray=\"1 3\" />\r\n                </svg>\r\n              </div>\r\n              {!livenessFailed && (\r\n                <div style={{\r\n                  background: \"linear-gradient(180deg, rgba(17,24,39,0.9) 0%, rgba(17,24,39,0.6) 100%)\",\r\n                  color: \"#e5e7eb\",\r\n                  padding: \"16px\",\r\n                  borderRadius: \"14px\",\r\n                  fontSize: \"16px\",\r\n                  border: \"1px solid #30363d\"\r\n                }}>\r\n                  <div style={{ fontWeight: 700, marginBottom: 10, fontSize: 22, color: \"#ffffff\" }}>Liveness Check</div>\r\n                  <div style={{ marginBottom: 10, color: \"#e5e7eb\", fontSize: 16 }}>{livenessInstruction}</div>\r\n                  <div style={{ display: \"grid\", gap: 10, fontSize: 18 }}>\r\n                    <div style={{ opacity: livenessStage === \"CENTER\" || livenessStage === \"LEFT\" || livenessStage === \"RIGHT\" || livenessStage === \"DONE\" ? 1 : 0.4 }}>1. Look Straight</div>\r\n                    <div style={{ opacity: livenessStage === \"RIGHT\" || livenessStage === \"DONE\" ? 1 : 0.4 }}>2. Turn your face right</div>\r\n                    <div style={{ opacity: livenessStage === \"DONE\" ? 1 : 0.3 }}>3. Turn your face left</div>\r\n                  </div>\r\n                </div>\r\n              )}\r\n              <button\r\n                type=\"button\"\r\n                disabled={!cameraReady || loading || (!livenessFailed && livenessStage !== \"DONE\")}\r\n                onClick={handleFaceCapture}\r\n                style={{\r\n                  padding: \"14px 16px\",\r\n                  borderRadius: \"12px\",\r\n                  background: cameraReady && !loading && (livenessFailed || livenessStage === \"DONE\") ? \"#22c55e\" : \"#374151\",\r\n                  color: cameraReady && !loading && (livenessFailed || livenessStage === \"DONE\") ? \"#0b0f17\" : \"#e5e7eb\",\r\n                  fontSize: \"16px\",\r\n                  fontWeight: 700,\r\n                  cursor: cameraReady && !loading && (livenessFailed || livenessStage === \"DONE\") ? \"pointer\" : \"not-allowed\",\r\n                  border: \"none\"\r\n                }}\r\n              >\r\n                {loading\r\n                  ? \"Capturing...\"\r\n                  : (livenessFailed || livenessStage === \"DONE\")\r\n                    ? \"Capture & Continue\"\r\n                    : \"Complete steps to continue\"}\r\n              </button>\r\n              {faceAlreadyRegistered && (\r\n                <div style={{ marginTop: 12 }}>\r\n                  <p style={{ margin: \"0 0 8px 0\", color: \"#fbbf24\", fontSize: \"14px\" }}>\r\n                    Your face is already registered. Tap retry to request a new attempt, then scan your face again.\r\n                  </p>\r\n                  <button\r\n                    type=\"button\"\r\n                    onClick={handleRetryFace}\r\n                    disabled={retryingFace}\r\n                    style={{\r\n                      padding: \"12px 16px\",\r\n                      borderRadius: \"10px\",\r\n                      background: \"#f97316\",\r\n                      color: \"#0b0f17\",\r\n                      fontSize: \"15px\",\r\n                      fontWeight: 600,\r\n                      border: \"none\",\r\n                      cursor: retryingFace ? \"not-allowed\" : \"pointer\",\r\n                      width: \"100%\"\r\n                    }}\r\n                  >\r\n                    {retryingFace ? \"Processing retry...\" : \"Retry face scan\"}\r\n                  </button>\r\n                </div>\r\n              )}\r\n            </div>\r\n          </div>\r\n        )}\r\n\r\n        {step === \"DOCUMENT\" && (\r\n          <div>\r\n            <h2 style={{ margin: \"0 0 16px 0\", fontSize: \"20px\", fontWeight: \"700\", color: \"#ffffff\" }}>\r\n              Document\r\n            </h2>\r\n            {!isDocScanMode && (\r\n              <div style={{ display: \"grid\", gap: \"8px\", marginBottom: \"12px\" }}>\r\n                <button\r\n                  type=\"button\"\r\n                  onClick={() => fileInputRef.current?.click()}\r\n                  style={{\r\n                    width: \"100%\",\r\n                    padding: \"12px 16px\",\r\n                    borderRadius: \"8px\",\r\n                    border: \"2px dashed #374151\",\r\n                    background: \"#0f172a\",\r\n                    color: \"#e5e7eb\",\r\n                    fontSize: \"16px\",\r\n                    cursor: \"pointer\"\r\n                  }}\r\n                >\r\n                  Upload Document\r\n                </button>\r\n                <button\r\n                  type=\"button\"\r\n                  onClick={() => { setIsDocScanMode(true); }}\r\n                  style={{\r\n                    width: \"100%\",\r\n                    padding: \"12px 16px\",\r\n                    borderRadius: \"8px\",\r\n                    background: \"linear-gradient(90deg, #FF8A00 0%, #FF3D77 100%)\",\r\n                    color: \"#ffffff\",\r\n                    border: \"none\",\r\n                    fontSize: \"16px\",\r\n                    cursor: \"pointer\"\r\n                  }}\r\n                >\r\n                  Scan Document (Back Camera)\r\n                </button>\r\n              </div>\r\n            )}\r\n            <div style={{ display: \"flex\", gap: \"12px\", marginBottom: \"16px\" }}>\r\n              <label style={{ display: \"flex\", alignItems: \"center\", gap: \"6px\", color: \"#e5e7eb\" }}>\r\n                <input\r\n                  type=\"radio\"\r\n                  name=\"doc-type\"\r\n                  value=\"CNIC\"\r\n                  checked={docType === \"CNIC\"}\r\n                  defaultChecked\r\n                  onChange={() => setDocType(\"CNIC\")}\r\n                />\r\n                NIC\r\n              </label>\r\n              <label style={{ display: \"flex\", alignItems: \"center\", gap: \"6px\", color: \"#e5e7eb\" }}>\r\n                <input\r\n                  type=\"radio\"\r\n                  name=\"doc-type\"\r\n                  value=\"Passport\"\r\n                  checked={docType === \"Passport\"}\r\n                  onChange={() => setDocType(\"Passport\")}\r\n                />\r\n                Passport\r\n              </label>\r\n              <label style={{ display: \"flex\", alignItems: \"center\", gap: \"6px\", color: \"#e5e7eb\" }}>\r\n                <input\r\n                  type=\"radio\"\r\n                  name=\"doc-type\"\r\n                  value=\"DrivingLicense\"\r\n                  checked={docType === \"DrivingLicense\"}\r\n                  onChange={() => setDocType(\"DrivingLicense\")}\r\n                />\r\n              DrivingLicense\r\n              </label>\r\n            </div>\r\n            <input\r\n              ref={fileInputRef}\r\n              type=\"file\"\r\n              accept=\"image/*,.pdf\"\r\n              onChange={handleDocumentUpload}\r\n              style={{ display: \"none\" }}\r\n            />\r\n            {isDocScanMode && (\r\n              <div style={{ display: \"grid\", gap: \"12px\", marginTop: \"8px\" }}>\r\n                <div style={{ position: \"relative\", width: \"100%\", aspectRatio: \"3 / 4\", borderRadius: \"8px\", overflow: \"hidden\", background: \"#000\" }}>\r\n                  <video\r\n                    ref={docVideoRef}\r\n                    playsInline\r\n                    muted\r\n                    style={{ width: \"100%\", height: \"100%\", objectFit: \"cover\" }}\r\n                  />\r\n                </div>\r\n                <div style={{ display: \"flex\", gap: \"8px\" }}>\r\n                  <button\r\n                    type=\"button\"\r\n                    onClick={handleDocumentScanCapture}\r\n                    disabled={loading}\r\n                    style={{\r\n                      flex: 1,\r\n                      padding: \"12px 16px\",\r\n                      borderRadius: \"8px\",\r\n                      background: \"linear-gradient(90deg, #FF8A00 0%, #FF3D77 100%)\",\r\n                      color: \"#ffffff\",\r\n                      border: \"none\",\r\n                      fontSize: \"16px\",\r\n                      cursor: \"pointer\"\r\n                    }}\r\n                  >\r\n                    {loading ? \"Uploading...\" : \"Scan & Upload\"}\r\n                  </button>\r\n                  <button\r\n                    type=\"button\"\r\n                    onClick={() => { setIsDocScanMode(false); }}\r\n                    disabled={loading}\r\n                    style={{\r\n                      padding: \"12px 16px\",\r\n                      borderRadius: \"8px\",\r\n                      background: \"#111827\",\r\n                      color: \"#e5e7eb\",\r\n                      border: \"none\",\r\n                      fontSize: \"16px\",\r\n                      cursor: \"pointer\"\r\n                    }}\r\n                  >\r\n                    Cancel\r\n                  </button>\r\n                </div>\r\n                <p style={{ margin: 0, color: \"#9ca3af\", fontSize: \"12px\", textAlign: \"center\" }}>\r\n                  Align your document in the frame. Use good lighting.\r\n                </p>\r\n              </div>\r\n            )}\r\n            {docFileName && (\r\n              <div style={{\r\n                display: \"inline-flex\",\r\n                alignItems: \"center\",\r\n                gap: \"8px\",\r\n                padding: \"8px 12px\",\r\n                borderRadius: \"9999px\",\r\n                background: \"#1f2937\",\r\n                color: \"#e5e7eb\",\r\n                fontSize: \"14px\"\r\n              }}>\r\n                <span>✔</span>\r\n                <span>File selected</span>\r\n              </div>\r\n            )}\r\n            {loading && (\r\n              <p style={{ margin: \"12px 0 0 0\", color: \"#60a5fa\", textAlign: \"center\" }}>\r\n                Processing...\r\n              </p>\r\n            )}\r\n            <div style={{ height: 12 }} />\r\n            {!isDocScanMode && docPreviewUrl && (\r\n              <div style={{ marginTop: 12 }}>\r\n                <div style={{ fontWeight: 600, marginBottom: 6, color: \"#e5e7eb\" }}>Preview</div>\r\n                {/* eslint-disable-next-line jsx-a11y/img-redundant-alt */}\r\n                <img src={docPreviewUrl} alt=\"Document preview\" style={{ width: \"100%\", borderRadius: 8, border: \"1px solid #374151\" }} />\r\n                 <div style={{ display: \"grid\", gap: 8, gridTemplateColumns: \"1fr 1fr\", marginTop: 8 }}>\r\n                  <button\r\n                    type=\"button\"\r\n                    onClick={handleConfirmDocumentUpload}\r\n                    disabled={loading}\r\n                    style={{\r\n                      padding: \"12px 16px\",\r\n                      borderRadius: \"8px\",\r\n                      background: \"linear-gradient(90deg, #10b981 0%, #059669 100%)\",\r\n                      color: \"#ffffff\",\r\n                      border: \"none\",\r\n                      fontSize: \"16px\",\r\n                       cursor: \"pointer\",\r\n                       width: \"100%\"\r\n                    }}\r\n                  >\r\n                    {loading ? \"Uploading...\" : \"Looks good, continue\"}\r\n                  </button>\r\n                  <button\r\n                    type=\"button\"\r\n                    onClick={() => { setDocPreviewUrl(null); docPendingBlobRef.current = null; setDocFileName(\"\"); }}\r\n                    disabled={loading}\r\n                    style={{\r\n                       padding: \"12px 16px\",\r\n                      borderRadius: \"8px\",\r\n                      background: \"#111827\",\r\n                      color: \"#e5e7eb\",\r\n                      border: \"none\",\r\n                      fontSize: \"16px\",\r\n                       cursor: \"pointer\",\r\n                       width: \"100%\"\r\n                    }}\r\n                  >\r\n                    Retake / Choose again\r\n                  </button>\r\n                </div>\r\n              </div>\r\n            )}\r\n            {!isDocScanMode && !docFileName && !docPreviewUrl && (\r\n              <p style={{ margin: 0, color: \"#9ca3af\", fontSize: \"12px\", textAlign: \"center\" }}>\r\n                After uploading or scanning, return to your desktop to check status.\r\n              </p>\r\n            )}\r\n          </div>\r\n        )}\r\n\r\n        {step === \"STATUS\" && (\r\n          <div>\r\n            <h2 style={{ margin: \"0 0 16px 0\", fontSize: \"20px\", fontWeight: \"600\", color: \"#111827\" }}>\r\n              Verification Status\r\n            </h2>\r\n            {status ? (\r\n              <div style={{ background: \"#f3f4f6\", padding: 12, borderRadius: 8 }}>\r\n                {(() => {\r\n                  const data: any = status?.data ?? status;\r\n                  const reference: string | undefined = data?.reference ?? data?.ref;\r\n                  const email: string | undefined = data?.email;\r\n                  const faceStatus: string | undefined = data?.face_recognition_status ?? data?.face_status ?? data?.face ?? data?.faceRecognitionStatus;\r\n                  const kycStatus: string | undefined = data?.kyc_status ?? data?.status ?? status?.status;\r\n                  const redirectUrl: string | undefined = data?.redirect_url ?? data?.redirectUrl;\r\n                  return (\r\n                    <div style={{ display: \"grid\", gap: 8, color: \"#000\", padding: 0 }}>\r\n                      {reference && (\r\n                        <div><strong>Reference:</strong> {reference}</div>\r\n                      )}\r\n                      {email && (\r\n                        <div><strong>Email:</strong> {email}</div>\r\n                      )}\r\n                      {faceStatus && (\r\n                        <div><strong>Face Status:</strong> {String(faceStatus)}</div>\r\n                      )}\r\n                      {kycStatus && (\r\n                        <div><strong>KYC Status:</strong> {String(kycStatus)}</div>\r\n                      )}\r\n                      {redirectUrl && (\r\n                        <div style={{ overflowWrap: \"anywhere\" }}>\r\n                          <strong>Redirect URL:</strong> {redirectUrl}\r\n                        </div>\r\n                      )}\r\n                      {!reference && !email && !faceStatus && !kycStatus && !redirectUrl && (\r\n                        <pre style={{ margin: 0 }}>{JSON.stringify(status, null, 2)}</pre>\r\n                      )}\r\n                    </div>\r\n                  );\r\n                })()}\r\n              </div>\r\n            ) : (\r\n              <p style={{ color: \"#6b7280\" }}>No status available.</p>\r\n            )}\r\n          </div>\r\n        )}\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\n\r\n","import React from \"react\";\r\nimport { toast } from \"react-toastify\";\r\ninterface WebQRRedirectProps {\r\n  sessionId: string;\r\n  serverKey: string;\r\n}\r\n\r\n/**\r\n * Simple redirect page shown when QR code is scanned on web\r\n * Gives user option to continue on mobile for better camera quality\r\n */\r\nexport const WebQRRedirect: React.FC<WebQRRedirectProps> = ({ sessionId, serverKey }) => {\r\n  const search = typeof window !== \"undefined\" ? window.location.search : \"\";\r\n  const mobileUrl = `https://astra-sdk-testing.vercel.app/mobile-kyc/${sessionId}${search}`;\r\n  \r\n  const handleContinueOnMobile = () => {\r\n    // Copy mobile URL to clipboard\r\n    navigator.clipboard.writeText(`${mobileUrl}`).then(() => {\r\n      toast.success('Mobile URL copied to clipboard! Open it on your mobile device.');\r\n    }).catch(() => {\r\n      // Fallback if clipboard API fails\r\n      const textArea = document.createElement('textarea');\r\n      textArea.value = `${mobileUrl}`;\r\n      document.body.appendChild(textArea);\r\n      textArea.select();\r\n      document.execCommand('copy');\r\n      document.body.removeChild(textArea);\r\n      toast.success('Mobile URL copied! Open it on your mobile device.');\r\n    });\r\n  };\r\n\r\n  const handleContinueOnWeb = () => {\r\n    // Continue KYC on web by redirecting to mobile page (it will work on web too)\r\n    window.location.href = `https://astra-sdk-testing.vercel.app/mobile-kyc/${sessionId}${search}`;\r\n  };\r\n\r\n  return (\r\n    <div className=\"qr-fullscreen\">\r\n      <div style={{ \r\n        textAlign: \"center\", \r\n        padding: \"32px\",\r\n        background: \"#ffffff\",\r\n        borderRadius: \"16px\",\r\n        boxShadow: \"0 4px 6px -1px rgba(0, 0, 0, 0.1)\",\r\n        maxWidth: \"400px\",\r\n        width: \"100%\",\r\n        marginTop: \"20px\",\r\n        marginBottom: \"20px\"\r\n      }}>\r\n        <div style={{ fontSize: \"48px\", marginBottom: \"16px\" }}>📱</div>\r\n        \r\n        <h1 style={{ \r\n          margin: \"0 0 16px 0\", \r\n          color: \"#1f2937\", \r\n          fontSize: \"24px\",\r\n          fontWeight: \"600\"\r\n        }}>\r\n          Continue on Mobile\r\n        </h1>\r\n        \r\n        <p style={{ \r\n          margin: \"0 0 24px 0\", \r\n          color: \"#6b7280\", \r\n          fontSize: \"16px\",\r\n          lineHeight: \"1.5\"\r\n        }}>\r\n          For the best KYC experience with high-quality camera capture, \r\n          we recommend continuing on your mobile device. However, you can \r\n          also continue on web if you prefer.\r\n        </p>\r\n\r\n        <div style={{ \r\n          background: \"#f3f4f6\",\r\n          padding: \"16px\",\r\n          borderRadius: \"8px\",\r\n          marginBottom: \"24px\",\r\n          fontSize: \"14px\",\r\n          color: \"#374151\",\r\n          wordBreak: \"break-all\"\r\n        }}>\r\n          <strong>Mobile URL:</strong><br />\r\n          {mobileUrl}\r\n        </div>\r\n\r\n        <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"12px\" }}>\r\n          <button\r\n            onClick={handleContinueOnWeb}\r\n            style={{\r\n              width: \"100%\",\r\n              padding: \"12px 16px\",\r\n              background: \"#1f6feb\",\r\n              color: \"white\",\r\n              border: \"none\",\r\n              borderRadius: \"8px\",\r\n              fontSize: \"16px\",\r\n              fontWeight: \"500\",\r\n              cursor: \"pointer\",\r\n              display: \"flex\",\r\n              alignItems: \"center\",\r\n              justifyContent: \"center\",\r\n              gap: \"8px\"\r\n            }}\r\n          >\r\n            🖥️ Continue on Web\r\n          </button>\r\n\r\n          <button\r\n            onClick={handleContinueOnMobile}\r\n            style={{\r\n              width: \"100%\",\r\n              padding: \"12px 16px\",\r\n              background: \"transparent\",\r\n              color: \"#6b7280\",\r\n              border: \"1px solid #d1d5db\",\r\n              borderRadius: \"8px\",\r\n              fontSize: \"16px\",\r\n              cursor: \"pointer\",\r\n              display: \"flex\",\r\n              alignItems: \"center\",\r\n              justifyContent: \"center\",\r\n              gap: \"8px\"\r\n            }}\r\n          >\r\n            📋 Copy Mobile URL\r\n          </button>\r\n        </div>\r\n\r\n        <p style={{ \r\n          margin: \"16px 0 0 0\", \r\n          color: \"#9ca3af\", \r\n          fontSize: \"12px\" \r\n        }}>\r\n          Session ID: {sessionId}\r\n        </p>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { toast } from \"react-toastify\";\r\nimport { MobileKycPage } from \"./MobileKycPage\";\r\nimport { WebQRRedirect } from \"./WebQRRedirect\";\r\nimport VerificationSDK from \"../VerificationSDK\";\r\n\r\nimport \"./kycModal.css\";\r\n\r\ninterface MobileKycRouterProps {\r\n  sdk?: VerificationSDK;\r\n  serverKey?: string;\r\n  apiBaseUrl?: string;\r\n}\r\n\r\n/**\r\n * Mobile KYC Router Component\r\n * Handles routing for mobile KYC continuation\r\n * Usage: <MobileKycRouter serverKey=\"your-server-key\" />\r\n */\r\nexport const MobileKycRouter: React.FC<MobileKycRouterProps> = ({ sdk: providedSdk, apiBaseUrl }) => {\r\n  try { console.log('[MobileKycRouter] render', { hasServerKeyProp: Boolean(providedSdk?.serverKey) }); } catch {}\r\n  const [sessionId, setSessionId] = useState<string | null>(null);\r\n  const [isScanning, setIsScanning] = useState(false);\r\n  const [isWebDevice, setIsWebDevice] = useState(false);\r\n  const [effectiveKey, setEffectiveKey] = useState<string | null>(providedSdk?.serverKey || null);\r\n\r\n  // Extract session ID from URL path or QR code scan\r\n  const getSessionIdFromUrl = (): string | null => {\r\n    const path = window.location.pathname;\r\n    const hash = window.location.hash || \"\";\r\n    // Prefer clean path; fall back to hash if present\r\n    const pathMatch = path.match(/\\/mobile-kyc\\/([a-f0-9-]+)/i);\r\n    if (pathMatch) return pathMatch[1];\r\n    const hashMatch = hash.match(/mobile-kyc\\/([a-f0-9-]+)/i);\r\n    return hashMatch ? hashMatch[1] : null;\r\n  };\r\n\r\n  // Handle QR code scanning\r\n  const handleQRCodeScan = (qrData: string) => {\r\n    try {\r\n      try { console.log('[MobileKycRouter] handleQRCodeScan', { qrData }); } catch {}\r\n      // Accept multiple formats:\r\n      // 1) Full URL like https://host/mobile-kyc/<sessionId>\r\n      // 2) \"mobile-kyc:<sessionId>\"\r\n      // 3) Raw <sessionId>\r\n      let sessionIdFromQR = qrData;\r\n      // Extract from URL path if present\r\n      const urlMatch = qrData.match(/\\/mobile-kyc\\/(.*?)($|[?#\\s])/i);\r\n      if (urlMatch && urlMatch[1]) {\r\n        sessionIdFromQR = decodeURIComponent(urlMatch[1]);\r\n      } else if (qrData.includes(':')) {\r\n        // Fallback to colon-delimited schema\r\n        sessionIdFromQR = qrData.split(':').pop() || qrData;\r\n      }\r\n      \r\n      if (sessionIdFromQR && sessionIdFromQR.match(/^[a-z0-9-]+$/i)) {\r\n        setSessionId(sessionIdFromQR);\r\n        setIsScanning(false);\r\n        // Preserve existing query string (e.g., ?mode=face) and normalize to path (no hash)\r\n        const search = window.location.search || '';\r\n        window.history.pushState({}, '', `/mobile-kyc/${sessionIdFromQR}${search}`);\r\n      } else {\r\n        toast.error('Invalid QR code. Please scan the QR code from the web version.');\r\n      }\r\n    } catch (error) {\r\n      console.error('Error parsing QR code:', error);\r\n      toast.error('Error reading QR code. Please try again.');\r\n    }\r\n  };\r\n\r\n  // Detect if user is on mobile device\r\n  const isMobileDevice = () => {\r\n    return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\r\n  };\r\n\r\n  // Initialize session ID from URL\r\n  useEffect(() => {\r\n    const urlSessionId = getSessionIdFromUrl();\r\n    const isMobile = isMobileDevice();\r\n    \r\n    setIsWebDevice(!isMobile);\r\n    try {\r\n      const params = new URLSearchParams(window.location.search || \"\");\r\n      const key = params.get(\"key\");\r\n      if (!effectiveKey && key) setEffectiveKey(key);\r\n      try { console.log('[MobileKycRouter] effect:init', { urlSessionId, isMobile, key }); } catch {}\r\n    } catch {}\r\n    \r\n    if (urlSessionId) {\r\n      setSessionId(urlSessionId);\r\n      // If URL had a hash-based form, normalize to clean path while preserving query params\r\n      const hadHash = (window.location.hash || '').includes('/mobile-kyc/');\r\n      if (hadHash) {\r\n        const search = window.location.search || '';\r\n        window.history.replaceState({}, '', `/mobile-kyc/${urlSessionId}${search}`);\r\n      }\r\n    } else {\r\n      setIsScanning(true);\r\n    }\r\n  }, []);\r\n\r\n  // QR Code Scanner Component\r\n  const QRCodeScanner = () => (\r\n    <div className=\"qr-fullscreen\">\r\n      <div style={{ \r\n        textAlign: \"center\", \r\n        padding: \"24px\",\r\n        background: \"#ffffff\",\r\n        borderRadius: \"16px\",\r\n        boxShadow: \"0 4px 6px -1px rgba(0, 0, 0, 0.1)\",\r\n        maxWidth: \"400px\",\r\n        width: \"100%\",\r\n        marginTop: \"auto\",\r\n        marginBottom: \"auto\",\r\n        flexShrink: 0\r\n      }}>\r\n        <h1 style={{ margin: \"0 0 16px 0\", color: \"#1f2937\", fontSize: \"24px\" }}>\r\n          Scan QR Code\r\n        </h1>\r\n        <p style={{ margin: \"0 0 24px 0\", color: \"#6b7280\", fontSize: \"16px\" }}>\r\n          Scan the QR code from the web version to continue your KYC on mobile.\r\n        </p>\r\n        \r\n        {/* Simple QR Code Input for testing - in production, use a proper QR scanner library */}\r\n        <div style={{ marginBottom: \"16px\" }}>\r\n          <input\r\n            type=\"text\"\r\n            placeholder=\"Paste QR code data here (for testing)\"\r\n            style={{\r\n              width: \"100%\",\r\n              padding: \"12px\",\r\n              border: \"1px solid #d1d5db\",\r\n              borderRadius: \"8px\",\r\n              fontSize: \"14px\",\r\n              marginBottom: \"12px\"\r\n            }}\r\n            onKeyPress={(e) => {\r\n              if (e.key === 'Enter') {\r\n                handleQRCodeScan(e.currentTarget.value);\r\n              }\r\n            }}\r\n          />\r\n          <button\r\n            onClick={() => {\r\n              const input = document.querySelector('input[type=\"text\"]') as HTMLInputElement;\r\n              if (input?.value) {\r\n                handleQRCodeScan(input.value);\r\n              }\r\n            }}\r\n            style={{\r\n              width: \"100%\",\r\n              padding: \"12px\",\r\n              background: \"#1f6feb\",\r\n              color: \"white\",\r\n              border: \"none\",\r\n              borderRadius: \"8px\",\r\n              fontSize: \"16px\",\r\n              cursor: \"pointer\"\r\n            }}\r\n          >\r\n            Continue\r\n          </button>\r\n        </div>\r\n\r\n        <p style={{ margin: \"0\", color: \"#9ca3af\", fontSize: \"12px\" }}>\r\n          For production: Integrate with a QR code scanner library like 'qr-scanner' or 'html5-qrcode'\r\n        </p>\r\n      </div>\r\n    </div>\r\n  );\r\n\r\n  // If on web device and has session ID, show redirect page with option to continue\r\n  if (isWebDevice && sessionId) {\r\n    try { console.log('[MobileKycRouter] render:WebQRRedirect', { sessionId, hasKey: Boolean(effectiveKey) }); } catch {}\r\n    return <WebQRRedirect sessionId={sessionId} serverKey={providedSdk?.serverKey || \"\"} />;\r\n  }\r\n\r\n  if (isScanning) {\r\n    try { console.log('[MobileKycRouter] render:QRCodeScanner'); } catch {}\r\n    return <QRCodeScanner />;\r\n  }\r\n\r\n  if (!sessionId) {\r\n    try { console.log('[MobileKycRouter] render:NoSession'); } catch {}\r\n    return (\r\n      <div className=\"qr-fullscreen\">\r\n        <div style={{ \r\n          textAlign: \"center\", \r\n          padding: \"24px\",\r\n          background: \"#ffffff\",\r\n          borderRadius: \"16px\",\r\n          boxShadow: \"0 4px 6px -1px rgba(0, 0, 0, 0.1)\",\r\n          marginTop: \"20px\",\r\n          maxWidth: \"400px\",\r\n          width: \"100%\"\r\n        }}>\r\n          <h1 style={{ margin: \"0 0 16px 0\", color: \"#dc2626\" }}>Invalid Session</h1>\r\n          <p style={{ margin: \"0\", color: \"#6b7280\" }}>\r\n            Please scan the QR code from the web version to continue your KYC.\r\n          </p>\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  try { console.log('[MobileKycRouter] render:MobileKycPage', { sessionId, hasKey: Boolean(effectiveKey) }); } catch {}\r\n  return <MobileKycPage sessionId={sessionId} serverKey={effectiveKey|| \"\"} sdk={providedSdk} apiBaseUrl={apiBaseUrl} />;\r\n};\r\n","import React, { useEffect, useRef, useState } from \"react\";\r\nimport { toast } from \"react-toastify\";\r\nimport VerificationSDK from \"../VerificationSDK\";\r\nimport \"./kycModal.css\";\r\n\r\ninterface KycInitFormProps {\r\n  sdk?: VerificationSDK;\r\n  serverKey?: string;\r\n  defaultValues?: {\r\n    reference?: string;\r\n    email?: string;\r\n    callback_url?: string;\r\n    redirect_url?: string;\r\n  };\r\n  onStarted?: (sdk: VerificationSDK) => void;\r\n  qrOnlyMode?: boolean;\r\n  hideCameraPreview?: boolean;\r\n  onFaceCompleted?: () => void;\r\n  pollIntervalMs?: number;\r\n}\r\n\r\nexport const KycInitForm: React.FC<KycInitFormProps> = ({\r\n  sdk: providedSdk,\r\n  serverKey,\r\n  defaultValues,\r\n  onStarted,\r\n  qrOnlyMode,\r\n  hideCameraPreview,\r\n  onFaceCompleted,\r\n  pollIntervalMs = 20000,\r\n}) => {\r\n  const [reference, setReference] = useState(defaultValues?.reference || \"\");\r\n  const [email, setEmail] = useState(defaultValues?.email || \"\");\r\n  const [callbackUrl, setCallbackUrl] = useState(\r\n    defaultValues?.callback_url || \"\"\r\n  );\r\n  const [redirectUrl, setRedirectUrl] = useState(\r\n    defaultValues?.redirect_url || \"\"\r\n  );\r\n  const [loading, setLoading] = useState(false);\r\n  const [qrCode, setQrCode] = useState<string | null>(null);\r\n  const [sessionId, setSessionId] = useState<string | null>(null);\r\n  const [showCamera, setShowCamera] = useState(false);\r\n  const videoRef = useRef<HTMLVideoElement | null>(null);\r\n  const streamRef = useRef<MediaStream | null>(null);\r\n  const [polling, setPolling] = useState(false);\r\n  const pollingRef = useRef<number | null>(null);\r\n\r\n  const sdk = providedSdk || new VerificationSDK({ serverKey: serverKey || \"\" });\r\n\r\n  const uiDefaults =\r\n    sdk && (sdk as any).getUiConfig ? (sdk as any).getUiConfig() : {};\r\n  const styles = uiDefaults.styles || {};\r\n  const classNames = uiDefaults.classNames || {};\r\n\r\n  // Stop camera and polling on unmount\r\n  useEffect(() => {\r\n    return () => {\r\n      if (streamRef.current) {\r\n        streamRef.current.getTracks().forEach((t) => t.stop());\r\n        streamRef.current = null;\r\n      }\r\n      if (pollingRef.current) {\r\n        window.clearInterval(pollingRef.current);\r\n        pollingRef.current = null;\r\n      }\r\n    };\r\n  }, []);\r\n\r\n  const onSubmit = async (e: React.FormEvent) => {\r\n    e.preventDefault();\r\n    console.log(\"[KYC] onSubmit triggered\");\r\n\r\n    // sdk is always available (constructed with empty key if none provided)\r\n    setLoading(true);\r\n\r\n    try {\r\n      // Initialize session with user-provided values\r\n      const res = await sdk.init({\r\n        reference: reference.trim(),\r\n        email: email.trim(),\r\n        callback_url: callbackUrl.trim(),\r\n        redirect_url: redirectUrl.trim(),\r\n        device_type: \"WEB\",\r\n      });\r\n      const sessionIdFromRes = (res as any)?.data?.session_id as string | undefined;\r\n      if (!sessionIdFromRes) throw new Error(\"Init succeeded but session_id missing\");\r\n\r\n      try { localStorage.setItem(\"kyc_session_id\", sessionIdFromRes); } catch {}\r\n      if ((sdk as any).setSessionId) { (sdk as any).setSessionId(sessionIdFromRes); }\r\n      setSessionId(sessionIdFromRes);\r\n\r\n      // Move directly to face scan step (showCamera = true)\r\n      setShowCamera(true);\r\n      setQrCode(null);\r\n      setPolling(false);\r\n\r\n      onStarted?.(sdk);\r\n    } catch (err: any) {\r\n      toast.error(err?.message || \"Failed to initialize KYC session\");\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  // If QR-only mode is requested, auto-init without showing the form\r\n  useEffect(() => {\r\n    const autoStart = async () => {\r\n      if (!qrOnlyMode) return;\r\n      // sdk is always available\r\n      // Use defaults from fields (already in state)\r\n      if (!reference || !email || !callbackUrl || !redirectUrl) return; // wait till defaults are in state\r\n      if (qrCode) return; // already started\r\n      setLoading(true);\r\n      try {\r\n        const res = await sdk.init({\r\n          reference: reference.trim(),\r\n          email: email.trim(),\r\n          callback_url: callbackUrl.trim(),\r\n          redirect_url: redirectUrl.trim(),\r\n          device_type: \"WEB\",\r\n        });\r\n        const sid = (res as any)?.data?.session_id as string | undefined;\r\n        if (!sid) throw new Error(\"Init succeeded but session_id missing\");\r\n        try { localStorage.setItem(\"kyc_session_id\", sid); } catch {}\r\n        if ((sdk as any).setSessionId) { (sdk as any).setSessionId(sid); }\r\n        setSessionId(sid);\r\n        const keyParam = (serverKey && serverKey.length) ? `&key=${encodeURIComponent(serverKey)}` : \"\";\r\n        const origin = (typeof window !== 'undefined' && window.location && window.location.origin) ? window.location.origin : '';\r\n        const mobileUrl = `${origin}/mobile-kyc/${encodeURIComponent(sid)}?mode=face${keyParam}`;\r\n        setQrCode(mobileUrl);\r\n        setPolling(true);\r\n        pollingRef.current = window.setInterval(async () => {\r\n          try {\r\n            const status: any = await sdk.getStatus(sdk?.getServerKey());\r\n            const data: any = status?.data ?? status;\r\n            const faceStatus: string | undefined = data?.face_recognition_status || data?.face_status || data?.face || data?.faceRecognitionStatus;\r\n            if (typeof faceStatus === \"string\" && faceStatus.toUpperCase() === \"COMPLETED\") {\r\n              if (pollingRef.current) {\r\n                window.clearInterval(pollingRef.current);\r\n                pollingRef.current = null;\r\n              }\r\n              setPolling(false);\r\n              onFaceCompleted?.();\r\n            }\r\n          } catch {}\r\n        }, Math.max(1000, pollIntervalMs));\r\n        onStarted?.(sdk);\r\n      } catch (err: any) {\r\n        toast.error(err?.message || \"Failed to initialize KYC session\");\r\n      } finally {\r\n        setLoading(false);\r\n      }\r\n    };\r\n    autoStart();\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [qrOnlyMode, reference, email, callbackUrl, redirectUrl, sdk]);\r\n\r\n  return (\r\n    <div style={{ maxWidth: 480, margin: \"0 auto\", zIndex: 1000 }}>\r\n      {!qrCode && !qrOnlyMode ? (\r\n        <form\r\n          onSubmit={onSubmit}\r\n          className={classNames?.container || \"\"}\r\n          style={styles?.container || {}}\r\n        >\r\n          <h2 className={classNames?.title || \"kyc-title\"} style={styles?.title}>\r\n            Start KYC\r\n          </h2>\r\n\r\n\r\n          <div style={{ display: \"grid\", gap: 8 }}>\r\n            <input\r\n              className={classNames?.input || \"kyc-input\"}\r\n              style={styles?.input}\r\n              placeholder=\"Reference\"\r\n              value={reference}\r\n              onChange={(e) => setReference(e.target.value)}\r\n            />\r\n            <input\r\n              className={classNames?.input || \"kyc-input\"}\r\n              style={styles?.input}\r\n              placeholder=\"Email\"\r\n              type=\"email\"\r\n              value={email}\r\n              onChange={(e) => setEmail(e.target.value)}\r\n            />\r\n            <input\r\n              className={classNames?.input || \"kyc-input\"}\r\n              style={styles?.input}\r\n              placeholder=\"Callback URL\"\r\n              value={callbackUrl}\r\n              onChange={(e) => setCallbackUrl(e.target.value)}\r\n            />\r\n            <input\r\n              className={classNames?.input || \"kyc-input\"}\r\n              style={styles?.input}\r\n              placeholder=\"Redirect URL\"\r\n              value={redirectUrl}\r\n              onChange={(e) => setRedirectUrl(e.target.value)}\r\n            />\r\n          </div>\r\n\r\n          <button\r\n            type=\"submit\"\r\n            className={classNames?.input || \"kyc-input\"}\r\n            style={{\r\n              ...(styles?.input || {}),\r\n              marginTop: 10,\r\n              background: \"linear-gradient(90deg, #FF8A00 0%, #FF3D77 100%)\",\r\n              color: \"#fff\",\r\n              border: \"none\",\r\n              borderRadius: 8,\r\n              padding: 10,\r\n              cursor: \"pointer\",\r\n            }}\r\n            disabled={\r\n              loading || !reference || !email || !callbackUrl || !redirectUrl\r\n            }\r\n          >\r\n            {loading ? \"Starting...\" : \"Start KYC\"}\r\n          </button>\r\n        </form>\r\n      ) : (\r\n        <div style={{ marginTop: 20 }}>\r\n          <div style={{ display: \"grid\", gap: 12 }}>\r\n            {!hideCameraPreview && (\r\n              <div>\r\n                <h3 style={{ margin: \"0 0 8px 0\" }}>Camera</h3>\r\n                <video\r\n                  ref={videoRef}\r\n                  playsInline\r\n                  muted\r\n                  style={{ width: \"100%\", borderRadius: 8, background: \"#000\", aspectRatio: \"4/3\" }}\r\n                />\r\n              </div>\r\n            )}\r\n            <div style={{ textAlign: \"center\" }}>\r\n              <h3 style={{ margin: \"8px 0\" }}>Scan on Mobile to Continue</h3>\r\n              {/* Render QR image based on mobile link using a public encoder */}\r\n              <img\r\n                src={`https://api.qrserver.com/v1/create-qr-code/?size=220x220&data=${encodeURIComponent(qrCode || \"\")}`}\r\n                alt=\"KYC QR Code\"\r\n                style={{\r\n                  maxWidth: 220,\r\n                  border: \"1px solid #ddd\",\r\n                  borderRadius: 8,\r\n                  padding: 5,\r\n                }}\r\n              />\r\n              {sessionId && (\r\n                <p style={{ fontSize: 12, color: \"#666\", marginTop: 8 }}>\r\n              Or open: {`${(typeof window !== 'undefined' && window.location && window.location.origin) ? window.location.origin : ''}/mobile-kyc/${sessionId}?mode=face${serverKey ? `&key=${encodeURIComponent(serverKey)}` : \"\"}`}\r\n                </p>\r\n              )}\r\n              {polling && (\r\n                <p style={{ fontSize: 12, color: \"#1f6feb\", marginTop: 8 }}>\r\n                  Waiting for face capture to complete on mobile...\r\n                </p>\r\n              )}\r\n            </div>\r\n          </div>\r\n        </div>\r\n      )}\r\n    </div>\r\n  );\r\n};\r\n","import React from \"react\";\r\nimport \"./kycModal.css\";\r\n\r\ninterface TermsScreenProps {\r\n  title?: string;\r\n  termsHtml?: string;\r\n  onAccept: () => void;\r\n  onDecline: () => void;\r\n  classNames?: {\r\n    backdrop?: string;\r\n    container?: string;\r\n    title?: string;\r\n    input?: string;\r\n  };\r\n  styles?: {\r\n    backdrop?: React.CSSProperties;\r\n    container?: React.CSSProperties;\r\n    title?: React.CSSProperties;\r\n    input?: React.CSSProperties;\r\n  };\r\n}\r\n\r\nexport const TermsScreen: React.FC<TermsScreenProps> = ({\r\n  title = \"Terms & Conditions\",\r\n  termsHtml = \"<p>You are required to provide a valid government-issued ID and complete a face verification scan. Ensure your information is accurate and the process is completed in one session.</p>\",\r\n  onAccept,\r\n  onDecline,\r\n  classNames,\r\n  styles,\r\n}) => {\r\n  return (\r\n    <div className={`kyc-backdrop ${classNames?.backdrop || \"\"}`} style={styles?.backdrop}>\r\n      <div className={`kyc-container ${classNames?.container || \"\"}`} style={styles?.container}>\r\n        <h2 className={`kyc-title ${classNames?.title || \"\"}`} style={styles?.title}>{title}</h2>\r\n        <div\r\n          style={{\r\n            maxHeight: 260,\r\n            overflow: \"auto\",\r\n            padding: 0,\r\n            margin: \"6px 0 16px 0\",\r\n            color: \"#111827\",\r\n            lineHeight: 1.6,\r\n            fontSize: 14\r\n          }}\r\n          dangerouslySetInnerHTML={{ __html: termsHtml }}\r\n        />\r\n        <div style={{ display: \"grid\", gap: 8, gridTemplateColumns: \"1fr 1fr\", alignItems: \"center\" }}>\r\n          <button\r\n            type=\"button\"\r\n            className={`kyc-input ${classNames?.input || \"\"}`}\r\n            style={{\r\n              ...(styles?.input || {}),\r\n              background: \"linear-gradient(90deg, #FF8A00 0%, #FF3D77 100%)\",\r\n              color: \"#fff\",\r\n              border: \"none\",\r\n              borderRadius: 8,\r\n              padding: 10,\r\n              cursor: \"pointer\"\r\n            }}\r\n            onClick={onAccept}\r\n          >\r\n            Accept\r\n          </button>\r\n          <button\r\n            type=\"button\"\r\n            className={`kyc-input ${classNames?.input || \"\"}`}\r\n            style={{ ...(styles?.input || {}), background: \"\", color: \"#6b7280\", border: \"1px solid #d1d5db\", borderRadius: 8, padding: 10, cursor: \"pointer\" }}\r\n            onClick={onDecline}\r\n          >\r\n            Cancel\r\n          </button>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\n\r\n","import React, { useState, useEffect, useCallback, useRef } from \"react\";\r\nimport { toast } from \"react-toastify\";\r\nimport VerificationSDK from \"../VerificationSDK\";\r\nimport \"./kycModal.css\";\r\n\r\ninterface KycFlowProps {\r\n  sdk?: VerificationSDK;\r\n  serverKey?: string;\r\n  sessionId?: string;\r\n  startAtQr?: boolean;\r\n  pollIntervalMs?: number;\r\n  onClose?: () => void;\r\n  apiBaseUrl?: string;\r\n  mobileBaseUrl?: string;\r\n}\r\n\r\nexport const KycFlow: React.FC<KycFlowProps> = ({ \r\n  sdk: providedSdk, \r\n  serverKey, \r\n  sessionId: externalSessionId,\r\n  startAtQr = true, \r\n  pollIntervalMs = 20000, \r\n  onClose, \r\n  apiBaseUrl,\r\n  mobileBaseUrl = \"https://api.probusiness.astraprotocol.com\"\r\n}) => {\r\n  // console.log('[KycFlow] render', { \r\n  //   hasProvidedSdk: Boolean(), \r\n  //   hasServerKey: Boolean(providedSdk?.serverKey), \r\n  //   externalSessionId, \r\n  //   startAtQr, \r\n  //   apiBaseUrl \r\n  // });\r\n\r\n  const [sdkInstance, setSdkInstance] = useState<VerificationSDK | null>(null);\r\n  const [showQrScreen, setShowQrScreen] = useState<boolean>(startAtQr);\r\n  const [waitingForMobile, setWaitingForMobile] = useState<boolean>(false);\r\n  const [finalStatus, setFinalStatus] = useState<any>(null);\r\n  const hasClosedRef = useRef(false);\r\n\r\n  const clearSessionArtifacts = useCallback(() => {\r\n    if (typeof window === \"undefined\" || typeof window.localStorage === \"undefined\") return;\r\n    try {\r\n      window.localStorage.removeItem(\"kyc_session_id\");\r\n      window.localStorage.removeItem(\"kyc_face_done\");\r\n      window.localStorage.removeItem(\"kyc_qrcode_url\");\r\n    } catch (error) {\r\n      try {\r\n        console.warn(\"[KycFlow] clearSessionArtifacts:error\", error);\r\n      } catch {}\r\n    }\r\n  }, []);\r\n\r\n  const closeFlow = useCallback(\r\n    (reason: \"user-dismiss\" | \"completed\" = \"user-dismiss\") => {\r\n      if (hasClosedRef.current) return;\r\n      hasClosedRef.current = true;\r\n      try {\r\n        sdkInstance?.resetSession?.();\r\n      } catch (error) {\r\n        try {\r\n          console.warn(\"[KycFlow] closeFlow:resetSession:error\", error);\r\n        } catch {}\r\n      }\r\n\r\n      clearSessionArtifacts();\r\n      setShowQrScreen(false);\r\n      setWaitingForMobile(false);\r\n      setFinalStatus(null);\r\n\r\n      try {\r\n        // console.log(\"[KycFlow] closeFlow\", { reason });\r\n      } catch {}\r\n\r\n      if (onClose) {\r\n        onClose();\r\n      }\r\n    },\r\n    [clearSessionArtifacts, onClose, sdkInstance]\r\n  );\r\n\r\n  useEffect(() => {\r\n    hasClosedRef.current = false;\r\n  }, [sdkInstance, externalSessionId]);\r\n\r\n  useEffect(() => {\r\n    if (showQrScreen || waitingForMobile || finalStatus) {\r\n      hasClosedRef.current = false;\r\n    }\r\n  }, [showQrScreen, waitingForMobile, finalStatus]);\r\n\r\n  const isTerminalStatus = useCallback((result: any): boolean => {\r\n    if (!result) return false;\r\n    const data: any = result?.data ?? result ?? {};\r\n    const rawValues = [\r\n      data?.kyc_status,\r\n      data?.status,\r\n      data?.result,\r\n      data?.overall_status,\r\n      data?.face_status,\r\n      data?.decision,\r\n    ];\r\n\r\n    const terminalTokens = [\"approved\", \"completed\", \"complete\", \"success\", \"verified\", \"passed\", \"rejected\", \"failed\", \"declined\"];\r\n\r\n    return rawValues.some((value) => {\r\n      if (typeof value !== \"string\") return false;\r\n      const normalized = value.trim().toLowerCase();\r\n      if (!normalized) return false;\r\n      if (\r\n        normalized.includes(\"pending\") ||\r\n        normalized.includes(\"progress\") ||\r\n        normalized.includes(\"processing\") ||\r\n        normalized.includes(\"awaiting\") ||\r\n        normalized.includes(\"incomplete\")\r\n      ) {\r\n        return false;\r\n      }\r\n      const tokens = normalized.split(/[^a-z]+/).filter(Boolean);\r\n      return tokens.some((token) => terminalTokens.includes(token));\r\n    });\r\n  }, []);\r\n\r\n  const handleResult = useCallback(\r\n    (result: any) => {\r\n      setShowQrScreen(false);\r\n      if (!result) {\r\n        setFinalStatus(null);\r\n        setWaitingForMobile(false);\r\n        return;\r\n      }\r\n\r\n      const terminal = isTerminalStatus(result);\r\n      try {\r\n        // console.log(\"[KycFlow] handleResult\", { terminal });\r\n      } catch {}\r\n\r\n      if (terminal) {\r\n        const redirectUrl: string | undefined = result?.data?.redirect_url ?? result?.data?.redirectUrl ?? result?.redirect_url;\r\n        if (redirectUrl && typeof window !== \"undefined\") {\r\n          try {\r\n            window.location.href = String(redirectUrl);\r\n            return;\r\n          } catch (e) {\r\n          }\r\n        }\r\n\r\n        closeFlow(\"completed\");\r\n        return;\r\n      }\r\n\r\n      setFinalStatus(result);\r\n      setWaitingForMobile(false);\r\n    },\r\n    [closeFlow, isTerminalStatus]\r\n  );\r\n\r\n  useEffect(() => {\r\n    // console.log('[KycFlow] effect:initializeSdk', { \r\n    //   providedSdk: Boolean(providedSdk), \r\n    //   serverKey, \r\n    //   externalSessionId, \r\n    //   apiBaseUrl \r\n    // });\r\n\r\n    if (providedSdk) {\r\n      setSdkInstance(providedSdk);\r\n      if (externalSessionId) {\r\n        providedSdk.setSessionId(externalSessionId);\r\n        try { localStorage.setItem(\"kyc_session_id\", externalSessionId); } catch {}\r\n      }\r\n    } else if (serverKey) {\r\n      const newSdk = new VerificationSDK({ \r\n        serverKey: serverKey, \r\n        apiBaseUrl \r\n      });\r\n      setSdkInstance(newSdk);\r\n      \r\n      if (externalSessionId) {\r\n        newSdk.setSessionId(externalSessionId);\r\n        try { localStorage.setItem(\"kyc_session_id\", externalSessionId); } catch {}\r\n      }\r\n    }\r\n  }, [providedSdk, serverKey, apiBaseUrl, externalSessionId]);\r\n\r\n  useEffect(() => {\r\n    if (!sdkInstance) return;\r\n    \r\n    try {\r\n      const faceDone = localStorage.getItem(\"kyc_face_done\");\r\n      const sid = localStorage.getItem(\"kyc_session_id\");\r\n      // console.log('[KycFlow] effect:resumeIfFaceDone', { faceDone, sid, hasSdk: Boolean(sdkInstance) });\r\n      \r\n      if (sid && faceDone === \"1\") {\r\n        sdkInstance.setSessionId(sid);\r\n        setShowQrScreen(false);\r\n        setWaitingForMobile(true);\r\n      }\r\n    } catch (error) {\r\n      console.error('Error resuming flow:', error);\r\n    }\r\n  }, [sdkInstance]);\r\n\r\n  useEffect(() => {\r\n    if (!sdkInstance || !externalSessionId) return;\r\n    \r\n    // console.log('[KycFlow] effect:setExternalSessionId', { externalSessionId });\r\n    \r\n    try {\r\n      const currentSessionId = sdkInstance.getSessionId();\r\n      if (!currentSessionId || currentSessionId !== externalSessionId) {\r\n        sdkInstance.setSessionId(externalSessionId);\r\n        try { localStorage.setItem(\"kyc_session_id\", externalSessionId); } catch {}\r\n      }\r\n      \r\n      if (startAtQr) {\r\n        setShowQrScreen(true);\r\n      }\r\n    } catch (error) {\r\n      console.error('Error setting session ID:', error);\r\n    }\r\n  }, [sdkInstance, externalSessionId, startAtQr]);\r\n\r\n  if (!sdkInstance) {\r\n    return (\r\n      <div className=\"kyc-backdrop\">\r\n        <div className=\"kyc-container\" style={{ background: \"#0b0f17\", color: \"#fff\" }}>\r\n          <p>Initializing KYC session...</p>\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <div>\r\n      {showQrScreen && (\r\n        <QrStartScreen \r\n          sdk={sdkInstance} \r\n          serverKey={providedSdk?.serverKey} \r\n          pollIntervalMs={pollIntervalMs} \r\n          onClose={() => closeFlow(\"user-dismiss\")} \r\n          mobileBaseUrl={mobileBaseUrl}\r\n          onDone={(maybeResult) => {\r\n            // console.log('[KycFlow] onDoneFromQr', { hasResult: Boolean(maybeResult) });\r\n            setShowQrScreen(false);\r\n            if (maybeResult) {\r\n              handleResult(maybeResult);\r\n            } else {\r\n              setWaitingForMobile(true);\r\n            }\r\n          }} \r\n        />\r\n      )}\r\n\r\n      {waitingForMobile && (\r\n        <DesktopWaitingForMobile\r\n          sdk={sdkInstance}\r\n          onShowStatus={(st) => { handleResult(st); }}\r\n          onRetryScan={() => { setShowQrScreen(true); setWaitingForMobile(false); }}\r\n          pollIntervalMs={pollIntervalMs}\r\n        />\r\n      )}\r\n\r\n      {finalStatus && (\r\n        <FinalStatusScreen \r\n          finalStatus={finalStatus} \r\n          onBack={() => { setFinalStatus(null); setWaitingForMobile(false); setShowQrScreen(true); }}\r\n          onClose={() => closeFlow(\"user-dismiss\")}\r\n        />\r\n      )}\r\n    </div>\r\n  );\r\n};\r\n\r\ninterface QrStartScreenProps {\r\n  sdk: VerificationSDK;\r\n  pollIntervalMs?: number;\r\n  onDone: (result?: any) => void;\r\n  onClose?: () => void;\r\n  serverKey?: string;\r\n  mobileBaseUrl: string;\r\n}\r\n\r\nconst QrStartScreen: React.FC<QrStartScreenProps> = ({ \r\n  sdk, \r\n  pollIntervalMs = 20000, \r\n  onDone, \r\n  onClose, \r\n  serverKey,\r\n  mobileBaseUrl\r\n}) => {\r\n  const sessionId = sdk.getSessionId() || localStorage.getItem(\"kyc_session_id\");\r\n  const [qrUrl, setQrUrl] = useState<string>(\"\");\r\n  const [error, setError] = useState<string | null>(null);\r\n  // console.log(\"write by me tayyab\",sdk)\r\n  // console.log('[QrStartScreen] render', { sessionId, serverKey });\r\n\r\nuseEffect(() => {\r\n  if (!sessionId) {\r\n    // console.log('[QrStartScreen] No session ID available');\r\n    return;\r\n  }\r\n\r\n  const effectiveServerKey = (serverKey || (sdk as any).getServerKey?.()) as string | undefined;\r\n  const keyParam = effectiveServerKey ? `&key=${encodeURIComponent(effectiveServerKey)}` : '';\r\n  const mobileUrl = `${mobileBaseUrl.replace(/\\/$/, '')}/mobile-kyc/${encodeURIComponent(sessionId)}?mode=face${keyParam}&apiBaseUrl=${encodeURIComponent(\"https://api.probusiness.astraprotocol.com\")}`;\r\n  \r\n  const qrCodeUrl = `https://api.qrserver.com/v1/create-qr-code/?size=220x220&data=${encodeURIComponent(mobileUrl)}`;\r\n  \r\n  setQrUrl(qrCodeUrl);\r\n  setError(null);\r\n}, [sessionId, serverKey, sdk, mobileBaseUrl]);\r\n\r\n  useEffect(() => {\r\n    if (!sessionId) {\r\n      // console.log('[QrStartScreen] No session ID for polling');\r\n      return;\r\n    }\r\n\r\n    const effectiveServerKey = serverKey || sdk.getServerKey();\r\n    if (!effectiveServerKey) {\r\n      // console.error('[QrStartScreen] No server key for polling');\r\n      return;\r\n    }\r\n\r\n    // console.log('[QrStartScreen] Starting polling', { sessionId, pollIntervalMs });\r\n\r\n    let id: number | null = null;\r\n    const transientRef = { count: 0 };\r\n\r\n    const poll = async () => {\r\n      try {\r\n        const status: any = await sdk.getStatus(sdk?.getServerKey());\r\n        transientRef.count = 0;\r\n        setError(null);\r\n        \r\n        const data: any = status?.data ?? status;\r\n        const faceStatus: string | undefined = data?.face_recognition_status || data?.face_status || data?.face || data?.faceRecognitionStatus;\r\n        \r\n        // console.log('[QrStartScreen] poll:status', { faceStatus });\r\n        \r\n        if (typeof faceStatus === \"string\" && faceStatus.toUpperCase() === \"COMPLETED\") {\r\n          try { localStorage.setItem(\"kyc_face_done\", \"1\"); } catch {}\r\n          onDone();\r\n          return;\r\n        }\r\n      } catch (e: any) {\r\n        const msg = e?.message ? String(e.message) : \"Unknown error\";\r\n        // console.log('[QrStartScreen] poll:error', msg);\r\n        \r\n        const isTransient = /unexpected token\\s*</i.test(msg) || \r\n                           /failed to fetch/i.test(msg) || \r\n                           /networkerror/i.test(msg) || \r\n                           /not a valid json/i.test(msg) ||\r\n                           /unexpected token/i.test(msg) || \r\n                           /json parse/i.test(msg);\r\n        \r\n        if (msg && /expired/i.test(msg)) {\r\n          toast.error(msg);\r\n        } else if (isTransient) {\r\n          transientRef.count += 1;\r\n          if (transientRef.count >= 6) {\r\n            toast.warning(\"Network problem while checking status — retrying...\");\r\n          }\r\n        } else {\r\n          toast.error(msg || \"Error polling status\");\r\n        }\r\n      }\r\n      \r\n      id = window.setTimeout(poll, Math.max(1000, pollIntervalMs));\r\n    };\r\n\r\n    poll();\r\n    \r\n    return () => {\r\n      if (id) window.clearTimeout(id);\r\n    };\r\n  }, [sdk, onDone, serverKey, sessionId, pollIntervalMs]);\r\n\r\n  const effectiveServerKey = (serverKey || (sdk as any).getServerKey?.()) as string | undefined;\r\n  const mobileUrl = sessionId\r\n    ? `${mobileBaseUrl.replace(/\\/$/, '')}/mobile-kyc/${sessionId}?mode=face${effectiveServerKey ? `&key=${encodeURIComponent(effectiveServerKey)}` : ''}`\r\n    : \"\";\r\n\r\n  const handleManualRefresh = async () => {\r\n    // console.log('[QrStartScreen] manualRefresh');\r\n    try {\r\n      const result = await sdk.getResult(sdk?.getServerKey());\r\n\r\n      const kycStatus: string | undefined = result?.data?.kyc_status ?? result?.kyc_status ?? result?.status;\r\n      const redirectUrl: string | undefined = result?.data?.redirect_url ?? result?.data?.redirectUrl ?? result?.redirect_url;\r\n      const norm = (s: string) => String(s || \"\").toLowerCase();\r\n      if (typeof kycStatus === \"string\" && norm(kycStatus).includes(\"completed\")) {\r\n        if (redirectUrl && typeof window !== \"undefined\") {\r\n          window.location.href = String(redirectUrl);\r\n          return;\r\n        }\r\n        onDone(result);\r\n        return;\r\n      }\r\n\r\n      try {\r\n        const st = await sdk.getStatus(sdk?.getServerKey());\r\n        const completedSteps: string[] = Array.isArray(st?.data?.completed_steps)\r\n          ? st.data.completed_steps\r\n          : (Array.isArray(st?.data?.completedSteps) ? st.data.completedSteps : []);\r\n        const cs = (completedSteps || []).map((s: any) => String(s || \"\").toLowerCase());\r\n        if (cs.includes(\"face_scan\") || cs.includes(\"face\")) {\r\n          if (!cs.includes(\"document_upload\") && !cs.includes(\"document\")) {\r\n            onDone();\r\n            return;\r\n          }\r\n        }\r\n      } catch (e) {\r\n      }\r\n\r\n      onDone(result);\r\n    } catch (e: any) {\r\n      toast.error(e?.message || \"Unable to refresh status\");\r\n    }\r\n  };\r\n\r\n  const copyMobileUrl = async () => {\r\n    if (!mobileUrl) return;\r\n    try {\r\n      await navigator.clipboard.writeText(mobileUrl);\r\n      toast.success(\"URL copied to clipboard\");\r\n    } catch {\r\n      const ta = document.createElement('textarea');\r\n      ta.value = mobileUrl;\r\n      document.body.appendChild(ta);\r\n      ta.select();\r\n      document.execCommand('copy');\r\n      document.body.removeChild(ta);\r\n      toast.success(\"URL copied to clipboard\");\r\n    }\r\n  };\r\n\r\n  return (\r\n    <div className=\"kyc-backdrop\">\r\n      <div className=\"kyc-container\" style={{ background: \"#0b0f17\", color: \"#fff\", position: \"relative\" }}>\r\n        <button\r\n          type=\"button\"\r\n          aria-label=\"Close\"\r\n          onClick={onClose}\r\n          style={{ position: \"absolute\", right: 8, top: 8, background: \"transparent\", color: \"#fff\", border: \"none\", fontSize: 20, lineHeight: 1, cursor: \"pointer\" }}\r\n        >\r\n          ✕\r\n        </button>\r\n        \r\n        <div style={{ textAlign: \"center\" }}>\r\n          <h2 className=\"kyc-title\" style={{ color: \"#fff\", marginBottom: 8 }}>Continue on Mobile</h2>\r\n          <p style={{ margin: 0, color: \"#9ca3af\", fontSize:'14px',  }}>Scan this QR on your phone to capture your face and document</p>\r\n        </div>\r\n        \r\n        <div style={{ textAlign: \"center\", marginTop: 16 }}>\r\n          {error ? (\r\n            <p style={{ color: '#ef4444' }}>{error}</p>\r\n          ) : qrUrl ? (\r\n            <div style={{ display: 'inline-block', padding: 12, borderRadius: 12, border: '1px solid #334155', background: '#0b0f17' }}>\r\n              <div style={{ background: '#ffffff', padding: 12, borderRadius: 8 }}>\r\n                <img src={qrUrl} alt=\"Scan QR to continue on mobile\" style={{ width: 220, height: 220, display: 'block' }} />\r\n              </div>\r\n            </div>\r\n          ) : (\r\n            <p style={{ color: '#9ca3af' }}>Preparing QR...</p>\r\n          )}\r\n          \r\n          {mobileUrl && (\r\n            <div style={{ marginTop: 12, fontSize: 12, color: '#9ca3af' }}>\r\n              <span>Or open: </span>\r\n              <a href={mobileUrl} target=\"_blank\" rel=\"noopener noreferrer\" style={{ color: '#9ca3af', textDecoration: 'none' }}>\r\n                {mobileUrl.substring(0, 30)}...\r\n              </a>\r\n              <button \r\n                onClick={copyMobileUrl} \r\n                title=\"Copy URL\" \r\n                style={{ marginLeft: 6, background: 'transparent', color: '#9ca3af', border: '1px solid #475569', borderRadius: 6, padding: '2px 6px', cursor: 'pointer' }}\r\n              >\r\n                📋\r\n              </button>\r\n            </div>\r\n          )}\r\n          \r\n           <div style={{ marginTop: 16 }}>\r\n            <button\r\n              type=\"button\"\r\n              onClick={handleManualRefresh}\r\n              style={{ padding: '12px 16px', width: '100%', maxWidth: 360, borderRadius: 8, border: 'none', background: 'linear-gradient(90deg, #FF8A00 0%, #FF3D77 100%)', color: '#ffffff', fontSize: 16, fontWeight: 600, cursor: 'pointer' }}\r\n            >\r\n              I've completed on mobile - Refresh\r\n            </button>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nconst FinalStatusScreen: React.FC<{ \r\n  finalStatus: any; \r\n  onBack: () => void; \r\n  onClose: () => void; \r\n}> = ({ finalStatus, onBack, onClose }) => {\r\n  const data: any = finalStatus?.data ?? finalStatus;\r\n  const email: string | undefined = data?.email;\r\n  const faceStatus: string = (String(data?.face_recognition_status || data?.face_status || data?.face || \"Pending\")).trim();\r\n  const kycStatus: string = (String(data?.kyc_status || data?.status || \"Pending\")).trim();\r\n  \r\n  const pill = (label: string, value: string) => (\r\n    <div style={{ background: \"#111827\", border: \"1px solid #30363d\", borderRadius: 12, padding: \"14px 16px\", color: \"#e5e7eb\", boxShadow: \"0 8px 16px rgba(0,0,0,0.35)\" }}>\r\n      <span style={{ fontWeight: 600 }}>{label}</span>\r\n      <span style={{ marginLeft: 8, color: label.toLowerCase().includes(\"status\") ? \"#f97316\" : \"#e5e7eb\" }}>\r\n        {value || \"—\"}\r\n      </span>\r\n    </div>\r\n  );\r\n\r\n  return (\r\n    <div className=\"kyc-backdrop\">\r\n      <div className=\"kyc-container\" style={{ background: \"#0b0f17\", color: \"#fff\", position: \"relative\" }}>\r\n        <div style={{ position: \"absolute\", left: 12, top: 12, cursor: \"pointer\", fontSize: 20 }} onClick={onBack} aria-label=\"Back\">←</div>\r\n        <div style={{ position: \"absolute\", right: 12, top: 12, cursor: \"pointer\" }} onClick={onClose} aria-label=\"Close\">✕</div>\r\n        <h2 className=\"kyc-title\" style={{ color: \"#fff\", textAlign: \"center\", marginBottom: 16 }}>Verification Status</h2>\r\n        <div style={{ display: \"grid\", gap: 12 }}>\r\n          {pill(\"Email:\", email || \"—\")}\r\n          {pill(\"Face Status:\", faceStatus || \"Pending\")}\r\n          {pill(\"KYC Status:\", kycStatus || \"Pending\")}\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\ninterface DesktopWaitingProps { \r\n  sdk: VerificationSDK; \r\n  onShowStatus: (status: any) => void; \r\n  pollIntervalMs?: number; \r\n}\r\n\r\ninterface DesktopWaitingExtraProps extends DesktopWaitingProps {\r\n  onRetryScan?: () => void;\r\n}\r\n\r\nconst WAITING_DEFAULT_MESSAGE = \"Scan the QR code on your mobile device to continue your verification.\";\r\n\r\nconst deriveWaitingFlags = (payload: any): { faceDone: boolean; docDone: boolean; kycDone: boolean } | null => {\r\n  if (!payload) return null;\r\n  const data: any = payload?.data ?? payload ?? {};\r\n  const completedStepsRaw: any[] = Array.isArray(data?.completed_steps)\r\n    ? data.completed_steps\r\n    : (Array.isArray(data?.completedSteps) ? data.completedSteps : []);\r\n  const normalize = (value: any) => String(value || \"\").toLowerCase();\r\n  const steps = completedStepsRaw.map(normalize);\r\n  const includesStep = (needle: string) => steps.some((step) => step.includes(needle));\r\n  let faceDone = includesStep(\"face\");\r\n  let docDone = includesStep(\"doc\");\r\n\r\n  const faceStatus = normalize(data?.face_status || data?.face_recognition_status || data?.face);\r\n  if (faceStatus && (faceStatus.includes(\"complete\") || faceStatus.includes(\"success\") || faceStatus.includes(\"approved\") || faceStatus.includes(\"verified\"))) {\r\n    faceDone = true;\r\n  }\r\n\r\n  const docStatus = normalize(data?.document_status || data?.docs_status || data?.document || data?.doc_status);\r\n  if (docStatus && (docStatus.includes(\"complete\") || docStatus.includes(\"success\") || docStatus.includes(\"approved\") || docStatus.includes(\"uploaded\") || docStatus.includes(\"done\"))) {\r\n    docDone = true;\r\n  }\r\n\r\n  const nextStep = normalize(data?.next_step || data?.nextStep);\r\n  if (nextStep.includes(\"face\")) faceDone = false;\r\n  if (nextStep.includes(\"doc\")) docDone = false;\r\n\r\n  const kycStatus = normalize(data?.kyc_status || data?.status || data?.result);\r\n  const kycDone = Boolean(kycStatus) && [\"approved\", \"completed\", \"complete\", \"success\", \"verified\", \"passed\"].some((token) => kycStatus.includes(token));\r\n\r\n  const hasSignal = steps.length > 0 || Boolean(faceStatus) || Boolean(docStatus) || Boolean(kycStatus) || Boolean(nextStep);\r\n  if (!hasSignal) return null;\r\n\r\n  return { faceDone, docDone, kycDone };\r\n};\r\n\r\nconst describeWaitingMessage = (payload: any): string => {\r\n  const flags = deriveWaitingFlags(payload);\r\n  if (!flags) return WAITING_DEFAULT_MESSAGE;\r\n  if (!flags.faceDone) {\r\n    return \"Please complete the face capture on your mobile device to move forward.\";\r\n  }\r\n  if (flags.faceDone && !flags.docDone) {\r\n    return \"Face is completed. Upload your document on mobile, then refresh.\";\r\n  }\r\n  if (flags.docDone && !flags.kycDone) {\r\n    return \"Document uploaded. We're processing it — click refresh soon for an update.\";\r\n  }\r\n  return \"We're finalizing your verification. Click refresh to view the decision.\";\r\n};\r\n\r\nconst DesktopWaitingForMobile: React.FC<DesktopWaitingExtraProps> = ({ sdk, onShowStatus, onRetryScan, pollIntervalMs = 20000 }) => {\r\n  const [statusHint, setStatusHint] = useState<string>(WAITING_DEFAULT_MESSAGE);\r\n  const [message, setMessage] = useState<string>(\"\");\r\n  const [loading, setLoading] = useState(false);\r\n\r\n  useEffect(() => {\r\n    let cancelled = false;\r\n    const hydrate = async () => {\r\n      try {\r\n        const status = await sdk.getStatus(sdk?.getServerKey());\r\n        if (!cancelled) {\r\n          setStatusHint(describeWaitingMessage(status));\r\n        }\r\n      } catch {\r\n        if (!cancelled) {\r\n          setStatusHint(WAITING_DEFAULT_MESSAGE);\r\n        }\r\n      }\r\n    };\r\n    hydrate();\r\n    return () => { cancelled = true; };\r\n  }, [sdk]);\r\n\r\n  const checkNow = async () => {\r\n    setLoading(true);\r\n    try {\r\n      const result = await sdk.getResult(sdk?.getServerKey());\r\n      setStatusHint(describeWaitingMessage(result));\r\n\r\n      const kycStatus: string | undefined = result?.data?.kyc_status ?? result?.kyc_status ?? result?.status;\r\n      const redirectUrl: string | undefined = result?.data?.redirect_url ?? result?.data?.redirectUrl ?? result?.redirect_url;\r\n      const norm = (s: string) => String(s || \"\").toLowerCase();\r\n      if (typeof kycStatus === \"string\" && norm(kycStatus).includes(\"completed\")) {\r\n        if (redirectUrl && typeof window !== \"undefined\") {\r\n          window.location.href = String(redirectUrl);\r\n          return;\r\n        }\r\n        onShowStatus(result);\r\n        return;\r\n      }\r\n\r\n      try {\r\n        const st = await sdk.getStatus(sdk?.getServerKey());\r\n        setStatusHint(describeWaitingMessage(st));\r\n        const flags = deriveWaitingFlags(st);\r\n        if (flags && flags.faceDone && !flags.docDone) {\r\n          if (onRetryScan) onRetryScan();\r\n          setStatusHint(WAITING_DEFAULT_MESSAGE);\r\n          setMessage(\"Scan the QR code on your mobile device to resume the document step.\");\r\n          return;\r\n        }\r\n      } catch (e) {\r\n      }\r\n\r\n      onShowStatus(result);\r\n    } catch (e: any) {\r\n      setMessage(\"Still waiting for mobile to finish. Try again in a moment.\");\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  return (\r\n    <div className=\"kyc-backdrop\">\r\n      <div className=\"kyc-container\" style={{ background: \"#0b0f17\", color: \"#fff\" }}>\r\n        <h2 className=\"kyc-title\" style={{ color: \"#fff\" }}>Continue on Mobile</h2>\r\n        <p style={{ color: \"#9ca3af\", marginTop: 0 }}>{statusHint}</p>\r\n        {message && <p style={{ color: \"#9ca3af\" }}>{message}</p>}\r\n        <div style={{ marginTop: 12 }}>\r\n          <button \r\n            type=\"button\" \r\n            onClick={checkNow} \r\n            disabled={loading} \r\n            className=\"kyc-input\" \r\n            style={{ background: \"linear-gradient(90deg, #FF8A00 0%, #FF3D77 100%)\", color: \"#fff\", border: \"none\", borderRadius: 8, padding: 10 }}\r\n          >\r\n            {loading ? \"Checking...\" : \"I've completed on mobile - Refresh\"}\r\n          </button>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};","import React, { useEffect, useRef, useState } from \"react\";\r\nimport VerificationSDK from \"../VerificationSDK\";\r\nimport { KycModal } from \"./kycModal\";\r\nimport \"./kycModal.css\";\r\n\r\ninterface StandaloneKycPageProps {\r\n  serverKey: string;\r\n}\r\n\r\nexport const StandaloneKycPage: React.FC<StandaloneKycPageProps> = ({ serverKey }) => {\r\n  const [error, setError] = useState<string | null>(null);\r\n  const [ready, setReady] = useState(false);\r\n  const sdkRef = useRef<VerificationSDK | null>(null);\r\n\r\n  useEffect(() => {\r\n    const run = async () => {\r\n      try {\r\n        const path = typeof window !== \"undefined\" ? window.location.pathname : \"/\";\r\n        const match = path.match(/\\/kyc-standalone\\/(.*?)($|[?#\\s])/i);\r\n        const sessionIdRaw = match && match[1] ? decodeURIComponent(match[1]) : \"\";\r\n        if (!sessionIdRaw) {\r\n          setError(\"Missing sessionId in URL\");\r\n          return;\r\n        }\r\n        const sdk = new VerificationSDK({ serverKey });\r\n        sdk.setSessionId(sessionIdRaw);\r\n        sdkRef.current = sdk;\r\n        setReady(true);\r\n      } catch (e: any) {\r\n        setError(e?.message || \"Failed to initialize KYC\");\r\n      }\r\n    };\r\n    run();\r\n  }, [serverKey]);\r\n\r\n  if (error) {\r\n    return (\r\n      <div style={{ minHeight: \"100vh\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", background: \"#0b0f17\", color: \"#fff\" }}>\r\n        <div>\r\n          <h2 style={{ marginTop: 0 }}>KYC Error</h2>\r\n          <p>{error}</p>\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  if (!ready || !sdkRef.current) {\r\n    return (\r\n      <div style={{ minHeight: \"100vh\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", background: \"#0b0f17\", color: \"#fff\" }}>\r\n        <p>Loading...</p>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <div style={{ minHeight: \"100vh\", background: \"#0b0f17\" }}>\r\n      <KycModal sdk={sdkRef.current} onClose={() => { try { window.close(); } catch {} }} />\r\n    </div>\r\n  );\r\n};\r\n\r\n\r\n","export { default as VerificationSDK } from \"./VerificationSDK\";\r\nexport type { InitOptions, InitResponse, InitResponseData } from \"./VerificationSDK\";\r\nexport { KycModal } from \"./components/kycModal\";\r\nexport { MobileKycPage } from \"./components/MobileKycPage\";\r\nexport { MobileKycRouter } from \"./components/MobileKycRouter\";\r\nexport { KycInitForm } from \"./components/KycInitForm\";\r\nexport { TermsScreen } from \"./components/TermsScreen\";\r\nexport { KycFlow } from \"./components/KycFlow\";\r\nexport { WebQRRedirect } from \"./components/WebQRRedirect\";\r\nexport { StandaloneKycPage } from \"./components/StandaloneKycPage\";\r\n\r\n// Helper to open KYC in a new window like OAuth\r\nexport function openKycInNewWindow(sessionId: string): Window | null {\r\n  const url = `${window.location.origin}/kyc-standalone/${encodeURIComponent(sessionId)}`;\r\n  const features = [\r\n    \"toolbar=no\",\r\n    \"location=no\",\r\n    \"status=no\",\r\n    \"menubar=no\",\r\n    \"scrollbars=yes\",\r\n    \"resizable=yes\",\r\n    \"width=420\",\r\n    \"height=720\",\r\n  ].join(\",\");\r\n  try {\r\n    return window.open(url, \"astra-kyc\", features);\r\n  } catch {\r\n    window.location.href = url;\r\n    return null;\r\n  }\r\n}\r\n\r\n\r\n"]}