vesant-sdk 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/README.md +247 -0
  2. package/dist/client-CA9Wr_qb.d.ts +1108 -0
  3. package/dist/client-DMNkESa0.d.mts +1108 -0
  4. package/dist/compliance/index.d.mts +543 -0
  5. package/dist/compliance/index.d.ts +543 -0
  6. package/dist/compliance/index.js +2133 -0
  7. package/dist/compliance/index.js.map +1 -0
  8. package/dist/compliance/index.mjs +2130 -0
  9. package/dist/compliance/index.mjs.map +1 -0
  10. package/dist/geolocation/index.d.mts +73 -0
  11. package/dist/geolocation/index.d.ts +73 -0
  12. package/dist/geolocation/index.js +1100 -0
  13. package/dist/geolocation/index.js.map +1 -0
  14. package/dist/geolocation/index.mjs +1094 -0
  15. package/dist/geolocation/index.mjs.map +1 -0
  16. package/dist/index.d.mts +50 -0
  17. package/dist/index.d.ts +50 -0
  18. package/dist/index.js +2968 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/index.mjs +2948 -0
  21. package/dist/index.mjs.map +1 -0
  22. package/dist/kyc/core.d.mts +3 -0
  23. package/dist/kyc/core.d.ts +3 -0
  24. package/dist/kyc/core.js +773 -0
  25. package/dist/kyc/core.js.map +1 -0
  26. package/dist/kyc/core.mjs +771 -0
  27. package/dist/kyc/core.mjs.map +1 -0
  28. package/dist/kyc/index.d.mts +734 -0
  29. package/dist/kyc/index.d.ts +734 -0
  30. package/dist/kyc/index.js +773 -0
  31. package/dist/kyc/index.js.map +1 -0
  32. package/dist/kyc/index.mjs +771 -0
  33. package/dist/kyc/index.mjs.map +1 -0
  34. package/dist/react.d.mts +487 -0
  35. package/dist/react.d.ts +487 -0
  36. package/dist/react.js +1122 -0
  37. package/dist/react.js.map +1 -0
  38. package/dist/react.mjs +1102 -0
  39. package/dist/react.mjs.map +1 -0
  40. package/dist/risk-profile/index.d.mts +228 -0
  41. package/dist/risk-profile/index.d.ts +228 -0
  42. package/dist/risk-profile/index.js +548 -0
  43. package/dist/risk-profile/index.js.map +1 -0
  44. package/dist/risk-profile/index.mjs +546 -0
  45. package/dist/risk-profile/index.mjs.map +1 -0
  46. package/dist/types-Bnsnejor.d.mts +150 -0
  47. package/dist/types-Bnsnejor.d.ts +150 -0
  48. package/dist/types-CFupjwi8.d.ts +213 -0
  49. package/dist/types-CqOLbaXk.d.mts +213 -0
  50. package/package.json +94 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/geolocation/hooks.ts","../src/geolocation/ciphertext.ts","../src/kyc/hooks.ts"],"names":["error","getBrowserInfo","useEffect","useRef","useState","useCallback"],"mappings":"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","file":"react.mjs","sourcesContent":["/**\n * React Hooks for CGS Geolocation SDK\n *\n * Provides convenient React hooks for using the geolocation service in Next.js applications.\n */\n\nimport { useState, useEffect, useCallback, useRef } from 'react';\nimport { GeolocationClient } from './client';\nimport type {\n LocationVerification,\n VerifyIPRequest,\n ComplianceCheckResponse,\n GeolocationAlert,\n AlertFilters,\n PaginationParams,\n DashboardMetrics,\n UseGeolocationOptions,\n UseGeolocationResult,\n UseAlertsOptions,\n UseAlertsResult,\n AlertStatus,\n DeviceFingerprintRequest,\n // Location Request Types\n LocationRequest,\n LocationRequestFilters,\n CreateLocationRequestRequest,\n LocationRequestResult,\n LocationRequestStatus,\n LocationShareInfo,\n LocationCaptureRequest,\n LocationCaptureResponse,\n UseLocationRequestsOptions,\n UseLocationRequestsResult,\n UseLocationCaptureOptions,\n UseLocationCaptureResult,\n} from './types';\n\n// ============================================================================\n// useGeolocation Hook\n// ============================================================================\n\n/**\n * React hook for IP verification and compliance checking\n *\n * @param client - GeolocationClient instance\n * @param options - Hook options\n * @returns Geolocation verification state and methods\n *\n * @example\n * ```tsx\n * function LoginPage() {\n * const { verification, loading, error, verifyIP } = useGeolocation(client, {\n * autoVerify: true,\n * eventType: \"login\",\n * includeDeviceFingerprint: true\n * });\n *\n * useEffect(() => {\n * if (verification?.is_blocked) {\n * alert(\"Access blocked: \" + verification.risk_reasons.join(\", \"));\n * }\n * }, [verification]);\n *\n * return <div>Risk Level: {verification?.risk_level}</div>;\n * }\n * ```\n */\nexport function useGeolocation(\n client: GeolocationClient,\n options: UseGeolocationOptions = {}\n): UseGeolocationResult {\n const [verification, setVerification] = useState<LocationVerification | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const verifyIP = useCallback(\n async (request: VerifyIPRequest): Promise<LocationVerification> => {\n setLoading(true);\n setError(null);\n\n try {\n const result = await client.verifyIP(request);\n setVerification(result);\n return result;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Verification failed');\n setError(error);\n throw error;\n } finally {\n setLoading(false);\n }\n },\n [client]\n );\n\n const checkCompliance = useCallback(\n async (countryISO: string): Promise<ComplianceCheckResponse> => {\n setLoading(true);\n setError(null);\n\n try {\n const result = await client.checkCompliance(countryISO);\n return result;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Compliance check failed');\n setError(error);\n throw error;\n } finally {\n setLoading(false);\n }\n },\n [client]\n );\n\n const refresh = useCallback(async () => {\n if (verification) {\n await verifyIP({\n ip_address: verification.ip_address,\n user_id: '', // Will need to be provided\n event_type: options.eventType || 'api_access',\n });\n }\n }, [verification, verifyIP, options.eventType]);\n\n // Auto-verify on mount if enabled\n useEffect(() => {\n if (options.autoVerify) {\n // Try to get user's IP from a service or use placeholder\n const detectAndVerify = async () => {\n try {\n // In production, you'd use a service like ipify.org or get from server\n const ipResponse = await fetch('https://api.ipify.org?format=json');\n const { ip } = await ipResponse.json();\n\n let deviceFingerprint: DeviceFingerprintRequest | undefined;\n\n if (options.includeDeviceFingerprint && typeof window !== 'undefined') {\n deviceFingerprint = {\n device_id: localStorage.getItem('device_id') || generateDeviceId(),\n user_agent: navigator.userAgent,\n platform: navigator.platform,\n language: navigator.language,\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n screen_resolution: `${window.screen.width}x${window.screen.height}`,\n };\n\n // Store device ID\n if (!localStorage.getItem('device_id')) {\n localStorage.setItem('device_id', deviceFingerprint.device_id);\n }\n }\n\n await verifyIP({\n ip_address: ip,\n user_id: '', // Should be provided by auth context\n event_type: options.eventType || 'page_view',\n device_fingerprint: deviceFingerprint,\n });\n } catch (err) {\n console.error('Auto-verification failed:', err);\n }\n };\n\n detectAndVerify();\n }\n }, [options.autoVerify, options.includeDeviceFingerprint, options.eventType, verifyIP]);\n\n return {\n verification,\n loading,\n error,\n verifyIP,\n checkCompliance,\n refresh,\n };\n}\n\n// ============================================================================\n// useAlerts Hook\n// ============================================================================\n\n/**\n * React hook for alert management\n *\n * @param client - GeolocationClient instance\n * @param options - Hook options\n * @returns Alert state and management methods\n *\n * @example\n * ```tsx\n * function AlertDashboard() {\n * const {\n * alerts,\n * total,\n * loading,\n * fetchAlerts,\n * updateStatus,\n * resolveAlert\n * } = useAlerts(client, {\n * autoFetch: true,\n * filters: { status: \"active\", severity: \"critical\" },\n * pollInterval: 30000 // Poll every 30 seconds\n * });\n *\n * return (\n * <div>\n * <h2>{total} Alerts</h2>\n * {alerts.map(alert => (\n * <AlertCard\n * key={alert.id}\n * alert={alert}\n * onResolve={() => resolveAlert(alert.id, \"resolved\", \"Fixed\")}\n * />\n * ))}\n * </div>\n * );\n * }\n * ```\n */\nexport function useAlerts(\n client: GeolocationClient,\n options: UseAlertsOptions = {}\n): UseAlertsResult {\n const [alerts, setAlerts] = useState<GeolocationAlert[]>([]);\n const [total, setTotal] = useState(0);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const pollIntervalRef = useRef<NodeJS.Timeout>();\n\n const fetchAlerts = useCallback(\n async (filters?: AlertFilters, pagination?: PaginationParams) => {\n setLoading(true);\n setError(null);\n\n try {\n const result = await client.listAlerts(\n filters || options.filters,\n pagination || options.pagination\n );\n setAlerts(result.alerts);\n setTotal(result.total);\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to fetch alerts');\n setError(error);\n throw error;\n } finally {\n setLoading(false);\n }\n },\n [client, options.filters, options.pagination]\n );\n\n const updateStatus = useCallback(\n async (alertId: string, status: AlertStatus) => {\n try {\n await client.updateAlertStatus(alertId, status);\n // Update local state\n setAlerts((prev) =>\n prev.map((alert) =>\n alert.id === alertId ? { ...alert, status } : alert\n )\n );\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to update status');\n setError(error);\n throw error;\n }\n },\n [client]\n );\n\n const assignAlert = useCallback(\n async (alertId: string, assignedTo: string) => {\n try {\n await client.assignAlert(alertId, assignedTo);\n // Update local state\n setAlerts((prev) =>\n prev.map((alert) =>\n alert.id === alertId ? { ...alert, assigned_to: assignedTo, status: 'under_review' } : alert\n )\n );\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to assign alert');\n setError(error);\n throw error;\n }\n },\n [client]\n );\n\n const resolveAlert = useCallback(\n async (alertId: string, resolution: string, notes?: string) => {\n try {\n await client.resolveAlert(alertId, resolution, notes);\n // Update local state\n setAlerts((prev) =>\n prev.map((alert) =>\n alert.id === alertId\n ? { ...alert, status: 'resolved', resolution, notes }\n : alert\n )\n );\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to resolve alert');\n setError(error);\n throw error;\n }\n },\n [client]\n );\n\n const dismissAlert = useCallback(\n async (alertId: string, notes?: string) => {\n try {\n await client.dismissAlert(alertId, notes);\n // Update local state\n setAlerts((prev) =>\n prev.map((alert) =>\n alert.id === alertId\n ? { ...alert, status: 'false_positive', resolution: 'false_positive', notes }\n : alert\n )\n );\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to dismiss alert');\n setError(error);\n throw error;\n }\n },\n [client]\n );\n\n const refresh = useCallback(async () => {\n await fetchAlerts();\n }, [fetchAlerts]);\n\n // Auto-fetch on mount if enabled\n useEffect(() => {\n if (options.autoFetch) {\n fetchAlerts();\n }\n }, [options.autoFetch, fetchAlerts]);\n\n // Set up polling if enabled\n useEffect(() => {\n if (options.pollInterval && options.pollInterval > 0) {\n pollIntervalRef.current = setInterval(() => {\n fetchAlerts();\n }, options.pollInterval);\n\n return () => {\n if (pollIntervalRef.current) {\n clearInterval(pollIntervalRef.current);\n }\n };\n }\n return undefined;\n }, [options.pollInterval, fetchAlerts]);\n\n return {\n alerts,\n total,\n loading,\n error,\n fetchAlerts,\n updateStatus,\n assignAlert,\n resolveAlert,\n dismissAlert,\n refresh,\n };\n}\n\n// ============================================================================\n// useDashboardMetrics Hook\n// ============================================================================\n\n/**\n * React hook for dashboard metrics\n *\n * @param client - GeolocationClient instance\n * @param timeRangeHours - Time range in hours (default: 24)\n * @param autoFetch - Auto-fetch metrics on mount (default: true)\n * @returns Dashboard metrics state\n *\n * @example\n * ```tsx\n * function Dashboard() {\n * const { metrics, loading, refresh } = useDashboardMetrics(client, 168); // Last 7 days\n *\n * if (loading) return <Spinner />;\n *\n * return (\n * <div>\n * <h2>Dashboard</h2>\n * <MetricCard label=\"Total Alerts\" value={metrics.total_alerts} />\n * <MetricCard label=\"Critical\" value={metrics.critical_alerts} />\n * <MetricCard label=\"Active\" value={metrics.active_alerts} />\n * </div>\n * );\n * }\n * ```\n */\nexport function useDashboardMetrics(\n client: GeolocationClient,\n timeRangeHours: number = 24,\n autoFetch: boolean = true\n) {\n const [metrics, setMetrics] = useState<DashboardMetrics | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchMetrics = useCallback(async () => {\n setLoading(true);\n setError(null);\n\n try {\n const result = await client.getDashboardMetrics(timeRangeHours);\n setMetrics(result);\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to fetch metrics');\n setError(error);\n throw error;\n } finally {\n setLoading(false);\n }\n }, [client, timeRangeHours]);\n\n useEffect(() => {\n if (autoFetch) {\n fetchMetrics();\n }\n }, [autoFetch, fetchMetrics]);\n\n return {\n metrics,\n loading,\n error,\n refresh: fetchMetrics,\n };\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Generate a unique device ID\n */\nfunction generateDeviceId(): string {\n return `device_${Date.now()}_${Math.random().toString(36).substring(2, 15)}`;\n}\n\n/**\n * Get browser information\n */\nexport function getBrowserInfo(): {\n browser?: string;\n browser_version?: string;\n os?: string;\n} {\n if (typeof window === 'undefined') return {};\n\n const userAgent = navigator.userAgent;\n let browser: string | undefined;\n let browserVersion: string | undefined;\n let os: string | undefined;\n\n // Detect browser\n if (userAgent.indexOf('Firefox') > -1) {\n browser = 'Firefox';\n browserVersion = userAgent.match(/Firefox\\/([0-9.]+)/)?.[1];\n } else if (userAgent.indexOf('Chrome') > -1) {\n browser = 'Chrome';\n browserVersion = userAgent.match(/Chrome\\/([0-9.]+)/)?.[1];\n } else if (userAgent.indexOf('Safari') > -1) {\n browser = 'Safari';\n browserVersion = userAgent.match(/Version\\/([0-9.]+)/)?.[1];\n } else if (userAgent.indexOf('Edge') > -1) {\n browser = 'Edge';\n browserVersion = userAgent.match(/Edge\\/([0-9.]+)/)?.[1];\n }\n\n // Detect OS\n if (userAgent.indexOf('Win') > -1) os = 'Windows';\n else if (userAgent.indexOf('Mac') > -1) os = 'macOS';\n else if (userAgent.indexOf('Linux') > -1) os = 'Linux';\n else if (userAgent.indexOf('Android') > -1) os = 'Android';\n else if (userAgent.indexOf('iOS') > -1) os = 'iOS';\n\n return {\n browser,\n browser_version: browserVersion,\n os,\n };\n}\n\n/**\n * Create a complete device fingerprint for the current browser\n */\nexport function createDeviceFingerprint(): DeviceFingerprintRequest {\n const browserInfo = getBrowserInfo();\n const deviceId = localStorage.getItem('device_id') || generateDeviceId();\n\n if (!localStorage.getItem('device_id')) {\n localStorage.setItem('device_id', deviceId);\n }\n\n return {\n device_id: deviceId,\n user_agent: navigator.userAgent,\n platform: navigator.platform,\n language: navigator.language,\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n screen_resolution: `${window.screen.width}x${window.screen.height}`,\n ...browserInfo,\n };\n}\n\n// ============================================================================\n// useLocationRequests Hook\n// ============================================================================\n\n/**\n * React hook for managing location requests (admin/compliance officer)\n *\n * @param client - GeolocationClient instance\n * @param options - Hook options\n * @returns Location request state and management methods\n *\n * @example\n * ```tsx\n * function LocationRequestDashboard() {\n * const {\n * requests,\n * total,\n * loading,\n * createRequest,\n * cancelRequest,\n * refresh\n * } = useLocationRequests(client, {\n * autoFetch: true,\n * filters: { status: 'pending' },\n * pollInterval: 30000\n * });\n *\n * const handleCreate = async () => {\n * const result = await createRequest({\n * user_id: 'customer_123',\n * channel: 'sms',\n * phone: '+1234567890',\n * reason: 'Transaction verification'\n * });\n * console.log('Share link:', result.share_link);\n * };\n *\n * return (\n * <div>\n * <h2>{total} Location Requests</h2>\n * <button onClick={handleCreate}>Create Request</button>\n * {requests.map(req => (\n * <LocationRequestCard\n * key={req.id}\n * request={req}\n * onCancel={() => cancelRequest(req.id)}\n * />\n * ))}\n * </div>\n * );\n * }\n * ```\n */\nexport function useLocationRequests(\n client: GeolocationClient,\n options: UseLocationRequestsOptions = {}\n): UseLocationRequestsResult {\n const [requests, setRequests] = useState<LocationRequest[]>([]);\n const [total, setTotal] = useState(0);\n const [page, setPage] = useState(1);\n const [totalPages, setTotalPages] = useState(0);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const pollIntervalRef = useRef<NodeJS.Timeout>();\n\n const fetchRequests = useCallback(\n async (filters?: LocationRequestFilters, pagination?: PaginationParams) => {\n setLoading(true);\n setError(null);\n\n try {\n const result = await client.listLocationRequests(\n filters || options.filters,\n pagination || options.pagination\n );\n setRequests(result.requests);\n setTotal(result.total);\n setPage(result.page);\n setTotalPages(result.total_pages);\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to fetch location requests');\n setError(error);\n throw error;\n } finally {\n setLoading(false);\n }\n },\n [client, options.filters, options.pagination]\n );\n\n const createRequest = useCallback(\n async (request: CreateLocationRequestRequest): Promise<LocationRequestResult> => {\n setError(null);\n\n try {\n const result = await client.createLocationRequest(request);\n // Add to local state\n setRequests((prev) => [result.request, ...prev]);\n setTotal((prev) => prev + 1);\n return result;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to create location request');\n setError(error);\n throw error;\n }\n },\n [client]\n );\n\n const getRequest = useCallback(\n async (requestId: string): Promise<LocationRequest> => {\n try {\n return await client.getLocationRequest(requestId);\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to get location request');\n setError(error);\n throw error;\n }\n },\n [client]\n );\n\n const cancelRequest = useCallback(\n async (requestId: string): Promise<void> => {\n try {\n await client.cancelLocationRequest(requestId);\n // Update local state\n setRequests((prev) =>\n prev.map((req) =>\n req.id === requestId ? { ...req, status: 'cancelled' as LocationRequestStatus } : req\n )\n );\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to cancel location request');\n setError(error);\n throw error;\n }\n },\n [client]\n );\n\n const resendRequest = useCallback(\n async (requestId: string, contact: { email?: string; phone?: string }): Promise<void> => {\n try {\n await client.resendLocationRequest(requestId, contact);\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to resend location request');\n setError(error);\n throw error;\n }\n },\n [client]\n );\n\n const refresh = useCallback(async () => {\n await fetchRequests();\n }, [fetchRequests]);\n\n // Auto-fetch on mount if enabled\n useEffect(() => {\n if (options.autoFetch) {\n fetchRequests();\n }\n }, [options.autoFetch, fetchRequests]);\n\n // Set up polling if enabled\n useEffect(() => {\n if (options.pollInterval && options.pollInterval > 0) {\n pollIntervalRef.current = setInterval(() => {\n fetchRequests();\n }, options.pollInterval);\n\n return () => {\n if (pollIntervalRef.current) {\n clearInterval(pollIntervalRef.current);\n }\n };\n }\n return undefined;\n }, [options.pollInterval, fetchRequests]);\n\n return {\n requests,\n total,\n page,\n totalPages,\n loading,\n error,\n fetchRequests,\n createRequest,\n getRequest,\n cancelRequest,\n resendRequest,\n refresh,\n };\n}\n\n// ============================================================================\n// useLocationCapture Hook (Customer-facing)\n// ============================================================================\n\n/**\n * React hook for location capture (customer-facing)\n *\n * Use this hook in the customer's browser to capture and submit their location.\n * The token is obtained from the share link sent via SMS/email.\n *\n * @param client - GeolocationClient instance\n * @param options - Hook options with token\n * @returns Location capture state and methods\n *\n * @example\n * ```tsx\n * function LocationSharePage({ token }: { token: string }) {\n * const {\n * shareInfo,\n * loading,\n * submitting,\n * error,\n * isExpired,\n * isCompleted,\n * captureAndSubmitGPS\n * } = useLocationCapture(client, {\n * token,\n * autoFetch: true\n * });\n *\n * if (loading) return <Spinner />;\n * if (isExpired) return <ExpiredMessage />;\n * if (isCompleted) return <ThankYouMessage />;\n *\n * return (\n * <div>\n * <p>Reason: {shareInfo?.reason}</p>\n * <button\n * onClick={captureAndSubmitGPS}\n * disabled={submitting}\n * >\n * {submitting ? 'Submitting...' : 'Share My Location'}\n * </button>\n * {error && <ErrorMessage error={error} />}\n * </div>\n * );\n * }\n * ```\n */\nexport function useLocationCapture(\n client: GeolocationClient,\n options: UseLocationCaptureOptions\n): UseLocationCaptureResult {\n const [shareInfo, setShareInfo] = useState<LocationShareInfo | null>(null);\n const [captureResponse, setCaptureResponse] = useState<LocationCaptureResponse | null>(null);\n const [loading, setLoading] = useState(false);\n const [submitting, setSubmitting] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const isExpired = shareInfo?.is_expired ?? false;\n const isCompleted = shareInfo?.is_completed ?? false;\n\n const fetchShareInfo = useCallback(async (): Promise<LocationShareInfo> => {\n setLoading(true);\n setError(null);\n\n try {\n const info = await client.getLocationShareInfo(options.token);\n setShareInfo(info);\n return info;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to fetch share info');\n setError(error);\n throw error;\n } finally {\n setLoading(false);\n }\n }, [client, options.token]);\n\n const submitLocation = useCallback(\n async (capture: LocationCaptureRequest): Promise<LocationCaptureResponse> => {\n setSubmitting(true);\n setError(null);\n\n try {\n const response = await client.captureLocation(options.token, capture);\n setCaptureResponse(response);\n\n // Update share info to reflect completion\n if (response.success) {\n setShareInfo((prev) =>\n prev ? { ...prev, is_completed: true, status: 'completed' } : prev\n );\n }\n\n return response;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to submit location');\n setError(error);\n throw error;\n } finally {\n setSubmitting(false);\n }\n },\n [client, options.token]\n );\n\n const captureAndSubmitGPS = useCallback(async (): Promise<LocationCaptureResponse> => {\n setSubmitting(true);\n setError(null);\n\n try {\n // Request GPS permission and get position\n const position = await new Promise<GeolocationPosition>((resolve, reject) => {\n if (!navigator.geolocation) {\n reject(new Error('Geolocation is not supported by this browser'));\n return;\n }\n\n navigator.geolocation.getCurrentPosition(resolve, reject, {\n enableHighAccuracy: true,\n timeout: 30000,\n maximumAge: 0,\n });\n });\n\n // Build capture request\n const capture: LocationCaptureRequest = {\n latitude: position.coords.latitude,\n longitude: position.coords.longitude,\n accuracy: position.coords.accuracy,\n user_agent: typeof navigator !== 'undefined' ? navigator.userAgent : undefined,\n device_info:\n typeof navigator !== 'undefined'\n ? {\n platform: navigator.platform,\n ...getBrowserInfo(),\n }\n : undefined,\n };\n\n // Submit the location\n return await submitLocation(capture);\n } catch (err) {\n let error: Error;\n\n if (err instanceof GeolocationPositionError) {\n switch (err.code) {\n case err.PERMISSION_DENIED:\n error = new Error('Location permission denied. Please enable location access.');\n break;\n case err.POSITION_UNAVAILABLE:\n error = new Error('Location information is unavailable.');\n break;\n case err.TIMEOUT:\n error = new Error('Location request timed out. Please try again.');\n break;\n default:\n error = new Error('Failed to get location');\n }\n } else {\n error = err instanceof Error ? err : new Error('Failed to capture location');\n }\n\n setError(error);\n throw error;\n } finally {\n setSubmitting(false);\n }\n }, [submitLocation]);\n\n // Auto-fetch share info on mount if enabled\n useEffect(() => {\n if (options.autoFetch && options.token) {\n fetchShareInfo();\n }\n }, [options.autoFetch, options.token, fetchShareInfo]);\n\n // Auto-request GPS if enabled and share info is loaded\n useEffect(() => {\n if (options.autoRequestGPS && shareInfo && !isExpired && !isCompleted) {\n captureAndSubmitGPS().catch(() => {\n // Error is already set in state, just catch to prevent unhandled rejection\n });\n }\n }, [options.autoRequestGPS, shareInfo, isExpired, isCompleted, captureAndSubmitGPS]);\n\n return {\n shareInfo,\n captureResponse,\n loading,\n submitting,\n error,\n isExpired,\n isCompleted,\n fetchShareInfo,\n submitLocation,\n captureAndSubmitGPS,\n };\n}\n","/**\n * CipherText Generation Utility\n *\n * Collects device fingerprint and location data from the browser,\n * encrypts it into a cipherText that can be validated by the server.\n *\n * The cipherText is used for:\n * - Registration verification\n * - Login verification\n * - Transaction verification\n * - Periodic location checks\n */\n\nimport type {\n CipherTextPayload,\n CipherTextOptions,\n CipherTextResult,\n CipherTextReason,\n} from './types';\n\nconst SDK_VERSION = '2.0.8';\nconst CIPHER_TEXT_EXPIRY_MINUTES = 5;\n\n/**\n * Generate a unique device ID that persists across sessions\n */\nfunction getOrCreateDeviceId(): string {\n if (typeof window === 'undefined' || typeof localStorage === 'undefined') {\n return generateUUID();\n }\n\n const storageKey = 'cgs_device_id';\n let deviceId = localStorage.getItem(storageKey);\n\n if (!deviceId) {\n deviceId = generateUUID();\n localStorage.setItem(storageKey, deviceId);\n }\n\n return deviceId;\n}\n\n/**\n * Generate a UUID v4\n */\nfunction generateUUID(): string {\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n\n // Fallback for older browsers\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\n/**\n * Detect browser information from user agent\n */\nfunction getBrowserInfo(): { browser: string; browser_version: string; os: string; os_version: string } {\n if (typeof navigator === 'undefined') {\n return { browser: 'unknown', browser_version: '', os: 'unknown', os_version: '' };\n }\n\n const ua = navigator.userAgent;\n let browser = 'unknown';\n let browserVersion = '';\n let os = 'unknown';\n let osVersion = '';\n\n // Detect browser\n if (ua.includes('Firefox/')) {\n browser = 'Firefox';\n browserVersion = ua.match(/Firefox\\/([\\d.]+)/)?.[1] || '';\n } else if (ua.includes('Edg/')) {\n browser = 'Edge';\n browserVersion = ua.match(/Edg\\/([\\d.]+)/)?.[1] || '';\n } else if (ua.includes('Chrome/')) {\n browser = 'Chrome';\n browserVersion = ua.match(/Chrome\\/([\\d.]+)/)?.[1] || '';\n } else if (ua.includes('Safari/') && !ua.includes('Chrome')) {\n browser = 'Safari';\n browserVersion = ua.match(/Version\\/([\\d.]+)/)?.[1] || '';\n } else if (ua.includes('Opera') || ua.includes('OPR/')) {\n browser = 'Opera';\n browserVersion = ua.match(/(?:Opera|OPR)\\/([\\d.]+)/)?.[1] || '';\n }\n\n // Detect OS\n if (ua.includes('Windows')) {\n os = 'Windows';\n if (ua.includes('Windows NT 10.0')) osVersion = '10';\n else if (ua.includes('Windows NT 6.3')) osVersion = '8.1';\n else if (ua.includes('Windows NT 6.2')) osVersion = '8';\n else if (ua.includes('Windows NT 6.1')) osVersion = '7';\n } else if (ua.includes('Mac OS X')) {\n os = 'macOS';\n osVersion = ua.match(/Mac OS X ([\\d_]+)/)?.[1]?.replace(/_/g, '.') || '';\n } else if (ua.includes('Linux')) {\n os = 'Linux';\n } else if (ua.includes('Android')) {\n os = 'Android';\n osVersion = ua.match(/Android ([\\d.]+)/)?.[1] || '';\n } else if (ua.includes('iOS') || ua.includes('iPhone') || ua.includes('iPad')) {\n os = 'iOS';\n osVersion = ua.match(/OS ([\\d_]+)/)?.[1]?.replace(/_/g, '.') || '';\n }\n\n return { browser, browser_version: browserVersion, os, os_version: osVersion };\n}\n\n/**\n * Get WebGL renderer information for fingerprinting\n */\nfunction getWebGLInfo(): { vendor: string; renderer: string } | null {\n if (typeof document === 'undefined') return null;\n\n try {\n const canvas = document.createElement('canvas');\n const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\n\n if (!gl) return null;\n\n const debugInfo = (gl as WebGLRenderingContext).getExtension('WEBGL_debug_renderer_info');\n if (!debugInfo) return null;\n\n return {\n vendor: (gl as WebGLRenderingContext).getParameter(debugInfo.UNMASKED_VENDOR_WEBGL) || '',\n renderer: (gl as WebGLRenderingContext).getParameter(debugInfo.UNMASKED_RENDERER_WEBGL) || '',\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Get network information if available\n */\nfunction getNetworkInfo(): CipherTextPayload['network'] | undefined {\n if (typeof navigator === 'undefined') return undefined;\n\n const connection = (navigator as any).connection ||\n (navigator as any).mozConnection ||\n (navigator as any).webkitConnection;\n\n if (!connection) return undefined;\n\n return {\n effective_type: connection.effectiveType,\n downlink: connection.downlink,\n rtt: connection.rtt,\n save_data: connection.saveData,\n };\n}\n\n/**\n * Request GPS location from the browser\n */\nasync function requestGPSLocation(\n timeout: number = 10000,\n highAccuracy: boolean = true\n): Promise<CipherTextPayload['location'] | null> {\n if (typeof navigator === 'undefined' || !navigator.geolocation) {\n return null;\n }\n\n return new Promise((resolve) => {\n navigator.geolocation.getCurrentPosition(\n (position) => {\n resolve({\n latitude: position.coords.latitude,\n longitude: position.coords.longitude,\n accuracy: position.coords.accuracy,\n altitude: position.coords.altitude ?? undefined,\n altitude_accuracy: position.coords.altitudeAccuracy ?? undefined,\n heading: position.coords.heading ?? undefined,\n speed: position.coords.speed ?? undefined,\n timestamp: position.timestamp,\n });\n },\n () => {\n // Location denied or error - resolve with null (non-fatal)\n resolve(null);\n },\n {\n enableHighAccuracy: highAccuracy,\n timeout: timeout,\n maximumAge: 0,\n }\n );\n });\n}\n\n/**\n * Collect device fingerprint data\n */\nfunction collectDeviceData(includeWebGL: boolean): CipherTextPayload['device'] {\n const browserInfo = getBrowserInfo();\n const webglInfo = includeWebGL ? getWebGLInfo() : null;\n\n return {\n device_id: getOrCreateDeviceId(),\n user_agent: typeof navigator !== 'undefined' ? navigator.userAgent : '',\n platform: typeof navigator !== 'undefined' ? navigator.platform : '',\n browser: browserInfo.browser,\n browser_version: browserInfo.browser_version,\n os: browserInfo.os,\n os_version: browserInfo.os_version,\n screen_resolution:\n typeof screen !== 'undefined' ? `${screen.width}x${screen.height}` : undefined,\n language: typeof navigator !== 'undefined' ? navigator.language : undefined,\n timezone: Intl?.DateTimeFormat?.()?.resolvedOptions?.()?.timeZone,\n color_depth: typeof screen !== 'undefined' ? screen.colorDepth : undefined,\n hardware_concurrency:\n typeof navigator !== 'undefined' ? navigator.hardwareConcurrency : undefined,\n device_memory: typeof navigator !== 'undefined' ? (navigator as any).deviceMemory : undefined,\n touch_support:\n typeof navigator !== 'undefined' ? navigator.maxTouchPoints > 0 : undefined,\n webgl_vendor: webglInfo?.vendor,\n webgl_renderer: webglInfo?.renderer,\n };\n}\n\n/**\n * Encode payload to base64\n */\nfunction encodePayload(payload: CipherTextPayload): string {\n const json = JSON.stringify(payload);\n\n if (typeof btoa !== 'undefined') {\n // Browser\n return btoa(unescape(encodeURIComponent(json)));\n } else if (typeof Buffer !== 'undefined') {\n // Node.js\n return Buffer.from(json, 'utf-8').toString('base64');\n }\n\n throw new Error('No base64 encoding method available');\n}\n\n/**\n * Simple XOR cipher for obfuscation (not cryptographic security)\n * The actual security comes from HTTPS and server-side validation\n */\nfunction obfuscate(data: string, key: string): string {\n let result = '';\n for (let i = 0; i < data.length; i++) {\n result += String.fromCharCode(data.charCodeAt(i) ^ key.charCodeAt(i % key.length));\n }\n return result;\n}\n\n/**\n * Generate a cipherText containing encrypted device and location data\n *\n * @param options - Options for cipherText generation\n * @returns CipherText result with the encrypted string\n *\n * @example\n * ```typescript\n * // Basic usage for login\n * const result = await generateCipherText({ reason: 'login' });\n * console.log(result.cipherText);\n *\n * // With GPS location for registration\n * const result = await generateCipherText({\n * reason: 'registration',\n * requestLocation: true,\n * locationTimeout: 15000\n * });\n *\n * if (result.locationCaptured) {\n * console.log('GPS location included');\n * }\n * ```\n */\nexport async function generateCipherText(options: CipherTextOptions): Promise<CipherTextResult> {\n const warnings: string[] = [];\n\n // Collect device data\n const deviceData = collectDeviceData(options.includeWebGL !== false);\n\n // Optionally request GPS location\n let locationData: CipherTextPayload['location'] | undefined;\n if (options.requestLocation) {\n const location = await requestGPSLocation(\n options.locationTimeout || 10000,\n options.highAccuracy !== false\n );\n\n if (location) {\n locationData = location;\n } else {\n warnings.push('GPS location not available or permission denied');\n }\n }\n\n // Collect network info\n let networkData: CipherTextPayload['network'] | undefined;\n if (options.includeNetworkInfo !== false) {\n networkData = getNetworkInfo();\n }\n\n // Build payload\n const now = new Date();\n const expiry = new Date(now.getTime() + CIPHER_TEXT_EXPIRY_MINUTES * 60 * 1000);\n\n const payload: CipherTextPayload = {\n device: deviceData,\n location: locationData,\n network: networkData,\n metadata: {\n collected_at: now.toISOString(),\n sdk_version: SDK_VERSION,\n collection_reason: options.reason,\n page_url: typeof window !== 'undefined' ? window.location.href : undefined,\n referrer: typeof document !== 'undefined' ? document.referrer || undefined : undefined,\n },\n };\n\n // Encode payload (no obfuscation - HTTPS provides transport security)\n const encoded = encodePayload(payload);\n\n // Create final cipherText with version and timestamp prefix\n // Format: version.timestamp.base64(json)\n const version = '01'; // CipherText format version\n const timestamp = now.getTime().toString(36); // Base36 timestamp\n const cipherText = `${version}.${timestamp}.${encoded}`;\n\n return {\n cipherText,\n locationCaptured: !!locationData,\n warnings: warnings.length > 0 ? warnings : undefined,\n generatedAt: now.toISOString(),\n expiresAt: expiry.toISOString(),\n };\n}\n\n/**\n * Decode a cipherText (for debugging/testing - not for production use)\n * In production, decryption happens on the server\n */\nexport function decodeCipherText(cipherText: string): CipherTextPayload | null {\n try {\n const parts = cipherText.split('.');\n if (parts.length !== 3) return null;\n\n const [version, timestampB36, obfuscatedB64] = parts;\n if (version !== '01') return null;\n\n const timestamp = parseInt(timestampB36, 36);\n const obfuscated = atob(obfuscatedB64);\n\n // We need the device_id to reconstruct the key, which we can get from localStorage\n const deviceId = getOrCreateDeviceId();\n const obfuscationKey = `cgs_${timestamp}_${deviceId.slice(0, 8)}`;\n\n const encoded = obfuscate(obfuscated, obfuscationKey); // XOR is symmetric\n const json = decodeURIComponent(escape(atob(encoded)));\n\n return JSON.parse(json) as CipherTextPayload;\n } catch {\n return null;\n }\n}\n\n/**\n * Check if a cipherText is expired\n */\nexport function isCipherTextExpired(cipherText: string): boolean {\n try {\n const parts = cipherText.split('.');\n if (parts.length !== 3) return true;\n\n const timestampB36 = parts[1];\n const timestamp = parseInt(timestampB36, 36);\n const now = Date.now();\n const expiryMs = CIPHER_TEXT_EXPIRY_MINUTES * 60 * 1000;\n\n return now - timestamp > expiryMs;\n } catch {\n return true;\n }\n}\n\n/**\n * React hook for generating cipherText\n *\n * @example\n * ```tsx\n * function LoginForm() {\n * const { generate, isGenerating, error } = useCipherText();\n *\n * const handleLogin = async () => {\n * const result = await generate({ reason: 'login' });\n * if (result) {\n * await loginMutation({ email, password, cipherText: result.cipherText });\n * }\n * };\n * }\n * ```\n */\nexport function useCipherText() {\n // This is a simple wrapper that can be used in React components\n // Import useState and useCallback from React when using\n\n const generate = async (options: CipherTextOptions): Promise<CipherTextResult | null> => {\n try {\n return await generateCipherText(options);\n } catch (error) {\n console.error('[CGS SDK] Failed to generate cipherText:', error);\n return null;\n }\n };\n\n return { generate };\n}\n\n// Re-export types\nexport type { CipherTextPayload, CipherTextOptions, CipherTextResult, CipherTextReason };\n","/**\n * React Hooks for CGS KYC SDK\n *\n * Provides convenient React hooks for using the KYC service in Next.js applications.\n */\n\nimport { useState, useEffect, useCallback, useRef } from 'react';\nimport { KycClient } from './client';\nimport type {\n KycRequest,\n KycRequestFilters,\n DocumentVerificationRequest,\n DocumentVerificationResponse,\n KycStatus,\n KycAlert,\n KycAlertFilters,\n UpdateKycAlertRequest,\n KycOverview,\n KycPreferences,\n UpdateKycPreferencesRequest,\n PaginationParams,\n UseKycSubmissionOptions,\n UseKycSubmissionResult,\n UseKycRequestsOptions,\n UseKycRequestsResult,\n UseKycAlertsOptions,\n UseKycAlertsResult,\n UseKycOverviewOptions,\n UseKycOverviewResult,\n UseKycPreferencesResult,\n} from './types';\n\n// ============================================================================\n// Shared Hooks for Auto-fetch and Polling\n// ============================================================================\n\n/** Hook for auto-fetching on mount */\nfunction useAutoFetch(autoFetch: boolean | undefined, fetchFn: () => void): void {\n useEffect(() => {\n if (autoFetch) {\n fetchFn();\n }\n }, [autoFetch, fetchFn]);\n}\n\n/** Hook for setting up polling intervals */\nfunction usePolling(pollInterval: number | undefined, fetchFn: () => void): void {\n const pollIntervalRef = useRef<NodeJS.Timeout>();\n\n useEffect(() => {\n if (pollInterval && pollInterval > 0) {\n pollIntervalRef.current = setInterval(fetchFn, pollInterval);\n return () => {\n if (pollIntervalRef.current) {\n clearInterval(pollIntervalRef.current);\n }\n };\n }\n return undefined;\n }, [pollInterval, fetchFn]);\n}\n\n// ============================================================================\n// useKycSubmission Hook\n// ============================================================================\n\n/**\n * React hook for submitting KYC document verification\n *\n * @param client - KycClient instance\n * @param options - Hook options\n * @returns KYC submission state and methods\n *\n * @example\n * ```tsx\n * function KycForm() {\n * const { submit, submission, loading, error, reset } = useKycSubmission(client, {\n * onComplete: (result) => {\n * console.log(\"Verification submitted:\", result.reference);\n * },\n * onError: (err) => {\n * console.error(\"Submission failed:\", err.message);\n * }\n * });\n *\n * const handleSubmit = async (formData: FormData) => {\n * await submit({\n * reference: formData.get(\"customerId\"),\n * email: formData.get(\"email\"),\n * document: {\n * proof: formData.get(\"documentImage\"),\n * selected_type: [\"id_card\", \"passport\"]\n * }\n * });\n * };\n *\n * return (\n * <form onSubmit={handleSubmit}>\n * {loading && <Spinner />}\n * {error && <ErrorMessage>{error.message}</ErrorMessage>}\n * {submission && <SuccessMessage>Submitted: {submission.reference}</SuccessMessage>}\n * </form>\n * );\n * }\n * ```\n */\nexport function useKycSubmission(\n client: KycClient,\n options: UseKycSubmissionOptions = {}\n): UseKycSubmissionResult {\n const [submission, setSubmission] = useState<DocumentVerificationResponse | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const submit = useCallback(\n async (request: DocumentVerificationRequest): Promise<DocumentVerificationResponse> => {\n setLoading(true);\n setError(null);\n\n try {\n const result = await client.submitVerification(request);\n setSubmission(result);\n options.onComplete?.(result);\n return result;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Verification submission failed');\n setError(error);\n options.onError?.(error);\n throw error;\n } finally {\n setLoading(false);\n }\n },\n [client, options]\n );\n\n const reset = useCallback(() => {\n setSubmission(null);\n setError(null);\n setLoading(false);\n }, []);\n\n return {\n submit,\n submission,\n loading,\n error,\n reset,\n };\n}\n\n// ============================================================================\n// useKycRequests Hook\n// ============================================================================\n\n/**\n * React hook for managing KYC requests\n *\n * @param client - KycClient instance\n * @param options - Hook options\n * @returns KYC requests state and management methods\n *\n * @example\n * ```tsx\n * function KycDashboard() {\n * const {\n * requests,\n * total,\n * loading,\n * fetchRequests,\n * updateStatus\n * } = useKycRequests(client, {\n * autoFetch: true,\n * filters: { status: \"pending\" },\n * pagination: { page: 1, page_size: 20 }\n * });\n *\n * return (\n * <div>\n * <h2>{total} Pending KYC Requests</h2>\n * {requests.map(req => (\n * <KycCard\n * key={req.id}\n * request={req}\n * onApprove={() => updateStatus(req.reference, \"accepted\", \"Verified\")}\n * onReject={() => updateStatus(req.reference, \"declined\", \"Invalid document\")}\n * />\n * ))}\n * </div>\n * );\n * }\n * ```\n */\nexport function useKycRequests(\n client: KycClient,\n options: UseKycRequestsOptions = {}\n): UseKycRequestsResult {\n const [requests, setRequests] = useState<KycRequest[]>([]);\n const [pagination, setPagination] = useState<{ total: number; page: number; limit: number; totalPages: number } | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchRequests = useCallback(\n async (filters?: KycRequestFilters, paginationParams?: PaginationParams) => {\n setLoading(true);\n setError(null);\n\n try {\n const result = await client.listKycRequests(\n filters || options.filters,\n paginationParams || options.pagination\n );\n setRequests(result.data);\n setPagination(result.pagination);\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to fetch KYC requests');\n setError(error);\n throw error;\n } finally {\n setLoading(false);\n }\n },\n [client, options.filters, options.pagination]\n );\n\n const getRequest = useCallback(\n async (id: string): Promise<KycRequest> => {\n try {\n return await client.getKycRequest(id);\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to get KYC request');\n setError(error);\n throw error;\n }\n },\n [client]\n );\n\n const updateStatus = useCallback(\n async (reference: string, status: KycStatus, reason?: string) => {\n try {\n await client.updateKycStatus({ reference, status, reason });\n setRequests((prev) =>\n prev.map((req) =>\n req.reference === reference\n ? {\n ...req,\n status,\n ...(status === 'accepted'\n ? { accepted_reason: reason }\n : { declined_reason: reason }),\n }\n : req\n )\n );\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to update KYC status');\n setError(error);\n throw error;\n }\n },\n [client]\n );\n\n const refresh = useCallback(async () => {\n await fetchRequests();\n }, [fetchRequests]);\n\n useAutoFetch(options.autoFetch, fetchRequests);\n usePolling(options.pollInterval, fetchRequests);\n\n return {\n requests,\n pagination,\n loading,\n error,\n fetchRequests,\n getRequest,\n updateStatus,\n refresh,\n };\n}\n\n// ============================================================================\n// useKycAlerts Hook\n// ============================================================================\n\n/**\n * React hook for managing KYC alerts\n *\n * @param client - KycClient instance\n * @param options - Hook options\n * @returns KYC alerts state and management methods\n *\n * @example\n * ```tsx\n * function AlertsPanel() {\n * const {\n * alerts,\n * total,\n * loading,\n * fetchAlerts,\n * updateAlert\n * } = useKycAlerts(client, {\n * autoFetch: true,\n * filters: { status: [\"pending\", \"in_progress\"], risk: \"critical\" },\n * pollInterval: 30000\n * });\n *\n * return (\n * <div>\n * <h2>{total} Critical Alerts</h2>\n * {alerts.map(alert => (\n * <AlertCard\n * key={alert.id}\n * alert={alert}\n * onAssign={(userId) => updateAlert(alert.id, { assigned_for: userId, status: \"in_progress\" })}\n * onResolve={() => updateAlert(alert.id, { status: \"resolved\", reason: \"Verified\" })}\n * />\n * ))}\n * </div>\n * );\n * }\n * ```\n */\nexport function useKycAlerts(\n client: KycClient,\n options: UseKycAlertsOptions = {}\n): UseKycAlertsResult {\n const [alerts, setAlerts] = useState<KycAlert[]>([]);\n const [pagination, setPagination] = useState<{ total: number; page: number; limit: number; totalPages: number } | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchAlerts = useCallback(\n async (filters?: KycAlertFilters, paginationParams?: PaginationParams) => {\n setLoading(true);\n setError(null);\n\n try {\n const result = await client.listAlerts(\n filters || options.filters,\n paginationParams || options.pagination\n );\n setAlerts(result.alerts);\n setPagination(result.pagination);\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to fetch KYC alerts');\n setError(error);\n throw error;\n } finally {\n setLoading(false);\n }\n },\n [client, options.filters, options.pagination]\n );\n\n const getAlert = useCallback(\n async (id: string): Promise<KycAlert> => {\n try {\n return await client.getAlert(id);\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to get KYC alert');\n setError(error);\n throw error;\n }\n },\n [client]\n );\n\n const updateAlert = useCallback(\n async (id: string, update: UpdateKycAlertRequest) => {\n try {\n await client.updateAlert(id, update);\n setAlerts((prev) =>\n prev.map((alert) =>\n alert.id === id ? { ...alert, ...update } : alert\n )\n );\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to update KYC alert');\n setError(error);\n throw error;\n }\n },\n [client]\n );\n\n const refresh = useCallback(async () => {\n await fetchAlerts();\n }, [fetchAlerts]);\n\n useAutoFetch(options.autoFetch, fetchAlerts);\n usePolling(options.pollInterval, fetchAlerts);\n\n return {\n alerts,\n pagination,\n loading,\n error,\n fetchAlerts,\n getAlert,\n updateAlert,\n refresh,\n };\n}\n\n// ============================================================================\n// useKycOverview Hook\n// ============================================================================\n\n/**\n * React hook for KYC overview statistics\n *\n * @param client - KycClient instance\n * @param options - Hook options\n * @returns KYC overview state\n *\n * @example\n * ```tsx\n * function KycStats() {\n * const { overview, loading, refresh } = useKycOverview(client, {\n * autoFetch: true,\n * fromDate: \"2024-01-01T00:00:00Z\",\n * toDate: \"2024-12-31T23:59:59Z\"\n * });\n *\n * if (loading) return <Spinner />;\n *\n * return (\n * <div>\n * <StatCard label=\"Total\" value={overview?.total} />\n * <StatCard label=\"Pending\" value={overview?.pending} />\n * <StatCard label=\"Approved\" value={overview?.approved} />\n * <StatCard label=\"Rejected\" value={overview?.rejected} />\n * <StatCard label=\"High Risk\" value={overview?.high_risk} />\n * </div>\n * );\n * }\n * ```\n */\nexport function useKycOverview(\n client: KycClient,\n options: UseKycOverviewOptions = {}\n): UseKycOverviewResult {\n const [overview, setOverview] = useState<KycOverview | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchOverview = useCallback(\n async (fromDate?: string, toDate?: string) => {\n setLoading(true);\n setError(null);\n\n try {\n const result = await client.getOverview(\n fromDate || options.fromDate,\n toDate || options.toDate\n );\n setOverview(result);\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to fetch KYC overview');\n setError(error);\n throw error;\n } finally {\n setLoading(false);\n }\n },\n [client, options.fromDate, options.toDate]\n );\n\n useAutoFetch(options.autoFetch, fetchOverview);\n\n return {\n overview,\n loading,\n error,\n refresh: fetchOverview,\n };\n}\n\n// ============================================================================\n// useKycPreferences Hook\n// ============================================================================\n\n/**\n * React hook for managing KYC preferences\n *\n * @param client - KycClient instance\n * @param autoFetch - Auto-fetch preferences on mount (default: true)\n * @returns KYC preferences state and methods\n *\n * @example\n * ```tsx\n * function PreferencesForm() {\n * const { preferences, loading, updatePreferences, refresh } = useKycPreferences(client);\n *\n * const handleUpdate = async (e: FormEvent) => {\n * e.preventDefault();\n * await updatePreferences({\n * is_face_verification_required: true,\n * required_document_count: 2\n * });\n * };\n *\n * if (loading) return <Spinner />;\n *\n * return (\n * <form onSubmit={handleUpdate}>\n * <Checkbox\n * label=\"Require Face Verification\"\n * checked={preferences?.is_face_verification_required}\n * />\n * <NumberInput\n * label=\"Required Documents\"\n * value={preferences?.required_document_count}\n * />\n * <Button type=\"submit\">Save</Button>\n * </form>\n * );\n * }\n * ```\n */\nexport function useKycPreferences(\n client: KycClient,\n autoFetch: boolean = true\n): UseKycPreferencesResult {\n const [preferences, setPreferences] = useState<KycPreferences | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchPreferences = useCallback(async () => {\n setLoading(true);\n setError(null);\n\n try {\n const result = await client.getPreferences();\n setPreferences(result);\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to fetch KYC preferences');\n setError(error);\n throw error;\n } finally {\n setLoading(false);\n }\n }, [client]);\n\n const updatePreferences = useCallback(\n async (update: UpdateKycPreferencesRequest) => {\n setLoading(true);\n setError(null);\n\n try {\n const result = await client.updatePreferences(update);\n setPreferences(result);\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to update KYC preferences');\n setError(error);\n throw error;\n } finally {\n setLoading(false);\n }\n },\n [client]\n );\n\n useAutoFetch(autoFetch, fetchPreferences);\n\n return {\n preferences,\n loading,\n error,\n updatePreferences,\n refresh: fetchPreferences,\n };\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Convert a File to base64 string for document upload\n *\n * @param file - File object from input or drag-drop\n * @returns Base64 encoded string\n *\n * @example\n * ```typescript\n * const handleFileSelect = async (e: ChangeEvent<HTMLInputElement>) => {\n * const file = e.target.files?.[0];\n * if (file) {\n * const base64 = await fileToBase64(file);\n * setDocumentProof(base64);\n * }\n * };\n * ```\n */\nexport function fileToBase64(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n const result = reader.result as string;\n // Remove data URL prefix (e.g., \"data:image/png;base64,\")\n const base64 = result.split(',')[1];\n resolve(base64);\n };\n reader.onerror = reject;\n reader.readAsDataURL(file);\n });\n}\n\n/**\n * Validate file type for document upload\n *\n * @param file - File object to validate\n * @param allowedTypes - Array of allowed MIME types\n * @returns boolean indicating if file type is valid\n *\n * @example\n * ```typescript\n * const validTypes = ['image/jpeg', 'image/png', 'application/pdf'];\n * if (!isValidFileType(file, validTypes)) {\n * alert('Invalid file type. Please upload a JPG, PNG, or PDF.');\n * }\n * ```\n */\nexport function isValidFileType(\n file: File,\n allowedTypes: string[] = ['image/jpeg', 'image/png', 'image/webp', 'application/pdf']\n): boolean {\n return allowedTypes.includes(file.type);\n}\n\n/**\n * Validate file size for document upload\n *\n * @param file - File object to validate\n * @param maxSizeBytes - Maximum file size in bytes (default: 10MB)\n * @returns boolean indicating if file size is valid\n *\n * @example\n * ```typescript\n * const maxSize = 5 * 1024 * 1024; // 5MB\n * if (!isValidFileSize(file, maxSize)) {\n * alert('File too large. Maximum size is 5MB.');\n * }\n * ```\n */\nexport function isValidFileSize(file: File, maxSizeBytes: number = 10 * 1024 * 1024): boolean {\n return file.size <= maxSizeBytes;\n}\n\n/**\n * Format KYC status for display\n *\n * @param status - KYC status\n * @returns Human-readable status string\n */\nexport function formatKycStatus(status: string): string {\n const statusMap: Record<string, string> = {\n pending: 'Pending Review',\n accepted: 'Approved',\n declined: 'Rejected',\n 'review.pending': 'Under Review',\n unknown: 'Unknown',\n };\n return statusMap[status] || status;\n}\n\n/**\n * Get status color for UI display\n *\n * @param status - KYC status\n * @returns CSS color class or hex color\n */\nexport function getStatusColor(status: string): string {\n const colorMap: Record<string, string> = {\n pending: '#f59e0b', // amber\n accepted: '#10b981', // green\n declined: '#ef4444', // red\n 'review.pending': '#3b82f6', // blue\n unknown: '#6b7280', // gray\n };\n return colorMap[status] || '#6b7280';\n}\n\n/**\n * Get risk level color for UI display\n *\n * @param risk - Risk level\n * @returns CSS color class or hex color\n */\nexport function getRiskColor(risk: string): string {\n const colorMap: Record<string, string> = {\n low: '#10b981', // green\n medium: '#f59e0b', // amber\n high: '#f97316', // orange\n critical: '#ef4444', // red\n };\n return colorMap[risk] || '#6b7280';\n}\n"]}
@@ -0,0 +1,228 @@
1
+ import { B as BaseClient, a as BaseClientConfig } from '../types-Bnsnejor.mjs';
2
+ export { g as EntityType } from '../types-Bnsnejor.mjs';
3
+ import { d as CreateProfileRequest, C as CustomerProfile, P as ProfileDetailsResponse, U as UpdateProfileRequest, e as ProfileFilters, f as ProfileListResponse, g as RiskDashboardMetrics, h as RiskConfiguration } from '../types-CqOLbaXk.mjs';
4
+ export { E as EmploymentType, L as LegalForm, R as RiskCategory, a as RiskFactor, b as RiskFactorType, c as RiskHistory, S as ScreeningStatus } from '../types-CqOLbaXk.mjs';
5
+
6
+ /**
7
+ * RiskProfileClient - Customer Risk Profile Management
8
+ *
9
+ * Provides methods to create, retrieve, and manage customer risk profiles
10
+ * in the Vesant Compliance Platform.
11
+ */
12
+
13
+ declare class RiskProfileClient extends BaseClient {
14
+ constructor(config: BaseClientConfig);
15
+ /**
16
+ * Create a new customer risk profile
17
+ *
18
+ * @param request - Profile creation data
19
+ * @returns Created customer profile
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const profile = await client.createProfile({
24
+ * customer_id: 'CUST-12345',
25
+ * entity_type: 'individual',
26
+ * customer_status: 'active',
27
+ * full_name: 'John Doe',
28
+ * email_address: 'john@example.com',
29
+ * date_of_birth: '1990-01-15',
30
+ * country_of_residence: 'US'
31
+ * });
32
+ * ```
33
+ */
34
+ createProfile(request: CreateProfileRequest): Promise<CustomerProfile>;
35
+ /**
36
+ * Get customer profile by customer ID
37
+ *
38
+ * Note: This searches for the profile using the customer_id field.
39
+ * Returns the first matching profile for the tenant.
40
+ *
41
+ * @param customerId - Customer ID to search for
42
+ * @returns Customer profile
43
+ *
44
+ * @example
45
+ * ```typescript
46
+ * const profile = await client.getProfile('CUST-12345');
47
+ * console.log('Risk score:', profile.risk_score);
48
+ * ```
49
+ */
50
+ getProfile(customerId: string): Promise<CustomerProfile>;
51
+ /**
52
+ * Get profile by UUID
53
+ *
54
+ * @param profileId - Profile UUID
55
+ * @returns Customer profile
56
+ */
57
+ getProfileById(profileId: string): Promise<CustomerProfile>;
58
+ /**
59
+ * Get detailed profile information including risk factors and history
60
+ *
61
+ * @param profileId - Profile UUID
62
+ * @returns Detailed profile response with risk factors and history
63
+ *
64
+ * @example
65
+ * ```typescript
66
+ * const details = await client.getProfileDetails(profileId);
67
+ * console.log('Risk factors:', details.risk_factors);
68
+ * console.log('Risk history:', details.risk_history);
69
+ * console.log('Alert counts:', {
70
+ * watchlist: details.watchlist_alert_count,
71
+ * fraud: details.fraud_alert_count,
72
+ * geo: details.geolocation_alert_count
73
+ * });
74
+ * ```
75
+ */
76
+ getProfileDetails(profileId: string): Promise<ProfileDetailsResponse>;
77
+ /**
78
+ * Update customer profile
79
+ *
80
+ * @param profileId - Profile UUID
81
+ * @param updates - Fields to update
82
+ * @returns Updated customer profile
83
+ *
84
+ * @example
85
+ * ```typescript
86
+ * const updated = await client.updateProfile(profileId, {
87
+ * location: 'New York, USA',
88
+ * location_compliance: 'compliant',
89
+ * last_recorded_activity: new Date().toISOString()
90
+ * });
91
+ * ```
92
+ */
93
+ updateProfile(profileId: string, updates: UpdateProfileRequest): Promise<CustomerProfile>;
94
+ /**
95
+ * Manually recalculate risk score for a profile
96
+ *
97
+ * Triggers immediate risk score recalculation based on current risk factors.
98
+ *
99
+ * @param profileId - Profile UUID
100
+ * @param reason - Optional reason for recalculation
101
+ *
102
+ * @example
103
+ * ```typescript
104
+ * await client.recalculateRiskScore(profileId, 'Manual review completed');
105
+ * ```
106
+ */
107
+ recalculateRiskScore(profileId: string, reason?: string): Promise<void>;
108
+ /**
109
+ * Query profiles with advanced filters
110
+ *
111
+ * @param filters - Filter criteria and pagination
112
+ * @returns Paginated list of profiles
113
+ *
114
+ * @example
115
+ * ```typescript
116
+ * const results = await client.queryProfiles({
117
+ * risk_category: ['high', 'critical'],
118
+ * kyc_status: ['pending'],
119
+ * is_pep: true,
120
+ * page: 1,
121
+ * page_size: 20,
122
+ * sort_by: 'risk_score',
123
+ * sort_order: 'desc'
124
+ * });
125
+ *
126
+ * console.log(`Found ${results.total} high-risk profiles`);
127
+ * results.data.forEach(profile => {
128
+ * console.log(`${profile.full_name}: ${profile.risk_score}`);
129
+ * });
130
+ * ```
131
+ */
132
+ queryProfiles(filters?: ProfileFilters): Promise<ProfileListResponse>;
133
+ /**
134
+ * Search profiles by text (searches name, email, customer_id, account_number)
135
+ *
136
+ * @param searchText - Text to search for
137
+ * @param limit - Maximum results to return (default: 10)
138
+ * @returns Array of matching profiles
139
+ */
140
+ searchProfiles(searchText: string, limit?: number): Promise<CustomerProfile[]>;
141
+ /**
142
+ * Get all high-risk profiles (high + critical)
143
+ *
144
+ * @param limit - Maximum results to return (default: 50)
145
+ * @returns Array of high-risk profiles
146
+ */
147
+ getHighRiskProfiles(limit?: number): Promise<CustomerProfile[]>;
148
+ /**
149
+ * Get profiles requiring PEP review
150
+ *
151
+ * @param limit - Maximum results to return (default: 50)
152
+ * @returns Array of PEP profiles
153
+ */
154
+ getPEPProfiles(limit?: number): Promise<CustomerProfile[]>;
155
+ /**
156
+ * Get profiles with sanctions matches
157
+ *
158
+ * @param limit - Maximum results to return (default: 50)
159
+ * @returns Array of sanctioned profiles
160
+ */
161
+ getSanctionedProfiles(limit?: number): Promise<CustomerProfile[]>;
162
+ /**
163
+ * Get risk dashboard metrics and statistics
164
+ *
165
+ * @param startDate - Optional start date for metrics (ISO format)
166
+ * @param endDate - Optional end date for metrics (ISO format)
167
+ * @returns Dashboard metrics
168
+ *
169
+ * @example
170
+ * ```typescript
171
+ * const metrics = await client.getDashboardMetrics();
172
+ * console.log('Total risky profiles:', metrics.total_risky_profiles);
173
+ * console.log('Critical profiles:', metrics.total_critical_profiles);
174
+ * console.log('Average risk score:', metrics.average_risk_score);
175
+ *
176
+ * metrics.risk_distribution.forEach(item => {
177
+ * console.log(`${item.category}: ${item.count} (${item.percentage}%)`);
178
+ * });
179
+ * ```
180
+ */
181
+ getDashboardMetrics(startDate?: string, endDate?: string): Promise<RiskDashboardMetrics>;
182
+ /**
183
+ * Get or create profile (idempotent operation)
184
+ *
185
+ * Attempts to get existing profile by customer_id, creates if not found.
186
+ *
187
+ * @param customerId - Customer ID
188
+ * @param createRequest - Profile data to use if creating new profile
189
+ * @returns Existing or newly created profile
190
+ *
191
+ * @example
192
+ * ```typescript
193
+ * const profile = await client.getOrCreateProfile('CUST-123', {
194
+ * customer_id: 'CUST-123',
195
+ * entity_type: 'individual',
196
+ * full_name: 'John Doe',
197
+ * email_address: 'john@example.com'
198
+ * });
199
+ * ```
200
+ */
201
+ getOrCreateProfile(customerId: string, createRequest: CreateProfileRequest): Promise<CustomerProfile>;
202
+ /**
203
+ * Batch get profiles by customer IDs
204
+ *
205
+ * @param customerIds - Array of customer IDs
206
+ * @returns Array of profiles (may be less than input if some not found)
207
+ */
208
+ batchGetProfiles(customerIds: string[]): Promise<CustomerProfile[]>;
209
+ /**
210
+ * Get risk configuration for tenant
211
+ *
212
+ * Returns the risk scoring weights and thresholds configured for the tenant.
213
+ *
214
+ * @returns Risk configuration
215
+ */
216
+ getRiskConfiguration(): Promise<RiskConfiguration>;
217
+ /**
218
+ * Update risk configuration for tenant
219
+ *
220
+ * Updates risk scoring weights and/or thresholds.
221
+ *
222
+ * @param config - Configuration updates
223
+ * @returns Updated risk configuration
224
+ */
225
+ updateRiskConfiguration(config: Partial<RiskConfiguration>): Promise<RiskConfiguration>;
226
+ }
227
+
228
+ export { CreateProfileRequest, CustomerProfile, ProfileDetailsResponse, ProfileFilters, ProfileListResponse, RiskConfiguration, RiskDashboardMetrics, RiskProfileClient, UpdateProfileRequest };