@sanctum-key/react-native-sdk 1.0.18 → 1.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/README.md +1 -1
  2. package/build/package.json +3 -2
  3. package/build/src/components/EnhancedCameraView.d.ts.map +1 -1
  4. package/build/src/components/EnhancedCameraView.js +19 -182
  5. package/build/src/components/EnhancedCameraView.js.map +1 -1
  6. package/build/src/components/KYCElements/IDCardCapture.d.ts.map +1 -1
  7. package/build/src/components/KYCElements/IDCardCapture.js +189 -191
  8. package/build/src/components/KYCElements/IDCardCapture.js.map +1 -1
  9. package/build/src/components/KYCElements/PhoneVerificationTemplate.d.ts.map +1 -1
  10. package/build/src/components/KYCElements/PhoneVerificationTemplate.js +0 -2
  11. package/build/src/components/KYCElements/PhoneVerificationTemplate.js.map +1 -1
  12. package/build/src/components/OverLay/IdCard.d.ts +6 -1
  13. package/build/src/components/OverLay/IdCard.d.ts.map +1 -1
  14. package/build/src/components/OverLay/IdCard.js +36 -34
  15. package/build/src/components/OverLay/IdCard.js.map +1 -1
  16. package/build/src/config/countriesData.d.ts.map +1 -1
  17. package/build/src/config/countriesData.js.map +1 -1
  18. package/build/src/modules/api/CardAuthentification.d.ts.map +1 -1
  19. package/build/src/modules/api/CardAuthentification.js +0 -1
  20. package/build/src/modules/api/CardAuthentification.js.map +1 -1
  21. package/build/src/modules/api/KYCService.d.ts.map +1 -1
  22. package/build/src/modules/api/KYCService.js +41 -24
  23. package/build/src/modules/api/KYCService.js.map +1 -1
  24. package/package.json +3 -2
  25. package/src/components/EnhancedCameraView.tsx +28 -219
  26. package/src/components/KYCElements/IDCardCapture.tsx +560 -581
  27. package/src/components/KYCElements/PhoneVerificationTemplate.tsx +0 -2
  28. package/src/components/OverLay/IdCard.tsx +48 -36
  29. package/src/config/countriesData.ts +0 -4
  30. package/src/modules/api/CardAuthentification.ts +0 -1
  31. package/src/modules/api/KYCService.ts +48 -29
@@ -1,35 +1,28 @@
1
- import React from 'react';
2
- import { Animated, Dimensions, Platform, SafeAreaView, StatusBar, StyleSheet, Text, View, } from 'react-native';
1
+ import React, { useState } from 'react';
2
+ import { Animated, Platform, SafeAreaView, StatusBar, StyleSheet, Text, View, useWindowDimensions, } from 'react-native';
3
3
  import Svg, { Defs, G, LinearGradient, Mask, Path, Rect, Stop, } from 'react-native-svg';
4
4
  import ScanningLine from '../Svgs/scanningLine';
5
5
  import StepOverlay from './StepOverlay';
6
- const { width: screenWidth, height: screenHeight } = Dimensions.get('window');
7
- const IdCardOverlay = ({ cornerOpacity, instructions, stepperProps, isSuccess, language = 'en',
8
- // Note: xMinPercent, yMinPercent, etc. are intentionally ignored below
9
- // to force a mathematically perfect ID card aspect ratio.
10
- }) => {
6
+ const IdCardOverlay = ({ cornerOpacity, instructions, stepperProps, isSuccess, language = 'en', xMin: xMinPercent = 5, xMax: xMaxPercent = 95, yMin: yMinPercent = 34, yMax: yMaxPercent = 66, }) => {
11
7
  const AnimatedG = Animated.createAnimatedComponent(G);
12
- // --- 🚨 GEOMETRY FIX: Perfect ID Card Ratio ---
13
- // Standard ISO ID-1 ratio is 1.586 (85.6mm / 53.98mm)
14
- const ID_ASPECT_RATIO = 1.586;
15
- // Set width to 85% of the screen, and calculate perfect height
16
- const boxWidth = screenWidth * 0.85;
17
- const boxHeight = boxWidth / ID_ASPECT_RATIO;
18
- // Center horizontally
19
- const xMin = (screenWidth - boxWidth) / 2;
20
- const xMax = xMin + boxWidth;
21
- // Center vertically (shifted slightly up for better holding ergonomics)
22
- const yMin = (screenHeight - boxHeight) * 0.42;
23
- const yMax = yMin + boxHeight;
8
+ // 1. Get baseline window dimensions (fallback for Native mobile)
9
+ const { width: windowWidth, height: windowHeight } = useWindowDimensions();
10
+ // 2. Track actual container dimensions (Crucial for Web Modals where window != container)
11
+ const [container, setContainer] = useState({ width: windowWidth, height: windowHeight });
12
+ // 3. Convert parent percentages to exact pixels within the container
13
+ const xMin = (container.width * xMinPercent) / 100;
14
+ const xMax = (container.width * xMaxPercent) / 100;
15
+ const yMin = (container.height * yMinPercent) / 100;
16
+ const yMax = (container.height * yMaxPercent) / 100;
17
+ const boxWidth = xMax - xMin;
18
+ const boxHeight = yMax - yMin;
24
19
  // --- Clean, Professional Copy Formatting ---
25
20
  const formatDocType = (type) => {
26
21
  if (!type)
27
22
  return 'document';
28
- // e.g., "identity_card" -> "identity card"
29
23
  return type.replace(/_/g, ' ').toLowerCase();
30
24
  };
31
25
  const getSideText = (side) => {
32
- // Using "recto/verso" for French as it is much more professional for documents
33
26
  if (side === 'front')
34
27
  return language === 'en' ? 'front' : 'recto';
35
28
  return language === 'en' ? 'back' : 'verso';
@@ -48,15 +41,25 @@ const IdCardOverlay = ({ cornerOpacity, instructions, stepperProps, isSuccess, l
48
41
  // --- SVG Constants ---
49
42
  const CORNER_SIZE = 40;
50
43
  const STROKE_WIDTH = 4;
51
- const BORDER_RADIUS = 16; // Reduced slightly for a tighter, more realistic card feel
52
- return (<View style={StyleSheet.absoluteFill} pointerEvents="box-none">
44
+ const BORDER_RADIUS = 16;
45
+ // Safety check to prevent SVG NaN errors during initial render
46
+ if (container.width === 0 || container.height === 0 || boxWidth <= 0) {
47
+ return <View style={StyleSheet.absoluteFill}/>;
48
+ }
49
+ return (<View style={StyleSheet.absoluteFill} pointerEvents="box-none" onLayout={(e) => {
50
+ // Update container dimensions only if they change to prevent loops
51
+ const { width, height } = e.nativeEvent.layout;
52
+ if (width !== container.width || height !== container.height) {
53
+ setContainer({ width, height });
54
+ }
55
+ }}>
53
56
  <StatusBar translucent backgroundColor="transparent" barStyle="light-content"/>
54
-
57
+
55
58
  {/* SVG Overlay */}
56
- <Svg width={screenWidth} height={screenHeight} style={styles.svg}>
59
+ <Svg width={container.width} height={container.height} style={styles.svg}>
57
60
  <Defs>
58
61
  <Mask id="cameraMask">
59
- <Rect x="0" y="0" width={screenWidth} height={screenHeight} fill="white"/>
62
+ <Rect x="0" y="0" width={container.width} height={container.height} fill="white"/>
60
63
  {/* Transparent Cutout */}
61
64
  <Rect x={xMin} y={yMin} width={boxWidth} height={boxHeight} rx={BORDER_RADIUS} ry={BORDER_RADIUS} fill="black"/>
62
65
  </Mask>
@@ -65,14 +68,13 @@ const IdCardOverlay = ({ cornerOpacity, instructions, stepperProps, isSuccess, l
65
68
  <Stop offset="100%" stopColor="#22C55E"/>
66
69
  </LinearGradient>
67
70
  </Defs>
68
-
71
+
69
72
  {/* Dim background */}
70
- <Rect x="0" y="0" width={screenWidth} height={screenHeight} fill="rgba(0,0,0,0.85)" mask="url(#cameraMask)"/>
71
-
73
+ <Rect x="0" y="0" width={container.width} height={container.height} fill="rgba(0,0,0,0.85)" mask="url(#cameraMask)"/>
74
+
72
75
  {/* Main Card Border */}
73
- <Rect x={xMin} y={yMin} width={boxWidth} height={boxHeight} rx={BORDER_RADIUS} ry={BORDER_RADIUS} stroke="rgba(255,255,255,0.25)" // Subtle inner frame
74
- strokeWidth={1.5} fill="transparent"/>
75
-
76
+ <Rect x={xMin} y={yMin} width={boxWidth} height={boxHeight} rx={BORDER_RADIUS} ry={BORDER_RADIUS} stroke={isSuccess ? '#2DBD60' : "rgba(255,255,255,0.25)"} strokeWidth={isSuccess ? 3 : 1.5} fill="transparent"/>
77
+
76
78
  {/* Professional Corner Guides */}
77
79
  <AnimatedG opacity={cornerOpacity || 1}>
78
80
  {/* Top Left */}
@@ -87,7 +89,7 @@ const IdCardOverlay = ({ cornerOpacity, instructions, stepperProps, isSuccess, l
87
89
  </Svg>
88
90
 
89
91
  {/* Scanning animation */}
90
- {!isSuccess && (<ScanningLine yMin={yMin} yMax={yMax} screenWidth={screenWidth} height={screenHeight}/>)}
92
+ {!isSuccess && (<ScanningLine yMin={yMin} yMax={yMax} screenWidth={container.width} height={container.height}/>)}
91
93
 
92
94
  {/* Top UI Zone */}
93
95
  <View style={[styles.topZone, { height: yMin }]} pointerEvents="box-none">
@@ -104,7 +106,7 @@ const IdCardOverlay = ({ cornerOpacity, instructions, stepperProps, isSuccess, l
104
106
  </View>
105
107
 
106
108
  {/* Bottom UI Zone */}
107
- <View style={[styles.bottomZone, { top: yMax + 30 }]} pointerEvents="box-none">
109
+ <View style={[styles.bottomZone, { top: yMax + 20 }]} pointerEvents="box-none">
108
110
  <Text style={styles.bottomTitle}>{bottomTitle}</Text>
109
111
  <Text style={styles.bottomSubtitle}>{bottomSubtitle}</Text>
110
112
  <View style={styles.helperPill}>
@@ -1 +1 @@
1
- {"version":3,"file":"IdCard.js","sourceRoot":"","sources":["../../../../src/components/OverLay/IdCard.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport {\n Animated,\n Dimensions,\n Platform,\n SafeAreaView,\n StatusBar,\n StyleSheet,\n Text,\n View,\n} from 'react-native';\nimport Svg, {\n Defs,\n G,\n LinearGradient,\n Mask,\n Path,\n Rect,\n Stop,\n} from 'react-native-svg';\nimport ScanningLine from '../Svgs/scanningLine';\nimport StepOverlay from './StepOverlay';\nimport { IdCardOverlayProps } from './type';\n\nconst { width: screenWidth, height: screenHeight } = Dimensions.get('window');\n\nconst IdCardOverlay = ({\n cornerOpacity,\n instructions,\n stepperProps,\n isSuccess,\n language = 'en',\n // Note: xMinPercent, yMinPercent, etc. are intentionally ignored below \n // to force a mathematically perfect ID card aspect ratio.\n}: IdCardOverlayProps) => {\n const AnimatedG = Animated.createAnimatedComponent(G);\n\n // --- 🚨 GEOMETRY FIX: Perfect ID Card Ratio ---\n // Standard ISO ID-1 ratio is 1.586 (85.6mm / 53.98mm)\n const ID_ASPECT_RATIO = 1.586;\n \n // Set width to 85% of the screen, and calculate perfect height\n const boxWidth = screenWidth * 0.85;\n const boxHeight = boxWidth / ID_ASPECT_RATIO;\n\n // Center horizontally\n const xMin = (screenWidth - boxWidth) / 2;\n const xMax = xMin + boxWidth;\n\n // Center vertically (shifted slightly up for better holding ergonomics)\n const yMin = (screenHeight - boxHeight) * 0.42; \n const yMax = yMin + boxHeight;\n\n // --- Clean, Professional Copy Formatting ---\n const formatDocType = (type?: string) => {\n if (!type) return 'document';\n // e.g., \"identity_card\" -> \"identity card\"\n return type.replace(/_/g, ' ').toLowerCase();\n };\n\n const getSideText = (side?: string) => {\n // Using \"recto/verso\" for French as it is much more professional for documents\n if (side === 'front') return language === 'en' ? 'front' : 'recto';\n return language === 'en' ? 'back' : 'verso';\n };\n\n const docTypeFormatted = formatDocType(stepperProps?.selectedDocumentType);\n const sideText = getSideText(stepperProps?.side);\n\n const bottomTitle = language === 'en'\n ? `Position the ${sideText} of your ${docTypeFormatted}`\n : `Positionnez le ${sideText} de votre ${docTypeFormatted}`;\n\n const bottomSubtitle = language === 'en'\n ? 'Ensure all details are clear and readable.'\n : 'Assurez-vous que tous les détails sont lisibles.';\n\n const helperText = language === 'en'\n ? 'No glare • All corners visible • Hold steady'\n : 'Pas de reflets • Coins visibles • Maintenez stable';\n\n // --- SVG Constants ---\n const CORNER_SIZE = 40; \n const STROKE_WIDTH = 4;\n const BORDER_RADIUS = 16; // Reduced slightly for a tighter, more realistic card feel\n\n return (\n <View style={StyleSheet.absoluteFill} pointerEvents=\"box-none\">\n <StatusBar translucent backgroundColor=\"transparent\" barStyle=\"light-content\" />\n \n {/* SVG Overlay */}\n <Svg width={screenWidth} height={screenHeight} style={styles.svg}>\n <Defs>\n <Mask id=\"cameraMask\">\n <Rect x=\"0\" y=\"0\" width={screenWidth} height={screenHeight} fill=\"white\" />\n {/* Transparent Cutout */}\n <Rect\n x={xMin}\n y={yMin}\n width={boxWidth}\n height={boxHeight}\n rx={BORDER_RADIUS}\n ry={BORDER_RADIUS}\n fill=\"black\"\n />\n </Mask>\n <LinearGradient id=\"scanBorderGradient\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">\n <Stop offset=\"0%\" stopColor=\"#4ADE80\" />\n <Stop offset=\"100%\" stopColor=\"#22C55E\" />\n </LinearGradient>\n </Defs>\n \n {/* Dim background */}\n <Rect x=\"0\" y=\"0\" width={screenWidth} height={screenHeight} fill=\"rgba(0,0,0,0.85)\" mask=\"url(#cameraMask)\" />\n \n {/* Main Card Border */}\n <Rect\n x={xMin}\n y={yMin}\n width={boxWidth}\n height={boxHeight}\n rx={BORDER_RADIUS}\n ry={BORDER_RADIUS}\n stroke=\"rgba(255,255,255,0.25)\" // Subtle inner frame\n strokeWidth={1.5}\n fill=\"transparent\"\n />\n \n {/* Professional Corner Guides */}\n <AnimatedG opacity={cornerOpacity || 1}>\n {/* Top Left */}\n <Path\n d={`M ${xMin} ${yMin + CORNER_SIZE} L ${xMin} ${yMin + BORDER_RADIUS} Q ${xMin} ${yMin} ${xMin + BORDER_RADIUS} ${yMin} L ${xMin + CORNER_SIZE} ${yMin}`}\n stroke=\"url(#scanBorderGradient)\"\n strokeWidth={STROKE_WIDTH}\n strokeLinecap=\"round\"\n fill=\"none\"\n />\n {/* Top Right */}\n <Path\n d={`M ${xMax - CORNER_SIZE} ${yMin} L ${xMax - BORDER_RADIUS} ${yMin} Q ${xMax} ${yMin} ${xMax} ${yMin + BORDER_RADIUS} L ${xMax} ${yMin + CORNER_SIZE}`}\n stroke=\"url(#scanBorderGradient)\"\n strokeWidth={STROKE_WIDTH}\n strokeLinecap=\"round\"\n fill=\"none\"\n />\n {/* Bottom Left */}\n <Path\n d={`M ${xMin} ${yMax - CORNER_SIZE} L ${xMin} ${yMax - BORDER_RADIUS} Q ${xMin} ${yMax} ${xMin + BORDER_RADIUS} ${yMax} L ${xMin + CORNER_SIZE} ${yMax}`}\n stroke=\"url(#scanBorderGradient)\"\n strokeWidth={STROKE_WIDTH}\n strokeLinecap=\"round\"\n fill=\"none\"\n />\n {/* Bottom Right */}\n <Path\n d={`M ${xMax - CORNER_SIZE} ${yMax} L ${xMax - BORDER_RADIUS} ${yMax} Q ${xMax} ${yMax} ${xMax} ${yMax - BORDER_RADIUS} L ${xMax} ${yMax - CORNER_SIZE}`}\n stroke=\"url(#scanBorderGradient)\"\n strokeWidth={STROKE_WIDTH}\n strokeLinecap=\"round\"\n fill=\"none\"\n />\n </AnimatedG>\n </Svg>\n\n {/* Scanning animation */}\n {!isSuccess && (\n <ScanningLine yMin={yMin} yMax={yMax} screenWidth={screenWidth} height={screenHeight} />\n )}\n\n {/* Top UI Zone */}\n <View style={[styles.topZone, { height: yMin }]} pointerEvents=\"box-none\">\n <SafeAreaView style={styles.safeAreaZone} pointerEvents=\"box-none\">\n {stepperProps && (\n <View style={styles.stepperWrapper}>\n <StepOverlay {...stepperProps} />\n </View>\n )}\n {instructions && (\n <View style={styles.instructionsContainer}>\n <View style={styles.instructionsBadge}>\n <Text style={styles.instructionsText}>{instructions}</Text>\n </View>\n </View>\n )}\n </SafeAreaView>\n </View>\n\n {/* Bottom UI Zone */}\n <View style={[styles.bottomZone, { top: yMax + 30 }]} pointerEvents=\"box-none\">\n <Text style={styles.bottomTitle}>{bottomTitle}</Text>\n <Text style={styles.bottomSubtitle}>{bottomSubtitle}</Text>\n <View style={styles.helperPill}>\n <Text style={styles.helperText}>{helperText}</Text>\n </View>\n </View>\n </View>\n );\n};\n\nexport default IdCardOverlay;\n\nconst styles = StyleSheet.create({\n svg: {\n position: 'absolute',\n top: 0,\n left: 0,\n zIndex: 1,\n },\n topZone: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n zIndex: 10,\n justifyContent: 'flex-start',\n },\n safeAreaZone: {\n flex: 1,\n paddingTop: Platform.OS === 'android' ? (StatusBar.currentHeight || 0) + 8 : 8,\n },\n stepperWrapper: {\n paddingHorizontal: 20,\n },\n instructionsContainer: {\n alignItems: 'center',\n marginTop: 'auto',\n marginBottom: 24,\n paddingHorizontal: 20,\n },\n instructionsBadge: {\n backgroundColor: 'rgba(0,0,0,0.6)',\n borderRadius: 8,\n paddingVertical: 8,\n paddingHorizontal: 14,\n },\n instructionsText: {\n color: '#FFFFFF',\n fontSize: 13,\n fontWeight: '500',\n letterSpacing: 0.3,\n },\n bottomZone: {\n position: 'absolute',\n bottom: 0,\n left: 0,\n right: 0,\n zIndex: 10,\n alignItems: 'center',\n paddingHorizontal: 24,\n },\n bottomTitle: {\n color: '#FFFFFF',\n fontSize: 18,\n fontWeight: '600',\n textAlign: 'center',\n letterSpacing: 0.3,\n marginBottom: 6,\n },\n bottomSubtitle: {\n color: 'rgba(255,255,255,0.7)',\n fontSize: 14,\n textAlign: 'center',\n fontWeight: '400',\n marginBottom: 20,\n },\n helperPill: {\n backgroundColor: 'rgba(255,255,255,0.1)',\n paddingVertical: 8,\n paddingHorizontal: 16,\n borderRadius: 20,\n },\n helperText: {\n color: 'rgba(255,255,255,0.9)',\n fontSize: 12,\n fontWeight: '500',\n },\n});"]}
1
+ {"version":3,"file":"IdCard.js","sourceRoot":"","sources":["../../../../src/components/OverLay/IdCard.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useState } from 'react';\nimport {\n Animated,\n Platform,\n SafeAreaView,\n StatusBar,\n StyleSheet,\n Text,\n View,\n useWindowDimensions,\n} from 'react-native';\nimport Svg, {\n Defs,\n G,\n LinearGradient,\n Mask,\n Path,\n Rect,\n Stop,\n} from 'react-native-svg';\nimport ScanningLine from '../Svgs/scanningLine';\nimport StepOverlay from './StepOverlay';\nimport { IdCardOverlayProps } from './type';\n\nconst IdCardOverlay = ({\n cornerOpacity,\n instructions,\n stepperProps,\n isSuccess,\n language = 'en',\n xMin: xMinPercent = 5,\n xMax: xMaxPercent = 95,\n yMin: yMinPercent = 34,\n yMax: yMaxPercent = 66,\n}: IdCardOverlayProps & { xMin?: number, xMax?: number, yMin?: number, yMax?: number }) => {\n const AnimatedG = Animated.createAnimatedComponent(G);\n \n // 1. Get baseline window dimensions (fallback for Native mobile)\n const { width: windowWidth, height: windowHeight } = useWindowDimensions();\n \n // 2. Track actual container dimensions (Crucial for Web Modals where window != container)\n const [container, setContainer] = useState({ width: windowWidth, height: windowHeight });\n\n // 3. Convert parent percentages to exact pixels within the container\n const xMin = (container.width * xMinPercent) / 100;\n const xMax = (container.width * xMaxPercent) / 100;\n const yMin = (container.height * yMinPercent) / 100;\n const yMax = (container.height * yMaxPercent) / 100;\n\n const boxWidth = xMax - xMin;\n const boxHeight = yMax - yMin;\n\n // --- Clean, Professional Copy Formatting ---\n const formatDocType = (type?: string) => {\n if (!type) return 'document';\n return type.replace(/_/g, ' ').toLowerCase();\n };\n\n const getSideText = (side?: string) => {\n if (side === 'front') return language === 'en' ? 'front' : 'recto';\n return language === 'en' ? 'back' : 'verso';\n };\n\n const docTypeFormatted = formatDocType(stepperProps?.selectedDocumentType);\n const sideText = getSideText(stepperProps?.side);\n\n const bottomTitle = language === 'en'\n ? `Position the ${sideText} of your ${docTypeFormatted}`\n : `Positionnez le ${sideText} de votre ${docTypeFormatted}`;\n\n const bottomSubtitle = language === 'en'\n ? 'Ensure all details are clear and readable.'\n : 'Assurez-vous que tous les détails sont lisibles.';\n\n const helperText = language === 'en'\n ? 'No glare • All corners visible • Hold steady'\n : 'Pas de reflets • Coins visibles • Maintenez stable';\n\n // --- SVG Constants ---\n const CORNER_SIZE = 40;\n const STROKE_WIDTH = 4;\n const BORDER_RADIUS = 16; \n\n // Safety check to prevent SVG NaN errors during initial render\n if (container.width === 0 || container.height === 0 || boxWidth <= 0) {\n return <View style={StyleSheet.absoluteFill} />;\n }\n\n return (\n <View \n style={StyleSheet.absoluteFill} \n pointerEvents=\"box-none\"\n onLayout={(e) => {\n // Update container dimensions only if they change to prevent loops\n const { width, height } = e.nativeEvent.layout;\n if (width !== container.width || height !== container.height) {\n setContainer({ width, height });\n }\n }}\n >\n <StatusBar translucent backgroundColor=\"transparent\" barStyle=\"light-content\" />\n\n {/* SVG Overlay */}\n <Svg width={container.width} height={container.height} style={styles.svg}>\n <Defs>\n <Mask id=\"cameraMask\">\n <Rect x=\"0\" y=\"0\" width={container.width} height={container.height} fill=\"white\" />\n {/* Transparent Cutout */}\n <Rect\n x={xMin}\n y={yMin}\n width={boxWidth}\n height={boxHeight}\n rx={BORDER_RADIUS}\n ry={BORDER_RADIUS}\n fill=\"black\"\n />\n </Mask>\n <LinearGradient id=\"scanBorderGradient\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">\n <Stop offset=\"0%\" stopColor=\"#4ADE80\" />\n <Stop offset=\"100%\" stopColor=\"#22C55E\" />\n </LinearGradient>\n </Defs>\n\n {/* Dim background */}\n <Rect x=\"0\" y=\"0\" width={container.width} height={container.height} fill=\"rgba(0,0,0,0.85)\" mask=\"url(#cameraMask)\" />\n\n {/* Main Card Border */}\n <Rect\n x={xMin}\n y={yMin}\n width={boxWidth}\n height={boxHeight}\n rx={BORDER_RADIUS}\n ry={BORDER_RADIUS}\n stroke={isSuccess ? '#2DBD60' : \"rgba(255,255,255,0.25)\"}\n strokeWidth={isSuccess ? 3 : 1.5}\n fill=\"transparent\"\n />\n\n {/* Professional Corner Guides */}\n <AnimatedG opacity={cornerOpacity || 1}>\n {/* Top Left */}\n <Path\n d={`M ${xMin} ${yMin + CORNER_SIZE} L ${xMin} ${yMin + BORDER_RADIUS} Q ${xMin} ${yMin} ${xMin + BORDER_RADIUS} ${yMin} L ${xMin + CORNER_SIZE} ${yMin}`}\n stroke=\"url(#scanBorderGradient)\"\n strokeWidth={STROKE_WIDTH}\n strokeLinecap=\"round\"\n fill=\"none\"\n />\n {/* Top Right */}\n <Path\n d={`M ${xMax - CORNER_SIZE} ${yMin} L ${xMax - BORDER_RADIUS} ${yMin} Q ${xMax} ${yMin} ${xMax} ${yMin + BORDER_RADIUS} L ${xMax} ${yMin + CORNER_SIZE}`}\n stroke=\"url(#scanBorderGradient)\"\n strokeWidth={STROKE_WIDTH}\n strokeLinecap=\"round\"\n fill=\"none\"\n />\n {/* Bottom Left */}\n <Path\n d={`M ${xMin} ${yMax - CORNER_SIZE} L ${xMin} ${yMax - BORDER_RADIUS} Q ${xMin} ${yMax} ${xMin + BORDER_RADIUS} ${yMax} L ${xMin + CORNER_SIZE} ${yMax}`}\n stroke=\"url(#scanBorderGradient)\"\n strokeWidth={STROKE_WIDTH}\n strokeLinecap=\"round\"\n fill=\"none\"\n />\n {/* Bottom Right */}\n <Path\n d={`M ${xMax - CORNER_SIZE} ${yMax} L ${xMax - BORDER_RADIUS} ${yMax} Q ${xMax} ${yMax} ${xMax} ${yMax - BORDER_RADIUS} L ${xMax} ${yMax - CORNER_SIZE}`}\n stroke=\"url(#scanBorderGradient)\"\n strokeWidth={STROKE_WIDTH}\n strokeLinecap=\"round\"\n fill=\"none\"\n />\n </AnimatedG>\n </Svg>\n\n {/* Scanning animation */}\n {!isSuccess && (\n <ScanningLine yMin={yMin} yMax={yMax} screenWidth={container.width} height={container.height} />\n )}\n\n {/* Top UI Zone */}\n <View style={[styles.topZone, { height: yMin }]} pointerEvents=\"box-none\">\n <SafeAreaView style={styles.safeAreaZone} pointerEvents=\"box-none\">\n {stepperProps && (\n <View style={styles.stepperWrapper}>\n <StepOverlay {...stepperProps} />\n </View>\n )}\n {instructions && (\n <View style={styles.instructionsContainer}>\n <View style={styles.instructionsBadge}>\n <Text style={styles.instructionsText}>{instructions}</Text>\n </View>\n </View>\n )}\n </SafeAreaView>\n </View>\n\n {/* Bottom UI Zone */}\n <View style={[styles.bottomZone, { top: yMax + 20 }]} pointerEvents=\"box-none\">\n <Text style={styles.bottomTitle}>{bottomTitle}</Text>\n <Text style={styles.bottomSubtitle}>{bottomSubtitle}</Text>\n <View style={styles.helperPill}>\n <Text style={styles.helperText}>{helperText}</Text>\n </View>\n </View>\n </View>\n );\n};\n\nexport default IdCardOverlay;\n\nconst styles = StyleSheet.create({\n svg: {\n position: 'absolute',\n top: 0,\n left: 0,\n zIndex: 1,\n },\n topZone: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n zIndex: 10,\n justifyContent: 'flex-start',\n },\n safeAreaZone: {\n flex: 1,\n paddingTop: Platform.OS === 'android' ? (StatusBar.currentHeight || 0) + 8 : 8,\n },\n stepperWrapper: {\n paddingHorizontal: 20,\n },\n instructionsContainer: {\n alignItems: 'center',\n marginTop: 'auto',\n marginBottom: 24,\n paddingHorizontal: 20,\n },\n instructionsBadge: {\n backgroundColor: 'rgba(0,0,0,0.6)',\n borderRadius: 8,\n paddingVertical: 8,\n paddingHorizontal: 14,\n },\n instructionsText: {\n color: '#FFFFFF',\n fontSize: 13,\n fontWeight: '500',\n letterSpacing: 0.3,\n },\n bottomZone: {\n position: 'absolute',\n bottom: 0,\n left: 0,\n right: 0,\n zIndex: 10,\n alignItems: 'center',\n paddingHorizontal: 24,\n },\n bottomTitle: {\n color: '#FFFFFF',\n fontSize: 18,\n fontWeight: '600',\n textAlign: 'center',\n letterSpacing: 0.3,\n marginBottom: 6,\n },\n bottomSubtitle: {\n color: 'rgba(255,255,255,0.7)',\n fontSize: 14,\n textAlign: 'center',\n fontWeight: '400',\n marginBottom: 20,\n },\n helperPill: {\n backgroundColor: 'rgba(255,255,255,0.1)',\n paddingVertical: 8,\n paddingHorizontal: 16,\n borderRadius: 20,\n },\n helperText: {\n color: 'rgba(255,255,255,0.9)',\n fontSize: 12,\n fontWeight: '500',\n },\n});"]}
@@ -1 +1 @@
1
- {"version":3,"file":"countriesData.d.ts","sourceRoot":"","sources":["../../../src/config/countriesData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAM7C,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CA8E/C,CAAC"}
1
+ {"version":3,"file":"countriesData.d.ts","sourceRoot":"","sources":["../../../src/config/countriesData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CA8E/C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"countriesData.js","sourceRoot":"","sources":["../../../src/config/countriesData.ts"],"names":[],"mappings":"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","sourcesContent":["import { Country } from \"../types/KYC.types\";\n\n\n\n\n\nexport const countryData: Record<string, Country> = {\n FR: { name: 'France', name_en: \"France\", flag: '🇫🇷' },\n CM: { name: 'Cameroun', name_en: \"Cameroon\", flag: '🇨🇲' },\n US: { name: 'États-Unis', name_en: \"United States of America\", flag: '🇺🇸' },\n DE: { name: 'Allemagne', name_en: \"Germany\", flag: '🇩🇪' },\n BE: { name: 'Belgique', name_en: \"Belgium\", flag: '🇧🇪' },\n LU: { name: 'Luxembourg', name_en: \"Luxembourg\", flag: '🇱🇺' },\n IT: { name: 'Italie', name_en: \"Italy\", flag: '🇮🇹' },\n ES: { name: 'Espagne', name_en: \"Spain\", flag: '🇪🇸' },\n PT: { name: 'Portugal', name_en: \"Portugal\", flag: '🇵🇹' },\n AT: { name: 'Autriche', name_en: \"Austria\", flag: '🇦🇹' },\n CH: { name: 'Suisse', name_en: \"Switzerland\", flag: '🇨🇭' },\n NL: { name: 'Pays-Bas', name_en: \"Netherlands\", flag: '🇳🇱' },\n CA: { name: 'Canada', name_en: \"Canada\", flag: '🇨🇦', hasRegions: true },\n GB: { name: 'Royaume-Uni', name_en: \"United Kingdom\", flag: '🇬🇧' },\n AU: { name: 'Australie', name_en: \"Australia\", flag: '🇦🇺' },\n JP: { name: 'Japon', name_en: \"Japan\", flag: '🇯🇵' },\n KR: { name: 'Corée du Sud', name_en: \"South Korea\", flag: '🇰🇷' },\n SG: { name: 'Singapour', name_en: \"Singapore\", flag: '🇸🇬' },\n HK: { name: 'Hong Kong', name_en: \"Hong Kong\", flag: '🇭🇰' },\n AE: { name: 'Émirats Arabes Unis', name_en: \"United Arab Emirates\", flag: '🇦🇪' },\n SA: { name: 'Arabie Saoudite', name_en: \"Saudi Arabia\", flag: '🇸🇦' },\n QA: { name: 'Qatar', name_en: \"Qatar\", flag: '🇶🇦' },\n KW: { name: 'Koweït', name_en: \"Kuwait\", flag: '🇰🇼' },\n BH: { name: 'Bahreïn', name_en: \"Bahrain\", flag: '🇧🇭' },\n OM: { name: 'Oman', name_en: \"Oman\", flag: '🇴🇲' },\n JO: { name: 'Jordanie', name_en: \"Jordan\", flag: '🇯🇴' },\n LB: { name: 'Liban', name_en: \"Lebanon\", flag: '🇱🇧' },\n EG: { name: 'Égypte', name_en: \"Egypt\", flag: '🇪🇬' },\n MA: { name: 'Maroc', name_en: \"Morocco\", flag: '🇲🇦' },\n TN: { name: 'Tunisie', name_en: \"Tunisia\", flag: '🇹🇳' },\n DZ: { name: 'Algérie', name_en: \"Algeria\", flag: '🇩🇿' },\n SN: { name: 'Sénégal', name_en: \"Senegal\", flag: '🇸🇳' },\n CI: { name: 'Côte d\\'Ivoire', name_en: \"Ivory Coast\", flag: '🇨🇮' },\n NG: { name: 'Nigeria', name_en: \"Nigeria\", flag: '🇳🇬' },\n KE: { name: 'Kenya', name_en: \"Kenya\", flag: '🇰🇪' },\n ZA: { name: 'Afrique du Sud', name_en: \"South Africa\", flag: '🇿🇦' },\n BR: { name: 'Brésil', name_en: \"Brazil\", flag: '🇧🇷' },\n MX: { name: 'Mexique', name_en: \"Mexico\", flag: '🇲🇽' },\n AR: { name: 'Argentine', name_en: \"Argentina\", flag: '🇦🇷' },\n CL: { name: 'Chili', name_en: \"Chile\", flag: '🇨🇱' },\n PE: { name: 'Pérou', name_en: \"Peru\", flag: '🇵🇪' },\n CO: { name: 'Colombie', name_en: \"Colombia\", flag: '🇨🇴' },\n VE: { name: 'Venezuela', name_en: \"Venezuela\", flag: '🇻🇪' },\n EC: { name: 'Équateur', name_en: \"Ecuador\", flag: '🇪🇨' },\n UY: { name: 'Uruguay', name_en: \"Uruguay\", flag: '🇺🇾' },\n PY: { name: 'Paraguay', name_en: \"Paraguay\", flag: '🇵🇾' },\n BO: { name: 'Bolivie', name_en: \"Bolivia\", flag: '🇧🇴' },\n IN: { name: 'Inde', name_en: \"India\", flag: '🇮🇳' },\n CN: { name: 'Chine', name_en: \"China\", flag: '🇨🇳' },\n TH: { name: 'Thaïlande', name_en: \"Thailand\", flag: '🇹🇭' },\n VN: { name: 'Vietnam', name_en: \"Vietnam\", flag: '🇻🇳' },\n ID: { name: 'Indonésie', name_en: \"Indonesia\", flag: '🇮🇩' },\n MY: { name: 'Malaisie', name_en: \"Malaysia\", flag: '🇲🇾' },\n PH: { name: 'Philippines', name_en: \"Philippines\", flag: '🇵🇭' },\n TR: { name: 'Turquie', name_en: \"Turkey\", flag: '🇹🇷' },\n IL: { name: 'Israël', name_en: \"Israel\", flag: '🇮🇱' },\n RU: { name: 'Russie', name_en: \"Russia\", flag: '🇷🇺' },\n UA: { name: 'Ukraine', name_en: \"Ukraine\", flag: '🇺🇦' },\n PL: { name: 'Pologne', name_en: \"Poland\", flag: '🇵🇱' },\n CZ: { name: 'République Tchèque', name_en: \"Czech Republic\", flag: '🇨🇿' },\n HU: { name: 'Hongrie', name_en: \"Hungary\", flag: '🇭🇺' },\n RO: { name: 'Roumanie', name_en: \"Romania\", flag: '🇷🇴' },\n BG: { name: 'Bulgarie', name_en: \"Bulgaria\", flag: '🇧🇬' },\n HR: { name: 'Croatie', name_en: \"Croatia\", flag: '🇭🇷' },\n SI: { name: 'Slovénie', name_en: \"Slovenia\", flag: '🇸🇮' },\n SK: { name: 'Slovaquie', name_en: \"Slovakia\", flag: '🇸🇰' },\n LT: { name: 'Lituanie', name_en: \"Lithuania\", flag: '🇱🇹' },\n LV: { name: 'Lettonie', name_en: \"Latvia\", flag: '🇱🇻' },\n EE: { name: 'Estonie', name_en: \"Estonia\", flag: '🇪🇪' },\n FI: { name: 'Finlande', name_en: \"Finland\", flag: '🇫🇮' },\n SE: { name: 'Suède', name_en: \"Sweden\", flag: '🇸🇪' },\n NO: { name: 'Norvège', name_en: \"Norway\", flag: '🇳🇴' },\n DK: { name: 'Danemark', name_en: \"Denmark\", flag: '🇩🇰' },\n IS: { name: 'Islande', name_en: \"Iceland\", flag: '🇮🇸' },\n IE: { name: 'Irlande', name_en: \"Ireland\", flag: '🇮🇪' },\n NZ: { name: 'Nouvelle-Zélande', name_en: \"New Zealand\", flag: '🇳🇿' },\n GH: { name: 'Ghana', name_en: \"Ghana\", flag: '🇬🇭' },\n};\n"]}
1
+ {"version":3,"file":"countriesData.js","sourceRoot":"","sources":["../../../src/config/countriesData.ts"],"names":[],"mappings":"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","sourcesContent":["import { Country } from \"../types/KYC.types\";\n\nexport const countryData: Record<string, Country> = {\n FR: { name: 'France', name_en: \"France\", flag: '🇫🇷' },\n CM: { name: 'Cameroun', name_en: \"Cameroon\", flag: '🇨🇲' },\n US: { name: 'États-Unis', name_en: \"United States of America\", flag: '🇺🇸' },\n DE: { name: 'Allemagne', name_en: \"Germany\", flag: '🇩🇪' },\n BE: { name: 'Belgique', name_en: \"Belgium\", flag: '🇧🇪' },\n LU: { name: 'Luxembourg', name_en: \"Luxembourg\", flag: '🇱🇺' },\n IT: { name: 'Italie', name_en: \"Italy\", flag: '🇮🇹' },\n ES: { name: 'Espagne', name_en: \"Spain\", flag: '🇪🇸' },\n PT: { name: 'Portugal', name_en: \"Portugal\", flag: '🇵🇹' },\n AT: { name: 'Autriche', name_en: \"Austria\", flag: '🇦🇹' },\n CH: { name: 'Suisse', name_en: \"Switzerland\", flag: '🇨🇭' },\n NL: { name: 'Pays-Bas', name_en: \"Netherlands\", flag: '🇳🇱' },\n CA: { name: 'Canada', name_en: \"Canada\", flag: '🇨🇦', hasRegions: true },\n GB: { name: 'Royaume-Uni', name_en: \"United Kingdom\", flag: '🇬🇧' },\n AU: { name: 'Australie', name_en: \"Australia\", flag: '🇦🇺' },\n JP: { name: 'Japon', name_en: \"Japan\", flag: '🇯🇵' },\n KR: { name: 'Corée du Sud', name_en: \"South Korea\", flag: '🇰🇷' },\n SG: { name: 'Singapour', name_en: \"Singapore\", flag: '🇸🇬' },\n HK: { name: 'Hong Kong', name_en: \"Hong Kong\", flag: '🇭🇰' },\n AE: { name: 'Émirats Arabes Unis', name_en: \"United Arab Emirates\", flag: '🇦🇪' },\n SA: { name: 'Arabie Saoudite', name_en: \"Saudi Arabia\", flag: '🇸🇦' },\n QA: { name: 'Qatar', name_en: \"Qatar\", flag: '🇶🇦' },\n KW: { name: 'Koweït', name_en: \"Kuwait\", flag: '🇰🇼' },\n BH: { name: 'Bahreïn', name_en: \"Bahrain\", flag: '🇧🇭' },\n OM: { name: 'Oman', name_en: \"Oman\", flag: '🇴🇲' },\n JO: { name: 'Jordanie', name_en: \"Jordan\", flag: '🇯🇴' },\n LB: { name: 'Liban', name_en: \"Lebanon\", flag: '🇱🇧' },\n EG: { name: 'Égypte', name_en: \"Egypt\", flag: '🇪🇬' },\n MA: { name: 'Maroc', name_en: \"Morocco\", flag: '🇲🇦' },\n TN: { name: 'Tunisie', name_en: \"Tunisia\", flag: '🇹🇳' },\n DZ: { name: 'Algérie', name_en: \"Algeria\", flag: '🇩🇿' },\n SN: { name: 'Sénégal', name_en: \"Senegal\", flag: '🇸🇳' },\n CI: { name: 'Côte d\\'Ivoire', name_en: \"Ivory Coast\", flag: '🇨🇮' },\n NG: { name: 'Nigeria', name_en: \"Nigeria\", flag: '🇳🇬' },\n KE: { name: 'Kenya', name_en: \"Kenya\", flag: '🇰🇪' },\n ZA: { name: 'Afrique du Sud', name_en: \"South Africa\", flag: '🇿🇦' },\n BR: { name: 'Brésil', name_en: \"Brazil\", flag: '🇧🇷' },\n MX: { name: 'Mexique', name_en: \"Mexico\", flag: '🇲🇽' },\n AR: { name: 'Argentine', name_en: \"Argentina\", flag: '🇦🇷' },\n CL: { name: 'Chili', name_en: \"Chile\", flag: '🇨🇱' },\n PE: { name: 'Pérou', name_en: \"Peru\", flag: '🇵🇪' },\n CO: { name: 'Colombie', name_en: \"Colombia\", flag: '🇨🇴' },\n VE: { name: 'Venezuela', name_en: \"Venezuela\", flag: '🇻🇪' },\n EC: { name: 'Équateur', name_en: \"Ecuador\", flag: '🇪🇨' },\n UY: { name: 'Uruguay', name_en: \"Uruguay\", flag: '🇺🇾' },\n PY: { name: 'Paraguay', name_en: \"Paraguay\", flag: '🇵🇾' },\n BO: { name: 'Bolivie', name_en: \"Bolivia\", flag: '🇧🇴' },\n IN: { name: 'Inde', name_en: \"India\", flag: '🇮🇳' },\n CN: { name: 'Chine', name_en: \"China\", flag: '🇨🇳' },\n TH: { name: 'Thaïlande', name_en: \"Thailand\", flag: '🇹🇭' },\n VN: { name: 'Vietnam', name_en: \"Vietnam\", flag: '🇻🇳' },\n ID: { name: 'Indonésie', name_en: \"Indonesia\", flag: '🇮🇩' },\n MY: { name: 'Malaisie', name_en: \"Malaysia\", flag: '🇲🇾' },\n PH: { name: 'Philippines', name_en: \"Philippines\", flag: '🇵🇭' },\n TR: { name: 'Turquie', name_en: \"Turkey\", flag: '🇹🇷' },\n IL: { name: 'Israël', name_en: \"Israel\", flag: '🇮🇱' },\n RU: { name: 'Russie', name_en: \"Russia\", flag: '🇷🇺' },\n UA: { name: 'Ukraine', name_en: \"Ukraine\", flag: '🇺🇦' },\n PL: { name: 'Pologne', name_en: \"Poland\", flag: '🇵🇱' },\n CZ: { name: 'République Tchèque', name_en: \"Czech Republic\", flag: '🇨🇿' },\n HU: { name: 'Hongrie', name_en: \"Hungary\", flag: '🇭🇺' },\n RO: { name: 'Roumanie', name_en: \"Romania\", flag: '🇷🇴' },\n BG: { name: 'Bulgarie', name_en: \"Bulgaria\", flag: '🇧🇬' },\n HR: { name: 'Croatie', name_en: \"Croatia\", flag: '🇭🇷' },\n SI: { name: 'Slovénie', name_en: \"Slovenia\", flag: '🇸🇮' },\n SK: { name: 'Slovaquie', name_en: \"Slovakia\", flag: '🇸🇰' },\n LT: { name: 'Lituanie', name_en: \"Lithuania\", flag: '🇱🇹' },\n LV: { name: 'Lettonie', name_en: \"Latvia\", flag: '🇱🇻' },\n EE: { name: 'Estonie', name_en: \"Estonia\", flag: '🇪🇪' },\n FI: { name: 'Finlande', name_en: \"Finland\", flag: '🇫🇮' },\n SE: { name: 'Suède', name_en: \"Sweden\", flag: '🇸🇪' },\n NO: { name: 'Norvège', name_en: \"Norway\", flag: '🇳🇴' },\n DK: { name: 'Danemark', name_en: \"Denmark\", flag: '🇩🇰' },\n IS: { name: 'Islande', name_en: \"Iceland\", flag: '🇮🇸' },\n IE: { name: 'Irlande', name_en: \"Ireland\", flag: '🇮🇪' },\n NZ: { name: 'Nouvelle-Zélande', name_en: \"New Zealand\", flag: '🇳🇿' },\n GH: { name: 'Ghana', name_en: \"Ghana\", flag: '🇬🇭' },\n};\n"]}
@@ -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,CAAA;CACnB,EACD,GAAG,GAAE,cAA6B;;;;;;;;;;;;;;;;;;;;;;;;aAnBzB,OAAO;cACN,OAAO;aACR,GAAG,EAAE;eACH,WAAW,EAAE,GAAG,GAAG;oBACd,MAAM;YACd,GAAG;GAoId;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,CAAA;CAC7C,EACD,GAAG,GAAE,cAA6B,gBAgLrC;AAED,wBAAsB,iBAAiB,CACnC,MAAM,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAC9E,GAAG,GAAE,cAA6B,gBAuErC"}
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,CAAA;CACnB,EACD,GAAG,GAAE,cAA6B;;;;;;;;;;;;;;;;;;;;;;;;aAnBzB,OAAO;cACN,OAAO;aACR,GAAG,EAAE;eACH,WAAW,EAAE,GAAG,GAAG;oBACd,MAAM;YACd,GAAG;GAoId;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,CAAA;CAC7C,EACD,GAAG,GAAE,cAA6B,gBA+KrC;AAED,wBAAsB,iBAAiB,CACnC,MAAM,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAC9E,GAAG,GAAE,cAA6B,gBAuErC"}
@@ -180,7 +180,6 @@ export async function backVerification(result, env = 'PRODUCTION') {
180
180
  points = cardData[0];
181
181
  isCardInFrame = true;
182
182
  hasCroppedSides = false;
183
- // 🚨 ARTIFICIAL CHECK REMOVED HERE
184
183
  }
185
184
  if (!isCardInFrame || hasCroppedSides) {
186
185
  logger.log(`Back Framing failed. Backend reported document out of bounds.`);
@@ -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 },\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 const hasMrz = authMethods.some(m => m.includes('MRZ'));\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: {\n status: 'SUCCESS',\n document_type: result.selectedDocumentType,\n mrz_type: result.mrzType || 'TD1'\n }\n }\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 let isCardInFrame = true;\n let hasCroppedSides = false;\n console.log(points)\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\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 (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 return { ...detected, croppedBase64, bbox, ...(mrz ? { mrz } : {}) };\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 },\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 logger.log('result object', result)\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: {\n status: 'SUCCESS',\n document_type: result.selectedDocumentType,\n mrz_type: result.mrzType || 'TD1'\n }\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 let isCardInFrame = false;\n let hasCroppedSides = true;\n console.log(points)\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 // 🚨 ARTIFICIAL CHECK REMOVED HERE\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 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 logger.log(\"Framing and Country Template verified successfully. Proceeding to Data Extraction.\");\n\n let extractionResult: any = {};\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\n extractionResult.mrz = mrz; // Attaching securely to result object\n\n } catch (mrzError: any) {\n logger.log(`MRZ échoué: ${mrzError?.message}`);\n // If MRZ fails, we MUST throw an error so the user is forced to retake it!\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\");\n const barcode = await kycService.extractBarcode({ fileUri: result.path!, token: token }, env);\n extractionResult.barcode = barcode;\n } catch (e: any) {\n // Only throw barcode error if MRZ wasn't already successfully extracted\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: { path?: string, docType: string, docRegion: string, postfix: string },\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 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 }, 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 let isCardInFrame = false;\n let hasCroppedSides = true;\n console.log(points)\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 // 🚨 ARTIFICIAL CHECK REMOVED HERE\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 } catch (e: any) {\n logger.log('Errorrr 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":"AAAA,OAAO,UAAU,EAAE,EAAE,gBAAgB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC1F,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAG9F,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAmBzD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACnC,MAQC,EACD,MAAsB,YAAY;IAElC,IAAI,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAEtE,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC;YAC/D,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACnE,CAAC,CAAC,EAAE,CAAC;QACT,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAExD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;YACzE,MAAM,QAAQ,GAAU,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YAC5E,MAAM,YAAY,GAAG;gBACjB,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;gBAC9B,QAAQ,EAAE,CAAC;wBACP,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;wBACzD,UAAU,EAAE,IAAI;wBAChB,aAAa,EAAE,IAAI;wBACnB,aAAa,EAAE,EAAE;qBACpB,CAAC;gBACF,IAAI,EAAE,QAAQ;gBACd,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;oBACT,GAAG,EAAE;wBACD,OAAO,EAAE,IAAI;wBACb,WAAW,EAAE;4BACT,MAAM,EAAE,SAAS;4BACjB,aAAa,EAAE,MAAM,CAAC,oBAAoB;4BAC1C,QAAQ,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK;yBACpC;qBACJ;iBACJ,CAAC,CAAC,CAAC,EAAE,CAAC;aACV,CAAC;YACF,OAAO,YAAY,CAAC;QACxB,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,cAAc,CAC5C,MAAM,EAAE,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAoB,IAAI,EAAE,EAAE,GAAG,CAC1C,CAAC;QAE7B,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC9E,CAAC;QAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YAClG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;YACtB,CAAC,CAAC,IAAI,CAAC;QAEX,IAAI,MAAM,GAAsB,IAAI,CAAC;QACrC,IAAI,aAAa,GAAG,IAAI,CAAC;QACzB,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAEnB,IAAI,QAAQ,EAAE,CAAC;YACX,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC;YACtB,IAAI,OAAO,QAAQ,CAAC,aAAa,KAAK,WAAW,EAAE,CAAC;gBAChD,aAAa,GAAG,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC;gBAChD,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,QAAQ,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;YACjG,CAAC;QACL,CAAC;QAED,IAAI,CAAC,aAAa,IAAI,eAAe,EAAE,CAAC;YACpC,MAAM,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;YACvE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,aAAa,GAAG,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC1D,IAAI,aAAa,KAAK,IAAI,IAAI,aAAa,GAAG,wBAAwB,EAAE,CAAC;YACrE,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;QAChG,CAAC;QAED,IAAI,aAAiC,CAAC;QACtC,IAAI,IAAuB,CAAC;QAC5B,IAAI,GAAoB,CAAC;QAEzB,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACpE,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;YAC5B,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC,CAAC,CAAC;QAEX,IAAI,MAAM,EAAE,CAAC;YACT,IAAI,CAAC;gBACD,MAAM,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;gBACjD,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,cAAc,CAC/C;oBACI,OAAO,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE;oBAC1B,OAAO,EAAE,MAAM,EAAE,oBAAoB,IAAI,EAAE;oBAC3C,SAAS,EAAE,MAAM,EAAE,IAAI,IAAI,EAAE;oBAC7B,OAAO,EAAE,MAAM,EAAE,WAAW,IAAI,OAAO;oBACvC,KAAK,EAAE,KAAK;oBACZ,aAAa,EAAE,MAAM,EAAE,YAAY,IAAI,EAAE;oBACzC,QAAQ,EAAE,MAAM,EAAE,OAAO,IAAI,KAAK;iBACrC,EACD,GAAG,CACN,CAAC;gBAEF,GAAG,GAAG,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;gBAE9E,IAAI,GAAG,EAAE,WAAW,EAAE,MAAM,KAAK,SAAS,IAAI,GAAG,EAAE,OAAO,KAAK,KAAK,EAAE,CAAC;oBACnE,MAAM,CAAC,GAAG,CAAC,iCAAiC,EAAE,GAAG,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;oBAChF,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,EAAE,WAAW,EAAE,cAAc,IAAI,4CAA4C,EAAE,CAAC,CAAC;gBAC1H,CAAC;YACL,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAChB,MAAM,CAAC,GAAG,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;gBACzC,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,OAAO,IAAI,+DAA+D,CAAC,CAAC;YACrG,CAAC;QACL,CAAC;QAED,OAAO,EAAE,GAAG,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAEzE,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QACd,MAAM,CAAC,GAAG,CAAC,2BAA2B,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,OAAO,IAAI,+BAA+B,CAAC,CAAC;IACnE,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAClC,MASC,EACD,MAAsB,YAAY;IAElC,IAAI,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACtD,MAAM,CAAC,GAAG,CAAC,sBAAsB,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1F,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,CAAA;QAEnC,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC;YAC/D,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACnE,CAAC,CAAC,EAAE,CAAC;QAET,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;QACvD,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAEpF,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;YACxE,MAAM,QAAQ,GAAU,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YAC5E,MAAM,WAAW,GAAG,CAAC;oBACjB,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;oBACzD,UAAU,EAAE,IAAI;oBAChB,aAAa,EAAE,IAAI;oBACnB,aAAa,EAAE,EAAE;iBACpB,CAAC,CAAC;YAEH,IAAI,MAAM,EAAE,CAAC;gBACT,OAAO;oBACH,OAAO,EAAE,IAAI;oBACb,GAAG,EAAE;wBACD,OAAO,EAAE,IAAI;wBACb,WAAW,EAAE;4BACT,MAAM,EAAE,SAAS;4BACjB,aAAa,EAAE,MAAM,CAAC,oBAAoB;4BAC1C,QAAQ,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK;yBACpC;qBACJ;oBACD,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,WAAW;iBACxB,CAAC;YACN,CAAC;iBAAM,IAAI,UAAU,EAAE,CAAC;gBACpB,OAAO;oBACH,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,EAAE,YAAY,EAAE,sBAAsB,EAAE;oBACjD,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,WAAW;iBACxB,CAAC;YACN,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;QACpE,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;QAEpE,MAAM,gBAAgB,GAA4B,MAAM,CAAC,gBAAgB;YACrE,MAAM,UAAU,CAAC,iBAAiB,CAAC;gBAC/B,OAAO,EAAE,MAAM,CAAC,IAAI;gBACpB,OAAO,EAAE,MAAM,CAAC,oBAA2B;gBAC3C,SAAS,EAAE,MAAM,CAAC,IAAI;gBACtB,OAAO,EAAE,MAAM;gBACf,KAAK,EAAE,KAAK;aACf,EAAE,GAAG,CAAC,CAAC;QAEZ,IAAI,gBAAgB,CAAC,OAAO,KAAK,KAAK,IAAI,gBAAgB,CAAC,KAAK,EAAE,CAAC;YAC/D,MAAM,IAAI,KAAK,CAAC,mFAAmF,CAAC,CAAC;QACzG,CAAC;QAED,MAAM,QAAQ,GAAG,gBAAgB,EAAE,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YAC3H,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC9B,CAAC,CAAC,IAAI,CAAC;QAEX,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAE1D,IAAI,MAAM,GAAsB,IAAI,CAAC;QACrC,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,IAAI,eAAe,GAAG,IAAI,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAEnB,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC;YACf,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC;YACtB,IAAI,OAAO,QAAQ,CAAC,aAAa,KAAK,WAAW,EAAE,CAAC;gBAChD,aAAa,GAAG,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC;gBAChD,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,QAAQ,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;YACjG,CAAC;QACL,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACrB,aAAa,GAAG,IAAI,CAAC;YACrB,eAAe,GAAG,KAAK,CAAC;QAC5B,CAAC;QAED,IAAI,CAAC,aAAa,IAAI,eAAe,EAAE,CAAC;YACpC,MAAM,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,OAAO,GAAG,gBAAgB,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QAC7D,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,GAAG,wBAAwB,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;QAChG,CAAC;QAED,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,aAAa,IAAI,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;QACvF,IAAI,kBAAkB,EAAE,CAAC;YACrB,MAAM,mBAAmB,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC;YACpE,MAAM,YAAY,GAAG,kBAAkB,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;YACrE,MAAM,YAAY,GAAG,mBAAmB,IAAI,kBAAkB,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,CAAC,CAAC;YAEzH,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,EAAE,CAAC;gBACjC,MAAM,CAAC,GAAG,CAAC,gCAAgC,MAAM,CAAC,IAAI,KAAK,mBAAmB,gBAAgB,kBAAkB,EAAE,CAAC,CAAC;gBACpH,MAAM,IAAI,KAAK,CAAC,sDAAsD,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;YAC3F,CAAC;QACL,CAAC;QAED,MAAM,CAAC,GAAG,CAAC,oFAAoF,CAAC,CAAC;QAEjG,IAAI,gBAAgB,GAAQ,EAAE,CAAC;QAE/B,IAAI,MAAM,EAAE,CAAC;YACT,IAAI,CAAC;gBACD,MAAM,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;gBAChD,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,cAAc,CAAC;oBAChD,OAAO,EAAE,MAAM,CAAC,IAAK;oBACrB,OAAO,EAAE,MAAM,EAAE,oBAAoB,IAAI,EAAE;oBAC3C,SAAS,EAAE,MAAM,EAAE,IAAI,IAAI,EAAE;oBAC7B,OAAO,EAAE,MAAM,EAAE,WAAW,IAAI,MAAM;oBACtC,KAAK,EAAE,KAAK;oBACZ,aAAa,EAAE,kBAAkB;oBACjC,QAAQ,EAAE,MAAM,EAAE,OAAO,IAAI,KAAK;iBACrC,EAAE,GAAG,CAAC,CAAC;gBAER,MAAM,GAAG,GAAG,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;gBAEpF,IAAI,GAAG,EAAE,WAAW,EAAE,MAAM,KAAK,SAAS,IAAI,GAAG,EAAE,OAAO,KAAK,KAAK,EAAE,CAAC;oBACnE,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE,cAAc,IAAI,qBAAqB,CAAC,CAAC;gBAC/E,CAAC;gBAED,gBAAgB,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,sCAAsC;YAEtE,CAAC;YAAC,OAAO,QAAa,EAAE,CAAC;gBACrB,MAAM,CAAC,GAAG,CAAC,eAAe,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC/C,2EAA2E;gBAC3E,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,EAAE,OAAO,IAAI,4CAA4C,EAAE,CAAC,CAAC;YAClH,CAAC;QACL,CAAC;QAED,IAAI,UAAU,EAAE,CAAC;YACb,IAAI,CAAC;gBACD,MAAM,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;gBAC7C,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,IAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC9F,gBAAgB,CAAC,OAAO,GAAG,OAAO,CAAC;YACvC,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBACd,wEAAwE;gBACxE,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC;oBACxB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC9D,CAAC;YACL,CAAC;QACL,CAAC;QAED,IAAI,IAAuB,CAAC;QAC5B,IAAI,aAAiC,CAAC;QACtC,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAC5E,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACjB,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC,CAAC,CAAC;QAEX,OAAO;YACH,OAAO,EAAE,IAAI;YACb,GAAG,gBAAgB;YACnB,IAAI;YACJ,aAAa;YACb,QAAQ,EAAE,gBAAgB,CAAC,QAAQ;SACtC,CAAC;IAEN,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QACd,IAAI,CAAC,EAAE,OAAO,KAAK,yBAAyB;YAAE,MAAM,CAAC,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,OAAO,IAAI,iCAAiC,CAAC,CAAC;IACrE,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACnC,MAA8E,EAC9E,MAAsB,YAAY;IAElC,IAAI,CAAC;QACD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACpB,OAAO;gBACH,aAAa,EAAE,aAAa,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,OAAO,MAAM;gBACtF,QAAQ,EAAE,CAAC;wBACP,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;wBACzD,UAAU,EAAE,IAAI;wBAChB,aAAa,EAAE,IAAI;wBACnB,aAAa,EAAE,EAAE;qBACpB,CAAC;aACL,CAAC;QACN,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACvC,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,iBAAiB,CAAC;YACpD,OAAO,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE;YAC1B,OAAO,EAAE,MAAM,EAAE,OAAiC;YAClD,SAAS,EAAE,MAAM,EAAE,SAAS,IAAI,EAAE;YAClC,OAAO,EAAE,MAAM,EAAE,OAAO;YACxB,KAAK,EAAE,KAAK;SACf,EAAE,GAAG,CAAC,CAAC;QAER,IAAI,YAAY,CAAC,OAAO,KAAK,KAAK,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;YACvD,MAAM,CAAC,GAAG,CAAC,4BAA4B,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YAC7D,MAAM,IAAI,KAAK,CAAC,mFAAmF,CAAC,CAAC;QACzG,CAAC;QAED,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YAC9G,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC1B,CAAC,CAAC,IAAI,CAAC;QAEX,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAE1D,IAAI,MAAM,GAAsB,IAAI,CAAC;QACrC,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,IAAI,eAAe,GAAG,IAAI,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAEnB,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC;YACf,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC;YACtB,IAAI,OAAO,QAAQ,CAAC,aAAa,KAAK,WAAW,EAAE,CAAC;gBAChD,aAAa,GAAG,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC;gBAChD,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,QAAQ,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;YACjG,CAAC;QACL,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACrB,aAAa,GAAG,IAAI,CAAC;YACrB,eAAe,GAAG,KAAK,CAAC;YACxB,mCAAmC;QACvC,CAAC;QAED,IAAI,CAAC,aAAa,IAAI,eAAe,EAAE,CAAC;YACpC,MAAM,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,CAAC;QAC7B,IAAI,YAAY,CAAC,WAAW,KAAK,SAAS,IAAI,YAAY,CAAC,WAAW,GAAG,eAAe,EAAE,CAAC;YACvF,MAAM,CAAC,GAAG,CAAC,+BAA+B,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;YACtE,MAAM,IAAI,KAAK,CAAC,+DAA+D,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;QACzG,CAAC;QAED,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACzF,OAAO,YAAY,CAAC;IACxB,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QACd,MAAM,CAAC,GAAG,CAAC,iCAAiC,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACxF,IAAI,CAAC,EAAE,OAAO,KAAK,yBAAyB,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,mBAAmB,CAAC;YAAE,MAAM,CAAC,CAAC;QACnG,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,OAAO,IAAI,oCAAoC,CAAC,CAAC;IACxE,CAAC;AACL,CAAC","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 },\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 const hasMrz = authMethods.some(m => m.includes('MRZ'));\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: {\n status: 'SUCCESS',\n document_type: result.selectedDocumentType,\n mrz_type: result.mrzType || 'TD1'\n }\n }\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 let isCardInFrame = true;\n let hasCroppedSides = false;\n console.log(points)\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\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 (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 return { ...detected, croppedBase64, bbox, ...(mrz ? { mrz } : {}) };\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 },\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 logger.log('result object', result)\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: {\n status: 'SUCCESS',\n document_type: result.selectedDocumentType,\n mrz_type: result.mrzType || 'TD1'\n }\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 let isCardInFrame = false;\n let hasCroppedSides = true;\n console.log(points)\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 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 logger.log(\"Framing and Country Template verified successfully. Proceeding to Data Extraction.\");\n\n let extractionResult: any = {};\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\n extractionResult.mrz = mrz; // Attaching securely to result object\n\n } catch (mrzError: any) {\n logger.log(`MRZ échoué: ${mrzError?.message}`);\n // If MRZ fails, we MUST throw an error so the user is forced to retake it!\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\");\n const barcode = await kycService.extractBarcode({ fileUri: result.path!, token: token }, env);\n extractionResult.barcode = barcode;\n } catch (e: any) {\n // Only throw barcode error if MRZ wasn't already successfully extracted\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: { path?: string, docType: string, docRegion: string, postfix: string },\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 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 }, 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 let isCardInFrame = false;\n let hasCroppedSides = true;\n console.log(points)\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 // 🚨 ARTIFICIAL CHECK REMOVED HERE\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 } catch (e: any) {\n logger.log('Errorrr 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 +1 @@
1
- {"version":3,"file":"KYCService.d.ts","sourceRoot":"","sources":["../../../../src/modules/api/KYCService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"KYCService.d.ts","sourceRoot":"","sources":["../../../../src/modules/api/KYCService.ts"],"names":[],"mappings":"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"}
@@ -201,7 +201,6 @@ export class KYCService {
201
201
  }
202
202
  const { fileUri, docType, docRegion, token, postfix } = params;
203
203
  const formData = new FormData();
204
- // ✅ FIX: Dynamically assign the postfix to the filename
205
204
  await appendFileToFormData(formData, 'file', fileUri, `id_card_${postfix}.jpg`, 'image/jpeg');
206
205
  const docTypeShorted = GovernmentDocumentTypeShorted[docType];
207
206
  const url = `${this.mrzServiceURL}/get_template_version/?doc_type=${encodeURIComponent(docTypeShorted)}&doc_region=${encodeURIComponent(docRegion)}&postfix=${postfix}`;
@@ -301,18 +300,10 @@ export class KYCService {
301
300
  };
302
301
  }
303
302
  const { fileUri, docType, docRegion, postfix = 'back', token, template_path, mrz_type } = params;
304
- // 1. Build the FormData ONLY for the file
305
- const formData = new FormData();
306
- const filePayload = {
307
- uri: fileUri,
308
- type: 'image/jpeg',
309
- name: `id_card_${postfix}.jpg`,
310
- };
311
- formData.append('file', filePayload);
303
+ // ... top of extractMrzText (params extraction, etc) ...
312
304
  const docTypeShorted = GovernmentDocumentTypeShorted[docType] || docType;
313
305
  const safeMrzType = mrz_type && mrz_type.trim() !== '' ? mrz_type : 'TD1';
314
306
  logger.log("docTypeShorted", docTypeShorted, docRegion, postfix);
315
- // 🚨 THE FIX: Pass all required text parameters in the URL query string for FastAPI
316
307
  const queryParams = new URLSearchParams({
317
308
  doc_type: docTypeShorted,
318
309
  doc_region: docRegion,
@@ -324,29 +315,55 @@ export class KYCService {
324
315
  const url = `${this.mrzServiceURL}/extract_mrz_text/?${queryParams}`;
325
316
  logger.log("url", url);
326
317
  try {
327
- const response = await fetch(url, {
328
- method: 'POST',
329
- headers: {
330
- 'Authorization': `Bearer ${token}`,
331
- 'Accept': 'application/json'
332
- },
333
- body: formData, // Only the file goes in the body
334
- });
318
+ let response;
319
+ if (Platform.OS === 'web') {
320
+ // 🚨 THE FIX: Completely bypass React Native Web's networking polyfills.
321
+ // We explicitly grab the browser's native APIs so the bundler cannot interfere.
322
+ const nativeFetch = window.fetch;
323
+ const NativeFormData = window.FormData;
324
+ const formData = new NativeFormData();
325
+ // Fetch the Blob natively
326
+ const fileReq = await nativeFetch(fileUri);
327
+ const blob = await fileReq.blob();
328
+ // Append the Blob. The native browser will perfectly handle the multipart boundary.
329
+ formData.append('file', blob, `id_card_${postfix}.jpg`);
330
+ // Execute using Native Fetch!
331
+ response = await nativeFetch(url, {
332
+ method: 'POST',
333
+ headers: {
334
+ 'Authorization': `Bearer ${token}`,
335
+ 'Accept': 'application/json'
336
+ },
337
+ body: formData,
338
+ });
339
+ }
340
+ else {
341
+ // 📱 MOBILE NATIVE: React Native's Native Bridge expects this exact object
342
+ const formData = new FormData();
343
+ const filePayload = {
344
+ uri: fileUri,
345
+ type: 'image/jpeg',
346
+ name: `id_card_${postfix}.jpg`,
347
+ };
348
+ formData.append('file', filePayload);
349
+ response = await fetch(url, {
350
+ method: 'POST',
351
+ headers: {
352
+ 'Authorization': `Bearer ${token}`,
353
+ 'Accept': 'application/json'
354
+ },
355
+ body: formData,
356
+ });
357
+ }
335
358
  if (!response.ok) {
336
359
  const errorText = await response.text();
337
360
  logger.error('Backend MRZ Error Details:', errorText);
338
361
  throw new Error(`Erreur serveur: ${response.status}`);
339
362
  }
340
- // const data = await response.json();
341
- // logger.log('extractMrzText res', JSON.stringify(data, null, 2));
342
- // if (Object.keys(data).length === 0) throw new Error('No data found');
343
- // if (data?.success === false) throw new Error(data.parsed_data?.status || 'Échec de l\'extraction MRZ');
344
- // return data;
345
363
  const data = await response.json();
346
364
  logger.log('extractMrzText res', JSON.stringify(data, null, 2));
347
365
  if (Object.keys(data).length === 0)
348
366
  throw new Error('No data found');
349
- // 🚨 UPDATE THIS LINE to grab the actual status_message:
350
367
  if (data?.success === false) {
351
368
  const serverMessage = data.parsed_data?.status_message || data.parsed_data?.status || 'Échec de l\'extraction MRZ';
352
369
  throw new Error(`Lecture MRZ refusée: ${serverMessage}`);