datakeen-session-react 1.1.140-rc.90 → 1.1.140-rc.91
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/selfie/selfie-flow/SelfieProcessing.js +15 -3
- package/dist/cjs/components/selfie/selfie-flow/SelfieProcessing.js.map +1 -1
- package/dist/cjs/components/session/Selfie.js +8 -2
- package/dist/cjs/components/session/Selfie.js.map +1 -1
- package/dist/cjs/services/analysis.js +3 -1
- package/dist/cjs/services/analysis.js.map +1 -1
- package/dist/cjs/services/sessionService.js +11 -0
- package/dist/cjs/services/sessionService.js.map +1 -1
- package/dist/esm/components/selfie/selfie-flow/SelfieProcessing.js +15 -3
- package/dist/esm/components/selfie/selfie-flow/SelfieProcessing.js.map +1 -1
- package/dist/esm/components/session/Selfie.js +8 -2
- package/dist/esm/components/session/Selfie.js.map +1 -1
- package/dist/esm/services/analysis.js +3 -1
- package/dist/esm/services/analysis.js.map +1 -1
- package/dist/esm/services/sessionService.js +11 -1
- package/dist/esm/services/sessionService.js.map +1 -1
- package/package.json +1 -1
|
@@ -12,6 +12,7 @@ var utils = require('../../../services/utils.js');
|
|
|
12
12
|
var analysis = require('../../../services/analysis.js');
|
|
13
13
|
var sessionMemoryStore = require('../../../services/sessionMemoryStore.js');
|
|
14
14
|
var ButtonDesktop = require('../../ui/ButtonDesktop.js');
|
|
15
|
+
var sessionService = require('../../../services/sessionService.js');
|
|
15
16
|
|
|
16
17
|
var processingSteps = [
|
|
17
18
|
{ key: "analysis" },
|
|
@@ -20,7 +21,7 @@ var processingSteps = [
|
|
|
20
21
|
{ key: "finalization" },
|
|
21
22
|
];
|
|
22
23
|
var SelfieProcessing = function (_a) {
|
|
23
|
-
var onProcessingComplete = _a.onProcessingComplete, selfieVideo = _a.selfieVideo, selfiePhoto = _a.selfiePhoto, onRetake = _a.onRetake, onContinueAnyway = _a.onContinueAnyway;
|
|
24
|
+
var onProcessingComplete = _a.onProcessingComplete, selfieVideo = _a.selfieVideo, selfiePhoto = _a.selfiePhoto, onRetake = _a.onRetake, onContinueAnyway = _a.onContinueAnyway, nodeId = _a.nodeId;
|
|
24
25
|
var t = useI18n.useI18n().t;
|
|
25
26
|
var _b = React.useState(0), currentStep = _b[0], setCurrentStep = _b[1];
|
|
26
27
|
var _c = React.useState(false), hasError = _c[0], setHasError = _c[1];
|
|
@@ -38,6 +39,13 @@ var SelfieProcessing = function (_a) {
|
|
|
38
39
|
var timeoutId = setTimeout(function () {
|
|
39
40
|
if (!isDone) {
|
|
40
41
|
console.error("⏰ Selfie analysis timeout after 60 seconds");
|
|
42
|
+
var sessionId = sessionMemoryStore.getActiveSessionId();
|
|
43
|
+
if (sessionId) {
|
|
44
|
+
void sessionService.reportSelfieFailure(sessionId, {
|
|
45
|
+
nodeId: nodeId,
|
|
46
|
+
reason: "timeout",
|
|
47
|
+
}).catch(function () { return undefined; });
|
|
48
|
+
}
|
|
41
49
|
setHasError(true);
|
|
42
50
|
setIsDone(true);
|
|
43
51
|
onProcessingComplete(false);
|
|
@@ -63,7 +71,7 @@ var SelfieProcessing = function (_a) {
|
|
|
63
71
|
case 1:
|
|
64
72
|
_h.trys.push([1, 3, , 4]);
|
|
65
73
|
return [4 /*yield*/, Promise.all([
|
|
66
|
-
analysis.analyzeSelfie(sessionId, selfieVideo, selfiePhoto),
|
|
74
|
+
analysis.analyzeSelfie(sessionId, selfieVideo, selfiePhoto, nodeId),
|
|
67
75
|
new Promise(function (resolve) { return setTimeout(resolve, 2000); }),
|
|
68
76
|
])];
|
|
69
77
|
case 2:
|
|
@@ -110,6 +118,10 @@ var SelfieProcessing = function (_a) {
|
|
|
110
118
|
case 3:
|
|
111
119
|
error_1 = _h.sent();
|
|
112
120
|
console.error("💥 Selfie analysis failed:", error_1);
|
|
121
|
+
void sessionService.reportSelfieFailure(sessionId, {
|
|
122
|
+
nodeId: nodeId,
|
|
123
|
+
reason: "network_error",
|
|
124
|
+
}).catch(function () { return undefined; });
|
|
113
125
|
clearTimeout(timeoutId);
|
|
114
126
|
setHasError(true);
|
|
115
127
|
setIsDone(true);
|
|
@@ -123,7 +135,7 @@ var SelfieProcessing = function (_a) {
|
|
|
123
135
|
return function () {
|
|
124
136
|
clearTimeout(timeoutId);
|
|
125
137
|
};
|
|
126
|
-
}, [onProcessingComplete, selfieVideo, selfiePhoto, isDone]);
|
|
138
|
+
}, [onProcessingComplete, selfieVideo, selfiePhoto, isDone, nodeId]);
|
|
127
139
|
React.useEffect(function () {
|
|
128
140
|
// While analysis is not finished, stay at step 0
|
|
129
141
|
if (!isDone && !hasError) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelfieProcessing.js","sources":["../../../../../../src/components/selfie/selfie-flow/SelfieProcessing.tsx"],"sourcesContent":["import { useState, useEffect, useRef } from \"react\";\nimport Title from \"../../ui/Title\";\nimport Subtitle from \"../../ui/Subtitle\";\nimport { useI18n } from \"../../../hooks/useI18n\";\nimport { codeToStep } from \"../../../services/utils\";\nimport type { SelfieCaptureData } from \"../../../types/selfie\";\nimport { analyzeSelfie } from \"../../../services/analysis\";\nimport { getActiveSessionId } from \"../../../services/sessionMemoryStore\";\nimport ButtonDesktop from \"../../ui/ButtonDesktop\";\n\ninterface SelfieProcessingProps {\n onProcessingComplete: (success: boolean) => void;\n selfieVideo: SelfieCaptureData | null;\n selfiePhoto: string | null;\n onRetake: () => void;\n onContinueAnyway?: () => void;\n}\n\nconst processingSteps = [\n { key: \"analysis\" },\n { key: \"face_detection\" },\n { key: \"liveness\" },\n { key: \"finalization\" },\n];\nconst SelfieProcessing = ({\n onProcessingComplete,\n selfieVideo,\n selfiePhoto,\n onRetake,\n onContinueAnyway,\n}: SelfieProcessingProps) => {\n const { t } = useI18n();\n const [currentStep, setCurrentStep] = useState(0);\n const [hasError, setHasError] = useState(false);\n const [isDone, setIsDone] = useState(false);\n const [conformityCode, setConformityCode] = useState<string | null>(null);\n\n const analysisStartedRef = useRef(false);\n useEffect(() => {\n // Prevent multiple analysis runs\n if (analysisStartedRef.current) return;\n if (!selfieVideo || !selfiePhoto) return;\n\n analysisStartedRef.current = true;\n\n // Timeout simple : 60 secondes pour tous\n const timeoutId = setTimeout(() => {\n if (!isDone) {\n console.error(\"⏰ Selfie analysis timeout after 60 seconds\");\n setHasError(true);\n setIsDone(true);\n onProcessingComplete(false);\n }\n }, 60000);\n\n const processFiles = async () => {\n const sessionId = getActiveSessionId();\n if (!sessionId) {\n console.error(\"❌ No session ID found\");\n setHasError(true);\n onProcessingComplete(false);\n setIsDone(true);\n clearTimeout(timeoutId);\n return;\n }\n\n console.log(\"🚀 Starting selfie analysis...\");\n\n try {\n // Délai minimum simple : 2 secondes\n const [response] = await Promise.all([\n analyzeSelfie(sessionId, selfieVideo, selfiePhoto),\n new Promise((resolve) => setTimeout(resolve, 2000)),\n ]);\n\n console.log(\"✅ Analysis response:\", response);\n clearTimeout(timeoutId);\n\n // Handle Unissey response format\n let isSuccess = false;\n let conformityCodeToSet = \"4\"; // Default to error\n\n if (response && response.data) {\n // Check if analysis was successful based on real Unissey response structure\n const data = response.data;\n const details = data.details;\n const faceComparison = details?.face_comparison;\n\n // Success: face match with high confidence\n if (\n data.is_match &&\n faceComparison?.result === \"match\"\n // faceComparison?.confidence_level === \"high\" Pas assez explicit\n ) {\n isSuccess = true;\n conformityCodeToSet = \"1.0\"; // Success code\n } else if (details) {\n // Check specific failure reasons\n if (faceComparison?.result !== \"match\") {\n conformityCodeToSet = \"2.0\"; // Face comparison failed\n } else if (faceComparison?.confidence_level !== \"high\") {\n conformityCodeToSet = \"3.0\"; // Low confidence\n } else {\n conformityCodeToSet = \"4.0\"; // Generic error\n }\n }\n }\n\n console.log(\"📊 Selfie analysis result:\", {\n isSuccess,\n conformityCode: conformityCodeToSet,\n isMatch: response?.data?.is_match,\n confidenceLevel:\n response?.data?.details?.face_comparison?.confidence_level,\n comparisonResult: response?.data?.details?.face_comparison?.result,\n });\n\n setConformityCode(conformityCodeToSet);\n setIsDone(true);\n\n // Don't call onProcessingComplete here - let the animation effect handle it\n } catch (error) {\n console.error(\"💥 Selfie analysis failed:\", error);\n clearTimeout(timeoutId);\n setHasError(true);\n setIsDone(true);\n onProcessingComplete(false);\n }\n };\n\n processFiles();\n\n return () => {\n clearTimeout(timeoutId);\n };\n }, [onProcessingComplete, selfieVideo, selfiePhoto, isDone]);\n\n useEffect(() => {\n // While analysis is not finished, stay at step 0\n if (!isDone && !hasError) {\n setCurrentStep(0);\n return;\n }\n // We want stepToStop to be the step in error (the one corresponding to conformityCode)\n let stepToStop = codeToStep(conformityCode || \"4\");\n // If codeToStep returns 0 (generic error), stop at the first step\n if (stepToStop === 0) stepToStop = 1;\n console.log(\"Step to stop (error):\", stepToStop);\n\n // When analysis is finished (success or error), start the animation\n const interval = setInterval(() => {\n setCurrentStep((prev) => {\n if (prev < stepToStop - 1) {\n return prev + 1;\n } else {\n clearInterval(interval);\n if (stepToStop < 4) setHasError(true);\n onProcessingComplete(stepToStop === 4);\n return prev; // Stop at the step in error\n }\n });\n }, 500); // Adjust the speed of the animation\n return () => clearInterval(interval);\n }, [onProcessingComplete, hasError, isDone, conformityCode]);\n\n return (\n <div className=\"flex flex-col justify-between h-full w-full\">\n <div className=\"flex-1 px-4 py-6 pt-11 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-6\">\n <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">\n {hasError\n ? t(\"selfie.processing.error_title\", \"Échec de l'analyse\")\n : t(\"selfie.processing.title\", \"Analyse en cours\")}\n </Title>\n <Subtitle className=\"text-sm text-gray-600 leading-relaxed\">\n {hasError\n ? t(\n \"selfie.processing.error_subtitle\",\n \"Une erreur est survenue lors de l'analyse du selfie. Veuillez réessayer.\",\n )\n : t(\n \"selfie.processing.subtitle\",\n \"Nous analysons votre selfie. Cela peut prendre quelques instants.\",\n )}\n </Subtitle>\n </div>\n\n <div className=\"w-full\">\n <div className=\"space-y-5\">\n {processingSteps.map(\n (step, index) =>\n step.key && (\n <div key={index} className=\"flex items-start\">\n <div className=\"mr-4 mt-1 flex-shrink-0\">\n {hasError && index === currentStep ? (\n // Step in error - red cross\n <div className=\"flex items-center justify-center w-6 h-6 rounded-full bg-red-500 text-white text-xs font-bold\">\n ×\n </div>\n ) : index < currentStep ? (\n // Completed step - green check\n <div className=\"flex items-center justify-center w-6 h-6 rounded-full bg-[#11E5C5] text-white text-xs\">\n ✓\n </div>\n ) : index === currentStep ? (\n // Current step - spinner\n <div className=\"w-6 h-6 rounded-full border-2 border-t-[#11E5C5] border-r-[#11E5C5] border-b-[#11E5C5] border-l-transparent animate-spin\"></div>\n ) : (\n // Upcoming step - gray circle\n <div className=\"w-6 h-6 rounded-full border-2 border-gray-300\"></div>\n )}\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"font-medium text-[#3C3C40] text-sm\">\n {t(`selfie.processing.steps.${step.key}.title`)}\n </p>\n <p className=\"text-xs text-gray-500 mt-1\">\n {t(`selfie.processing.steps.${step.key}.subtitle`)}\n </p>\n </div>\n </div>\n ),\n )}\n </div>\n </div>\n\n <div className=\"w-full\">\n <div className=\"bg-gray-200 rounded-full h-2\">\n <div\n className={\n hasError\n ? \"bg-red-500 h-2 rounded-full transition-all duration-500 ease-out\"\n : \"bg-[#11E5C5] h-2 rounded-full transition-all duration-500 ease-out\"\n }\n style={{\n width: `${\n ((currentStep + 1) / processingSteps.length) * 100\n }%`,\n }}\n ></div>\n </div>\n <p className=\"text-xs text-gray-500 mt-2 text-center\">\n {t(\"selfie.processing.step_of\", {\n current: currentStep + 1,\n total: processingSteps.length,\n })}\n </p>\n </div>\n\n {/* Footer with buttons */}\n {hasError && (\n <div className=\"sticky bottom-0 bg-white border-t border-gray-100 p-4 md:p-6\">\n <div className=\"w-full max-w-md mx-auto\">\n {/* Mobile layout - stacked buttons */}\n <div className=\"flex flex-col space-y-3 md:hidden\">\n {onContinueAnyway && (\n <ButtonDesktop type=\"back\" onClick={onContinueAnyway}>\n {t(\"errors.continue_anyway\", \"Poursuivre tout de même\")}\n </ButtonDesktop>\n )}\n <ButtonDesktop type=\"continue\" onClick={onRetake}>\n {t(\"selfie.confirmation.retake\", \"Reprendre le selfie\")}\n </ButtonDesktop>\n </div>\n\n {/* Desktop layout - horizontal buttons */}\n <div className=\"hidden md:flex gap-3 justify-between items-center\">\n {onContinueAnyway && (\n <ButtonDesktop type=\"back\" onClick={onContinueAnyway}>\n {t(\"errors.continue_anyway\", \"Poursuivre tout de même\")}\n </ButtonDesktop>\n )}\n <ButtonDesktop type=\"continue\" onClick={onRetake}>\n {t(\"selfie.confirmation.retake\", \"Reprendre le selfie\")}\n </ButtonDesktop>\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default SelfieProcessing;\n"],"names":["useI18n","useState","useRef","useEffect","__awaiter","getActiveSessionId","analyzeSelfie","codeToStep","_jsx","_jsxs","Title","Subtitle","ButtonDesktop"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SelfieProcessing.js","sources":["../../../../../../src/components/selfie/selfie-flow/SelfieProcessing.tsx"],"sourcesContent":["import { useState, useEffect, useRef } from \"react\";\nimport Title from \"../../ui/Title\";\nimport Subtitle from \"../../ui/Subtitle\";\nimport { useI18n } from \"../../../hooks/useI18n\";\nimport { codeToStep } from \"../../../services/utils\";\nimport type { SelfieCaptureData } from \"../../../types/selfie\";\nimport { analyzeSelfie } from \"../../../services/analysis\";\nimport { getActiveSessionId } from \"../../../services/sessionMemoryStore\";\nimport ButtonDesktop from \"../../ui/ButtonDesktop\";\nimport { reportSelfieFailure } from \"../../../services/sessionService\";\n\ninterface SelfieProcessingProps {\n onProcessingComplete: (success: boolean) => void;\n selfieVideo: SelfieCaptureData | null;\n selfiePhoto: string | null;\n onRetake: () => void;\n onContinueAnyway?: () => void;\n nodeId: string;\n}\n\nconst processingSteps = [\n { key: \"analysis\" },\n { key: \"face_detection\" },\n { key: \"liveness\" },\n { key: \"finalization\" },\n];\nconst SelfieProcessing = ({\n onProcessingComplete,\n selfieVideo,\n selfiePhoto,\n onRetake,\n onContinueAnyway,\n nodeId,\n}: SelfieProcessingProps) => {\n const { t } = useI18n();\n const [currentStep, setCurrentStep] = useState(0);\n const [hasError, setHasError] = useState(false);\n const [isDone, setIsDone] = useState(false);\n const [conformityCode, setConformityCode] = useState<string | null>(null);\n\n const analysisStartedRef = useRef(false);\n useEffect(() => {\n // Prevent multiple analysis runs\n if (analysisStartedRef.current) return;\n if (!selfieVideo || !selfiePhoto) return;\n\n analysisStartedRef.current = true;\n\n // Timeout simple : 60 secondes pour tous\n const timeoutId = setTimeout(() => {\n if (!isDone) {\n console.error(\"⏰ Selfie analysis timeout after 60 seconds\");\n const sessionId = getActiveSessionId();\n if (sessionId) {\n void reportSelfieFailure(sessionId, {\n nodeId,\n reason: \"timeout\",\n }).catch(() => undefined);\n }\n setHasError(true);\n setIsDone(true);\n onProcessingComplete(false);\n }\n }, 60000);\n\n const processFiles = async () => {\n const sessionId = getActiveSessionId();\n if (!sessionId) {\n console.error(\"❌ No session ID found\");\n setHasError(true);\n onProcessingComplete(false);\n setIsDone(true);\n clearTimeout(timeoutId);\n return;\n }\n\n console.log(\"🚀 Starting selfie analysis...\");\n\n try {\n // Délai minimum simple : 2 secondes\n const [response] = await Promise.all([\n analyzeSelfie(sessionId, selfieVideo, selfiePhoto, nodeId),\n new Promise((resolve) => setTimeout(resolve, 2000)),\n ]);\n\n console.log(\"✅ Analysis response:\", response);\n clearTimeout(timeoutId);\n\n // Handle Unissey response format\n let isSuccess = false;\n let conformityCodeToSet = \"4\"; // Default to error\n\n if (response && response.data) {\n // Check if analysis was successful based on real Unissey response structure\n const data = response.data;\n const details = data.details;\n const faceComparison = details?.face_comparison;\n\n // Success: face match with high confidence\n if (\n data.is_match &&\n faceComparison?.result === \"match\"\n // faceComparison?.confidence_level === \"high\" Pas assez explicit\n ) {\n isSuccess = true;\n conformityCodeToSet = \"1.0\"; // Success code\n } else if (details) {\n // Check specific failure reasons\n if (faceComparison?.result !== \"match\") {\n conformityCodeToSet = \"2.0\"; // Face comparison failed\n } else if (faceComparison?.confidence_level !== \"high\") {\n conformityCodeToSet = \"3.0\"; // Low confidence\n } else {\n conformityCodeToSet = \"4.0\"; // Generic error\n }\n }\n }\n\n console.log(\"📊 Selfie analysis result:\", {\n isSuccess,\n conformityCode: conformityCodeToSet,\n isMatch: response?.data?.is_match,\n confidenceLevel:\n response?.data?.details?.face_comparison?.confidence_level,\n comparisonResult: response?.data?.details?.face_comparison?.result,\n });\n\n setConformityCode(conformityCodeToSet);\n setIsDone(true);\n\n // Don't call onProcessingComplete here - let the animation effect handle it\n } catch (error) {\n console.error(\"💥 Selfie analysis failed:\", error);\n void reportSelfieFailure(sessionId, {\n nodeId,\n reason: \"network_error\",\n }).catch(() => undefined);\n clearTimeout(timeoutId);\n setHasError(true);\n setIsDone(true);\n onProcessingComplete(false);\n }\n };\n\n processFiles();\n\n return () => {\n clearTimeout(timeoutId);\n };\n }, [onProcessingComplete, selfieVideo, selfiePhoto, isDone, nodeId]);\n\n useEffect(() => {\n // While analysis is not finished, stay at step 0\n if (!isDone && !hasError) {\n setCurrentStep(0);\n return;\n }\n // We want stepToStop to be the step in error (the one corresponding to conformityCode)\n let stepToStop = codeToStep(conformityCode || \"4\");\n // If codeToStep returns 0 (generic error), stop at the first step\n if (stepToStop === 0) stepToStop = 1;\n console.log(\"Step to stop (error):\", stepToStop);\n\n // When analysis is finished (success or error), start the animation\n const interval = setInterval(() => {\n setCurrentStep((prev) => {\n if (prev < stepToStop - 1) {\n return prev + 1;\n } else {\n clearInterval(interval);\n if (stepToStop < 4) setHasError(true);\n onProcessingComplete(stepToStop === 4);\n return prev; // Stop at the step in error\n }\n });\n }, 500); // Adjust the speed of the animation\n return () => clearInterval(interval);\n }, [onProcessingComplete, hasError, isDone, conformityCode]);\n\n return (\n <div className=\"flex flex-col justify-between h-full w-full\">\n <div className=\"flex-1 px-4 py-6 pt-11 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-6\">\n <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">\n {hasError\n ? t(\"selfie.processing.error_title\", \"Échec de l'analyse\")\n : t(\"selfie.processing.title\", \"Analyse en cours\")}\n </Title>\n <Subtitle className=\"text-sm text-gray-600 leading-relaxed\">\n {hasError\n ? t(\n \"selfie.processing.error_subtitle\",\n \"Une erreur est survenue lors de l'analyse du selfie. Veuillez réessayer.\",\n )\n : t(\n \"selfie.processing.subtitle\",\n \"Nous analysons votre selfie. Cela peut prendre quelques instants.\",\n )}\n </Subtitle>\n </div>\n\n <div className=\"w-full\">\n <div className=\"space-y-5\">\n {processingSteps.map(\n (step, index) =>\n step.key && (\n <div key={index} className=\"flex items-start\">\n <div className=\"mr-4 mt-1 flex-shrink-0\">\n {hasError && index === currentStep ? (\n // Step in error - red cross\n <div className=\"flex items-center justify-center w-6 h-6 rounded-full bg-red-500 text-white text-xs font-bold\">\n ×\n </div>\n ) : index < currentStep ? (\n // Completed step - green check\n <div className=\"flex items-center justify-center w-6 h-6 rounded-full bg-[#11E5C5] text-white text-xs\">\n ✓\n </div>\n ) : index === currentStep ? (\n // Current step - spinner\n <div className=\"w-6 h-6 rounded-full border-2 border-t-[#11E5C5] border-r-[#11E5C5] border-b-[#11E5C5] border-l-transparent animate-spin\"></div>\n ) : (\n // Upcoming step - gray circle\n <div className=\"w-6 h-6 rounded-full border-2 border-gray-300\"></div>\n )}\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"font-medium text-[#3C3C40] text-sm\">\n {t(`selfie.processing.steps.${step.key}.title`)}\n </p>\n <p className=\"text-xs text-gray-500 mt-1\">\n {t(`selfie.processing.steps.${step.key}.subtitle`)}\n </p>\n </div>\n </div>\n ),\n )}\n </div>\n </div>\n\n <div className=\"w-full\">\n <div className=\"bg-gray-200 rounded-full h-2\">\n <div\n className={\n hasError\n ? \"bg-red-500 h-2 rounded-full transition-all duration-500 ease-out\"\n : \"bg-[#11E5C5] h-2 rounded-full transition-all duration-500 ease-out\"\n }\n style={{\n width: `${\n ((currentStep + 1) / processingSteps.length) * 100\n }%`,\n }}\n ></div>\n </div>\n <p className=\"text-xs text-gray-500 mt-2 text-center\">\n {t(\"selfie.processing.step_of\", {\n current: currentStep + 1,\n total: processingSteps.length,\n })}\n </p>\n </div>\n\n {/* Footer with buttons */}\n {hasError && (\n <div className=\"sticky bottom-0 bg-white border-t border-gray-100 p-4 md:p-6\">\n <div className=\"w-full max-w-md mx-auto\">\n {/* Mobile layout - stacked buttons */}\n <div className=\"flex flex-col space-y-3 md:hidden\">\n {onContinueAnyway && (\n <ButtonDesktop type=\"back\" onClick={onContinueAnyway}>\n {t(\"errors.continue_anyway\", \"Poursuivre tout de même\")}\n </ButtonDesktop>\n )}\n <ButtonDesktop type=\"continue\" onClick={onRetake}>\n {t(\"selfie.confirmation.retake\", \"Reprendre le selfie\")}\n </ButtonDesktop>\n </div>\n\n {/* Desktop layout - horizontal buttons */}\n <div className=\"hidden md:flex gap-3 justify-between items-center\">\n {onContinueAnyway && (\n <ButtonDesktop type=\"back\" onClick={onContinueAnyway}>\n {t(\"errors.continue_anyway\", \"Poursuivre tout de même\")}\n </ButtonDesktop>\n )}\n <ButtonDesktop type=\"continue\" onClick={onRetake}>\n {t(\"selfie.confirmation.retake\", \"Reprendre le selfie\")}\n </ButtonDesktop>\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default SelfieProcessing;\n"],"names":["useI18n","useState","useRef","useEffect","getActiveSessionId","reportSelfieFailure","__awaiter","analyzeSelfie","codeToStep","_jsx","_jsxs","Title","Subtitle","ButtonDesktop"],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ var React = require('react');
|
|
|
7
7
|
var Video = require('../selfie/Video.js');
|
|
8
8
|
var SelfieConfirmation = require('../selfie/SelfieConfirmation.js');
|
|
9
9
|
var SelfieProcessing = require('../selfie/selfie-flow/SelfieProcessing.js');
|
|
10
|
+
var sessionService = require('../../services/sessionService.js');
|
|
10
11
|
|
|
11
12
|
/**
|
|
12
13
|
* Composant de gestion du flux selfie.
|
|
@@ -14,7 +15,7 @@ var SelfieProcessing = require('../selfie/selfie-flow/SelfieProcessing.js');
|
|
|
14
15
|
*/
|
|
15
16
|
var Selfie = function (_a) {
|
|
16
17
|
var _b, _c;
|
|
17
|
-
var stepObject = _a.stepObject, node = _a.node, template = _a.template;
|
|
18
|
+
var stepObject = _a.stepObject, sessionId = _a.sessionId, node = _a.node, template = _a.template;
|
|
18
19
|
var _d = React.useState(0), internalStep = _d[0], setInternalStep = _d[1];
|
|
19
20
|
var _e = React.useState(null), selfieData = _e[0], setSelfieData = _e[1];
|
|
20
21
|
var _f = React.useState(null), selfiePhoto = _f[0], setSelfiePhoto = _f[1];
|
|
@@ -35,6 +36,11 @@ var Selfie = function (_a) {
|
|
|
35
36
|
}
|
|
36
37
|
};
|
|
37
38
|
var handleContinueAnyway = function () {
|
|
39
|
+
void sessionService.reportSelfieFailure(sessionId, {
|
|
40
|
+
nodeId: node.id,
|
|
41
|
+
reason: "user_bypassed",
|
|
42
|
+
bypassed: true,
|
|
43
|
+
}).catch(function () { return undefined; });
|
|
38
44
|
stepObject.goToNextStepCommitted(node.id, template);
|
|
39
45
|
};
|
|
40
46
|
var onRetake = function () {
|
|
@@ -43,7 +49,7 @@ var Selfie = function (_a) {
|
|
|
43
49
|
var handleRetakeSelfie = function () {
|
|
44
50
|
setInternalStep(0);
|
|
45
51
|
};
|
|
46
|
-
return (jsxRuntime.jsxs("div", { className: "h-full w-full transition-opacity duration-500 ".concat(isTransitioning ? "opacity-50" : "opacity-100"), children: [internalStep === 0 && (jsxRuntime.jsx(Video.default, { setSelfieData: setSelfieData, setStep: setInternalStep, btnBg: (_b = template.buttonBgColor) !== null && _b !== void 0 ? _b : "#11E5C5", btnText: (_c = template.buttonTextColor) !== null && _c !== void 0 ? _c : "#3C3C40" })), internalStep === 1 && selfieData && (jsxRuntime.jsx(SelfieConfirmation.default, { selfieData: selfieData, onConfirm: handleConfirmSelfie, onRetake: handleRetakeSelfie, setSelfiePhoto: setSelfiePhoto })), internalStep === 2 && selfieData && (jsxRuntime.jsx(SelfieProcessing.default, { onProcessingComplete: selfieProcessed, selfieVideo: selfieData, selfiePhoto: selfiePhoto, onRetake: onRetake, onContinueAnyway: node.allowContinueOnFailure === false
|
|
52
|
+
return (jsxRuntime.jsxs("div", { className: "h-full w-full transition-opacity duration-500 ".concat(isTransitioning ? "opacity-50" : "opacity-100"), children: [internalStep === 0 && (jsxRuntime.jsx(Video.default, { setSelfieData: setSelfieData, setStep: setInternalStep, btnBg: (_b = template.buttonBgColor) !== null && _b !== void 0 ? _b : "#11E5C5", btnText: (_c = template.buttonTextColor) !== null && _c !== void 0 ? _c : "#3C3C40" })), internalStep === 1 && selfieData && (jsxRuntime.jsx(SelfieConfirmation.default, { selfieData: selfieData, onConfirm: handleConfirmSelfie, onRetake: handleRetakeSelfie, setSelfiePhoto: setSelfiePhoto })), internalStep === 2 && selfieData && (jsxRuntime.jsx(SelfieProcessing.default, { onProcessingComplete: selfieProcessed, selfieVideo: selfieData, selfiePhoto: selfiePhoto, onRetake: onRetake, nodeId: node.id, onContinueAnyway: node.allowContinueOnFailure === false
|
|
47
53
|
? undefined
|
|
48
54
|
: handleContinueAnyway }))] }));
|
|
49
55
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Selfie.js","sources":["../../../../../src/components/session/Selfie.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport {\n SessionTemplate,\n SessionTemplateNode,\n stepObject,\n} from \"../../types/session\";\nimport Video from \"../selfie/Video\";\nimport SelfieConfirmation from \"../selfie/SelfieConfirmation\";\nimport type { SelfieCaptureData } from \"../../types/selfie\";\nimport SelfieProcessing from \"../selfie/selfie-flow/SelfieProcessing\";\n\n/**\n * Composant de gestion du flux selfie.\n * Gère les étapes internes de capture et confirmation du selfie.\n */\nconst Selfie = ({\n stepObject,\n node,\n template,\n}: {\n stepObject: stepObject;\n sessionId: string;\n node: SessionTemplateNode;\n template: SessionTemplate;\n}) => {\n const [internalStep, setInternalStep] = useState(0);\n const [selfieData, setSelfieData] = useState<SelfieCaptureData | null>(null);\n const [selfiePhoto, setSelfiePhoto] = useState<string | null>(null);\n const [isTransitioning, setIsTransitioning] = useState(false);\n\n const handleConfirmSelfie = () => {\n // Ajouter une transition visuelle avant de passer à l'étape suivante\n setIsTransitioning(true);\n\n // Attendre un peu pour l'animation avant de passer à l'étape suivante\n setTimeout(() => {\n setInternalStep(2); // Passer à l'étape de traitement du selfie\n setIsTransitioning(false);\n }, 500);\n };\n\n const selfieProcessed = (processed: boolean) => {\n // Callback pour indiquer que le selfie a été traité\n if (processed) {\n stepObject.goToNextStepCommitted(node.id, template);\n }\n };\n\n const handleContinueAnyway = () => {\n stepObject.goToNextStepCommitted(node.id, template);\n };\n\n const onRetake = () => {\n setInternalStep(0);\n };\n\n const handleRetakeSelfie = () => {\n setInternalStep(0);\n };\n\n return (\n <div\n className={`h-full w-full transition-opacity duration-500 ${isTransitioning ? \"opacity-50\" : \"opacity-100\"\n }`}\n >\n {internalStep === 0 && (\n <Video\n setSelfieData={setSelfieData}\n setStep={setInternalStep}\n btnBg={template.buttonBgColor ?? \"#11E5C5\"}\n btnText={template.buttonTextColor ?? \"#3C3C40\"}\n />\n )}\n {internalStep === 1 && selfieData && (\n <SelfieConfirmation\n selfieData={selfieData}\n onConfirm={handleConfirmSelfie}\n onRetake={handleRetakeSelfie}\n setSelfiePhoto={setSelfiePhoto}\n />\n )}\n {internalStep === 2 && selfieData && (\n <SelfieProcessing\n onProcessingComplete={selfieProcessed}\n selfieVideo={selfieData}\n selfiePhoto={selfiePhoto}\n onRetake={onRetake}\n onContinueAnyway={\n node.allowContinueOnFailure === false\n ? undefined\n : handleContinueAnyway\n }\n />\n )}\n </div>\n );\n};\n\nexport default Selfie;\n"],"names":["useState","_jsxs","_jsx","Video","SelfieConfirmation","SelfieProcessing"],"mappings":"
|
|
1
|
+
{"version":3,"file":"Selfie.js","sources":["../../../../../src/components/session/Selfie.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport {\n SessionTemplate,\n SessionTemplateNode,\n stepObject,\n} from \"../../types/session\";\nimport Video from \"../selfie/Video\";\nimport SelfieConfirmation from \"../selfie/SelfieConfirmation\";\nimport type { SelfieCaptureData } from \"../../types/selfie\";\nimport SelfieProcessing from \"../selfie/selfie-flow/SelfieProcessing\";\nimport { reportSelfieFailure } from \"../../services/sessionService\";\n\n/**\n * Composant de gestion du flux selfie.\n * Gère les étapes internes de capture et confirmation du selfie.\n */\nconst Selfie = ({\n stepObject,\n sessionId,\n node,\n template,\n}: {\n stepObject: stepObject;\n sessionId: string;\n node: SessionTemplateNode;\n template: SessionTemplate;\n}) => {\n const [internalStep, setInternalStep] = useState(0);\n const [selfieData, setSelfieData] = useState<SelfieCaptureData | null>(null);\n const [selfiePhoto, setSelfiePhoto] = useState<string | null>(null);\n const [isTransitioning, setIsTransitioning] = useState(false);\n\n const handleConfirmSelfie = () => {\n // Ajouter une transition visuelle avant de passer à l'étape suivante\n setIsTransitioning(true);\n\n // Attendre un peu pour l'animation avant de passer à l'étape suivante\n setTimeout(() => {\n setInternalStep(2); // Passer à l'étape de traitement du selfie\n setIsTransitioning(false);\n }, 500);\n };\n\n const selfieProcessed = (processed: boolean) => {\n // Callback pour indiquer que le selfie a été traité\n if (processed) {\n stepObject.goToNextStepCommitted(node.id, template);\n }\n };\n\n const handleContinueAnyway = () => {\n void reportSelfieFailure(sessionId, {\n nodeId: node.id,\n reason: \"user_bypassed\",\n bypassed: true,\n }).catch(() => undefined);\n stepObject.goToNextStepCommitted(node.id, template);\n };\n\n const onRetake = () => {\n setInternalStep(0);\n };\n\n const handleRetakeSelfie = () => {\n setInternalStep(0);\n };\n\n return (\n <div\n className={`h-full w-full transition-opacity duration-500 ${isTransitioning ? \"opacity-50\" : \"opacity-100\"\n }`}\n >\n {internalStep === 0 && (\n <Video\n setSelfieData={setSelfieData}\n setStep={setInternalStep}\n btnBg={template.buttonBgColor ?? \"#11E5C5\"}\n btnText={template.buttonTextColor ?? \"#3C3C40\"}\n />\n )}\n {internalStep === 1 && selfieData && (\n <SelfieConfirmation\n selfieData={selfieData}\n onConfirm={handleConfirmSelfie}\n onRetake={handleRetakeSelfie}\n setSelfiePhoto={setSelfiePhoto}\n />\n )}\n {internalStep === 2 && selfieData && (\n <SelfieProcessing\n onProcessingComplete={selfieProcessed}\n selfieVideo={selfieData}\n selfiePhoto={selfiePhoto}\n onRetake={onRetake}\n nodeId={node.id}\n onContinueAnyway={\n node.allowContinueOnFailure === false\n ? undefined\n : handleContinueAnyway\n }\n />\n )}\n </div>\n );\n};\n\nexport default Selfie;\n"],"names":["useState","reportSelfieFailure","_jsxs","_jsx","Video","SelfieConfirmation","SelfieProcessing"],"mappings":"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"}
|
|
@@ -273,7 +273,7 @@ function analyzeFiles(sessionId_1, nodeId_1, files_1, documentTypeId_1) {
|
|
|
273
273
|
});
|
|
274
274
|
});
|
|
275
275
|
}
|
|
276
|
-
function analyzeSelfie(sessionId, selfieFile, selfiePhoto) {
|
|
276
|
+
function analyzeSelfie(sessionId, selfieFile, selfiePhoto, nodeId) {
|
|
277
277
|
return tslib_es6.__awaiter(this, void 0, void 0, function () {
|
|
278
278
|
var formData, response, unisseyResponse, unisseyData, faceComparison, isHighConfidence, isMatch, isGenuine, analysisResponse, err_1, errorMessage, error_3;
|
|
279
279
|
var _a, _b, _c, _d;
|
|
@@ -285,6 +285,8 @@ function analyzeSelfie(sessionId, selfieFile, selfiePhoto) {
|
|
|
285
285
|
formData = new FormData();
|
|
286
286
|
formData.append("file", selfieFile.media, "selfie.mp4");
|
|
287
287
|
formData.append("photo", selfiePhoto);
|
|
288
|
+
if (nodeId)
|
|
289
|
+
formData.append("nodeId", nodeId);
|
|
288
290
|
_e.label = 1;
|
|
289
291
|
case 1:
|
|
290
292
|
_e.trys.push([1, 13, , 14]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analysis.js","sources":["../../../../src/services/analysis.ts"],"sourcesContent":["import type { onUploadFiles } from \"../types/uploadFiles\";\nimport { dataURLtoFile, getMimeTypeFromDataURL } from \"./utils\";\nimport { mimeTypeToExtension } from \"../utils/mimeTypes\";\nimport { apiService } from \"./api\";\nimport type { SelfieCaptureData } from \"../types/selfie\";\nimport type {\n DocumentVideoCaptureBySide,\n DocumentVideoPreviewBySide,\n} from \"../types/documentVideo\";\nimport { getSessionMemoryUserInput } from \"./sessionMemoryStore\";\nimport {\n logDocumentUploaded,\n logSelfieCaptured,\n logAiControlled,\n logStatusModified,\n} from \"./auditTrailService\";\nimport { pollAnalysisStatus, stopPolling } from \"./pollingService\";\nimport type { PollingOptions } from \"./pollingService\";\n\n// Timeout configurations (in milliseconds)\nconst ANALYSIS_TIMEOUT = 600000; // 10 minutes for document analysis (increased for large files + ML processing)\nconst SELFIE_ANALYSIS_TIMEOUT = 600000; // 10 minutes for selfie analysis\nconst UPLOAD_TIMEOUT = 300000; // 5 minutes for file uploads\n\n// Map pour suivre les analyses en cours et éviter les doublons\nconst ongoingAnalyses = new Map<string, Promise<any>>();\n\nexport interface AnalyzeFilesOptions {\n personPhoto?: string | null;\n save?: boolean;\n incrementAnalysis?: boolean;\n forceUpload?: boolean;\n documentTypeKey?: string | null;\n requiresTwoSides?: boolean;\n enablePolling?: boolean; // Enable polling for analysis progress (default: true)\n pollingOptions?: PollingOptions; // Custom polling configuration\n collectOnly?: boolean; // Bypass AI verification — document is collected as-is\n}\n\ninterface LaunchAnalysisOptions extends AnalyzeFilesOptions {}\n\nfunction createFileName(fileURL: string, baseName: string = \"file\") {\n const mimeType = getMimeTypeFromDataURL(fileURL);\n if (!mimeType) {\n throw new Error(\"Unable to determine MIME type from file URL\");\n }\n\n const ext = mimeTypeToExtension(mimeType);\n const safeBase = baseName.replace(/\\.+$/, \"\");\n return ext ? `${safeBase}.${ext}` : safeBase;\n}\n\nfunction normalizeDocumentTypeKey(\n rawType?: string | null,\n fallback: string = \"document\",\n) {\n if (!rawType) {\n return fallback;\n }\n\n const trimmed = rawType.trim();\n if (!trimmed) {\n return fallback;\n }\n\n const withUnderscores = trimmed\n .replace(/([a-z0-9])([A-Z])/g, \"$1_$2\")\n .replace(/[\\s-]+/g, \"_\")\n .replace(/[^a-zA-Z0-9_]/g, \"_\")\n .replace(/_+/g, \"_\")\n .replace(/^_+|_+$/g, \"\")\n .toLowerCase();\n\n return withUnderscores || fallback;\n}\n\n// Fonction pour créer une clé unique pour identifier une analyse\nfunction createAnalysisKey(\n sessionId: string,\n files: onUploadFiles,\n documentTypeId: string,\n): string {\n const frontHash = files.front ? files.front.substring(0, 50) : \"no-front\";\n const backHash = files.back ? files.back.substring(0, 50) : \"no-back\";\n return `${sessionId}-${documentTypeId}-${frontHash}-${backHash}`;\n}\n\nasync function launchAnalysis(\n sessionId: string,\n nodeId: string,\n files: onUploadFiles,\n documentTypeId: string | null,\n options: LaunchAnalysisOptions = {},\n) {\n if (!sessionId || !files) {\n throw new Error(\"Invalid parameters for analysis\");\n }\n\n const {\n personPhoto = null,\n save = true,\n incrementAnalysis = true,\n forceUpload = false,\n documentTypeKey = null,\n requiresTwoSides,\n collectOnly = false,\n } = options;\n\n const formData = new FormData();\n formData.append(\"sessionId\", sessionId);\n formData.append(\"nodeId\", nodeId);\n formData.append(\"save\", String(save));\n\n const userInput = getSessionMemoryUserInput(sessionId);\n if (Object.keys(userInput).length > 0) {\n const fullName = `${userInput.firstName || \"\"} ${\n userInput.lastName || \"\"\n }`.trim();\n formData.append(\"name\", fullName || \"Unknown\");\n\n formData.append(\"firstName\", userInput.firstName || \"\");\n formData.append(\"lastName\", userInput.lastName || \"\");\n formData.append(\"birthDate\", userInput.birthDate || \"\");\n formData.append(\"countryCode\", userInput.countryCode || \"\");\n }\n\n const fileTypes: Record<string, string> = {};\n const normalizedDocumentType = normalizeDocumentTypeKey(\n documentTypeKey ?? documentTypeId ?? undefined,\n );\n const hyphenDocumentType = normalizedDocumentType.replace(/_/g, \"-\");\n const appendSide =\n typeof requiresTwoSides === \"boolean\"\n ? requiresTwoSides\n : Boolean(files.back);\n\n if (files.front) {\n const frontBaseName = appendSide\n ? `${normalizedDocumentType}_front`\n : normalizedDocumentType;\n const frontFileName = createFileName(files.front, frontBaseName);\n const frontFile = dataURLtoFile(files.front, frontFileName);\n formData.append(\"files\", frontFile, frontFileName);\n\n fileTypes[frontFileName] = appendSide\n ? `${hyphenDocumentType}-front`\n : hyphenDocumentType;\n }\n\n if (files.back) {\n const backBaseName = `${normalizedDocumentType}_back`;\n const backFileName = createFileName(files.back, backBaseName);\n const backFile = dataURLtoFile(files.back, backFileName);\n formData.append(\"files\", backFile, backFileName);\n\n fileTypes[backFileName] = `${hyphenDocumentType}-back`;\n }\n\n formData.append(\"fileTypes\", JSON.stringify(fileTypes));\n formData.append(\"incrementAnalysis\", String(incrementAnalysis));\n formData.append(\"forceUpload\", String(forceUpload));\n\n if (documentTypeId) {\n formData.append(\"documentTemplateId\", documentTypeId);\n }\n\n if (personPhoto) {\n formData.append(\"personPhoto\", personPhoto);\n }\n\n if (collectOnly) {\n formData.append(\"collectOnly\", \"true\");\n }\n\n console.debug(\"FormData prepared for analysis:\", {\n sessionId,\n documentTypeId,\n files: Object.keys(fileTypes),\n save,\n incrementAnalysis,\n forceUpload,\n collectOnly,\n });\n return formData;\n}\n\nexport async function analyzeFiles(\n sessionId: string,\n nodeId: string,\n files: onUploadFiles,\n documentTypeId: string,\n options: AnalyzeFilesOptions = {},\n): Promise<any> {\n // Validate required parameters\n if (!sessionId) {\n throw new Error(\"Missing sessionId: A valid session ID is required.\");\n }\n if (!files || Object.keys(files).length === 0) {\n throw new Error(\n \"Missing files: At least one file must be provided for analysis.\",\n );\n }\n\n const {\n personPhoto = null,\n save = true,\n incrementAnalysis = true,\n forceUpload = false,\n documentTypeKey = null,\n requiresTwoSides,\n enablePolling = true,\n pollingOptions = {},\n collectOnly = false,\n } = options;\n\n // Pour les retry, on ne force pas l'upload mais on écrase l'analyse existante\n const isRetry = !incrementAnalysis && !forceUpload;\n\n // Créer une clé unique pour cette analyse\n const analysisKey = createAnalysisKey(sessionId, files, documentTypeId);\n\n // Vérifier si une analyse identique est déjà en cours\n if (ongoingAnalyses.has(analysisKey) && !isRetry) {\n return ongoingAnalyses.get(analysisKey);\n }\n\n // Helper function for retry logic with exponential backoff\n async function submitAnalysisWithRetry(\n formData: FormData,\n maxAttempts: number = 3,\n ) {\n let lastError: any;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n const rawClient = apiService.getRawClient();\n\n const response = await rawClient.post(\n `/session/sdk/${sessionId}/analysis`,\n formData,\n {\n timeout: ANALYSIS_TIMEOUT,\n },\n );\n\n return response;\n } catch (error: any) {\n lastError = error;\n\n // Check if it's a network error (likely backend didn't respond in time)\n if (\n error.code === \"ERR_NETWORK\" ||\n error.message?.includes(\"CORS request did not succeed\")\n ) {\n console.warn(\n `⚠️ Network error on attempt ${attempt}: ${error.message}`,\n );\n\n if (attempt < maxAttempts) {\n // Exponential backoff: wait 2s, 4s, 8s...\n const waitTime = Math.pow(2, attempt) * 1000;\n console.log(`⏳ Retrying in ${waitTime / 1000}s...`);\n await new Promise((resolve) => setTimeout(resolve, waitTime));\n continue;\n }\n }\n\n // For other errors, don't retry\n throw error;\n }\n }\n\n throw lastError;\n }\n\n // Créer la promesse d'analyse et la stocker\n const analysisPromise = (async () => {\n try {\n const formData = await launchAnalysis(\n sessionId,\n nodeId,\n files,\n documentTypeId,\n {\n personPhoto,\n save,\n incrementAnalysis: isRetry ? false : incrementAnalysis,\n forceUpload: isRetry ? true : forceUpload,\n documentTypeKey,\n requiresTwoSides,\n collectOnly,\n },\n );\n\n await logDocumentUploaded(sessionId, {\n documentTypeId: documentTypeId || \"unknown\",\n ...(documentTypeKey ? { documentTypeKey } : {}),\n hasFrontImage: !!files.front,\n hasBackImage: !!files.back,\n });\n\n // Submit with automatic retry on network errors\n const response = await submitAnalysisWithRetry(formData);\n\n // Wrap response to match ApiResponse type\n const wrappedResponse = {\n data: response.data,\n success: true,\n status: response.status,\n };\n\n await logAiControlled(\n sessionId,\n {\n analysisResult: response.data.status || \"unknown\",\n documentTypeId: documentTypeId || \"unknown\",\n },\n response.data.clientInfoId || undefined,\n );\n\n if (!wrappedResponse.success) {\n throw new Error(`Analysis failed: ${response.data}`);\n }\n\n // Start polling for analysis progress if enabled\n if (enablePolling) {\n try {\n const pollConfig: PollingOptions = {\n ...pollingOptions,\n };\n\n const pollingResult = await pollAnalysisStatus(sessionId, pollConfig);\n\n return pollingResult;\n } catch (pollError) {\n console.warn(\n \"⚠️ Polling error (analysis may still be processing):\",\n pollError,\n );\n // Don't throw - polling error shouldn't fail the analysis submission\n // The backend is still processing even if polling fails\n return response.data;\n }\n }\n\n return response.data;\n } catch (error) {\n console.error(\"❌ Analysis failed:\", error);\n // Stop any ongoing polling on error\n stopPolling();\n throw error;\n } finally {\n // Nettoyer la promesse de la map une fois terminée\n ongoingAnalyses.delete(analysisKey);\n }\n })();\n\n // Stocker la promesse pour éviter les appels simultanés\n ongoingAnalyses.set(analysisKey, analysisPromise);\n\n return analysisPromise;\n}\n\nexport async function analyzeSelfie(\n sessionId: string,\n selfieFile: SelfieCaptureData,\n selfiePhoto: string,\n): Promise<any> {\n console.log(\"🤳 Starting selfie analysis for session:\", sessionId);\n console.log(\"� File size:\", selfieFile.media.size, \"bytes\");\n\n const formData = new FormData();\n formData.append(\"file\", selfieFile.media, \"selfie.mp4\");\n formData.append(\"photo\", selfiePhoto);\n\n try {\n console.log(\"🚀 Sending selfie to UNISSEY API...\");\n\n const response = await apiService.post(\n `/session/unissey/${sessionId}/analyze`,\n formData,\n {\n timeout: SELFIE_ANALYSIS_TIMEOUT,\n },\n );\n\n console.log(\"✅ Analysis response:\", response);\n\n // Si la réponse API indique un succès, traiter la réponse Unissey\n if (response.success && response.data) {\n console.log(\"🎉 Unissey analysis completed - checking results...\");\n\n // response.data contient directement la réponse Unissey avec status, message, data\n const unisseyResponse = response.data;\n\n // Vérifier si Unissey a répondu avec succès\n if (\n unisseyResponse.status === 200 &&\n (unisseyResponse.message === \"success\" ||\n unisseyResponse.message === \"ok\")\n ) {\n console.log(\"✅ Unissey returned success status\");\n\n // Utiliser les données réelles de la réponse Unissey\n const unisseyData = unisseyResponse.data;\n\n // Vérifier si la comparaison faciale a un niveau de confiance élevé\n const faceComparison = unisseyData.details?.face_comparison;\n const isHighConfidence = faceComparison?.confidence_level === \"high\";\n const isMatch =\n unisseyData.is_match && faceComparison?.result === \"match\";\n\n // is_genuine est basé sur la confiance élevée de la comparaison faciale\n const isGenuine = isHighConfidence && isMatch;\n\n // Log selfie captured in audit trail\n try {\n const analysisResponse = await apiService.get(\n `/session/sdk/${sessionId}`,\n );\n if (analysisResponse.data && analysisResponse.data.analysisId) {\n await logSelfieCaptured(\n sessionId,\n analysisResponse.data.clientInfoId || undefined,\n );\n\n // Log AI control with selfie analysis results\n await logAiControlled(\n sessionId,\n {\n selfieAnalysisResult: isGenuine ? \"genuine\" : \"not_genuine\",\n isMatch: isMatch ? \"match\" : \"no_match\",\n confidenceLevel: faceComparison?.confidence_level || \"unknown\",\n },\n analysisResponse.data.clientInfoId || undefined,\n );\n\n await logStatusModified(\n sessionId,\n {\n selfieAnalysisResult: isGenuine ? \"genuine\" : \"not_genuine\",\n isMatch: isMatch ? \"match\" : \"no_match\",\n confidenceLevel: faceComparison?.confidence_level || \"unknown\",\n },\n analysisResponse.data.clientInfoId || undefined,\n );\n }\n } catch (err) {\n console.error(\"Failed to log selfie capture in audit trail:\", err);\n // Non-blocking error - continue analysis\n }\n\n // Retourner la structure attendue par l'UI\n return {\n success: true,\n data: {\n ...unisseyData,\n is_genuine: isGenuine, // Basé sur confidence_level === \"high\"\n },\n };\n } else {\n console.error(\n \"❌ Unissey returned error status:\",\n unisseyResponse.status,\n unisseyResponse.message,\n );\n throw new Error(\n `Unissey analysis failed: ${\n unisseyResponse.message || \"Unknown Unissey error\"\n }`,\n );\n }\n }\n\n // Gestion des erreurs spécifiques API\n const errorMessage =\n response.data?.message || response.data || \"Unknown error\";\n console.error(\"❌ API call failed:\", errorMessage);\n throw new Error(`Face comparison analysis failed: ${errorMessage}`);\n } catch (error: any) {\n console.error(\"💥 Analysis error:\", error);\n\n // Améliorer le message d'erreur pour l'UI\n if (error.response?.data?.message) {\n throw new Error(`Analysis failed: ${error.response.data.message}`);\n } else if (error.message) {\n throw error; // Garder le message d'erreur original si déjà formaté\n } else {\n throw new Error(\n \"Face comparison analysis failed due to an unexpected error\",\n );\n }\n }\n}\n\nexport async function uploadConvertedIdCardImage(\n sessionId: string,\n file: File,\n): Promise<any> {\n if (!sessionId || !file) {\n throw new Error(\"Invalid parameters for uploading converted ID card image\");\n }\n\n // rename file to converted_id_card.png\n const renamedFile = new File([file], \"converted_id_card.png\", {\n type: file.type,\n });\n\n const formData = new FormData();\n formData.append(\"file\", renamedFile, renamedFile.name);\n\n try {\n console.log(\n `🚀 Uploading converted ID card image for session: ${sessionId}`,\n );\n const response = await apiService.post(\n `/session/sdk/${sessionId}/converted_id_card.png`,\n formData,\n {\n timeout: UPLOAD_TIMEOUT,\n },\n );\n console.log(\"✅ Upload response:\", response);\n return response.data;\n } catch (error) {\n console.error(\"❌ Upload error:\", error);\n throw new Error(\"Failed to upload converted ID card image\");\n }\n}\n\n/**\n * Analyzes a document video captured with Unissey DOC_VIDEO preset.\n * Sends the video file and thumbnail to the backend for document verification.\n *\n * @param sessionId - Unique identifier for the current session\n * @param nodeId - Identifier for the current node in the journey\n * @param videoData - Document video capture data containing media blob and metadata\n * @param thumbnail - Base64 thumbnail extracted from the video\n * @param documentTemplateId - Template ID for the document type being verified\n * @returns Analysis response from the backend\n */\nexport async function analyzeDocumentVideo(\n sessionId: string,\n nodeId: string,\n videoData: DocumentVideoCaptureBySide,\n previews: DocumentVideoPreviewBySide,\n documentTemplateId: string,\n options: {\n documentType?: string;\n requiresTwoSides?: boolean;\n enablePolling?: boolean;\n pollingOptions?: PollingOptions;\n } = {},\n): Promise<any> {\n if (!videoData.recto || !previews.recto) {\n throw new Error(\"Missing recto video or preview\");\n }\n\n const normalizedDocumentType = normalizeDocumentTypeKey(\n options.documentType ?? documentTemplateId ?? undefined,\n );\n const hyphenDocumentType = normalizedDocumentType.replace(/_/g, \"-\");\n const appendSide =\n typeof options.requiresTwoSides === \"boolean\"\n ? options.requiresTwoSides\n : Boolean(videoData.verso || previews.verso);\n\n const frontBaseName = appendSide\n ? `${normalizedDocumentType}_front`\n : normalizedDocumentType;\n const backBaseName = `${normalizedDocumentType}_back`;\n\n const previewFrontFileName = `${frontBaseName}.jpg`;\n const previewFrontFile = dataURLtoFile(previews.recto, previewFrontFileName);\n const previewBackFileName = `${backBaseName}.jpg`;\n const previewBackFile = previews.verso\n ? dataURLtoFile(previews.verso, previewBackFileName)\n : null;\n\n const formData = new FormData();\n\n formData.append(\n \"videoFront\",\n videoData.recto.media,\n \"document_video_recto.mp4\",\n );\n if (videoData.verso) {\n formData.append(\n \"videoBack\",\n videoData.verso.media,\n \"document_video_verso.mp4\",\n );\n }\n\n formData.append(\"previewFront\", previewFrontFile, previewFrontFileName);\n if (previewBackFile) {\n formData.append(\"previewBack\", previewBackFile, previewBackFileName);\n }\n\n const fileTypes: Record<string, string> = {};\n fileTypes[previewFrontFileName] = appendSide\n ? `${hyphenDocumentType}-front`\n : hyphenDocumentType;\n if (previewBackFile) {\n fileTypes[previewBackFileName] = `${hyphenDocumentType}-back`;\n }\n\n formData.append(\"fileTypes\", JSON.stringify(fileTypes));\n formData.append(\"sessionId\", sessionId);\n formData.append(\"nodeId\", nodeId);\n formData.append(\"documentTemplateId\", documentTemplateId);\n formData.append(\"documentType\", options.documentType || \"\");\n formData.append(\"requiresTwoSides\", String(appendSide));\n formData.append(\"save\", \"true\");\n\n const { enablePolling = true, pollingOptions = {} } = options;\n\n try {\n console.log(\"🚀 Sending document video to document-video API...\");\n const response = await apiService.post(\n `/session/sdk/${sessionId}/document-video`,\n formData,\n { timeout: ANALYSIS_TIMEOUT },\n );\n\n if (enablePolling) {\n try {\n const pollConfig: PollingOptions = {\n ...pollingOptions,\n defaultValue: {\n sessionId,\n status: \"processing\",\n progress: 50,\n currentStep: \"processing\",\n message: \"Document analysis in progress\",\n analysisId: null,\n startedAt: new Date().toISOString(),\n completedAt: null,\n error: null,\n },\n };\n const pollingResult = await pollAnalysisStatus(sessionId, pollConfig);\n return pollingResult;\n } catch (pollError) {\n console.warn(\n \"⚠️ Polling error (document-video may still be processing):\",\n pollError,\n );\n }\n }\n\n if (response?.success || response?.data?.success) {\n return response.data ?? response;\n }\n\n const errorMessage = response?.data?.message || \"Unknown error\";\n throw new Error(`Document video analysis failed: ${errorMessage}`);\n } catch (error: any) {\n stopPolling();\n if (error.response?.data?.message) {\n throw new Error(`Analysis failed: ${error.response.data.message}`);\n }\n if (error.message) {\n throw error;\n }\n throw new Error(\n \"Document video analysis failed due to an unexpected error\",\n );\n }\n}\n"],"names":["getMimeTypeFromDataURL","mimeTypeToExtension","__awaiter","getSessionMemoryUserInput","dataURLtoFile","apiService","logDocumentUploaded","logAiControlled","__assign","pollAnalysisStatus","stopPolling","logSelfieCaptured","logStatusModified"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"analysis.js","sources":["../../../../src/services/analysis.ts"],"sourcesContent":["import type { onUploadFiles } from \"../types/uploadFiles\";\nimport { dataURLtoFile, getMimeTypeFromDataURL } from \"./utils\";\nimport { mimeTypeToExtension } from \"../utils/mimeTypes\";\nimport { apiService } from \"./api\";\nimport type { SelfieCaptureData } from \"../types/selfie\";\nimport type {\n DocumentVideoCaptureBySide,\n DocumentVideoPreviewBySide,\n} from \"../types/documentVideo\";\nimport { getSessionMemoryUserInput } from \"./sessionMemoryStore\";\nimport {\n logDocumentUploaded,\n logSelfieCaptured,\n logAiControlled,\n logStatusModified,\n} from \"./auditTrailService\";\nimport { pollAnalysisStatus, stopPolling } from \"./pollingService\";\nimport type { PollingOptions } from \"./pollingService\";\n\n// Timeout configurations (in milliseconds)\nconst ANALYSIS_TIMEOUT = 600000; // 10 minutes for document analysis (increased for large files + ML processing)\nconst SELFIE_ANALYSIS_TIMEOUT = 600000; // 10 minutes for selfie analysis\nconst UPLOAD_TIMEOUT = 300000; // 5 minutes for file uploads\n\n// Map pour suivre les analyses en cours et éviter les doublons\nconst ongoingAnalyses = new Map<string, Promise<any>>();\n\nexport interface AnalyzeFilesOptions {\n personPhoto?: string | null;\n save?: boolean;\n incrementAnalysis?: boolean;\n forceUpload?: boolean;\n documentTypeKey?: string | null;\n requiresTwoSides?: boolean;\n enablePolling?: boolean; // Enable polling for analysis progress (default: true)\n pollingOptions?: PollingOptions; // Custom polling configuration\n collectOnly?: boolean; // Bypass AI verification — document is collected as-is\n}\n\ninterface LaunchAnalysisOptions extends AnalyzeFilesOptions {}\n\nfunction createFileName(fileURL: string, baseName: string = \"file\") {\n const mimeType = getMimeTypeFromDataURL(fileURL);\n if (!mimeType) {\n throw new Error(\"Unable to determine MIME type from file URL\");\n }\n\n const ext = mimeTypeToExtension(mimeType);\n const safeBase = baseName.replace(/\\.+$/, \"\");\n return ext ? `${safeBase}.${ext}` : safeBase;\n}\n\nfunction normalizeDocumentTypeKey(\n rawType?: string | null,\n fallback: string = \"document\",\n) {\n if (!rawType) {\n return fallback;\n }\n\n const trimmed = rawType.trim();\n if (!trimmed) {\n return fallback;\n }\n\n const withUnderscores = trimmed\n .replace(/([a-z0-9])([A-Z])/g, \"$1_$2\")\n .replace(/[\\s-]+/g, \"_\")\n .replace(/[^a-zA-Z0-9_]/g, \"_\")\n .replace(/_+/g, \"_\")\n .replace(/^_+|_+$/g, \"\")\n .toLowerCase();\n\n return withUnderscores || fallback;\n}\n\n// Fonction pour créer une clé unique pour identifier une analyse\nfunction createAnalysisKey(\n sessionId: string,\n files: onUploadFiles,\n documentTypeId: string,\n): string {\n const frontHash = files.front ? files.front.substring(0, 50) : \"no-front\";\n const backHash = files.back ? files.back.substring(0, 50) : \"no-back\";\n return `${sessionId}-${documentTypeId}-${frontHash}-${backHash}`;\n}\n\nasync function launchAnalysis(\n sessionId: string,\n nodeId: string,\n files: onUploadFiles,\n documentTypeId: string | null,\n options: LaunchAnalysisOptions = {},\n) {\n if (!sessionId || !files) {\n throw new Error(\"Invalid parameters for analysis\");\n }\n\n const {\n personPhoto = null,\n save = true,\n incrementAnalysis = true,\n forceUpload = false,\n documentTypeKey = null,\n requiresTwoSides,\n collectOnly = false,\n } = options;\n\n const formData = new FormData();\n formData.append(\"sessionId\", sessionId);\n formData.append(\"nodeId\", nodeId);\n formData.append(\"save\", String(save));\n\n const userInput = getSessionMemoryUserInput(sessionId);\n if (Object.keys(userInput).length > 0) {\n const fullName = `${userInput.firstName || \"\"} ${\n userInput.lastName || \"\"\n }`.trim();\n formData.append(\"name\", fullName || \"Unknown\");\n\n formData.append(\"firstName\", userInput.firstName || \"\");\n formData.append(\"lastName\", userInput.lastName || \"\");\n formData.append(\"birthDate\", userInput.birthDate || \"\");\n formData.append(\"countryCode\", userInput.countryCode || \"\");\n }\n\n const fileTypes: Record<string, string> = {};\n const normalizedDocumentType = normalizeDocumentTypeKey(\n documentTypeKey ?? documentTypeId ?? undefined,\n );\n const hyphenDocumentType = normalizedDocumentType.replace(/_/g, \"-\");\n const appendSide =\n typeof requiresTwoSides === \"boolean\"\n ? requiresTwoSides\n : Boolean(files.back);\n\n if (files.front) {\n const frontBaseName = appendSide\n ? `${normalizedDocumentType}_front`\n : normalizedDocumentType;\n const frontFileName = createFileName(files.front, frontBaseName);\n const frontFile = dataURLtoFile(files.front, frontFileName);\n formData.append(\"files\", frontFile, frontFileName);\n\n fileTypes[frontFileName] = appendSide\n ? `${hyphenDocumentType}-front`\n : hyphenDocumentType;\n }\n\n if (files.back) {\n const backBaseName = `${normalizedDocumentType}_back`;\n const backFileName = createFileName(files.back, backBaseName);\n const backFile = dataURLtoFile(files.back, backFileName);\n formData.append(\"files\", backFile, backFileName);\n\n fileTypes[backFileName] = `${hyphenDocumentType}-back`;\n }\n\n formData.append(\"fileTypes\", JSON.stringify(fileTypes));\n formData.append(\"incrementAnalysis\", String(incrementAnalysis));\n formData.append(\"forceUpload\", String(forceUpload));\n\n if (documentTypeId) {\n formData.append(\"documentTemplateId\", documentTypeId);\n }\n\n if (personPhoto) {\n formData.append(\"personPhoto\", personPhoto);\n }\n\n if (collectOnly) {\n formData.append(\"collectOnly\", \"true\");\n }\n\n console.debug(\"FormData prepared for analysis:\", {\n sessionId,\n documentTypeId,\n files: Object.keys(fileTypes),\n save,\n incrementAnalysis,\n forceUpload,\n collectOnly,\n });\n return formData;\n}\n\nexport async function analyzeFiles(\n sessionId: string,\n nodeId: string,\n files: onUploadFiles,\n documentTypeId: string,\n options: AnalyzeFilesOptions = {},\n): Promise<any> {\n // Validate required parameters\n if (!sessionId) {\n throw new Error(\"Missing sessionId: A valid session ID is required.\");\n }\n if (!files || Object.keys(files).length === 0) {\n throw new Error(\n \"Missing files: At least one file must be provided for analysis.\",\n );\n }\n\n const {\n personPhoto = null,\n save = true,\n incrementAnalysis = true,\n forceUpload = false,\n documentTypeKey = null,\n requiresTwoSides,\n enablePolling = true,\n pollingOptions = {},\n collectOnly = false,\n } = options;\n\n // Pour les retry, on ne force pas l'upload mais on écrase l'analyse existante\n const isRetry = !incrementAnalysis && !forceUpload;\n\n // Créer une clé unique pour cette analyse\n const analysisKey = createAnalysisKey(sessionId, files, documentTypeId);\n\n // Vérifier si une analyse identique est déjà en cours\n if (ongoingAnalyses.has(analysisKey) && !isRetry) {\n return ongoingAnalyses.get(analysisKey);\n }\n\n // Helper function for retry logic with exponential backoff\n async function submitAnalysisWithRetry(\n formData: FormData,\n maxAttempts: number = 3,\n ) {\n let lastError: any;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n const rawClient = apiService.getRawClient();\n\n const response = await rawClient.post(\n `/session/sdk/${sessionId}/analysis`,\n formData,\n {\n timeout: ANALYSIS_TIMEOUT,\n },\n );\n\n return response;\n } catch (error: any) {\n lastError = error;\n\n // Check if it's a network error (likely backend didn't respond in time)\n if (\n error.code === \"ERR_NETWORK\" ||\n error.message?.includes(\"CORS request did not succeed\")\n ) {\n console.warn(\n `⚠️ Network error on attempt ${attempt}: ${error.message}`,\n );\n\n if (attempt < maxAttempts) {\n // Exponential backoff: wait 2s, 4s, 8s...\n const waitTime = Math.pow(2, attempt) * 1000;\n console.log(`⏳ Retrying in ${waitTime / 1000}s...`);\n await new Promise((resolve) => setTimeout(resolve, waitTime));\n continue;\n }\n }\n\n // For other errors, don't retry\n throw error;\n }\n }\n\n throw lastError;\n }\n\n // Créer la promesse d'analyse et la stocker\n const analysisPromise = (async () => {\n try {\n const formData = await launchAnalysis(\n sessionId,\n nodeId,\n files,\n documentTypeId,\n {\n personPhoto,\n save,\n incrementAnalysis: isRetry ? false : incrementAnalysis,\n forceUpload: isRetry ? true : forceUpload,\n documentTypeKey,\n requiresTwoSides,\n collectOnly,\n },\n );\n\n await logDocumentUploaded(sessionId, {\n documentTypeId: documentTypeId || \"unknown\",\n ...(documentTypeKey ? { documentTypeKey } : {}),\n hasFrontImage: !!files.front,\n hasBackImage: !!files.back,\n });\n\n // Submit with automatic retry on network errors\n const response = await submitAnalysisWithRetry(formData);\n\n // Wrap response to match ApiResponse type\n const wrappedResponse = {\n data: response.data,\n success: true,\n status: response.status,\n };\n\n await logAiControlled(\n sessionId,\n {\n analysisResult: response.data.status || \"unknown\",\n documentTypeId: documentTypeId || \"unknown\",\n },\n response.data.clientInfoId || undefined,\n );\n\n if (!wrappedResponse.success) {\n throw new Error(`Analysis failed: ${response.data}`);\n }\n\n // Start polling for analysis progress if enabled\n if (enablePolling) {\n try {\n const pollConfig: PollingOptions = {\n ...pollingOptions,\n };\n\n const pollingResult = await pollAnalysisStatus(sessionId, pollConfig);\n\n return pollingResult;\n } catch (pollError) {\n console.warn(\n \"⚠️ Polling error (analysis may still be processing):\",\n pollError,\n );\n // Don't throw - polling error shouldn't fail the analysis submission\n // The backend is still processing even if polling fails\n return response.data;\n }\n }\n\n return response.data;\n } catch (error) {\n console.error(\"❌ Analysis failed:\", error);\n // Stop any ongoing polling on error\n stopPolling();\n throw error;\n } finally {\n // Nettoyer la promesse de la map une fois terminée\n ongoingAnalyses.delete(analysisKey);\n }\n })();\n\n // Stocker la promesse pour éviter les appels simultanés\n ongoingAnalyses.set(analysisKey, analysisPromise);\n\n return analysisPromise;\n}\n\nexport async function analyzeSelfie(\n sessionId: string,\n selfieFile: SelfieCaptureData,\n selfiePhoto: string,\n nodeId?: string,\n): Promise<any> {\n console.log(\"🤳 Starting selfie analysis for session:\", sessionId);\n console.log(\"� File size:\", selfieFile.media.size, \"bytes\");\n\n const formData = new FormData();\n formData.append(\"file\", selfieFile.media, \"selfie.mp4\");\n formData.append(\"photo\", selfiePhoto);\n if (nodeId) formData.append(\"nodeId\", nodeId);\n\n try {\n console.log(\"🚀 Sending selfie to UNISSEY API...\");\n\n const response = await apiService.post(\n `/session/unissey/${sessionId}/analyze`,\n formData,\n {\n timeout: SELFIE_ANALYSIS_TIMEOUT,\n },\n );\n\n console.log(\"✅ Analysis response:\", response);\n\n // Si la réponse API indique un succès, traiter la réponse Unissey\n if (response.success && response.data) {\n console.log(\"🎉 Unissey analysis completed - checking results...\");\n\n // response.data contient directement la réponse Unissey avec status, message, data\n const unisseyResponse = response.data;\n\n // Vérifier si Unissey a répondu avec succès\n if (\n unisseyResponse.status === 200 &&\n (unisseyResponse.message === \"success\" ||\n unisseyResponse.message === \"ok\")\n ) {\n console.log(\"✅ Unissey returned success status\");\n\n // Utiliser les données réelles de la réponse Unissey\n const unisseyData = unisseyResponse.data;\n\n // Vérifier si la comparaison faciale a un niveau de confiance élevé\n const faceComparison = unisseyData.details?.face_comparison;\n const isHighConfidence = faceComparison?.confidence_level === \"high\";\n const isMatch =\n unisseyData.is_match && faceComparison?.result === \"match\";\n\n // is_genuine est basé sur la confiance élevée de la comparaison faciale\n const isGenuine = isHighConfidence && isMatch;\n\n // Log selfie captured in audit trail\n try {\n const analysisResponse = await apiService.get(\n `/session/sdk/${sessionId}`,\n );\n if (analysisResponse.data && analysisResponse.data.analysisId) {\n await logSelfieCaptured(\n sessionId,\n analysisResponse.data.clientInfoId || undefined,\n );\n\n // Log AI control with selfie analysis results\n await logAiControlled(\n sessionId,\n {\n selfieAnalysisResult: isGenuine ? \"genuine\" : \"not_genuine\",\n isMatch: isMatch ? \"match\" : \"no_match\",\n confidenceLevel: faceComparison?.confidence_level || \"unknown\",\n },\n analysisResponse.data.clientInfoId || undefined,\n );\n\n await logStatusModified(\n sessionId,\n {\n selfieAnalysisResult: isGenuine ? \"genuine\" : \"not_genuine\",\n isMatch: isMatch ? \"match\" : \"no_match\",\n confidenceLevel: faceComparison?.confidence_level || \"unknown\",\n },\n analysisResponse.data.clientInfoId || undefined,\n );\n }\n } catch (err) {\n console.error(\"Failed to log selfie capture in audit trail:\", err);\n // Non-blocking error - continue analysis\n }\n\n // Retourner la structure attendue par l'UI\n return {\n success: true,\n data: {\n ...unisseyData,\n is_genuine: isGenuine, // Basé sur confidence_level === \"high\"\n },\n };\n } else {\n console.error(\n \"❌ Unissey returned error status:\",\n unisseyResponse.status,\n unisseyResponse.message,\n );\n throw new Error(\n `Unissey analysis failed: ${\n unisseyResponse.message || \"Unknown Unissey error\"\n }`,\n );\n }\n }\n\n // Gestion des erreurs spécifiques API\n const errorMessage =\n response.data?.message || response.data || \"Unknown error\";\n console.error(\"❌ API call failed:\", errorMessage);\n throw new Error(`Face comparison analysis failed: ${errorMessage}`);\n } catch (error: any) {\n console.error(\"💥 Analysis error:\", error);\n\n // Améliorer le message d'erreur pour l'UI\n if (error.response?.data?.message) {\n throw new Error(`Analysis failed: ${error.response.data.message}`);\n } else if (error.message) {\n throw error; // Garder le message d'erreur original si déjà formaté\n } else {\n throw new Error(\n \"Face comparison analysis failed due to an unexpected error\",\n );\n }\n }\n}\n\nexport async function uploadConvertedIdCardImage(\n sessionId: string,\n file: File,\n): Promise<any> {\n if (!sessionId || !file) {\n throw new Error(\"Invalid parameters for uploading converted ID card image\");\n }\n\n // rename file to converted_id_card.png\n const renamedFile = new File([file], \"converted_id_card.png\", {\n type: file.type,\n });\n\n const formData = new FormData();\n formData.append(\"file\", renamedFile, renamedFile.name);\n\n try {\n console.log(\n `🚀 Uploading converted ID card image for session: ${sessionId}`,\n );\n const response = await apiService.post(\n `/session/sdk/${sessionId}/converted_id_card.png`,\n formData,\n {\n timeout: UPLOAD_TIMEOUT,\n },\n );\n console.log(\"✅ Upload response:\", response);\n return response.data;\n } catch (error) {\n console.error(\"❌ Upload error:\", error);\n throw new Error(\"Failed to upload converted ID card image\");\n }\n}\n\n/**\n * Analyzes a document video captured with Unissey DOC_VIDEO preset.\n * Sends the video file and thumbnail to the backend for document verification.\n *\n * @param sessionId - Unique identifier for the current session\n * @param nodeId - Identifier for the current node in the journey\n * @param videoData - Document video capture data containing media blob and metadata\n * @param thumbnail - Base64 thumbnail extracted from the video\n * @param documentTemplateId - Template ID for the document type being verified\n * @returns Analysis response from the backend\n */\nexport async function analyzeDocumentVideo(\n sessionId: string,\n nodeId: string,\n videoData: DocumentVideoCaptureBySide,\n previews: DocumentVideoPreviewBySide,\n documentTemplateId: string,\n options: {\n documentType?: string;\n requiresTwoSides?: boolean;\n enablePolling?: boolean;\n pollingOptions?: PollingOptions;\n } = {},\n): Promise<any> {\n if (!videoData.recto || !previews.recto) {\n throw new Error(\"Missing recto video or preview\");\n }\n\n const normalizedDocumentType = normalizeDocumentTypeKey(\n options.documentType ?? documentTemplateId ?? undefined,\n );\n const hyphenDocumentType = normalizedDocumentType.replace(/_/g, \"-\");\n const appendSide =\n typeof options.requiresTwoSides === \"boolean\"\n ? options.requiresTwoSides\n : Boolean(videoData.verso || previews.verso);\n\n const frontBaseName = appendSide\n ? `${normalizedDocumentType}_front`\n : normalizedDocumentType;\n const backBaseName = `${normalizedDocumentType}_back`;\n\n const previewFrontFileName = `${frontBaseName}.jpg`;\n const previewFrontFile = dataURLtoFile(previews.recto, previewFrontFileName);\n const previewBackFileName = `${backBaseName}.jpg`;\n const previewBackFile = previews.verso\n ? dataURLtoFile(previews.verso, previewBackFileName)\n : null;\n\n const formData = new FormData();\n\n formData.append(\n \"videoFront\",\n videoData.recto.media,\n \"document_video_recto.mp4\",\n );\n if (videoData.verso) {\n formData.append(\n \"videoBack\",\n videoData.verso.media,\n \"document_video_verso.mp4\",\n );\n }\n\n formData.append(\"previewFront\", previewFrontFile, previewFrontFileName);\n if (previewBackFile) {\n formData.append(\"previewBack\", previewBackFile, previewBackFileName);\n }\n\n const fileTypes: Record<string, string> = {};\n fileTypes[previewFrontFileName] = appendSide\n ? `${hyphenDocumentType}-front`\n : hyphenDocumentType;\n if (previewBackFile) {\n fileTypes[previewBackFileName] = `${hyphenDocumentType}-back`;\n }\n\n formData.append(\"fileTypes\", JSON.stringify(fileTypes));\n formData.append(\"sessionId\", sessionId);\n formData.append(\"nodeId\", nodeId);\n formData.append(\"documentTemplateId\", documentTemplateId);\n formData.append(\"documentType\", options.documentType || \"\");\n formData.append(\"requiresTwoSides\", String(appendSide));\n formData.append(\"save\", \"true\");\n\n const { enablePolling = true, pollingOptions = {} } = options;\n\n try {\n console.log(\"🚀 Sending document video to document-video API...\");\n const response = await apiService.post(\n `/session/sdk/${sessionId}/document-video`,\n formData,\n { timeout: ANALYSIS_TIMEOUT },\n );\n\n if (enablePolling) {\n try {\n const pollConfig: PollingOptions = {\n ...pollingOptions,\n defaultValue: {\n sessionId,\n status: \"processing\",\n progress: 50,\n currentStep: \"processing\",\n message: \"Document analysis in progress\",\n analysisId: null,\n startedAt: new Date().toISOString(),\n completedAt: null,\n error: null,\n },\n };\n const pollingResult = await pollAnalysisStatus(sessionId, pollConfig);\n return pollingResult;\n } catch (pollError) {\n console.warn(\n \"⚠️ Polling error (document-video may still be processing):\",\n pollError,\n );\n }\n }\n\n if (response?.success || response?.data?.success) {\n return response.data ?? response;\n }\n\n const errorMessage = response?.data?.message || \"Unknown error\";\n throw new Error(`Document video analysis failed: ${errorMessage}`);\n } catch (error: any) {\n stopPolling();\n if (error.response?.data?.message) {\n throw new Error(`Analysis failed: ${error.response.data.message}`);\n }\n if (error.message) {\n throw error;\n }\n throw new Error(\n \"Document video analysis failed due to an unexpected error\",\n );\n }\n}\n"],"names":["getMimeTypeFromDataURL","mimeTypeToExtension","__awaiter","getSessionMemoryUserInput","dataURLtoFile","apiService","logDocumentUploaded","logAiControlled","__assign","pollAnalysisStatus","stopPolling","logSelfieCaptured","logStatusModified"],"mappings":"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"}
|
|
@@ -103,6 +103,16 @@ var skipNfcWithReason = function (sessionId, payload) { return tslib_es6.__await
|
|
|
103
103
|
}
|
|
104
104
|
});
|
|
105
105
|
}); };
|
|
106
|
+
var reportSelfieFailure = function (sessionId, payload) { return tslib_es6.__awaiter(void 0, void 0, void 0, function () {
|
|
107
|
+
return tslib_es6.__generator(this, function (_a) {
|
|
108
|
+
switch (_a.label) {
|
|
109
|
+
case 0: return [4 /*yield*/, api.apiService.post("/session/sdk/".concat(sessionId, "/selfie-failed"), payload)];
|
|
110
|
+
case 1:
|
|
111
|
+
_a.sent();
|
|
112
|
+
return [2 /*return*/];
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
}); };
|
|
106
116
|
/**
|
|
107
117
|
* Resets a terminal NFC failure before the user starts again with another
|
|
108
118
|
* document. The backend keeps completed scans immutable and treats this call
|
|
@@ -466,6 +476,7 @@ exports.getOrderedJourneySteps = getOrderedJourneySteps;
|
|
|
466
476
|
exports.getRunPrefillData = getRunPrefillData;
|
|
467
477
|
exports.isSessionExpired = isSessionExpired;
|
|
468
478
|
exports.reconstructHistoryToStep = reconstructHistoryToStep;
|
|
479
|
+
exports.reportSelfieFailure = reportSelfieFailure;
|
|
469
480
|
exports.resetNfcScan = resetNfcScan;
|
|
470
481
|
exports.sendClientInfo = sendClientInfo;
|
|
471
482
|
exports.skipNfcWithReason = skipNfcWithReason;
|