@sanctum-key/react-native-sdk 1.0.61 → 1.0.62
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/README.md +34 -0
- package/android/build/.transforms/ac63f648699cdd4b91e6ee06476f2a70/results.bin +1 -0
- package/android/build/.transforms/ac63f648699cdd4b91e6ee06476f2a70/transformed/classes/classes_dex/classes.dex +0 -0
- package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml +9 -0
- package/android/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar +0 -0
- package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +1 -1
- package/android/build/intermediates/manifest_merge_blame_file/debug/processDebugManifest/manifest-merger-blame-debug-report.txt +45 -25
- package/android/build/intermediates/merged_manifest/debug/processDebugManifest/AndroidManifest.xml +9 -0
- package/android/build/intermediates/runtime_library_classes_jar/debug/bundleLibRuntimeToJarDebug/classes.jar +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/counters.tab +1 -1
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/last-build.bin +0 -0
- package/android/build/kotlin/compileDebugKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin +0 -0
- package/android/build/kotlin/compileDebugKotlin/local-state/build-history.bin +0 -0
- package/android/build/outputs/logs/manifest-merger-debug-report.txt +34 -12
- package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/SanctumKeySdkModule$BarcodeRegion.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/SanctumKeySdkModule$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$1$6$1.class → SanctumKeySdkModule$definition$1$7$1.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$1$6$2.class → SanctumKeySdkModule$definition$1$7$2.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunction$1.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunction$1.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunction$5.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunction$2.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunction$3.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunction$3.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunction$4.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunction$2.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunction$5.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunction$6.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunction$4.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunction$7.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunction$8.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunction$6.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunction$9.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$1.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunctionWithPromise$1.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$2.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunctionWithPromise$2.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$3.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunctionWithPromise$3.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$4.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunctionWithPromise$4.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$5.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunctionWithPromise$5.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$6.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunctionWithPromise$6.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$7.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunctionWithPromise$7.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$View$1.class → SanctumKeySdkModule$definition$lambda$24$$inlined$View$1.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$lambda$15$$inlined$Prop$1.class → SanctumKeySdkModule$definition$lambda$24$lambda$23$$inlined$Prop$1.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$lambda$15$$inlined$Prop$2.class → SanctumKeySdkModule$definition$lambda$24$lambda$23$$inlined$Prop$2.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/SanctumKeySdkModule.class +0 -0
- package/android/src/main/AndroidManifest.xml +9 -0
- package/android/src/main/java/kyc/sanctumkey/com/SanctumKeySdkModule.kt +147 -0
- package/build/package.json +1 -1
- package/build/src/SanctumKeySdkModule.d.ts +2 -0
- package/build/src/SanctumKeySdkModule.d.ts.map +1 -1
- package/build/src/SanctumKeySdkModule.js.map +1 -1
- package/build/src/SanctumKeySdkModule.web.d.ts +2 -0
- package/build/src/SanctumKeySdkModule.web.d.ts.map +1 -1
- package/build/src/SanctumKeySdkModule.web.js +14 -0
- package/build/src/SanctumKeySdkModule.web.js.map +1 -1
- package/build/src/components/KYCElements/CountrySelection.d.ts.map +1 -1
- package/build/src/components/KYCElements/CountrySelection.js +1 -1
- 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 +27 -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 +46 -28
- package/build/src/components/KYCElements/IDCardCapture.js.map +1 -1
- package/build/src/components/OverLay/IdCard.d.ts +1 -1
- package/build/src/components/OverLay/IdCard.d.ts.map +1 -1
- package/build/src/components/OverLay/IdCard.js +47 -14
- package/build/src/components/OverLay/IdCard.js.map +1 -1
- package/build/src/components/OverLay/type.d.ts +2 -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/Svgs/scanningLine.d.ts +4 -1
- package/build/src/components/Svgs/scanningLine.d.ts.map +1 -1
- package/build/src/components/Svgs/scanningLine.js +15 -11
- package/build/src/components/Svgs/scanningLine.js.map +1 -1
- package/build/src/components/TemplateKYCExample.d.ts +4 -1
- package/build/src/components/TemplateKYCExample.d.ts.map +1 -1
- package/build/src/components/TemplateKYCExample.js +2 -2
- package/build/src/components/TemplateKYCExample.js.map +1 -1
- package/build/src/components/TemplateKYCFlowRefactored.d.ts +4 -2
- package/build/src/components/TemplateKYCFlowRefactored.d.ts.map +1 -1
- package/build/src/components/TemplateKYCFlowRefactored.js +157 -8
- package/build/src/components/TemplateKYCFlowRefactored.js.map +1 -1
- package/build/src/config/region_mapping.d.ts.map +1 -1
- package/build/src/config/region_mapping.js +12 -0
- package/build/src/config/region_mapping.js.map +1 -1
- package/build/src/config/region_mapping.json +12 -0
- package/build/src/index.d.ts +2 -0
- package/build/src/index.d.ts.map +1 -1
- package/build/src/index.js +2 -0
- package/build/src/index.js.map +1 -1
- package/build/src/security/deviceSecurity.d.ts +30 -0
- package/build/src/security/deviceSecurity.d.ts.map +1 -0
- package/build/src/security/deviceSecurity.js +55 -0
- package/build/src/security/deviceSecurity.js.map +1 -0
- package/build/src/utils/logger.d.ts.map +1 -1
- package/build/src/utils/logger.js +5 -0
- package/build/src/utils/logger.js.map +1 -1
- package/ios/SanctumKeySdkModule.swift +93 -0
- package/package.json +1 -1
- package/src/SanctumKeySdkModule.ts +2 -0
- package/src/SanctumKeySdkModule.web.ts +16 -0
- package/src/components/KYCElements/CountrySelection.tsx +3 -1
- package/src/components/KYCElements/CountrySelectionTemplate.tsx +73 -24
- package/src/components/KYCElements/IDCardCapture.tsx +53 -30
- package/src/components/OverLay/IdCard.tsx +72 -15
- package/src/components/OverLay/type.ts +4 -2
- package/src/components/Svgs/scanningLine.tsx +19 -12
- package/src/components/TemplateKYCExample.tsx +8 -1
- package/src/components/TemplateKYCFlowRefactored.tsx +202 -16
- package/src/config/region_mapping.json +12 -0
- package/src/config/region_mapping.ts +12 -0
- package/src/index.ts +9 -1
- package/src/security/deviceSecurity.ts +106 -0
- package/src/utils/logger.ts +5 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { IdCardOverlayProps } from './type';
|
|
3
|
-
declare const IdCardOverlay: ({ cornerOpacity, instructions, stepperProps, isSuccess, language, xMin: xMinPercent, xMax: xMaxPercent, yMin: yMinPercent, yMax: yMaxPercent, }: IdCardOverlayProps & {
|
|
3
|
+
declare const IdCardOverlay: ({ cornerOpacity, instructions, stepperProps, isSuccess, language, mode, xMin: xMinPercent, xMax: xMaxPercent, yMin: yMinPercent, yMax: yMaxPercent, }: IdCardOverlayProps & {
|
|
4
4
|
xMin?: number;
|
|
5
5
|
xMax?: number;
|
|
6
6
|
yMin?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IdCard.d.ts","sourceRoot":"","sources":["../../../../src/components/OverLay/IdCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAsBxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAE5C,QAAA,MAAM,aAAa,GAAI,
|
|
1
|
+
{"version":3,"file":"IdCard.d.ts","sourceRoot":"","sources":["../../../../src/components/OverLay/IdCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAsBxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAE5C,QAAA,MAAM,aAAa,GAAI,uJAWpB,kBAAkB,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,sBAwNrF,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -3,7 +3,7 @@ import { Animated, Platform, SafeAreaView, StatusBar, StyleSheet, Text, View, us
|
|
|
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 IdCardOverlay = ({ cornerOpacity, instructions, stepperProps, isSuccess, language = 'en', xMin: xMinPercent = 5, xMax: xMaxPercent = 95, yMin: yMinPercent = 34, yMax: yMaxPercent = 66, }) => {
|
|
6
|
+
const IdCardOverlay = ({ cornerOpacity, instructions, stepperProps, isSuccess, language = 'en', mode = 'document', xMin: xMinPercent = 5, xMax: xMaxPercent = 95, yMin: yMinPercent = 34, yMax: yMaxPercent = 66, }) => {
|
|
7
7
|
const AnimatedG = Animated.createAnimatedComponent(G);
|
|
8
8
|
// 1. Get baseline window dimensions (fallback for Native mobile)
|
|
9
9
|
const { width: windowWidth, height: windowHeight } = useWindowDimensions();
|
|
@@ -29,15 +29,26 @@ const IdCardOverlay = ({ cornerOpacity, instructions, stepperProps, isSuccess, l
|
|
|
29
29
|
};
|
|
30
30
|
const docTypeFormatted = formatDocType(stepperProps?.selectedDocumentType);
|
|
31
31
|
const sideText = getSideText(stepperProps?.side);
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
:
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
const
|
|
39
|
-
?
|
|
40
|
-
|
|
32
|
+
const isBarcodeMode = mode === 'barcode';
|
|
33
|
+
const bottomTitle = isBarcodeMode
|
|
34
|
+
? (language === 'en' ? 'Center the barcode in the yellow guide' : 'Centrez le code-barres dans le guide jaune')
|
|
35
|
+
: (language === 'en'
|
|
36
|
+
? `Position the ${sideText} of your ${docTypeFormatted}`
|
|
37
|
+
: `Positionnez le ${sideText} de votre ${docTypeFormatted}`);
|
|
38
|
+
const bottomSubtitle = isBarcodeMode
|
|
39
|
+
? (language === 'en'
|
|
40
|
+
? 'Move closer until it almost fills the guide. Keep both ends visible.'
|
|
41
|
+
: 'Rapprochez-vous jusqu’à presque remplir le guide. Gardez les deux extrémités visibles.')
|
|
42
|
+
: (language === 'en'
|
|
43
|
+
? 'Ensure all details are clear and readable.'
|
|
44
|
+
: 'Assurez-vous que tous les détails sont lisibles.');
|
|
45
|
+
const helperText = isBarcodeMode
|
|
46
|
+
? (language === 'en'
|
|
47
|
+
? 'Barcode only • Keep level • Hold steady'
|
|
48
|
+
: 'Code-barres uniquement • Bien droit • Restez stable')
|
|
49
|
+
: (language === 'en'
|
|
50
|
+
? 'No glare • All corners visible • Hold steady'
|
|
51
|
+
: 'Pas de reflets • Coins visibles • Maintenez stable');
|
|
41
52
|
// --- SVG Constants ---
|
|
42
53
|
const CORNER_SIZE = 40;
|
|
43
54
|
const STROKE_WIDTH = 4;
|
|
@@ -64,8 +75,8 @@ const IdCardOverlay = ({ cornerOpacity, instructions, stepperProps, isSuccess, l
|
|
|
64
75
|
<Rect x={xMin} y={yMin} width={boxWidth} height={boxHeight} rx={BORDER_RADIUS} ry={BORDER_RADIUS} fill="black"/>
|
|
65
76
|
</Mask>
|
|
66
77
|
<LinearGradient id="scanBorderGradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
67
|
-
<Stop offset="0%" stopColor=
|
|
68
|
-
<Stop offset="100%" stopColor=
|
|
78
|
+
<Stop offset="0%" stopColor={isBarcodeMode ? '#FDE047' : '#4ADE80'}/>
|
|
79
|
+
<Stop offset="100%" stopColor={isBarcodeMode ? '#F59E0B' : '#22C55E'}/>
|
|
69
80
|
</LinearGradient>
|
|
70
81
|
</Defs>
|
|
71
82
|
|
|
@@ -73,7 +84,9 @@ const IdCardOverlay = ({ cornerOpacity, instructions, stepperProps, isSuccess, l
|
|
|
73
84
|
<Rect x="0" y="0" width={container.width} height={container.height} fill="rgba(0,0,0,0.85)" mask="url(#cameraMask)"/>
|
|
74
85
|
|
|
75
86
|
{/* Main Card Border */}
|
|
76
|
-
<Rect x={xMin} y={yMin} width={boxWidth} height={boxHeight} rx={BORDER_RADIUS} ry={BORDER_RADIUS} stroke={isSuccess ? '#2DBD60' :
|
|
87
|
+
<Rect x={xMin} y={yMin} width={boxWidth} height={boxHeight} rx={BORDER_RADIUS} ry={BORDER_RADIUS} stroke={isSuccess ? '#2DBD60' : (isBarcodeMode ? 'rgba(250, 204, 21, 0.8)' : 'rgba(255,255,255,0.25)')} strokeWidth={isSuccess || isBarcodeMode ? 3 : 1.5} fill="transparent"/>
|
|
88
|
+
|
|
89
|
+
{isBarcodeMode && (<Rect x={xMin + 8} y={yMin + 8} width={Math.max(0, boxWidth - 16)} height={Math.max(0, boxHeight - 16)} rx={Math.max(4, BORDER_RADIUS - 6)} ry={Math.max(4, BORDER_RADIUS - 6)} stroke="rgba(253, 224, 71, 0.45)" strokeWidth={1} strokeDasharray="8 7" fill="transparent"/>)}
|
|
77
90
|
|
|
78
91
|
{/* Professional Corner Guides */}
|
|
79
92
|
<AnimatedG opacity={cornerOpacity || 1}>
|
|
@@ -89,7 +102,11 @@ const IdCardOverlay = ({ cornerOpacity, instructions, stepperProps, isSuccess, l
|
|
|
89
102
|
</Svg>
|
|
90
103
|
|
|
91
104
|
{/* Scanning animation */}
|
|
92
|
-
{!isSuccess && (<ScanningLine yMin={yMin} yMax={yMax} screenWidth={container.width} height={container.height}/>)}
|
|
105
|
+
{!isSuccess && (<ScanningLine yMin={yMin} yMax={yMax} screenWidth={container.width} height={container.height} xMin={isBarcodeMode ? xMin : 0} xMax={isBarcodeMode ? xMax : undefined} color={isBarcodeMode ? '#FACC15' : '#22C55E'}/>)}
|
|
106
|
+
|
|
107
|
+
{isBarcodeMode && (<View style={[styles.barcodeFrameLabel, { left: xMin, top: Math.max(8, yMin - 34) }]} pointerEvents="none">
|
|
108
|
+
<Text style={styles.barcodeFrameLabelText}>{language === 'en' ? 'BARCODE TARGET' : 'ZONE CODE-BARRES'}</Text>
|
|
109
|
+
</View>)}
|
|
93
110
|
|
|
94
111
|
{/* Top UI Zone */}
|
|
95
112
|
<View style={[styles.topZone, { height: yMin }]} pointerEvents="box-none">
|
|
@@ -191,5 +208,21 @@ const styles = StyleSheet.create({
|
|
|
191
208
|
fontSize: 12,
|
|
192
209
|
fontWeight: '500',
|
|
193
210
|
},
|
|
211
|
+
barcodeFrameLabel: {
|
|
212
|
+
position: 'absolute',
|
|
213
|
+
zIndex: 12,
|
|
214
|
+
backgroundColor: 'rgba(15, 23, 42, 0.82)',
|
|
215
|
+
borderWidth: 1,
|
|
216
|
+
borderColor: 'rgba(250, 204, 21, 0.55)',
|
|
217
|
+
borderRadius: 6,
|
|
218
|
+
paddingHorizontal: 8,
|
|
219
|
+
paddingVertical: 4,
|
|
220
|
+
},
|
|
221
|
+
barcodeFrameLabelText: {
|
|
222
|
+
color: '#FDE047',
|
|
223
|
+
fontSize: 10,
|
|
224
|
+
fontWeight: '800',
|
|
225
|
+
letterSpacing: 1.2,
|
|
226
|
+
},
|
|
194
227
|
});
|
|
195
228
|
//# sourceMappingURL=IdCard.js.map
|
|
@@ -1 +1 @@
|
|
|
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
|
+
{"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 mode = 'document',\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 const isBarcodeMode = mode === 'barcode';\n\n const bottomTitle = isBarcodeMode\n ? (language === 'en' ? 'Center the barcode in the yellow guide' : 'Centrez le code-barres dans le guide jaune')\n : (language === 'en'\n ? `Position the ${sideText} of your ${docTypeFormatted}`\n : `Positionnez le ${sideText} de votre ${docTypeFormatted}`);\n\n const bottomSubtitle = isBarcodeMode\n ? (language === 'en'\n ? 'Move closer until it almost fills the guide. Keep both ends visible.'\n : 'Rapprochez-vous jusqu’à presque remplir le guide. Gardez les deux extrémités visibles.')\n : (language === 'en'\n ? 'Ensure all details are clear and readable.'\n : 'Assurez-vous que tous les détails sont lisibles.');\n\n const helperText = isBarcodeMode\n ? (language === 'en'\n ? 'Barcode only • Keep level • Hold steady'\n : 'Code-barres uniquement • Bien droit • Restez stable')\n : (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={isBarcodeMode ? '#FDE047' : '#4ADE80'} />\n <Stop offset=\"100%\" stopColor={isBarcodeMode ? '#F59E0B' : '#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' : (isBarcodeMode ? 'rgba(250, 204, 21, 0.8)' : 'rgba(255,255,255,0.25)')}\n strokeWidth={isSuccess || isBarcodeMode ? 3 : 1.5}\n fill=\"transparent\"\n />\n\n {isBarcodeMode && (\n <Rect\n x={xMin + 8}\n y={yMin + 8}\n width={Math.max(0, boxWidth - 16)}\n height={Math.max(0, boxHeight - 16)}\n rx={Math.max(4, BORDER_RADIUS - 6)}\n ry={Math.max(4, BORDER_RADIUS - 6)}\n stroke=\"rgba(253, 224, 71, 0.45)\"\n strokeWidth={1}\n strokeDasharray=\"8 7\"\n fill=\"transparent\"\n />\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\n yMin={yMin}\n yMax={yMax}\n screenWidth={container.width}\n height={container.height}\n xMin={isBarcodeMode ? xMin : 0}\n xMax={isBarcodeMode ? xMax : undefined}\n color={isBarcodeMode ? '#FACC15' : '#22C55E'}\n />\n )}\n\n {isBarcodeMode && (\n <View style={[styles.barcodeFrameLabel, { left: xMin, top: Math.max(8, yMin - 34) }]} pointerEvents=\"none\">\n <Text style={styles.barcodeFrameLabelText}>{language === 'en' ? 'BARCODE TARGET' : 'ZONE CODE-BARRES'}</Text>\n </View>\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 barcodeFrameLabel: {\n position: 'absolute',\n zIndex: 12,\n backgroundColor: 'rgba(15, 23, 42, 0.82)',\n borderWidth: 1,\n borderColor: 'rgba(250, 204, 21, 0.55)',\n borderRadius: 6,\n paddingHorizontal: 8,\n paddingVertical: 4,\n },\n barcodeFrameLabelText: {\n color: '#FDE047',\n fontSize: 10,\n fontWeight: '800',\n letterSpacing: 1.2,\n },\n});\n"]}
|
|
@@ -15,6 +15,8 @@ export interface IdCardOverlayProps {
|
|
|
15
15
|
isAnalyzing?: boolean;
|
|
16
16
|
isSuccess?: boolean;
|
|
17
17
|
language: string;
|
|
18
|
+
/** Changes the guide geometry and copy for the dedicated barcode phase. */
|
|
19
|
+
mode?: 'document' | 'barcode';
|
|
18
20
|
}
|
|
19
21
|
interface StepperProps {
|
|
20
22
|
back: () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../../../src/components/OverLay/type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,WAAW,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IAC1C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../../../src/components/OverLay/type.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../../../src/components/OverLay/type.ts"],"names":[],"mappings":"","sourcesContent":["import { ViewStyle } from \"react-native\";\nimport { ISilentCaptureResult } from \"../../types/KYC.types\";\n\nexport interface IdCardOverlayProps {\n xMin: number;\n yMin: number;\n xMax: number;\n yMax: number;\n cornerOpacity: number;\n instructions: string;\n cornerColor?: string;\n stepperProps?: StepperProps;\n instructionsTile?: string;\n instructionsSubtitle?: string;\n orientation?: 'center' | 'left' | 'right';\n isAnalyzing?: boolean;\n isSuccess?: boolean;\n language: string
|
|
1
|
+
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../../../src/components/OverLay/type.ts"],"names":[],"mappings":"","sourcesContent":["import { ViewStyle } from \"react-native\";\nimport { ISilentCaptureResult } from \"../../types/KYC.types\";\n\nexport interface IdCardOverlayProps {\n xMin: number;\n yMin: number;\n xMax: number;\n yMax: number;\n cornerOpacity: number;\n instructions: string;\n cornerColor?: string;\n stepperProps?: StepperProps;\n instructionsTile?: string;\n instructionsSubtitle?: string;\n orientation?: 'center' | 'left' | 'right';\n isAnalyzing?: boolean;\n isSuccess?: boolean;\n language: string;\n /** Changes the guide geometry and copy for the dedicated barcode phase. */\n mode?: 'document' | 'barcode';\n}\n\n\ninterface StepperProps {\n back: () => void;\n selectedDocumentType: string;\n step: number;\n totalSteps: number;\n side: string;\n}\n\nexport interface ExtractMrzTextResponse {\n parsed_data: {\n mrz_type: string;\n document_code: string;\n issuer_code: string;\n surname: string;\n given_name: string;\n document_number: string;\n document_number_checkdigit: string;\n nationality_code: string;\n birth_date: string;\n sex: string;\n expiry_date: string;\n optional_data: string;\n mrz_text: string;\n status: string;\n },\n success: boolean;\n}\n\n\n\nexport interface EnhancedCameraViewProps {\n instructions?: string;\n showCamera: boolean;\n cameraType?: 'front' | 'back';\n style?: ViewStyle;\n onCapture?: (result: { success: boolean; path?: string; error?: string }) => void;\n onSilentCapture?: (result: { success: boolean; path?: string; error?: string; barcode:unknown }) => void;\n silentCaptureResult?: ISilentCaptureResult;\n onError?: (error: { \n message: string; \n name?: string;\n code?: string;\n }) => void;\n onClose?: () => void;\n enableFlash?: boolean;\n enableHdr?: boolean;\n quality?: 'low' | 'medium' | 'high';\n showCaptureButton?: boolean;\n showSwitchCamera?: boolean;\n overlayComponent?: React.ReactNode;\n isProcessing?: boolean; \n bbox?: {\n xMin: number;\n yMin: number;\n xMax: number;\n yMax: number;\n borderColor?: string;\n borderWidth?: number;\n cornerRadius?: number;\n };\n canFlip?: boolean;\n // Video recording props\n enableVideo?: boolean;\n isRecording?: boolean;\n onVideoRecordingStart?: () => void;\n onVideoRecordingStop?: (result: { success: boolean; path?: string; error?: string }) => void;\n videoDuration?: number;\n /** Delay in ms before first auto-capture (lets camera focus and user position document). Recommended 2500–3000 for ID/document capture. */\n captureStabilizationDelayMs?: number;\n}\n\nexport interface CheckTemplateTypeResponse {\n template_path: string;\n lpips_score: number;\n}\n"]}
|
|
@@ -4,7 +4,10 @@ interface ScanningLineProps {
|
|
|
4
4
|
yMax: number;
|
|
5
5
|
screenWidth: number;
|
|
6
6
|
height: number;
|
|
7
|
+
xMin?: number;
|
|
8
|
+
xMax?: number;
|
|
9
|
+
color?: string;
|
|
7
10
|
}
|
|
8
|
-
declare const ScanningLine: ({ yMin, yMax, screenWidth, height }: ScanningLineProps) => React.ReactElement;
|
|
11
|
+
declare const ScanningLine: ({ yMin, yMax, screenWidth, height, xMin, xMax, color }: ScanningLineProps) => React.ReactElement;
|
|
9
12
|
export default ScanningLine;
|
|
10
13
|
//# sourceMappingURL=scanningLine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanningLine.d.ts","sourceRoot":"","sources":["../../../../src/components/Svgs/scanningLine.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAIjD,UAAU,iBAAiB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,QAAA,MAAM,YAAY,GAAI,
|
|
1
|
+
{"version":3,"file":"scanningLine.d.ts","sourceRoot":"","sources":["../../../../src/components/Svgs/scanningLine.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAIjD,UAAU,iBAAiB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,QAAA,MAAM,YAAY,GAAI,wDAAwE,iBAAiB,KAAG,KAAK,CAAC,YAoEvH,CAAC;AAWF,eAAe,YAAY,CAAC"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import React, { useEffect, useRef } from 'react';
|
|
2
2
|
import { Animated, Easing, StyleSheet } from 'react-native';
|
|
3
3
|
import Svg, { LinearGradient, Rect, Stop, Defs } from 'react-native-svg';
|
|
4
|
-
const ScanningLine = ({ yMin, yMax, screenWidth, height }) => {
|
|
4
|
+
const ScanningLine = ({ yMin, yMax, screenWidth, height, xMin = 0, xMax, color = '#22C55E' }) => {
|
|
5
5
|
const animatedValue = useRef(new Animated.Value(0)).current;
|
|
6
6
|
const boxHeight = yMax - yMin;
|
|
7
|
+
const lineWidth = Math.max(0, (xMax ?? screenWidth) - xMin);
|
|
8
|
+
const glowHeight = Math.min(40, Math.max(12, boxHeight * 0.3));
|
|
9
|
+
const scanEnd = Math.max(yMin, yMax - glowHeight - 4);
|
|
7
10
|
useEffect(() => {
|
|
8
11
|
const startAnimation = () => {
|
|
9
12
|
animatedValue.setValue(0);
|
|
@@ -21,35 +24,36 @@ const ScanningLine = ({ yMin, yMax, screenWidth, height }) => {
|
|
|
21
24
|
}, [animatedValue, boxHeight]);
|
|
22
25
|
const translateY = animatedValue.interpolate({
|
|
23
26
|
inputRange: [0, 0.5, 1],
|
|
24
|
-
outputRange: [yMin,
|
|
27
|
+
outputRange: [yMin, scanEnd, yMin],
|
|
25
28
|
});
|
|
26
29
|
return (<Animated.View style={[
|
|
27
30
|
styles.container,
|
|
28
31
|
{
|
|
29
|
-
|
|
32
|
+
left: xMin,
|
|
33
|
+
width: lineWidth,
|
|
30
34
|
height: height,
|
|
31
35
|
transform: [{ translateY }],
|
|
32
36
|
},
|
|
33
37
|
]} pointerEvents="none">
|
|
34
|
-
<Svg height="4" width={
|
|
38
|
+
<Svg height="4" width={lineWidth}>
|
|
35
39
|
<Defs>
|
|
36
40
|
<LinearGradient id="grad" x1="0%" y1="0%" x2="100%" y2="0%">
|
|
37
41
|
<Stop offset="0%" stopColor="transparent" stopOpacity="0"/>
|
|
38
|
-
<Stop offset="50%" stopColor=
|
|
42
|
+
<Stop offset="50%" stopColor={color} stopOpacity="1"/>
|
|
39
43
|
<Stop offset="100%" stopColor="transparent" stopOpacity="0"/>
|
|
40
44
|
</LinearGradient>
|
|
41
45
|
</Defs>
|
|
42
|
-
<Rect x="0" y="0" width={
|
|
46
|
+
<Rect x="0" y="0" width={lineWidth} height="4" fill="url(#grad)"/>
|
|
43
47
|
</Svg>
|
|
44
48
|
|
|
45
|
-
<Svg height=
|
|
49
|
+
<Svg height={glowHeight} width={lineWidth} style={{ marginTop: -2 }}>
|
|
46
50
|
<Defs>
|
|
47
51
|
<LinearGradient id="glow" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
48
|
-
<Stop offset="0%" stopColor=
|
|
49
|
-
<Stop offset="100%" stopColor=
|
|
52
|
+
<Stop offset="0%" stopColor={color} stopOpacity="0.4"/>
|
|
53
|
+
<Stop offset="100%" stopColor={color} stopOpacity="0"/>
|
|
50
54
|
</LinearGradient>
|
|
51
|
-
|
|
52
|
-
<Rect x="0" y="0" width={
|
|
55
|
+
</Defs>
|
|
56
|
+
<Rect x="0" y="0" width={lineWidth} height={glowHeight} fill="url(#glow)"/>
|
|
53
57
|
</Svg>
|
|
54
58
|
</Animated.View>);
|
|
55
59
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanningLine.js","sourceRoot":"","sources":["../../../../src/components/Svgs/scanningLine.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,GAAG,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"scanningLine.js","sourceRoot":"","sources":["../../../../src/components/Svgs/scanningLine.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,GAAG,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAYzE,MAAM,YAAY,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,SAAS,EAAqB,EAAsB,EAAE;IACnI,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAE5D,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC;IAEtD,SAAS,CAAC,GAAG,EAAE;QACX,MAAM,cAAc,GAAG,GAAG,EAAE;YACxB,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC1B,QAAQ,CAAC,IAAI,CACT,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE;gBAC3B,OAAO,EAAE,CAAC;gBACV,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,eAAe,EAAE,IAAI;aACxB,CAAC,CACL,CAAC,KAAK,EAAE,CAAC;QACd,CAAC,CAAC;QAEF,cAAc,EAAE,CAAC;QAEjB,OAAO,GAAG,EAAE;YACR,aAAa,CAAC,aAAa,EAAE,CAAC;QAClC,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC;IAE/B,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC;QACzC,UAAU,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QACvB,WAAW,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;KACrC,CAAC,CAAC;IAEH,OAAO,CACH,CAAC,QAAQ,CAAC,IAAI,CACV,KAAK,CAAC,CAAC;YACH,MAAM,CAAC,SAAS;YAChB;gBACI,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,MAAM;gBACd,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;aAC9B;SACJ,CAAC,CACF,aAAa,CAAC,MAAM,CAEpB;YAAA,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAC7B;gBAAA,CAAC,IAAI,CACD;oBAAA,CAAC,cAAc,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CACvD;wBAAA,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,EACzD;wBAAA,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,EACpD;wBAAA,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,EAC/D;oBAAA,EAAE,cAAc,CACpB;gBAAA,EAAE,IAAI,CACN;gBAAA,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EACpE;YAAA,EAAE,GAAG,CAEL;;YAAA,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAC/D;iBAAA,CAAC,IAAI,CACF;oBAAA,CAAC,cAAc,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CACvD;wBAAA,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,KAAK,EACrD;wBAAA,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,EACzD;oBAAA,EAAE,cAAc,CACnB;iBAAA,EAAE,IAAI,CACP;gBAAA,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,YAAY,EAC7E;YAAA,EAAE,GAAG,CACT;QAAA,EAAE,QAAQ,CAAC,IAAI,CAAC,CACnB,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC7B,SAAS,EAAE;QACP,QAAQ,EAAE,UAAU;QACpB,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,CAAC;QACP,MAAM,EAAE,EAAE;KACb;CACJ,CAAC,CAAC;AAEH,eAAe,YAAY,CAAC","sourcesContent":["import React, { useEffect, useRef } from 'react';\nimport { Animated, Easing, StyleSheet } from 'react-native';\nimport Svg, { LinearGradient, Rect, Stop, Defs } from 'react-native-svg';\n\ninterface ScanningLineProps {\n yMin: number;\n yMax: number;\n screenWidth: number;\n height: number;\n xMin?: number;\n xMax?: number;\n color?: string;\n}\n\nconst ScanningLine = ({ yMin, yMax, screenWidth, height, xMin = 0, xMax, color = '#22C55E' }: ScanningLineProps): React.ReactElement => {\n const animatedValue = useRef(new Animated.Value(0)).current;\n\n const boxHeight = yMax - yMin;\n const lineWidth = Math.max(0, (xMax ?? screenWidth) - xMin);\n const glowHeight = Math.min(40, Math.max(12, boxHeight * 0.3));\n const scanEnd = Math.max(yMin, yMax - glowHeight - 4);\n\n useEffect(() => {\n const startAnimation = () => {\n animatedValue.setValue(0);\n Animated.loop(\n Animated.timing(animatedValue, {\n toValue: 1,\n duration: 2500, \n easing: Easing.linear,\n useNativeDriver: true,\n })\n ).start();\n };\n\n startAnimation();\n \n return () => {\n animatedValue.stopAnimation();\n };\n }, [animatedValue, boxHeight]);\n\n const translateY = animatedValue.interpolate({\n inputRange: [0, 0.5, 1],\n outputRange: [yMin, scanEnd, yMin],\n });\n\n return (\n <Animated.View\n style={[\n styles.container,\n {\n left: xMin,\n width: lineWidth,\n height: height,\n transform: [{ translateY }],\n },\n ]}\n pointerEvents=\"none\"\n >\n <Svg height=\"4\" width={lineWidth}>\n <Defs>\n <LinearGradient id=\"grad\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\n <Stop offset=\"0%\" stopColor=\"transparent\" stopOpacity=\"0\" />\n <Stop offset=\"50%\" stopColor={color} stopOpacity=\"1\" />\n <Stop offset=\"100%\" stopColor=\"transparent\" stopOpacity=\"0\" />\n </LinearGradient>\n </Defs>\n <Rect x=\"0\" y=\"0\" width={lineWidth} height=\"4\" fill=\"url(#grad)\" />\n </Svg>\n \n <Svg height={glowHeight} width={lineWidth} style={{ marginTop: -2 }}>\n <Defs>\n <LinearGradient id=\"glow\" x1=\"0%\" y1=\"0%\" x2=\"0%\" y2=\"100%\">\n <Stop offset=\"0%\" stopColor={color} stopOpacity=\"0.4\" />\n <Stop offset=\"100%\" stopColor={color} stopOpacity=\"0\" />\n </LinearGradient>\n </Defs>\n <Rect x=\"0\" y=\"0\" width={lineWidth} height={glowHeight} fill=\"url(#glow)\" />\n </Svg>\n </Animated.View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n position: 'absolute',\n top: 0,\n left: 0,\n zIndex: 10,\n },\n});\n\nexport default ScanningLine;\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { JSX } from 'react';
|
|
2
2
|
import { KYCTemplate, VerificationState } from '../types/KYC.types';
|
|
3
3
|
import { KycEnvironment, BackendEnvironment } from '../types/env.types';
|
|
4
|
+
import type { DeviceSecurityCheckResult, DeviceSecurityPolicy } from '../security/deviceSecurity';
|
|
4
5
|
export interface TemplateKYCExampleProps {
|
|
5
6
|
onComplete: (data: VerificationState) => void;
|
|
6
7
|
onCancel: () => void;
|
|
@@ -23,6 +24,8 @@ export interface TemplateKYCExampleProps {
|
|
|
23
24
|
onSessionSave?: (sessionId: string) => void;
|
|
24
25
|
kyc_session_id?: string;
|
|
25
26
|
templateConfig?: Record<string, string>;
|
|
27
|
+
deviceSecurityPolicy?: DeviceSecurityPolicy;
|
|
28
|
+
onDeviceSecurityCheck?: (result: DeviceSecurityCheckResult) => void;
|
|
26
29
|
}
|
|
27
|
-
export declare function TemplateKYCExample({ onComplete, onCancel, onError, language, API_KEY, TEST_API_KEY, templateId, template, env, serverEnv, existingSessionId, initialComponentIndex, initialCountryResume, referenceId, onSessionSave, kyc_session_id, templateConfig, }: TemplateKYCExampleProps): JSX.Element;
|
|
30
|
+
export declare function TemplateKYCExample({ onComplete, onCancel, onError, language, API_KEY, TEST_API_KEY, templateId, template, env, serverEnv, existingSessionId, initialComponentIndex, initialCountryResume, referenceId, onSessionSave, kyc_session_id, templateConfig, deviceSecurityPolicy, onDeviceSecurityCheck, }: TemplateKYCExampleProps): JSX.Element;
|
|
28
31
|
//# sourceMappingURL=TemplateKYCExample.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TemplateKYCExample.d.ts","sourceRoot":"","sources":["../../../src/components/TemplateKYCExample.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAGnC,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"TemplateKYCExample.d.ts","sourceRoot":"","sources":["../../../src/components/TemplateKYCExample.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAGnC,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExE,OAAO,KAAK,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAuClG,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC9C,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,oBAAoB,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,qBAAqB,CAAC,EAAE,CAAC,MAAM,EAAE,yBAAyB,KAAK,IAAI,CAAC;CACrE;AAED,wBAAgB,kBAAkB,CAAC,EACjC,UAAU,EACV,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,GAAkB,EAClB,SAAS,EACT,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,WAAW,EACX,aAAa,EACb,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,qBAAqB,GACtB,EAAE,uBAAuB,GAAG,GAAG,CAAC,OAAO,CA6FvC"}
|
|
@@ -38,7 +38,7 @@ const advancedVerificationTemplate = {
|
|
|
38
38
|
},
|
|
39
39
|
]
|
|
40
40
|
};
|
|
41
|
-
export function TemplateKYCExample({ onComplete, onCancel, onError, language, API_KEY, TEST_API_KEY, templateId, template, env = 'PRODUCTION', serverEnv, existingSessionId, initialComponentIndex, initialCountryResume, referenceId, onSessionSave, kyc_session_id, templateConfig, }) {
|
|
41
|
+
export function TemplateKYCExample({ onComplete, onCancel, onError, language, API_KEY, TEST_API_KEY, templateId, template, env = 'PRODUCTION', serverEnv, existingSessionId, initialComponentIndex, initialCountryResume, referenceId, onSessionSave, kyc_session_id, templateConfig, deviceSecurityPolicy, onDeviceSecurityCheck, }) {
|
|
42
42
|
const handleComplete = (data) => {
|
|
43
43
|
console.log('KYC Template completed with raw data:', data);
|
|
44
44
|
let finalPayload = data; // Fallback to raw data if mapping fails
|
|
@@ -93,7 +93,7 @@ export function TemplateKYCExample({ onComplete, onCancel, onError, language, AP
|
|
|
93
93
|
const templateToUse = templateId ? undefined : (template || advancedVerificationTemplate);
|
|
94
94
|
return (<SafeAreaView style={{ flex: 1, paddingVertical: 25 }}>
|
|
95
95
|
<View style={{ flex: 1 }}>
|
|
96
|
-
<TemplateKYCFlow template={templateToUse} templateId={templateId} templateConfig={templateConfig} onComplete={handleComplete} onError={handleError} onCancel={handleCancel} language={language} API_KEY={API_KEY} TEST_API_KEY={TEST_API_KEY} env={env} serverEnv={serverEnv} existingSessionId={existingSessionId} initialComponentIndex={initialComponentIndex} initialCountryResume={initialCountryResume} referenceId={referenceId} onSessionSave={onSessionSave} kyc_session_id={kyc_session_id}/>
|
|
96
|
+
<TemplateKYCFlow template={templateToUse} templateId={templateId} templateConfig={templateConfig} onComplete={handleComplete} onError={handleError} onCancel={handleCancel} language={language} API_KEY={API_KEY} TEST_API_KEY={TEST_API_KEY} env={env} serverEnv={serverEnv} existingSessionId={existingSessionId} initialComponentIndex={initialComponentIndex} initialCountryResume={initialCountryResume} referenceId={referenceId} onSessionSave={onSessionSave} kyc_session_id={kyc_session_id} deviceSecurityPolicy={deviceSecurityPolicy} onDeviceSecurityCheck={onDeviceSecurityCheck}/>
|
|
97
97
|
</View>
|
|
98
98
|
</SafeAreaView>);
|
|
99
99
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TemplateKYCExample.js","sourceRoot":"","sources":["../../../src/components/TemplateKYCExample.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { JSX } from 'react';\nimport { View, SafeAreaView } from 'react-native';\nimport { TemplateKYCFlow } from './TemplateKYCFlowRefactored';\nimport { KYCTemplate, VerificationState } from '../types/KYC.types';\nimport { KycEnvironment, BackendEnvironment } from '../types/env.types';\nimport { sdkLogger } from '../utils/logger'; // 🚨 IMPORT SDK LOGGER\n\nconst advancedVerificationTemplate: KYCTemplate = {\n id: 1,\n name: { en: \"Advanced Verification\", fr: \"Vérification Avancée\" },\n description: { en: \"Extended identity verification flow\", fr: \"Processus de vérification d'identité étendu\" },\n version: \"1.1.0\",\n components: [\n {\n id: 5, type: \"location\" as const, order: 1,\n labels: { en: \"Enable your location\", fr: \"Activez votre localisation\" },\n instructions: { en: \"We need your GPS location for compliance purposes.\", fr: \"Nous avons besoin de votre localisation GPS pour des raisons réglementaires.\" },\n ui: { icon: \"location-icon.png\", themeColor: \"#2DBD60\", buttonText: { en: \"Enable Location\", fr: \"Activer la localisation\" } },\n config: { accuracy: \"high\", required: true } as const\n },\n {\n id: 6, type: \"country_selection\" as const, order: 2,\n labels: { en: \"Select your country\", fr: \"Sélectionnez votre pays\" },\n instructions: { en: \"Choose your country of residence.\", fr: \"Choisissez votre pays de résidence.\" },\n ui: { icon: \"country-icon.png\", themeColor: \"#2DBD60\", buttonText: { en: \"Confirm\", fr: \"Confirmer\" } },\n config: { allowed_countries: [\"CM\", \"NG\", \"CI\", \"KE\", \"GH\"], default_country: \"CM\", required: true } as const\n },\n {\n id: 1, type: \"id_card\" as const, order: 3, templateId: 1,\n labels: { front: { en: \"Upload front of ID card\", fr: \"Téléversez le recto de votre carte d'identité\" }, back: { en: \"Upload back of ID card\", fr: \"Téléversez le verso de votre carte d'identité\" }, },\n instructions: { front: { en: \"Take a clear photo of the front of your ID.\", fr: \"Prenez une photo nette du recto de votre pièce.\" }, back: { en: \"Take a clear photo of the back of your ID.\", fr: \"Prenez une photo nette du verso de votre pièce.\" }, },\n ui: { front: { icon: \"id-card-icon.png\", themeColor: \"#2DBD60\", buttonText: { en: \"Next\", fr: \"Suivant\" } }, back: { icon: \"id-card-icon.png\", themeColor: \"#2DBD60\", buttonText: { en: \"Next\", fr: \"Suivant\" } }, },\n config: { sides: [\"front\", \"back\"], allowed_formats: [\"jpg\", \"png\"], max_size_mb: 5, document_types: [\"drivers_licence\", \"passport\", \"drivers_licence\", \"national_id\"], } as const\n },\n {\n id: 3, type: \"selfie\" as const, order: 5, templateId: 1,\n labels: { en: \"Take selfies from different angles\", fr: \"Prenez des selfies sous différents angles\" },\n instructions: { en: \"Take selfies from front, left, and right angles.\", fr: \"Prenez des selfies de face, profil gauche et profil droit.\" },\n ui: { icon: \"selfie-icon.png\", themeColor: \"#2DBD60\", buttonText: { en: \"Next\", fr: \"Suivant\" } },\n config: { liveness_check: true, max_attempts: 3, orientations: [\"center\", \"left\", \"right\"] } as const\n },\n ]\n};\n\nexport interface TemplateKYCExampleProps {\n onComplete: (data: VerificationState) => void;\n onCancel: () => void;\n onError: (error: string) => void;\n language: string;\n API_KEY?: string;\n TEST_API_KEY?: string;\n templateId?: string;\n template?: KYCTemplate;\n env?: KycEnvironment;\n serverEnv?: BackendEnvironment;\n existingSessionId?: string;\n initialComponentIndex?: number;\n initialCountryResume?: { code: string; documentType: string; region?: string };\n referenceId?: string;\n onSessionSave?: (sessionId: string) => void;\n kyc_session_id?: string;\n templateConfig?: Record<string, string>;\n}\n\nexport function TemplateKYCExample({\n onComplete,\n onCancel,\n onError,\n language,\n API_KEY,\n TEST_API_KEY,\n templateId,\n template,\n env = 'PRODUCTION',\n serverEnv,\n existingSessionId,\n initialComponentIndex,\n initialCountryResume,\n referenceId,\n onSessionSave,\n kyc_session_id,\n templateConfig,\n}: TemplateKYCExampleProps): JSX.Element {\n\n const handleComplete = (data: VerificationState) => {\n console.log('KYC Template completed with raw data:', data);\n\n let finalPayload: any = data; // Fallback to raw data if mapping fails\n\n if ((data.status === 'success' || data.status === 'in_progress') && data.result) {\n \n const backendData = data.result.data;\n\n if (backendData) {\n const personalInfo = backendData.user_data?.personal_information || {};\n const activeSessionId = kyc_session_id || existingSessionId || backendData.session_id || \"\";\n \n \n const docType = (backendData as any).document_type || (backendData as any).documentType;\n\n finalPayload = {\n data: {\n document_type: docType,\n verification_id: backendData.verification_id,\n verification_status: backendData.verification_status,\n session_id: activeSessionId,\n user_data: {\n personal_information: {\n first_name: personalInfo.first_name || personalInfo.given_name || undefined,\n last_name: personalInfo.last_name || personalInfo.surname || undefined,\n given_name: personalInfo.given_name || undefined,\n surname: personalInfo.surname || undefined, \n address: personalInfo.address || undefined,\n expiry_date: personalInfo.expiry_date || undefined,\n issue_date: personalInfo.issue_date || undefined,\n date_of_birth: personalInfo.date_of_birth || personalInfo.birth_date || undefined,\n birth_date: personalInfo.birth_date || undefined,\n document_number: personalInfo.document_number || undefined,\n nationality: personalInfo.nationality || undefined,\n sex: personalInfo.sex || undefined,\n }\n }\n }\n };\n\n sdkLogger.info(\"Wrapper formatteddddd completion payload successfully\", { \n data: finalPayload \n });\n }\n } else {\n sdkLogger.warn(\"Wrapper received completion without a success result object\", { status: data.status });\n }\n\n onComplete(finalPayload); \n};\n\n const handleCancel = () => {\n console.log('KYC Template flow cancelled');\n onCancel();\n };\n\n const handleError = (error: string) => {\n sdkLogger.error('KYC Template error:', error);\n onError(error);\n };\n\n const templateToUse = templateId ? undefined : (template || advancedVerificationTemplate);\n\n return (\n <SafeAreaView style={{ flex: 1, paddingVertical: 25 }}>\n <View style={{ flex: 1 }}>\n <TemplateKYCFlow\n template={templateToUse}\n templateId={templateId}\n templateConfig={templateConfig}\n onComplete={handleComplete}\n onError={handleError}\n onCancel={handleCancel}\n language={language}\n API_KEY={API_KEY}\n TEST_API_KEY={TEST_API_KEY}\n env={env}\n serverEnv={serverEnv}\n existingSessionId={existingSessionId}\n initialComponentIndex={initialComponentIndex}\n initialCountryResume={initialCountryResume}\n referenceId={referenceId}\n onSessionSave={onSessionSave}\n kyc_session_id={kyc_session_id}\n />\n </View>\n </SafeAreaView>\n );\n}"]}
|
|
1
|
+
{"version":3,"file":"TemplateKYCExample.js","sourceRoot":"","sources":["../../../src/components/TemplateKYCExample.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { JSX } from 'react';\nimport { View, SafeAreaView } from 'react-native';\nimport { TemplateKYCFlow } from './TemplateKYCFlowRefactored';\nimport { KYCTemplate, VerificationState } from '../types/KYC.types';\nimport { KycEnvironment, BackendEnvironment } from '../types/env.types';\nimport { sdkLogger } from '../utils/logger'; // 🚨 IMPORT SDK LOGGER\nimport type { DeviceSecurityCheckResult, DeviceSecurityPolicy } from '../security/deviceSecurity';\n\nconst advancedVerificationTemplate: KYCTemplate = {\n id: 1,\n name: { en: \"Advanced Verification\", fr: \"Vérification Avancée\" },\n description: { en: \"Extended identity verification flow\", fr: \"Processus de vérification d'identité étendu\" },\n version: \"1.1.0\",\n components: [\n {\n id: 5, type: \"location\" as const, order: 1,\n labels: { en: \"Enable your location\", fr: \"Activez votre localisation\" },\n instructions: { en: \"We need your GPS location for compliance purposes.\", fr: \"Nous avons besoin de votre localisation GPS pour des raisons réglementaires.\" },\n ui: { icon: \"location-icon.png\", themeColor: \"#2DBD60\", buttonText: { en: \"Enable Location\", fr: \"Activer la localisation\" } },\n config: { accuracy: \"high\", required: true } as const\n },\n {\n id: 6, type: \"country_selection\" as const, order: 2,\n labels: { en: \"Select your country\", fr: \"Sélectionnez votre pays\" },\n instructions: { en: \"Choose your country of residence.\", fr: \"Choisissez votre pays de résidence.\" },\n ui: { icon: \"country-icon.png\", themeColor: \"#2DBD60\", buttonText: { en: \"Confirm\", fr: \"Confirmer\" } },\n config: { allowed_countries: [\"CM\", \"NG\", \"CI\", \"KE\", \"GH\"], default_country: \"CM\", required: true } as const\n },\n {\n id: 1, type: \"id_card\" as const, order: 3, templateId: 1,\n labels: { front: { en: \"Upload front of ID card\", fr: \"Téléversez le recto de votre carte d'identité\" }, back: { en: \"Upload back of ID card\", fr: \"Téléversez le verso de votre carte d'identité\" }, },\n instructions: { front: { en: \"Take a clear photo of the front of your ID.\", fr: \"Prenez une photo nette du recto de votre pièce.\" }, back: { en: \"Take a clear photo of the back of your ID.\", fr: \"Prenez une photo nette du verso de votre pièce.\" }, },\n ui: { front: { icon: \"id-card-icon.png\", themeColor: \"#2DBD60\", buttonText: { en: \"Next\", fr: \"Suivant\" } }, back: { icon: \"id-card-icon.png\", themeColor: \"#2DBD60\", buttonText: { en: \"Next\", fr: \"Suivant\" } }, },\n config: { sides: [\"front\", \"back\"], allowed_formats: [\"jpg\", \"png\"], max_size_mb: 5, document_types: [\"drivers_licence\", \"passport\", \"drivers_licence\", \"national_id\"], } as const\n },\n {\n id: 3, type: \"selfie\" as const, order: 5, templateId: 1,\n labels: { en: \"Take selfies from different angles\", fr: \"Prenez des selfies sous différents angles\" },\n instructions: { en: \"Take selfies from front, left, and right angles.\", fr: \"Prenez des selfies de face, profil gauche et profil droit.\" },\n ui: { icon: \"selfie-icon.png\", themeColor: \"#2DBD60\", buttonText: { en: \"Next\", fr: \"Suivant\" } },\n config: { liveness_check: true, max_attempts: 3, orientations: [\"center\", \"left\", \"right\"] } as const\n },\n ]\n};\n\nexport interface TemplateKYCExampleProps {\n onComplete: (data: VerificationState) => void;\n onCancel: () => void;\n onError: (error: string) => void;\n language: string;\n API_KEY?: string;\n TEST_API_KEY?: string;\n templateId?: string;\n template?: KYCTemplate;\n env?: KycEnvironment;\n serverEnv?: BackendEnvironment;\n existingSessionId?: string;\n initialComponentIndex?: number;\n initialCountryResume?: { code: string; documentType: string; region?: string };\n referenceId?: string;\n onSessionSave?: (sessionId: string) => void;\n kyc_session_id?: string;\n templateConfig?: Record<string, string>;\n deviceSecurityPolicy?: DeviceSecurityPolicy;\n onDeviceSecurityCheck?: (result: DeviceSecurityCheckResult) => void;\n}\n\nexport function TemplateKYCExample({\n onComplete,\n onCancel,\n onError,\n language,\n API_KEY,\n TEST_API_KEY,\n templateId,\n template,\n env = 'PRODUCTION',\n serverEnv,\n existingSessionId,\n initialComponentIndex,\n initialCountryResume,\n referenceId,\n onSessionSave,\n kyc_session_id,\n templateConfig,\n deviceSecurityPolicy,\n onDeviceSecurityCheck,\n}: TemplateKYCExampleProps): JSX.Element {\n\n const handleComplete = (data: VerificationState) => {\n console.log('KYC Template completed with raw data:', data);\n\n let finalPayload: any = data; // Fallback to raw data if mapping fails\n\n if ((data.status === 'success' || data.status === 'in_progress') && data.result) {\n \n const backendData = data.result.data;\n\n if (backendData) {\n const personalInfo = backendData.user_data?.personal_information || {};\n const activeSessionId = kyc_session_id || existingSessionId || backendData.session_id || \"\";\n \n \n const docType = (backendData as any).document_type || (backendData as any).documentType;\n\n finalPayload = {\n data: {\n document_type: docType,\n verification_id: backendData.verification_id,\n verification_status: backendData.verification_status,\n session_id: activeSessionId,\n user_data: {\n personal_information: {\n first_name: personalInfo.first_name || personalInfo.given_name || undefined,\n last_name: personalInfo.last_name || personalInfo.surname || undefined,\n given_name: personalInfo.given_name || undefined,\n surname: personalInfo.surname || undefined, \n address: personalInfo.address || undefined,\n expiry_date: personalInfo.expiry_date || undefined,\n issue_date: personalInfo.issue_date || undefined,\n date_of_birth: personalInfo.date_of_birth || personalInfo.birth_date || undefined,\n birth_date: personalInfo.birth_date || undefined,\n document_number: personalInfo.document_number || undefined,\n nationality: personalInfo.nationality || undefined,\n sex: personalInfo.sex || undefined,\n }\n }\n }\n };\n\n sdkLogger.info(\"Wrapper formatteddddd completion payload successfully\", { \n data: finalPayload \n });\n }\n } else {\n sdkLogger.warn(\"Wrapper received completion without a success result object\", { status: data.status });\n }\n\n onComplete(finalPayload); \n};\n\n const handleCancel = () => {\n console.log('KYC Template flow cancelled');\n onCancel();\n };\n\n const handleError = (error: string) => {\n sdkLogger.error('KYC Template error:', error);\n onError(error);\n };\n\n const templateToUse = templateId ? undefined : (template || advancedVerificationTemplate);\n\n return (\n <SafeAreaView style={{ flex: 1, paddingVertical: 25 }}>\n <View style={{ flex: 1 }}>\n <TemplateKYCFlow\n template={templateToUse}\n templateId={templateId}\n templateConfig={templateConfig}\n onComplete={handleComplete}\n onError={handleError}\n onCancel={handleCancel}\n language={language}\n API_KEY={API_KEY}\n TEST_API_KEY={TEST_API_KEY}\n env={env}\n serverEnv={serverEnv}\n existingSessionId={existingSessionId}\n initialComponentIndex={initialComponentIndex}\n initialCountryResume={initialCountryResume}\n referenceId={referenceId}\n onSessionSave={onSessionSave}\n kyc_session_id={kyc_session_id}\n deviceSecurityPolicy={deviceSecurityPolicy}\n onDeviceSecurityCheck={onDeviceSecurityCheck}\n />\n </View>\n </SafeAreaView>\n );\n}\n"]}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { KYCTemplate, VerificationState } from '../types/KYC.types';
|
|
3
3
|
import { KycEnvironment, BackendEnvironment } from '../types/env.types';
|
|
4
|
-
|
|
4
|
+
import { type DeviceSecurityCheckResult, type DeviceSecurityPolicy } from '../security/deviceSecurity';
|
|
5
|
+
export interface TemplateKYCFlowProps {
|
|
5
6
|
template?: KYCTemplate;
|
|
6
7
|
templateId?: string;
|
|
7
8
|
onComplete?: (data: VerificationState) => void;
|
|
@@ -23,7 +24,8 @@ interface TemplateKYCFlowProps {
|
|
|
23
24
|
onSessionSave?: (sessionId: string) => void;
|
|
24
25
|
kyc_session_id?: string;
|
|
25
26
|
templateConfig?: Record<string, string>;
|
|
27
|
+
deviceSecurityPolicy?: DeviceSecurityPolicy;
|
|
28
|
+
onDeviceSecurityCheck?: (result: DeviceSecurityCheckResult) => void;
|
|
26
29
|
}
|
|
27
30
|
export declare const TemplateKYCFlow: React.FC<TemplateKYCFlowProps>;
|
|
28
|
-
export {};
|
|
29
31
|
//# sourceMappingURL=TemplateKYCFlowRefactored.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TemplateKYCFlowRefactored.d.ts","sourceRoot":"","sources":["../../../src/components/TemplateKYCFlowRefactored.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"TemplateKYCFlowRefactored.d.ts","sourceRoot":"","sources":["../../../src/components/TemplateKYCFlowRefactored.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAE3D,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAkBpE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGxE,OAAO,EAGL,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,EAE1B,MAAM,4BAA4B,CAAC;AAEpC,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC/C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,oBAAoB,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,qBAAqB,CAAC,EAAE,CAAC,MAAM,EAAE,yBAAyB,KAAK,IAAI,CAAC;CACrE;AA2BD,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CA2V1D,CAAC"}
|