@sanctum-key/react-native-sdk 1.0.24 → 1.0.25
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/build/package.json +3 -1
- package/build/src/components/EnhancedCameraView.d.ts +7 -1
- package/build/src/components/EnhancedCameraView.d.ts.map +1 -1
- package/build/src/components/EnhancedCameraView.js +88 -30
- package/build/src/components/EnhancedCameraView.js.map +1 -1
- package/build/src/components/EnhancedCameraView.web.d.ts +5 -1
- package/build/src/components/EnhancedCameraView.web.d.ts.map +1 -1
- package/build/src/components/EnhancedCameraView.web.js +80 -295
- package/build/src/components/EnhancedCameraView.web.js.map +1 -1
- package/build/src/components/KYCElements/CameraCapture.js +1 -1
- package/build/src/components/KYCElements/CameraCapture.js.map +1 -1
- package/build/src/components/KYCElements/CountrySelection.d.ts.map +1 -1
- package/build/src/components/KYCElements/CountrySelection.js +38 -218
- package/build/src/components/KYCElements/CountrySelection.js.map +1 -1
- package/build/src/components/KYCElements/CountrySelectionTemplate.d.ts.map +1 -1
- package/build/src/components/KYCElements/CountrySelectionTemplate.js +5 -17
- package/build/src/components/KYCElements/CountrySelectionTemplate.js.map +1 -1
- package/build/src/components/KYCElements/IDCardCapture.d.ts.map +1 -1
- package/build/src/components/KYCElements/IDCardCapture.js +509 -95
- package/build/src/components/KYCElements/IDCardCapture.js.map +1 -1
- package/build/src/components/KYCElements/VerificationProgressTemplate.d.ts.map +1 -1
- package/build/src/components/KYCElements/VerificationProgressTemplate.js +93 -51
- package/build/src/components/KYCElements/VerificationProgressTemplate.js.map +1 -1
- package/build/src/components/OverLay/type.d.ts +1 -0
- package/build/src/components/OverLay/type.d.ts.map +1 -1
- package/build/src/components/OverLay/type.js.map +1 -1
- package/build/src/components/WebBarcodeScanner.d.ts +9 -0
- package/build/src/components/WebBarcodeScanner.d.ts.map +1 -0
- package/build/src/components/WebBarcodeScanner.js +152 -0
- package/build/src/components/WebBarcodeScanner.js.map +1 -0
- package/build/src/config/KYCConfigs.js +2 -2
- package/build/src/config/KYCConfigs.js.map +1 -1
- package/build/src/config/region_mapping.json +0 -14
- package/build/src/modules/api/CardAuthentification.d.ts +2 -0
- package/build/src/modules/api/CardAuthentification.d.ts.map +1 -1
- package/build/src/modules/api/CardAuthentification.js +22 -39
- package/build/src/modules/api/CardAuthentification.js.map +1 -1
- package/build/src/modules/api/KYCService.d.ts +7 -2
- package/build/src/modules/api/KYCService.d.ts.map +1 -1
- package/build/src/modules/api/KYCService.js +163 -57
- package/build/src/modules/api/KYCService.js.map +1 -1
- package/build/src/types/KYC.types.d.ts +1 -0
- package/build/src/types/KYC.types.d.ts.map +1 -1
- package/build/src/types/KYC.types.js.map +1 -1
- package/build/src/utils/aamvaParser.d.ts +62 -0
- package/build/src/utils/aamvaParser.d.ts.map +1 -0
- package/build/src/utils/aamvaParser.js +91 -0
- package/build/src/utils/aamvaParser.js.map +1 -0
- package/build/src/utils/cropByObb.d.ts.map +1 -1
- package/build/src/utils/cropByObb.js +4 -3
- package/build/src/utils/cropByObb.js.map +1 -1
- package/build/src/web/WebKYCEntry.d.ts +1 -1
- package/build/src/web/WebKYCEntry.d.ts.map +1 -1
- package/build/src/web/WebKYCEntry.js +105 -239
- package/build/src/web/WebKYCEntry.js.map +1 -1
- package/package.json +3 -1
- package/src/components/EnhancedCameraView.tsx +116 -42
- package/src/components/EnhancedCameraView.web.tsx +98 -338
- package/src/components/KYCElements/CameraCapture.tsx +1 -1
- package/src/components/KYCElements/CountrySelection.tsx +60 -240
- package/src/components/KYCElements/CountrySelectionTemplate.tsx +7 -20
- package/src/components/KYCElements/IDCardCapture.tsx +672 -151
- package/src/components/KYCElements/VerificationProgressTemplate.tsx +112 -65
- package/src/components/OverLay/type.ts +1 -1
- package/src/components/WebBarcodeScanner.tsx +273 -0
- package/src/config/KYCConfigs.ts +2 -2
- package/src/config/region_mapping.json +0 -14
- package/src/modules/api/CardAuthentification.ts +41 -56
- package/src/modules/api/KYCService.ts +236 -82
- package/src/types/KYC.types.ts +1 -0
- package/src/utils/aamvaParser.ts +102 -0
- package/src/utils/cropByObb.ts +5 -3
- package/src/web/WebKYCEntry.tsx +125 -301
|
@@ -54,7 +54,7 @@ export const basicKYCConfig = {
|
|
|
54
54
|
validation: { required: true },
|
|
55
55
|
cameraConfig: {
|
|
56
56
|
aspectRatio: 4 / 3,
|
|
57
|
-
quality:
|
|
57
|
+
quality: 1,
|
|
58
58
|
flashMode: 'auto',
|
|
59
59
|
cameraType: 'back',
|
|
60
60
|
allowRetake: true,
|
|
@@ -76,7 +76,7 @@ export const basicKYCConfig = {
|
|
|
76
76
|
validation: { required: true },
|
|
77
77
|
cameraConfig: {
|
|
78
78
|
aspectRatio: 4 / 3,
|
|
79
|
-
quality:
|
|
79
|
+
quality: 1,
|
|
80
80
|
flashMode: 'auto',
|
|
81
81
|
cameraType: 'back',
|
|
82
82
|
allowRetake: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KYCConfigs.js","sourceRoot":"","sources":["../../../src/config/KYCConfigs.ts"],"names":[],"mappings":"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","sourcesContent":["import { KYCFlowConfig } from '../types/KYC.types';\n\n// Configuration pour KYC basique (passeport + selfie)\nexport const basicKYCConfig: KYCFlowConfig = {\n id: 'basic_kyc',\n name: 'Vérification d\\'identité basique',\n description: 'Vérification avec passeport et selfie',\n version: '1.0.0',\n elements: [\n {\n id: 'country_selection',\n type: 'country_selection',\n title: 'Quel pays a émis votre document ?',\n description: 'Cela nous aide à vérifier vos documents rapidement et en toute sécurité',\n isRequired: true,\n isVisible: true,\n order: 0,\n validation: { required: true },\n options: [\n { value: 'FR', label: 'France', icon: '🇫🇷' },\n { value: 'BE', label: 'Belgique', icon: '🇧🇪' },\n { value: 'LU', label: 'Luxembourg', icon: '🇱🇺' },\n { value: 'DE', label: 'Allemagne', icon: '🇩🇪' },\n { value: 'IT', label: 'Italie', icon: '🇮🇹' },\n { value: 'ES', label: 'Espagne', icon: '🇪🇸' },\n { value: 'PT', label: 'Portugal', icon: '🇵🇹' },\n { value: 'AT', label: 'Autriche', icon: '🇦🇹' },\n { value: 'CH', label: 'Suisse', icon: '🇨🇭' },\n { value: 'NL', label: 'Pays-Bas', icon: '🇳🇱' },\n { value: 'OTHER', label: 'Autre', icon: '🌍' },\n ],\n },\n {\n id: 'document_type',\n type: 'document_type_selection',\n title: 'Quel type de document utilisez-vous ?',\n description: 'Sélectionnez le type de document que vous allez présenter',\n isRequired: true,\n isVisible: true,\n order: 1,\n validation: { required: true },\n options: [\n { value: 'passport', label: 'Passeport', icon: '📘', description: 'Document de voyage officiel' },\n { value: 'id_card', label: 'Carte d\\'identité', icon: '🆔', description: 'Carte d\\'identité nationale' },\n { value: 'drivers_license', label: 'Permis de conduire', icon: '🚗', description: 'Permis de conduire valide' },\n ],\n },\n {\n id: 'document_front',\n type: 'camera_capture',\n title: 'Prenez une photo du recto de votre document',\n description: 'Placez votre document dans le cadre et assurez-vous qu\\'il soit bien visible',\n isRequired: true,\n isVisible: true,\n order: 2,\n validation: { required: true },\n cameraConfig: {\n aspectRatio: 4/3,\n quality: 0.8,\n flashMode: 'auto',\n cameraType: 'back',\n allowRetake: true,\n maxRetakes: 3,\n overlay: {\n showGuide: true,\n guideText: 'Placez votre document dans le cadre',\n }\n },\n },\n {\n id: 'document_back',\n type: 'camera_capture',\n title: 'Prenez une photo du verso de votre document',\n description: 'Placez votre document dans le cadre et assurez-vous qu\\'il soit bien visible',\n isRequired: true,\n isVisible: true,\n order: 3,\n validation: { required: true },\n cameraConfig: {\n aspectRatio: 4/3,\n quality: 0.8,\n flashMode: 'auto',\n cameraType: 'back',\n allowRetake: true,\n maxRetakes: 3,\n overlay: {\n showGuide: true,\n guideText: 'Placez votre document dans le cadre',\n }\n },\n },\n {\n id: 'selfie',\n type: 'selfie_capture',\n title: 'Prenez une selfie',\n description: 'Placez votre visage dans le cercle et regardez la caméra',\n isRequired: true,\n isVisible: true,\n order: 4,\n validation: { required: true },\n cameraConfig: {\n aspectRatio: 1,\n quality: 0.8,\n flashMode: 'off',\n cameraType: 'front',\n allowRetake: true,\n maxRetakes: 3,\n overlay: {\n showGuide: true,\n guideText: 'Placez votre visage dans le cercle',\n }\n },\n },\n {\n id: 'verification',\n type: 'verification',\n title: 'Vérification en cours',\n description: 'Nous vérifions vos informations, veuillez patienter...',\n isRequired: true,\n isVisible: true,\n order: 5,\n },\n {\n id: 'completion',\n type: 'completion',\n title: 'Vérification terminée !',\n description: 'Votre identité a été vérifiée avec succès',\n isRequired: true,\n isVisible: true,\n order: 6,\n },\n ],\n settings: {\n allowBackNavigation: true,\n showProgressBar: true,\n showStepNumbers: true,\n autoAdvance: false,\n enableRetry: true,\n maxRetries: 3,\n },\n styling: {\n primaryColor: '#4CAF50',\n secondaryColor: '#2196F3',\n backgroundColor: '#f8f9fa',\n textColor: '#333',\n borderRadius: 8,\n },\n localization: {\n language: 'fr',\n translations: {},\n },\n};\n\n// Configuration pour KYC avancé (avec upload de fichiers)\nexport const advancedKYCConfig: KYCFlowConfig = {\n id: 'advanced_kyc',\n name: 'Vérification d\\'identité avancée',\n description: 'Vérification avec documents supplémentaires',\n version: '1.0.0',\n elements: [\n {\n id: 'country_selection',\n type: 'country_selection',\n title: 'Quel pays a émis votre document ?',\n description: 'Cela nous aide à vérifier vos documents rapidement et en toute sécurité',\n isRequired: true,\n isVisible: true,\n order: 0,\n validation: { required: true },\n },\n {\n id: 'document_type',\n type: 'document_type_selection',\n title: 'Quel type de document utilisez-vous ?',\n description: 'Sélectionnez le type de document que vous allez présenter',\n isRequired: true,\n isVisible: true,\n order: 1,\n validation: { required: true },\n },\n {\n id: 'document_front',\n type: 'camera_capture',\n title: 'Prenez une photo du recto de votre document',\n description: 'Placez votre document dans le cadre et assurez-vous qu\\'il soit bien visible',\n isRequired: true,\n isVisible: true,\n order: 2,\n validation: { required: true },\n cameraConfig: {\n aspectRatio: 4/3,\n quality: 0.8,\n flashMode: 'auto',\n cameraType: 'back',\n allowRetake: true,\n maxRetakes: 3,\n },\n },\n {\n id: 'document_back',\n type: 'camera_capture',\n title: 'Prenez une photo du verso de votre document',\n description: 'Placez votre document dans le cadre et assurez-vous qu\\'il soit bien visible',\n isRequired: true,\n isVisible: true,\n order: 3,\n validation: { required: true },\n cameraConfig: {\n aspectRatio: 4/3,\n quality: 0.8,\n flashMode: 'auto',\n cameraType: 'back',\n allowRetake: true,\n maxRetakes: 3,\n },\n },\n {\n id: 'additional_documents',\n type: 'file_upload',\n title: 'Documents supplémentaires (optionnel)',\n description: 'Vous pouvez ajouter des documents supplémentaires pour accélérer la vérification',\n isRequired: false,\n isVisible: true,\n order: 4,\n uploadConfig: {\n allowedTypes: ['image/*', 'application/pdf'],\n maxFiles: 5,\n maxFileSize: 10 * 1024 * 1024, // 10MB\n allowMultiple: true,\n },\n },\n {\n id: 'selfie',\n type: 'selfie_capture',\n title: 'Prenez une selfie',\n description: 'Placez votre visage dans le cercle et regardez la caméra',\n isRequired: true,\n isVisible: true,\n order: 5,\n validation: { required: true },\n cameraConfig: {\n aspectRatio: 1,\n quality: 0.8,\n flashMode: 'off',\n cameraType: 'front',\n allowRetake: true,\n maxRetakes: 3,\n },\n },\n {\n id: 'verification',\n type: 'verification',\n title: 'Vérification en cours',\n description: 'Nous vérifions vos informations, veuillez patienter...',\n isRequired: true,\n isVisible: true,\n order: 6,\n },\n {\n id: 'completion',\n type: 'completion',\n title: 'Vérification terminée !',\n description: 'Votre identité a été vérifiée avec succès',\n isRequired: true,\n isVisible: true,\n order: 7,\n },\n ],\n settings: {\n allowBackNavigation: true,\n showProgressBar: true,\n showStepNumbers: true,\n autoAdvance: false,\n enableRetry: true,\n maxRetries: 3,\n },\n styling: {\n primaryColor: '#2196F3',\n secondaryColor: '#4CAF50',\n backgroundColor: '#f8f9fa',\n textColor: '#333',\n borderRadius: 8,\n },\n localization: {\n language: 'fr',\n translations: {},\n },\n};\n\n// Configuration pour KYC rapide (selfie uniquement)\nexport const quickKYCConfig: KYCFlowConfig = {\n id: 'quick_kyc',\n name: 'Vérification rapide',\n description: 'Vérification avec selfie uniquement',\n version: '1.0.0',\n elements: [\n {\n id: 'selfie',\n type: 'selfie_capture',\n title: 'Prenez une selfie',\n description: 'Placez votre visage dans le cercle et regardez la caméra',\n isRequired: true,\n isVisible: true,\n order: 0,\n validation: { required: true },\n cameraConfig: {\n aspectRatio: 1,\n quality: 0.8,\n flashMode: 'off',\n cameraType: 'front',\n allowRetake: true,\n maxRetakes: 3,\n },\n },\n {\n id: 'verification',\n type: 'verification',\n title: 'Vérification en cours',\n description: 'Nous vérifions votre identité, veuillez patienter...',\n isRequired: true,\n isVisible: true,\n order: 1,\n },\n {\n id: 'completion',\n type: 'completion',\n title: 'Vérification terminée !',\n description: 'Votre identité a été vérifiée avec succès',\n isRequired: true,\n isVisible: true,\n order: 2,\n },\n ],\n settings: {\n allowBackNavigation: false,\n showProgressBar: true,\n showStepNumbers: true,\n autoAdvance: true,\n enableRetry: true,\n maxRetries: 3,\n },\n styling: {\n primaryColor: '#FF9800',\n secondaryColor: '#4CAF50',\n backgroundColor: '#f8f9fa',\n textColor: '#333',\n borderRadius: 8,\n },\n localization: {\n language: 'fr',\n translations: {},\n },\n};\n\n// Configuration pour KYC professionnel (avec documents multiples)\nexport const professionalKYCConfig: KYCFlowConfig = {\n id: 'professional_kyc',\n name: 'Vérification professionnelle',\n description: 'Vérification complète pour professionnels',\n version: '1.0.0',\n elements: [\n {\n id: 'country_selection',\n type: 'country_selection',\n title: 'Quel pays a émis votre document ?',\n description: 'Cela nous aide à vérifier vos documents rapidement et en toute sécurité',\n isRequired: true,\n isVisible: true,\n order: 0,\n validation: { required: true },\n },\n {\n id: 'document_type',\n type: 'document_type_selection',\n title: 'Quel type de document utilisez-vous ?',\n description: 'Sélectionnez le type de document que vous allez présenter',\n isRequired: true,\n isVisible: true,\n order: 1,\n validation: { required: true },\n },\n {\n id: 'document_front',\n type: 'camera_capture',\n title: 'Prenez une photo du recto de votre document',\n description: 'Placez votre document dans le cadre et assurez-vous qu\\'il soit bien visible',\n isRequired: true,\n isVisible: true,\n order: 2,\n validation: { required: true },\n cameraConfig: {\n aspectRatio: 4/3,\n quality: 0.9,\n flashMode: 'auto',\n cameraType: 'back',\n allowRetake: true,\n maxRetakes: 5,\n },\n },\n {\n id: 'document_back',\n type: 'camera_capture',\n title: 'Prenez une photo du verso de votre document',\n description: 'Placez votre document dans le cadre et assurez-vous qu\\'il soit bien visible',\n isRequired: true,\n isVisible: true,\n order: 3,\n validation: { required: true },\n cameraConfig: {\n aspectRatio: 4/3,\n quality: 0.9,\n flashMode: 'auto',\n cameraType: 'back',\n allowRetake: true,\n maxRetakes: 5,\n },\n },\n {\n id: 'selfie',\n type: 'selfie_capture',\n title: 'Prenez une selfie',\n description: 'Placez votre visage dans le cercle et regardez la caméra',\n isRequired: true,\n isVisible: true,\n order: 4,\n validation: { required: true },\n cameraConfig: {\n aspectRatio: 1,\n quality: 0.9,\n flashMode: 'off',\n cameraType: 'front',\n allowRetake: true,\n maxRetakes: 5,\n },\n },\n {\n id: 'additional_documents',\n type: 'file_upload',\n title: 'Documents professionnels',\n description: 'Ajoutez vos documents professionnels (justificatif de domicile, certificat de travail, etc.)',\n isRequired: true,\n isVisible: true,\n order: 5,\n uploadConfig: {\n allowedTypes: ['image/*', 'application/pdf'],\n maxFiles: 10,\n maxFileSize: 20 * 1024 * 1024, // 20MB\n allowMultiple: true,\n },\n },\n {\n id: 'verification',\n type: 'verification',\n title: 'Vérification en cours',\n description: 'Nous vérifions vos informations, veuillez patienter...',\n isRequired: true,\n isVisible: true,\n order: 6,\n },\n {\n id: 'completion',\n type: 'completion',\n title: 'Vérification terminée !',\n description: 'Votre identité a été vérifiée avec succès',\n isRequired: true,\n isVisible: true,\n order: 7,\n },\n ],\n settings: {\n allowBackNavigation: true,\n showProgressBar: true,\n showStepNumbers: true,\n autoAdvance: false,\n enableRetry: true,\n maxRetries: 5,\n },\n styling: {\n primaryColor: '#9C27B0',\n secondaryColor: '#4CAF50',\n backgroundColor: '#f8f9fa',\n textColor: '#333',\n borderRadius: 8,\n },\n localization: {\n language: 'fr',\n translations: {},\n },\n};\n\n// Fonction pour créer une configuration personnalisée\nexport const createCustomKYCConfig = (\n id: string,\n name: string,\n description: string,\n elements: any[],\n settings?: any,\n styling?: any\n): KYCFlowConfig => {\n return {\n id,\n name,\n description,\n version: '1.0.0',\n elements: elements.sort((a, b) => a.order - b.order),\n settings: {\n allowBackNavigation: true,\n showProgressBar: true,\n showStepNumbers: true,\n autoAdvance: false,\n enableRetry: true,\n maxRetries: 3,\n ...settings,\n },\n styling: {\n primaryColor: '#4CAF50',\n secondaryColor: '#2196F3',\n backgroundColor: '#f8f9fa',\n textColor: '#333',\n borderRadius: 8,\n ...styling,\n },\n localization: {\n language: 'fr',\n translations: {},\n },\n };\n}; "]}
|
|
1
|
+
{"version":3,"file":"KYCConfigs.js","sourceRoot":"","sources":["../../../src/config/KYCConfigs.ts"],"names":[],"mappings":"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","sourcesContent":["import { KYCFlowConfig } from '../types/KYC.types';\n\n// Configuration pour KYC basique (passeport + selfie)\nexport const basicKYCConfig: KYCFlowConfig = {\n id: 'basic_kyc',\n name: 'Vérification d\\'identité basique',\n description: 'Vérification avec passeport et selfie',\n version: '1.0.0',\n elements: [\n {\n id: 'country_selection',\n type: 'country_selection',\n title: 'Quel pays a émis votre document ?',\n description: 'Cela nous aide à vérifier vos documents rapidement et en toute sécurité',\n isRequired: true,\n isVisible: true,\n order: 0,\n validation: { required: true },\n options: [\n { value: 'FR', label: 'France', icon: '🇫🇷' },\n { value: 'BE', label: 'Belgique', icon: '🇧🇪' },\n { value: 'LU', label: 'Luxembourg', icon: '🇱🇺' },\n { value: 'DE', label: 'Allemagne', icon: '🇩🇪' },\n { value: 'IT', label: 'Italie', icon: '🇮🇹' },\n { value: 'ES', label: 'Espagne', icon: '🇪🇸' },\n { value: 'PT', label: 'Portugal', icon: '🇵🇹' },\n { value: 'AT', label: 'Autriche', icon: '🇦🇹' },\n { value: 'CH', label: 'Suisse', icon: '🇨🇭' },\n { value: 'NL', label: 'Pays-Bas', icon: '🇳🇱' },\n { value: 'OTHER', label: 'Autre', icon: '🌍' },\n ],\n },\n {\n id: 'document_type',\n type: 'document_type_selection',\n title: 'Quel type de document utilisez-vous ?',\n description: 'Sélectionnez le type de document que vous allez présenter',\n isRequired: true,\n isVisible: true,\n order: 1,\n validation: { required: true },\n options: [\n { value: 'passport', label: 'Passeport', icon: '📘', description: 'Document de voyage officiel' },\n { value: 'id_card', label: 'Carte d\\'identité', icon: '🆔', description: 'Carte d\\'identité nationale' },\n { value: 'drivers_license', label: 'Permis de conduire', icon: '🚗', description: 'Permis de conduire valide' },\n ],\n },\n {\n id: 'document_front',\n type: 'camera_capture',\n title: 'Prenez une photo du recto de votre document',\n description: 'Placez votre document dans le cadre et assurez-vous qu\\'il soit bien visible',\n isRequired: true,\n isVisible: true,\n order: 2,\n validation: { required: true },\n cameraConfig: {\n aspectRatio: 4/3,\n quality: 1,\n flashMode: 'auto',\n cameraType: 'back',\n allowRetake: true,\n maxRetakes: 3,\n overlay: {\n showGuide: true,\n guideText: 'Placez votre document dans le cadre',\n }\n },\n },\n {\n id: 'document_back',\n type: 'camera_capture',\n title: 'Prenez une photo du verso de votre document',\n description: 'Placez votre document dans le cadre et assurez-vous qu\\'il soit bien visible',\n isRequired: true,\n isVisible: true,\n order: 3,\n validation: { required: true },\n cameraConfig: {\n aspectRatio: 4/3,\n quality: 1,\n flashMode: 'auto',\n cameraType: 'back',\n allowRetake: true,\n maxRetakes: 3,\n overlay: {\n showGuide: true,\n guideText: 'Placez votre document dans le cadre',\n }\n },\n },\n {\n id: 'selfie',\n type: 'selfie_capture',\n title: 'Prenez une selfie',\n description: 'Placez votre visage dans le cercle et regardez la caméra',\n isRequired: true,\n isVisible: true,\n order: 4,\n validation: { required: true },\n cameraConfig: {\n aspectRatio: 1,\n quality: 0.8,\n flashMode: 'off',\n cameraType: 'front',\n allowRetake: true,\n maxRetakes: 3,\n overlay: {\n showGuide: true,\n guideText: 'Placez votre visage dans le cercle',\n }\n },\n },\n {\n id: 'verification',\n type: 'verification',\n title: 'Vérification en cours',\n description: 'Nous vérifions vos informations, veuillez patienter...',\n isRequired: true,\n isVisible: true,\n order: 5,\n },\n {\n id: 'completion',\n type: 'completion',\n title: 'Vérification terminée !',\n description: 'Votre identité a été vérifiée avec succès',\n isRequired: true,\n isVisible: true,\n order: 6,\n },\n ],\n settings: {\n allowBackNavigation: true,\n showProgressBar: true,\n showStepNumbers: true,\n autoAdvance: false,\n enableRetry: true,\n maxRetries: 3,\n },\n styling: {\n primaryColor: '#4CAF50',\n secondaryColor: '#2196F3',\n backgroundColor: '#f8f9fa',\n textColor: '#333',\n borderRadius: 8,\n },\n localization: {\n language: 'fr',\n translations: {},\n },\n};\n\n// Configuration pour KYC avancé (avec upload de fichiers)\nexport const advancedKYCConfig: KYCFlowConfig = {\n id: 'advanced_kyc',\n name: 'Vérification d\\'identité avancée',\n description: 'Vérification avec documents supplémentaires',\n version: '1.0.0',\n elements: [\n {\n id: 'country_selection',\n type: 'country_selection',\n title: 'Quel pays a émis votre document ?',\n description: 'Cela nous aide à vérifier vos documents rapidement et en toute sécurité',\n isRequired: true,\n isVisible: true,\n order: 0,\n validation: { required: true },\n },\n {\n id: 'document_type',\n type: 'document_type_selection',\n title: 'Quel type de document utilisez-vous ?',\n description: 'Sélectionnez le type de document que vous allez présenter',\n isRequired: true,\n isVisible: true,\n order: 1,\n validation: { required: true },\n },\n {\n id: 'document_front',\n type: 'camera_capture',\n title: 'Prenez une photo du recto de votre document',\n description: 'Placez votre document dans le cadre et assurez-vous qu\\'il soit bien visible',\n isRequired: true,\n isVisible: true,\n order: 2,\n validation: { required: true },\n cameraConfig: {\n aspectRatio: 4/3,\n quality: 0.8,\n flashMode: 'auto',\n cameraType: 'back',\n allowRetake: true,\n maxRetakes: 3,\n },\n },\n {\n id: 'document_back',\n type: 'camera_capture',\n title: 'Prenez une photo du verso de votre document',\n description: 'Placez votre document dans le cadre et assurez-vous qu\\'il soit bien visible',\n isRequired: true,\n isVisible: true,\n order: 3,\n validation: { required: true },\n cameraConfig: {\n aspectRatio: 4/3,\n quality: 0.8,\n flashMode: 'auto',\n cameraType: 'back',\n allowRetake: true,\n maxRetakes: 3,\n },\n },\n {\n id: 'additional_documents',\n type: 'file_upload',\n title: 'Documents supplémentaires (optionnel)',\n description: 'Vous pouvez ajouter des documents supplémentaires pour accélérer la vérification',\n isRequired: false,\n isVisible: true,\n order: 4,\n uploadConfig: {\n allowedTypes: ['image/*', 'application/pdf'],\n maxFiles: 5,\n maxFileSize: 10 * 1024 * 1024, // 10MB\n allowMultiple: true,\n },\n },\n {\n id: 'selfie',\n type: 'selfie_capture',\n title: 'Prenez une selfie',\n description: 'Placez votre visage dans le cercle et regardez la caméra',\n isRequired: true,\n isVisible: true,\n order: 5,\n validation: { required: true },\n cameraConfig: {\n aspectRatio: 1,\n quality: 0.8,\n flashMode: 'off',\n cameraType: 'front',\n allowRetake: true,\n maxRetakes: 3,\n },\n },\n {\n id: 'verification',\n type: 'verification',\n title: 'Vérification en cours',\n description: 'Nous vérifions vos informations, veuillez patienter...',\n isRequired: true,\n isVisible: true,\n order: 6,\n },\n {\n id: 'completion',\n type: 'completion',\n title: 'Vérification terminée !',\n description: 'Votre identité a été vérifiée avec succès',\n isRequired: true,\n isVisible: true,\n order: 7,\n },\n ],\n settings: {\n allowBackNavigation: true,\n showProgressBar: true,\n showStepNumbers: true,\n autoAdvance: false,\n enableRetry: true,\n maxRetries: 3,\n },\n styling: {\n primaryColor: '#2196F3',\n secondaryColor: '#4CAF50',\n backgroundColor: '#f8f9fa',\n textColor: '#333',\n borderRadius: 8,\n },\n localization: {\n language: 'fr',\n translations: {},\n },\n};\n\n// Configuration pour KYC rapide (selfie uniquement)\nexport const quickKYCConfig: KYCFlowConfig = {\n id: 'quick_kyc',\n name: 'Vérification rapide',\n description: 'Vérification avec selfie uniquement',\n version: '1.0.0',\n elements: [\n {\n id: 'selfie',\n type: 'selfie_capture',\n title: 'Prenez une selfie',\n description: 'Placez votre visage dans le cercle et regardez la caméra',\n isRequired: true,\n isVisible: true,\n order: 0,\n validation: { required: true },\n cameraConfig: {\n aspectRatio: 1,\n quality: 0.8,\n flashMode: 'off',\n cameraType: 'front',\n allowRetake: true,\n maxRetakes: 3,\n },\n },\n {\n id: 'verification',\n type: 'verification',\n title: 'Vérification en cours',\n description: 'Nous vérifions votre identité, veuillez patienter...',\n isRequired: true,\n isVisible: true,\n order: 1,\n },\n {\n id: 'completion',\n type: 'completion',\n title: 'Vérification terminée !',\n description: 'Votre identité a été vérifiée avec succès',\n isRequired: true,\n isVisible: true,\n order: 2,\n },\n ],\n settings: {\n allowBackNavigation: false,\n showProgressBar: true,\n showStepNumbers: true,\n autoAdvance: true,\n enableRetry: true,\n maxRetries: 3,\n },\n styling: {\n primaryColor: '#FF9800',\n secondaryColor: '#4CAF50',\n backgroundColor: '#f8f9fa',\n textColor: '#333',\n borderRadius: 8,\n },\n localization: {\n language: 'fr',\n translations: {},\n },\n};\n\n// Configuration pour KYC professionnel (avec documents multiples)\nexport const professionalKYCConfig: KYCFlowConfig = {\n id: 'professional_kyc',\n name: 'Vérification professionnelle',\n description: 'Vérification complète pour professionnels',\n version: '1.0.0',\n elements: [\n {\n id: 'country_selection',\n type: 'country_selection',\n title: 'Quel pays a émis votre document ?',\n description: 'Cela nous aide à vérifier vos documents rapidement et en toute sécurité',\n isRequired: true,\n isVisible: true,\n order: 0,\n validation: { required: true },\n },\n {\n id: 'document_type',\n type: 'document_type_selection',\n title: 'Quel type de document utilisez-vous ?',\n description: 'Sélectionnez le type de document que vous allez présenter',\n isRequired: true,\n isVisible: true,\n order: 1,\n validation: { required: true },\n },\n {\n id: 'document_front',\n type: 'camera_capture',\n title: 'Prenez une photo du recto de votre document',\n description: 'Placez votre document dans le cadre et assurez-vous qu\\'il soit bien visible',\n isRequired: true,\n isVisible: true,\n order: 2,\n validation: { required: true },\n cameraConfig: {\n aspectRatio: 4/3,\n quality: 0.9,\n flashMode: 'auto',\n cameraType: 'back',\n allowRetake: true,\n maxRetakes: 5,\n },\n },\n {\n id: 'document_back',\n type: 'camera_capture',\n title: 'Prenez une photo du verso de votre document',\n description: 'Placez votre document dans le cadre et assurez-vous qu\\'il soit bien visible',\n isRequired: true,\n isVisible: true,\n order: 3,\n validation: { required: true },\n cameraConfig: {\n aspectRatio: 4/3,\n quality: 0.9,\n flashMode: 'auto',\n cameraType: 'back',\n allowRetake: true,\n maxRetakes: 5,\n },\n },\n {\n id: 'selfie',\n type: 'selfie_capture',\n title: 'Prenez une selfie',\n description: 'Placez votre visage dans le cercle et regardez la caméra',\n isRequired: true,\n isVisible: true,\n order: 4,\n validation: { required: true },\n cameraConfig: {\n aspectRatio: 1,\n quality: 0.9,\n flashMode: 'off',\n cameraType: 'front',\n allowRetake: true,\n maxRetakes: 5,\n },\n },\n {\n id: 'additional_documents',\n type: 'file_upload',\n title: 'Documents professionnels',\n description: 'Ajoutez vos documents professionnels (justificatif de domicile, certificat de travail, etc.)',\n isRequired: true,\n isVisible: true,\n order: 5,\n uploadConfig: {\n allowedTypes: ['image/*', 'application/pdf'],\n maxFiles: 10,\n maxFileSize: 20 * 1024 * 1024, // 20MB\n allowMultiple: true,\n },\n },\n {\n id: 'verification',\n type: 'verification',\n title: 'Vérification en cours',\n description: 'Nous vérifions vos informations, veuillez patienter...',\n isRequired: true,\n isVisible: true,\n order: 6,\n },\n {\n id: 'completion',\n type: 'completion',\n title: 'Vérification terminée !',\n description: 'Votre identité a été vérifiée avec succès',\n isRequired: true,\n isVisible: true,\n order: 7,\n },\n ],\n settings: {\n allowBackNavigation: true,\n showProgressBar: true,\n showStepNumbers: true,\n autoAdvance: false,\n enableRetry: true,\n maxRetries: 5,\n },\n styling: {\n primaryColor: '#9C27B0',\n secondaryColor: '#4CAF50',\n backgroundColor: '#f8f9fa',\n textColor: '#333',\n borderRadius: 8,\n },\n localization: {\n language: 'fr',\n translations: {},\n },\n};\n\n// Fonction pour créer une configuration personnalisée\nexport const createCustomKYCConfig = (\n id: string,\n name: string,\n description: string,\n elements: any[],\n settings?: any,\n styling?: any\n): KYCFlowConfig => {\n return {\n id,\n name,\n description,\n version: '1.0.0',\n elements: elements.sort((a, b) => a.order - b.order),\n settings: {\n allowBackNavigation: true,\n showProgressBar: true,\n showStepNumbers: true,\n autoAdvance: false,\n enableRetry: true,\n maxRetries: 3,\n ...settings,\n },\n styling: {\n primaryColor: '#4CAF50',\n secondaryColor: '#2196F3',\n backgroundColor: '#f8f9fa',\n textColor: '#333',\n borderRadius: 8,\n ...styling,\n },\n localization: {\n language: 'fr',\n translations: {},\n },\n };\n}; "]}
|
|
@@ -275,20 +275,6 @@
|
|
|
275
275
|
"py_file": "ontario_front.py",
|
|
276
276
|
"keys_found": null
|
|
277
277
|
}
|
|
278
|
-
],
|
|
279
|
-
"Quebec": [
|
|
280
|
-
{
|
|
281
|
-
"py_file": "quebec_01_back.py",
|
|
282
|
-
"back": "2D_barcode"
|
|
283
|
-
},
|
|
284
|
-
{
|
|
285
|
-
"py_file": "quebec_01_front.py",
|
|
286
|
-
"keys_found": null
|
|
287
|
-
},
|
|
288
|
-
{
|
|
289
|
-
"py_file": "quebec_02_front.py",
|
|
290
|
-
"front": "2D_barcode"
|
|
291
|
-
}
|
|
292
278
|
]
|
|
293
279
|
},
|
|
294
280
|
"identity_card": {
|
|
@@ -27,6 +27,7 @@ export declare function frontVerification(result: {
|
|
|
27
27
|
templatePath?: string;
|
|
28
28
|
mrzType?: string;
|
|
29
29
|
issuingSubdivision?: string;
|
|
30
|
+
clientSideBarcodeData?: string;
|
|
30
31
|
}, env?: KycEnvironment): Promise<{
|
|
31
32
|
barcode?: {
|
|
32
33
|
barcode_data: string;
|
|
@@ -77,6 +78,7 @@ export declare function backVerification(result: {
|
|
|
77
78
|
templateResponse?: ApiVerificationResponse;
|
|
78
79
|
issuingSubdivision?: string;
|
|
79
80
|
frontTemplatePath?: string;
|
|
81
|
+
clientSideBarcodeData?: string;
|
|
80
82
|
}, env?: KycEnvironment): Promise<any>;
|
|
81
83
|
export declare function checkTemplateType(result: {
|
|
82
84
|
path?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CardAuthentification.d.ts","sourceRoot":"","sources":["../../../../src/modules/api/CardAuthentification.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0B,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAIvD,UAAU,WAAW;IACjB,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,UAAU,uBAAuB;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,wBAAsB,iBAAiB,CACnC,MAAM,EAAE;IACJ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,EAAE;QAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC5D,oBAAoB,EAAE,MAAM,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"CardAuthentification.d.ts","sourceRoot":"","sources":["../../../../src/modules/api/CardAuthentification.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0B,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAIvD,UAAU,WAAW;IACjB,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,UAAU,uBAAuB;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,wBAAsB,iBAAiB,CACnC,MAAM,EAAE;IACJ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,EAAE;QAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC5D,oBAAoB,EAAE,MAAM,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qBAAqB,CAAC,EAAE,MAAM,CAAA;CACjC,EACD,GAAG,GAAE,cAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aArBzB,OAAO;cACN,OAAO;aACR,GAAG,EAAE;eACH,WAAW,EAAE,GAAG,GAAG;oBACd,MAAM;YACd,GAAG;GA2Kd;AAED,wBAAsB,gBAAgB,CAClC,MAAM,EAAE;IACJ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,EAAE;QAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC5D,oBAAoB,EAAE,MAAM,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,uBAAuB,CAAC;IAC3C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qBAAqB,CAAC,EAAE,MAAM,CAAA;CACjC,EACD,GAAG,GAAE,cAA6B,gBAqNrC;AAED,wBAAsB,iBAAiB,CACnC,MAAM,EAAE;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC/B,EACD,GAAG,GAAE,cAA6B,gBA0ErC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import kycService, { authentification, errorMessage, truncateFields } from "./KYCService";
|
|
2
2
|
import { cropByObb, getObbConfidence, OBB_CONFIDENCE_THRESHOLD } from "../../utils/cropByObb";
|
|
3
3
|
import { logger } from "../../utils/logger";
|
|
4
|
-
import { countryData } from "../../config/countriesData";
|
|
5
4
|
export async function frontVerification(result, env = 'PRODUCTION') {
|
|
6
5
|
try {
|
|
7
6
|
console.log("Front verification START", JSON.stringify({ result }, null, 2));
|
|
@@ -86,13 +85,17 @@ export async function frontVerification(result, env = 'PRODUCTION') {
|
|
|
86
85
|
token: token,
|
|
87
86
|
postfix: result.currentSide || 'front'
|
|
88
87
|
});
|
|
89
|
-
if (documentData && documentData.data && Object.keys(documentData.data).length === 0) {
|
|
88
|
+
if (documentData?.no_data || (documentData && documentData.data && Object.keys(documentData.data).length === 0)) {
|
|
90
89
|
logger.log("Front OCR Extraction Failed: Backend returned empty data dict.");
|
|
91
|
-
|
|
90
|
+
if (!hasBarcode && !hasMrz) {
|
|
91
|
+
throw new Error("Impossible de lire les informations du document. L'image est peut-être floue ou mal éclairée.");
|
|
92
|
+
}
|
|
92
93
|
}
|
|
93
94
|
}
|
|
94
95
|
catch (err) {
|
|
95
|
-
|
|
96
|
+
const errorMsg = typeof err === 'object' ? JSON.stringify(err) : err;
|
|
97
|
+
logger.log("Front OCR Extraction Error:", errorMsg);
|
|
98
|
+
throw new Error(err?.message || "Impossible d'extraire les données. Veuillez reprendre la photo.");
|
|
96
99
|
}
|
|
97
100
|
}
|
|
98
101
|
if (hasMrz) {
|
|
@@ -118,19 +121,6 @@ export async function frontVerification(result, env = 'PRODUCTION') {
|
|
|
118
121
|
throw new Error(err?.message || "Erreur lors de l'extraction MRZ. Veuillez reprendre la photo.");
|
|
119
122
|
}
|
|
120
123
|
}
|
|
121
|
-
if (hasBarcode) {
|
|
122
|
-
try {
|
|
123
|
-
logger.log("Tentative d'extraction barcode (Front)");
|
|
124
|
-
barcode = await kycService.extractBarcode({ fileUri: result.path || '', token: token }, env);
|
|
125
|
-
}
|
|
126
|
-
catch (e) {
|
|
127
|
-
logger.log("Front Barcode Extraction Error:", e?.message);
|
|
128
|
-
// If it exclusively has a barcode (no MRZ) and barcode fails, throw.
|
|
129
|
-
if (!mrz) {
|
|
130
|
-
throw new Error(`Lecture Barcode échouée: ${e?.message || 'Veuillez réessayer'}`);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
124
|
return {
|
|
135
125
|
...detected,
|
|
136
126
|
croppedBase64,
|
|
@@ -229,11 +219,11 @@ export async function backVerification(result, env = 'PRODUCTION') {
|
|
|
229
219
|
}
|
|
230
220
|
const activeTemplatePath = templateResponse.template_path || result.templatePath || '';
|
|
231
221
|
if (activeTemplatePath) {
|
|
232
|
-
|
|
222
|
+
// Note: Make sure ISO_TO_COUNTRY_NAME is properly defined or imported if needed here
|
|
233
223
|
const hasCodeMatch = activeTemplatePath.includes(`_${result.code}_`);
|
|
234
|
-
|
|
235
|
-
if (!hasCodeMatch && !
|
|
236
|
-
logger.log(`Template mismatch! Expected: ${result.code}
|
|
224
|
+
// Assuming you have countryData available, otherwise you can rely just on CodeMatch
|
|
225
|
+
if (!hasCodeMatch && !activeTemplatePath.toLowerCase().includes(result.code.toLowerCase())) {
|
|
226
|
+
logger.log(`Template mismatch! Expected region: ${result.code}, Detected: ${activeTemplatePath}`);
|
|
237
227
|
throw new Error(`Le document ne correspond pas au pays sélectionné (${result.code}).`);
|
|
238
228
|
}
|
|
239
229
|
}
|
|
@@ -243,7 +233,7 @@ export async function backVerification(result, env = 'PRODUCTION') {
|
|
|
243
233
|
const backPy = activeTemplatePath.split("/").pop()?.replace(/\.(jpg|png)$/i, ".py");
|
|
244
234
|
if (frontPy && backPy) {
|
|
245
235
|
logger.log(`Validating Front (${frontPy}) vs Back (${backPy}) for region ${result.code}`);
|
|
246
|
-
const isCanadianSubRegionDoc = result.code === 'CA' && ['
|
|
236
|
+
const isCanadianSubRegionDoc = result.code === 'CA' && ['pr'].includes(result.selectedDocumentType);
|
|
247
237
|
const safeSubRegion = isCanadianSubRegionDoc ? (result.issuingSubdivision || "") : "";
|
|
248
238
|
const matchValidation = await kycService.validateBackTemplate({
|
|
249
239
|
region: result.code,
|
|
@@ -279,14 +269,19 @@ export async function backVerification(result, env = 'PRODUCTION') {
|
|
|
279
269
|
token: token,
|
|
280
270
|
postfix: result.currentSide || 'back'
|
|
281
271
|
});
|
|
282
|
-
if (documentData
|
|
283
|
-
logger.log("Back OCR Extraction
|
|
284
|
-
|
|
272
|
+
if (documentData?.no_data || (documentData?.data && Object.keys(documentData.data).length === 0)) {
|
|
273
|
+
logger.log("Back OCR Extraction: No text data found (Normal for barcode-only sides).");
|
|
274
|
+
if (!hasBarcode && !hasMrz) {
|
|
275
|
+
throw new Error("Impossible de lire les informations du document. L'image est peut-être floue ou mal éclairée.");
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
extractionResult.documentData = documentData;
|
|
285
280
|
}
|
|
286
|
-
extractionResult.documentData = documentData;
|
|
287
281
|
}
|
|
288
282
|
catch (err) {
|
|
289
|
-
|
|
283
|
+
const errorMsg = typeof err === 'object' ? JSON.stringify(err) : err;
|
|
284
|
+
logger.log("Back OCR Extraction Error:", errorMsg);
|
|
290
285
|
throw new Error(err?.message || "Impossible d'extraire les données. Veuillez reprendre la photo.");
|
|
291
286
|
}
|
|
292
287
|
}
|
|
@@ -313,18 +308,6 @@ export async function backVerification(result, env = 'PRODUCTION') {
|
|
|
313
308
|
throw new Error(`Lecture MRZ invalide: ${mrzError?.message || 'Veuillez nettoyer l\'objectif et réessayer'}`);
|
|
314
309
|
}
|
|
315
310
|
}
|
|
316
|
-
if (hasBarcode) {
|
|
317
|
-
try {
|
|
318
|
-
logger.log("Tentative d'extraction barcode (Back)");
|
|
319
|
-
const barcode = await kycService.extractBarcode({ fileUri: result.path, token: token }, env);
|
|
320
|
-
extractionResult.barcode = barcode;
|
|
321
|
-
}
|
|
322
|
-
catch (e) {
|
|
323
|
-
if (!extractionResult.mrz) {
|
|
324
|
-
throw new Error(`Lecture Barcode échouée: ${e?.message}`);
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
311
|
let bbox;
|
|
329
312
|
let croppedBase64;
|
|
330
313
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CardAuthentification.js","sourceRoot":"","sources":["../../../../src/modules/api/CardAuthentification.ts"],"names":[],"mappings":"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","sourcesContent":["import kycService, { authentification, errorMessage, truncateFields } from \"./KYCService\";\nimport { cropByObb, getObbConfidence, OBB_CONFIDENCE_THRESHOLD } from \"../../utils/cropByObb\";\nimport { GovernmentDocumentType, IBbox } from \"../../types/KYC.types\";\nimport { KycEnvironment } from \"../../types/env.types\";\nimport { logger } from \"../../utils/logger\";\nimport { countryData } from \"../../config/countriesData\";\n\ninterface CardObbData {\n obb: number[][];\n confidence: number;\n card_in_frame?: boolean;\n cropped_sides?: string[];\n}\n\ninterface ApiVerificationResponse {\n result?: boolean;\n success?: boolean;\n detail?: any[];\n card_obb?: CardObbData[] | any;\n template_path?: string;\n Error?: any;\n [key: string]: any;\n}\n\nexport async function frontVerification(\n result: {\n path?: string,\n regionMapping: { authMethod: string[], mrzTypes: string[] },\n selectedDocumentType: string,\n code: string,\n currentSide: string,\n templatePath?: string,\n mrzType?: string,\n issuingSubdivision?: string\n },\n env: KycEnvironment = 'PRODUCTION'\n) {\n try {\n console.log(\"Front verification START\", JSON.stringify({ result }, null, 2));\n logger.log(\"Front verification\", JSON.stringify({ result }, null, 2));\n \n const authMethods = Array.isArray(result.regionMapping?.authMethod)\n ? result.regionMapping.authMethod.map(m => String(m).toUpperCase())\n : [];\n \n const hasMrz = authMethods.some(m => m.includes('MRZ'));\n const hasBarcode = authMethods.some(m => m.includes('BARCODE') || m.includes('2D'));\n \n if (env === 'SANDBOX') {\n console.log(\"SANDBOX mode: Skipping AI verification for front document\");\n const mockBbox: IBbox = { minX: 400, minY: 800, width: 2200, height: 1400 };\n const mockResponse = {\n result: true,\n detail: [{ confidence: 0.95 }],\n card_obb: [{\n obb: [[400, 800], [2600, 800], [2600, 2200], [400, 2200]],\n confidence: 0.95,\n card_in_frame: true,\n cropped_sides: []\n }],\n bbox: mockBbox,\n ...(hasMrz ? {\n mrz: {\n success: true,\n parsed_data: { status: 'SUCCESS', document_type: result.selectedDocumentType, mrz_type: result.mrzType || 'TD1' }\n }\n } : {}),\n ...(hasBarcode ? {\n barcode: { barcode_data: 'SANDBOX_MOCK_BARCODE' }\n } : {})\n };\n return mockResponse;\n }\n \n const token = await authentification();\n const detected = await kycService.detectFaceOnId(\n result?.path || '', token, result?.selectedDocumentType || '', env\n ) as ApiVerificationResponse;\n \n if (!detected.result) {\n throw new Error('Aucun visage détecté sur la carte. Veuillez reprendre.');\n }\n \n const cardData = detected.card_obb && Array.isArray(detected.card_obb) && detected.card_obb.length > 0\n ? detected.card_obb[0]\n : null;\n \n let points: number[][] | null = null;\n console.log(points)\n let isCardInFrame = true;\n let hasCroppedSides = false;\n \n if (cardData) {\n points = cardData.obb;\n if (typeof cardData.card_in_frame !== 'undefined') {\n isCardInFrame = cardData.card_in_frame === true;\n hasCroppedSides = Array.isArray(cardData.cropped_sides) && cardData.cropped_sides.length > 0;\n }\n }\n \n if (!isCardInFrame || hasCroppedSides) {\n logger.log(`Front Framing failed. Cropped sides detected by backend.`);\n throw new Error('CARD_NOT_FULLY_IN_FRAME');\n }\n \n const obbConfidence = getObbConfidence(detected.card_obb);\n if (obbConfidence !== null && obbConfidence < OBB_CONFIDENCE_THRESHOLD) {\n throw new Error('Carte non entièrement visible. Positionnez toute la carte dans le cadre.');\n }\n \n let croppedBase64: string | undefined;\n let bbox: IBbox | undefined;\n let mrz: any | undefined;\n let barcode: any | undefined;\n let documentData: any | undefined;\n \n try {\n const crop = await cropByObb(result?.path || '', detected.card_obb);\n croppedBase64 = crop.base64;\n bbox = crop.bbox;\n } catch { }\n\n if (result.code === 'CA') {\n try {\n logger.log(\"Tentative d'extraction OCR (Front) - Canada Only\");\n documentData = await kycService.extractDocumentInformation({\n fileUri: result.path || '',\n docType: result.selectedDocumentType,\n docRegion: result.code,\n templatePath: result.templatePath || '',\n issuingSubdivision: result.issuingSubdivision,\n token: token,\n postfix: result.currentSide || 'front'\n });\n\n if (documentData && documentData.data && Object.keys(documentData.data).length === 0) {\n logger.log(\"Front OCR Extraction Failed: Backend returned empty data dict.\");\n throw new Error(\"Impossible de lire les informations du document. L'image est peut-être floue ou mal éclairée.\");\n }\n } catch (err: any) {\n logger.log(\"Front OCR Extraction Error:\", err?.message || err);\n }\n }\n \n if (hasMrz) {\n try {\n logger.log(\"Tentative d'extraction MRZ (Front)\");\n const mrzResponse = await kycService.extractMrzText(\n {\n fileUri: result.path || '',\n docType: result?.selectedDocumentType || '',\n docRegion: result?.code || \"\",\n postfix: result?.currentSide || 'front',\n token: token,\n template_path: result?.templatePath || '',\n mrz_type: result?.mrzType || 'TD1'\n },\n env\n );\n \n mrz = typeof mrzResponse === 'string' ? JSON.parse(mrzResponse) : mrzResponse;\n \n if (mrz?.parsed_data?.status === 'FAILURE' || mrz?.success === false) {\n logger.log(\"Front MRZ Extraction Failed:\", mrz?.parsed_data?.status_message);\n throw new Error(`MRZ illisible: ${mrz?.parsed_data?.status_message || 'Veuillez nettoyer l\\'objectif et réessayer'}`);\n }\n } catch (err: any) {\n logger.log(\"MRZ Extraction Error:\", err);\n throw new Error(err?.message || \"Erreur lors de l'extraction MRZ. Veuillez reprendre la photo.\");\n }\n }\n\n if (hasBarcode) {\n try {\n logger.log(\"Tentative d'extraction barcode (Front)\");\n barcode = await kycService.extractBarcode({ fileUri: result.path || '', token: token }, env);\n } catch (e: any) {\n logger.log(\"Front Barcode Extraction Error:\", e?.message);\n // If it exclusively has a barcode (no MRZ) and barcode fails, throw.\n if (!mrz) {\n throw new Error(`Lecture Barcode échouée: ${e?.message || 'Veuillez réessayer'}`);\n }\n }\n }\n \n return { \n ...detected, \n croppedBase64, \n bbox, \n ...(mrz ? { mrz } : {}), \n ...(barcode ? { barcode } : {}),\n ...(documentData ? { documentData } : {}) \n };\n \n } catch (e: any) {\n logger.log('Error front verification:', e?.message);\n throw new Error(e?.message || 'Erreur de détection du visage');\n }\n}\n\nexport async function backVerification(\n result: {\n path?: string,\n regionMapping: { authMethod: string[], mrzTypes: string[] },\n selectedDocumentType: string,\n code: string,\n currentSide: string,\n templatePath?: string,\n mrzType?: string,\n templateResponse?: ApiVerificationResponse,\n issuingSubdivision?: string, // Capture province/state\n frontTemplatePath?: string // Capture the front template to compare against\n },\n env: KycEnvironment = 'PRODUCTION'\n) {\n try {\n if (!result.path) throw new Error('No path provided');\n logger.log(\"result.regionMapping\", result.regionMapping, result.currentSide, result.code);\n \n const authMethods = Array.isArray(result.regionMapping?.authMethod)\n ? result.regionMapping.authMethod.map(m => String(m).toUpperCase())\n : [];\n \n const hasMrz = authMethods.some(m => m.includes('MRZ'));\n const hasBarcode = authMethods.some(m => m.includes('BARCODE') || m.includes('2D'));\n \n if (env === 'SANDBOX') {\n console.log(\"SANDBOX mode: Skipping AI verification for back document\");\n const mockBbox: IBbox = { minX: 400, minY: 800, width: 2200, height: 1400 };\n const mockCardObb = [{\n obb: [[400, 800], [2600, 800], [2600, 2200], [400, 2200]],\n confidence: 0.95,\n card_in_frame: true,\n cropped_sides: []\n }];\n\n if (hasMrz) {\n return {\n success: true,\n mrz: {\n success: true,\n parsed_data: { status: 'SUCCESS', document_type: result.selectedDocumentType, mrz_type: result.mrzType || 'TD1' }\n },\n bbox: mockBbox,\n card_obb: mockCardObb\n };\n } else if (hasBarcode) {\n return {\n success: true,\n barcode: { barcode_data: 'SANDBOX_MOCK_BARCODE' },\n bbox: mockBbox,\n card_obb: mockCardObb\n };\n }\n return { success: true, bbox: mockBbox, card_obb: mockCardObb };\n }\n \n const token = await authentification();\n logger.log(\"1. Checking template and framing for back document...\");\n \n const templateResponse: ApiVerificationResponse = result.templateResponse ||\n await kycService.checkTemplateType({\n fileUri: result.path,\n docType: result.selectedDocumentType as any,\n docRegion: result.code,\n postfix: 'back',\n token: token,\n }, env);\n \n if (templateResponse.success === false || templateResponse.Error) {\n throw new Error('Impossible de lire le document. Veuillez vous rapprocher et stabiliser la caméra.');\n }\n \n const cardData = templateResponse?.card_obb && Array.isArray(templateResponse.card_obb) && templateResponse.card_obb.length > 0\n ? templateResponse.card_obb[0]\n : null;\n \n if (!cardData) throw new Error('CARD_NOT_FULLY_IN_FRAME');\n \n let points: number[][] | null = null;\n console.log(points);\n let isCardInFrame = false;\n let hasCroppedSides = true;\n \n if (cardData.obb) {\n points = cardData.obb;\n if (typeof cardData.card_in_frame !== 'undefined') {\n isCardInFrame = cardData.card_in_frame === true;\n hasCroppedSides = Array.isArray(cardData.cropped_sides) && cardData.cropped_sides.length > 0;\n }\n } else if (Array.isArray(cardData) && Array.isArray(cardData[0])) {\n points = cardData[0];\n isCardInFrame = true;\n hasCroppedSides = false;\n }\n \n if (!isCardInFrame || hasCroppedSides) {\n logger.log(`Back Framing failed. Backend reported document out of bounds.`);\n throw new Error('CARD_NOT_FULLY_IN_FRAME');\n }\n \n const obbConf = getObbConfidence(templateResponse?.card_obb);\n if (obbConf !== null && obbConf < OBB_CONFIDENCE_THRESHOLD) {\n throw new Error('Carte non entièrement visible. Positionnez toute la carte dans le cadre.');\n }\n \n const activeTemplatePath = templateResponse.template_path || result.templatePath || '';\n \n if (activeTemplatePath) {\n const expectedCountryName = countryData[result.code]?.name_en || '';\n const hasCodeMatch = activeTemplatePath.includes(`_${result.code}_`);\n const hasNameMatch = expectedCountryName && activeTemplatePath.toLowerCase().includes(expectedCountryName.toLowerCase());\n \n if (!hasCodeMatch && !hasNameMatch) {\n logger.log(`Template mismatch! Expected: ${result.code} (${expectedCountryName}), Detected: ${activeTemplatePath}`);\n throw new Error(`Le document ne correspond pas au pays sélectionné (${result.code}).`);\n }\n }\n\n if (result.frontTemplatePath && activeTemplatePath) {\n try {\n const frontPy = result.frontTemplatePath.split(\"/\").pop()?.replace(/\\.(jpg|png)$/i, \".py\");\n const backPy = activeTemplatePath.split(\"/\").pop()?.replace(/\\.(jpg|png)$/i, \".py\");\n \n if (frontPy && backPy) {\n logger.log(`Validating Front (${frontPy}) vs Back (${backPy}) for region ${result.code}`);\n \n const isCanadianSubRegionDoc = result.code === 'CA' && ['xxx'].includes(result.selectedDocumentType);\n const safeSubRegion = isCanadianSubRegionDoc ? (result.issuingSubdivision || \"\") : \"\";\n\n const matchValidation = await kycService.validateBackTemplate({\n region: result.code,\n docType: result.selectedDocumentType,\n frontTemplateName: frontPy,\n backTemplateName: backPy,\n subRegion: safeSubRegion,\n token: token\n }, env);\n \n if (!matchValidation || matchValidation.is_match === false) {\n logger.log(`Front/Back Mismatch: ${matchValidation?.status_message}`);\n throw new Error(`Le verso ne correspond pas au recto fourni. Vous avez scanné un document différent.`);\n }\n }\n } catch (err: any) {\n if (err?.message?.includes('ne correspond pas')) throw err;\n logger.log(\"Template matching validation skipped/failed internally:\", err?.message);\n }\n }\n \n logger.log(\"Framing, Country, and Match verified successfully. Proceeding to Data Extraction.\");\n let extractionResult: any = {};\n\n if (result.code === 'CA') {\n try {\n logger.log(\"Tentative d'extraction OCR (Back) - Canada Only\");\n const documentData = await kycService.extractDocumentInformation({\n fileUri: result.path!,\n docType: result.selectedDocumentType,\n docRegion: result.code,\n templatePath: activeTemplatePath,\n issuingSubdivision: result.issuingSubdivision,\n token: token,\n postfix: result.currentSide || 'back'\n });\n \n if (documentData && documentData.data && Object.keys(documentData.data).length === 0) {\n logger.log(\"Back OCR Extraction Failed: Backend returned empty data dict.\");\n throw new Error(\"Impossible de lire les informations du document. L'image est peut-être floue ou mal éclairée.\");\n }\n \n extractionResult.documentData = documentData;\n } catch (err: any) {\n logger.log(\"Back OCR Extraction Error:\", err?.message || err);\n throw new Error(err?.message || \"Impossible d'extraire les données. Veuillez reprendre la photo.\");\n }\n }\n \n if (hasMrz) {\n try {\n logger.log(\"Tentative d'extraction MRZ (Back)\");\n const mrzResponse = await kycService.extractMrzText({\n fileUri: result.path!,\n docType: result?.selectedDocumentType || '',\n docRegion: result?.code || '',\n postfix: result?.currentSide || 'back',\n token: token,\n template_path: activeTemplatePath,\n mrz_type: result?.mrzType || 'TD1'\n }, env);\n \n const mrz = typeof mrzResponse === 'string' ? JSON.parse(mrzResponse) : mrzResponse;\n \n if (mrz?.parsed_data?.status === 'FAILURE' || mrz?.success === false) {\n throw new Error(mrz?.parsed_data?.status_message || 'Lecture MRZ échouée');\n }\n extractionResult.mrz = mrz; \n } catch (mrzError: any) {\n logger.log(`MRZ échoué: ${mrzError?.message}`);\n throw new Error(`Lecture MRZ invalide: ${mrzError?.message || 'Veuillez nettoyer l\\'objectif et réessayer'}`);\n }\n }\n \n if (hasBarcode) {\n try {\n logger.log(\"Tentative d'extraction barcode (Back)\");\n const barcode = await kycService.extractBarcode({ fileUri: result.path!, token: token }, env);\n extractionResult.barcode = barcode;\n } catch (e: any) {\n if (!extractionResult.mrz) {\n throw new Error(`Lecture Barcode échouée: ${e?.message}`);\n }\n }\n }\n \n let bbox: IBbox | undefined;\n let croppedBase64: string | undefined;\n try {\n const crop = await cropByObb(result?.path || '', templateResponse.card_obb);\n bbox = crop.bbox;\n croppedBase64 = crop.base64;\n } catch { }\n \n return {\n success: true,\n ...extractionResult,\n bbox,\n croppedBase64,\n card_obb: templateResponse.card_obb\n };\n \n } catch (e: any) {\n if (e?.message === 'CARD_NOT_FULLY_IN_FRAME') throw e;\n throw new Error(e?.message || 'Erreur de détection des données');\n }\n}\n\nexport async function checkTemplateType(\n result: { \n path?: string, \n docType: string, \n docRegion: string, \n postfix: string,\n issuingSubdivision?: string \n },\n env: KycEnvironment = 'PRODUCTION'\n) {\n try {\n if (env === 'SANDBOX') {\n return {\n template_path: `templates/${result.docType}_${result.docRegion}_${result.postfix}.jpg`,\n card_obb: [{\n obb: [[400, 800], [2600, 800], [2600, 2200], [400, 2200]],\n confidence: 0.95,\n card_in_frame: true,\n cropped_sides: []\n }]\n };\n }\n \n const token = await authentification();\n const isCanada = result.docRegion?.toUpperCase() === 'CA';\n \n const templateType = await kycService.checkTemplateType({\n fileUri: result.path || '',\n docType: result?.docType as GovernmentDocumentType,\n docRegion: result?.docRegion || \"\",\n postfix: result?.postfix,\n token: token,\n issuingSubdivision: isCanada ? result.issuingSubdivision : undefined\n }, env);\n \n if (templateType.success === false || templateType.Error) {\n logger.log(\"Backend returned an error:\", templateType.Error);\n throw new Error('Impossible de lire le document. Veuillez vous rapprocher et stabiliser la caméra.');\n }\n \n const cardData = templateType.card_obb && Array.isArray(templateType.card_obb) && templateType.card_obb.length > 0\n ? templateType.card_obb[0]\n : null;\n \n if (!cardData) throw new Error('CARD_NOT_FULLY_IN_FRAME');\n \n let points: number[][] | null = null;\n console.log(points)\n let isCardInFrame = false;\n let hasCroppedSides = true;\n \n if (cardData.obb) {\n points = cardData.obb;\n if (typeof cardData.card_in_frame !== 'undefined') {\n isCardInFrame = cardData.card_in_frame === true;\n hasCroppedSides = Array.isArray(cardData.cropped_sides) && cardData.cropped_sides.length > 0;\n }\n } else if (Array.isArray(cardData) && Array.isArray(cardData[0])) {\n points = cardData[0];\n isCardInFrame = true;\n hasCroppedSides = false;\n }\n \n if (!isCardInFrame || hasCroppedSides) {\n logger.log(`Template Framing failed by backend check.`);\n throw new Error('CARD_NOT_FULLY_IN_FRAME');\n }\n \n const LPIPS_THRESHOLD = 0.75;\n if (templateType.lpips_score !== undefined && templateType.lpips_score > LPIPS_THRESHOLD) {\n logger.log(`Country Mismatch! LPIPS: ${templateType.lpips_score}`);\n throw new Error(`Le document présenté ne correspond pas au pays sélectionné (${result.docRegion}).`);\n }\n \n logger.log(\"templateType result\", JSON.stringify(truncateFields(templateType), null, 2));\n return templateType;\n \n } catch (e: any) {\n logger.log('Error checking template type:', JSON.stringify(errorMessage(e), null, 2));\n if (e?.message === 'CARD_NOT_FULLY_IN_FRAME' || e?.message?.includes('ne correspond pas')) throw e;\n throw new Error(e?.message || 'Erreur de vérification du template');\n }\n}"]}
|
|
1
|
+
{"version":3,"file":"CardAuthentification.js","sourceRoot":"","sources":["../../../../src/modules/api/CardAuthentification.ts"],"names":[],"mappings":"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","sourcesContent":["import kycService, { authentification, errorMessage, truncateFields } from \"./KYCService\";\nimport { cropByObb, getObbConfidence, OBB_CONFIDENCE_THRESHOLD } from \"../../utils/cropByObb\";\nimport { GovernmentDocumentType, IBbox } from \"../../types/KYC.types\";\nimport { KycEnvironment } from \"../../types/env.types\";\nimport { logger } from \"../../utils/logger\";\n// import { countryData } from \"../../config/countriesData\";\n\ninterface CardObbData {\n obb: number[][];\n confidence: number;\n card_in_frame?: boolean;\n cropped_sides?: string[];\n}\n\ninterface ApiVerificationResponse {\n result?: boolean;\n success?: boolean;\n detail?: any[];\n card_obb?: CardObbData[] | any;\n template_path?: string;\n Error?: any;\n [key: string]: any;\n}\n\nexport async function frontVerification(\n result: {\n path?: string,\n regionMapping: { authMethod: string[], mrzTypes: string[] },\n selectedDocumentType: string,\n code: string,\n currentSide: string,\n templatePath?: string,\n mrzType?: string,\n issuingSubdivision?: string,\n clientSideBarcodeData?: string // 🚨 ADDED: Accept the SDK barcode data\n },\n env: KycEnvironment = 'PRODUCTION'\n) {\n try {\n console.log(\"Front verification START\", JSON.stringify({ result }, null, 2));\n logger.log(\"Front verification\", JSON.stringify({ result }, null, 2));\n \n const authMethods = Array.isArray(result.regionMapping?.authMethod)\n ? result.regionMapping.authMethod.map(m => String(m).toUpperCase())\n : [];\n \n const hasMrz = authMethods.some(m => m.includes('MRZ'));\n const hasBarcode = authMethods.some(m => m.includes('BARCODE') || m.includes('2D'));\n \n if (env === 'SANDBOX') {\n console.log(\"SANDBOX mode: Skipping AI verification for front document\");\n const mockBbox: IBbox = { minX: 400, minY: 800, width: 2200, height: 1400 };\n const mockResponse = {\n result: true,\n detail: [{ confidence: 0.95 }],\n card_obb: [{\n obb: [[400, 800], [2600, 800], [2600, 2200], [400, 2200]],\n confidence: 0.95,\n card_in_frame: true,\n cropped_sides: []\n }],\n bbox: mockBbox,\n ...(hasMrz ? {\n mrz: {\n success: true,\n parsed_data: { status: 'SUCCESS', document_type: result.selectedDocumentType, mrz_type: result.mrzType || 'TD1' }\n }\n } : {}),\n ...(hasBarcode ? {\n barcode: { barcode_data: 'SANDBOX_MOCK_BARCODE' }\n } : {})\n };\n return mockResponse;\n }\n \n const token = await authentification();\n const detected = await kycService.detectFaceOnId(\n result?.path || '', token, result?.selectedDocumentType || '', env\n ) as ApiVerificationResponse;\n \n if (!detected.result) {\n throw new Error('Aucun visage détecté sur la carte. Veuillez reprendre.');\n }\n \n const cardData = detected.card_obb && Array.isArray(detected.card_obb) && detected.card_obb.length > 0\n ? detected.card_obb[0]\n : null;\n \n let points: number[][] | null = null;\n console.log(points);\n let isCardInFrame = true;\n let hasCroppedSides = false;\n \n if (cardData) {\n points = cardData.obb;\n if (typeof cardData.card_in_frame !== 'undefined') {\n isCardInFrame = cardData.card_in_frame === true;\n hasCroppedSides = Array.isArray(cardData.cropped_sides) && cardData.cropped_sides.length > 0;\n }\n }\n \n if (!isCardInFrame || hasCroppedSides) {\n logger.log(`Front Framing failed. Cropped sides detected by backend.`);\n throw new Error('CARD_NOT_FULLY_IN_FRAME');\n }\n \n const obbConfidence = getObbConfidence(detected.card_obb);\n if (obbConfidence !== null && obbConfidence < OBB_CONFIDENCE_THRESHOLD) {\n throw new Error('Carte non entièrement visible. Positionnez toute la carte dans le cadre.');\n }\n \n let croppedBase64: string | undefined;\n let bbox: IBbox | undefined;\n let mrz: any | undefined;\n let barcode: any | undefined;\n let documentData: any | undefined;\n \n try {\n const crop = await cropByObb(result?.path || '', detected.card_obb);\n croppedBase64 = crop.base64;\n bbox = crop.bbox;\n } catch { }\n \n if (result.code === 'CA') {\n try {\n logger.log(\"Tentative d'extraction OCR (Front) - Canada Only\");\n documentData = await kycService.extractDocumentInformation({\n fileUri: result.path || '',\n docType: result.selectedDocumentType,\n docRegion: result.code,\n templatePath: result.templatePath || '',\n issuingSubdivision: result.issuingSubdivision,\n token: token,\n postfix: result.currentSide || 'front'\n });\n if (documentData?.no_data || (documentData && documentData.data && Object.keys(documentData.data).length === 0)) {\n logger.log(\"Front OCR Extraction Failed: Backend returned empty data dict.\");\n if (!hasBarcode && !hasMrz) {\n throw new Error(\"Impossible de lire les informations du document. L'image est peut-être floue ou mal éclairée.\");\n }\n }\n } catch (err: any) {\n const errorMsg = typeof err === 'object' ? JSON.stringify(err) : err;\n logger.log(\"Front OCR Extraction Error:\", errorMsg);\n throw new Error(err?.message || \"Impossible d'extraire les données. Veuillez reprendre la photo.\");\n }\n }\n \n if (hasMrz) {\n try {\n logger.log(\"Tentative d'extraction MRZ (Front)\");\n const mrzResponse = await kycService.extractMrzText(\n {\n fileUri: result.path || '',\n docType: result?.selectedDocumentType || '',\n docRegion: result?.code || \"\",\n postfix: result?.currentSide || 'front',\n token: token,\n template_path: result?.templatePath || '',\n mrz_type: result?.mrzType || 'TD1'\n },\n env\n );\n \n mrz = typeof mrzResponse === 'string' ? JSON.parse(mrzResponse) : mrzResponse;\n \n if (mrz?.parsed_data?.status === 'FAILURE' || mrz?.success === false) {\n logger.log(\"Front MRZ Extraction Failed:\", mrz?.parsed_data?.status_message);\n throw new Error(`MRZ illisible: ${mrz?.parsed_data?.status_message || 'Veuillez nettoyer l\\'objectif et réessayer'}`);\n }\n } catch (err: any) {\n logger.log(\"MRZ Extraction Error:\", err);\n throw new Error(err?.message || \"Erreur lors de l'extraction MRZ. Veuillez reprendre la photo.\");\n }\n }\n \n\n \n return {\n ...detected,\n croppedBase64,\n bbox,\n ...(mrz ? { mrz } : {}),\n ...(barcode ? { barcode } : {}),\n ...(documentData ? { documentData } : {})\n };\n \n } catch (e: any) {\n logger.log('Error front verification:', e?.message);\n throw new Error(e?.message || 'Erreur de détection du visage');\n }\n}\n\nexport async function backVerification(\n result: {\n path?: string,\n regionMapping: { authMethod: string[], mrzTypes: string[] },\n selectedDocumentType: string,\n code: string,\n currentSide: string,\n templatePath?: string,\n mrzType?: string,\n templateResponse?: ApiVerificationResponse,\n issuingSubdivision?: string,\n frontTemplatePath?: string,\n clientSideBarcodeData?: string // 🚨 ADDED: Accept the SDK barcode data\n },\n env: KycEnvironment = 'PRODUCTION'\n) {\n try {\n if (!result.path) throw new Error('No path provided');\n logger.log(\"result.regionMapping\", result.regionMapping, result.currentSide, result.code);\n \n const authMethods = Array.isArray(result.regionMapping?.authMethod)\n ? result.regionMapping.authMethod.map(m => String(m).toUpperCase())\n : [];\n \n const hasMrz = authMethods.some(m => m.includes('MRZ'));\n const hasBarcode = authMethods.some(m => m.includes('BARCODE') || m.includes('2D'));\n \n if (env === 'SANDBOX') {\n console.log(\"SANDBOX mode: Skipping AI verification for back document\");\n const mockBbox: IBbox = { minX: 400, minY: 800, width: 2200, height: 1400 };\n const mockCardObb = [{\n obb: [[400, 800], [2600, 800], [2600, 2200], [400, 2200]],\n confidence: 0.95,\n card_in_frame: true,\n cropped_sides: []\n }];\n \n if (hasMrz) {\n return {\n success: true,\n mrz: {\n success: true,\n parsed_data: { status: 'SUCCESS', document_type: result.selectedDocumentType, mrz_type: result.mrzType || 'TD1' }\n },\n bbox: mockBbox,\n card_obb: mockCardObb\n };\n } else if (hasBarcode) {\n return {\n success: true,\n barcode: { barcode_data: 'SANDBOX_MOCK_BARCODE' },\n bbox: mockBbox,\n card_obb: mockCardObb\n };\n }\n return { success: true, bbox: mockBbox, card_obb: mockCardObb };\n }\n \n const token = await authentification();\n logger.log(\"1. Checking template and framing for back document...\");\n \n const templateResponse: ApiVerificationResponse = result.templateResponse ||\n await kycService.checkTemplateType({\n fileUri: result.path,\n docType: result.selectedDocumentType as any,\n docRegion: result.code,\n postfix: 'back',\n token: token,\n }, env);\n \n if (templateResponse.success === false || templateResponse.Error) {\n throw new Error('Impossible de lire le document. Veuillez vous rapprocher et stabiliser la caméra.');\n }\n \n const cardData = templateResponse?.card_obb && Array.isArray(templateResponse.card_obb) && templateResponse.card_obb.length > 0\n ? templateResponse.card_obb[0]\n : null;\n \n if (!cardData) throw new Error('CARD_NOT_FULLY_IN_FRAME');\n \n let points: number[][] | null = null;\n console.log(points);\n let isCardInFrame = false;\n let hasCroppedSides = true;\n \n if (cardData.obb) {\n points = cardData.obb;\n if (typeof cardData.card_in_frame !== 'undefined') {\n isCardInFrame = cardData.card_in_frame === true;\n hasCroppedSides = Array.isArray(cardData.cropped_sides) && cardData.cropped_sides.length > 0;\n }\n } else if (Array.isArray(cardData) && Array.isArray(cardData[0])) {\n points = cardData[0];\n isCardInFrame = true;\n hasCroppedSides = false;\n }\n \n if (!isCardInFrame || hasCroppedSides) {\n logger.log(`Back Framing failed. Backend reported document out of bounds.`);\n throw new Error('CARD_NOT_FULLY_IN_FRAME');\n }\n \n const obbConf = getObbConfidence(templateResponse?.card_obb);\n if (obbConf !== null && obbConf < OBB_CONFIDENCE_THRESHOLD) {\n throw new Error('Carte non entièrement visible. Positionnez toute la carte dans le cadre.');\n }\n \n const activeTemplatePath = templateResponse.template_path || result.templatePath || '';\n \n if (activeTemplatePath) {\n // Note: Make sure ISO_TO_COUNTRY_NAME is properly defined or imported if needed here\n const hasCodeMatch = activeTemplatePath.includes(`_${result.code}_`);\n // Assuming you have countryData available, otherwise you can rely just on CodeMatch\n if (!hasCodeMatch && !activeTemplatePath.toLowerCase().includes(result.code.toLowerCase())) {\n logger.log(`Template mismatch! Expected region: ${result.code}, Detected: ${activeTemplatePath}`);\n throw new Error(`Le document ne correspond pas au pays sélectionné (${result.code}).`);\n }\n }\n \n if (result.frontTemplatePath && activeTemplatePath) {\n try {\n const frontPy = result.frontTemplatePath.split(\"/\").pop()?.replace(/\\.(jpg|png)$/i, \".py\");\n const backPy = activeTemplatePath.split(\"/\").pop()?.replace(/\\.(jpg|png)$/i, \".py\");\n \n if (frontPy && backPy) {\n logger.log(`Validating Front (${frontPy}) vs Back (${backPy}) for region ${result.code}`);\n \n const isCanadianSubRegionDoc = result.code === 'CA' && ['pr'].includes(result.selectedDocumentType);\n const safeSubRegion = isCanadianSubRegionDoc ? (result.issuingSubdivision || \"\") : \"\";\n \n const matchValidation = await kycService.validateBackTemplate({\n region: result.code,\n docType: result.selectedDocumentType,\n frontTemplateName: frontPy,\n backTemplateName: backPy,\n subRegion: safeSubRegion,\n token: token\n }, env);\n \n if (!matchValidation || matchValidation.is_match === false) {\n logger.log(`Front/Back Mismatch: ${matchValidation?.status_message}`);\n throw new Error(`Le verso ne correspond pas au recto fourni. Vous avez scanné un document différent.`);\n }\n }\n } catch (err: any) {\n if (err?.message?.includes('ne correspond pas')) throw err;\n logger.log(\"Template matching validation skipped/failed internally:\", err?.message);\n }\n }\n \n logger.log(\"Framing, Country, and Match verified successfully. Proceeding to Data Extraction.\");\n let extractionResult: any = {};\n \n if (result.code === 'CA') {\n try {\n logger.log(\"Tentative d'extraction OCR (Back) - Canada Only\");\n const documentData = await kycService.extractDocumentInformation({\n fileUri: result.path!,\n docType: result.selectedDocumentType,\n docRegion: result.code,\n templatePath: activeTemplatePath,\n issuingSubdivision: result.issuingSubdivision,\n token: token,\n postfix: result.currentSide || 'back'\n });\n \n if (documentData?.no_data || (documentData?.data && Object.keys(documentData.data).length === 0)) {\n logger.log(\"Back OCR Extraction: No text data found (Normal for barcode-only sides).\");\n if (!hasBarcode && !hasMrz) {\n throw new Error(\"Impossible de lire les informations du document. L'image est peut-être floue ou mal éclairée.\");\n }\n } else {\n extractionResult.documentData = documentData;\n }\n } catch (err: any) {\n const errorMsg = typeof err === 'object' ? JSON.stringify(err) : err;\n logger.log(\"Back OCR Extraction Error:\", errorMsg);\n throw new Error(err?.message || \"Impossible d'extraire les données. Veuillez reprendre la photo.\");\n }\n }\n \n if (hasMrz) {\n try {\n logger.log(\"Tentative d'extraction MRZ (Back)\");\n const mrzResponse = await kycService.extractMrzText({\n fileUri: result.path!,\n docType: result?.selectedDocumentType || '',\n docRegion: result?.code || '',\n postfix: result?.currentSide || 'back',\n token: token,\n template_path: activeTemplatePath,\n mrz_type: result?.mrzType || 'TD1'\n }, env);\n \n const mrz = typeof mrzResponse === 'string' ? JSON.parse(mrzResponse) : mrzResponse;\n \n if (mrz?.parsed_data?.status === 'FAILURE' || mrz?.success === false) {\n throw new Error(mrz?.parsed_data?.status_message || 'Lecture MRZ échouée');\n }\n extractionResult.mrz = mrz;\n } catch (mrzError: any) {\n logger.log(`MRZ échoué: ${mrzError?.message}`);\n throw new Error(`Lecture MRZ invalide: ${mrzError?.message || 'Veuillez nettoyer l\\'objectif et réessayer'}`);\n }\n }\n \n \n let bbox: IBbox | undefined;\n let croppedBase64: string | undefined;\n try {\n const crop = await cropByObb(result?.path || '', templateResponse.card_obb);\n bbox = crop.bbox;\n croppedBase64 = crop.base64;\n } catch { }\n \n return {\n success: true,\n ...extractionResult,\n bbox,\n croppedBase64,\n card_obb: templateResponse.card_obb\n };\n \n } catch (e: any) {\n if (e?.message === 'CARD_NOT_FULLY_IN_FRAME') throw e;\n throw new Error(e?.message || 'Erreur de détection des données');\n }\n}\n\nexport async function checkTemplateType(\n result: { \n path?: string, \n docType: string, \n docRegion: string, \n postfix: string,\n issuingSubdivision?: string \n },\n env: KycEnvironment = 'PRODUCTION'\n) {\n try {\n if (env === 'SANDBOX') {\n return {\n template_path: `templates/${result.docType}_${result.docRegion}_${result.postfix}.jpg`,\n card_obb: [{\n obb: [[400, 800], [2600, 800], [2600, 2200], [400, 2200]],\n confidence: 0.95,\n card_in_frame: true,\n cropped_sides: []\n }]\n };\n }\n \n const token = await authentification();\n const isCanada = result.docRegion?.toUpperCase() === 'CA';\n \n const templateType = await kycService.checkTemplateType({\n fileUri: result.path || '',\n docType: result?.docType as GovernmentDocumentType,\n docRegion: result?.docRegion || \"\",\n postfix: result?.postfix,\n token: token,\n issuingSubdivision: isCanada ? result.issuingSubdivision : undefined\n }, env);\n \n if (templateType.success === false || templateType.Error) {\n logger.log(\"Backend returned an error:\", templateType.Error);\n throw new Error('Impossible de lire le document. Veuillez vous rapprocher et stabiliser la caméra.');\n }\n \n const cardData = templateType.card_obb && Array.isArray(templateType.card_obb) && templateType.card_obb.length > 0\n ? templateType.card_obb[0]\n : null;\n \n if (!cardData) throw new Error('CARD_NOT_FULLY_IN_FRAME');\n \n let points: number[][] | null = null;\n console.log(points)\n let isCardInFrame = false;\n let hasCroppedSides = true;\n \n if (cardData.obb) {\n points = cardData.obb;\n if (typeof cardData.card_in_frame !== 'undefined') {\n isCardInFrame = cardData.card_in_frame === true;\n hasCroppedSides = Array.isArray(cardData.cropped_sides) && cardData.cropped_sides.length > 0;\n }\n } else if (Array.isArray(cardData) && Array.isArray(cardData[0])) {\n points = cardData[0];\n isCardInFrame = true;\n hasCroppedSides = false;\n }\n \n if (!isCardInFrame || hasCroppedSides) {\n logger.log(`Template Framing failed by backend check.`);\n throw new Error('CARD_NOT_FULLY_IN_FRAME');\n }\n \n const LPIPS_THRESHOLD = 0.75;\n if (templateType.lpips_score !== undefined && templateType.lpips_score > LPIPS_THRESHOLD) {\n logger.log(`Country Mismatch! LPIPS: ${templateType.lpips_score}`);\n throw new Error(`Le document présenté ne correspond pas au pays sélectionné (${result.docRegion}).`);\n }\n \n logger.log(\"templateType result\", JSON.stringify(truncateFields(templateType), null, 2));\n return templateType;\n \n } catch (e: any) {\n logger.log('Error checking template type:', JSON.stringify(errorMessage(e), null, 2));\n if (e?.message === 'CARD_NOT_FULLY_IN_FRAME' || e?.message?.includes('ne correspond pas')) throw e;\n throw new Error(e?.message || 'Erreur de vérification du template');\n }\n}"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { OrientationVideoResponse } from '../../types/KYC.types';
|
|
2
|
-
import { SessionResponse,
|
|
2
|
+
import { SessionResponse, VerificationSessionRequest } from './types';
|
|
3
3
|
import { KycEnvironment } from '../../types/env.types';
|
|
4
4
|
export interface KYCRequest {
|
|
5
5
|
userId: string;
|
|
@@ -71,8 +71,13 @@ export declare class KYCService {
|
|
|
71
71
|
extractBarcode(params: {
|
|
72
72
|
fileUri: string;
|
|
73
73
|
token: string;
|
|
74
|
+
docType: string;
|
|
74
75
|
postfix?: string;
|
|
75
76
|
}, env?: KycEnvironment): Promise<any>;
|
|
77
|
+
formatBarcodeData(params: {
|
|
78
|
+
textInput: string;
|
|
79
|
+
token: string;
|
|
80
|
+
}, env?: KycEnvironment): Promise<any>;
|
|
76
81
|
extractMrzText(params: {
|
|
77
82
|
fileUri: string;
|
|
78
83
|
docType: string;
|
|
@@ -110,7 +115,7 @@ export declare class KYCService {
|
|
|
110
115
|
apiKey?: string;
|
|
111
116
|
token?: string;
|
|
112
117
|
}): Promise<unknown>;
|
|
113
|
-
getVerificationResult(session_id: string): Promise<
|
|
118
|
+
getVerificationResult(session_id: string, apiKey?: string): Promise<any>;
|
|
114
119
|
/** Send WhatsApp verification code. POST /api/v1/accounts/send-whatsapp-verification/ */
|
|
115
120
|
sendWhatsAppVerificationCode(sessionId: string, phoneNumber: string, auth?: {
|
|
116
121
|
apiKey?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KYCService.d.ts","sourceRoot":"","sources":["../../../../src/modules/api/KYCService.ts"],"names":[],"mappings":"AACA,OAAO,EAAyD,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAExH,OAAO,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"KYCService.d.ts","sourceRoot":"","sources":["../../../../src/modules/api/KYCService.ts"],"names":[],"mappings":"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"}
|