@sanctum-key/react-native-sdk 1.0.46 → 1.0.48

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 (26) hide show
  1. package/build/package.json +1 -1
  2. package/build/src/components/KYCElements/IDCardCapture.d.ts.map +1 -1
  3. package/build/src/components/KYCElements/IDCardCapture.js +85 -23
  4. package/build/src/components/KYCElements/IDCardCapture.js.map +1 -1
  5. package/build/src/components/KYCElements/VerificationProgressTemplate.d.ts.map +1 -1
  6. package/build/src/components/KYCElements/VerificationProgressTemplate.js +49 -53
  7. package/build/src/components/KYCElements/VerificationProgressTemplate.js.map +1 -1
  8. package/build/src/hooks/useTemplateKYCFlow.d.ts.map +1 -1
  9. package/build/src/hooks/useTemplateKYCFlow.js +15 -1
  10. package/build/src/hooks/useTemplateKYCFlow.js.map +1 -1
  11. package/build/src/modules/api/CardAuthentification.d.ts.map +1 -1
  12. package/build/src/modules/api/CardAuthentification.js +37 -59
  13. package/build/src/modules/api/CardAuthentification.js.map +1 -1
  14. package/build/src/modules/api/KYCService.d.ts.map +1 -1
  15. package/build/src/modules/api/KYCService.js +7 -2
  16. package/build/src/modules/api/KYCService.js.map +1 -1
  17. package/build/src/types/KYC.types.d.ts +1 -0
  18. package/build/src/types/KYC.types.d.ts.map +1 -1
  19. package/build/src/types/KYC.types.js.map +1 -1
  20. package/package.json +1 -1
  21. package/src/components/KYCElements/IDCardCapture.tsx +99 -24
  22. package/src/components/KYCElements/VerificationProgressTemplate.tsx +52 -49
  23. package/src/hooks/useTemplateKYCFlow.tsx +19 -1
  24. package/src/modules/api/CardAuthentification.ts +205 -238
  25. package/src/modules/api/KYCService.ts +9 -2
  26. package/src/types/KYC.types.ts +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"VerificationProgressTemplate.d.ts","sourceRoot":"","sources":["../../../../src/components/KYCElements/VerificationProgressTemplate.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAE3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAM1D,UAAU,iCAAiC;IACzC,SAAS,EAAE,iBAAiB,CAAC;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAID,eAAO,MAAM,4BAA4B,EAAE,KAAK,CAAC,EAAE,CAAC,iCAAiC,CAuRpF,CAAC"}
1
+ {"version":3,"file":"VerificationProgressTemplate.d.ts","sourceRoot":"","sources":["../../../../src/components/KYCElements/VerificationProgressTemplate.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAE3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAM1D,UAAU,iCAAiC;IACzC,SAAS,EAAE,iBAAiB,CAAC;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAID,eAAO,MAAM,4BAA4B,EAAE,KAAK,CAAC,EAAE,CAAC,iCAAiC,CAwRpF,CAAC"}
@@ -1,16 +1,14 @@
1
1
  import React, { useEffect, useRef, useState } from 'react';
2
- import { View, Text, StyleSheet, TouchableOpacity } from 'react-native';
2
+ import { View, Text, StyleSheet, TouchableOpacity, ActivityIndicator } from 'react-native';
3
3
  import { useTemplateKYCFlowContext } from '../../hooks/useTemplateKYCFlow';
4
4
  import { useI18n } from '../../hooks/useI18n';
5
5
  import kycService, { errorMessage } from '../../modules/api/KYCService';
6
6
  import { logger } from '../../utils/logger';
7
- const MAX_RETRIES = 40; // 40 attempts * 3 seconds = exactly 2 minutes of polling
7
+ const MAX_RETRIES = 40; // 40 attempts * 3 seconds = 2 minutes of polling
8
8
  export const VerificationProgressTemplate = () => {
9
9
  const { t } = useI18n();
10
10
  const { state, actions } = useTemplateKYCFlowContext();
11
11
  const [retryCount, setRetryCount] = useState(0);
12
- const [isRetrying, setIsRetrying] = useState(false);
13
- // 🚨 BULLETPROOF REFS: Prevents memory leaks and duplicate polling loops
14
12
  const timeoutIdRef = useRef(null);
15
13
  const isPollingRef = useRef(false);
16
14
  const isMountedRef = useRef(true);
@@ -18,13 +16,11 @@ export const VerificationProgressTemplate = () => {
18
16
  const isSuccess = verification.status === 'success';
19
17
  const isFailed = verification.status === 'failed';
20
18
  const getVerificationResult = async (currentRetryCount = 0) => {
21
- // If component unmounted while waiting, stop everything
22
19
  if (!isMountedRef.current)
23
20
  return;
24
21
  try {
25
- logger.log(`Starting verification check (attempt ${currentRetryCount + 1}/${MAX_RETRIES})`);
22
+ logger.log(`Starting verification check (attempt ${currentRetryCount + 1}/${MAX_RETRIES})...`);
26
23
  const result = await kycService.getVerificationResult(state.session.session_id);
27
- logger.log('getVerificationResult raw result:', JSON.stringify(result, null, 2));
28
24
  const rootStatus = (result?.status || '').toLowerCase();
29
25
  if (rootStatus === 'failed.' || rootStatus === 'failed' || rootStatus === 'rejected' || rootStatus === 'error') {
30
26
  actions.setVerificationState({
@@ -34,12 +30,9 @@ export const VerificationProgressTemplate = () => {
34
30
  issues: [result?.message || result?.reason || 'Verification failed. Sent for manual review.']
35
31
  }
36
32
  });
37
- if (isMountedRef.current)
38
- setIsRetrying(false);
39
33
  isPollingRef.current = false;
40
34
  return;
41
35
  }
42
- // 2. Safely Extract Nested Payload
43
36
  let vData = result?.data || result;
44
37
  if (typeof vData === 'string') {
45
38
  try {
@@ -59,12 +52,15 @@ export const VerificationProgressTemplate = () => {
59
52
  }
60
53
  const vStatus = (vData.verification_status || vData.status || vData.state || '').toLowerCase();
61
54
  const vDecision = (vData.decision || vData.outcome || vData.result || '').toLowerCase();
62
- const selfieMatch = vData.selfie_info?.is_match;
63
- logger.log(`Parsed Status: [${vStatus}], Decision: [${vDecision}], Selfie Match: [${selfieMatch}]`);
55
+ logger.log(`Parsed Status: [${vStatus}], Decision: [${vDecision}]`);
64
56
  // SUCCESS CONDITION
65
- if (vStatus === 'approved' || vStatus === 'verified' || vStatus === 'success' ||
66
- vDecision === 'approved' || vDecision === 'passed' || vDecision === 'clear' ||
67
- (vStatus === 'completed' && selfieMatch === true)) {
57
+ if (vStatus === 'approved' ||
58
+ vStatus === 'verified' ||
59
+ vStatus === 'success' ||
60
+ vStatus === 'completed' ||
61
+ vDecision === 'approved' ||
62
+ vDecision === 'passed' ||
63
+ vDecision === 'clear') {
68
64
  const hasActualData = vData && Object.keys(vData).length > 0;
69
65
  if (!hasActualData) {
70
66
  actions.setVerificationState({
@@ -74,8 +70,6 @@ export const VerificationProgressTemplate = () => {
74
70
  issues: ['Document text could not be read clearly. Please retake the photo in better lighting.']
75
71
  }
76
72
  });
77
- if (isMountedRef.current)
78
- setIsRetrying(false);
79
73
  isPollingRef.current = false;
80
74
  return;
81
75
  }
@@ -83,65 +77,65 @@ export const VerificationProgressTemplate = () => {
83
77
  status: 'success',
84
78
  result: { ...result, referenceId: vData.verification_id || vData.session_id || state.session.session_id }
85
79
  });
86
- if (isMountedRef.current)
87
- setIsRetrying(false);
88
80
  isPollingRef.current = false;
89
81
  return;
90
82
  }
91
- // PENDING/PROCESSING CONDITION
92
- if (vStatus === 'processing' || vStatus === 'pending' || vStatus === 'in_progress' ||
93
- vStatus === 'initiated' || (vStatus === 'completed' && selfieMatch === null) || !vStatus) {
83
+ // PENDING/PROCESSING CONDITION - RE-INTRODUCING POLLING
84
+ if (vStatus === 'processing' ||
85
+ vStatus === 'pending' ||
86
+ vStatus === 'in_progress' ||
87
+ vStatus === 'initiated' ||
88
+ !vStatus) {
94
89
  if (currentRetryCount < MAX_RETRIES) {
95
- const nextRetryCount = currentRetryCount + 1;
90
+ const nextCount = currentRetryCount + 1;
96
91
  if (isMountedRef.current) {
97
- setRetryCount(nextRetryCount);
98
- setIsRetrying(true);
92
+ setRetryCount(nextCount);
99
93
  }
100
- logger.log(`Verification still processing, retrying in 3s... (${nextRetryCount}/${MAX_RETRIES})`);
94
+ logger.log(`Verification still processing, scheduling next check in 3s...`);
101
95
  if (timeoutIdRef.current)
102
96
  clearTimeout(timeoutIdRef.current);
103
97
  timeoutIdRef.current = setTimeout(() => {
104
- getVerificationResult(nextRetryCount);
98
+ getVerificationResult(nextCount);
105
99
  }, 3000);
106
100
  }
107
101
  else {
108
- logger.error('Max retries reached, verification still processing');
102
+ logger.log('Max retries reached. Sending to manual review.');
109
103
  actions.setVerificationState({
110
104
  status: 'failed',
111
105
  result: {
112
106
  referenceId: state.session.session_id,
113
- issues: ['Verification timed out after maximum attempts. Please try again.']
107
+ issues: ['Verification is taking longer than usual and requires manual review. Please check back later.']
114
108
  }
115
109
  });
116
- if (isMountedRef.current)
117
- setIsRetrying(false);
118
110
  isPollingRef.current = false;
119
111
  }
120
112
  return;
121
113
  }
122
114
  // UNKNOWN FALLBACK
123
115
  logger.warn(`Unknown verification status received: ${vStatus}`);
124
- if (isMountedRef.current)
125
- setIsRetrying(false);
116
+ actions.setVerificationState({
117
+ status: 'failed',
118
+ result: {
119
+ referenceId: state.session.session_id,
120
+ issues: ['Received an unknown status from the server.']
121
+ }
122
+ });
126
123
  isPollingRef.current = false;
127
124
  }
128
125
  catch (error) {
129
126
  logger.error('getVerificationResult error', JSON.stringify(errorMessage(error) || { message: error?.message || 'Unknown error' }, null, 2));
127
+ // If network fails temporarily, we should also retry instead of instantly failing
130
128
  if (currentRetryCount < MAX_RETRIES) {
131
- const nextRetryCount = currentRetryCount + 1;
132
- if (isMountedRef.current) {
133
- setRetryCount(nextRetryCount);
134
- setIsRetrying(true);
135
- }
136
- logger.log(`Error occurred, retrying in 3s... (${nextRetryCount}/${MAX_RETRIES})`);
129
+ const nextCount = currentRetryCount + 1;
130
+ if (isMountedRef.current)
131
+ setRetryCount(nextCount);
137
132
  if (timeoutIdRef.current)
138
133
  clearTimeout(timeoutIdRef.current);
139
134
  timeoutIdRef.current = setTimeout(() => {
140
- getVerificationResult(nextRetryCount);
135
+ getVerificationResult(nextCount);
141
136
  }, 3000);
142
137
  }
143
138
  else {
144
- logger.error('Max retries reached after errors');
145
139
  actions.setVerificationState({
146
140
  status: 'failed',
147
141
  result: {
@@ -149,21 +143,17 @@ export const VerificationProgressTemplate = () => {
149
143
  issues: ['Connection failed multiple times. Please check your network and try again.']
150
144
  }
151
145
  });
152
- if (isMountedRef.current)
153
- setIsRetrying(false);
154
146
  isPollingRef.current = false;
155
147
  }
156
148
  }
157
149
  };
158
- // 1. Kick off polling when component mounts
159
150
  useEffect(() => {
160
151
  isMountedRef.current = true;
161
152
  if (state.session.session_id && !isSuccess && !isFailed && !isPollingRef.current) {
162
153
  isPollingRef.current = true;
163
- getVerificationResult(0); // Always start explicitly at 0
154
+ getVerificationResult(0);
164
155
  }
165
156
  }, [state.session.session_id, isSuccess, isFailed]);
166
- // 2. Strict cleanup on unmount ONLY
167
157
  useEffect(() => {
168
158
  return () => {
169
159
  isMountedRef.current = false;
@@ -172,7 +162,6 @@ export const VerificationProgressTemplate = () => {
172
162
  isPollingRef.current = false;
173
163
  };
174
164
  }, []);
175
- // 3. Auto-submit on success
176
165
  useEffect(() => {
177
166
  let autoSubmitTimer;
178
167
  if (isSuccess) {
@@ -226,9 +215,9 @@ export const VerificationProgressTemplate = () => {
226
215
  return (<View style={styles.container}>
227
216
  <Text style={styles.title}>{t('kyc.verificationProgress.title')}</Text>
228
217
  <Text style={styles.subtitle}>
229
- {isRetrying
230
- ? `${t('kyc.verificationProgress.retrying', { current: retryCount, max: MAX_RETRIES })}`
231
- : t('kyc.verificationProgress.estimatedTime')}
218
+ {state.currentLanguage === 'en'
219
+ ? `Checking verification status...`
220
+ : `Vérification du statut en cours...`}
232
221
  </Text>
233
222
 
234
223
  <View style={styles.timeline}>
@@ -253,9 +242,14 @@ export const VerificationProgressTemplate = () => {
253
242
  <Text style={styles.cardLine}>{t('kyc.verificationProgress.steps.analyzing')}</Text>
254
243
 
255
244
  <Text style={styles.cardTitle}>{t('kyc.verificationProgress.title')}</Text>
256
- <Text style={styles.cardLine}>
257
- {isRetrying ? `${t('kyc.verificationProgress.status.processing')}...` : t('kyc.verificationProgress.status.pending')}
258
- </Text>
245
+
246
+ <View style={styles.loadingRow}>
247
+ <ActivityIndicator size="small" color="#2DBD60" style={{ marginRight: 8 }}/>
248
+ <Text style={styles.cardLine}>
249
+ {t('kyc.verificationProgress.status.processing')}...
250
+ <Text style={styles.retryText}> ({retryCount}/{MAX_RETRIES})</Text>
251
+ </Text>
252
+ </View>
259
253
  </View>
260
254
  </View>);
261
255
  };
@@ -275,6 +269,8 @@ const styles = StyleSheet.create({
275
269
  card: { backgroundColor: 'white', padding: 16, borderRadius: 16, marginTop: 24 },
276
270
  cardTitle: { fontSize: 16, color: '#6B7280', marginTop: 8 },
277
271
  cardLine: { fontSize: 18, color: '#111827', fontWeight: '600', marginTop: 2 },
272
+ loadingRow: { flexDirection: 'row', alignItems: 'center', marginTop: 4 },
273
+ retryText: { fontSize: 14, color: '#9CA3AF', fontWeight: '500' },
278
274
  button: { paddingVertical: 14, borderRadius: 10, alignItems: 'center', marginTop: 14 },
279
275
  primary: { backgroundColor: '#2DBD60' },
280
276
  buttonText: { color: 'white', fontSize: 16, fontWeight: '600' },
@@ -1 +1 @@
1
- {"version":3,"file":"VerificationProgressTemplate.js","sourceRoot":"","sources":["../../../../src/components/KYCElements/VerificationProgressTemplate.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { View, Text, StyleSheet, TouchableOpacity } from 'react-native';\nimport { TemplateComponent } from '../../types/KYC.types';\nimport { useTemplateKYCFlowContext } from '../../hooks/useTemplateKYCFlow';\nimport { useI18n } from '../../hooks/useI18n';\nimport kycService, { errorMessage } from '../../modules/api/KYCService';\nimport { logger } from '../../utils/logger';\n\ninterface VerificationProgressTemplateProps {\n component: TemplateComponent;\n value: unknown;\n onValueChange: (data: unknown) => void;\n error?: string;\n language?: string;\n}\n\nconst MAX_RETRIES = 40; // 40 attempts * 3 seconds = exactly 2 minutes of polling\n\nexport const VerificationProgressTemplate: React.FC<VerificationProgressTemplateProps> = () => {\n const { t } = useI18n();\n const { state, actions } = useTemplateKYCFlowContext();\n \n const [retryCount, setRetryCount] = useState(0);\n const [isRetrying, setIsRetrying] = useState(false);\n \n // 🚨 BULLETPROOF REFS: Prevents memory leaks and duplicate polling loops\n const timeoutIdRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const isPollingRef = useRef(false);\n const isMountedRef = useRef(true); \n\n const verification = state.verification;\n const isSuccess = verification.status === 'success';\n const isFailed = verification.status === 'failed';\n\n const getVerificationResult = async (currentRetryCount = 0) => {\n // If component unmounted while waiting, stop everything\n if (!isMountedRef.current) return;\n\n try {\n logger.log(`Starting verification check (attempt ${currentRetryCount + 1}/${MAX_RETRIES})`);\n const result: any = await kycService.getVerificationResult(state.session.session_id);\n logger.log('getVerificationResult raw result:', JSON.stringify(result, null, 2));\n\n const rootStatus = (result?.status || '').toLowerCase();\n if (rootStatus === 'failed.' || rootStatus === 'failed' || rootStatus === 'rejected' || rootStatus === 'error') {\n actions.setVerificationState({\n status: 'failed',\n result: {\n referenceId: state.session.session_id,\n issues: [result?.message || result?.reason || 'Verification failed. Sent for manual review.']\n } as any\n });\n if (isMountedRef.current) setIsRetrying(false);\n isPollingRef.current = false;\n return;\n }\n\n // 2. Safely Extract Nested Payload\n let vData = result?.data || result;\n \n if (typeof vData === 'string') {\n try { vData = JSON.parse(vData); } catch (e) { }\n }\n\n if (vData && typeof vData === 'object' && vData[state.session.session_id]) {\n let nested = vData[state.session.session_id];\n if (nested && nested.data) {\n nested = typeof nested.data === 'string' ? JSON.parse(nested.data) : nested.data;\n }\n vData = nested;\n }\n\n if (!vData || typeof vData !== 'object') {\n throw new Error('Verification payload missing or invalid for current session');\n }\n\n const vStatus = (vData.verification_status || vData.status || vData.state || '').toLowerCase();\n const vDecision = (vData.decision || vData.outcome || vData.result || '').toLowerCase();\n const selfieMatch = vData.selfie_info?.is_match;\n\n logger.log(`Parsed Status: [${vStatus}], Decision: [${vDecision}], Selfie Match: [${selfieMatch}]`);\n\n // SUCCESS CONDITION\n if (\n vStatus === 'approved' || vStatus === 'verified' || vStatus === 'success' ||\n vDecision === 'approved' || vDecision === 'passed' || vDecision === 'clear' ||\n (vStatus === 'completed' && selfieMatch === true)\n ) {\n const hasActualData = vData && Object.keys(vData).length > 0;\n if (!hasActualData) {\n actions.setVerificationState({\n status: 'failed',\n result: {\n referenceId: state.session.session_id,\n issues: ['Document text could not be read clearly. Please retake the photo in better lighting.']\n } as any\n });\n if (isMountedRef.current) setIsRetrying(false);\n isPollingRef.current = false;\n return;\n }\n\n actions.setVerificationState({\n status: 'success',\n result: { ...result, referenceId: vData.verification_id || vData.session_id || state.session.session_id } as any\n });\n if (isMountedRef.current) setIsRetrying(false);\n isPollingRef.current = false;\n return;\n }\n\n // PENDING/PROCESSING CONDITION\n if (\n vStatus === 'processing' || vStatus === 'pending' || vStatus === 'in_progress' ||\n vStatus === 'initiated' || (vStatus === 'completed' && selfieMatch === null) || !vStatus\n ) {\n if (currentRetryCount < MAX_RETRIES) {\n const nextRetryCount = currentRetryCount + 1;\n if (isMountedRef.current) {\n setRetryCount(nextRetryCount);\n setIsRetrying(true);\n }\n logger.log(`Verification still processing, retrying in 3s... (${nextRetryCount}/${MAX_RETRIES})`);\n \n if (timeoutIdRef.current) clearTimeout(timeoutIdRef.current);\n timeoutIdRef.current = setTimeout(() => {\n getVerificationResult(nextRetryCount);\n }, 3000);\n } else {\n logger.error('Max retries reached, verification still processing');\n actions.setVerificationState({\n status: 'failed',\n result: {\n referenceId: state.session.session_id,\n issues: ['Verification timed out after maximum attempts. Please try again.']\n } as any\n });\n if (isMountedRef.current) setIsRetrying(false);\n isPollingRef.current = false;\n }\n return;\n }\n\n // UNKNOWN FALLBACK\n logger.warn(`Unknown verification status received: ${vStatus}`);\n if (isMountedRef.current) setIsRetrying(false);\n isPollingRef.current = false;\n\n } catch (error: any) {\n logger.error('getVerificationResult error', JSON.stringify(errorMessage(error) || { message: error?.message || 'Unknown error' }, null, 2));\n \n if (currentRetryCount < MAX_RETRIES) {\n const nextRetryCount = currentRetryCount + 1;\n if (isMountedRef.current) {\n setRetryCount(nextRetryCount);\n setIsRetrying(true);\n }\n logger.log(`Error occurred, retrying in 3s... (${nextRetryCount}/${MAX_RETRIES})`);\n \n if (timeoutIdRef.current) clearTimeout(timeoutIdRef.current);\n timeoutIdRef.current = setTimeout(() => {\n getVerificationResult(nextRetryCount);\n }, 3000);\n } else {\n logger.error('Max retries reached after errors');\n actions.setVerificationState({\n status: 'failed',\n result: {\n referenceId: state.session.session_id,\n issues: ['Connection failed multiple times. Please check your network and try again.']\n } as any\n });\n if (isMountedRef.current) setIsRetrying(false);\n isPollingRef.current = false;\n }\n }\n };\n\n // 1. Kick off polling when component mounts\n useEffect(() => {\n isMountedRef.current = true;\n if (state.session.session_id && !isSuccess && !isFailed && !isPollingRef.current) {\n isPollingRef.current = true;\n getVerificationResult(0); // Always start explicitly at 0\n }\n }, [state.session.session_id, isSuccess, isFailed]);\n\n // 2. Strict cleanup on unmount ONLY\n useEffect(() => {\n return () => {\n isMountedRef.current = false;\n if (timeoutIdRef.current) clearTimeout(timeoutIdRef.current);\n isPollingRef.current = false;\n };\n }, []);\n\n // 3. Auto-submit on success\n useEffect(() => {\n let autoSubmitTimer: ReturnType<typeof setTimeout>;\n if (isSuccess) {\n logger.log(\"Verification successful. Initiating auto-submit countdown...\");\n autoSubmitTimer = setTimeout(() => {\n actions.submitVerification();\n }, 3000);\n }\n return () => {\n if (autoSubmitTimer) clearTimeout(autoSubmitTimer);\n };\n }, [isSuccess, actions]);\n\n // --- RENDER LOGIC ---\n\n if (isSuccess) {\n return (\n <View style={styles.container}>\n <Text style={styles.title}>{t('kyc.verificationProgress.steps.complete')}</Text>\n <Text style={styles.subtitle}>{t('kyc.verificationProgress.subtitle')}</Text>\n \n <TouchableOpacity style={[styles.button, styles.primary]} onPress={() => actions.submitVerification()}>\n <Text style={styles.buttonText}>{t('common.continue')}</Text>\n </TouchableOpacity>\n \n {verification.result?.referenceId ? (\n <Text style={styles.refText}>{`Verification ID: ${verification.result.referenceId}`}</Text>\n ) : null}\n </View>\n );\n }\n\n if (isFailed) {\n return (\n <View style={styles.container}>\n <Text style={styles.title}>{t('kyc.verificationProgress.status.failed')}</Text>\n \n <View style={styles.issuesBox}>\n <Text style={styles.issuesTitle}>{t('common.error')}</Text>\n {Array.isArray(verification.result?.issues) && verification.result.issues.map((issue: string, idx: number) => (\n <Text key={idx} style={styles.issueItem}>• {issue}</Text>\n ))}\n </View>\n\n <TouchableOpacity style={[styles.button, styles.primary]} onPress={() => actions.submitVerification()}>\n <Text style={styles.buttonText}>\n {state.currentLanguage === 'en' ? 'OK / Finish' : 'Terminer'}\n </Text>\n </TouchableOpacity>\n\n <TouchableOpacity style={[styles.button, styles.secondary]} onPress={() => actions.resetTemplate()}>\n <Text style={styles.secondaryText}>\n {state.currentLanguage === 'en' ? 'Start Over' : 'Recommencer'}\n </Text>\n </TouchableOpacity>\n\n {verification.result?.referenceId ? (\n <Text style={styles.refText}>{`Reference ID: ${verification.result.referenceId}`}</Text>\n ) : null}\n </View>\n );\n }\n\n return (\n <View style={styles.container}>\n <Text style={styles.title}>{t('kyc.verificationProgress.title')}</Text>\n <Text style={styles.subtitle}>\n {isRetrying\n ? `${t('kyc.verificationProgress.retrying', { current: retryCount, max: MAX_RETRIES })}`\n : t('kyc.verificationProgress.estimatedTime')}\n </Text>\n\n <View style={styles.timeline}>\n <View style={[styles.dot, styles.done]}><Text style={styles.stepCheckmark}>✓</Text></View>\n <View style={styles.line} />\n <View style={[styles.dot, styles.active]}><Text style={styles.stepCheckmark}>2</Text></View>\n <View style={styles.line} />\n <View style={[styles.dot, styles.pending]}><Text style={styles.stepCheckmark}>3</Text></View>\n </View>\n\n <View style={styles.row}>\n <Text style={styles.stepLabel}>{t('kyc.verificationProgress.status.completed')}</Text>\n <Text style={styles.stepLabel}>{t('kyc.verificationProgress.steps.analyzing')}</Text>\n <Text style={styles.stepLabel}>{t('kyc.verificationProgress.steps.verifying')}</Text>\n </View>\n\n <View style={styles.card}>\n <Text style={styles.cardTitle}>{t('kyc.idCardCapture.title')}</Text>\n <Text style={styles.cardLine}>{t('kyc.verificationProgress.steps.extracting')}</Text>\n \n <Text style={styles.cardTitle}>{t('kyc.selfieCapture.title')}</Text>\n <Text style={styles.cardLine}>{t('kyc.verificationProgress.steps.analyzing')}</Text>\n \n <Text style={styles.cardTitle}>{t('kyc.verificationProgress.title')}</Text>\n <Text style={styles.cardLine}>\n {isRetrying ? `${t('kyc.verificationProgress.status.processing')}...` : t('kyc.verificationProgress.status.pending')}\n </Text>\n </View>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: { flex: 1, width: '100%', paddingHorizontal: 16, paddingVertical: 12 },\n title: { fontSize: 24, fontWeight: 'bold', color: '#111827', textAlign: 'center', marginTop: 12 },\n subtitle: { fontSize: 14, color: '#6B7280', textAlign: 'center', marginTop: 8 },\n timeline: { flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', marginTop: 24 },\n dot: { width: 38, height: 38, borderRadius: 34, justifyContent: 'center', alignItems: 'center' },\n stepCheckmark: { color: 'white', fontSize: 16, fontWeight: 'bold' },\n line: { flex: 1, height: 4, backgroundColor: '#E5E7EB' },\n done: { backgroundColor: '#10B981' },\n active: { backgroundColor: '#F59E0B' },\n pending: { backgroundColor: '#E5E7EB' },\n row: { flexDirection: 'row', justifyContent: 'space-between', marginTop: 8 },\n stepLabel: { fontSize: 14, color: '#111827', fontWeight: '600' },\n card: { backgroundColor: 'white', padding: 16, borderRadius: 16, marginTop: 24 },\n cardTitle: { fontSize: 16, color: '#6B7280', marginTop: 8 },\n cardLine: { fontSize: 18, color: '#111827', fontWeight: '600', marginTop: 2 },\n button: { paddingVertical: 14, borderRadius: 10, alignItems: 'center', marginTop: 14 },\n primary: { backgroundColor: '#2DBD60' },\n buttonText: { color: 'white', fontSize: 16, fontWeight: '600' },\n refText: { marginTop: 12, textAlign: 'center', color: '#6B7280' },\n issuesBox: { backgroundColor: '#FEF2F2', borderRadius: 16, padding: 16, marginTop: 20 },\n issuesTitle: { color: '#991B1B', fontWeight: '700', marginBottom: 8 },\n issueItem: { color: '#991B1B', marginTop: 4 },\n secondary: { backgroundColor: '#F3F4F6', borderWidth: 1, borderColor: '#D1D5DB' },\n secondaryText: { color: '#374151', fontSize: 16, fontWeight: '600' },\n});"]}
1
+ {"version":3,"file":"VerificationProgressTemplate.js","sourceRoot":"","sources":["../../../../src/components/KYCElements/VerificationProgressTemplate.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { View, Text, StyleSheet, TouchableOpacity, ActivityIndicator } from 'react-native';\nimport { TemplateComponent } from '../../types/KYC.types';\nimport { useTemplateKYCFlowContext } from '../../hooks/useTemplateKYCFlow';\nimport { useI18n } from '../../hooks/useI18n';\nimport kycService, { errorMessage } from '../../modules/api/KYCService';\nimport { logger } from '../../utils/logger';\n\ninterface VerificationProgressTemplateProps {\n component: TemplateComponent;\n value: unknown;\n onValueChange: (data: unknown) => void;\n error?: string;\n language?: string;\n}\n\nconst MAX_RETRIES = 40; // 40 attempts * 3 seconds = 2 minutes of polling\n\nexport const VerificationProgressTemplate: React.FC<VerificationProgressTemplateProps> = () => {\n const { t } = useI18n();\n const { state, actions } = useTemplateKYCFlowContext();\n \n const [retryCount, setRetryCount] = useState(0);\n \n const timeoutIdRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const isPollingRef = useRef(false);\n const isMountedRef = useRef(true); \n\n const verification = state.verification;\n const isSuccess = verification.status === 'success';\n const isFailed = verification.status === 'failed';\n\n const getVerificationResult = async (currentRetryCount = 0) => {\n if (!isMountedRef.current) return;\n\n try {\n logger.log(`Starting verification check (attempt ${currentRetryCount + 1}/${MAX_RETRIES})...`);\n const result: any = await kycService.getVerificationResult(state.session.session_id);\n \n const rootStatus = (result?.status || '').toLowerCase();\n if (rootStatus === 'failed.' || rootStatus === 'failed' || rootStatus === 'rejected' || rootStatus === 'error') {\n actions.setVerificationState({\n status: 'failed',\n result: {\n referenceId: state.session.session_id,\n issues: [result?.message || result?.reason || 'Verification failed. Sent for manual review.']\n } as any\n });\n isPollingRef.current = false;\n return;\n }\n\n let vData = result?.data || result;\n \n if (typeof vData === 'string') {\n try { vData = JSON.parse(vData); } catch (e) { }\n }\n\n if (vData && typeof vData === 'object' && vData[state.session.session_id]) {\n let nested = vData[state.session.session_id];\n if (nested && nested.data) {\n nested = typeof nested.data === 'string' ? JSON.parse(nested.data) : nested.data;\n }\n vData = nested;\n }\n\n if (!vData || typeof vData !== 'object') {\n throw new Error('Verification payload missing or invalid for current session');\n }\n\n const vStatus = (vData.verification_status || vData.status || vData.state || '').toLowerCase();\n const vDecision = (vData.decision || vData.outcome || vData.result || '').toLowerCase();\n \n logger.log(`Parsed Status: [${vStatus}], Decision: [${vDecision}]`);\n\n // SUCCESS CONDITION\n if (\n vStatus === 'approved' || \n vStatus === 'verified' || \n vStatus === 'success' || \n vStatus === 'completed' || \n vDecision === 'approved' || \n vDecision === 'passed' || \n vDecision === 'clear'\n ) {\n const hasActualData = vData && Object.keys(vData).length > 0;\n \n if (!hasActualData) {\n actions.setVerificationState({\n status: 'failed',\n result: {\n referenceId: state.session.session_id,\n issues: ['Document text could not be read clearly. Please retake the photo in better lighting.']\n } as any\n });\n isPollingRef.current = false;\n return;\n }\n\n actions.setVerificationState({\n status: 'success',\n result: { ...result, referenceId: vData.verification_id || vData.session_id || state.session.session_id } as any\n });\n isPollingRef.current = false;\n return;\n }\n\n // PENDING/PROCESSING CONDITION - RE-INTRODUCING POLLING\n if (\n vStatus === 'processing' || \n vStatus === 'pending' || \n vStatus === 'in_progress' || \n vStatus === 'initiated' || \n !vStatus\n ) {\n if (currentRetryCount < MAX_RETRIES) {\n const nextCount = currentRetryCount + 1;\n if (isMountedRef.current) {\n setRetryCount(nextCount);\n }\n \n logger.log(`Verification still processing, scheduling next check in 3s...`);\n if (timeoutIdRef.current) clearTimeout(timeoutIdRef.current);\n \n timeoutIdRef.current = setTimeout(() => {\n getVerificationResult(nextCount);\n }, 3000);\n } else {\n logger.log('Max retries reached. Sending to manual review.');\n actions.setVerificationState({\n status: 'failed',\n result: {\n referenceId: state.session.session_id,\n issues: ['Verification is taking longer than usual and requires manual review. Please check back later.']\n } as any\n });\n isPollingRef.current = false;\n }\n return;\n }\n\n // UNKNOWN FALLBACK\n logger.warn(`Unknown verification status received: ${vStatus}`);\n actions.setVerificationState({\n status: 'failed',\n result: {\n referenceId: state.session.session_id,\n issues: ['Received an unknown status from the server.']\n } as any\n });\n isPollingRef.current = false;\n\n } catch (error: any) {\n logger.error('getVerificationResult error', JSON.stringify(errorMessage(error) || { message: error?.message || 'Unknown error' }, null, 2));\n \n // If network fails temporarily, we should also retry instead of instantly failing\n if (currentRetryCount < MAX_RETRIES) {\n const nextCount = currentRetryCount + 1;\n if (isMountedRef.current) setRetryCount(nextCount);\n \n if (timeoutIdRef.current) clearTimeout(timeoutIdRef.current);\n timeoutIdRef.current = setTimeout(() => {\n getVerificationResult(nextCount);\n }, 3000);\n } else {\n actions.setVerificationState({\n status: 'failed',\n result: {\n referenceId: state.session.session_id,\n issues: ['Connection failed multiple times. Please check your network and try again.']\n } as any\n });\n isPollingRef.current = false;\n }\n }\n };\n\n useEffect(() => {\n isMountedRef.current = true;\n if (state.session.session_id && !isSuccess && !isFailed && !isPollingRef.current) {\n isPollingRef.current = true;\n getVerificationResult(0);\n }\n }, [state.session.session_id, isSuccess, isFailed]);\n\n useEffect(() => {\n return () => {\n isMountedRef.current = false;\n if (timeoutIdRef.current) clearTimeout(timeoutIdRef.current);\n isPollingRef.current = false;\n };\n }, []);\n\n useEffect(() => {\n let autoSubmitTimer: ReturnType<typeof setTimeout>;\n if (isSuccess) {\n logger.log(\"Verification successful. Initiating auto-submit countdown...\");\n autoSubmitTimer = setTimeout(() => {\n actions.submitVerification();\n }, 3000);\n }\n return () => {\n if (autoSubmitTimer) clearTimeout(autoSubmitTimer);\n };\n }, [isSuccess, actions]);\n\n // --- RENDER LOGIC ---\n\n if (isSuccess) {\n return (\n <View style={styles.container}>\n <Text style={styles.title}>{t('kyc.verificationProgress.steps.complete')}</Text>\n <Text style={styles.subtitle}>{t('kyc.verificationProgress.subtitle')}</Text>\n \n <TouchableOpacity style={[styles.button, styles.primary]} onPress={() => actions.submitVerification()}>\n <Text style={styles.buttonText}>{t('common.continue')}</Text>\n </TouchableOpacity>\n \n {verification.result?.referenceId ? (\n <Text style={styles.refText}>{`Verification ID: ${verification.result.referenceId}`}</Text>\n ) : null}\n </View>\n );\n }\n\n if (isFailed) {\n return (\n <View style={styles.container}>\n <Text style={styles.title}>{t('kyc.verificationProgress.status.failed')}</Text>\n \n <View style={styles.issuesBox}>\n <Text style={styles.issuesTitle}>{t('common.error')}</Text>\n {Array.isArray(verification.result?.issues) && verification.result.issues.map((issue: string, idx: number) => (\n <Text key={idx} style={styles.issueItem}>• {issue}</Text>\n ))}\n </View>\n\n <TouchableOpacity style={[styles.button, styles.primary]} onPress={() => actions.submitVerification()}>\n <Text style={styles.buttonText}>\n {state.currentLanguage === 'en' ? 'OK / Finish' : 'Terminer'}\n </Text>\n </TouchableOpacity>\n\n <TouchableOpacity style={[styles.button, styles.secondary]} onPress={() => actions.resetTemplate()}>\n <Text style={styles.secondaryText}>\n {state.currentLanguage === 'en' ? 'Start Over' : 'Recommencer'}\n </Text>\n </TouchableOpacity>\n\n {verification.result?.referenceId ? (\n <Text style={styles.refText}>{`Reference ID: ${verification.result.referenceId}`}</Text>\n ) : null}\n </View>\n );\n }\n\n return (\n <View style={styles.container}>\n <Text style={styles.title}>{t('kyc.verificationProgress.title')}</Text>\n <Text style={styles.subtitle}>\n {state.currentLanguage === 'en' \n ? `Checking verification status...` \n : `Vérification du statut en cours...`}\n </Text>\n\n <View style={styles.timeline}>\n <View style={[styles.dot, styles.done]}><Text style={styles.stepCheckmark}>✓</Text></View>\n <View style={styles.line} />\n <View style={[styles.dot, styles.active]}><Text style={styles.stepCheckmark}>2</Text></View>\n <View style={styles.line} />\n <View style={[styles.dot, styles.pending]}><Text style={styles.stepCheckmark}>3</Text></View>\n </View>\n\n <View style={styles.row}>\n <Text style={styles.stepLabel}>{t('kyc.verificationProgress.status.completed')}</Text>\n <Text style={styles.stepLabel}>{t('kyc.verificationProgress.steps.analyzing')}</Text>\n <Text style={styles.stepLabel}>{t('kyc.verificationProgress.steps.verifying')}</Text>\n </View>\n\n <View style={styles.card}>\n <Text style={styles.cardTitle}>{t('kyc.idCardCapture.title')}</Text>\n <Text style={styles.cardLine}>{t('kyc.verificationProgress.steps.extracting')}</Text>\n \n <Text style={styles.cardTitle}>{t('kyc.selfieCapture.title')}</Text>\n <Text style={styles.cardLine}>{t('kyc.verificationProgress.steps.analyzing')}</Text>\n \n <Text style={styles.cardTitle}>{t('kyc.verificationProgress.title')}</Text>\n \n <View style={styles.loadingRow}>\n <ActivityIndicator size=\"small\" color=\"#2DBD60\" style={{ marginRight: 8 }} />\n <Text style={styles.cardLine}>\n {t('kyc.verificationProgress.status.processing')}... \n <Text style={styles.retryText}> ({retryCount}/{MAX_RETRIES})</Text>\n </Text>\n </View>\n </View>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: { flex: 1, width: '100%', paddingHorizontal: 16, paddingVertical: 12 },\n title: { fontSize: 24, fontWeight: 'bold', color: '#111827', textAlign: 'center', marginTop: 12 },\n subtitle: { fontSize: 14, color: '#6B7280', textAlign: 'center', marginTop: 8 },\n timeline: { flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', marginTop: 24 },\n dot: { width: 38, height: 38, borderRadius: 34, justifyContent: 'center', alignItems: 'center' },\n stepCheckmark: { color: 'white', fontSize: 16, fontWeight: 'bold' },\n line: { flex: 1, height: 4, backgroundColor: '#E5E7EB' },\n done: { backgroundColor: '#10B981' },\n active: { backgroundColor: '#F59E0B' },\n pending: { backgroundColor: '#E5E7EB' },\n row: { flexDirection: 'row', justifyContent: 'space-between', marginTop: 8 },\n stepLabel: { fontSize: 14, color: '#111827', fontWeight: '600' },\n card: { backgroundColor: 'white', padding: 16, borderRadius: 16, marginTop: 24 },\n cardTitle: { fontSize: 16, color: '#6B7280', marginTop: 8 },\n cardLine: { fontSize: 18, color: '#111827', fontWeight: '600', marginTop: 2 },\n loadingRow: { flexDirection: 'row', alignItems: 'center', marginTop: 4 },\n retryText: { fontSize: 14, color: '#9CA3AF', fontWeight: '500' },\n button: { paddingVertical: 14, borderRadius: 10, alignItems: 'center', marginTop: 14 },\n primary: { backgroundColor: '#2DBD60' },\n buttonText: { color: 'white', fontSize: 16, fontWeight: '600' },\n refText: { marginTop: 12, textAlign: 'center', color: '#6B7280' },\n issuesBox: { backgroundColor: '#FEF2F2', borderRadius: 16, padding: 16, marginTop: 20 },\n issuesTitle: { color: '#991B1B', fontWeight: '700', marginBottom: 8 },\n issueItem: { color: '#991B1B', marginTop: 4 },\n secondary: { backgroundColor: '#F3F4F6', borderWidth: 1, borderColor: '#D1D5DB' },\n secondaryText: { color: '#374151', fontSize: 16, fontWeight: '600' },\n});"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useTemplateKYCFlow.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTemplateKYCFlow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAA6D,SAAS,EAAqB,MAAM,OAAO,CAAC;AACvH,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,iBAAiB,EAA6C,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAClK,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAQpD,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;IACvC,GAAG,EAAE,cAAc,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;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;IAChB,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iGAAiG;IACjG,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,6GAA6G;IAC7G,oBAAoB,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,uBAAuB,EAAE,KAAK,CAAC,EAAE,CAAC,4BAA4B,CAuC1E,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,EACf,MAAK,cAA6B,EAClC,oBAAoB,MAAM,EAC1B,wBAAwB,MAAM,EAC9B,uBAAuB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAC9E,cAAc,MAAM,EACpB,gBAAgB,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,KAC1C,iBAq/BF,CAAC"}
1
+ {"version":3,"file":"useTemplateKYCFlow.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTemplateKYCFlow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAA6D,SAAS,EAAqB,MAAM,OAAO,CAAC;AACvH,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,iBAAiB,EAA6C,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAClK,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAQpD,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;IACvC,GAAG,EAAE,cAAc,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;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;IAChB,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iGAAiG;IACjG,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,6GAA6G;IAC7G,oBAAoB,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,uBAAuB,EAAE,KAAK,CAAC,EAAE,CAAC,4BAA4B,CAuC1E,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,EACf,MAAK,cAA6B,EAClC,oBAAoB,MAAM,EAC1B,wBAAwB,MAAM,EAC9B,uBAAuB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAC9E,cAAc,MAAM,EACpB,gBAAgB,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,KAC1C,iBAugCF,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import React, { useState, useCallback, useMemo, createContext, useContext, useEffect, useRef } from 'react';
2
- import kycService, { authentification, truncateFields } from '../modules/api/KYCService';
2
+ import kycService, { authentification, clearAuthToken, truncateFields } from '../modules/api/KYCService';
3
3
  import useI18n from './useI18n';
4
4
  import { logger } from '../utils/logger';
5
5
  import { countryMapping } from '../config/region_mapping';
@@ -913,6 +913,20 @@ export const useTemplateKYCFlow = (template, onComplete, onError, onCancel, init
913
913
  resetTemplate: useCallback(() => {
914
914
  setState(buildInitialState());
915
915
  }, [buildInitialState, apiKey]),
916
+ restartSession: useCallback(async () => {
917
+ // 1. Clear the cached token so the backend doesn't reject the new request
918
+ // Make sure to import clearAuthToken at the top of your context file!
919
+ clearAuthToken();
920
+ // 2. Wipe the local component and UI state
921
+ setState(buildInitialState());
922
+ try {
923
+ await initializeSession();
924
+ // OR
925
+ }
926
+ catch (error) {
927
+ logger.error("Failed to fetch new session on restart", error);
928
+ }
929
+ }, [buildInitialState, apiKey, initializeSession]),
916
930
  // Changer la langue
917
931
  setLanguage: useCallback((language) => {
918
932
  setState(prev => ({