@fileflow/sdk 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{ImportWizard-BkHlsJ8v.mjs → ImportWizard-CtAWJz5i.mjs} +520 -496
- package/dist/{ImportWizard-BkHlsJ8v.mjs.map → ImportWizard-CtAWJz5i.mjs.map} +1 -1
- package/dist/ImportWizard-D7zGFzbo.js +68 -0
- package/dist/{ImportWizard-mc9UDwP3.js.map → ImportWizard-D7zGFzbo.js.map} +1 -1
- package/dist/KYCWizard-DpNw8vOY.mjs +741 -0
- package/dist/KYCWizard-DpNw8vOY.mjs.map +1 -0
- package/dist/KYCWizard-VcCyxPjW.js +32 -0
- package/dist/KYCWizard-VcCyxPjW.js.map +1 -0
- package/dist/import.d.ts +11 -1
- package/dist/import.js +1 -1
- package/dist/import.mjs +1 -1
- package/dist/index-CEvc89fO.mjs +9086 -0
- package/dist/index-CEvc89fO.mjs.map +1 -0
- package/dist/index-VbMSbLb2.js +112 -0
- package/dist/index-VbMSbLb2.js.map +1 -0
- package/dist/index.d.ts +41 -1
- package/dist/index.js +1 -1
- package/dist/index.mjs +27 -19
- package/dist/kyc.js +1 -1
- package/dist/kyc.mjs +1 -1
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/dist/ImportWizard-mc9UDwP3.js +0 -68
- package/dist/KYCWizard-CRBXY9Np.js +0 -32
- package/dist/KYCWizard-CRBXY9Np.js.map +0 -1
- package/dist/KYCWizard-D3Leb4rK.mjs +0 -4575
- package/dist/KYCWizard-D3Leb4rK.mjs.map +0 -1
- package/dist/index-BdodGzlO.js +0 -112
- package/dist/index-BdodGzlO.js.map +0 -1
- package/dist/index-CML_nPxo.mjs +0 -5101
- package/dist/index-CML_nPxo.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KYCWizard-DpNw8vOY.mjs","sources":["../../../node_modules/.pnpm/lucide-react@0.321.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/car.js","../../../node_modules/.pnpm/lucide-react@0.321.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/clock.js","../../../node_modules/.pnpm/lucide-react@0.321.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/file-text.js","../../../node_modules/.pnpm/lucide-react@0.321.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/home.js","../../../node_modules/.pnpm/lucide-react@0.321.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/image.js","../../../node_modules/.pnpm/lucide-react@0.321.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/shield-check.js","../src/store/kyc-store.ts","../src/kyc/components/DocumentUploader.tsx","../src/kyc/components/DocumentStatus.tsx","../src/kyc/components/KYCWizard.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.321.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Car = createLucideIcon(\"Car\", [\n [\n \"path\",\n {\n d: \"M19 17h2c.6 0 1-.4 1-1v-3c0-.9-.7-1.7-1.5-1.9C18.7 10.6 16 10 16 10s-1.3-1.4-2.2-2.3c-.5-.4-1.1-.7-1.8-.7H5c-.6 0-1.1.4-1.4.9l-1.4 2.9A3.7 3.7 0 0 0 2 12v4c0 .6.4 1 1 1h2\",\n key: \"5owen\"\n }\n ],\n [\"circle\", { cx: \"7\", cy: \"17\", r: \"2\", key: \"u2ysq9\" }],\n [\"path\", { d: \"M9 17h6\", key: \"r8uit2\" }],\n [\"circle\", { cx: \"17\", cy: \"17\", r: \"2\", key: \"axvx0g\" }]\n]);\n\nexport { Car as default };\n//# sourceMappingURL=car.js.map\n","/**\n * @license lucide-react v0.321.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Clock = createLucideIcon(\"Clock\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"polyline\", { points: \"12 6 12 12 16 14\", key: \"68esgv\" }]\n]);\n\nexport { Clock as default };\n//# sourceMappingURL=clock.js.map\n","/**\n * @license lucide-react v0.321.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst FileText = createLucideIcon(\"FileText\", [\n [\"path\", { d: \"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\", key: \"1rqfz7\" }],\n [\"path\", { d: \"M14 2v4a2 2 0 0 0 2 2h4\", key: \"tnqrlb\" }],\n [\"path\", { d: \"M10 9H8\", key: \"b1mrlr\" }],\n [\"path\", { d: \"M16 13H8\", key: \"t4e002\" }],\n [\"path\", { d: \"M16 17H8\", key: \"z1uh3a\" }]\n]);\n\nexport { FileText as default };\n//# sourceMappingURL=file-text.js.map\n","/**\n * @license lucide-react v0.321.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Home = createLucideIcon(\"Home\", [\n [\"path\", { d: \"m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\", key: \"y5dka4\" }],\n [\"polyline\", { points: \"9 22 9 12 15 12 15 22\", key: \"e2us08\" }]\n]);\n\nexport { Home as default };\n//# sourceMappingURL=home.js.map\n","/**\n * @license lucide-react v0.321.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Image = createLucideIcon(\"Image\", [\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", ry: \"2\", key: \"1m3agn\" }],\n [\"circle\", { cx: \"9\", cy: \"9\", r: \"2\", key: \"af1f0g\" }],\n [\"path\", { d: \"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\", key: \"1xmnt7\" }]\n]);\n\nexport { Image as default };\n//# sourceMappingURL=image.js.map\n","/**\n * @license lucide-react v0.321.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ShieldCheck = createLucideIcon(\"ShieldCheck\", [\n [\"path\", { d: \"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10\", key: \"1irkt0\" }],\n [\"path\", { d: \"m9 12 2 2 4-4\", key: \"dzmm74\" }]\n]);\n\nexport { ShieldCheck as default };\n//# sourceMappingURL=shield-check.js.map\n","import { create } from 'zustand';\nimport type { \n DocumentType, \n KYCDocument, \n DocumentStatus,\n FraudFlag,\n ExtractedData,\n} from '@fileflow/shared';\n\nexport type KYCStep = 'select' | 'upload' | 'processing' | 'review' | 'complete';\n\nexport interface DocumentState {\n id: string | null;\n type: DocumentType;\n status: DocumentStatus;\n file: File | null;\n previewUrl: string | null;\n extractedData: ExtractedData | null;\n confidence: number;\n fraudFlags: FraudFlag[];\n error: string | null;\n}\n\nexport interface KYCState {\n // Session\n sessionId: string | null;\n status: string;\n step: KYCStep;\n \n // Required documents\n requiredDocuments: DocumentType[];\n currentDocumentType: DocumentType | null;\n \n // Document states\n documents: Map<DocumentType, DocumentState>;\n \n // Verification\n isVerified: boolean;\n verificationStatus: object | null;\n \n // UI state\n isLoading: boolean;\n error: string | null;\n}\n\nexport interface KYCActions {\n // Initialize\n setSessionId: (sessionId: string) => void;\n setRequiredDocuments: (documents: DocumentType[]) => void;\n \n // Document management\n setCurrentDocumentType: (type: DocumentType) => void;\n setDocumentFile: (type: DocumentType, file: File) => void;\n setDocumentStatus: (type: DocumentType, status: DocumentStatus) => void;\n setDocumentData: (type: DocumentType, data: Partial<DocumentState>) => void;\n clearDocumentPreview: (type: DocumentType) => void;\n \n // Navigation\n setStep: (step: KYCStep) => void;\n nextDocument: () => void;\n \n // Verification\n setVerificationStatus: (status: object) => void;\n setVerified: (verified: boolean) => void;\n \n // Status\n setStatus: (status: string) => void;\n setLoading: (loading: boolean) => void;\n setError: (error: string | null) => void;\n \n // Helpers\n getNextRequiredDocument: () => DocumentType | null;\n areAllDocumentsUploaded: () => boolean;\n areAllDocumentsProcessed: () => boolean;\n \n // Reset\n reset: () => void;\n}\n\nconst createEmptyDocumentState = (type: DocumentType): DocumentState => ({\n id: null,\n type,\n status: 'uploaded',\n file: null,\n previewUrl: null,\n extractedData: null,\n confidence: 0,\n fraudFlags: [],\n error: null,\n});\n\nconst initialState: KYCState = {\n sessionId: null,\n status: 'idle',\n step: 'select',\n requiredDocuments: [],\n currentDocumentType: null,\n documents: new Map(),\n isVerified: false,\n verificationStatus: null,\n isLoading: false,\n error: null,\n};\n\nexport const useKYCStore = create<KYCState & KYCActions>((set, get) => ({\n ...initialState,\n\n setSessionId: (sessionId) => set({ sessionId }),\n\n setRequiredDocuments: (documents) => {\n const docsMap = new Map<DocumentType, DocumentState>();\n for (const type of documents) {\n docsMap.set(type, createEmptyDocumentState(type));\n }\n set({ \n requiredDocuments: documents, \n documents: docsMap,\n currentDocumentType: documents[0] || null,\n });\n },\n\n setCurrentDocumentType: (type) => set({ currentDocumentType: type }),\n\n setDocumentFile: (type, file) => {\n const { documents } = get();\n const doc = documents.get(type) || createEmptyDocumentState(type);\n \n // Create preview URL\n const previewUrl = URL.createObjectURL(file);\n \n const updated = new Map(documents);\n updated.set(type, {\n ...doc,\n file,\n previewUrl,\n status: 'uploaded',\n error: null,\n });\n \n set({ documents: updated });\n },\n\n setDocumentStatus: (type, status) => {\n const { documents } = get();\n const doc = documents.get(type);\n if (doc) {\n const updated = new Map(documents);\n updated.set(type, { ...doc, status });\n set({ documents: updated });\n }\n },\n\n setDocumentData: (type, data) => {\n const { documents } = get();\n const doc = documents.get(type);\n if (doc) {\n const updated = new Map(documents);\n updated.set(type, { ...doc, ...data });\n set({ documents: updated });\n }\n },\n\n clearDocumentPreview: (type) => {\n const { documents } = get();\n const doc = documents.get(type);\n if (doc?.previewUrl) {\n URL.revokeObjectURL(doc.previewUrl);\n }\n },\n\n setStep: (step) => set({ step }),\n\n nextDocument: () => {\n const { requiredDocuments, currentDocumentType, documents } = get();\n const currentIndex = currentDocumentType \n ? requiredDocuments.indexOf(currentDocumentType) \n : -1;\n \n // Find next document that needs upload\n for (let i = currentIndex + 1; i < requiredDocuments.length; i++) {\n const type = requiredDocuments[i];\n const doc = documents.get(type);\n if (!doc?.file) {\n set({ currentDocumentType: type });\n return;\n }\n }\n \n // All documents uploaded, move to processing/review\n set({ \n currentDocumentType: null,\n step: 'processing',\n });\n },\n\n setVerificationStatus: (status) => set({ verificationStatus: status }),\n \n setVerified: (verified) => set({ isVerified: verified }),\n\n setStatus: (status) => set({ status }),\n \n setLoading: (isLoading) => set({ isLoading }),\n \n setError: (error) => set({ error }),\n\n getNextRequiredDocument: () => {\n const { requiredDocuments, documents } = get();\n for (const type of requiredDocuments) {\n const doc = documents.get(type);\n if (!doc?.file) {\n return type;\n }\n }\n return null;\n },\n\n areAllDocumentsUploaded: () => {\n const { requiredDocuments, documents } = get();\n return requiredDocuments.every((type) => {\n const doc = documents.get(type);\n return doc?.file !== null;\n });\n },\n\n areAllDocumentsProcessed: () => {\n const { requiredDocuments, documents } = get();\n return requiredDocuments.every((type) => {\n const doc = documents.get(type);\n return doc?.status === 'completed' || doc?.status === 'requires_review';\n });\n },\n\n reset: () => {\n // Clean up preview URLs\n const { documents } = get();\n for (const doc of documents.values()) {\n if (doc.previewUrl) {\n URL.revokeObjectURL(doc.previewUrl);\n }\n }\n set(initialState);\n },\n}));\n","import React, { useCallback } from 'react';\nimport { useDropzone } from 'react-dropzone';\nimport { Upload, FileText, Image, AlertCircle, X } from 'lucide-react';\nimport { clsx } from 'clsx';\nimport { useKYCStore } from '../../store/kyc-store';\nimport type { DocumentType } from '@fileflow/shared';\nimport { DOCUMENT_TYPES } from '@fileflow/shared';\n\ninterface DocumentUploaderProps {\n documentType: DocumentType;\n onFileSelect?: (file: File) => void;\n}\n\nexport const DocumentUploader: React.FC<DocumentUploaderProps> = ({\n documentType,\n onFileSelect,\n}) => {\n const { documents, setDocumentFile, isLoading } = useKYCStore();\n const documentState = documents.get(documentType);\n const documentInfo = DOCUMENT_TYPES[documentType];\n\n const onDrop = useCallback(\n (acceptedFiles: File[], rejectedFiles: unknown[]) => {\n if (rejectedFiles.length > 0) {\n return;\n }\n\n if (acceptedFiles.length > 0) {\n const file = acceptedFiles[0];\n setDocumentFile(documentType, file);\n onFileSelect?.(file);\n }\n },\n [documentType, onFileSelect, setDocumentFile]\n );\n\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n onDrop,\n accept: {\n 'application/pdf': ['.pdf'],\n 'image/jpeg': ['.jpg', '.jpeg'],\n 'image/png': ['.png'],\n },\n maxSize: documentInfo.maxFileSize,\n multiple: false,\n disabled: isLoading,\n });\n\n const formatFileSize = (bytes: number): string => {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n };\n\n const getFileIcon = () => {\n if (documentState?.file?.type === 'application/pdf') {\n return <FileText className=\"ff-w-6 ff-h-6\" />;\n }\n return <Image className=\"ff-w-6 ff-h-6\" />;\n };\n\n const clearFile = (e: React.MouseEvent) => {\n e.stopPropagation();\n useKYCStore.getState().clearDocumentPreview(documentType);\n setDocumentFile(documentType, null as unknown as File);\n };\n\n // Show preview if file is selected\n if (documentState?.file && documentState.previewUrl) {\n return (\n <div className=\"ff-space-y-4\">\n {/* Document Info */}\n <div className=\"ff-bg-primary-50 ff-border ff-border-primary-200 ff-rounded-lg ff-p-4\">\n <div className=\"ff-flex ff-items-center ff-gap-3\">\n <div className=\"ff-p-2 ff-bg-primary-100 ff-rounded-lg ff-text-primary-600\">\n {getFileIcon()}\n </div>\n <div className=\"ff-flex-1 ff-min-w-0\">\n <p className=\"ff-font-medium ff-text-primary-900 ff-truncate\">\n {documentState.file.name}\n </p>\n <p className=\"ff-text-sm ff-text-primary-600\">\n {formatFileSize(documentState.file.size)}\n </p>\n </div>\n <button\n onClick={clearFile}\n className=\"ff-p-1.5 ff-text-primary-600 hover:ff-text-primary-800 hover:ff-bg-primary-100 ff-rounded-full ff-transition-colors\"\n aria-label=\"Remove file\"\n >\n <X className=\"ff-w-5 ff-h-5\" />\n </button>\n </div>\n </div>\n\n {/* Preview */}\n <div className=\"ff-document-preview ff-aspect-[3/4] ff-max-h-96\">\n {documentState.file.type === 'application/pdf' ? (\n <iframe\n src={documentState.previewUrl}\n className=\"ff-w-full ff-h-full ff-rounded-lg\"\n title=\"Document preview\"\n />\n ) : (\n <img\n src={documentState.previewUrl}\n alt=\"Document preview\"\n className=\"ff-w-full ff-h-full ff-object-contain ff-rounded-lg\"\n />\n )}\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"ff-space-y-4\">\n {/* Document Type Info */}\n <div className=\"ff-text-center ff-mb-4\">\n <h3 className=\"ff-text-lg ff-font-semibold ff-text-gray-900\">{documentInfo.label}</h3>\n <p className=\"ff-text-sm ff-text-gray-500 ff-mt-1\">{documentInfo.description}</p>\n </div>\n\n {/* Dropzone */}\n <div\n {...getRootProps()}\n className={clsx(\n 'ff-dropzone ff-min-h-[200px]',\n isDragActive && 'ff-dropzone-active',\n isLoading && 'ff-opacity-50 ff-cursor-not-allowed'\n )}\n >\n <input {...getInputProps()} />\n <div className=\"ff-flex ff-flex-col ff-items-center ff-gap-4\">\n <div\n className={clsx(\n 'ff-p-4 ff-rounded-full',\n isDragActive ? 'ff-bg-primary-100' : 'ff-bg-gray-100'\n )}\n >\n <Upload\n className={clsx(\n 'ff-w-10 ff-h-10',\n isDragActive ? 'ff-text-primary-600' : 'ff-text-gray-400'\n )}\n />\n </div>\n <div className=\"ff-text-center\">\n <p className=\"ff-text-base ff-font-medium ff-text-gray-700\">\n {isDragActive ? 'Drop your document here' : 'Upload your document'}\n </p>\n <p className=\"ff-text-sm ff-text-gray-500 ff-mt-1\">\n Drag & drop or{' '}\n <span className=\"ff-text-primary-600 ff-font-medium\">browse files</span>\n </p>\n </div>\n <div className=\"ff-flex ff-flex-wrap ff-justify-center ff-gap-2 ff-text-xs ff-text-gray-400\">\n {documentInfo.acceptedFormats.map((format) => (\n <span key={format} className=\"ff-px-2 ff-py-1 ff-bg-gray-100 ff-rounded\">\n {format.toUpperCase()}\n </span>\n ))}\n <span className=\"ff-px-2 ff-py-1\">\n Max {formatFileSize(documentInfo.maxFileSize)}\n </span>\n </div>\n </div>\n </div>\n\n {/* Error */}\n {documentState?.error && (\n <div className=\"ff-flex ff-items-center ff-gap-2 ff-p-3 ff-bg-error-50 ff-text-error-700 ff-rounded-lg\">\n <AlertCircle className=\"ff-w-4 ff-h-4 ff-flex-shrink-0\" />\n <p className=\"ff-text-sm\">{documentState.error}</p>\n </div>\n )}\n\n {/* Tips */}\n <div className=\"ff-bg-gray-50 ff-rounded-lg ff-p-4\">\n <h4 className=\"ff-text-sm ff-font-medium ff-text-gray-700 ff-mb-2\">Tips for best results:</h4>\n <ul className=\"ff-text-sm ff-text-gray-500 ff-space-y-1 ff-list-disc ff-list-inside\">\n <li>Ensure all text is clearly visible and readable</li>\n <li>Avoid glare, shadows, or blurry images</li>\n <li>Include all four corners of the document</li>\n <li>Use good lighting when taking photos</li>\n </ul>\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { CheckCircle, XCircle, AlertTriangle, Loader2, Clock } from 'lucide-react';\nimport { clsx } from 'clsx';\nimport { useKYCStore } from '../../store/kyc-store';\nimport type { DocumentType, DocumentStatus as DocStatus } from '@fileflow/shared';\nimport { DOCUMENT_TYPES } from '@fileflow/shared';\n\ninterface DocumentStatusProps {\n documentType: DocumentType;\n showDetails?: boolean;\n}\n\nexport const DocumentStatus: React.FC<DocumentStatusProps> = ({\n documentType,\n showDetails = true,\n}) => {\n const { documents } = useKYCStore();\n const documentState = documents.get(documentType);\n const documentInfo = DOCUMENT_TYPES[documentType];\n\n const getStatusConfig = (status?: DocStatus) => {\n switch (status) {\n case 'completed':\n return {\n icon: CheckCircle,\n color: 'ff-text-success-600',\n bgColor: 'ff-bg-success-100',\n label: 'Verified',\n description: 'Document successfully processed',\n };\n case 'requires_review':\n return {\n icon: AlertTriangle,\n color: 'ff-text-warning-600',\n bgColor: 'ff-bg-warning-100',\n label: 'Review Required',\n description: 'Manual verification may be needed',\n };\n case 'failed':\n return {\n icon: XCircle,\n color: 'ff-text-error-600',\n bgColor: 'ff-bg-error-100',\n label: 'Failed',\n description: 'Unable to process document',\n };\n case 'processing':\n return {\n icon: Loader2,\n color: 'ff-text-primary-600',\n bgColor: 'ff-bg-primary-100',\n label: 'Processing',\n description: 'Analyzing document...',\n };\n case 'uploaded':\n return {\n icon: Clock,\n color: 'ff-text-gray-600',\n bgColor: 'ff-bg-gray-100',\n label: 'Pending',\n description: 'Waiting to be processed',\n };\n default:\n return {\n icon: Clock,\n color: 'ff-text-gray-400',\n bgColor: 'ff-bg-gray-100',\n label: 'Not Uploaded',\n description: 'Upload document to continue',\n };\n }\n };\n\n const statusConfig = getStatusConfig(documentState?.status);\n const Icon = statusConfig.icon;\n\n return (\n <div className=\"ff-space-y-3\">\n {/* Status Header */}\n <div className=\"ff-flex ff-items-center ff-gap-3\">\n <div className={clsx('ff-p-2 ff-rounded-lg', statusConfig.bgColor)}>\n <Icon\n className={clsx(\n 'ff-w-5 ff-h-5',\n statusConfig.color,\n documentState?.status === 'processing' && 'ff-animate-spin'\n )}\n />\n </div>\n <div>\n <p className=\"ff-font-medium ff-text-gray-900\">{documentInfo.label}</p>\n <p className={clsx('ff-text-sm', statusConfig.color)}>{statusConfig.label}</p>\n </div>\n </div>\n\n {/* Confidence Score */}\n {documentState?.confidence !== undefined && documentState.confidence > 0 && (\n <div className=\"ff-space-y-1\">\n <div className=\"ff-flex ff-items-center ff-justify-between ff-text-sm\">\n <span className=\"ff-text-gray-600\">Confidence</span>\n <span\n className={clsx(\n 'ff-font-medium',\n documentState.confidence >= 0.8 && 'ff-text-success-600',\n documentState.confidence >= 0.6 &&\n documentState.confidence < 0.8 &&\n 'ff-text-warning-600',\n documentState.confidence < 0.6 && 'ff-text-error-600'\n )}\n >\n {Math.round(documentState.confidence * 100)}%\n </span>\n </div>\n <div className=\"ff-progress\">\n <div\n className={clsx(\n 'ff-progress-bar',\n documentState.confidence >= 0.8 && 'ff-bg-success-500',\n documentState.confidence >= 0.6 &&\n documentState.confidence < 0.8 &&\n 'ff-bg-warning-500',\n documentState.confidence < 0.6 && 'ff-bg-error-500'\n )}\n style={{ width: `${documentState.confidence * 100}%` }}\n />\n </div>\n </div>\n )}\n\n {/* Fraud Flags */}\n {showDetails && documentState?.fraudFlags && documentState.fraudFlags.length > 0 && (\n <div className=\"ff-space-y-2\">\n <p className=\"ff-text-sm ff-font-medium ff-text-gray-700\">Issues Detected</p>\n <div className=\"ff-space-y-1\">\n {documentState.fraudFlags.map((flag, index) => (\n <div\n key={index}\n className={clsx(\n 'ff-flex ff-items-start ff-gap-2 ff-p-2 ff-rounded ff-text-sm',\n flag.severity === 'high' && 'ff-bg-error-50 ff-text-error-700',\n flag.severity === 'medium' && 'ff-bg-warning-50 ff-text-warning-700',\n flag.severity === 'low' && 'ff-bg-gray-50 ff-text-gray-600'\n )}\n >\n {flag.severity === 'high' ? (\n <XCircle className=\"ff-w-4 ff-h-4 ff-flex-shrink-0 ff-mt-0.5\" />\n ) : (\n <AlertTriangle className=\"ff-w-4 ff-h-4 ff-flex-shrink-0 ff-mt-0.5\" />\n )}\n <span>{flag.message}</span>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Extracted Data Preview */}\n {showDetails &&\n documentState?.extractedData &&\n documentState.status === 'completed' && (\n <div className=\"ff-bg-gray-50 ff-rounded-lg ff-p-3\">\n <p className=\"ff-text-sm ff-font-medium ff-text-gray-700 ff-mb-2\">\n Extracted Information\n </p>\n <dl className=\"ff-space-y-1 ff-text-sm\">\n {'fullName' in documentState.extractedData && (\n <div className=\"ff-flex ff-justify-between\">\n <dt className=\"ff-text-gray-500\">Name</dt>\n <dd className=\"ff-text-gray-900 ff-font-medium\">\n {documentState.extractedData.fullName}\n </dd>\n </div>\n )}\n {'dateOfBirth' in documentState.extractedData && (\n <div className=\"ff-flex ff-justify-between\">\n <dt className=\"ff-text-gray-500\">Date of Birth</dt>\n <dd className=\"ff-text-gray-900\">{documentState.extractedData.dateOfBirth}</dd>\n </div>\n )}\n {documentState.extractedData.documentType === 'passport' &&\n 'passportNumber' in documentState.extractedData && (\n <div className=\"ff-flex ff-justify-between\">\n <dt className=\"ff-text-gray-500\">Passport #</dt>\n <dd className=\"ff-text-gray-900 ff-font-mono\">\n {documentState.extractedData.passportNumber}\n </dd>\n </div>\n )}\n {documentState.extractedData.documentType === 'drivers_license' &&\n 'licenseNumber' in documentState.extractedData && (\n <div className=\"ff-flex ff-justify-between\">\n <dt className=\"ff-text-gray-500\">License #</dt>\n <dd className=\"ff-text-gray-900 ff-font-mono\">\n {documentState.extractedData.licenseNumber}\n </dd>\n </div>\n )}\n {'address' in documentState.extractedData && documentState.extractedData.address && (\n <div className=\"ff-flex ff-justify-between\">\n <dt className=\"ff-text-gray-500\">Address</dt>\n <dd className=\"ff-text-gray-900 ff-text-right\">\n {documentState.extractedData.address.city},{' '}\n {documentState.extractedData.address.province}\n </dd>\n </div>\n )}\n </dl>\n </div>\n )}\n </div>\n );\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport {\n FileText,\n Car,\n Home,\n CheckCircle,\n X,\n Loader2,\n ChevronRight,\n ShieldCheck,\n} from 'lucide-react';\nimport { clsx } from 'clsx';\nimport { useKYCStore, type KYCStep } from '../../store/kyc-store';\nimport { getClient } from '../../api/client';\nimport { DocumentUploader } from './DocumentUploader';\nimport { DocumentStatus } from './DocumentStatus';\nimport type { DocumentType, KYCSession, KYCDocument } from '@fileflow/shared';\nimport { DOCUMENT_TYPES } from '@fileflow/shared';\n\ninterface KYCWizardProps {\n requiredDocuments: DocumentType[];\n onComplete?: (session: KYCSession) => void;\n onCancel?: () => void;\n onError?: (error: Error) => void;\n}\n\nconst DOCUMENT_ICONS: Record<DocumentType, React.ElementType> = {\n passport: FileText,\n drivers_license: Car,\n proof_of_address: Home,\n};\n\nexport const KYCWizard: React.FC<KYCWizardProps> = ({\n requiredDocuments,\n onComplete,\n onCancel,\n onError,\n}) => {\n const {\n sessionId,\n step,\n currentDocumentType,\n documents,\n isVerified,\n verificationStatus,\n isLoading,\n error,\n setSessionId,\n setRequiredDocuments,\n setCurrentDocumentType,\n setDocumentStatus,\n setDocumentData,\n setStep,\n nextDocument,\n setVerificationStatus,\n setVerified,\n setLoading,\n setError,\n areAllDocumentsUploaded,\n areAllDocumentsProcessed,\n reset,\n } = useKYCStore();\n\n const [pollingDocument, setPollingDocument] = useState<string | null>(null);\n\n // Initialize\n useEffect(() => {\n setRequiredDocuments(requiredDocuments);\n initializeSession();\n\n return () => {\n // Cleanup polling on unmount\n setPollingDocument(null);\n };\n }, [requiredDocuments]);\n\n const initializeSession = async () => {\n try {\n setLoading(true);\n const client = getClient();\n const result = await client.createKYCSession(requiredDocuments);\n setSessionId(result.sessionId);\n setStep('upload');\n } catch (err) {\n const error = err as Error;\n setError(error.message);\n onError?.(error);\n } finally {\n setLoading(false);\n }\n };\n\n const handleFileSelect = useCallback(\n async (file: File) => {\n if (!sessionId || !currentDocumentType) return;\n\n try {\n setLoading(true);\n setError(null);\n\n const client = getClient();\n const result = await client.uploadKYCDocument(sessionId, currentDocumentType, file);\n\n setDocumentData(currentDocumentType, {\n id: result.documentId,\n status: 'processing',\n });\n\n // Start polling for document status\n setPollingDocument(result.documentId);\n pollDocumentStatus(result.documentId);\n } catch (err) {\n const error = err as Error;\n setDocumentData(currentDocumentType, {\n status: 'failed',\n error: error.message,\n });\n onError?.(error);\n } finally {\n setLoading(false);\n }\n },\n [sessionId, currentDocumentType]\n );\n\n const pollDocumentStatus = async (documentId: string) => {\n const maxAttempts = 30;\n const maxConsecutiveErrors = 3; // Stop after 3 consecutive errors\n let attempts = 0;\n let consecutiveErrors = 0;\n\n const poll = async () => {\n if (attempts >= maxAttempts) {\n setPollingDocument(null);\n if (currentDocumentType) {\n setDocumentData(currentDocumentType, {\n status: 'failed',\n error: 'Processing timed out. Please try again.',\n });\n }\n return;\n }\n\n // Stop polling if we've had too many consecutive errors\n if (consecutiveErrors >= maxConsecutiveErrors) {\n setPollingDocument(null);\n if (currentDocumentType) {\n setDocumentData(currentDocumentType, {\n status: 'failed',\n error: 'Failed to check document status. Please refresh and try again.',\n });\n }\n return;\n }\n\n try {\n const client = getClient();\n const result = await client.getKYCDocument(documentId);\n const doc = result.document as KYCDocument;\n\n // Reset consecutive errors on success\n consecutiveErrors = 0;\n\n const docType = doc.type as DocumentType;\n setDocumentData(docType, {\n id: doc.id,\n status: doc.status,\n extractedData: doc.extractedData,\n confidence: doc.confidence,\n fraudFlags: doc.fraudFlags,\n error: null, // Clear any previous errors\n });\n\n if (doc.status === 'completed' || doc.status === 'requires_review' || doc.status === 'failed') {\n setPollingDocument(null);\n\n // Check if all documents are processed\n if (areAllDocumentsUploaded()) {\n const allProcessed = areAllDocumentsProcessed();\n if (allProcessed) {\n setStep('review');\n }\n } else {\n // Move to next document\n nextDocument();\n }\n return;\n }\n\n // Continue polling\n attempts++;\n setTimeout(poll, 2000);\n } catch (err) {\n const error = err as Error & { status?: number };\n consecutiveErrors++;\n attempts++;\n \n // On 404, stop immediately - the document doesn't exist\n if (error.status === 404 || error.message?.includes('not found')) {\n setPollingDocument(null);\n if (currentDocumentType) {\n setDocumentData(currentDocumentType, {\n status: 'failed',\n error: 'Session not found or invalid state',\n });\n }\n return;\n }\n\n // On other errors, retry with backoff (up to maxConsecutiveErrors times)\n if (consecutiveErrors < maxConsecutiveErrors) {\n setTimeout(poll, 3000 * consecutiveErrors); // Exponential backoff\n } else {\n setPollingDocument(null);\n if (currentDocumentType) {\n setDocumentData(currentDocumentType, {\n status: 'failed',\n error: error.message || 'Failed to process document',\n });\n }\n }\n }\n };\n\n poll();\n };\n\n const handleVerify = async () => {\n if (!sessionId) return;\n\n try {\n setLoading(true);\n setError(null);\n\n const client = getClient();\n const result = await client.verifyKYCSession(sessionId, true);\n\n setVerificationStatus(result.verificationStatus);\n const status = result.verificationStatus as { isVerified: boolean };\n setVerified(status.isVerified);\n setStep('complete');\n\n onComplete?.(result as unknown as KYCSession);\n } catch (err) {\n const error = err as Error;\n setError(error.message);\n onError?.(error);\n } finally {\n setLoading(false);\n }\n };\n\n const handleCancel = () => {\n reset();\n onCancel?.();\n };\n\n const selectDocument = (type: DocumentType) => {\n setCurrentDocumentType(type);\n setStep('upload');\n };\n\n const isDocumentComplete = (type: DocumentType) => {\n const doc = documents.get(type);\n return doc?.status === 'completed' || doc?.status === 'requires_review';\n };\n\n return (\n <div className=\"ff-container ff-bg-white ff-rounded-xl ff-shadow-xl ff-overflow-hidden ff-flex ff-flex-col ff-max-h-[90vh]\">\n {/* Header */}\n <div className=\"ff-flex ff-items-center ff-justify-between ff-px-6 ff-py-4 ff-border-b ff-border-gray-200 ff-bg-gray-50 ff-flex-shrink-0\">\n <div className=\"ff-flex ff-items-center ff-gap-3\">\n <ShieldCheck className=\"ff-w-6 ff-h-6 ff-text-primary-600\" />\n <h2 className=\"ff-text-xl ff-font-semibold ff-text-gray-900\">Identity Verification</h2>\n </div>\n <button\n onClick={handleCancel}\n className=\"ff-p-2 ff-text-gray-400 hover:ff-text-gray-600 ff-rounded-full hover:ff-bg-gray-100\"\n >\n <X className=\"ff-w-5 ff-h-5\" />\n </button>\n </div>\n\n {/* Content */}\n <div className=\"ff-p-6 ff-overflow-y-auto ff-flex-1 ff-min-h-0\">\n {error && (\n <div className=\"ff-mb-4 ff-p-4 ff-bg-error-50 ff-border ff-border-error-200 ff-rounded-lg ff-text-error-700\">\n {error}\n </div>\n )}\n\n {/* Document Selection */}\n {step === 'select' && (\n <div className=\"ff-space-y-4\">\n <p className=\"ff-text-gray-600 ff-text-center ff-mb-6\">\n Please upload the following documents to verify your identity\n </p>\n <div className=\"ff-grid ff-gap-4\">\n {requiredDocuments.map((type) => {\n const Icon = DOCUMENT_ICONS[type];\n const info = DOCUMENT_TYPES[type];\n const doc = documents.get(type);\n const isComplete = isDocumentComplete(type);\n\n return (\n <button\n key={type}\n onClick={() => selectDocument(type)}\n className={clsx(\n 'ff-flex ff-items-center ff-gap-4 ff-p-4 ff-rounded-lg ff-border-2 ff-text-left ff-transition-all',\n isComplete\n ? 'ff-border-success-300 ff-bg-success-50'\n : 'ff-border-gray-200 hover:ff-border-primary-300 hover:ff-bg-primary-50'\n )}\n >\n <div\n className={clsx(\n 'ff-p-3 ff-rounded-lg',\n isComplete ? 'ff-bg-success-100' : 'ff-bg-gray-100'\n )}\n >\n {isComplete ? (\n <CheckCircle className=\"ff-w-6 ff-h-6 ff-text-success-600\" />\n ) : (\n <Icon className=\"ff-w-6 ff-h-6 ff-text-gray-600\" />\n )}\n </div>\n <div className=\"ff-flex-1\">\n <p className=\"ff-font-medium ff-text-gray-900\">{info.label}</p>\n <p className=\"ff-text-sm ff-text-gray-500\">{info.description}</p>\n </div>\n <ChevronRight className=\"ff-w-5 ff-h-5 ff-text-gray-400\" />\n </button>\n );\n })}\n </div>\n </div>\n )}\n\n {/* Document Upload */}\n {step === 'upload' && currentDocumentType && (\n <div className=\"ff-max-w-lg ff-mx-auto\">\n <DocumentUploader documentType={currentDocumentType} onFileSelect={handleFileSelect} />\n </div>\n )}\n\n {/* Processing */}\n {step === 'processing' && (\n <div className=\"ff-flex ff-flex-col ff-items-center ff-justify-center ff-py-12\">\n <Loader2 className=\"ff-w-12 ff-h-12 ff-text-primary-600 ff-animate-spin ff-mb-4\" />\n <h3 className=\"ff-text-lg ff-font-semibold ff-text-gray-900 ff-mb-2\">\n Processing Documents\n </h3>\n <p className=\"ff-text-gray-500 ff-text-center\">\n We're analyzing your documents. This may take a moment...\n </p>\n </div>\n )}\n\n {/* Review */}\n {step === 'review' && (\n <div className=\"ff-space-y-6\">\n <div className=\"ff-text-center ff-mb-6\">\n <h3 className=\"ff-text-lg ff-font-semibold ff-text-gray-900\">Review Your Documents</h3>\n <p className=\"ff-text-gray-500\">\n Please review the extracted information before completing verification\n </p>\n </div>\n\n <div className=\"ff-grid ff-gap-4\">\n {requiredDocuments.map((type) => (\n <div\n key={type}\n className=\"ff-border ff-border-gray-200 ff-rounded-lg ff-p-4\"\n >\n <DocumentStatus documentType={type} showDetails={true} />\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Complete */}\n {step === 'complete' && (\n <div className=\"ff-flex ff-flex-col ff-items-center ff-justify-center ff-py-12\">\n <div\n className={clsx(\n 'ff-w-16 ff-h-16 ff-rounded-full ff-flex ff-items-center ff-justify-center ff-mb-4',\n isVerified ? 'ff-bg-success-100' : 'ff-bg-warning-100'\n )}\n >\n {isVerified ? (\n <CheckCircle className=\"ff-w-10 ff-h-10 ff-text-success-600\" />\n ) : (\n <ShieldCheck className=\"ff-w-10 ff-h-10 ff-text-warning-600\" />\n )}\n </div>\n <h3 className=\"ff-text-xl ff-font-semibold ff-text-gray-900 ff-mb-2\">\n {isVerified ? 'Verification Complete!' : 'Review Required'}\n </h3>\n <p className=\"ff-text-gray-500 ff-text-center\">\n {isVerified\n ? 'Your identity has been successfully verified.'\n : 'Additional review may be required. We will contact you if needed.'}\n </p>\n </div>\n )}\n </div>\n\n {/* Footer */}\n {step !== 'complete' && (\n <div className=\"ff-flex ff-items-center ff-justify-between ff-px-6 ff-py-4 ff-border-t ff-border-gray-200 ff-bg-gray-50 ff-flex-shrink-0\">\n <button\n onClick={() => {\n if (step === 'upload') {\n setStep('select');\n } else if (step === 'review') {\n setStep('select');\n }\n }}\n disabled={isLoading}\n className=\"ff-btn ff-btn-secondary\"\n >\n Back\n </button>\n\n {step === 'review' && (\n <button\n onClick={handleVerify}\n disabled={isLoading || !areAllDocumentsProcessed()}\n className=\"ff-btn ff-btn-primary\"\n >\n {isLoading ? (\n <>\n <Loader2 className=\"ff-w-4 ff-h-4 ff-mr-2 ff-animate-spin\" />\n Verifying...\n </>\n ) : (\n 'Complete Verification'\n )}\n </button>\n )}\n\n {step === 'select' && areAllDocumentsUploaded() && (\n <button\n onClick={() => setStep('review')}\n className=\"ff-btn ff-btn-primary\"\n >\n Review & Verify\n </button>\n )}\n </div>\n )}\n </div>\n );\n};\n"],"names":["Car","createLucideIcon","Clock","FileText","Home","Image","ShieldCheck","createEmptyDocumentState","type","initialState","useKYCStore","create","set","get","sessionId","documents","docsMap","file","doc","previewUrl","updated","status","data","step","requiredDocuments","currentDocumentType","currentIndex","i","verified","isLoading","error","DocumentUploader","documentType","onFileSelect","setDocumentFile","documentState","documentInfo","DOCUMENT_TYPES","onDrop","useCallback","acceptedFiles","rejectedFiles","getRootProps","getInputProps","isDragActive","useDropzone","formatFileSize","bytes","getFileIcon","_a","jsx","clearFile","e","jsxs","X","clsx","Upload","format","AlertCircle","DocumentStatus","showDetails","statusConfig","CheckCircle","AlertTriangle","XCircle","Loader2","Icon","flag","index","DOCUMENT_ICONS","KYCWizard","onComplete","onCancel","onError","isVerified","verificationStatus","setSessionId","setRequiredDocuments","setCurrentDocumentType","setDocumentStatus","setDocumentData","setStep","nextDocument","setVerificationStatus","setVerified","setLoading","setError","areAllDocumentsUploaded","areAllDocumentsProcessed","reset","pollingDocument","setPollingDocument","useState","useEffect","initializeSession","result","getClient","err","handleFileSelect","pollDocumentStatus","documentId","attempts","consecutiveErrors","poll","docType","handleVerify","handleCancel","selectDocument","isDocumentComplete","info","isComplete","ChevronRight","Fragment"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";const e=require("react/jsx-runtime"),I=require("react"),r=require("./index-VbMSbLb2.js");/**
|
|
2
|
+
* @license lucide-react v0.321.0 - ISC
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the ISC license.
|
|
5
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/const fe=r.createLucideIcon("Car",[["path",{d:"M19 17h2c.6 0 1-.4 1-1v-3c0-.9-.7-1.7-1.5-1.9C18.7 10.6 16 10 16 10s-1.3-1.4-2.2-2.3c-.5-.4-1.1-.7-1.8-.7H5c-.6 0-1.1.4-1.4.9l-1.4 2.9A3.7 3.7 0 0 0 2 12v4c0 .6.4 1 1 1h2",key:"5owen"}],["circle",{cx:"7",cy:"17",r:"2",key:"u2ysq9"}],["path",{d:"M9 17h6",key:"r8uit2"}],["circle",{cx:"17",cy:"17",r:"2",key:"axvx0g"}]]);/**
|
|
7
|
+
* @license lucide-react v0.321.0 - ISC
|
|
8
|
+
*
|
|
9
|
+
* This source code is licensed under the ISC license.
|
|
10
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
+
*/const z=r.createLucideIcon("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);/**
|
|
12
|
+
* @license lucide-react v0.321.0 - ISC
|
|
13
|
+
*
|
|
14
|
+
* This source code is licensed under the ISC license.
|
|
15
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
16
|
+
*/const _=r.createLucideIcon("FileText",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);/**
|
|
17
|
+
* @license lucide-react v0.321.0 - ISC
|
|
18
|
+
*
|
|
19
|
+
* This source code is licensed under the ISC license.
|
|
20
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
21
|
+
*/const te=r.createLucideIcon("Home",[["path",{d:"m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",key:"y5dka4"}],["polyline",{points:"9 22 9 12 15 12 15 22",key:"e2us08"}]]);/**
|
|
22
|
+
* @license lucide-react v0.321.0 - ISC
|
|
23
|
+
*
|
|
24
|
+
* This source code is licensed under the ISC license.
|
|
25
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
26
|
+
*/const re=r.createLucideIcon("Image",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]]);/**
|
|
27
|
+
* @license lucide-react v0.321.0 - ISC
|
|
28
|
+
*
|
|
29
|
+
* This source code is licensed under the ISC license.
|
|
30
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
31
|
+
*/const V=r.createLucideIcon("ShieldCheck",[["path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10",key:"1irkt0"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]),A=i=>({id:null,type:i,status:"uploaded",file:null,previewUrl:null,extractedData:null,confidence:0,fraudFlags:[],error:null}),Y={sessionId:null,status:"idle",step:"select",requiredDocuments:[],currentDocumentType:null,documents:new Map,isVerified:!1,verificationStatus:null,isLoading:!1,error:null},D=r.create((i,o)=>({...Y,setSessionId:t=>i({sessionId:t}),setRequiredDocuments:t=>{const s=new Map;for(const c of t)s.set(c,A(c));i({requiredDocuments:t,documents:s,currentDocumentType:t[0]||null})},setCurrentDocumentType:t=>i({currentDocumentType:t}),setDocumentFile:(t,s)=>{const{documents:c}=o(),f=c.get(t)||A(t),a=URL.createObjectURL(s),u=new Map(c);u.set(t,{...f,file:s,previewUrl:a,status:"uploaded",error:null}),i({documents:u})},setDocumentStatus:(t,s)=>{const{documents:c}=o(),f=c.get(t);if(f){const a=new Map(c);a.set(t,{...f,status:s}),i({documents:a})}},setDocumentData:(t,s)=>{const{documents:c}=o(),f=c.get(t);if(f){const a=new Map(c);a.set(t,{...f,...s}),i({documents:a})}},clearDocumentPreview:t=>{const{documents:s}=o(),c=s.get(t);c!=null&&c.previewUrl&&URL.revokeObjectURL(c.previewUrl)},setStep:t=>i({step:t}),nextDocument:()=>{const{requiredDocuments:t,currentDocumentType:s,documents:c}=o(),f=s?t.indexOf(s):-1;for(let a=f+1;a<t.length;a++){const u=t[a],d=c.get(u);if(!(d!=null&&d.file)){i({currentDocumentType:u});return}}i({currentDocumentType:null,step:"processing"})},setVerificationStatus:t=>i({verificationStatus:t}),setVerified:t=>i({isVerified:t}),setStatus:t=>i({status:t}),setLoading:t=>i({isLoading:t}),setError:t=>i({error:t}),getNextRequiredDocument:()=>{const{requiredDocuments:t,documents:s}=o();for(const c of t){const f=s.get(c);if(!(f!=null&&f.file))return c}return null},areAllDocumentsUploaded:()=>{const{requiredDocuments:t,documents:s}=o();return t.every(c=>{const f=s.get(c);return(f==null?void 0:f.file)!==null})},areAllDocumentsProcessed:()=>{const{requiredDocuments:t,documents:s}=o();return t.every(c=>{const f=s.get(c);return(f==null?void 0:f.status)==="completed"||(f==null?void 0:f.status)==="requires_review"})},reset:()=>{const{documents:t}=o();for(const s of t.values())s.previewUrl&&URL.revokeObjectURL(s.previewUrl);i(Y)}})),O=({documentType:i,onFileSelect:o})=>{const{documents:t,setDocumentFile:s,isLoading:c}=D(),f=t.get(i),a=r.DOCUMENT_TYPES[i],u=I.useCallback((m,P)=>{if(!(P.length>0)&&m.length>0){const p=m[0];s(i,p),o==null||o(p)}},[i,o,s]),{getRootProps:d,getInputProps:C,isDragActive:h}=r.useDropzone({onDrop:u,accept:{"application/pdf":[".pdf"],"image/jpeg":[".jpg",".jpeg"],"image/png":[".png"]},maxSize:a.maxFileSize,multiple:!1,disabled:c}),b=m=>m<1024?`${m} B`:m<1024*1024?`${(m/1024).toFixed(1)} KB`:`${(m/(1024*1024)).toFixed(1)} MB`,T=()=>{var m;return((m=f==null?void 0:f.file)==null?void 0:m.type)==="application/pdf"?e.jsx(_,{className:"ff-w-6 ff-h-6"}):e.jsx(re,{className:"ff-w-6 ff-h-6"})},L=m=>{m.stopPropagation(),D.getState().clearDocumentPreview(i),s(i,null)};return f!=null&&f.file&&f.previewUrl?e.jsxs("div",{className:"ff-space-y-4",children:[e.jsx("div",{className:"ff-bg-primary-50 ff-border ff-border-primary-200 ff-rounded-lg ff-p-4",children:e.jsxs("div",{className:"ff-flex ff-items-center ff-gap-3",children:[e.jsx("div",{className:"ff-p-2 ff-bg-primary-100 ff-rounded-lg ff-text-primary-600",children:T()}),e.jsxs("div",{className:"ff-flex-1 ff-min-w-0",children:[e.jsx("p",{className:"ff-font-medium ff-text-primary-900 ff-truncate",children:f.file.name}),e.jsx("p",{className:"ff-text-sm ff-text-primary-600",children:b(f.file.size)})]}),e.jsx("button",{onClick:L,className:"ff-p-1.5 ff-text-primary-600 hover:ff-text-primary-800 hover:ff-bg-primary-100 ff-rounded-full ff-transition-colors","aria-label":"Remove file",children:e.jsx(r.X,{className:"ff-w-5 ff-h-5"})})]})}),e.jsx("div",{className:"ff-document-preview ff-aspect-[3/4] ff-max-h-96",children:f.file.type==="application/pdf"?e.jsx("iframe",{src:f.previewUrl,className:"ff-w-full ff-h-full ff-rounded-lg",title:"Document preview"}):e.jsx("img",{src:f.previewUrl,alt:"Document preview",className:"ff-w-full ff-h-full ff-object-contain ff-rounded-lg"})})]}):e.jsxs("div",{className:"ff-space-y-4",children:[e.jsxs("div",{className:"ff-text-center ff-mb-4",children:[e.jsx("h3",{className:"ff-text-lg ff-font-semibold ff-text-gray-900",children:a.label}),e.jsx("p",{className:"ff-text-sm ff-text-gray-500 ff-mt-1",children:a.description})]}),e.jsxs("div",{...d(),className:r.clsx("ff-dropzone ff-min-h-[200px]",h&&"ff-dropzone-active",c&&"ff-opacity-50 ff-cursor-not-allowed"),children:[e.jsx("input",{...C()}),e.jsxs("div",{className:"ff-flex ff-flex-col ff-items-center ff-gap-4",children:[e.jsx("div",{className:r.clsx("ff-p-4 ff-rounded-full",h?"ff-bg-primary-100":"ff-bg-gray-100"),children:e.jsx(r.Upload,{className:r.clsx("ff-w-10 ff-h-10",h?"ff-text-primary-600":"ff-text-gray-400")})}),e.jsxs("div",{className:"ff-text-center",children:[e.jsx("p",{className:"ff-text-base ff-font-medium ff-text-gray-700",children:h?"Drop your document here":"Upload your document"}),e.jsxs("p",{className:"ff-text-sm ff-text-gray-500 ff-mt-1",children:["Drag & drop or"," ",e.jsx("span",{className:"ff-text-primary-600 ff-font-medium",children:"browse files"})]})]}),e.jsxs("div",{className:"ff-flex ff-flex-wrap ff-justify-center ff-gap-2 ff-text-xs ff-text-gray-400",children:[a.acceptedFormats.map(m=>e.jsx("span",{className:"ff-px-2 ff-py-1 ff-bg-gray-100 ff-rounded",children:m.toUpperCase()},m)),e.jsxs("span",{className:"ff-px-2 ff-py-1",children:["Max ",b(a.maxFileSize)]})]})]})]}),(f==null?void 0:f.error)&&e.jsxs("div",{className:"ff-flex ff-items-center ff-gap-2 ff-p-3 ff-bg-error-50 ff-text-error-700 ff-rounded-lg",children:[e.jsx(r.AlertCircle,{className:"ff-w-4 ff-h-4 ff-flex-shrink-0"}),e.jsx("p",{className:"ff-text-sm",children:f.error})]}),e.jsxs("div",{className:"ff-bg-gray-50 ff-rounded-lg ff-p-4",children:[e.jsx("h4",{className:"ff-text-sm ff-font-medium ff-text-gray-700 ff-mb-2",children:"Tips for best results:"}),e.jsxs("ul",{className:"ff-text-sm ff-text-gray-500 ff-space-y-1 ff-list-disc ff-list-inside",children:[e.jsx("li",{children:"Ensure all text is clearly visible and readable"}),e.jsx("li",{children:"Avoid glare, shadows, or blurry images"}),e.jsx("li",{children:"Include all four corners of the document"}),e.jsx("li",{children:"Use good lighting when taking photos"})]})]})]})},K=({documentType:i,showDetails:o=!0})=>{const{documents:t}=D(),s=t.get(i),c=r.DOCUMENT_TYPES[i],a=(d=>{switch(d){case"completed":return{icon:r.CheckCircle,color:"ff-text-success-600",bgColor:"ff-bg-success-100",label:"Verified",description:"Document successfully processed"};case"requires_review":return{icon:r.AlertTriangle,color:"ff-text-warning-600",bgColor:"ff-bg-warning-100",label:"Review Required",description:"Manual verification may be needed"};case"failed":return{icon:r.XCircle,color:"ff-text-error-600",bgColor:"ff-bg-error-100",label:"Failed",description:"Unable to process document"};case"processing":return{icon:r.Loader2,color:"ff-text-primary-600",bgColor:"ff-bg-primary-100",label:"Processing",description:"Analyzing document..."};case"uploaded":return{icon:z,color:"ff-text-gray-600",bgColor:"ff-bg-gray-100",label:"Pending",description:"Waiting to be processed"};default:return{icon:z,color:"ff-text-gray-400",bgColor:"ff-bg-gray-100",label:"Not Uploaded",description:"Upload document to continue"}}})(s==null?void 0:s.status),u=a.icon;return e.jsxs("div",{className:"ff-space-y-3",children:[e.jsxs("div",{className:"ff-flex ff-items-center ff-gap-3",children:[e.jsx("div",{className:r.clsx("ff-p-2 ff-rounded-lg",a.bgColor),children:e.jsx(u,{className:r.clsx("ff-w-5 ff-h-5",a.color,(s==null?void 0:s.status)==="processing"&&"ff-animate-spin")})}),e.jsxs("div",{children:[e.jsx("p",{className:"ff-font-medium ff-text-gray-900",children:c.label}),e.jsx("p",{className:r.clsx("ff-text-sm",a.color),children:a.label})]})]}),(s==null?void 0:s.confidence)!==void 0&&s.confidence>0&&e.jsxs("div",{className:"ff-space-y-1",children:[e.jsxs("div",{className:"ff-flex ff-items-center ff-justify-between ff-text-sm",children:[e.jsx("span",{className:"ff-text-gray-600",children:"Confidence"}),e.jsxs("span",{className:r.clsx("ff-font-medium",s.confidence>=.8&&"ff-text-success-600",s.confidence>=.6&&s.confidence<.8&&"ff-text-warning-600",s.confidence<.6&&"ff-text-error-600"),children:[Math.round(s.confidence*100),"%"]})]}),e.jsx("div",{className:"ff-progress",children:e.jsx("div",{className:r.clsx("ff-progress-bar",s.confidence>=.8&&"ff-bg-success-500",s.confidence>=.6&&s.confidence<.8&&"ff-bg-warning-500",s.confidence<.6&&"ff-bg-error-500"),style:{width:`${s.confidence*100}%`}})})]}),o&&(s==null?void 0:s.fraudFlags)&&s.fraudFlags.length>0&&e.jsxs("div",{className:"ff-space-y-2",children:[e.jsx("p",{className:"ff-text-sm ff-font-medium ff-text-gray-700",children:"Issues Detected"}),e.jsx("div",{className:"ff-space-y-1",children:s.fraudFlags.map((d,C)=>e.jsxs("div",{className:r.clsx("ff-flex ff-items-start ff-gap-2 ff-p-2 ff-rounded ff-text-sm",d.severity==="high"&&"ff-bg-error-50 ff-text-error-700",d.severity==="medium"&&"ff-bg-warning-50 ff-text-warning-700",d.severity==="low"&&"ff-bg-gray-50 ff-text-gray-600"),children:[d.severity==="high"?e.jsx(r.XCircle,{className:"ff-w-4 ff-h-4 ff-flex-shrink-0 ff-mt-0.5"}):e.jsx(r.AlertTriangle,{className:"ff-w-4 ff-h-4 ff-flex-shrink-0 ff-mt-0.5"}),e.jsx("span",{children:d.message})]},C))})]}),o&&(s==null?void 0:s.extractedData)&&s.status==="completed"&&e.jsxs("div",{className:"ff-bg-gray-50 ff-rounded-lg ff-p-3",children:[e.jsx("p",{className:"ff-text-sm ff-font-medium ff-text-gray-700 ff-mb-2",children:"Extracted Information"}),e.jsxs("dl",{className:"ff-space-y-1 ff-text-sm",children:["fullName"in s.extractedData&&e.jsxs("div",{className:"ff-flex ff-justify-between",children:[e.jsx("dt",{className:"ff-text-gray-500",children:"Name"}),e.jsx("dd",{className:"ff-text-gray-900 ff-font-medium",children:s.extractedData.fullName})]}),"dateOfBirth"in s.extractedData&&e.jsxs("div",{className:"ff-flex ff-justify-between",children:[e.jsx("dt",{className:"ff-text-gray-500",children:"Date of Birth"}),e.jsx("dd",{className:"ff-text-gray-900",children:s.extractedData.dateOfBirth})]}),s.extractedData.documentType==="passport"&&"passportNumber"in s.extractedData&&e.jsxs("div",{className:"ff-flex ff-justify-between",children:[e.jsx("dt",{className:"ff-text-gray-500",children:"Passport #"}),e.jsx("dd",{className:"ff-text-gray-900 ff-font-mono",children:s.extractedData.passportNumber})]}),s.extractedData.documentType==="drivers_license"&&"licenseNumber"in s.extractedData&&e.jsxs("div",{className:"ff-flex ff-justify-between",children:[e.jsx("dt",{className:"ff-text-gray-500",children:"License #"}),e.jsx("dd",{className:"ff-text-gray-900 ff-font-mono",children:s.extractedData.licenseNumber})]}),"address"in s.extractedData&&s.extractedData.address&&e.jsxs("div",{className:"ff-flex ff-justify-between",children:[e.jsx("dt",{className:"ff-text-gray-500",children:"Address"}),e.jsxs("dd",{className:"ff-text-gray-900 ff-text-right",children:[s.extractedData.address.city,","," ",s.extractedData.address.province]})]})]})]})]})},ae={passport:_,drivers_license:fe,proof_of_address:te},ce=({requiredDocuments:i,onComplete:o,onCancel:t,onError:s})=>{const{sessionId:c,step:f,currentDocumentType:a,documents:u,isVerified:d,verificationStatus:C,isLoading:h,error:b,setSessionId:T,setRequiredDocuments:L,setCurrentDocumentType:m,setDocumentStatus:P,setDocumentData:p,setStep:y,nextDocument:H,setVerificationStatus:B,setVerified:W,setLoading:N,setError:k,areAllDocumentsUploaded:S,areAllDocumentsProcessed:R,reset:X}=D(),[ie,j]=I.useState(null);I.useEffect(()=>(L(i),$(),()=>{j(null)}),[i]);const $=async()=>{try{N(!0);const n=await r.getClient().createKYCSession(i);T(n.sessionId),y("upload")}catch(l){const n=l;k(n.message),s==null||s(n)}finally{N(!1)}},E=I.useCallback(async l=>{if(!(!c||!a))try{N(!0),k(null);const x=await r.getClient().uploadKYCDocument(c,a,l);p(a,{id:x.documentId,status:"processing"}),j(x.documentId),Z(x.documentId)}catch(n){const x=n;p(a,{status:"failed",error:x.message}),s==null||s(x)}finally{N(!1)}},[c,a]),Z=async l=>{let v=0,w=0;const M=async()=>{var q;if(v>=30){j(null),a&&p(a,{status:"failed",error:"Processing timed out. Please try again."});return}if(w>=3){j(null),a&&p(a,{status:"failed",error:"Failed to check document status. Please refresh and try again."});return}try{const g=(await r.getClient().getKYCDocument(l)).document;w=0;const se=g.type;if(p(se,{id:g.id,status:g.status,extractedData:g.extractedData,confidence:g.confidence,fraudFlags:g.fraudFlags,error:null}),g.status==="completed"||g.status==="requires_review"||g.status==="failed"){j(null),S()?R()&&y("review"):H();return}v++,setTimeout(M,2e3)}catch(F){const U=F;if(w++,v++,U.status===404||(q=U.message)!=null&&q.includes("not found")){j(null),a&&p(a,{status:"failed",error:"Session not found or invalid state"});return}w<3?setTimeout(M,3e3*w):(j(null),a&&p(a,{status:"failed",error:U.message||"Failed to process document"}))}};M()},G=async()=>{if(c)try{N(!0),k(null);const n=await r.getClient().verifyKYCSession(c,!0);B(n.verificationStatus);const x=n.verificationStatus;W(x.isVerified),y("complete"),o==null||o(n)}catch(l){const n=l;k(n.message),s==null||s(n)}finally{N(!1)}},J=()=>{X(),t==null||t()},Q=l=>{m(l),y("upload")},ee=l=>{const n=u.get(l);return(n==null?void 0:n.status)==="completed"||(n==null?void 0:n.status)==="requires_review"};return e.jsxs("div",{className:"ff-container ff-bg-white ff-rounded-xl ff-shadow-xl ff-overflow-hidden ff-flex ff-flex-col ff-max-h-[90vh]",children:[e.jsxs("div",{className:"ff-flex ff-items-center ff-justify-between ff-px-6 ff-py-4 ff-border-b ff-border-gray-200 ff-bg-gray-50 ff-flex-shrink-0",children:[e.jsxs("div",{className:"ff-flex ff-items-center ff-gap-3",children:[e.jsx(V,{className:"ff-w-6 ff-h-6 ff-text-primary-600"}),e.jsx("h2",{className:"ff-text-xl ff-font-semibold ff-text-gray-900",children:"Identity Verification"})]}),e.jsx("button",{onClick:J,className:"ff-p-2 ff-text-gray-400 hover:ff-text-gray-600 ff-rounded-full hover:ff-bg-gray-100",children:e.jsx(r.X,{className:"ff-w-5 ff-h-5"})})]}),e.jsxs("div",{className:"ff-p-6 ff-overflow-y-auto ff-flex-1 ff-min-h-0",children:[b&&e.jsx("div",{className:"ff-mb-4 ff-p-4 ff-bg-error-50 ff-border ff-border-error-200 ff-rounded-lg ff-text-error-700",children:b}),f==="select"&&e.jsxs("div",{className:"ff-space-y-4",children:[e.jsx("p",{className:"ff-text-gray-600 ff-text-center ff-mb-6",children:"Please upload the following documents to verify your identity"}),e.jsx("div",{className:"ff-grid ff-gap-4",children:i.map(l=>{const n=ae[l],x=r.DOCUMENT_TYPES[l];u.get(l);const v=ee(l);return e.jsxs("button",{onClick:()=>Q(l),className:r.clsx("ff-flex ff-items-center ff-gap-4 ff-p-4 ff-rounded-lg ff-border-2 ff-text-left ff-transition-all",v?"ff-border-success-300 ff-bg-success-50":"ff-border-gray-200 hover:ff-border-primary-300 hover:ff-bg-primary-50"),children:[e.jsx("div",{className:r.clsx("ff-p-3 ff-rounded-lg",v?"ff-bg-success-100":"ff-bg-gray-100"),children:v?e.jsx(r.CheckCircle,{className:"ff-w-6 ff-h-6 ff-text-success-600"}):e.jsx(n,{className:"ff-w-6 ff-h-6 ff-text-gray-600"})}),e.jsxs("div",{className:"ff-flex-1",children:[e.jsx("p",{className:"ff-font-medium ff-text-gray-900",children:x.label}),e.jsx("p",{className:"ff-text-sm ff-text-gray-500",children:x.description})]}),e.jsx(r.ChevronRight,{className:"ff-w-5 ff-h-5 ff-text-gray-400"})]},l)})})]}),f==="upload"&&a&&e.jsx("div",{className:"ff-max-w-lg ff-mx-auto",children:e.jsx(O,{documentType:a,onFileSelect:E})}),f==="processing"&&e.jsxs("div",{className:"ff-flex ff-flex-col ff-items-center ff-justify-center ff-py-12",children:[e.jsx(r.Loader2,{className:"ff-w-12 ff-h-12 ff-text-primary-600 ff-animate-spin ff-mb-4"}),e.jsx("h3",{className:"ff-text-lg ff-font-semibold ff-text-gray-900 ff-mb-2",children:"Processing Documents"}),e.jsx("p",{className:"ff-text-gray-500 ff-text-center",children:"We're analyzing your documents. This may take a moment..."})]}),f==="review"&&e.jsxs("div",{className:"ff-space-y-6",children:[e.jsxs("div",{className:"ff-text-center ff-mb-6",children:[e.jsx("h3",{className:"ff-text-lg ff-font-semibold ff-text-gray-900",children:"Review Your Documents"}),e.jsx("p",{className:"ff-text-gray-500",children:"Please review the extracted information before completing verification"})]}),e.jsx("div",{className:"ff-grid ff-gap-4",children:i.map(l=>e.jsx("div",{className:"ff-border ff-border-gray-200 ff-rounded-lg ff-p-4",children:e.jsx(K,{documentType:l,showDetails:!0})},l))})]}),f==="complete"&&e.jsxs("div",{className:"ff-flex ff-flex-col ff-items-center ff-justify-center ff-py-12",children:[e.jsx("div",{className:r.clsx("ff-w-16 ff-h-16 ff-rounded-full ff-flex ff-items-center ff-justify-center ff-mb-4",d?"ff-bg-success-100":"ff-bg-warning-100"),children:d?e.jsx(r.CheckCircle,{className:"ff-w-10 ff-h-10 ff-text-success-600"}):e.jsx(V,{className:"ff-w-10 ff-h-10 ff-text-warning-600"})}),e.jsx("h3",{className:"ff-text-xl ff-font-semibold ff-text-gray-900 ff-mb-2",children:d?"Verification Complete!":"Review Required"}),e.jsx("p",{className:"ff-text-gray-500 ff-text-center",children:d?"Your identity has been successfully verified.":"Additional review may be required. We will contact you if needed."})]})]}),f!=="complete"&&e.jsxs("div",{className:"ff-flex ff-items-center ff-justify-between ff-px-6 ff-py-4 ff-border-t ff-border-gray-200 ff-bg-gray-50 ff-flex-shrink-0",children:[e.jsx("button",{onClick:()=>{(f==="upload"||f==="review")&&y("select")},disabled:h,className:"ff-btn ff-btn-secondary",children:"Back"}),f==="review"&&e.jsx("button",{onClick:G,disabled:h||!R(),className:"ff-btn ff-btn-primary",children:h?e.jsxs(e.Fragment,{children:[e.jsx(r.Loader2,{className:"ff-w-4 ff-h-4 ff-mr-2 ff-animate-spin"}),"Verifying..."]}):"Complete Verification"}),f==="select"&&S()&&e.jsx("button",{onClick:()=>y("review"),className:"ff-btn ff-btn-primary",children:"Review & Verify"})]})]})};exports.DocumentStatus=K;exports.DocumentUploader=O;exports.KYCWizard=ce;exports.useKYCStore=D;
|
|
32
|
+
//# sourceMappingURL=KYCWizard-VcCyxPjW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KYCWizard-VcCyxPjW.js","sources":["../../../node_modules/.pnpm/lucide-react@0.321.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/car.js","../../../node_modules/.pnpm/lucide-react@0.321.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/clock.js","../../../node_modules/.pnpm/lucide-react@0.321.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/file-text.js","../../../node_modules/.pnpm/lucide-react@0.321.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/home.js","../../../node_modules/.pnpm/lucide-react@0.321.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/image.js","../../../node_modules/.pnpm/lucide-react@0.321.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/shield-check.js","../src/store/kyc-store.ts","../src/kyc/components/DocumentUploader.tsx","../src/kyc/components/DocumentStatus.tsx","../src/kyc/components/KYCWizard.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.321.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Car = createLucideIcon(\"Car\", [\n [\n \"path\",\n {\n d: \"M19 17h2c.6 0 1-.4 1-1v-3c0-.9-.7-1.7-1.5-1.9C18.7 10.6 16 10 16 10s-1.3-1.4-2.2-2.3c-.5-.4-1.1-.7-1.8-.7H5c-.6 0-1.1.4-1.4.9l-1.4 2.9A3.7 3.7 0 0 0 2 12v4c0 .6.4 1 1 1h2\",\n key: \"5owen\"\n }\n ],\n [\"circle\", { cx: \"7\", cy: \"17\", r: \"2\", key: \"u2ysq9\" }],\n [\"path\", { d: \"M9 17h6\", key: \"r8uit2\" }],\n [\"circle\", { cx: \"17\", cy: \"17\", r: \"2\", key: \"axvx0g\" }]\n]);\n\nexport { Car as default };\n//# sourceMappingURL=car.js.map\n","/**\n * @license lucide-react v0.321.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Clock = createLucideIcon(\"Clock\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"polyline\", { points: \"12 6 12 12 16 14\", key: \"68esgv\" }]\n]);\n\nexport { Clock as default };\n//# sourceMappingURL=clock.js.map\n","/**\n * @license lucide-react v0.321.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst FileText = createLucideIcon(\"FileText\", [\n [\"path\", { d: \"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\", key: \"1rqfz7\" }],\n [\"path\", { d: \"M14 2v4a2 2 0 0 0 2 2h4\", key: \"tnqrlb\" }],\n [\"path\", { d: \"M10 9H8\", key: \"b1mrlr\" }],\n [\"path\", { d: \"M16 13H8\", key: \"t4e002\" }],\n [\"path\", { d: \"M16 17H8\", key: \"z1uh3a\" }]\n]);\n\nexport { FileText as default };\n//# sourceMappingURL=file-text.js.map\n","/**\n * @license lucide-react v0.321.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Home = createLucideIcon(\"Home\", [\n [\"path\", { d: \"m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\", key: \"y5dka4\" }],\n [\"polyline\", { points: \"9 22 9 12 15 12 15 22\", key: \"e2us08\" }]\n]);\n\nexport { Home as default };\n//# sourceMappingURL=home.js.map\n","/**\n * @license lucide-react v0.321.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Image = createLucideIcon(\"Image\", [\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", ry: \"2\", key: \"1m3agn\" }],\n [\"circle\", { cx: \"9\", cy: \"9\", r: \"2\", key: \"af1f0g\" }],\n [\"path\", { d: \"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\", key: \"1xmnt7\" }]\n]);\n\nexport { Image as default };\n//# sourceMappingURL=image.js.map\n","/**\n * @license lucide-react v0.321.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ShieldCheck = createLucideIcon(\"ShieldCheck\", [\n [\"path\", { d: \"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10\", key: \"1irkt0\" }],\n [\"path\", { d: \"m9 12 2 2 4-4\", key: \"dzmm74\" }]\n]);\n\nexport { ShieldCheck as default };\n//# sourceMappingURL=shield-check.js.map\n","import { create } from 'zustand';\nimport type { \n DocumentType, \n KYCDocument, \n DocumentStatus,\n FraudFlag,\n ExtractedData,\n} from '@fileflow/shared';\n\nexport type KYCStep = 'select' | 'upload' | 'processing' | 'review' | 'complete';\n\nexport interface DocumentState {\n id: string | null;\n type: DocumentType;\n status: DocumentStatus;\n file: File | null;\n previewUrl: string | null;\n extractedData: ExtractedData | null;\n confidence: number;\n fraudFlags: FraudFlag[];\n error: string | null;\n}\n\nexport interface KYCState {\n // Session\n sessionId: string | null;\n status: string;\n step: KYCStep;\n \n // Required documents\n requiredDocuments: DocumentType[];\n currentDocumentType: DocumentType | null;\n \n // Document states\n documents: Map<DocumentType, DocumentState>;\n \n // Verification\n isVerified: boolean;\n verificationStatus: object | null;\n \n // UI state\n isLoading: boolean;\n error: string | null;\n}\n\nexport interface KYCActions {\n // Initialize\n setSessionId: (sessionId: string) => void;\n setRequiredDocuments: (documents: DocumentType[]) => void;\n \n // Document management\n setCurrentDocumentType: (type: DocumentType) => void;\n setDocumentFile: (type: DocumentType, file: File) => void;\n setDocumentStatus: (type: DocumentType, status: DocumentStatus) => void;\n setDocumentData: (type: DocumentType, data: Partial<DocumentState>) => void;\n clearDocumentPreview: (type: DocumentType) => void;\n \n // Navigation\n setStep: (step: KYCStep) => void;\n nextDocument: () => void;\n \n // Verification\n setVerificationStatus: (status: object) => void;\n setVerified: (verified: boolean) => void;\n \n // Status\n setStatus: (status: string) => void;\n setLoading: (loading: boolean) => void;\n setError: (error: string | null) => void;\n \n // Helpers\n getNextRequiredDocument: () => DocumentType | null;\n areAllDocumentsUploaded: () => boolean;\n areAllDocumentsProcessed: () => boolean;\n \n // Reset\n reset: () => void;\n}\n\nconst createEmptyDocumentState = (type: DocumentType): DocumentState => ({\n id: null,\n type,\n status: 'uploaded',\n file: null,\n previewUrl: null,\n extractedData: null,\n confidence: 0,\n fraudFlags: [],\n error: null,\n});\n\nconst initialState: KYCState = {\n sessionId: null,\n status: 'idle',\n step: 'select',\n requiredDocuments: [],\n currentDocumentType: null,\n documents: new Map(),\n isVerified: false,\n verificationStatus: null,\n isLoading: false,\n error: null,\n};\n\nexport const useKYCStore = create<KYCState & KYCActions>((set, get) => ({\n ...initialState,\n\n setSessionId: (sessionId) => set({ sessionId }),\n\n setRequiredDocuments: (documents) => {\n const docsMap = new Map<DocumentType, DocumentState>();\n for (const type of documents) {\n docsMap.set(type, createEmptyDocumentState(type));\n }\n set({ \n requiredDocuments: documents, \n documents: docsMap,\n currentDocumentType: documents[0] || null,\n });\n },\n\n setCurrentDocumentType: (type) => set({ currentDocumentType: type }),\n\n setDocumentFile: (type, file) => {\n const { documents } = get();\n const doc = documents.get(type) || createEmptyDocumentState(type);\n \n // Create preview URL\n const previewUrl = URL.createObjectURL(file);\n \n const updated = new Map(documents);\n updated.set(type, {\n ...doc,\n file,\n previewUrl,\n status: 'uploaded',\n error: null,\n });\n \n set({ documents: updated });\n },\n\n setDocumentStatus: (type, status) => {\n const { documents } = get();\n const doc = documents.get(type);\n if (doc) {\n const updated = new Map(documents);\n updated.set(type, { ...doc, status });\n set({ documents: updated });\n }\n },\n\n setDocumentData: (type, data) => {\n const { documents } = get();\n const doc = documents.get(type);\n if (doc) {\n const updated = new Map(documents);\n updated.set(type, { ...doc, ...data });\n set({ documents: updated });\n }\n },\n\n clearDocumentPreview: (type) => {\n const { documents } = get();\n const doc = documents.get(type);\n if (doc?.previewUrl) {\n URL.revokeObjectURL(doc.previewUrl);\n }\n },\n\n setStep: (step) => set({ step }),\n\n nextDocument: () => {\n const { requiredDocuments, currentDocumentType, documents } = get();\n const currentIndex = currentDocumentType \n ? requiredDocuments.indexOf(currentDocumentType) \n : -1;\n \n // Find next document that needs upload\n for (let i = currentIndex + 1; i < requiredDocuments.length; i++) {\n const type = requiredDocuments[i];\n const doc = documents.get(type);\n if (!doc?.file) {\n set({ currentDocumentType: type });\n return;\n }\n }\n \n // All documents uploaded, move to processing/review\n set({ \n currentDocumentType: null,\n step: 'processing',\n });\n },\n\n setVerificationStatus: (status) => set({ verificationStatus: status }),\n \n setVerified: (verified) => set({ isVerified: verified }),\n\n setStatus: (status) => set({ status }),\n \n setLoading: (isLoading) => set({ isLoading }),\n \n setError: (error) => set({ error }),\n\n getNextRequiredDocument: () => {\n const { requiredDocuments, documents } = get();\n for (const type of requiredDocuments) {\n const doc = documents.get(type);\n if (!doc?.file) {\n return type;\n }\n }\n return null;\n },\n\n areAllDocumentsUploaded: () => {\n const { requiredDocuments, documents } = get();\n return requiredDocuments.every((type) => {\n const doc = documents.get(type);\n return doc?.file !== null;\n });\n },\n\n areAllDocumentsProcessed: () => {\n const { requiredDocuments, documents } = get();\n return requiredDocuments.every((type) => {\n const doc = documents.get(type);\n return doc?.status === 'completed' || doc?.status === 'requires_review';\n });\n },\n\n reset: () => {\n // Clean up preview URLs\n const { documents } = get();\n for (const doc of documents.values()) {\n if (doc.previewUrl) {\n URL.revokeObjectURL(doc.previewUrl);\n }\n }\n set(initialState);\n },\n}));\n","import React, { useCallback } from 'react';\nimport { useDropzone } from 'react-dropzone';\nimport { Upload, FileText, Image, AlertCircle, X } from 'lucide-react';\nimport { clsx } from 'clsx';\nimport { useKYCStore } from '../../store/kyc-store';\nimport type { DocumentType } from '@fileflow/shared';\nimport { DOCUMENT_TYPES } from '@fileflow/shared';\n\ninterface DocumentUploaderProps {\n documentType: DocumentType;\n onFileSelect?: (file: File) => void;\n}\n\nexport const DocumentUploader: React.FC<DocumentUploaderProps> = ({\n documentType,\n onFileSelect,\n}) => {\n const { documents, setDocumentFile, isLoading } = useKYCStore();\n const documentState = documents.get(documentType);\n const documentInfo = DOCUMENT_TYPES[documentType];\n\n const onDrop = useCallback(\n (acceptedFiles: File[], rejectedFiles: unknown[]) => {\n if (rejectedFiles.length > 0) {\n return;\n }\n\n if (acceptedFiles.length > 0) {\n const file = acceptedFiles[0];\n setDocumentFile(documentType, file);\n onFileSelect?.(file);\n }\n },\n [documentType, onFileSelect, setDocumentFile]\n );\n\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n onDrop,\n accept: {\n 'application/pdf': ['.pdf'],\n 'image/jpeg': ['.jpg', '.jpeg'],\n 'image/png': ['.png'],\n },\n maxSize: documentInfo.maxFileSize,\n multiple: false,\n disabled: isLoading,\n });\n\n const formatFileSize = (bytes: number): string => {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n };\n\n const getFileIcon = () => {\n if (documentState?.file?.type === 'application/pdf') {\n return <FileText className=\"ff-w-6 ff-h-6\" />;\n }\n return <Image className=\"ff-w-6 ff-h-6\" />;\n };\n\n const clearFile = (e: React.MouseEvent) => {\n e.stopPropagation();\n useKYCStore.getState().clearDocumentPreview(documentType);\n setDocumentFile(documentType, null as unknown as File);\n };\n\n // Show preview if file is selected\n if (documentState?.file && documentState.previewUrl) {\n return (\n <div className=\"ff-space-y-4\">\n {/* Document Info */}\n <div className=\"ff-bg-primary-50 ff-border ff-border-primary-200 ff-rounded-lg ff-p-4\">\n <div className=\"ff-flex ff-items-center ff-gap-3\">\n <div className=\"ff-p-2 ff-bg-primary-100 ff-rounded-lg ff-text-primary-600\">\n {getFileIcon()}\n </div>\n <div className=\"ff-flex-1 ff-min-w-0\">\n <p className=\"ff-font-medium ff-text-primary-900 ff-truncate\">\n {documentState.file.name}\n </p>\n <p className=\"ff-text-sm ff-text-primary-600\">\n {formatFileSize(documentState.file.size)}\n </p>\n </div>\n <button\n onClick={clearFile}\n className=\"ff-p-1.5 ff-text-primary-600 hover:ff-text-primary-800 hover:ff-bg-primary-100 ff-rounded-full ff-transition-colors\"\n aria-label=\"Remove file\"\n >\n <X className=\"ff-w-5 ff-h-5\" />\n </button>\n </div>\n </div>\n\n {/* Preview */}\n <div className=\"ff-document-preview ff-aspect-[3/4] ff-max-h-96\">\n {documentState.file.type === 'application/pdf' ? (\n <iframe\n src={documentState.previewUrl}\n className=\"ff-w-full ff-h-full ff-rounded-lg\"\n title=\"Document preview\"\n />\n ) : (\n <img\n src={documentState.previewUrl}\n alt=\"Document preview\"\n className=\"ff-w-full ff-h-full ff-object-contain ff-rounded-lg\"\n />\n )}\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"ff-space-y-4\">\n {/* Document Type Info */}\n <div className=\"ff-text-center ff-mb-4\">\n <h3 className=\"ff-text-lg ff-font-semibold ff-text-gray-900\">{documentInfo.label}</h3>\n <p className=\"ff-text-sm ff-text-gray-500 ff-mt-1\">{documentInfo.description}</p>\n </div>\n\n {/* Dropzone */}\n <div\n {...getRootProps()}\n className={clsx(\n 'ff-dropzone ff-min-h-[200px]',\n isDragActive && 'ff-dropzone-active',\n isLoading && 'ff-opacity-50 ff-cursor-not-allowed'\n )}\n >\n <input {...getInputProps()} />\n <div className=\"ff-flex ff-flex-col ff-items-center ff-gap-4\">\n <div\n className={clsx(\n 'ff-p-4 ff-rounded-full',\n isDragActive ? 'ff-bg-primary-100' : 'ff-bg-gray-100'\n )}\n >\n <Upload\n className={clsx(\n 'ff-w-10 ff-h-10',\n isDragActive ? 'ff-text-primary-600' : 'ff-text-gray-400'\n )}\n />\n </div>\n <div className=\"ff-text-center\">\n <p className=\"ff-text-base ff-font-medium ff-text-gray-700\">\n {isDragActive ? 'Drop your document here' : 'Upload your document'}\n </p>\n <p className=\"ff-text-sm ff-text-gray-500 ff-mt-1\">\n Drag & drop or{' '}\n <span className=\"ff-text-primary-600 ff-font-medium\">browse files</span>\n </p>\n </div>\n <div className=\"ff-flex ff-flex-wrap ff-justify-center ff-gap-2 ff-text-xs ff-text-gray-400\">\n {documentInfo.acceptedFormats.map((format) => (\n <span key={format} className=\"ff-px-2 ff-py-1 ff-bg-gray-100 ff-rounded\">\n {format.toUpperCase()}\n </span>\n ))}\n <span className=\"ff-px-2 ff-py-1\">\n Max {formatFileSize(documentInfo.maxFileSize)}\n </span>\n </div>\n </div>\n </div>\n\n {/* Error */}\n {documentState?.error && (\n <div className=\"ff-flex ff-items-center ff-gap-2 ff-p-3 ff-bg-error-50 ff-text-error-700 ff-rounded-lg\">\n <AlertCircle className=\"ff-w-4 ff-h-4 ff-flex-shrink-0\" />\n <p className=\"ff-text-sm\">{documentState.error}</p>\n </div>\n )}\n\n {/* Tips */}\n <div className=\"ff-bg-gray-50 ff-rounded-lg ff-p-4\">\n <h4 className=\"ff-text-sm ff-font-medium ff-text-gray-700 ff-mb-2\">Tips for best results:</h4>\n <ul className=\"ff-text-sm ff-text-gray-500 ff-space-y-1 ff-list-disc ff-list-inside\">\n <li>Ensure all text is clearly visible and readable</li>\n <li>Avoid glare, shadows, or blurry images</li>\n <li>Include all four corners of the document</li>\n <li>Use good lighting when taking photos</li>\n </ul>\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { CheckCircle, XCircle, AlertTriangle, Loader2, Clock } from 'lucide-react';\nimport { clsx } from 'clsx';\nimport { useKYCStore } from '../../store/kyc-store';\nimport type { DocumentType, DocumentStatus as DocStatus } from '@fileflow/shared';\nimport { DOCUMENT_TYPES } from '@fileflow/shared';\n\ninterface DocumentStatusProps {\n documentType: DocumentType;\n showDetails?: boolean;\n}\n\nexport const DocumentStatus: React.FC<DocumentStatusProps> = ({\n documentType,\n showDetails = true,\n}) => {\n const { documents } = useKYCStore();\n const documentState = documents.get(documentType);\n const documentInfo = DOCUMENT_TYPES[documentType];\n\n const getStatusConfig = (status?: DocStatus) => {\n switch (status) {\n case 'completed':\n return {\n icon: CheckCircle,\n color: 'ff-text-success-600',\n bgColor: 'ff-bg-success-100',\n label: 'Verified',\n description: 'Document successfully processed',\n };\n case 'requires_review':\n return {\n icon: AlertTriangle,\n color: 'ff-text-warning-600',\n bgColor: 'ff-bg-warning-100',\n label: 'Review Required',\n description: 'Manual verification may be needed',\n };\n case 'failed':\n return {\n icon: XCircle,\n color: 'ff-text-error-600',\n bgColor: 'ff-bg-error-100',\n label: 'Failed',\n description: 'Unable to process document',\n };\n case 'processing':\n return {\n icon: Loader2,\n color: 'ff-text-primary-600',\n bgColor: 'ff-bg-primary-100',\n label: 'Processing',\n description: 'Analyzing document...',\n };\n case 'uploaded':\n return {\n icon: Clock,\n color: 'ff-text-gray-600',\n bgColor: 'ff-bg-gray-100',\n label: 'Pending',\n description: 'Waiting to be processed',\n };\n default:\n return {\n icon: Clock,\n color: 'ff-text-gray-400',\n bgColor: 'ff-bg-gray-100',\n label: 'Not Uploaded',\n description: 'Upload document to continue',\n };\n }\n };\n\n const statusConfig = getStatusConfig(documentState?.status);\n const Icon = statusConfig.icon;\n\n return (\n <div className=\"ff-space-y-3\">\n {/* Status Header */}\n <div className=\"ff-flex ff-items-center ff-gap-3\">\n <div className={clsx('ff-p-2 ff-rounded-lg', statusConfig.bgColor)}>\n <Icon\n className={clsx(\n 'ff-w-5 ff-h-5',\n statusConfig.color,\n documentState?.status === 'processing' && 'ff-animate-spin'\n )}\n />\n </div>\n <div>\n <p className=\"ff-font-medium ff-text-gray-900\">{documentInfo.label}</p>\n <p className={clsx('ff-text-sm', statusConfig.color)}>{statusConfig.label}</p>\n </div>\n </div>\n\n {/* Confidence Score */}\n {documentState?.confidence !== undefined && documentState.confidence > 0 && (\n <div className=\"ff-space-y-1\">\n <div className=\"ff-flex ff-items-center ff-justify-between ff-text-sm\">\n <span className=\"ff-text-gray-600\">Confidence</span>\n <span\n className={clsx(\n 'ff-font-medium',\n documentState.confidence >= 0.8 && 'ff-text-success-600',\n documentState.confidence >= 0.6 &&\n documentState.confidence < 0.8 &&\n 'ff-text-warning-600',\n documentState.confidence < 0.6 && 'ff-text-error-600'\n )}\n >\n {Math.round(documentState.confidence * 100)}%\n </span>\n </div>\n <div className=\"ff-progress\">\n <div\n className={clsx(\n 'ff-progress-bar',\n documentState.confidence >= 0.8 && 'ff-bg-success-500',\n documentState.confidence >= 0.6 &&\n documentState.confidence < 0.8 &&\n 'ff-bg-warning-500',\n documentState.confidence < 0.6 && 'ff-bg-error-500'\n )}\n style={{ width: `${documentState.confidence * 100}%` }}\n />\n </div>\n </div>\n )}\n\n {/* Fraud Flags */}\n {showDetails && documentState?.fraudFlags && documentState.fraudFlags.length > 0 && (\n <div className=\"ff-space-y-2\">\n <p className=\"ff-text-sm ff-font-medium ff-text-gray-700\">Issues Detected</p>\n <div className=\"ff-space-y-1\">\n {documentState.fraudFlags.map((flag, index) => (\n <div\n key={index}\n className={clsx(\n 'ff-flex ff-items-start ff-gap-2 ff-p-2 ff-rounded ff-text-sm',\n flag.severity === 'high' && 'ff-bg-error-50 ff-text-error-700',\n flag.severity === 'medium' && 'ff-bg-warning-50 ff-text-warning-700',\n flag.severity === 'low' && 'ff-bg-gray-50 ff-text-gray-600'\n )}\n >\n {flag.severity === 'high' ? (\n <XCircle className=\"ff-w-4 ff-h-4 ff-flex-shrink-0 ff-mt-0.5\" />\n ) : (\n <AlertTriangle className=\"ff-w-4 ff-h-4 ff-flex-shrink-0 ff-mt-0.5\" />\n )}\n <span>{flag.message}</span>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Extracted Data Preview */}\n {showDetails &&\n documentState?.extractedData &&\n documentState.status === 'completed' && (\n <div className=\"ff-bg-gray-50 ff-rounded-lg ff-p-3\">\n <p className=\"ff-text-sm ff-font-medium ff-text-gray-700 ff-mb-2\">\n Extracted Information\n </p>\n <dl className=\"ff-space-y-1 ff-text-sm\">\n {'fullName' in documentState.extractedData && (\n <div className=\"ff-flex ff-justify-between\">\n <dt className=\"ff-text-gray-500\">Name</dt>\n <dd className=\"ff-text-gray-900 ff-font-medium\">\n {documentState.extractedData.fullName}\n </dd>\n </div>\n )}\n {'dateOfBirth' in documentState.extractedData && (\n <div className=\"ff-flex ff-justify-between\">\n <dt className=\"ff-text-gray-500\">Date of Birth</dt>\n <dd className=\"ff-text-gray-900\">{documentState.extractedData.dateOfBirth}</dd>\n </div>\n )}\n {documentState.extractedData.documentType === 'passport' &&\n 'passportNumber' in documentState.extractedData && (\n <div className=\"ff-flex ff-justify-between\">\n <dt className=\"ff-text-gray-500\">Passport #</dt>\n <dd className=\"ff-text-gray-900 ff-font-mono\">\n {documentState.extractedData.passportNumber}\n </dd>\n </div>\n )}\n {documentState.extractedData.documentType === 'drivers_license' &&\n 'licenseNumber' in documentState.extractedData && (\n <div className=\"ff-flex ff-justify-between\">\n <dt className=\"ff-text-gray-500\">License #</dt>\n <dd className=\"ff-text-gray-900 ff-font-mono\">\n {documentState.extractedData.licenseNumber}\n </dd>\n </div>\n )}\n {'address' in documentState.extractedData && documentState.extractedData.address && (\n <div className=\"ff-flex ff-justify-between\">\n <dt className=\"ff-text-gray-500\">Address</dt>\n <dd className=\"ff-text-gray-900 ff-text-right\">\n {documentState.extractedData.address.city},{' '}\n {documentState.extractedData.address.province}\n </dd>\n </div>\n )}\n </dl>\n </div>\n )}\n </div>\n );\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport {\n FileText,\n Car,\n Home,\n CheckCircle,\n X,\n Loader2,\n ChevronRight,\n ShieldCheck,\n} from 'lucide-react';\nimport { clsx } from 'clsx';\nimport { useKYCStore, type KYCStep } from '../../store/kyc-store';\nimport { getClient } from '../../api/client';\nimport { DocumentUploader } from './DocumentUploader';\nimport { DocumentStatus } from './DocumentStatus';\nimport type { DocumentType, KYCSession, KYCDocument } from '@fileflow/shared';\nimport { DOCUMENT_TYPES } from '@fileflow/shared';\n\ninterface KYCWizardProps {\n requiredDocuments: DocumentType[];\n onComplete?: (session: KYCSession) => void;\n onCancel?: () => void;\n onError?: (error: Error) => void;\n}\n\nconst DOCUMENT_ICONS: Record<DocumentType, React.ElementType> = {\n passport: FileText,\n drivers_license: Car,\n proof_of_address: Home,\n};\n\nexport const KYCWizard: React.FC<KYCWizardProps> = ({\n requiredDocuments,\n onComplete,\n onCancel,\n onError,\n}) => {\n const {\n sessionId,\n step,\n currentDocumentType,\n documents,\n isVerified,\n verificationStatus,\n isLoading,\n error,\n setSessionId,\n setRequiredDocuments,\n setCurrentDocumentType,\n setDocumentStatus,\n setDocumentData,\n setStep,\n nextDocument,\n setVerificationStatus,\n setVerified,\n setLoading,\n setError,\n areAllDocumentsUploaded,\n areAllDocumentsProcessed,\n reset,\n } = useKYCStore();\n\n const [pollingDocument, setPollingDocument] = useState<string | null>(null);\n\n // Initialize\n useEffect(() => {\n setRequiredDocuments(requiredDocuments);\n initializeSession();\n\n return () => {\n // Cleanup polling on unmount\n setPollingDocument(null);\n };\n }, [requiredDocuments]);\n\n const initializeSession = async () => {\n try {\n setLoading(true);\n const client = getClient();\n const result = await client.createKYCSession(requiredDocuments);\n setSessionId(result.sessionId);\n setStep('upload');\n } catch (err) {\n const error = err as Error;\n setError(error.message);\n onError?.(error);\n } finally {\n setLoading(false);\n }\n };\n\n const handleFileSelect = useCallback(\n async (file: File) => {\n if (!sessionId || !currentDocumentType) return;\n\n try {\n setLoading(true);\n setError(null);\n\n const client = getClient();\n const result = await client.uploadKYCDocument(sessionId, currentDocumentType, file);\n\n setDocumentData(currentDocumentType, {\n id: result.documentId,\n status: 'processing',\n });\n\n // Start polling for document status\n setPollingDocument(result.documentId);\n pollDocumentStatus(result.documentId);\n } catch (err) {\n const error = err as Error;\n setDocumentData(currentDocumentType, {\n status: 'failed',\n error: error.message,\n });\n onError?.(error);\n } finally {\n setLoading(false);\n }\n },\n [sessionId, currentDocumentType]\n );\n\n const pollDocumentStatus = async (documentId: string) => {\n const maxAttempts = 30;\n const maxConsecutiveErrors = 3; // Stop after 3 consecutive errors\n let attempts = 0;\n let consecutiveErrors = 0;\n\n const poll = async () => {\n if (attempts >= maxAttempts) {\n setPollingDocument(null);\n if (currentDocumentType) {\n setDocumentData(currentDocumentType, {\n status: 'failed',\n error: 'Processing timed out. Please try again.',\n });\n }\n return;\n }\n\n // Stop polling if we've had too many consecutive errors\n if (consecutiveErrors >= maxConsecutiveErrors) {\n setPollingDocument(null);\n if (currentDocumentType) {\n setDocumentData(currentDocumentType, {\n status: 'failed',\n error: 'Failed to check document status. Please refresh and try again.',\n });\n }\n return;\n }\n\n try {\n const client = getClient();\n const result = await client.getKYCDocument(documentId);\n const doc = result.document as KYCDocument;\n\n // Reset consecutive errors on success\n consecutiveErrors = 0;\n\n const docType = doc.type as DocumentType;\n setDocumentData(docType, {\n id: doc.id,\n status: doc.status,\n extractedData: doc.extractedData,\n confidence: doc.confidence,\n fraudFlags: doc.fraudFlags,\n error: null, // Clear any previous errors\n });\n\n if (doc.status === 'completed' || doc.status === 'requires_review' || doc.status === 'failed') {\n setPollingDocument(null);\n\n // Check if all documents are processed\n if (areAllDocumentsUploaded()) {\n const allProcessed = areAllDocumentsProcessed();\n if (allProcessed) {\n setStep('review');\n }\n } else {\n // Move to next document\n nextDocument();\n }\n return;\n }\n\n // Continue polling\n attempts++;\n setTimeout(poll, 2000);\n } catch (err) {\n const error = err as Error & { status?: number };\n consecutiveErrors++;\n attempts++;\n \n // On 404, stop immediately - the document doesn't exist\n if (error.status === 404 || error.message?.includes('not found')) {\n setPollingDocument(null);\n if (currentDocumentType) {\n setDocumentData(currentDocumentType, {\n status: 'failed',\n error: 'Session not found or invalid state',\n });\n }\n return;\n }\n\n // On other errors, retry with backoff (up to maxConsecutiveErrors times)\n if (consecutiveErrors < maxConsecutiveErrors) {\n setTimeout(poll, 3000 * consecutiveErrors); // Exponential backoff\n } else {\n setPollingDocument(null);\n if (currentDocumentType) {\n setDocumentData(currentDocumentType, {\n status: 'failed',\n error: error.message || 'Failed to process document',\n });\n }\n }\n }\n };\n\n poll();\n };\n\n const handleVerify = async () => {\n if (!sessionId) return;\n\n try {\n setLoading(true);\n setError(null);\n\n const client = getClient();\n const result = await client.verifyKYCSession(sessionId, true);\n\n setVerificationStatus(result.verificationStatus);\n const status = result.verificationStatus as { isVerified: boolean };\n setVerified(status.isVerified);\n setStep('complete');\n\n onComplete?.(result as unknown as KYCSession);\n } catch (err) {\n const error = err as Error;\n setError(error.message);\n onError?.(error);\n } finally {\n setLoading(false);\n }\n };\n\n const handleCancel = () => {\n reset();\n onCancel?.();\n };\n\n const selectDocument = (type: DocumentType) => {\n setCurrentDocumentType(type);\n setStep('upload');\n };\n\n const isDocumentComplete = (type: DocumentType) => {\n const doc = documents.get(type);\n return doc?.status === 'completed' || doc?.status === 'requires_review';\n };\n\n return (\n <div className=\"ff-container ff-bg-white ff-rounded-xl ff-shadow-xl ff-overflow-hidden ff-flex ff-flex-col ff-max-h-[90vh]\">\n {/* Header */}\n <div className=\"ff-flex ff-items-center ff-justify-between ff-px-6 ff-py-4 ff-border-b ff-border-gray-200 ff-bg-gray-50 ff-flex-shrink-0\">\n <div className=\"ff-flex ff-items-center ff-gap-3\">\n <ShieldCheck className=\"ff-w-6 ff-h-6 ff-text-primary-600\" />\n <h2 className=\"ff-text-xl ff-font-semibold ff-text-gray-900\">Identity Verification</h2>\n </div>\n <button\n onClick={handleCancel}\n className=\"ff-p-2 ff-text-gray-400 hover:ff-text-gray-600 ff-rounded-full hover:ff-bg-gray-100\"\n >\n <X className=\"ff-w-5 ff-h-5\" />\n </button>\n </div>\n\n {/* Content */}\n <div className=\"ff-p-6 ff-overflow-y-auto ff-flex-1 ff-min-h-0\">\n {error && (\n <div className=\"ff-mb-4 ff-p-4 ff-bg-error-50 ff-border ff-border-error-200 ff-rounded-lg ff-text-error-700\">\n {error}\n </div>\n )}\n\n {/* Document Selection */}\n {step === 'select' && (\n <div className=\"ff-space-y-4\">\n <p className=\"ff-text-gray-600 ff-text-center ff-mb-6\">\n Please upload the following documents to verify your identity\n </p>\n <div className=\"ff-grid ff-gap-4\">\n {requiredDocuments.map((type) => {\n const Icon = DOCUMENT_ICONS[type];\n const info = DOCUMENT_TYPES[type];\n const doc = documents.get(type);\n const isComplete = isDocumentComplete(type);\n\n return (\n <button\n key={type}\n onClick={() => selectDocument(type)}\n className={clsx(\n 'ff-flex ff-items-center ff-gap-4 ff-p-4 ff-rounded-lg ff-border-2 ff-text-left ff-transition-all',\n isComplete\n ? 'ff-border-success-300 ff-bg-success-50'\n : 'ff-border-gray-200 hover:ff-border-primary-300 hover:ff-bg-primary-50'\n )}\n >\n <div\n className={clsx(\n 'ff-p-3 ff-rounded-lg',\n isComplete ? 'ff-bg-success-100' : 'ff-bg-gray-100'\n )}\n >\n {isComplete ? (\n <CheckCircle className=\"ff-w-6 ff-h-6 ff-text-success-600\" />\n ) : (\n <Icon className=\"ff-w-6 ff-h-6 ff-text-gray-600\" />\n )}\n </div>\n <div className=\"ff-flex-1\">\n <p className=\"ff-font-medium ff-text-gray-900\">{info.label}</p>\n <p className=\"ff-text-sm ff-text-gray-500\">{info.description}</p>\n </div>\n <ChevronRight className=\"ff-w-5 ff-h-5 ff-text-gray-400\" />\n </button>\n );\n })}\n </div>\n </div>\n )}\n\n {/* Document Upload */}\n {step === 'upload' && currentDocumentType && (\n <div className=\"ff-max-w-lg ff-mx-auto\">\n <DocumentUploader documentType={currentDocumentType} onFileSelect={handleFileSelect} />\n </div>\n )}\n\n {/* Processing */}\n {step === 'processing' && (\n <div className=\"ff-flex ff-flex-col ff-items-center ff-justify-center ff-py-12\">\n <Loader2 className=\"ff-w-12 ff-h-12 ff-text-primary-600 ff-animate-spin ff-mb-4\" />\n <h3 className=\"ff-text-lg ff-font-semibold ff-text-gray-900 ff-mb-2\">\n Processing Documents\n </h3>\n <p className=\"ff-text-gray-500 ff-text-center\">\n We're analyzing your documents. This may take a moment...\n </p>\n </div>\n )}\n\n {/* Review */}\n {step === 'review' && (\n <div className=\"ff-space-y-6\">\n <div className=\"ff-text-center ff-mb-6\">\n <h3 className=\"ff-text-lg ff-font-semibold ff-text-gray-900\">Review Your Documents</h3>\n <p className=\"ff-text-gray-500\">\n Please review the extracted information before completing verification\n </p>\n </div>\n\n <div className=\"ff-grid ff-gap-4\">\n {requiredDocuments.map((type) => (\n <div\n key={type}\n className=\"ff-border ff-border-gray-200 ff-rounded-lg ff-p-4\"\n >\n <DocumentStatus documentType={type} showDetails={true} />\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Complete */}\n {step === 'complete' && (\n <div className=\"ff-flex ff-flex-col ff-items-center ff-justify-center ff-py-12\">\n <div\n className={clsx(\n 'ff-w-16 ff-h-16 ff-rounded-full ff-flex ff-items-center ff-justify-center ff-mb-4',\n isVerified ? 'ff-bg-success-100' : 'ff-bg-warning-100'\n )}\n >\n {isVerified ? (\n <CheckCircle className=\"ff-w-10 ff-h-10 ff-text-success-600\" />\n ) : (\n <ShieldCheck className=\"ff-w-10 ff-h-10 ff-text-warning-600\" />\n )}\n </div>\n <h3 className=\"ff-text-xl ff-font-semibold ff-text-gray-900 ff-mb-2\">\n {isVerified ? 'Verification Complete!' : 'Review Required'}\n </h3>\n <p className=\"ff-text-gray-500 ff-text-center\">\n {isVerified\n ? 'Your identity has been successfully verified.'\n : 'Additional review may be required. We will contact you if needed.'}\n </p>\n </div>\n )}\n </div>\n\n {/* Footer */}\n {step !== 'complete' && (\n <div className=\"ff-flex ff-items-center ff-justify-between ff-px-6 ff-py-4 ff-border-t ff-border-gray-200 ff-bg-gray-50 ff-flex-shrink-0\">\n <button\n onClick={() => {\n if (step === 'upload') {\n setStep('select');\n } else if (step === 'review') {\n setStep('select');\n }\n }}\n disabled={isLoading}\n className=\"ff-btn ff-btn-secondary\"\n >\n Back\n </button>\n\n {step === 'review' && (\n <button\n onClick={handleVerify}\n disabled={isLoading || !areAllDocumentsProcessed()}\n className=\"ff-btn ff-btn-primary\"\n >\n {isLoading ? (\n <>\n <Loader2 className=\"ff-w-4 ff-h-4 ff-mr-2 ff-animate-spin\" />\n Verifying...\n </>\n ) : (\n 'Complete Verification'\n )}\n </button>\n )}\n\n {step === 'select' && areAllDocumentsUploaded() && (\n <button\n onClick={() => setStep('review')}\n className=\"ff-btn ff-btn-primary\"\n >\n Review & Verify\n </button>\n )}\n </div>\n )}\n </div>\n );\n};\n"],"names":["Car","createLucideIcon","Clock","FileText","Home","Image","ShieldCheck","createEmptyDocumentState","type","initialState","useKYCStore","create","set","get","sessionId","documents","docsMap","file","doc","previewUrl","updated","status","data","step","requiredDocuments","currentDocumentType","currentIndex","i","verified","isLoading","error","DocumentUploader","documentType","onFileSelect","setDocumentFile","documentState","documentInfo","DOCUMENT_TYPES","onDrop","useCallback","acceptedFiles","rejectedFiles","getRootProps","getInputProps","isDragActive","useDropzone","formatFileSize","bytes","getFileIcon","_a","jsx","clearFile","e","jsxs","X","clsx","Upload","format","AlertCircle","DocumentStatus","showDetails","statusConfig","CheckCircle","AlertTriangle","XCircle","Loader2","Icon","flag","index","DOCUMENT_ICONS","KYCWizard","onComplete","onCancel","onError","isVerified","verificationStatus","setSessionId","setRequiredDocuments","setCurrentDocumentType","setDocumentStatus","setDocumentData","setStep","nextDocument","setVerificationStatus","setVerified","setLoading","setError","areAllDocumentsUploaded","areAllDocumentsProcessed","reset","pollingDocument","setPollingDocument","useState","useEffect","initializeSession","result","getClient","err","handleFileSelect","pollDocumentStatus","documentId","attempts","consecutiveErrors","poll","docType","handleVerify","handleCancel","selectDocument","isDocumentComplete","info","isComplete","ChevronRight","Fragment"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5]}
|
package/dist/import.d.ts
CHANGED
|
@@ -87,7 +87,17 @@ export declare type ImportStep = 'upload' | 'mapping' | 'validation' | 'review'
|
|
|
87
87
|
export declare const ImportWizard: default_2.FC<ImportWizardProps>;
|
|
88
88
|
|
|
89
89
|
declare interface ImportWizardProps {
|
|
90
|
-
|
|
90
|
+
/**
|
|
91
|
+
* Template name to use for import schema.
|
|
92
|
+
* Use this instead of schema prop for built-in templates.
|
|
93
|
+
* Available templates: 'sample-contact', 'payspace-batch'
|
|
94
|
+
*/
|
|
95
|
+
template?: string;
|
|
96
|
+
/**
|
|
97
|
+
* Custom import schema. Only used if template is not provided.
|
|
98
|
+
* @deprecated Prefer using template prop for built-in schemas
|
|
99
|
+
*/
|
|
100
|
+
schema?: ImportSchema;
|
|
91
101
|
onComplete?: (result: ImportResult) => void;
|
|
92
102
|
onCancel?: () => void;
|
|
93
103
|
onError?: (error: Error) => void;
|
package/dist/import.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./ImportWizard-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./ImportWizard-D7zGFzbo.js");exports.ColumnMapper=r.ColumnMapper;exports.DataTable=r.DataTable;exports.FileUploader=r.FileUploader;exports.ImportWizard=r.ImportWizard;exports.ValidationSummary=r.ValidationSummary;exports.useImportStore=r.useImportStore;
|
|
2
2
|
//# sourceMappingURL=import.js.map
|
package/dist/import.mjs
CHANGED