@transfergratis/react-native-sdk 0.1.22 → 0.1.24

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 (142) hide show
  1. package/android/src/main/AndroidManifest.xml +9 -4
  2. package/build/components/EnhancedCameraView.d.ts.map +1 -1
  3. package/build/components/EnhancedCameraView.js +26 -3
  4. package/build/components/EnhancedCameraView.js.map +1 -1
  5. package/build/components/EnhancedCameraView.web.d.ts.map +1 -1
  6. package/build/components/EnhancedCameraView.web.js +21 -0
  7. package/build/components/EnhancedCameraView.web.js.map +1 -1
  8. package/build/components/KYCElements/CameraCapture.d.ts.map +1 -1
  9. package/build/components/KYCElements/CameraCapture.js +4 -3
  10. package/build/components/KYCElements/CameraCapture.js.map +1 -1
  11. package/build/components/KYCElements/CountrySelectionTemplate.d.ts +5 -2
  12. package/build/components/KYCElements/CountrySelectionTemplate.d.ts.map +1 -1
  13. package/build/components/KYCElements/CountrySelectionTemplate.js +360 -101
  14. package/build/components/KYCElements/CountrySelectionTemplate.js.map +1 -1
  15. package/build/components/KYCElements/FileUpload.d.ts.map +1 -1
  16. package/build/components/KYCElements/FileUpload.js +5 -4
  17. package/build/components/KYCElements/FileUpload.js.map +1 -1
  18. package/build/components/KYCElements/FileUploadTemplate.d.ts.map +1 -1
  19. package/build/components/KYCElements/FileUploadTemplate.js +5 -4
  20. package/build/components/KYCElements/FileUploadTemplate.js.map +1 -1
  21. package/build/components/KYCElements/IDCardCapture.d.ts.map +1 -1
  22. package/build/components/KYCElements/IDCardCapture.js +193 -237
  23. package/build/components/KYCElements/IDCardCapture.js.map +1 -1
  24. package/build/components/KYCElements/LocationCaptureTemplate.d.ts.map +1 -1
  25. package/build/components/KYCElements/LocationCaptureTemplate.js +78 -37
  26. package/build/components/KYCElements/LocationCaptureTemplate.js.map +1 -1
  27. package/build/components/KYCElements/OrientationVideoCapture.js +3 -2
  28. package/build/components/KYCElements/OrientationVideoCapture.js.map +1 -1
  29. package/build/components/KYCElements/OrientationVideoCaptureEnhanced.js +3 -2
  30. package/build/components/KYCElements/OrientationVideoCaptureEnhanced.js.map +1 -1
  31. package/build/components/KYCElements/OrientationVideoCaptureFinal.js +3 -2
  32. package/build/components/KYCElements/OrientationVideoCaptureFinal.js.map +1 -1
  33. package/build/components/KYCElements/SelfieCapture.d.ts.map +1 -1
  34. package/build/components/KYCElements/SelfieCapture.js +4 -3
  35. package/build/components/KYCElements/SelfieCapture.js.map +1 -1
  36. package/build/components/KYCElements/SelfieCaptureTemplate.d.ts.map +1 -1
  37. package/build/components/KYCElements/SelfieCaptureTemplate.js +182 -39
  38. package/build/components/KYCElements/SelfieCaptureTemplate.js.map +1 -1
  39. package/build/components/KYCElements/WelcomeTemplate.d.ts +12 -0
  40. package/build/components/KYCElements/WelcomeTemplate.d.ts.map +1 -0
  41. package/build/components/KYCElements/WelcomeTemplate.js +243 -0
  42. package/build/components/KYCElements/WelcomeTemplate.js.map +1 -0
  43. package/build/components/TemplateKYCExample.d.ts +4 -2
  44. package/build/components/TemplateKYCExample.d.ts.map +1 -1
  45. package/build/components/TemplateKYCExample.js +5 -68
  46. package/build/components/TemplateKYCExample.js.map +1 -1
  47. package/build/components/TemplateKYCFlowRefactored.d.ts +2 -1
  48. package/build/components/TemplateKYCFlowRefactored.d.ts.map +1 -1
  49. package/build/components/TemplateKYCFlowRefactored.js +95 -9
  50. package/build/components/TemplateKYCFlowRefactored.js.map +1 -1
  51. package/build/components/example/DynamicTemplateExample.d.ts +10 -0
  52. package/build/components/example/DynamicTemplateExample.d.ts.map +1 -0
  53. package/build/components/example/DynamicTemplateExample.js +241 -0
  54. package/build/components/example/DynamicTemplateExample.js.map +1 -0
  55. package/build/config/allowedDomains.d.ts +30 -0
  56. package/build/config/allowedDomains.d.ts.map +1 -0
  57. package/build/config/allowedDomains.js +127 -0
  58. package/build/config/allowedDomains.js.map +1 -0
  59. package/build/hooks/useTemplateKYCFlow.d.ts.map +1 -1
  60. package/build/hooks/useTemplateKYCFlow.js +68 -43
  61. package/build/hooks/useTemplateKYCFlow.js.map +1 -1
  62. package/build/hooks/useTemplateLoader.d.ts +14 -0
  63. package/build/hooks/useTemplateLoader.d.ts.map +1 -0
  64. package/build/hooks/useTemplateLoader.js +85 -0
  65. package/build/hooks/useTemplateLoader.js.map +1 -0
  66. package/build/i18n/en/index.d.ts +9 -0
  67. package/build/i18n/en/index.d.ts.map +1 -1
  68. package/build/i18n/en/index.js +9 -0
  69. package/build/i18n/en/index.js.map +1 -1
  70. package/build/i18n/fr/index.d.ts +9 -0
  71. package/build/i18n/fr/index.d.ts.map +1 -1
  72. package/build/i18n/fr/index.js +9 -0
  73. package/build/i18n/fr/index.js.map +1 -1
  74. package/build/index.d.ts +5 -0
  75. package/build/index.d.ts.map +1 -1
  76. package/build/index.js +8 -0
  77. package/build/index.js.map +1 -1
  78. package/build/modules/api/CardAuthentification.js +1 -0
  79. package/build/modules/api/CardAuthentification.js.map +1 -1
  80. package/build/modules/api/KYCService.d.ts +4 -1
  81. package/build/modules/api/KYCService.d.ts.map +1 -1
  82. package/build/modules/api/KYCService.js +17 -5
  83. package/build/modules/api/KYCService.js.map +1 -1
  84. package/build/modules/api/TemplateService.d.ts +45 -0
  85. package/build/modules/api/TemplateService.d.ts.map +1 -0
  86. package/build/modules/api/TemplateService.js +145 -0
  87. package/build/modules/api/TemplateService.js.map +1 -0
  88. package/build/modules/api/types.d.ts +1 -0
  89. package/build/modules/api/types.d.ts.map +1 -1
  90. package/build/modules/api/types.js.map +1 -1
  91. package/build/types/KYC.types.d.ts +144 -4
  92. package/build/types/KYC.types.d.ts.map +1 -1
  93. package/build/types/KYC.types.js +15 -0
  94. package/build/types/KYC.types.js.map +1 -1
  95. package/build/utils/cropByObb.d.ts +1 -0
  96. package/build/utils/cropByObb.d.ts.map +1 -1
  97. package/build/utils/cropByObb.js +70 -0
  98. package/build/utils/cropByObb.js.map +1 -1
  99. package/build/utils/platformAlert.d.ts +20 -0
  100. package/build/utils/platformAlert.d.ts.map +1 -0
  101. package/build/utils/platformAlert.js +67 -0
  102. package/build/utils/platformAlert.js.map +1 -0
  103. package/build/utils/template-transformer.d.ts +10 -0
  104. package/build/utils/template-transformer.d.ts.map +1 -0
  105. package/build/utils/template-transformer.js +353 -0
  106. package/build/utils/template-transformer.js.map +1 -0
  107. package/build/web/WebKYCEntry.d.ts.map +1 -1
  108. package/build/web/WebKYCEntry.js +102 -20
  109. package/build/web/WebKYCEntry.js.map +1 -1
  110. package/package.json +1 -1
  111. package/src/components/EnhancedCameraView.tsx +31 -2
  112. package/src/components/EnhancedCameraView.web.tsx +24 -0
  113. package/src/components/KYCElements/CameraCapture.tsx +4 -3
  114. package/src/components/KYCElements/CountrySelectionTemplate.tsx +410 -113
  115. package/src/components/KYCElements/FileUpload.tsx +5 -4
  116. package/src/components/KYCElements/FileUploadTemplate.tsx +5 -4
  117. package/src/components/KYCElements/IDCardCapture.tsx +196 -254
  118. package/src/components/KYCElements/LocationCaptureTemplate.tsx +95 -44
  119. package/src/components/KYCElements/OrientationVideoCapture.tsx +2 -2
  120. package/src/components/KYCElements/OrientationVideoCaptureEnhanced.tsx +2 -2
  121. package/src/components/KYCElements/OrientationVideoCaptureFinal.tsx +2 -2
  122. package/src/components/KYCElements/SelfieCapture.tsx +4 -3
  123. package/src/components/KYCElements/SelfieCaptureTemplate.tsx +195 -41
  124. package/src/components/KYCElements/WelcomeTemplate.tsx +289 -0
  125. package/src/components/TemplateKYCExample.tsx +16 -71
  126. package/src/components/TemplateKYCFlowRefactored.tsx +121 -11
  127. package/src/components/example/DynamicTemplateExample.tsx +289 -0
  128. package/src/config/allowedDomains.ts +152 -0
  129. package/src/hooks/useTemplateKYCFlow.tsx +71 -46
  130. package/src/hooks/useTemplateLoader.ts +102 -0
  131. package/src/i18n/en/index.ts +10 -0
  132. package/src/i18n/fr/index.ts +9 -0
  133. package/src/index.ts +11 -0
  134. package/src/modules/api/CardAuthentification.ts +1 -1
  135. package/src/modules/api/KYCService.ts +18 -8
  136. package/src/modules/api/TemplateService.ts +167 -0
  137. package/src/modules/api/types.ts +1 -0
  138. package/src/types/KYC.types.ts +188 -3
  139. package/src/utils/cropByObb.ts +83 -3
  140. package/src/utils/platformAlert.ts +85 -0
  141. package/src/utils/template-transformer.ts +433 -0
  142. package/src/web/WebKYCEntry.tsx +122 -24
@@ -1 +1 @@
1
- {"version":3,"file":"TemplateKYCFlowRefactored.js","sourceRoot":"","sources":["../../src/components/TemplateKYCFlowRefactored.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport { View, Text, StyleSheet, SafeAreaView, TouchableOpacity, ActivityIndicator, Dimensions, Alert } from 'react-native';\nimport { KYCTemplate, VerificationState } from '../types/KYC.types';\nimport { TemplateKYCFlowProvider, useTemplateKYCFlowContext } from '../hooks/useTemplateKYCFlow';\nimport { useI18n } from '../hooks/useI18n';\nimport { IDCardCapture } from './KYCElements/IDCardCapture';\nimport { SelfieCaptureTemplate } from './KYCElements/SelfieCaptureTemplate';\nimport { FileUploadTemplate } from './KYCElements/FileUploadTemplate';\nimport { LocationCaptureTemplate } from './KYCElements/LocationCaptureTemplate';\nimport { CountrySelectionTemplate } from './KYCElements/CountrySelectionTemplate';\nimport { InitializationStep } from './KYCElements/InitializationStep';\nimport { ReviewSubmitTemplate } from './KYCElements/ReviewSubmitTemplate';\nimport { VerificationProgressTemplate } from './KYCElements/VerificationProgressTemplate';\n\ninterface TemplateKYCFlowProps {\n template: KYCTemplate;\n onComplete?: (data: VerificationState) => void;\n onError?: (error: string) => void;\n language?: string;\n onCancel?: () => void;\n API_KEY?: string;\n}\n\nexport const TemplateKYCFlow: React.FC<TemplateKYCFlowProps> = ({\n template,\n onComplete,\n onError,\n language = 'fr',\n onCancel,\n API_KEY,\n}) => {\n const { t } = useI18n();\n\n const OnCancel = () => {\n Alert.alert(\n t('kyc.cancelConfirmation.title'),\n t('kyc.cancelConfirmation.message'),\n [\n { text: t('kyc.cancelConfirmation.cancelButton'), style: 'cancel' },\n {\n text: t('kyc.cancelConfirmation.confirmButton'),\n onPress: () => {\n onCancel?.();\n }\n },\n ]\n );\n };\n return (\n <TemplateKYCFlowProvider\n template={template}\n onComplete={onComplete}\n onError={onError}\n onCancel={OnCancel}\n initialLanguage={language}\n apiKey={API_KEY}\n >\n <TemplateKYCFlowContent onCancel={OnCancel} />\n </TemplateKYCFlowProvider>\n );\n};\n\nconst TemplateKYCFlowContent: React.FC<{ onCancel?: () => void }> = ({ onCancel }) => {\n const {\n state,\n actions,\n currentComponent,\n progress,\n } = useTemplateKYCFlowContext();\n\n const { t } = useI18n();\n\n const updateComponentData = (componentId: number, data: unknown) => {\n actions.updateComponentData(componentId, data);\n };\n\n if (!currentComponent) {\n return (\n <View style={styles.container}>\n <Text style={styles.errorText}>{t('errors.unknownError')}</Text>\n </View>\n );\n }\n\n // Rendu du composant actuel\n const renderCurrentComponent = () => {\n const commonProps = {\n component: currentComponent,\n value: state.componentData[currentComponent.id],\n onValueChange: (data: unknown) => updateComponentData(currentComponent.id, data),\n error: state.errors[currentComponent.id],\n language: state.currentLanguage,\n };\n\n if (!state.session.isInitialized) {\n return <InitializationStep session={state.session} />\n }\n\n switch (currentComponent.type) {\n case 'id_card':\n return <IDCardCapture {...commonProps} />;\n\n case 'selfie':\n return <SelfieCaptureTemplate {...commonProps} />;\n\n case 'file_upload':\n return <FileUploadTemplate {...commonProps} />;\n\n case 'location':\n return <LocationCaptureTemplate {...commonProps} />;\n\n case 'country_selection':\n return <CountrySelectionTemplate {...commonProps} />;\n\n case 'review_submit':\n return <ReviewSubmitTemplate {...commonProps} />;\n\n case 'verification_progress':\n return <VerificationProgressTemplate {...commonProps} />;\n\n default:\n return (\n <View style={styles.unsupportedContainer}>\n <Text style={styles.unsupportedText}>\n {t('errors.unknownError')}: {currentComponent.type}\n </Text>\n </View>\n );\n }\n };\n\n return (\n <View style={{ flex: 1, position: 'relative' }}>\n {state.isProcessing && (\n <View style={styles.processingContainer}>\n <Text style={styles.processingText}>{t('common.loading')}</Text>\n <ActivityIndicator size=\"large\" color=\"#fff\" />\n </View>\n )}\n <SafeAreaView style={styles.container}>\n {/* Header avec informations sur l'étape */}\n\n {(state.showCustomStepper && state.session.isInitialized) ? (\n <View style={styles.header}>\n <Text style={styles.progressText}>\n {t('kyc.step', { current: state.currentComponentIndex + 1, total: state.template.components.length })}\n </Text>\n <View style={styles.progressContainer}>\n <View style={styles.progressBar}>\n <View\n style={[\n styles.progressFill,\n { width: `${progress}%` }\n ]}\n />\n </View>\n\n </View>\n\n <View style={{ position: 'absolute', right: 12, top: 12 }}>\n <TouchableOpacity onPress={onCancel} disabled={!onCancel} style={{ opacity: onCancel ? 1 : 0.5 }}>\n <Text style={{ fontSize: 20, fontWeight: 'bold', color: '#333' }}>{`X`}</Text>\n </TouchableOpacity>\n </View>\n </View>\n ) : null}\n\n {/* Contenu principal */}\n <View style={styles.content}>\n {renderCurrentComponent()}\n </View>\n\n {state.isProcessing && (\n <View style={styles.processingContainer}>\n <Text style={styles.processingText}>{t('common.loading')}</Text>\n <ActivityIndicator size=\"large\" color=\"#fff\" />\n </View>\n )}\n </SafeAreaView>\n </View>\n\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n backgroundColor: '#f5f5f5',\n\n },\n header: {\n backgroundColor: 'white',\n paddingVertical: 20,\n paddingHorizontal: 12,\n borderBottomWidth: 1,\n borderBottomColor: '#e0e0e0',\n marginHorizontal: 12,\n marginTop: 12,\n // shadow\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.15,\n shadowRadius: 1.84,\n elevation: 5,\n },\n title: {\n fontSize: 24,\n fontWeight: 'bold',\n color: '#333',\n marginBottom: 8,\n },\n description: {\n fontSize: 16,\n color: '#666',\n marginBottom: 20,\n },\n progressContainer: {\n // marginBottom: 20,\n },\n progressBar: {\n height: 8,\n backgroundColor: '#e0e0e0',\n borderRadius: 4,\n overflow: 'hidden',\n },\n progressFill: {\n height: '100%',\n backgroundColor: '#2DBD60',\n borderRadius: 4,\n },\n progressText: {\n fontSize: 14,\n color: 'black',\n fontWeight: '600',\n textAlign: 'left',\n marginBottom: 8,\n },\n stepInfo: {\n backgroundColor: '#f8f9fa',\n padding: 16,\n borderRadius: 8,\n borderLeftWidth: 4,\n borderLeftColor: '#2DBD60',\n },\n stepTitle: {\n fontSize: 18,\n fontWeight: '600',\n color: '#333',\n marginBottom: 8,\n },\n stepDescription: {\n fontSize: 14,\n color: '#666',\n lineHeight: 20,\n },\n content: {\n flex: 1,\n // justifyContent: 'center',\n alignItems: 'center',\n // paddingTop: Dimensions.get('window').height > 760 ? 12 : 0,\n },\n navigation: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n padding: 20,\n backgroundColor: 'white',\n borderTopWidth: 1,\n borderTopColor: '#e0e0e0',\n },\n navButton: {\n paddingHorizontal: 24,\n paddingVertical: 12,\n borderRadius: 8,\n minWidth: 100,\n alignItems: 'center',\n },\n primaryButton: {\n backgroundColor: '#2DBD60',\n },\n navButtonText: {\n fontSize: 16,\n fontWeight: '600',\n color: 'white',\n },\n errorText: {\n color: '#dc2626',\n fontSize: 16,\n textAlign: 'center',\n margin: 20,\n },\n unsupportedContainer: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n padding: 20,\n },\n unsupportedText: {\n fontSize: 16,\n color: '#666',\n textAlign: 'center',\n },\n processingContainer: {\n position: 'absolute',\n flex: 1,\n width: Dimensions.get('window').width,\n height: Dimensions.get('window').height,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n justifyContent: 'center',\n alignItems: 'center',\n zIndex: 10000000,\n },\n processingText: {\n fontSize: 16,\n color: '#fff',\n textAlign: 'center',\n fontWeight: 'bold',\n marginBottom: 10,\n },\n}); "]}
1
+ {"version":3,"file":"TemplateKYCFlowRefactored.js","sourceRoot":"","sources":["../../src/components/TemplateKYCFlowRefactored.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect } from 'react';\nimport { View, Text, StyleSheet, SafeAreaView, TouchableOpacity, ActivityIndicator, Dimensions, ScrollView, Platform } from 'react-native';\nimport { KYCTemplate, VerificationState } from '../types/KYC.types';\nimport { TemplateKYCFlowProvider, useTemplateKYCFlowContext } from '../hooks/useTemplateKYCFlow';\nimport { useI18n } from '../hooks/useI18n';\nimport { showAlert } from '../utils/platformAlert';\nimport { IDCardCapture } from './KYCElements/IDCardCapture';\nimport { SelfieCaptureTemplate } from './KYCElements/SelfieCaptureTemplate';\nimport { FileUploadTemplate } from './KYCElements/FileUploadTemplate';\nimport { LocationCaptureTemplate } from './KYCElements/LocationCaptureTemplate';\nimport { CountrySelectionTemplate } from './KYCElements/CountrySelectionTemplate';\nimport { InitializationStep } from './KYCElements/InitializationStep';\nimport { ReviewSubmitTemplate } from './KYCElements/ReviewSubmitTemplate';\nimport { VerificationProgressTemplate } from './KYCElements/VerificationProgressTemplate';\nimport { useTemplateLoader } from '../hooks/useTemplateLoader';\nimport { WelcomeTemplate } from './KYCElements/WelcomeTemplate';\n\ninterface TemplateKYCFlowProps {\n template?: KYCTemplate; // Format SDK direct (existing, now optional)\n templateId?: string; // New: ID to load from API\n onComplete?: (data: VerificationState) => void;\n onError?: (error: string) => void;\n language?: string;\n onCancel?: () => void;\n API_KEY?: string; // Required if templateId is used\n}\n\nexport const TemplateKYCFlow: React.FC<TemplateKYCFlowProps> = ({\n template: providedTemplate,\n templateId,\n onComplete,\n onError,\n language = 'fr',\n onCancel,\n API_KEY,\n}) => {\n const { t } = useI18n();\n const { template: loadedTemplate, isLoading, error, loadTemplate } = useTemplateLoader();\n\n // Validate props\n useEffect(() => {\n if (!providedTemplate && !templateId) {\n const errorMsg = 'Either template or templateId must be provided';\n onError?.(errorMsg);\n return;\n }\n\n if (templateId && !API_KEY) {\n // Try to load without API key (will use token authentication)\n loadTemplate(templateId);\n } else if (templateId && API_KEY) {\n loadTemplate(templateId, API_KEY);\n }\n }, [templateId, API_KEY, providedTemplate, loadTemplate, onError]);\n\n // Handle loading errors\n useEffect(() => {\n if (error) {\n onError?.(error);\n }\n }, [error, onError]);\n\n const OnCancel = () => {\n showAlert(\n t('kyc.cancelConfirmation.title'),\n t('kyc.cancelConfirmation.message'),\n [\n { text: t('kyc.cancelConfirmation.cancelButton'), style: 'cancel' },\n {\n text: t('kyc.cancelConfirmation.confirmButton'),\n onPress: () => {\n onCancel?.();\n }\n },\n ]\n );\n };\n\n // Determine which template to use\n const template = providedTemplate || loadedTemplate;\n\n // Show loading state while fetching template\n if (templateId && isLoading && !template) {\n return (\n <View style={styles.loadingContainer}>\n <ActivityIndicator size=\"large\" color=\"#2DBD60\" />\n <Text style={styles.loadingText}>{t('common.loading') || 'Loading template...'}</Text>\n </View>\n );\n }\n\n // Show error state if template failed to load\n if (templateId && error && !template) {\n return (\n <View style={styles.errorContainer}>\n <Text style={styles.errorText}>{error}</Text>\n <TouchableOpacity\n style={styles.retryButton}\n onPress={() => loadTemplate(templateId, API_KEY)}\n >\n <Text style={styles.retryButtonText}>{t('common.retry') || 'Retry'}</Text>\n </TouchableOpacity>\n </View>\n );\n }\n\n // Show error if no template available\n if (!template) {\n return (\n <View style={styles.errorContainer}>\n <Text style={styles.errorText}>\n {t('errors.unknownError') || 'Template not available'}\n </Text>\n </View>\n );\n }\n\n return (\n <TemplateKYCFlowProvider\n template={template}\n onComplete={onComplete}\n onError={onError}\n onCancel={OnCancel}\n initialLanguage={language}\n apiKey={API_KEY}\n >\n <TemplateKYCFlowContent onCancel={OnCancel} />\n </TemplateKYCFlowProvider>\n );\n};\n\nconst TemplateKYCFlowContent: React.FC<{ onCancel?: () => void }> = ({ onCancel }) => {\n const {\n state,\n actions,\n currentComponent,\n progress,\n } = useTemplateKYCFlowContext();\n\n const { t } = useI18n();\n\n const updateComponentData = (componentId: number, data: unknown) => {\n actions.updateComponentData(componentId, data);\n };\n\n if (!currentComponent) {\n return (\n <View style={styles.container}>\n <Text style={styles.errorText}>{t('errors.unknownError')}</Text>\n </View>\n );\n }\n\n // Rendu du composant actuel\n const renderCurrentComponent = () => {\n const commonProps = {\n component: currentComponent,\n value: state.componentData[currentComponent.id],\n onValueChange: (data: unknown) => updateComponentData(currentComponent.id, data),\n error: state.errors[currentComponent.id],\n language: state.currentLanguage,\n };\n\n if (!state.session.isInitialized) {\n return <InitializationStep session={state.session} />\n }\n\n switch (currentComponent.type) {\n case 'welcome':\n return <WelcomeTemplate {...commonProps} />;\n\n case 'id_card':\n return <IDCardCapture {...commonProps} />;\n\n case 'selfie':\n return <SelfieCaptureTemplate {...commonProps} />;\n\n case 'file_upload':\n return <FileUploadTemplate {...commonProps} />;\n\n case 'location':\n return <LocationCaptureTemplate {...commonProps} />;\n\n case 'country_selection':\n return <CountrySelectionTemplate {...commonProps} />;\n\n case 'review_submit':\n return <ReviewSubmitTemplate {...commonProps} />;\n\n case 'verification_progress':\n return <VerificationProgressTemplate {...commonProps} />;\n\n default:\n return (\n <View style={styles.unsupportedContainer}>\n <Text style={styles.unsupportedText}>\n {t('errors.unknownError')}: {currentComponent.type}\n </Text>\n </View>\n );\n }\n };\n\n return (\n <View style={{ flex: 1, position: 'relative' }}>\n {state.isProcessing && (\n <View style={styles.processingContainer}>\n <Text style={styles.processingText}>{t('common.loading')}</Text>\n <ActivityIndicator size=\"large\" color=\"#fff\" />\n </View>\n )}\n <SafeAreaView style={styles.container}>\n {/* Header avec informations sur l'étape */}\n\n {(state.showCustomStepper && state.session.isInitialized) ? (\n <View style={styles.header}>\n <Text style={styles.progressText}>\n {t('kyc.step', { current: state.currentComponentIndex + 1, total: state.template.components.length })}\n </Text>\n <View style={styles.progressContainer}>\n <View style={styles.progressBar}>\n <View\n style={[\n styles.progressFill,\n { width: `${progress}%` }\n ]}\n />\n </View>\n\n </View>\n\n <View style={{ position: 'absolute', right: 12, top: 12 }}>\n <TouchableOpacity onPress={onCancel} disabled={!onCancel} style={{ opacity: onCancel ? 1 : 0.5 }}>\n <Text style={{ fontSize: 20, fontWeight: 'bold', color: '#333' }}>{`X`}</Text>\n </TouchableOpacity>\n </View>\n </View>\n ) : null}\n\n {/* Contenu principal */}\n <ScrollView \n style={styles.scrollView}\n contentContainerStyle={styles.content}\n showsVerticalScrollIndicator={Platform.OS === 'web'}\n bounces={false}\n >\n {renderCurrentComponent()}\n </ScrollView>\n\n {state.isProcessing && (\n <View style={styles.processingContainer}>\n <Text style={styles.processingText}>{t('common.loading')}</Text>\n <ActivityIndicator size=\"large\" color=\"#fff\" />\n </View>\n )}\n </SafeAreaView>\n </View>\n\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n backgroundColor: '#f5f5f5',\n\n },\n header: {\n backgroundColor: 'white',\n paddingVertical: 20,\n paddingHorizontal: 12,\n borderBottomWidth: 1,\n borderBottomColor: '#e0e0e0',\n marginHorizontal: 12,\n marginTop: 12,\n // shadow\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.15,\n shadowRadius: 1.84,\n elevation: 5,\n },\n title: {\n fontSize: 24,\n fontWeight: 'bold',\n color: '#333',\n marginBottom: 8,\n },\n description: {\n fontSize: 16,\n color: '#666',\n marginBottom: 20,\n },\n progressContainer: {\n // marginBottom: 20,\n },\n progressBar: {\n height: 8,\n backgroundColor: '#e0e0e0',\n borderRadius: 4,\n overflow: 'hidden',\n },\n progressFill: {\n height: '100%',\n backgroundColor: '#2DBD60',\n borderRadius: 4,\n },\n progressText: {\n fontSize: 14,\n color: 'black',\n fontWeight: '600',\n textAlign: 'left',\n marginBottom: 8,\n },\n stepInfo: {\n backgroundColor: '#f8f9fa',\n padding: 16,\n borderRadius: 8,\n borderLeftWidth: 4,\n borderLeftColor: '#2DBD60',\n },\n stepTitle: {\n fontSize: 18,\n fontWeight: '600',\n color: '#333',\n marginBottom: 8,\n },\n stepDescription: {\n fontSize: 14,\n color: '#666',\n lineHeight: 20,\n },\n scrollView: {\n flex: 1,\n },\n content: {\n flexGrow: 1,\n alignItems: 'center',\n paddingBottom: 20, // Add padding for better mobile scrolling\n },\n navigation: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n padding: 20,\n backgroundColor: 'white',\n borderTopWidth: 1,\n borderTopColor: '#e0e0e0',\n },\n navButton: {\n paddingHorizontal: 24,\n paddingVertical: 12,\n borderRadius: 8,\n minWidth: 100,\n alignItems: 'center',\n },\n primaryButton: {\n backgroundColor: '#2DBD60',\n },\n navButtonText: {\n fontSize: 16,\n fontWeight: '600',\n color: 'white',\n },\n errorText: {\n color: '#dc2626',\n fontSize: 16,\n textAlign: 'center',\n margin: 20,\n },\n unsupportedContainer: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n padding: 20,\n },\n unsupportedText: {\n fontSize: 16,\n color: '#666',\n textAlign: 'center',\n },\n processingContainer: {\n position: 'absolute',\n flex: 1,\n width: Dimensions.get('window').width,\n height: Dimensions.get('window').height,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n justifyContent: 'center',\n alignItems: 'center',\n zIndex: 10000000,\n },\n processingText: {\n fontSize: 16,\n color: '#fff',\n textAlign: 'center',\n fontWeight: 'bold',\n marginBottom: 10,\n },\n loadingContainer: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor: '#f5f5f5',\n },\n loadingText: {\n marginTop: 16,\n fontSize: 16,\n color: '#666',\n textAlign: 'center',\n },\n errorContainer: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor: '#f5f5f5',\n padding: 20,\n },\n retryButton: {\n marginTop: 20,\n paddingHorizontal: 24,\n paddingVertical: 12,\n backgroundColor: '#2DBD60',\n borderRadius: 8,\n },\n retryButtonText: {\n color: '#fff',\n fontSize: 16,\n fontWeight: '600',\n },\n}); "]}
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ /**
3
+ * Example component demonstrating how to use dynamic template loading
4
+ *
5
+ * This example shows two ways to use templates:
6
+ * 1. With templateId - loads template dynamically from backend API
7
+ * 2. With direct template object - uses hardcoded template (backward compatibility)
8
+ */
9
+ export declare const DynamicTemplateExample: React.FC;
10
+ //# sourceMappingURL=DynamicTemplateExample.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DynamicTemplateExample.d.ts","sourceRoot":"","sources":["../../../src/components/example/DynamicTemplateExample.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAKxC;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EA8J1C,CAAC"}
@@ -0,0 +1,241 @@
1
+ import React, { useState } from 'react';
2
+ import { View, Text, StyleSheet, SafeAreaView, TextInput, TouchableOpacity, ScrollView } from 'react-native';
3
+ import { TemplateKYCFlow } from '../TemplateKYCFlowRefactored';
4
+ /**
5
+ * Example component demonstrating how to use dynamic template loading
6
+ *
7
+ * This example shows two ways to use templates:
8
+ * 1. With templateId - loads template dynamically from backend API
9
+ * 2. With direct template object - uses hardcoded template (backward compatibility)
10
+ */
11
+ export const DynamicTemplateExample = () => {
12
+ const [templateId, setTemplateId] = useState('');
13
+ const [apiKey, setApiKey] = useState('');
14
+ const [showFlow, setShowFlow] = useState(false);
15
+ const [language, setLanguage] = useState('en');
16
+ const handleComplete = (data) => {
17
+ console.log('KYC Verification completed:', data);
18
+ setShowFlow(false);
19
+ alert('Verification completed successfully!');
20
+ };
21
+ const handleError = (error) => {
22
+ console.error('KYC Error:', error);
23
+ alert(`Error: ${error}`);
24
+ setShowFlow(false);
25
+ };
26
+ const handleCancel = () => {
27
+ console.log('KYC Flow cancelled');
28
+ setShowFlow(false);
29
+ };
30
+ const startFlow = () => {
31
+ if (!templateId.trim()) {
32
+ alert('Please enter a template ID');
33
+ return;
34
+ }
35
+ setShowFlow(true);
36
+ };
37
+ if (showFlow) {
38
+ return (<SafeAreaView style={styles.container}>
39
+ <TemplateKYCFlow templateId={templateId} API_KEY={apiKey || undefined} language={language} onComplete={handleComplete} onError={handleError} onCancel={handleCancel}/>
40
+ </SafeAreaView>);
41
+ }
42
+ return (<SafeAreaView style={styles.container}>
43
+ <ScrollView style={styles.scrollView} contentContainerStyle={styles.content}>
44
+ <Text style={styles.title}>Dynamic Template KYC Example</Text>
45
+ <Text style={styles.subtitle}>
46
+ Load a KYC template dynamically from the backend API
47
+ </Text>
48
+
49
+ <View style={styles.section}>
50
+ <Text style={styles.label}>Template ID *</Text>
51
+ <TextInput style={styles.input} placeholder="e.g., free-style" value={templateId} onChangeText={setTemplateId} autoCapitalize="none" autoCorrect={false}/>
52
+ <Text style={styles.hint}>
53
+ Enter the template ID to load from the backend API
54
+ </Text>
55
+ </View>
56
+
57
+ <View style={styles.section}>
58
+ <Text style={styles.label}>API Key (Optional)</Text>
59
+ <TextInput style={styles.input} placeholder="Your API key" value={apiKey} onChangeText={setApiKey} autoCapitalize="none" autoCorrect={false} secureTextEntry/>
60
+ <Text style={styles.hint}>
61
+ If not provided, the SDK will use token-based authentication
62
+ </Text>
63
+ </View>
64
+
65
+ <View style={styles.section}>
66
+ <Text style={styles.label}>Language</Text>
67
+ <View style={styles.languageContainer}>
68
+ <TouchableOpacity style={[
69
+ styles.languageButton,
70
+ language === 'en' && styles.languageButtonActive,
71
+ ]} onPress={() => setLanguage('en')}>
72
+ <Text style={[
73
+ styles.languageButtonText,
74
+ language === 'en' && styles.languageButtonTextActive,
75
+ ]}>
76
+ English
77
+ </Text>
78
+ </TouchableOpacity>
79
+ <TouchableOpacity style={[
80
+ styles.languageButton,
81
+ language === 'fr' && styles.languageButtonActive,
82
+ ]} onPress={() => setLanguage('fr')}>
83
+ <Text style={[
84
+ styles.languageButtonText,
85
+ language === 'fr' && styles.languageButtonTextActive,
86
+ ]}>
87
+ Français
88
+ </Text>
89
+ </TouchableOpacity>
90
+ </View>
91
+ </View>
92
+
93
+ <TouchableOpacity style={[styles.button, !templateId.trim() && styles.buttonDisabled]} onPress={startFlow} disabled={!templateId.trim()}>
94
+ <Text style={styles.buttonText}>Start KYC Verification</Text>
95
+ </TouchableOpacity>
96
+
97
+ <View style={styles.infoSection}>
98
+ <Text style={styles.infoTitle}>Usage Example:</Text>
99
+ <Text style={styles.code}>
100
+ {`<TemplateKYCFlow
101
+ templateId="free-style"
102
+ API_KEY="your-api-key"
103
+ language="fr"
104
+ onComplete={handleComplete}
105
+ onError={handleError}
106
+ onCancel={handleCancel}
107
+ />`}
108
+ </Text>
109
+ </View>
110
+
111
+ <View style={styles.infoSection}>
112
+ <Text style={styles.infoTitle}>Notes:</Text>
113
+ <Text style={styles.infoText}>
114
+ • Template ID is required to load from backend{'\n'}
115
+ • API Key is optional but recommended for production{'\n'}
116
+ • The SDK will automatically transform the backend template format to SDK format{'\n'}
117
+ • Templates are cached for 5 minutes to improve performance{'\n'}
118
+ • You can also use a direct template object for backward compatibility
119
+ </Text>
120
+ </View>
121
+ </ScrollView>
122
+ </SafeAreaView>);
123
+ };
124
+ const styles = StyleSheet.create({
125
+ container: {
126
+ flex: 1,
127
+ backgroundColor: '#f5f5f5',
128
+ },
129
+ scrollView: {
130
+ flex: 1,
131
+ },
132
+ content: {
133
+ padding: 20,
134
+ paddingBottom: 40,
135
+ },
136
+ title: {
137
+ fontSize: 24,
138
+ fontWeight: 'bold',
139
+ color: '#333',
140
+ marginBottom: 8,
141
+ textAlign: 'center',
142
+ },
143
+ subtitle: {
144
+ fontSize: 16,
145
+ color: '#666',
146
+ marginBottom: 32,
147
+ textAlign: 'center',
148
+ },
149
+ section: {
150
+ marginBottom: 24,
151
+ },
152
+ label: {
153
+ fontSize: 16,
154
+ fontWeight: '600',
155
+ color: '#333',
156
+ marginBottom: 8,
157
+ },
158
+ input: {
159
+ backgroundColor: 'white',
160
+ borderWidth: 1,
161
+ borderColor: '#ddd',
162
+ borderRadius: 8,
163
+ padding: 12,
164
+ fontSize: 16,
165
+ color: '#333',
166
+ },
167
+ hint: {
168
+ fontSize: 12,
169
+ color: '#999',
170
+ marginTop: 4,
171
+ },
172
+ languageContainer: {
173
+ flexDirection: 'row',
174
+ gap: 12,
175
+ },
176
+ languageButton: {
177
+ flex: 1,
178
+ padding: 12,
179
+ backgroundColor: 'white',
180
+ borderWidth: 1,
181
+ borderColor: '#ddd',
182
+ borderRadius: 8,
183
+ alignItems: 'center',
184
+ },
185
+ languageButtonActive: {
186
+ backgroundColor: '#2DBD60',
187
+ borderColor: '#2DBD60',
188
+ },
189
+ languageButtonText: {
190
+ fontSize: 16,
191
+ color: '#666',
192
+ fontWeight: '500',
193
+ },
194
+ languageButtonTextActive: {
195
+ color: 'white',
196
+ fontWeight: '600',
197
+ },
198
+ button: {
199
+ backgroundColor: '#2DBD60',
200
+ padding: 16,
201
+ borderRadius: 8,
202
+ alignItems: 'center',
203
+ marginTop: 8,
204
+ marginBottom: 32,
205
+ },
206
+ buttonDisabled: {
207
+ backgroundColor: '#ccc',
208
+ },
209
+ buttonText: {
210
+ color: 'white',
211
+ fontSize: 16,
212
+ fontWeight: '600',
213
+ },
214
+ infoSection: {
215
+ backgroundColor: 'white',
216
+ padding: 16,
217
+ borderRadius: 8,
218
+ marginBottom: 16,
219
+ },
220
+ infoTitle: {
221
+ fontSize: 16,
222
+ fontWeight: '600',
223
+ color: '#333',
224
+ marginBottom: 8,
225
+ },
226
+ code: {
227
+ fontFamily: 'monospace',
228
+ fontSize: 12,
229
+ color: '#555',
230
+ backgroundColor: '#f5f5f5',
231
+ padding: 12,
232
+ borderRadius: 4,
233
+ overflow: 'hidden',
234
+ },
235
+ infoText: {
236
+ fontSize: 14,
237
+ color: '#666',
238
+ lineHeight: 20,
239
+ },
240
+ });
241
+ //# sourceMappingURL=DynamicTemplateExample.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DynamicTemplateExample.js","sourceRoot":"","sources":["../../../src/components/example/DynamicTemplateExample.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useState } from 'react';\nimport { View, Text, StyleSheet, SafeAreaView, TextInput, TouchableOpacity, ScrollView } from 'react-native';\nimport { TemplateKYCFlow } from '../TemplateKYCFlowRefactored';\nimport { VerificationState } from '../../types/KYC.types';\n\n/**\n * Example component demonstrating how to use dynamic template loading\n * \n * This example shows two ways to use templates:\n * 1. With templateId - loads template dynamically from backend API\n * 2. With direct template object - uses hardcoded template (backward compatibility)\n */\nexport const DynamicTemplateExample: React.FC = () => {\n const [templateId, setTemplateId] = useState<string>('');\n const [apiKey, setApiKey] = useState<string>('');\n const [showFlow, setShowFlow] = useState<boolean>(false);\n const [language, setLanguage] = useState<'en' | 'fr'>('en');\n\n const handleComplete = (data: VerificationState) => {\n console.log('KYC Verification completed:', data);\n setShowFlow(false);\n alert('Verification completed successfully!');\n };\n\n const handleError = (error: string) => {\n console.error('KYC Error:', error);\n alert(`Error: ${error}`);\n setShowFlow(false);\n };\n\n const handleCancel = () => {\n console.log('KYC Flow cancelled');\n setShowFlow(false);\n };\n\n const startFlow = () => {\n if (!templateId.trim()) {\n alert('Please enter a template ID');\n return;\n }\n setShowFlow(true);\n };\n\n if (showFlow) {\n return (\n <SafeAreaView style={styles.container}>\n <TemplateKYCFlow\n templateId={templateId}\n API_KEY={apiKey || undefined}\n language={language}\n onComplete={handleComplete}\n onError={handleError}\n onCancel={handleCancel}\n />\n </SafeAreaView>\n );\n }\n\n return (\n <SafeAreaView style={styles.container}>\n <ScrollView style={styles.scrollView} contentContainerStyle={styles.content}>\n <Text style={styles.title}>Dynamic Template KYC Example</Text>\n <Text style={styles.subtitle}>\n Load a KYC template dynamically from the backend API\n </Text>\n\n <View style={styles.section}>\n <Text style={styles.label}>Template ID *</Text>\n <TextInput\n style={styles.input}\n placeholder=\"e.g., free-style\"\n value={templateId}\n onChangeText={setTemplateId}\n autoCapitalize=\"none\"\n autoCorrect={false}\n />\n <Text style={styles.hint}>\n Enter the template ID to load from the backend API\n </Text>\n </View>\n\n <View style={styles.section}>\n <Text style={styles.label}>API Key (Optional)</Text>\n <TextInput\n style={styles.input}\n placeholder=\"Your API key\"\n value={apiKey}\n onChangeText={setApiKey}\n autoCapitalize=\"none\"\n autoCorrect={false}\n secureTextEntry\n />\n <Text style={styles.hint}>\n If not provided, the SDK will use token-based authentication\n </Text>\n </View>\n\n <View style={styles.section}>\n <Text style={styles.label}>Language</Text>\n <View style={styles.languageContainer}>\n <TouchableOpacity\n style={[\n styles.languageButton,\n language === 'en' && styles.languageButtonActive,\n ]}\n onPress={() => setLanguage('en')}\n >\n <Text\n style={[\n styles.languageButtonText,\n language === 'en' && styles.languageButtonTextActive,\n ]}\n >\n English\n </Text>\n </TouchableOpacity>\n <TouchableOpacity\n style={[\n styles.languageButton,\n language === 'fr' && styles.languageButtonActive,\n ]}\n onPress={() => setLanguage('fr')}\n >\n <Text\n style={[\n styles.languageButtonText,\n language === 'fr' && styles.languageButtonTextActive,\n ]}\n >\n Français\n </Text>\n </TouchableOpacity>\n </View>\n </View>\n\n <TouchableOpacity\n style={[styles.button, !templateId.trim() && styles.buttonDisabled]}\n onPress={startFlow}\n disabled={!templateId.trim()}\n >\n <Text style={styles.buttonText}>Start KYC Verification</Text>\n </TouchableOpacity>\n\n <View style={styles.infoSection}>\n <Text style={styles.infoTitle}>Usage Example:</Text>\n <Text style={styles.code}>\n {`<TemplateKYCFlow\n templateId=\"free-style\"\n API_KEY=\"your-api-key\"\n language=\"fr\"\n onComplete={handleComplete}\n onError={handleError}\n onCancel={handleCancel}\n/>`}\n </Text>\n </View>\n\n <View style={styles.infoSection}>\n <Text style={styles.infoTitle}>Notes:</Text>\n <Text style={styles.infoText}>\n • Template ID is required to load from backend{'\\n'}\n • API Key is optional but recommended for production{'\\n'}\n • The SDK will automatically transform the backend template format to SDK format{'\\n'}\n • Templates are cached for 5 minutes to improve performance{'\\n'}\n • You can also use a direct template object for backward compatibility\n </Text>\n </View>\n </ScrollView>\n </SafeAreaView>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n backgroundColor: '#f5f5f5',\n },\n scrollView: {\n flex: 1,\n },\n content: {\n padding: 20,\n paddingBottom: 40,\n },\n title: {\n fontSize: 24,\n fontWeight: 'bold',\n color: '#333',\n marginBottom: 8,\n textAlign: 'center',\n },\n subtitle: {\n fontSize: 16,\n color: '#666',\n marginBottom: 32,\n textAlign: 'center',\n },\n section: {\n marginBottom: 24,\n },\n label: {\n fontSize: 16,\n fontWeight: '600',\n color: '#333',\n marginBottom: 8,\n },\n input: {\n backgroundColor: 'white',\n borderWidth: 1,\n borderColor: '#ddd',\n borderRadius: 8,\n padding: 12,\n fontSize: 16,\n color: '#333',\n },\n hint: {\n fontSize: 12,\n color: '#999',\n marginTop: 4,\n },\n languageContainer: {\n flexDirection: 'row',\n gap: 12,\n },\n languageButton: {\n flex: 1,\n padding: 12,\n backgroundColor: 'white',\n borderWidth: 1,\n borderColor: '#ddd',\n borderRadius: 8,\n alignItems: 'center',\n },\n languageButtonActive: {\n backgroundColor: '#2DBD60',\n borderColor: '#2DBD60',\n },\n languageButtonText: {\n fontSize: 16,\n color: '#666',\n fontWeight: '500',\n },\n languageButtonTextActive: {\n color: 'white',\n fontWeight: '600',\n },\n button: {\n backgroundColor: '#2DBD60',\n padding: 16,\n borderRadius: 8,\n alignItems: 'center',\n marginTop: 8,\n marginBottom: 32,\n },\n buttonDisabled: {\n backgroundColor: '#ccc',\n },\n buttonText: {\n color: 'white',\n fontSize: 16,\n fontWeight: '600',\n },\n infoSection: {\n backgroundColor: 'white',\n padding: 16,\n borderRadius: 8,\n marginBottom: 16,\n },\n infoTitle: {\n fontSize: 16,\n fontWeight: '600',\n color: '#333',\n marginBottom: 8,\n },\n code: {\n fontFamily: 'monospace',\n fontSize: 12,\n color: '#555',\n backgroundColor: '#f5f5f5',\n padding: 12,\n borderRadius: 4,\n overflow: 'hidden',\n },\n infoText: {\n fontSize: 14,\n color: '#666',\n lineHeight: 20,\n },\n});"]}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Allowed domains configuration for callback URL validation
3
+ * These domains are permitted to receive KYC completion callbacks
4
+ */
5
+ export interface AllowedDomainConfig {
6
+ domains: string[];
7
+ enforceHttps: boolean;
8
+ allowLocalhost: boolean;
9
+ }
10
+ /**
11
+ * Get allowed domains from environment or use defaults
12
+ */
13
+ export declare const getAllowedDomainsConfig: () => AllowedDomainConfig;
14
+ /**
15
+ * Check if a domain is in the allowed list
16
+ */
17
+ export declare const isDomainAllowed: (domain: string) => boolean;
18
+ /**
19
+ * Validate if a URL is allowed for callback
20
+ */
21
+ export declare const isCallbackUrlAllowed: (url: string) => {
22
+ allowed: boolean;
23
+ reason?: string;
24
+ };
25
+ /**
26
+ * Generate a signature for the callback URL parameters
27
+ * This can be used to verify the integrity of the callback
28
+ */
29
+ export declare const generateCallbackSignature: (params: Record<string, string>, secret?: string) => Promise<string>;
30
+ //# sourceMappingURL=allowedDomains.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"allowedDomains.d.ts","sourceRoot":"","sources":["../../src/config/allowedDomains.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;CACzB;AAeD;;GAEG;AACH,eAAO,MAAM,uBAAuB,QAAO,mBAa1C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,KAAG,OAsBhD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAAI,KAAK,MAAM,KAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAgCrF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,yBAAyB,GACpC,QAAQ,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,SAAS,MAAM,KACd,OAAO,CAAC,MAAM,CAqChB,CAAC"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Allowed domains configuration for callback URL validation
3
+ * These domains are permitted to receive KYC completion callbacks
4
+ */
5
+ // Default configuration - can be overridden via environment variables
6
+ const DEFAULT_CONFIG = {
7
+ domains: [
8
+ 'transfergratis.com',
9
+ 'www.transfergratis.com',
10
+ 'admin.transfergratis.com',
11
+ 'dashboard.transfergratis.com',
12
+ // Add other trusted domains here
13
+ ],
14
+ enforceHttps: true,
15
+ allowLocalhost: true, // Allow localhost for development
16
+ };
17
+ /**
18
+ * Get allowed domains from environment or use defaults
19
+ */
20
+ export const getAllowedDomainsConfig = () => {
21
+ // Check for environment variable override
22
+ if (typeof window !== 'undefined' && window.KYC_ALLOWED_DOMAINS) {
23
+ const envDomains = window.KYC_ALLOWED_DOMAINS;
24
+ if (Array.isArray(envDomains)) {
25
+ return {
26
+ ...DEFAULT_CONFIG,
27
+ domains: envDomains,
28
+ };
29
+ }
30
+ }
31
+ return DEFAULT_CONFIG;
32
+ };
33
+ /**
34
+ * Check if a domain is in the allowed list
35
+ */
36
+ export const isDomainAllowed = (domain) => {
37
+ const config = getAllowedDomainsConfig();
38
+ // Allow localhost in development
39
+ if (config.allowLocalhost && (domain === 'localhost' || domain.startsWith('127.0.0.1'))) {
40
+ return true;
41
+ }
42
+ // Check if domain matches any in the allowed list
43
+ return config.domains.some(allowedDomain => {
44
+ // Exact match
45
+ if (domain === allowedDomain) {
46
+ return true;
47
+ }
48
+ // Subdomain match (e.g., app.transfergratis.com matches transfergratis.com)
49
+ if (domain.endsWith('.' + allowedDomain)) {
50
+ return true;
51
+ }
52
+ return false;
53
+ });
54
+ };
55
+ /**
56
+ * Validate if a URL is allowed for callback
57
+ */
58
+ export const isCallbackUrlAllowed = (url) => {
59
+ const config = getAllowedDomainsConfig();
60
+ try {
61
+ const urlObj = new URL(url);
62
+ // Check protocol
63
+ if (config.enforceHttps && urlObj.protocol !== 'https:') {
64
+ // Allow http for localhost in development
65
+ if (!(config.allowLocalhost && (urlObj.hostname === 'localhost' || urlObj.hostname.startsWith('127.0.0.1')))) {
66
+ return {
67
+ allowed: false,
68
+ reason: 'HTTPS required for callback URLs',
69
+ };
70
+ }
71
+ }
72
+ // Check domain
73
+ if (!isDomainAllowed(urlObj.hostname)) {
74
+ return {
75
+ allowed: false,
76
+ reason: `Domain '${urlObj.hostname}' is not in the allowed list`,
77
+ };
78
+ }
79
+ return { allowed: true };
80
+ }
81
+ catch (error) {
82
+ return {
83
+ allowed: false,
84
+ reason: 'Invalid URL format',
85
+ };
86
+ }
87
+ };
88
+ /**
89
+ * Generate a signature for the callback URL parameters
90
+ * This can be used to verify the integrity of the callback
91
+ */
92
+ export const generateCallbackSignature = async (params, secret) => {
93
+ // Only generate signature if secret is provided
94
+ if (!secret) {
95
+ return '';
96
+ }
97
+ // Sort params for consistent signature
98
+ const sortedParams = Object.keys(params)
99
+ .sort()
100
+ .map(key => `${key}=${params[key]}`)
101
+ .join('&');
102
+ const data = `${sortedParams}:${secret}`;
103
+ // Use Web Crypto API for signature generation
104
+ if (typeof window !== 'undefined' && window.crypto && window.crypto.subtle) {
105
+ try {
106
+ const encoder = new TextEncoder();
107
+ const dataBuffer = encoder.encode(data);
108
+ const hashBuffer = await window.crypto.subtle.digest('SHA-256', dataBuffer);
109
+ const hashArray = Array.from(new Uint8Array(hashBuffer));
110
+ const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
111
+ return hashHex;
112
+ }
113
+ catch (error) {
114
+ console.error('Error generating signature:', error);
115
+ return '';
116
+ }
117
+ }
118
+ // Fallback: simple hash for environments without Web Crypto API
119
+ let hash = 0;
120
+ for (let i = 0; i < data.length; i++) {
121
+ const char = data.charCodeAt(i);
122
+ hash = ((hash << 5) - hash) + char;
123
+ hash = hash & hash;
124
+ }
125
+ return Math.abs(hash).toString(16);
126
+ };
127
+ //# sourceMappingURL=allowedDomains.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"allowedDomains.js","sourceRoot":"","sources":["../../src/config/allowedDomains.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Allowed domains configuration for callback URL validation\n * These domains are permitted to receive KYC completion callbacks\n */\n\nexport interface AllowedDomainConfig {\n domains: string[];\n enforceHttps: boolean;\n allowLocalhost: boolean;\n}\n\n// Default configuration - can be overridden via environment variables\nconst DEFAULT_CONFIG: AllowedDomainConfig = {\n domains: [\n 'transfergratis.com',\n 'www.transfergratis.com',\n 'admin.transfergratis.com',\n 'dashboard.transfergratis.com',\n // Add other trusted domains here\n ],\n enforceHttps: true,\n allowLocalhost: true, // Allow localhost for development\n};\n\n/**\n * Get allowed domains from environment or use defaults\n */\nexport const getAllowedDomainsConfig = (): AllowedDomainConfig => {\n // Check for environment variable override\n if (typeof window !== 'undefined' && (window as any).KYC_ALLOWED_DOMAINS) {\n const envDomains = (window as any).KYC_ALLOWED_DOMAINS;\n if (Array.isArray(envDomains)) {\n return {\n ...DEFAULT_CONFIG,\n domains: envDomains,\n };\n }\n }\n\n return DEFAULT_CONFIG;\n};\n\n/**\n * Check if a domain is in the allowed list\n */\nexport const isDomainAllowed = (domain: string): boolean => {\n const config = getAllowedDomainsConfig();\n \n // Allow localhost in development\n if (config.allowLocalhost && (domain === 'localhost' || domain.startsWith('127.0.0.1'))) {\n return true;\n }\n\n // Check if domain matches any in the allowed list\n return config.domains.some(allowedDomain => {\n // Exact match\n if (domain === allowedDomain) {\n return true;\n }\n \n // Subdomain match (e.g., app.transfergratis.com matches transfergratis.com)\n if (domain.endsWith('.' + allowedDomain)) {\n return true;\n }\n \n return false;\n });\n};\n\n/**\n * Validate if a URL is allowed for callback\n */\nexport const isCallbackUrlAllowed = (url: string): { allowed: boolean; reason?: string } => {\n const config = getAllowedDomainsConfig();\n\n try {\n const urlObj = new URL(url);\n\n // Check protocol\n if (config.enforceHttps && urlObj.protocol !== 'https:') {\n // Allow http for localhost in development\n if (!(config.allowLocalhost && (urlObj.hostname === 'localhost' || urlObj.hostname.startsWith('127.0.0.1')))) {\n return {\n allowed: false,\n reason: 'HTTPS required for callback URLs',\n };\n }\n }\n\n // Check domain\n if (!isDomainAllowed(urlObj.hostname)) {\n return {\n allowed: false,\n reason: `Domain '${urlObj.hostname}' is not in the allowed list`,\n };\n }\n\n return { allowed: true };\n } catch (error) {\n return {\n allowed: false,\n reason: 'Invalid URL format',\n };\n }\n};\n\n/**\n * Generate a signature for the callback URL parameters\n * This can be used to verify the integrity of the callback\n */\nexport const generateCallbackSignature = async (\n params: Record<string, string>,\n secret?: string\n): Promise<string> => {\n // Only generate signature if secret is provided\n if (!secret) {\n return '';\n }\n\n // Sort params for consistent signature\n const sortedParams = Object.keys(params)\n .sort()\n .map(key => `${key}=${params[key]}`)\n .join('&');\n\n const data = `${sortedParams}:${secret}`;\n\n // Use Web Crypto API for signature generation\n if (typeof window !== 'undefined' && window.crypto && window.crypto.subtle) {\n try {\n const encoder = new TextEncoder();\n const dataBuffer = encoder.encode(data);\n const hashBuffer = await window.crypto.subtle.digest('SHA-256', dataBuffer);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');\n return hashHex;\n } catch (error) {\n console.error('Error generating signature:', error);\n return '';\n }\n }\n\n // Fallback: simple hash for environments without Web Crypto API\n let hash = 0;\n for (let i = 0; i < data.length; i++) {\n const char = data.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash;\n }\n return Math.abs(hash).toString(16);\n};\n\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useTemplateKYCFlow.d.ts","sourceRoot":"","sources":["../../src/hooks/useTemplateKYCFlow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAA6D,SAAS,EAAa,MAAM,OAAO,CAAC;AAC/G,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,iBAAiB,EAA6C,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAMlK,UAAU,0BAA0B;IAClC,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE,eAAe,CAAC;IACzB,gBAAgB,EAAE,GAAG,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,CAAC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAA,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC;IACrF,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC;AAKD,UAAU,4BAA4B;IACpC,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,EAAE,WAAW,CAAC;IACtB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC/C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,uBAAuB,EAAE,KAAK,CAAC,EAAE,CAAC,4BAA4B,CAgB1E,CAAC;AAGF,eAAO,MAAM,yBAAyB,QAAO,0BAM5C,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,UAAU,WAAW,EACrB,aAAa,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,EAC9C,UAAU,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACjC,WAAW,MAAM,IAAI,EACrB,kBAAiB,MAAa,EAC9B,SAAS,MAAM,KACd,iBA4jBF,CAAC"}
1
+ {"version":3,"file":"useTemplateKYCFlow.d.ts","sourceRoot":"","sources":["../../src/hooks/useTemplateKYCFlow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAA6D,SAAS,EAAa,MAAM,OAAO,CAAC;AAC/G,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,iBAAiB,EAA6C,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAMlK,UAAU,0BAA0B;IAClC,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE,eAAe,CAAC;IACzB,gBAAgB,EAAE,GAAG,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,CAAC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAA,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC;IACrF,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC;AAKD,UAAU,4BAA4B;IACpC,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,EAAE,WAAW,CAAC;IACtB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC/C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,uBAAuB,EAAE,KAAK,CAAC,EAAE,CAAC,4BAA4B,CAgB1E,CAAC;AAGF,eAAO,MAAM,yBAAyB,QAAO,0BAM5C,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,UAAU,WAAW,EACrB,aAAa,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,EAC9C,UAAU,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACjC,WAAW,MAAM,IAAI,EACrB,kBAAiB,MAAa,EAC9B,SAAS,MAAM,KACd,iBAqlBF,CAAC"}