@sanctum-key/react-native-sdk 1.0.0

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 (708) hide show
  1. package/README.md +278 -0
  2. package/android/build/.transforms/f62cb96b2d1f78ca96ab35932dd530dc/results.bin +1 -0
  3. package/android/build/.transforms/f62cb96b2d1f78ca96ab35932dd530dc/transformed/classes/classes_dex/classes.dex +0 -0
  4. package/android/build/generated/source/buildConfig/debug/kyc/transfergratis/com/BuildConfig.java +10 -0
  5. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml +69 -0
  6. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/output-metadata.json +18 -0
  7. package/android/build/intermediates/aar_metadata/debug/writeDebugAarMetadata/aar-metadata.properties +6 -0
  8. package/android/build/intermediates/annotation_processor_list/debug/javaPreCompileDebug/annotationProcessors.json +1 -0
  9. package/android/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar +0 -0
  10. package/android/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar +0 -0
  11. package/android/build/intermediates/compile_symbol_list/debug/generateDebugRFile/R.txt +1 -0
  12. package/android/build/intermediates/compiled_local_resources/debug/compileDebugLibraryResources/out/xml_file_paths.xml.flat +0 -0
  13. package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +2 -0
  14. package/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml +2 -0
  15. package/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +2 -0
  16. package/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +2 -0
  17. package/android/build/intermediates/incremental/packageDebugAssets/merger.xml +2 -0
  18. package/android/build/intermediates/java_res/debug/processDebugJavaRes/out/META-INF/transfergratis-react-native-sdk_debug.kotlin_module +0 -0
  19. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/kyc/transfergratis/com/BuildConfig.class +0 -0
  20. package/android/build/intermediates/local_only_symbol_list/debug/parseDebugLocalResources/R-def.txt +3 -0
  21. package/android/build/intermediates/manifest_merge_blame_file/debug/processDebugManifest/manifest-merger-blame-debug-report.txt +110 -0
  22. package/android/build/intermediates/merged_manifest/debug/processDebugManifest/AndroidManifest.xml +69 -0
  23. package/android/build/intermediates/navigation_json/debug/extractDeepLinksDebug/navigation.json +1 -0
  24. package/android/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt +1 -0
  25. package/android/build/intermediates/packaged_res/debug/packageDebugResources/xml/file_paths.xml +15 -0
  26. package/android/build/intermediates/runtime_library_classes_jar/debug/bundleLibRuntimeToJarDebug/classes.jar +0 -0
  27. package/android/build/intermediates/symbol_list_with_package_name/debug/generateDebugRFile/package-aware-r.txt +2 -0
  28. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab +0 -0
  29. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream +0 -0
  30. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len +0 -0
  31. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len +0 -0
  32. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at +0 -0
  33. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i +0 -0
  34. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len +0 -0
  35. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab +0 -0
  36. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream +0 -0
  37. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len +0 -0
  38. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len +0 -0
  39. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at +0 -0
  40. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i +0 -0
  41. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len +0 -0
  42. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab +0 -0
  43. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream +0 -0
  44. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len +0 -0
  45. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len +0 -0
  46. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at +0 -0
  47. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i +0 -0
  48. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len +0 -0
  49. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab +0 -0
  50. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream +0 -0
  51. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len +0 -0
  52. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len +0 -0
  53. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at +0 -0
  54. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i +0 -0
  55. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len +0 -0
  56. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab +0 -0
  57. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream +0 -0
  58. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len +0 -0
  59. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len +0 -0
  60. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at +0 -0
  61. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i +0 -0
  62. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len +0 -0
  63. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab +0 -0
  64. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream +0 -0
  65. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len +0 -0
  66. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len +0 -0
  67. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at +0 -0
  68. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i +0 -0
  69. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len +0 -0
  70. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab +0 -0
  71. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream +0 -0
  72. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len +0 -0
  73. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len +0 -0
  74. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at +0 -0
  75. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i +0 -0
  76. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len +0 -0
  77. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab +0 -0
  78. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream +0 -0
  79. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len +0 -0
  80. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len +0 -0
  81. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at +0 -0
  82. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i +0 -0
  83. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len +0 -0
  84. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/counters.tab +2 -0
  85. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab +0 -0
  86. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream +0 -0
  87. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len +0 -0
  88. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len +0 -0
  89. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at +0 -0
  90. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i +0 -0
  91. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len +0 -0
  92. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab +0 -0
  93. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream +0 -0
  94. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len +0 -0
  95. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len +0 -0
  96. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at +0 -0
  97. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i +0 -0
  98. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len +0 -0
  99. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab +0 -0
  100. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream +0 -0
  101. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len +0 -0
  102. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.len +0 -0
  103. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at +0 -0
  104. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i +0 -0
  105. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len +0 -0
  106. package/android/build/kotlin/compileDebugKotlin/cacheable/last-build.bin +0 -0
  107. package/android/build/kotlin/compileDebugKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin +0 -0
  108. package/android/build/kotlin/compileDebugKotlin/local-state/build-history.bin +0 -0
  109. package/android/build/outputs/logs/manifest-merger-debug-report.txt +101 -0
  110. package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
  111. package/android/build/tmp/kotlin-classes/debug/META-INF/transfergratis-react-native-sdk_debug.kotlin_module +0 -0
  112. package/android/build/tmp/kotlin-classes/debug/kyc/transfergratis/com/TransfergratisSdkModule$definition$1$5$1.class +0 -0
  113. package/android/build/tmp/kotlin-classes/debug/kyc/transfergratis/com/TransfergratisSdkModule$definition$1$5$2.class +0 -0
  114. package/android/build/tmp/kotlin-classes/debug/kyc/transfergratis/com/TransfergratisSdkModule$definition$lambda$5$$inlined$AsyncFunction$1.class +0 -0
  115. package/android/build/tmp/kotlin-classes/debug/kyc/transfergratis/com/TransfergratisSdkModule$definition$lambda$5$$inlined$AsyncFunction$2.class +0 -0
  116. package/android/build/tmp/kotlin-classes/debug/kyc/transfergratis/com/TransfergratisSdkModule$definition$lambda$5$$inlined$AsyncFunction$3.class +0 -0
  117. package/android/build/tmp/kotlin-classes/debug/kyc/transfergratis/com/TransfergratisSdkModule$definition$lambda$5$$inlined$AsyncFunction$4.class +0 -0
  118. package/android/build/tmp/kotlin-classes/debug/kyc/transfergratis/com/TransfergratisSdkModule$definition$lambda$5$$inlined$AsyncFunction$5.class +0 -0
  119. package/android/build/tmp/kotlin-classes/debug/kyc/transfergratis/com/TransfergratisSdkModule$definition$lambda$5$$inlined$AsyncFunction$6.class +0 -0
  120. package/android/build/tmp/kotlin-classes/debug/kyc/transfergratis/com/TransfergratisSdkModule$definition$lambda$5$$inlined$AsyncFunctionWithPromise$1.class +0 -0
  121. package/android/build/tmp/kotlin-classes/debug/kyc/transfergratis/com/TransfergratisSdkModule$definition$lambda$5$$inlined$AsyncFunctionWithPromise$2.class +0 -0
  122. package/android/build/tmp/kotlin-classes/debug/kyc/transfergratis/com/TransfergratisSdkModule$definition$lambda$5$$inlined$AsyncFunctionWithPromise$3.class +0 -0
  123. package/android/build/tmp/kotlin-classes/debug/kyc/transfergratis/com/TransfergratisSdkModule$definition$lambda$5$$inlined$AsyncFunctionWithPromise$4.class +0 -0
  124. package/android/build/tmp/kotlin-classes/debug/kyc/transfergratis/com/TransfergratisSdkModule$definition$lambda$5$$inlined$View$1.class +0 -0
  125. package/android/build/tmp/kotlin-classes/debug/kyc/transfergratis/com/TransfergratisSdkModule$definition$lambda$5$lambda$4$$inlined$Prop$1.class +0 -0
  126. package/android/build/tmp/kotlin-classes/debug/kyc/transfergratis/com/TransfergratisSdkModule$definition$lambda$5$lambda$4$$inlined$Prop$2.class +0 -0
  127. package/android/build/tmp/kotlin-classes/debug/kyc/transfergratis/com/TransfergratisSdkModule.class +0 -0
  128. package/android/build/tmp/kotlin-classes/debug/kyc/transfergratis/com/TransfergratisSdkView.class +0 -0
  129. package/android/build.gradle +43 -0
  130. package/android/src/main/AndroidManifest.xml +49 -0
  131. package/android/src/main/java/kyc/transfergratis/com/TransfergratisSdkModule.kt +131 -0
  132. package/android/src/main/java/kyc/transfergratis/com/TransfergratisSdkView.kt +161 -0
  133. package/android/src/main/res/xml/file_paths.xml +15 -0
  134. package/build/App.d.ts +3 -0
  135. package/build/App.d.ts.map +1 -0
  136. package/build/App.js +9 -0
  137. package/build/App.js.map +1 -0
  138. package/build/TransfergratisSdk.types.d.ts +32 -0
  139. package/build/TransfergratisSdk.types.d.ts.map +1 -0
  140. package/build/TransfergratisSdk.types.js +2 -0
  141. package/build/TransfergratisSdk.types.js.map +1 -0
  142. package/build/TransfergratisSdkModule.d.ts +21 -0
  143. package/build/TransfergratisSdkModule.d.ts.map +1 -0
  144. package/build/TransfergratisSdkModule.js +4 -0
  145. package/build/TransfergratisSdkModule.js.map +1 -0
  146. package/build/TransfergratisSdkModule.web.d.ts +20 -0
  147. package/build/TransfergratisSdkModule.web.d.ts.map +1 -0
  148. package/build/TransfergratisSdkModule.web.js +25 -0
  149. package/build/TransfergratisSdkModule.web.js.map +1 -0
  150. package/build/TransfergratisSdkView.d.ts +4 -0
  151. package/build/TransfergratisSdkView.d.ts.map +1 -0
  152. package/build/TransfergratisSdkView.js +7 -0
  153. package/build/TransfergratisSdkView.js.map +1 -0
  154. package/build/TransfergratisSdkView.web.d.ts +4 -0
  155. package/build/TransfergratisSdkView.web.d.ts.map +1 -0
  156. package/build/TransfergratisSdkView.web.js +11 -0
  157. package/build/TransfergratisSdkView.web.js.map +1 -0
  158. package/build/api/axios.d.ts +30 -0
  159. package/build/api/axios.d.ts.map +1 -0
  160. package/build/api/axios.js +92 -0
  161. package/build/api/axios.js.map +1 -0
  162. package/build/components/Camera/index.d.ts +2 -0
  163. package/build/components/Camera/index.d.ts.map +1 -0
  164. package/build/components/Camera/index.js +2 -0
  165. package/build/components/Camera/index.js.map +1 -0
  166. package/build/components/Camera/index.web.d.ts +2 -0
  167. package/build/components/Camera/index.web.d.ts.map +1 -0
  168. package/build/components/Camera/index.web.js +2 -0
  169. package/build/components/Camera/index.web.js.map +1 -0
  170. package/build/components/Camera/types.d.ts +2 -0
  171. package/build/components/Camera/types.d.ts.map +1 -0
  172. package/build/components/Camera/types.js +2 -0
  173. package/build/components/Camera/types.js.map +1 -0
  174. package/build/components/ConfigurableKYCFlow.d.ts +11 -0
  175. package/build/components/ConfigurableKYCFlow.d.ts.map +1 -0
  176. package/build/components/ConfigurableKYCFlow.js +257 -0
  177. package/build/components/ConfigurableKYCFlow.js.map +1 -0
  178. package/build/components/CustomCameraExample.d.ts +10 -0
  179. package/build/components/CustomCameraExample.d.ts.map +1 -0
  180. package/build/components/CustomCameraExample.js +232 -0
  181. package/build/components/CustomCameraExample.js.map +1 -0
  182. package/build/components/EnhancedCameraView.d.ts +4 -0
  183. package/build/components/EnhancedCameraView.d.ts.map +1 -0
  184. package/build/components/EnhancedCameraView.js +393 -0
  185. package/build/components/EnhancedCameraView.js.map +1 -0
  186. package/build/components/EnhancedCameraView.web.d.ts +4 -0
  187. package/build/components/EnhancedCameraView.web.d.ts.map +1 -0
  188. package/build/components/EnhancedCameraView.web.js +499 -0
  189. package/build/components/EnhancedCameraView.web.js.map +1 -0
  190. package/build/components/FileUpload.d.ts +13 -0
  191. package/build/components/FileUpload.d.ts.map +1 -0
  192. package/build/components/FileUpload.js +216 -0
  193. package/build/components/FileUpload.js.map +1 -0
  194. package/build/components/KYCElementRenderer.d.ts +14 -0
  195. package/build/components/KYCElementRenderer.d.ts.map +1 -0
  196. package/build/components/KYCElementRenderer.js +31 -0
  197. package/build/components/KYCElementRenderer.js.map +1 -0
  198. package/build/components/KYCElements/AdditionalDocumentsTemplate.d.ts +12 -0
  199. package/build/components/KYCElements/AdditionalDocumentsTemplate.d.ts.map +1 -0
  200. package/build/components/KYCElements/AdditionalDocumentsTemplate.js +283 -0
  201. package/build/components/KYCElements/AdditionalDocumentsTemplate.js.map +1 -0
  202. package/build/components/KYCElements/CameraCapture.d.ts +11 -0
  203. package/build/components/KYCElements/CameraCapture.d.ts.map +1 -0
  204. package/build/components/KYCElements/CameraCapture.js +219 -0
  205. package/build/components/KYCElements/CameraCapture.js.map +1 -0
  206. package/build/components/KYCElements/CompletionStep.d.ts +10 -0
  207. package/build/components/KYCElements/CompletionStep.d.ts.map +1 -0
  208. package/build/components/KYCElements/CompletionStep.js +147 -0
  209. package/build/components/KYCElements/CompletionStep.js.map +1 -0
  210. package/build/components/KYCElements/CountrySelection.d.ts +11 -0
  211. package/build/components/KYCElements/CountrySelection.d.ts.map +1 -0
  212. package/build/components/KYCElements/CountrySelection.js +147 -0
  213. package/build/components/KYCElements/CountrySelection.js.map +1 -0
  214. package/build/components/KYCElements/CountrySelectionTemplate.d.ts +15 -0
  215. package/build/components/KYCElements/CountrySelectionTemplate.d.ts.map +1 -0
  216. package/build/components/KYCElements/CountrySelectionTemplate.js +438 -0
  217. package/build/components/KYCElements/CountrySelectionTemplate.js.map +1 -0
  218. package/build/components/KYCElements/DocumentTypeSelection.d.ts +11 -0
  219. package/build/components/KYCElements/DocumentTypeSelection.d.ts.map +1 -0
  220. package/build/components/KYCElements/DocumentTypeSelection.js +143 -0
  221. package/build/components/KYCElements/DocumentTypeSelection.js.map +1 -0
  222. package/build/components/KYCElements/EmailVerificationTemplate.d.ts +12 -0
  223. package/build/components/KYCElements/EmailVerificationTemplate.d.ts.map +1 -0
  224. package/build/components/KYCElements/EmailVerificationTemplate.js +212 -0
  225. package/build/components/KYCElements/EmailVerificationTemplate.js.map +1 -0
  226. package/build/components/KYCElements/FileUpload.d.ts +11 -0
  227. package/build/components/KYCElements/FileUpload.d.ts.map +1 -0
  228. package/build/components/KYCElements/FileUpload.js +268 -0
  229. package/build/components/KYCElements/FileUpload.js.map +1 -0
  230. package/build/components/KYCElements/FileUploadTemplate.d.ts +12 -0
  231. package/build/components/KYCElements/FileUploadTemplate.d.ts.map +1 -0
  232. package/build/components/KYCElements/FileUploadTemplate.js +331 -0
  233. package/build/components/KYCElements/FileUploadTemplate.js.map +1 -0
  234. package/build/components/KYCElements/IDCardCapture.d.ts +19 -0
  235. package/build/components/KYCElements/IDCardCapture.d.ts.map +1 -0
  236. package/build/components/KYCElements/IDCardCapture.js +877 -0
  237. package/build/components/KYCElements/IDCardCapture.js.map +1 -0
  238. package/build/components/KYCElements/InitializationStep.d.ts +5 -0
  239. package/build/components/KYCElements/InitializationStep.d.ts.map +1 -0
  240. package/build/components/KYCElements/InitializationStep.js +41 -0
  241. package/build/components/KYCElements/InitializationStep.js.map +1 -0
  242. package/build/components/KYCElements/LocationCaptureTemplate.d.ts +20 -0
  243. package/build/components/KYCElements/LocationCaptureTemplate.d.ts.map +1 -0
  244. package/build/components/KYCElements/LocationCaptureTemplate.js +318 -0
  245. package/build/components/KYCElements/LocationCaptureTemplate.js.map +1 -0
  246. package/build/components/KYCElements/OrientationVideoCapture.d.ts +14 -0
  247. package/build/components/KYCElements/OrientationVideoCapture.d.ts.map +1 -0
  248. package/build/components/KYCElements/OrientationVideoCapture.js +534 -0
  249. package/build/components/KYCElements/OrientationVideoCapture.js.map +1 -0
  250. package/build/components/KYCElements/OrientationVideoCaptureEnhanced.d.ts +14 -0
  251. package/build/components/KYCElements/OrientationVideoCaptureEnhanced.d.ts.map +1 -0
  252. package/build/components/KYCElements/OrientationVideoCaptureEnhanced.js +504 -0
  253. package/build/components/KYCElements/OrientationVideoCaptureEnhanced.js.map +1 -0
  254. package/build/components/KYCElements/OrientationVideoCaptureFinal.d.ts +14 -0
  255. package/build/components/KYCElements/OrientationVideoCaptureFinal.d.ts.map +1 -0
  256. package/build/components/KYCElements/OrientationVideoCaptureFinal.js +430 -0
  257. package/build/components/KYCElements/OrientationVideoCaptureFinal.js.map +1 -0
  258. package/build/components/KYCElements/PersonalInformationTemplate.d.ts +12 -0
  259. package/build/components/KYCElements/PersonalInformationTemplate.d.ts.map +1 -0
  260. package/build/components/KYCElements/PersonalInformationTemplate.js +120 -0
  261. package/build/components/KYCElements/PersonalInformationTemplate.js.map +1 -0
  262. package/build/components/KYCElements/PhoneVerificationTemplate.d.ts +12 -0
  263. package/build/components/KYCElements/PhoneVerificationTemplate.d.ts.map +1 -0
  264. package/build/components/KYCElements/PhoneVerificationTemplate.js +185 -0
  265. package/build/components/KYCElements/PhoneVerificationTemplate.js.map +1 -0
  266. package/build/components/KYCElements/ReviewSubmitTemplate.d.ts +12 -0
  267. package/build/components/KYCElements/ReviewSubmitTemplate.d.ts.map +1 -0
  268. package/build/components/KYCElements/ReviewSubmitTemplate.js +171 -0
  269. package/build/components/KYCElements/ReviewSubmitTemplate.js.map +1 -0
  270. package/build/components/KYCElements/SelfieCapture.d.ts +11 -0
  271. package/build/components/KYCElements/SelfieCapture.d.ts.map +1 -0
  272. package/build/components/KYCElements/SelfieCapture.js +236 -0
  273. package/build/components/KYCElements/SelfieCapture.js.map +1 -0
  274. package/build/components/KYCElements/SelfieCaptureTemplate.d.ts +16 -0
  275. package/build/components/KYCElements/SelfieCaptureTemplate.d.ts.map +1 -0
  276. package/build/components/KYCElements/SelfieCaptureTemplate.js +568 -0
  277. package/build/components/KYCElements/SelfieCaptureTemplate.js.map +1 -0
  278. package/build/components/KYCElements/VerificationProgressTemplate.d.ts +12 -0
  279. package/build/components/KYCElements/VerificationProgressTemplate.d.ts.map +1 -0
  280. package/build/components/KYCElements/VerificationProgressTemplate.js +195 -0
  281. package/build/components/KYCElements/VerificationProgressTemplate.js.map +1 -0
  282. package/build/components/KYCElements/VerificationStep.d.ts +10 -0
  283. package/build/components/KYCElements/VerificationStep.d.ts.map +1 -0
  284. package/build/components/KYCElements/VerificationStep.js +199 -0
  285. package/build/components/KYCElements/VerificationStep.js.map +1 -0
  286. package/build/components/KYCElements/WelcomeTemplate.d.ts +12 -0
  287. package/build/components/KYCElements/WelcomeTemplate.d.ts.map +1 -0
  288. package/build/components/KYCElements/WelcomeTemplate.js +244 -0
  289. package/build/components/KYCElements/WelcomeTemplate.js.map +1 -0
  290. package/build/components/KYCExample.d.ts +3 -0
  291. package/build/components/KYCExample.d.ts.map +1 -0
  292. package/build/components/KYCExample.js +247 -0
  293. package/build/components/KYCExample.js.map +1 -0
  294. package/build/components/KYCFlow.d.ts +3 -0
  295. package/build/components/KYCFlow.d.ts.map +1 -0
  296. package/build/components/KYCFlow.js +308 -0
  297. package/build/components/KYCFlow.js.map +1 -0
  298. package/build/components/NativeCameraView.d.ts +11 -0
  299. package/build/components/NativeCameraView.d.ts.map +1 -0
  300. package/build/components/NativeCameraView.js +27 -0
  301. package/build/components/NativeCameraView.js.map +1 -0
  302. package/build/components/OverLay/IdCard.d.ts +4 -0
  303. package/build/components/OverLay/IdCard.d.ts.map +1 -0
  304. package/build/components/OverLay/IdCard.js +185 -0
  305. package/build/components/OverLay/IdCard.js.map +1 -0
  306. package/build/components/OverLay/SelfieOverlay.d.ts +4 -0
  307. package/build/components/OverLay/SelfieOverlay.d.ts.map +1 -0
  308. package/build/components/OverLay/SelfieOverlay.js +169 -0
  309. package/build/components/OverLay/SelfieOverlay.js.map +1 -0
  310. package/build/components/OverLay/StepOverlay.d.ts +9 -0
  311. package/build/components/OverLay/StepOverlay.d.ts.map +1 -0
  312. package/build/components/OverLay/StepOverlay.js +53 -0
  313. package/build/components/OverLay/StepOverlay.js.map +1 -0
  314. package/build/components/OverLay/type.d.ts +98 -0
  315. package/build/components/OverLay/type.d.ts.map +1 -0
  316. package/build/components/OverLay/type.js +2 -0
  317. package/build/components/OverLay/type.js.map +1 -0
  318. package/build/components/ProgressIndicator.d.ts +8 -0
  319. package/build/components/ProgressIndicator.d.ts.map +1 -0
  320. package/build/components/ProgressIndicator.js +48 -0
  321. package/build/components/ProgressIndicator.js.map +1 -0
  322. package/build/components/SelfieCapture.d.ts +3 -0
  323. package/build/components/SelfieCapture.d.ts.map +1 -0
  324. package/build/components/SelfieCapture.js +197 -0
  325. package/build/components/SelfieCapture.js.map +1 -0
  326. package/build/components/SimpleExample.d.ts +3 -0
  327. package/build/components/SimpleExample.d.ts.map +1 -0
  328. package/build/components/SimpleExample.js +89 -0
  329. package/build/components/SimpleExample.js.map +1 -0
  330. package/build/components/Svgs/GpsIcon.d.ts +3 -0
  331. package/build/components/Svgs/GpsIcon.d.ts.map +1 -0
  332. package/build/components/Svgs/GpsIcon.js +9 -0
  333. package/build/components/Svgs/GpsIcon.js.map +1 -0
  334. package/build/components/Svgs/Schield.d.ts +3 -0
  335. package/build/components/Svgs/Schield.d.ts.map +1 -0
  336. package/build/components/Svgs/Schield.js +22 -0
  337. package/build/components/Svgs/Schield.js.map +1 -0
  338. package/build/components/Svgs/directionArrow.gif +0 -0
  339. package/build/components/Svgs/frontSelfieIcon.d.ts +3 -0
  340. package/build/components/Svgs/frontSelfieIcon.d.ts.map +1 -0
  341. package/build/components/Svgs/frontSelfieIcon.js +11 -0
  342. package/build/components/Svgs/frontSelfieIcon.js.map +1 -0
  343. package/build/components/Svgs/scanningLine.d.ts +9 -0
  344. package/build/components/Svgs/scanningLine.d.ts.map +1 -0
  345. package/build/components/Svgs/scanningLine.js +61 -0
  346. package/build/components/Svgs/scanningLine.js.map +1 -0
  347. package/build/components/Svgs/sideSelfieIcon.d.ts +3 -0
  348. package/build/components/Svgs/sideSelfieIcon.d.ts.map +1 -0
  349. package/build/components/Svgs/sideSelfieIcon.js +9 -0
  350. package/build/components/Svgs/sideSelfieIcon.js.map +1 -0
  351. package/build/components/TemplateKYCExample.d.ts +22 -0
  352. package/build/components/TemplateKYCExample.d.ts.map +1 -0
  353. package/build/components/TemplateKYCExample.js +155 -0
  354. package/build/components/TemplateKYCExample.js.map +1 -0
  355. package/build/components/TemplateKYCFlowRefactored.d.ts +26 -0
  356. package/build/components/TemplateKYCFlowRefactored.d.ts.map +1 -0
  357. package/build/components/TemplateKYCFlowRefactored.js +359 -0
  358. package/build/components/TemplateKYCFlowRefactored.js.map +1 -0
  359. package/build/components/VisionCameraView.d.ts +22 -0
  360. package/build/components/VisionCameraView.d.ts.map +1 -0
  361. package/build/components/VisionCameraView.js +142 -0
  362. package/build/components/VisionCameraView.js.map +1 -0
  363. package/build/components/example/CameraCaptureEx.d.ts +4 -0
  364. package/build/components/example/CameraCaptureEx.d.ts.map +1 -0
  365. package/build/components/example/CameraCaptureEx.js +219 -0
  366. package/build/components/example/CameraCaptureEx.js.map +1 -0
  367. package/build/components/example/CameraCaptureExAdvanced.d.ts +3 -0
  368. package/build/components/example/CameraCaptureExAdvanced.d.ts.map +1 -0
  369. package/build/components/example/CameraCaptureExAdvanced.js +229 -0
  370. package/build/components/example/CameraCaptureExAdvanced.js.map +1 -0
  371. package/build/components/example/CameraCaptureExScan.d.ts +3 -0
  372. package/build/components/example/CameraCaptureExScan.d.ts.map +1 -0
  373. package/build/components/example/CameraCaptureExScan.js +213 -0
  374. package/build/components/example/CameraCaptureExScan.js.map +1 -0
  375. package/build/components/example/CameraCaptureExSimple.d.ts +3 -0
  376. package/build/components/example/CameraCaptureExSimple.d.ts.map +1 -0
  377. package/build/components/example/CameraCaptureExSimple.js +138 -0
  378. package/build/components/example/CameraCaptureExSimple.js.map +1 -0
  379. package/build/components/example/DynamicTemplateExample.d.ts +10 -0
  380. package/build/components/example/DynamicTemplateExample.d.ts.map +1 -0
  381. package/build/components/example/DynamicTemplateExample.js +241 -0
  382. package/build/components/example/DynamicTemplateExample.js.map +1 -0
  383. package/build/components/example/OrientationVideoExample.d.ts +4 -0
  384. package/build/components/example/OrientationVideoExample.d.ts.map +1 -0
  385. package/build/components/example/OrientationVideoExample.js +325 -0
  386. package/build/components/example/OrientationVideoExample.js.map +1 -0
  387. package/build/components/example/SelfieCaptureEx.d.ts +4 -0
  388. package/build/components/example/SelfieCaptureEx.d.ts.map +1 -0
  389. package/build/components/example/SelfieCaptureEx.js +238 -0
  390. package/build/components/example/SelfieCaptureEx.js.map +1 -0
  391. package/build/components/ui/Button.d.ts +37 -0
  392. package/build/components/ui/Button.d.ts.map +1 -0
  393. package/build/components/ui/Button.js +194 -0
  394. package/build/components/ui/Button.js.map +1 -0
  395. package/build/components/ui/ButtonExample.d.ts +4 -0
  396. package/build/components/ui/ButtonExample.d.ts.map +1 -0
  397. package/build/components/ui/ButtonExample.js +209 -0
  398. package/build/components/ui/ButtonExample.js.map +1 -0
  399. package/build/components/ui/ButtonStyles.d.ts +521 -0
  400. package/build/components/ui/ButtonStyles.d.ts.map +1 -0
  401. package/build/components/ui/ButtonStyles.js +429 -0
  402. package/build/components/ui/ButtonStyles.js.map +1 -0
  403. package/build/config/KYCConfig.d.ts +14 -0
  404. package/build/config/KYCConfig.d.ts.map +1 -0
  405. package/build/config/KYCConfig.js +26 -0
  406. package/build/config/KYCConfig.js.map +1 -0
  407. package/build/config/KYCConfigs.d.ts +7 -0
  408. package/build/config/KYCConfigs.d.ts.map +1 -0
  409. package/build/config/KYCConfigs.js +516 -0
  410. package/build/config/KYCConfigs.js.map +1 -0
  411. package/build/config/allowedDomains.d.ts +30 -0
  412. package/build/config/allowedDomains.d.ts.map +1 -0
  413. package/build/config/allowedDomains.js +112 -0
  414. package/build/config/allowedDomains.js.map +1 -0
  415. package/build/config/countriesData.d.ts +3 -0
  416. package/build/config/countriesData.d.ts.map +1 -0
  417. package/build/config/countriesData.js +80 -0
  418. package/build/config/countriesData.js.map +1 -0
  419. package/build/config/region_mapping.d.ts +3 -0
  420. package/build/config/region_mapping.d.ts.map +1 -0
  421. package/build/config/region_mapping.js +736 -0
  422. package/build/config/region_mapping.js.map +1 -0
  423. package/build/hooks/useI18n.d.ts +11 -0
  424. package/build/hooks/useI18n.d.ts.map +1 -0
  425. package/build/hooks/useI18n.js +37 -0
  426. package/build/hooks/useI18n.js.map +1 -0
  427. package/build/hooks/useKYC.d.ts +15 -0
  428. package/build/hooks/useKYC.d.ts.map +1 -0
  429. package/build/hooks/useKYC.js +103 -0
  430. package/build/hooks/useKYC.js.map +1 -0
  431. package/build/hooks/useKYCFlow.d.ts +3 -0
  432. package/build/hooks/useKYCFlow.d.ts.map +1 -0
  433. package/build/hooks/useKYCFlow.js +221 -0
  434. package/build/hooks/useKYCFlow.js.map +1 -0
  435. package/build/hooks/useLocation.d.ts +32 -0
  436. package/build/hooks/useLocation.d.ts.map +1 -0
  437. package/build/hooks/useLocation.js +165 -0
  438. package/build/hooks/useLocation.js.map +1 -0
  439. package/build/hooks/useOrientationVideo.d.ts +10 -0
  440. package/build/hooks/useOrientationVideo.d.ts.map +1 -0
  441. package/build/hooks/useOrientationVideo.js +118 -0
  442. package/build/hooks/useOrientationVideo.js.map +1 -0
  443. package/build/hooks/useRealtimeVerifier.d.ts +28 -0
  444. package/build/hooks/useRealtimeVerifier.d.ts.map +1 -0
  445. package/build/hooks/useRealtimeVerifier.js +91 -0
  446. package/build/hooks/useRealtimeVerifier.js.map +1 -0
  447. package/build/hooks/useTemplateKYCFlow.d.ts +48 -0
  448. package/build/hooks/useTemplateKYCFlow.d.ts.map +1 -0
  449. package/build/hooks/useTemplateKYCFlow.js +910 -0
  450. package/build/hooks/useTemplateKYCFlow.js.map +1 -0
  451. package/build/hooks/useTemplateLoader.d.ts +14 -0
  452. package/build/hooks/useTemplateLoader.d.ts.map +1 -0
  453. package/build/hooks/useTemplateLoader.js +85 -0
  454. package/build/hooks/useTemplateLoader.js.map +1 -0
  455. package/build/i18n/en/index.d.ts +233 -0
  456. package/build/i18n/en/index.d.ts.map +1 -0
  457. package/build/i18n/en/index.js +261 -0
  458. package/build/i18n/en/index.js.map +1 -0
  459. package/build/i18n/fr/index.d.ts +219 -0
  460. package/build/i18n/fr/index.d.ts.map +1 -0
  461. package/build/i18n/fr/index.js +246 -0
  462. package/build/i18n/fr/index.js.map +1 -0
  463. package/build/i18n/index.d.ts +10 -0
  464. package/build/i18n/index.d.ts.map +1 -0
  465. package/build/i18n/index.js +56 -0
  466. package/build/i18n/index.js.map +1 -0
  467. package/build/i18n/types.d.ts +162 -0
  468. package/build/i18n/types.d.ts.map +1 -0
  469. package/build/i18n/types.js +3 -0
  470. package/build/i18n/types.js.map +1 -0
  471. package/build/i18n/usage-example.d.ts +4 -0
  472. package/build/i18n/usage-example.d.ts.map +1 -0
  473. package/build/i18n/usage-example.js +189 -0
  474. package/build/i18n/usage-example.js.map +1 -0
  475. package/build/index.d.ts +11 -0
  476. package/build/index.d.ts.map +1 -0
  477. package/build/index.js +17 -0
  478. package/build/index.js.map +1 -0
  479. package/build/modules/api/CardAuthentification.d.ts +72 -0
  480. package/build/modules/api/CardAuthentification.d.ts.map +1 -0
  481. package/build/modules/api/CardAuthentification.js +487 -0
  482. package/build/modules/api/CardAuthentification.js.map +1 -0
  483. package/build/modules/api/KYCService.d.ts +116 -0
  484. package/build/modules/api/KYCService.d.ts.map +1 -0
  485. package/build/modules/api/KYCService.js +526 -0
  486. package/build/modules/api/KYCService.js.map +1 -0
  487. package/build/modules/api/SelfieVerification.d.ts +5 -0
  488. package/build/modules/api/SelfieVerification.d.ts.map +1 -0
  489. package/build/modules/api/SelfieVerification.js +25 -0
  490. package/build/modules/api/SelfieVerification.js.map +1 -0
  491. package/build/modules/api/TemplateService.d.ts +44 -0
  492. package/build/modules/api/TemplateService.d.ts.map +1 -0
  493. package/build/modules/api/TemplateService.js +146 -0
  494. package/build/modules/api/TemplateService.js.map +1 -0
  495. package/build/modules/api/backendApi.d.ts +2 -0
  496. package/build/modules/api/backendApi.d.ts.map +1 -0
  497. package/build/modules/api/backendApi.js +6 -0
  498. package/build/modules/api/backendApi.js.map +1 -0
  499. package/build/modules/api/types.d.ts +53 -0
  500. package/build/modules/api/types.d.ts.map +1 -0
  501. package/build/modules/api/types.js +2 -0
  502. package/build/modules/api/types.js.map +1 -0
  503. package/build/modules/camera/NativeCameraModule.d.ts +52 -0
  504. package/build/modules/camera/NativeCameraModule.d.ts.map +1 -0
  505. package/build/modules/camera/NativeCameraModule.js +149 -0
  506. package/build/modules/camera/NativeCameraModule.js.map +1 -0
  507. package/build/modules/camera/UnifiedCameraModule.d.ts +70 -0
  508. package/build/modules/camera/UnifiedCameraModule.d.ts.map +1 -0
  509. package/build/modules/camera/UnifiedCameraModule.js +125 -0
  510. package/build/modules/camera/UnifiedCameraModule.js.map +1 -0
  511. package/build/modules/camera/VisionCameraModule.d.ts +62 -0
  512. package/build/modules/camera/VisionCameraModule.d.ts.map +1 -0
  513. package/build/modules/camera/VisionCameraModule.js +313 -0
  514. package/build/modules/camera/VisionCameraModule.js.map +1 -0
  515. package/build/modules/camera/VisionCameraModule.web.d.ts +145 -0
  516. package/build/modules/camera/VisionCameraModule.web.d.ts.map +1 -0
  517. package/build/modules/camera/VisionCameraModule.web.js +589 -0
  518. package/build/modules/camera/VisionCameraModule.web.js.map +1 -0
  519. package/build/modules/camera/index.d.ts +5 -0
  520. package/build/modules/camera/index.d.ts.map +1 -0
  521. package/build/modules/camera/index.js +4 -0
  522. package/build/modules/camera/index.js.map +1 -0
  523. package/build/stores/kycStore.d.ts +55 -0
  524. package/build/stores/kycStore.d.ts.map +1 -0
  525. package/build/stores/kycStore.js +98 -0
  526. package/build/stores/kycStore.js.map +1 -0
  527. package/build/types/KYC.types.d.ts +643 -0
  528. package/build/types/KYC.types.d.ts.map +1 -0
  529. package/build/types/KYC.types.js +25 -0
  530. package/build/types/KYC.types.js.map +1 -0
  531. package/build/types/env.types.d.ts +13 -0
  532. package/build/types/env.types.d.ts.map +1 -0
  533. package/build/types/env.types.js +2 -0
  534. package/build/types/env.types.js.map +1 -0
  535. package/build/utils/cropByObb.d.ts +37 -0
  536. package/build/utils/cropByObb.d.ts.map +1 -0
  537. package/build/utils/cropByObb.js +215 -0
  538. package/build/utils/cropByObb.js.map +1 -0
  539. package/build/utils/deviceDetection.d.ts +6 -0
  540. package/build/utils/deviceDetection.d.ts.map +1 -0
  541. package/build/utils/deviceDetection.js +12 -0
  542. package/build/utils/deviceDetection.js.map +1 -0
  543. package/build/utils/get-document-type-info.d.ts +13 -0
  544. package/build/utils/get-document-type-info.d.ts.map +1 -0
  545. package/build/utils/get-document-type-info.js +59 -0
  546. package/build/utils/get-document-type-info.js.map +1 -0
  547. package/build/utils/logger.d.ts +12 -0
  548. package/build/utils/logger.d.ts.map +1 -0
  549. package/build/utils/logger.js +45 -0
  550. package/build/utils/logger.js.map +1 -0
  551. package/build/utils/pathToBase64.d.ts +3 -0
  552. package/build/utils/pathToBase64.d.ts.map +1 -0
  553. package/build/utils/pathToBase64.js +65 -0
  554. package/build/utils/pathToBase64.js.map +1 -0
  555. package/build/utils/platformAlert.d.ts +20 -0
  556. package/build/utils/platformAlert.d.ts.map +1 -0
  557. package/build/utils/platformAlert.js +67 -0
  558. package/build/utils/platformAlert.js.map +1 -0
  559. package/build/utils/remove-duplicate.d.ts +2 -0
  560. package/build/utils/remove-duplicate.d.ts.map +1 -0
  561. package/build/utils/remove-duplicate.js +4 -0
  562. package/build/utils/remove-duplicate.js.map +1 -0
  563. package/build/utils/template-transformer.d.ts +10 -0
  564. package/build/utils/template-transformer.d.ts.map +1 -0
  565. package/build/utils/template-transformer.js +365 -0
  566. package/build/utils/template-transformer.js.map +1 -0
  567. package/build/web/WebKYCEntry.d.ts +9 -0
  568. package/build/web/WebKYCEntry.d.ts.map +1 -0
  569. package/build/web/WebKYCEntry.js +288 -0
  570. package/build/web/WebKYCEntry.js.map +1 -0
  571. package/build/web/index.d.ts +2 -0
  572. package/build/web/index.d.ts.map +1 -0
  573. package/build/web/index.js +2 -0
  574. package/build/web/index.js.map +1 -0
  575. package/expo-module.config.json +9 -0
  576. package/ios/TransfergratisSdk.podspec +31 -0
  577. package/ios/TransfergratisSdkModule.swift +409 -0
  578. package/package.json +71 -0
  579. package/plugin/build/index.d.ts +5 -0
  580. package/plugin/build/index.js +12 -0
  581. package/plugin/build/withLocation.d.ts +9 -0
  582. package/plugin/build/withLocation.js +77 -0
  583. package/plugin/build/withRemovePermissions.d.ts +3 -0
  584. package/plugin/build/withRemovePermissions.js +67 -0
  585. package/plugin/build/withVisionCamera.d.ts +8 -0
  586. package/plugin/build/withVisionCamera.js +68 -0
  587. package/plugin/src/index.ts +5 -0
  588. package/plugin/src/withLocation.ts +109 -0
  589. package/plugin/src/withRemovePermissions.js +85 -0
  590. package/plugin/src/withRemovePermissions.ts +83 -0
  591. package/plugin/src/withVisionCamera.js +88 -0
  592. package/plugin/src/withVisionCamera.ts +97 -0
  593. package/plugin/tsconfig.json +17 -0
  594. package/plugin/tsconfig.tsbuildinfo +1 -0
  595. package/plugin.js +19 -0
  596. package/src/App.tsx +9 -0
  597. package/src/TransfergratisSdk.types.ts +30 -0
  598. package/src/TransfergratisSdkModule.ts +16 -0
  599. package/src/TransfergratisSdkModule.web.ts +31 -0
  600. package/src/TransfergratisSdkView.tsx +11 -0
  601. package/src/TransfergratisSdkView.web.tsx +15 -0
  602. package/src/api/axios.ts +144 -0
  603. package/src/components/Camera/index.tsx +0 -0
  604. package/src/components/Camera/index.web.tsx +0 -0
  605. package/src/components/Camera/types.ts +0 -0
  606. package/src/components/ConfigurableKYCFlow.tsx +334 -0
  607. package/src/components/CustomCameraExample.tsx +274 -0
  608. package/src/components/EnhancedCameraView.tsx +482 -0
  609. package/src/components/EnhancedCameraView.web.tsx +597 -0
  610. package/src/components/FileUpload.tsx +249 -0
  611. package/src/components/KYCElementRenderer.tsx +106 -0
  612. package/src/components/KYCElements/AdditionalDocumentsTemplate.tsx +346 -0
  613. package/src/components/KYCElements/CameraCapture.tsx +268 -0
  614. package/src/components/KYCElements/CompletionStep.tsx +161 -0
  615. package/src/components/KYCElements/CountrySelection.tsx +177 -0
  616. package/src/components/KYCElements/CountrySelectionTemplate.tsx +526 -0
  617. package/src/components/KYCElements/DocumentTypeSelection.tsx +173 -0
  618. package/src/components/KYCElements/EmailVerificationTemplate.tsx +278 -0
  619. package/src/components/KYCElements/FileUpload.tsx +318 -0
  620. package/src/components/KYCElements/FileUploadTemplate.tsx +395 -0
  621. package/src/components/KYCElements/IDCardCapture.tsx +1053 -0
  622. package/src/components/KYCElements/InitializationStep.tsx +53 -0
  623. package/src/components/KYCElements/LocationCaptureTemplate.tsx +378 -0
  624. package/src/components/KYCElements/OrientationVideoCapture.tsx +649 -0
  625. package/src/components/KYCElements/OrientationVideoCaptureEnhanced.tsx +616 -0
  626. package/src/components/KYCElements/OrientationVideoCaptureFinal.tsx +534 -0
  627. package/src/components/KYCElements/PersonalInformationTemplate.tsx +158 -0
  628. package/src/components/KYCElements/PhoneVerificationTemplate.tsx +253 -0
  629. package/src/components/KYCElements/ReviewSubmitTemplate.tsx +201 -0
  630. package/src/components/KYCElements/SelfieCapture.tsx +284 -0
  631. package/src/components/KYCElements/SelfieCaptureTemplate.tsx +662 -0
  632. package/src/components/KYCElements/VerificationProgressTemplate.tsx +247 -0
  633. package/src/components/KYCElements/VerificationStep.tsx +234 -0
  634. package/src/components/KYCElements/WelcomeTemplate.tsx +290 -0
  635. package/src/components/KYCExample.tsx +297 -0
  636. package/src/components/KYCFlow.tsx +377 -0
  637. package/src/components/NativeCameraView.tsx +47 -0
  638. package/src/components/OverLay/IdCard.tsx +277 -0
  639. package/src/components/OverLay/SelfieOverlay.tsx +211 -0
  640. package/src/components/OverLay/StepOverlay.tsx +64 -0
  641. package/src/components/OverLay/type.ts +91 -0
  642. package/src/components/ProgressIndicator.tsx +62 -0
  643. package/src/components/SelfieCapture.tsx +244 -0
  644. package/src/components/SimpleExample.tsx +92 -0
  645. package/src/components/Svgs/GpsIcon.tsx +12 -0
  646. package/src/components/Svgs/Schield.tsx +26 -0
  647. package/src/components/Svgs/directionArrow.gif +0 -0
  648. package/src/components/Svgs/frontSelfieIcon.tsx +13 -0
  649. package/src/components/Svgs/scanningLine.tsx +88 -0
  650. package/src/components/Svgs/sideSelfieIcon.tsx +10 -0
  651. package/src/components/TemplateKYCExample.tsx +194 -0
  652. package/src/components/TemplateKYCFlowRefactored.tsx +473 -0
  653. package/src/components/VisionCameraView.tsx +197 -0
  654. package/src/components/example/CameraCaptureEx.tsx +335 -0
  655. package/src/components/example/CameraCaptureExAdvanced.tsx +357 -0
  656. package/src/components/example/CameraCaptureExScan.tsx +336 -0
  657. package/src/components/example/CameraCaptureExSimple.tsx +215 -0
  658. package/src/components/example/DynamicTemplateExample.tsx +289 -0
  659. package/src/components/example/OrientationVideoExample.tsx +380 -0
  660. package/src/components/example/SelfieCaptureEx.tsx +358 -0
  661. package/src/components/ui/Button.tsx +328 -0
  662. package/src/components/ui/ButtonExample.tsx +318 -0
  663. package/src/components/ui/ButtonStyles.ts +465 -0
  664. package/src/config/KYCConfig.ts +34 -0
  665. package/src/config/KYCConfigs.ts +528 -0
  666. package/src/config/allowedDomains.ts +133 -0
  667. package/src/config/countriesData.ts +85 -0
  668. package/src/config/region_mapping.json +735 -0
  669. package/src/config/region_mapping.ts +737 -0
  670. package/src/hooks/useI18n.ts +53 -0
  671. package/src/hooks/useKYC.ts +131 -0
  672. package/src/hooks/useKYCFlow.ts +248 -0
  673. package/src/hooks/useLocation.ts +221 -0
  674. package/src/hooks/useOrientationVideo.ts +149 -0
  675. package/src/hooks/useRealtimeVerifier.ts +128 -0
  676. package/src/hooks/useTemplateKYCFlow.tsx +1051 -0
  677. package/src/hooks/useTemplateLoader.ts +102 -0
  678. package/src/i18n/README.md +288 -0
  679. package/src/i18n/en/index.ts +275 -0
  680. package/src/i18n/fr/index.ts +260 -0
  681. package/src/i18n/index.ts +65 -0
  682. package/src/i18n/types.ts +182 -0
  683. package/src/i18n/usage-example.tsx +202 -0
  684. package/src/index.ts +25 -0
  685. package/src/modules/api/CardAuthentification.ts +589 -0
  686. package/src/modules/api/KYCService.ts +666 -0
  687. package/src/modules/api/SelfieVerification.ts +33 -0
  688. package/src/modules/api/TemplateService.ts +168 -0
  689. package/src/modules/api/backendApi.ts +8 -0
  690. package/src/modules/api/types.ts +59 -0
  691. package/src/modules/camera/NativeCameraModule.ts +170 -0
  692. package/src/modules/camera/UnifiedCameraModule.ts +160 -0
  693. package/src/modules/camera/VisionCameraModule.ts +334 -0
  694. package/src/modules/camera/VisionCameraModule.web.ts +679 -0
  695. package/src/modules/camera/index.ts +6 -0
  696. package/src/stores/kycStore.ts +161 -0
  697. package/src/types/KYC.types.ts +837 -0
  698. package/src/types/env.types.ts +13 -0
  699. package/src/utils/cropByObb.ts +254 -0
  700. package/src/utils/deviceDetection.ts +11 -0
  701. package/src/utils/get-document-type-info.ts +62 -0
  702. package/src/utils/logger.ts +48 -0
  703. package/src/utils/pathToBase64.ts +63 -0
  704. package/src/utils/platformAlert.ts +86 -0
  705. package/src/utils/remove-duplicate.ts +3 -0
  706. package/src/utils/template-transformer.ts +445 -0
  707. package/src/web/WebKYCEntry.tsx +375 -0
  708. package/src/web/index.ts +1 -0
@@ -0,0 +1,1051 @@
1
+ import React, { useState, useCallback, useMemo, createContext, useContext, ReactNode, useEffect } from 'react';
2
+ import { KYCTemplate, TemplateState, TemplateActions, UseTemplateReturn, TemplateComponent, GovernmentDocumentType, VerificationState } from '../types/KYC.types';
3
+ import { KycEnvironment } from '../types/env.types';
4
+ import kycService, { authentification, truncateFields } from '../modules/api/KYCService';
5
+ import useI18n from './useI18n';
6
+ import { logger } from '../utils/logger';
7
+ import { countryMapping } from '../config/region_mapping';
8
+ import { countryData } from '../config/countriesData';
9
+
10
+ // Context pour le provider
11
+ interface TemplateKYCFlowContextType {
12
+ state: TemplateState;
13
+ actions: TemplateActions;
14
+ currentComponent: any;
15
+ progress: number;
16
+ canGoNext: boolean;
17
+ canGoPrevious: boolean;
18
+ isComplete: boolean;
19
+ getLocalizedText: (text: { en: string; fr: string;[key: string]: string }) => string;
20
+ initializeSession: () => Promise<void>;
21
+ env: KycEnvironment;
22
+ apiKey?: string;
23
+ }
24
+
25
+ const TemplateKYCFlowContext = createContext<TemplateKYCFlowContextType | undefined>(undefined);
26
+
27
+ // Provider component
28
+ interface TemplateKYCFlowProviderProps {
29
+ children: ReactNode;
30
+ template: KYCTemplate;
31
+ onComplete?: (data: VerificationState) => void;
32
+ onError?: (error: string) => void;
33
+ onCancel?: () => void;
34
+ initialLanguage?: string;
35
+ apiKey?: string;
36
+ env?: KycEnvironment;
37
+ existingSessionId?: string;
38
+ /** Index in template.components where to resume (0-based). Simple to store in template table. */
39
+ initialComponentIndex?: number;
40
+ /** Pays / type de document depuis l'URL de reprise — évite de dépendre du backend pour afficher les pays. */
41
+ initialCountryResume?: { code: string; documentType: string; region?: string };
42
+ }
43
+
44
+ export const TemplateKYCFlowProvider: React.FC<TemplateKYCFlowProviderProps> = ({
45
+ children,
46
+ template,
47
+ onComplete,
48
+ onError,
49
+ onCancel,
50
+ initialLanguage = 'en',
51
+ apiKey,
52
+ env = 'PRODUCTION',
53
+ existingSessionId,
54
+ initialComponentIndex,
55
+ initialCountryResume,
56
+ }) => {
57
+ const hookResult = useTemplateKYCFlow(template, onComplete, onError, onCancel, initialLanguage, apiKey, env, existingSessionId, initialComponentIndex, initialCountryResume);
58
+
59
+ return (
60
+ <TemplateKYCFlowContext.Provider value={hookResult}>
61
+ {children}
62
+ </TemplateKYCFlowContext.Provider>
63
+ );
64
+ };
65
+
66
+ // Hook pour utiliser le context
67
+ export const useTemplateKYCFlowContext = (): TemplateKYCFlowContextType => {
68
+ const context = useContext(TemplateKYCFlowContext);
69
+ if (!context) {
70
+ throw new Error('useTemplateKYCFlowContext must be used within a TemplateKYCFlowProvider');
71
+ }
72
+ return context;
73
+ };
74
+
75
+ export const useTemplateKYCFlow = (
76
+ template: KYCTemplate,
77
+ onComplete?: (data: VerificationState) => void,
78
+ onError?: (error: string) => void,
79
+ onCancel?: () => void,
80
+ initialLanguage: string = 'en',
81
+ apiKey?: string,
82
+ env: KycEnvironment = 'PRODUCTION',
83
+ existingSessionId?: string,
84
+ initialComponentIndex?: number,
85
+ initialCountryResume?: { code: string; documentType: string; region?: string },
86
+ ): UseTemplateReturn => {
87
+
88
+ const { setLocale } = useI18n();
89
+
90
+ useEffect(() => {
91
+ setLocale(initialLanguage);
92
+ }, [initialLanguage, apiKey]);
93
+
94
+ // Helpers to align SDK steps with backend actions/templates
95
+ const isUiOnlyStep = useCallback((type: TemplateComponent['type']) => {
96
+ return type === 'verification_progress';
97
+ }, [apiKey]);
98
+
99
+
100
+
101
+ const ensureReviewSubmitStep = useCallback((tpl: KYCTemplate): KYCTemplate => {
102
+ const hasReview = tpl.components.some(c => c.type === 'review_submit');
103
+ if (hasReview) return tpl;
104
+
105
+ const lastOrder = tpl.components.reduce((acc, c) => Math.max(acc, c.order ?? 0), 0);
106
+ const lastId = tpl.components.reduce((acc, c) => Math.max(acc, c.id), 0);
107
+
108
+ const reviewComponent: TemplateComponent = {
109
+ id: lastId + 1,
110
+ type: 'review_submit',
111
+ order: lastOrder + 1,
112
+ labels: { en: 'Review & Submit', fr: 'Revoir & Soumettre' },
113
+ instructions: { en: 'Confirm and submit', fr: 'Confirmer et soumettre' },
114
+ ui: { buttonText: { en: 'Complete Verification', fr: 'Terminer la vérification' } },
115
+ // @ts-ignore - config unused for review component
116
+ config: {},
117
+ } as TemplateComponent;
118
+
119
+ return {
120
+ ...tpl,
121
+ components: [...tpl.components, reviewComponent],
122
+ };
123
+ }, [apiKey]);
124
+
125
+ const ensureVerificationProgressStep = useCallback((tpl: KYCTemplate): KYCTemplate => {
126
+ const hasVerification = tpl.components.some(c => c.type === 'verification_progress');
127
+ if (hasVerification) return tpl;
128
+
129
+ const lastOrder = tpl.components.reduce((acc, c) => Math.max(acc, c.order ?? 0), 0);
130
+ const lastId = tpl.components.reduce((acc, c) => Math.max(acc, c.id), 0);
131
+
132
+ const verificationComponent: TemplateComponent = {
133
+ id: lastId + 2,
134
+ type: 'verification_progress',
135
+ order: lastOrder + 2,
136
+ labels: { en: 'Verification', fr: 'Vérification' },
137
+ instructions: { en: 'We\'re reviewing your documents', fr: 'Nous analysons vos documents' },
138
+ ui: { buttonText: { en: '', fr: '' } },
139
+ // @ts-ignore - config unused for progress component
140
+ config: {},
141
+ } as TemplateComponent;
142
+
143
+ return {
144
+ ...tpl,
145
+ components: [...tpl.components, verificationComponent],
146
+ };
147
+ }, [apiKey]);
148
+
149
+ const templateWithReview = useMemo(() => ensureReviewSubmitStep(template), [template, ensureReviewSubmitStep, apiKey]);
150
+ const templateWithReviewAndVerification = useMemo(() => ensureVerificationProgressStep(templateWithReview), [templateWithReview, ensureVerificationProgressStep, apiKey]);
151
+
152
+ // État initial du flux (initialComponentIndex = index dans template.components pour reprendre au bon composant)
153
+ const buildInitialState = (): TemplateState => {
154
+ let resumeAtIndex = 0;
155
+ let completedComponents: number[] = [];
156
+ let initialComponentData: Record<number, unknown> = {};
157
+
158
+ logger.log('buildInitialState called', { initialComponentIndex, existingSessionId, initialCountryResume });
159
+
160
+ if (initialComponentIndex !== undefined && initialComponentIndex >= 0) {
161
+ const maxIndex = templateWithReviewAndVerification.components.length - 1;
162
+ const requestedIndex = Math.min(initialComponentIndex, maxIndex);
163
+ const requestedComponent = templateWithReviewAndVerification.components[requestedIndex];
164
+
165
+ logger.log('Processing initialComponentIndex (component in template)', {
166
+ initialComponentIndex,
167
+ requestedIndex,
168
+ maxIndex,
169
+ componentType: requestedComponent?.type,
170
+ componentId: requestedComponent?.id,
171
+ });
172
+
173
+ // Reprendre au composant en cours (id_card, selfie, etc.)
174
+ if (requestedComponent?.type === 'id_card') {
175
+ if (existingSessionId) {
176
+ logger.log('id_card with existing session - staying at id_card');
177
+ resumeAtIndex = requestedIndex;
178
+ if (resumeAtIndex > 0) {
179
+ completedComponents = templateWithReviewAndVerification.components
180
+ .slice(0, resumeAtIndex)
181
+ .map(component => component.id);
182
+ }
183
+ } else {
184
+ const countrySelectionIndex = templateWithReviewAndVerification.components.findIndex(
185
+ c => c.type === 'country_selection'
186
+ );
187
+ logger.log('id_card without session - going back to country_selection', { countrySelectionIndex });
188
+ if (countrySelectionIndex >= 0) {
189
+ resumeAtIndex = countrySelectionIndex;
190
+ if (countrySelectionIndex > 0) {
191
+ completedComponents = templateWithReviewAndVerification.components
192
+ .slice(0, countrySelectionIndex)
193
+ .map(component => component.id);
194
+ }
195
+ } else {
196
+ resumeAtIndex = 0;
197
+ }
198
+ }
199
+ } else if (requestedComponent?.type === 'review_submit') {
200
+ resumeAtIndex = requestedIndex;
201
+ completedComponents = [];
202
+ } else {
203
+ resumeAtIndex = requestedIndex;
204
+ if (resumeAtIndex > 0) {
205
+ completedComponents = templateWithReviewAndVerification.components
206
+ .slice(0, resumeAtIndex)
207
+ .map(component => component.id);
208
+ }
209
+ }
210
+
211
+ logger.log('Final initial state (resume at component index)', {
212
+ resumeAtIndex,
213
+ completedComponentsCount: completedComponents.length,
214
+ componentAtResume: templateWithReviewAndVerification.components[resumeAtIndex]?.type,
215
+ });
216
+ }
217
+
218
+ if (initialCountryResume?.code && initialCountryResume?.documentType) {
219
+ const countrySel = templateWithReviewAndVerification.components.find(c => c.type === 'country_selection');
220
+ if (countrySel && countryData[initialCountryResume.code]) {
221
+ initialComponentData[countrySel.id] = {
222
+ code: initialCountryResume.code,
223
+ documentType: initialCountryResume.documentType,
224
+ region: initialCountryResume.region || 'root',
225
+ ...countryData[initialCountryResume.code],
226
+ };
227
+ logger.log('Prefilled country_selection from URL', { code: initialCountryResume.code, documentType: initialCountryResume.documentType });
228
+ }
229
+ }
230
+
231
+ return {
232
+ template: templateWithReviewAndVerification,
233
+ currentComponentIndex: resumeAtIndex,
234
+ completedComponents: completedComponents,
235
+ componentData: initialComponentData,
236
+ errors: {},
237
+ isProcessing: false,
238
+ currentLanguage: initialLanguage,
239
+ showCustomStepper: true,
240
+ session: {
241
+ session_id: existingSessionId || '',
242
+ token: '',
243
+ isInitialized: false,
244
+ isProcessing: false,
245
+ error: null,
246
+ sessionDataRestored: !existingSessionId || Boolean(initialCountryResume?.code && initialCountryResume?.documentType),
247
+ },
248
+ verification: {
249
+ status: 'idle',
250
+ },
251
+ };
252
+ };
253
+
254
+ // État du flux
255
+ const [state, setState] = useState<TemplateState>(() => buildInitialState());
256
+
257
+ // Fonction utilitaire pour convertir base64 en data URI pour l'affichage
258
+ const base64ToDataUri = useCallback((base64: string, mimeType: string = 'image/jpeg'): string => {
259
+ // Si c'est déjà une data URI, retourner tel quel
260
+ if (base64.startsWith('data:')) {
261
+ return base64;
262
+ }
263
+ // Sinon, créer une data URI
264
+ return `data:${mimeType};base64,${base64}`;
265
+ }, []);
266
+
267
+ // Charger les données de session si on reprend une session existante
268
+ useEffect(() => {
269
+ const loadSessionData = async () => {
270
+ // Ne charger que si on a une session existante
271
+ if (!existingSessionId) {
272
+ logger.log('No existingSessionId, skipping data load');
273
+ return;
274
+ }
275
+
276
+ // Si initialComponentIndex n'est pas défini ou est 0, on ne charge pas (début de session)
277
+ if (initialComponentIndex === undefined || initialComponentIndex === 0) {
278
+ logger.log('initialComponentIndex is 0 or undefined, skipping data load');
279
+ return;
280
+ }
281
+
282
+ // Attendre que la session soit initialisée
283
+ if (!state.session.isInitialized || !state.session.session_id) {
284
+ logger.log('Session not initialized yet, waiting...', {
285
+ isInitialized: state.session.isInitialized,
286
+ sessionId: state.session.session_id
287
+ });
288
+ return;
289
+ }
290
+
291
+ try {
292
+ logger.log('Loading session data for resume:', { sessionId: existingSessionId, componentIndex: initialComponentIndex });
293
+ const result = await kycService.getVerificationResult(state.session.session_id);
294
+ const sessionData = result[state.session.session_id]?.data;
295
+
296
+ if (sessionData) {
297
+ // Restaurer les données des composants depuis la session
298
+ // Utiliser 'as any' car VerificationResult peut avoir des propriétés dynamiques
299
+ const data: any = sessionData;
300
+ const restoredComponentData: Record<number, any> = {};
301
+
302
+ // Parcourir les composants jusqu'au composant de reprise (inclu) pour restaurer leurs données
303
+ templateWithReviewAndVerification.components
304
+ .slice(0, initialComponentIndex + 1)
305
+ .forEach((component) => {
306
+ // Essayer de restaurer les données selon le type de composant
307
+ if (component.type === 'id_card' || component.type === 'file_upload') {
308
+ // Les documents peuvent être dans différentes structures
309
+ let documents: any = null;
310
+
311
+ // Chercher dans différentes structures possibles
312
+ if (data.documents) {
313
+ documents = data.documents;
314
+ } else if (data.user_data?.documents) {
315
+ documents = data.user_data.documents;
316
+ } else if (data.document_images) {
317
+ documents = data.document_images;
318
+ }
319
+
320
+ if (documents) {
321
+ // Convertir les images base64 en format utilisable
322
+ const restoredDocuments: Record<string, any> = {};
323
+
324
+ Object.keys(documents).forEach((key) => {
325
+ const doc = documents[key];
326
+ if (typeof doc === 'object' && doc !== null) {
327
+ // Si on a un fichier base64, créer une structure avec dir et file
328
+ if (doc.file || doc.base64) {
329
+ const base64Data = doc.file || doc.base64;
330
+ restoredDocuments[key] = {
331
+ dir: base64ToDataUri(base64Data), // Utiliser data URI pour l'affichage
332
+ file: base64Data, // Garder le base64 pour l'envoi
333
+ mrz: doc.mrz || '',
334
+ templatePath: doc.templatePath || '',
335
+ };
336
+ } else {
337
+ // Sinon, garder la structure originale
338
+ restoredDocuments[key] = doc;
339
+ }
340
+ } else if (typeof doc === 'string') {
341
+ // Si c'est directement une string base64
342
+ restoredDocuments[key] = {
343
+ dir: base64ToDataUri(doc),
344
+ file: doc,
345
+ mrz: '',
346
+ templatePath: '',
347
+ };
348
+ }
349
+ });
350
+
351
+ if (Object.keys(restoredDocuments).length > 0) {
352
+ restoredComponentData[component.id] = restoredDocuments;
353
+ }
354
+ }
355
+ } else if (component.type === 'selfie') {
356
+ // Les selfies peuvent être dans sessionData.selfie_info
357
+ if (data.selfie_info) {
358
+ const selfieData: Record<string, any> = {};
359
+ const selfieInfo: any = data.selfie_info;
360
+
361
+ // Si selfie_info contient une image
362
+ if (selfieInfo.image) {
363
+ const base64Image = selfieInfo.image;
364
+ selfieData['front'] = {
365
+ dir: base64ToDataUri(base64Image),
366
+ file: base64Image,
367
+ };
368
+ }
369
+
370
+ // Si on a plusieurs orientations
371
+ if (selfieInfo.orientations) {
372
+ Object.keys(selfieInfo.orientations).forEach((orientation) => {
373
+ const img = selfieInfo.orientations[orientation];
374
+ if (img) {
375
+ selfieData[orientation] = {
376
+ dir: base64ToDataUri(img),
377
+ file: img,
378
+ };
379
+ }
380
+ });
381
+ }
382
+
383
+ if (Object.keys(selfieData).length > 0) {
384
+ restoredComponentData[component.id] = selfieData;
385
+ }
386
+ }
387
+ } else if (component.type === 'country_selection') {
388
+ // Reconstruire country_selection au format attendu par IDCardCapture / CountrySelectionTemplate (code, documentType, region, regionMapping)
389
+ const meta = data.metadata || data.user_data || data;
390
+ const code = meta.country || meta.country_code || meta.code;
391
+ const documentType = meta.document_type || meta.documentType;
392
+ const region = meta.region;
393
+ if (code && documentType != null) {
394
+ const country = countryData[code];
395
+ const mapping = countryMapping[code as keyof typeof countryMapping];
396
+ if (country) {
397
+ restoredComponentData[component.id] = {
398
+ code,
399
+ ...country,
400
+ documentType,
401
+ region: region || undefined,
402
+ regionMapping: mapping || undefined,
403
+ };
404
+ logger.log('Restored country_selection for resume', { code, documentType, region });
405
+ } else {
406
+ restoredComponentData[component.id] = { code, documentType, region: region || undefined, regionMapping: mapping || undefined };
407
+ }
408
+ } else if (data.metadata || data.user_data) {
409
+ restoredComponentData[component.id] = {
410
+ ...(data.metadata || {}),
411
+ ...(data.user_data || {}),
412
+ };
413
+ }
414
+ } else if (component.type === 'location') {
415
+ // Les données de localisation peuvent être dans metadata
416
+ if (data.metadata?.location || data.user_data?.location) {
417
+ restoredComponentData[component.id] = {
418
+ ...(data.metadata?.location || {}),
419
+ ...(data.user_data?.location || {}),
420
+ };
421
+ }
422
+ }
423
+ });
424
+
425
+ // Fallback: si pas de country_selection restauré mais on a des documents avec templatePath, déduire code/documentType (ex. "templates/national_id_CM_front.jpg")
426
+ const countrySelectionComponent = templateWithReviewAndVerification.components.find(c => c.type === 'country_selection');
427
+ if (countrySelectionComponent && !restoredComponentData[countrySelectionComponent.id] && data.documents) {
428
+ const docs = data.documents as Record<string, { templatePath?: string }>;
429
+ const firstDoc = Object.values(docs).find(d => d?.templatePath);
430
+ const path = firstDoc?.templatePath || '';
431
+ const match = path.match(/([a-z_]+)_([A-Z]{2})(?:_|$)/i) || path.match(/([A-Z]{2})/);
432
+ const code = match ? (match[2] || match[1]).toUpperCase().slice(0, 2) : null;
433
+ const docTypeFromPath = path.match(/(national_id|identity_card|passport|passport_card)/i)?.[1]?.toLowerCase().replace('identity_card', 'national_id') || null;
434
+ if (code && countryData[code]) {
435
+ const documentType = docTypeFromPath || 'national_id';
436
+ const mapping = countryMapping[code as keyof typeof countryMapping];
437
+ const country = countryData[code];
438
+ restoredComponentData[countrySelectionComponent.id] = {
439
+ code,
440
+ ...country,
441
+ documentType,
442
+ region: undefined,
443
+ regionMapping: mapping || undefined,
444
+ };
445
+ logger.log('Restored country_selection from document templatePath', { code, documentType, path });
446
+ }
447
+ }
448
+
449
+ // Mettre à jour l'état avec les données restaurées
450
+ if (Object.keys(restoredComponentData).length > 0) {
451
+ logger.log('Session data restored - components:', Object.keys(restoredComponentData));
452
+ logger.log('Session data restored - sample data:', truncateFields(restoredComponentData));
453
+ setState(prev => ({
454
+ ...prev,
455
+ componentData: {
456
+ ...prev.componentData,
457
+ ...restoredComponentData,
458
+ },
459
+ session: { ...prev.session, sessionDataRestored: true },
460
+ }));
461
+ logger.log('Component data updated in state');
462
+ } else {
463
+ logger.log('No component data to restore from session');
464
+ setState(prev => ({ ...prev, session: { ...prev.session, sessionDataRestored: true } }));
465
+ }
466
+ } else {
467
+ setState(prev => ({ ...prev, session: { ...prev.session, sessionDataRestored: true } }));
468
+ }
469
+ } catch (error) {
470
+ logger.error('Error loading session data:', truncateFields(error));
471
+ setState(prev => ({ ...prev, session: { ...prev.session, sessionDataRestored: true } }));
472
+ }
473
+ };
474
+
475
+ loadSessionData();
476
+ }, [existingSessionId, initialComponentIndex, state.session.isInitialized, state.session.session_id, templateWithReviewAndVerification.components, base64ToDataUri]);
477
+
478
+ // Si l'index pointe vers Review alors que des étapes ne sont pas complétées, ramener à la première étape incomplète
479
+ useEffect(() => {
480
+ const comp = state.template.components[state.currentComponentIndex];
481
+ if (!comp || comp.type !== 'review_submit') return;
482
+ const nonReview = state.template.components.filter(
483
+ c => c.type !== 'review_submit' && c.type !== 'verification_progress'
484
+ );
485
+ if (nonReview.every(c => state.completedComponents.includes(c.id))) return;
486
+ const firstIncomplete = nonReview.find(c => !state.completedComponents.includes(c.id));
487
+ if (!firstIncomplete) return;
488
+ const targetIndex = state.template.components.findIndex(c => c.id === firstIncomplete.id);
489
+ if (targetIndex >= 0 && targetIndex !== state.currentComponentIndex) {
490
+ setState(prev => ({ ...prev, currentComponentIndex: targetIndex }));
491
+ }
492
+ }, [state.currentComponentIndex, state.completedComponents, state.template.components]);
493
+
494
+ const mapComponentTypeToAction = useCallback((type: TemplateComponent['type']): string | null => {
495
+ switch (type) {
496
+ case 'id_card':
497
+ case 'file_upload':
498
+ return 'document_upload';
499
+ case 'selfie':
500
+ return 'selfie_capture';
501
+ case 'location':
502
+ return 'location_permission';
503
+ case 'review_submit':
504
+ return 'final_submit';
505
+ case 'country_selection':
506
+ // No direct backend action; pack into metadata of next actionable step
507
+ return null;
508
+ case 'welcome':
509
+ // UI-only step, no backend action needed
510
+ return null;
511
+ case 'initialization':
512
+ return 'initialize_session';
513
+ case 'verification_progress':
514
+ return null; // UI-only
515
+ default:
516
+ return null;
517
+ }
518
+ }, []);
519
+
520
+ const chooseTemplateId = useCallback((tpl: KYCTemplate): string => {
521
+ const types = tpl.components.map(c => c.type);
522
+ const hasLocation = types.includes('location');
523
+ const hasSelfie = types.includes('selfie');
524
+ const hasIdDoc = types.includes('id_card') || types.includes('file_upload');
525
+ // Simple heuristic to map to backend examples
526
+ if (hasLocation && hasSelfie && hasIdDoc) return 'enhanced_id';
527
+ if (hasSelfie && hasIdDoc) return 'standard_passport';
528
+ return 'standard_passport';
529
+ }, [apiKey]);
530
+
531
+
532
+ const computeServerStepIndex = useCallback((tpl: KYCTemplate, upToIndex: number): number => {
533
+ // Count actionable steps before the current component (exclude UI-only and country_selection)
534
+ const actionable = tpl.components
535
+ .slice(0, upToIndex)
536
+ .filter(c => !isUiOnlyStep(c.type) && mapComponentTypeToAction(c.type) !== null);
537
+ return actionable.length; // 0-based
538
+ }, [isUiOnlyStep, mapComponentTypeToAction, apiKey]);
539
+
540
+ // Build backend-friendly payloads per action
541
+ const buildPayloadForComponent = useCallback((action: string | null, component: TemplateComponent, rawData: any, templateId: string, step: number) => {
542
+ console.log('apiKey in buildPayloadForComponent', apiKey);
543
+
544
+ const base = { template_id: templateId || null, templateId: templateId || null, step: component.order, permissionGranted: true } as any;
545
+ if (!action) {
546
+ return base;
547
+ }
548
+ // Document upload expects documents; include country_selection in metadata so resume can restore it
549
+ if (action === 'document_upload') {
550
+ const documents: Record<string, any> = {};
551
+ if (rawData && typeof rawData === 'object') {
552
+ Object.keys(rawData).forEach((key) => {
553
+ documents[key] = rawData[key];
554
+ });
555
+ }
556
+ const countryComp = state.template.components.find(c => c.type === 'country_selection');
557
+ const countryDataForPayload = countryComp ? state.componentData[countryComp.id] : null;
558
+ const metadata: Record<string, unknown> = {};
559
+ if (countryDataForPayload?.code) {
560
+ metadata.country = countryDataForPayload.code;
561
+ metadata.document_type = countryDataForPayload.documentType;
562
+ if (countryDataForPayload.region != null) metadata.region = countryDataForPayload.region;
563
+ }
564
+ return {
565
+ ...base,
566
+ documents,
567
+ ...(Object.keys(metadata).length > 0 ? { metadata } : {}),
568
+ };
569
+ }
570
+
571
+ if (action === 'selfie_capture') {
572
+ const documents: Record<string, any> = {};
573
+ if (rawData && typeof rawData === 'object') {
574
+
575
+ Object.keys(rawData).forEach((key) => {
576
+ documents[key] = rawData[key];
577
+ });
578
+ }
579
+ const idCardID = Object.keys(state.componentData).find((c: string) => c === "1");
580
+ if (idCardID) {
581
+ const _idCardData = state.componentData[idCardID];
582
+ const documentType = _idCardData?.documentType;
583
+ // Map national_id to identity_card for selfie capture
584
+ const mappedDocumentType = documentType === 'national_id' ? 'identity_card' : (documentType as GovernmentDocumentType || 'identity_card');
585
+ return { ...base, documents, country: _idCardData?.country || '', documentType: mappedDocumentType };
586
+ }
587
+ return { ...base, documents };
588
+ }
589
+
590
+ if (action === 'location_permission') {
591
+ return { ...base, ...({ metadata: rawData || {} }), ...({ permissionGranted: true, }) };
592
+ }
593
+
594
+ // Default: wrap as metadata
595
+ return { ...base, metadata: { ...(rawData || {}) } };
596
+ }, [state.componentData, apiKey]);
597
+ // Ensure the template contains a final review step
598
+
599
+ // console.log('apiKey in useTemplateKYCFlow', apiKey);
600
+
601
+
602
+ // Composant actuel (peut être redirigé si on pointe vers Review alors que le flux n'est pas terminé)
603
+ const currentComponent = useMemo(() => {
604
+ const comp = state.template.components[state.currentComponentIndex] || null;
605
+ if (!comp || comp.type !== 'review_submit') return comp;
606
+ const nonReview = state.template.components.filter(
607
+ c => c.type !== 'review_submit' && c.type !== 'verification_progress'
608
+ );
609
+ const allDone = nonReview.every(c => state.completedComponents.includes(c.id));
610
+ if (allDone) return comp;
611
+ const firstIncomplete = nonReview.find(c => !state.completedComponents.includes(c.id));
612
+ return firstIncomplete || comp;
613
+ }, [state.template.components, state.currentComponentIndex, state.completedComponents, apiKey]);
614
+
615
+ // Progression du flux (basée sur le composant effectivement affiché)
616
+ const progress = useMemo(() => {
617
+ const idx = currentComponent
618
+ ? state.template.components.findIndex(c => c.id === currentComponent.id)
619
+ : state.currentComponentIndex;
620
+ const i = idx >= 0 ? idx : state.currentComponentIndex;
621
+ return state.template.components.length > 0
622
+ ? ((i + 1) / state.template.components.length) * 100
623
+ : 0;
624
+ }, [currentComponent, state.template.components, state.currentComponentIndex, apiKey]);
625
+
626
+ // Vérifications de navigation
627
+ const canGoNext = useMemo(() => {
628
+ return state.currentComponentIndex < state.template.components.length - 1;
629
+ }, [state.currentComponentIndex, state.template.components.length, apiKey]);
630
+
631
+ const canGoPrevious = useMemo(() => {
632
+ return state.currentComponentIndex > 0;
633
+ }, [state.currentComponentIndex, apiKey]);
634
+
635
+ const isComplete = useMemo(() => {
636
+ const atReview = state.template.components[state.currentComponentIndex]?.type === 'review_submit';
637
+ const nonReviewCount = state.template.components.filter(c => c.type !== 'review_submit').length;
638
+ const completedNonReview = state.completedComponents.length >= nonReviewCount;
639
+ return atReview && completedNonReview;
640
+ }, [state.currentComponentIndex, state.completedComponents.length, state.template.components, apiKey]);
641
+
642
+ // Fonction pour obtenir le texte localisé
643
+ const getLocalizedText = useCallback((text: { en: string; fr: string;[key: string]: string }): string => {
644
+ return text[state.currentLanguage] || text.en || '';
645
+ }, [state.currentLanguage, apiKey]);
646
+
647
+ const initializeSession = useCallback(async () => {
648
+ try {
649
+ setState(prev => ({
650
+ ...prev,
651
+ session: {
652
+ ...prev.session,
653
+ isInitialized: false,
654
+ isProcessing: true,
655
+ error: null,
656
+ },
657
+ }));
658
+ logger.log('Initializing session');
659
+
660
+ const token = apiKey ? undefined : await authentification();
661
+ console.log('token in initializeSession', { token, apiKey },);
662
+
663
+ // Check if we already have a session ID from URL params (passed via state or prop)
664
+ let session;
665
+ const existingSessionId = state.session.session_id; // This might be set from initial props if we add logic for it
666
+
667
+ if (existingSessionId && existingSessionId.length > 0) {
668
+ logger.log('Resuming existing session:', existingSessionId);
669
+ // Verify existence/validity if needed, for now trust the ID and just fetch/use it
670
+ session = { session_id: existingSessionId };
671
+ } else {
672
+ session = await kycService.newSession({ token, apiKey });
673
+ }
674
+
675
+ // Align backend flow from step 0 with initialize_session
676
+ try {
677
+ const templateId = chooseTemplateId(templateWithReviewAndVerification);
678
+ await kycService.verificationSession({
679
+ session_id: session.session_id,
680
+ step: 0,
681
+ data: { template_id: templateId, metadata: { language: initialLanguage } },
682
+ templateId: templateId,
683
+ token: token,
684
+ action: 'initialize_session',
685
+ apiKey: apiKey,
686
+ });
687
+ } catch (e) {
688
+ logger.error('Error initializing session:', JSON.stringify(e, null, 2));
689
+ // Non-fatal: we will surface errors via state below if needed
690
+ }
691
+
692
+ setState(prev => ({
693
+ ...prev,
694
+ session: {
695
+ ...prev.session,
696
+ session_id: session.session_id,
697
+ token: token,
698
+ isInitialized: true,
699
+ isProcessing: false,
700
+ error: null,
701
+ }
702
+ }));
703
+ } catch (error) {
704
+
705
+ logger.error('Error initializing session:', JSON.stringify(error, null, 2));
706
+ setState(prev => ({
707
+ ...prev,
708
+ session: {
709
+ ...prev.session,
710
+ isInitialized: false,
711
+ isProcessing: false,
712
+ error: "Erreur lors de l'initialisation de la session",
713
+ },
714
+ }));
715
+ }
716
+ }, [apiKey]);
717
+
718
+ // When user switches device: resume with existingSessionId + initialStep — ensure session is initialized so loadSessionData runs
719
+ useEffect(() => {
720
+ if (!existingSessionId || state.session.isInitialized) return;
721
+ if (state.session.session_id !== existingSessionId) return;
722
+ logger.log('Resuming on new device: initializing session so data can load', { existingSessionId, initialComponentIndex });
723
+ initializeSession();
724
+ }, [existingSessionId, state.session.session_id, state.session.isInitialized, initializeSession]);
725
+
726
+ // Validation d'un composant (dataOverride permet de valider sans attendre la mise à jour du state)
727
+ const validateComponent = useCallback((componentId: number, dataOverride?: any): boolean => {
728
+ const component = state.template.components.find(c => c.id === componentId);
729
+ if (!component) return false;
730
+
731
+ const componentData = dataOverride !== undefined ? dataOverride : state.componentData[componentId];
732
+
733
+ switch (component.type) {
734
+ case 'id_card':
735
+ // Vérifier si au moins un côté a été capturé
736
+ return componentData && Object.keys(componentData).length > 0;
737
+
738
+ case 'selfie':
739
+ // Vérifier si toutes les orientations ont été capturées
740
+ const config = component.config as any;
741
+ const orientations = config.orientations || ['front'];
742
+ return componentData && orientations.every((orientation: string) => componentData[orientation]);
743
+
744
+ case 'file_upload':
745
+ // Vérifier si un fichier a été uploadé
746
+ return componentData && componentData.file;
747
+
748
+ case 'location':
749
+ // Vérifier si la localisation a été obtenue
750
+ return componentData && componentData.latitude && componentData.longitude;
751
+
752
+ case 'country_selection':
753
+ // Vérifier si un pays a été sélectionné
754
+ logger.log("componentData", truncateFields(componentData), componentId);
755
+
756
+ return componentData && componentData.code && componentData.regionMapping;
757
+
758
+ case 'welcome':
759
+ // Welcome is valid once user has given consent (componentData is set when they click Get Started)
760
+ return componentData && componentData.consentGiven !== false;
761
+
762
+ case 'email_verification':
763
+ return componentData && componentData.verified === true;
764
+
765
+ case 'phone_verification':
766
+ return componentData && componentData.verified === true;
767
+
768
+ case 'personal_information':
769
+ return componentData && Object.keys(componentData).length > 0;
770
+
771
+ case 'additional_documents':
772
+ // Optional by default in template config, but if required we should check based on config
773
+ // For now, return true or check length if present
774
+ return true;
775
+
776
+ case 'review_submit':
777
+ return true;
778
+ default:
779
+ return false;
780
+ }
781
+ }, [state.template.components, state.componentData, apiKey]);
782
+
783
+ // Actions du flux
784
+ const actions: TemplateActions = {
785
+ // Initialiser le template
786
+ initializeTemplate: useCallback((newTemplate: KYCTemplate) => {
787
+ const withReview = ensureReviewSubmitStep(newTemplate);
788
+ const withVerification = ensureVerificationProgressStep(withReview);
789
+ setState(prev => ({
790
+ ...prev,
791
+ template: withVerification,
792
+ currentComponentIndex: 0,
793
+ completedComponents: [],
794
+ componentData: {},
795
+ errors: {},
796
+ isProcessing: false,
797
+ verification: { status: 'idle', result: undefined },
798
+ }));
799
+ }, [ensureReviewSubmitStep, ensureVerificationProgressStep, apiKey]),
800
+
801
+ // Passer au composant suivant (overrideData = données du step courant si déjà connues, évite un double clic)
802
+ nextComponent: useCallback(async (overrideData?: any) => {
803
+ if (!canGoNext) return;
804
+
805
+ const currentComp = state.template.components[state.currentComponentIndex];
806
+ if (!currentComp) return;
807
+
808
+ // Prevent multiple simultaneous calls
809
+ setState(prev => {
810
+ if (prev.isProcessing) {
811
+ return prev;
812
+ }
813
+ return {
814
+ ...prev,
815
+ isProcessing: true,
816
+ };
817
+ });
818
+ // Valider avec override ou state
819
+ if (!validateComponent(currentComp.id, overrideData)) {
820
+ setState(prev => ({
821
+ ...prev,
822
+ isProcessing: false,
823
+ errors: {
824
+ ...prev.errors,
825
+ [currentComp.id]: state.currentLanguage === "en" ? "please complete this step before moving on" : " 'Veuillez compléter cette étape avant de continuer'"
826
+ }
827
+ }));
828
+ return;
829
+
830
+ }
831
+
832
+ try {
833
+ const component = state.template.components.find(c => c.id === currentComp.id);
834
+ if (!component) {
835
+ setState(prev => ({
836
+ ...prev,
837
+ isProcessing: false,
838
+ }));
839
+ return;
840
+ }
841
+
842
+ if (component.type === 'review_submit') {
843
+ setState(prev => ({
844
+ ...prev,
845
+ currentComponentIndex: prev.currentComponentIndex + 1,
846
+ completedComponents: [...prev.completedComponents, currentComp.id],
847
+ componentData: overrideData !== undefined ? { ...prev.componentData, [currentComp.id]: overrideData } : prev.componentData,
848
+ isProcessing: false,
849
+ verification: { status: 'in_progress' },
850
+ errors: { ...prev.errors, [currentComp.id]: '' }
851
+ }));
852
+ return;
853
+ }
854
+ // Determine backend action and step index
855
+ const action = mapComponentTypeToAction(component.type);
856
+ const templateId = chooseTemplateId(state.template);
857
+ const serverStep = computeServerStepIndex(state.template, state.currentComponentIndex);
858
+
859
+ // Optionally send initialize_session at step 0 before first actionable action
860
+ if (serverStep === 0) {
861
+ try {
862
+ // await kycService.verificationSession({
863
+ // sessionId: state.session.session_id,
864
+ // step: 0,
865
+ // data: { template_id: templateId, metadata: { language: state.currentLanguage } },
866
+ // templateId: templateId,
867
+ // token: state.session.token,
868
+ // action: 'initialize_session'
869
+ // });
870
+ } catch (e) {
871
+ // if init fails, surface error below in the main call handling
872
+ }
873
+ }
874
+
875
+ // Skip UI-only and data-only steps that have no backend action
876
+ if (!action) {
877
+ setState(prev => ({
878
+ ...prev,
879
+ currentComponentIndex: prev.currentComponentIndex + 1,
880
+ completedComponents: [...prev.completedComponents, currentComp.id],
881
+ componentData: overrideData !== undefined ? { ...prev.componentData, [currentComp.id]: overrideData } : prev.componentData,
882
+ isProcessing: false,
883
+ errors: { ...prev.errors, [currentComp.id]: '' }
884
+ }));
885
+ return;
886
+ }
887
+
888
+ const step = serverStep === 0 && action !== 'initialize_session' ? 1 : serverStep;
889
+ const currentStepData = overrideData !== undefined ? overrideData : state.componentData[currentComp.id];
890
+ const payloadData = buildPayloadForComponent(action, component, currentStepData, templateId, step);
891
+ console.log('payloadData', action, apiKey);
892
+
893
+ await kycService.verificationSession({
894
+ session_id: state.session.session_id,
895
+ step: step,
896
+ data: payloadData,
897
+ templateId: templateId,
898
+ token: state.session.token,
899
+ action: action,
900
+ apiKey: apiKey ?? "-",
901
+ });
902
+ logger.log("currentComp state", truncateFields(state));
903
+ setState(prev => ({
904
+ ...prev,
905
+ currentComponentIndex: prev.currentComponentIndex + 1,
906
+ completedComponents: [...prev.completedComponents, currentComp.id],
907
+ componentData: overrideData !== undefined ? { ...prev.componentData, [currentComp.id]: overrideData } : prev.componentData,
908
+ isProcessing: false,
909
+ ...(action === "location_permission" ? { permissionGranted: true } : {}),
910
+ errors: { ...prev.errors, [currentComp.id]: '' }
911
+ }));
912
+
913
+ } catch (error) {
914
+ logger.error('Error in nextComponent:', error);
915
+ setState(prev => ({
916
+ ...prev,
917
+ isProcessing: false,
918
+ errors: {
919
+ ...prev.errors,
920
+ [currentComp.id]: 'Erreur lors de la validation du composant'
921
+ }
922
+ }));
923
+ }
924
+
925
+ }, [canGoNext, state.currentComponentIndex, state.template.components, validateComponent, apiKey, state.session.session_id, state.session.token, buildPayloadForComponent, mapComponentTypeToAction, chooseTemplateId, state.currentLanguage]),
926
+
927
+ // Retourner au composant précédent
928
+ previousComponent: useCallback(() => {
929
+ if (!canGoPrevious) return;
930
+
931
+ setState(prev => ({
932
+ ...prev,
933
+ currentComponentIndex: prev.currentComponentIndex - 1,
934
+ }));
935
+ }, [canGoPrevious, apiKey]),
936
+
937
+ // Aller à un composant spécifique
938
+ goToComponent: useCallback((componentId: number) => {
939
+ const componentIndex = state.template.components.findIndex(c => c.id === componentId);
940
+ if (componentIndex !== -1) {
941
+ setState(prev => ({
942
+ ...prev,
943
+ currentComponentIndex: componentIndex,
944
+ }));
945
+ }
946
+ }, [state.template.components, apiKey]),
947
+
948
+ // Mettre à jour les données d'un composant
949
+ updateComponentData: useCallback((componentId: number, data: any) => {
950
+ logger.log("updateComponentData", componentId, JSON.stringify(truncateFields(data), null, 2));
951
+
952
+ setState(prev => ({
953
+ ...prev,
954
+ componentData: {
955
+ ...prev.componentData,
956
+ [componentId]: data
957
+ },
958
+ errors: {
959
+ ...prev.errors,
960
+ [componentId]: ''
961
+ }
962
+ }));
963
+
964
+ }, [apiKey]),
965
+
966
+ // Valider un composant
967
+ validateComponent: useCallback((componentId: number, dataOverride?: any) => {
968
+ return validateComponent(componentId, dataOverride);
969
+ }, [validateComponent, apiKey]),
970
+ // complet verification
971
+ submitVerification: useCallback(async () => {
972
+ setState(prev => ({ ...prev, isProcessing: true }));
973
+ try {
974
+ onComplete?.(state.verification);
975
+
976
+ } catch (error) {
977
+ setState(prev => ({ ...prev, isProcessing: false }));
978
+ }
979
+ }, [state.session.session_id, state.verification, onComplete, apiKey]),
980
+
981
+ // Soumettre le template complet
982
+ submitTemplate: useCallback(async () => {
983
+ // Allow submission when on the review step and all previous steps are valid
984
+ const atReview = state.template.components[state.currentComponentIndex]?.type === 'review_submit';
985
+ const allValid = state.template.components
986
+ .filter(c => c.type !== 'review_submit')
987
+ .every(comp => validateComponent(comp.id));
988
+ if (!(atReview && allValid)) {
989
+ onError?.('Le flux KYC n\'est pas encore terminé');
990
+ return;
991
+ }
992
+
993
+ setState(prev => ({ ...prev, isProcessing: true }));
994
+
995
+ try {
996
+ // Vérifier que tous les composants (hors review) sont validés
997
+ if (!allValid) throw new Error('Certaines étapes ne sont pas complètes');
998
+
999
+ // Appeler le callback de completion
1000
+ // onComplete?.(state.componentData);
1001
+
1002
+ setState(prev => ({ ...prev, isProcessing: false }));
1003
+ } catch (error) {
1004
+ setState(prev => ({ ...prev, isProcessing: false }));
1005
+ onError?.(error instanceof Error ? error.message : 'Erreur lors de la soumission');
1006
+ }
1007
+ }, [state.template.components, state.verification, state.currentComponentIndex, validateComponent, state.componentData, onComplete, onError, apiKey]),
1008
+
1009
+ // Réinitialiser le template
1010
+ resetTemplate: useCallback(() => {
1011
+ setState(buildInitialState());
1012
+ }, [buildInitialState, apiKey]),
1013
+
1014
+ // Changer la langue
1015
+ setLanguage: useCallback((language: string) => {
1016
+ setState(prev => ({
1017
+ ...prev,
1018
+ currentLanguage: language,
1019
+ }));
1020
+ }, [apiKey]),
1021
+
1022
+ // Afficher le stepper personnalisé
1023
+ showCustomStepper: useCallback((show: boolean) => {
1024
+ setState(prev => ({
1025
+ ...prev,
1026
+ showCustomStepper: show,
1027
+ }));
1028
+ }, [apiKey]),
1029
+
1030
+ setVerificationState: useCallback((verificationState) => {
1031
+ setState(prev => ({
1032
+ ...prev,
1033
+ verification: verificationState,
1034
+ }));
1035
+ }, [apiKey]),
1036
+ };
1037
+
1038
+ return {
1039
+ state,
1040
+ actions,
1041
+ currentComponent,
1042
+ progress,
1043
+ canGoNext,
1044
+ canGoPrevious,
1045
+ isComplete,
1046
+ getLocalizedText,
1047
+ initializeSession,
1048
+ env,
1049
+ apiKey,
1050
+ } as UseTemplateReturn;
1051
+ };