datakeen-session-react 1.1.140-rc.61 → 1.1.140-rc.63

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.
@@ -36,12 +36,22 @@ var SelfieRecorder = function (_a) {
36
36
  setRecordingState(state);
37
37
  }, []);
38
38
  var resetCaptureControls = React.useCallback(function () {
39
- if (recordingStateRef.current === "processing")
40
- return;
41
39
  capturedThumbnailRef.current = null;
42
40
  updateRecordingState("idle");
43
41
  setDisableButton(false);
44
42
  }, [updateRecordingState]);
43
+ // Réinitialisation déclenchée par le polling de statut Unissey.
44
+ // Pendant une capture en cours (preparing/recording/processing), les transitions
45
+ // internes du cycle d'enregistrement (starting → running → ready) ne doivent PAS
46
+ // réactiver le bouton. Seule une perte réelle de la caméra (passage par
47
+ // "no-session") justifie un reset pendant la capture (scénario retry caméra).
48
+ var resetCaptureControlsFromPolling = React.useCallback(function (previousStatus) {
49
+ if (recordingStateRef.current !== "idle" &&
50
+ previousStatus !== "no-session") {
51
+ return;
52
+ }
53
+ resetCaptureControls();
54
+ }, [resetCaptureControls]);
45
55
  React.useEffect(function () {
46
56
  document.body.classList.add("recording-selfie");
47
57
  var cleanupObserver = videoElementStyles.setupVideoElementsObserver();
@@ -146,12 +156,12 @@ var SelfieRecorder = function (_a) {
146
156
  if (status !== previousStatus) {
147
157
  lastRecorderStatusRef.current = status;
148
158
  if (isReady && previousStatus !== undefined && !wasReady) {
149
- resetCaptureControls();
159
+ resetCaptureControlsFromPolling(previousStatus);
150
160
  }
151
161
  }
152
162
  }, 500);
153
163
  return function () { return clearInterval(interval); };
154
- }, [resetCaptureControls]);
164
+ }, [resetCaptureControlsFromPolling]);
155
165
  var handleRecorderReady = function () {
156
166
  setRecorderReady(true);
157
167
  resetCaptureControls();
@@ -199,7 +209,7 @@ var SelfieRecorder = function (_a) {
199
209
  _b.zIndex = isMobile ? 50 : "auto",
200
210
  _b.height = "100%",
201
211
  _b.width = "100%",
202
- _b), children: [jsxRuntime.jsxs("div", { className: "p-4 text-center bg-white shrink-0", children: [jsxRuntime.jsx(Title.default, { className: "text-lg md:text-xl mb-1", children: t("selfie.recorder.title") }), jsxRuntime.jsx(Subtitle.default, { className: "text-xs text-gray-600 md:text-sm", children: t("selfie.recorder.subtitle") })] }), jsxRuntime.jsx("div", { className: "video-container flex-1 relative overflow-hidden", children: jsxRuntime.jsx(sdkReact.VideoRecorder, tslib_es6.__assign({ ref: recorderRef, preset: sdkReact.AcquisitionPreset.SELFIE_OPTIMIZED, hideCaptureBtn: true, faceChecker: (typeof window !== 'undefined' && window.__E2E_DISABLE_FACE_CHECKER__) ? 'disabled' : 'enabled', disableDebugMode: true, onRecorderReady: handleRecorderReady, onRecordInterrupted: handleRecordInterrupted, onRecordCompleted: handleRecordCompleted, onRecord: recordStarting, style: { width: "100%", height: "100%" }, className: "video-recorder-no-radius w-full h-full" }, (selfieCaptureUtils.isIOS() && {
212
+ _b), children: [jsxRuntime.jsxs("div", { className: "p-4 text-center bg-white shrink-0", children: [jsxRuntime.jsx(Title.default, { className: "text-lg md:text-xl mb-1", children: t("selfie.recorder.title") }), jsxRuntime.jsx(Subtitle.default, { className: "text-xs text-gray-600 md:text-sm", children: t("selfie.recorder.subtitle") })] }), jsxRuntime.jsx("div", { className: "video-container flex-1 relative overflow-hidden", children: jsxRuntime.jsx(sdkReact.VideoRecorder, tslib_es6.__assign({ ref: recorderRef, preset: sdkReact.AcquisitionPreset.SELFIE_OPTIMIZED, hideCaptureBtn: true, faceChecker: (typeof window !== 'undefined' && window.__E2E_DISABLE_FACE_CHECKER__) ? 'disabled' : 'enabled', disableDebugMode: true, onRecorderReady: handleRecorderReady, onRecordInterrupted: handleRecordInterrupted, onRecordCompleted: handleRecordCompleted, style: { width: "100%", height: "100%" }, className: "video-recorder-no-radius w-full h-full" }, (selfieCaptureUtils.isIOS() && {
203
213
  "data-playsinline": "true",
204
214
  "data-autoplay": "true",
205
215
  "data-muted": "true"
@@ -1 +1 @@
1
- {"version":3,"file":"SelfieRecorder.js","sources":["../../../../../../src/components/selfie/selfie-flow/SelfieRecorder.tsx"],"sourcesContent":["import {\n useCallback,\n useRef,\n useState,\n useEffect,\n type ElementRef,\n} from \"react\";\nimport { AcquisitionPreset, VideoRecorder } from \"@unissey-web/sdk-react\";\nimport Button from \"../../ui/Button\";\nimport Title from \"../../ui/Title\";\nimport Subtitle from \"../../ui/Subtitle\";\nimport useVideoRecorderStyles from \"../hooks/useVideoRecorderStyles\";\nimport { setupVideoElementsObserver } from \"../utils/videoElementStyles\";\nimport { delay, isIOS, waitForVideoFrame, getRecorderVideoElement } from \"../utils/selfieCaptureUtils\";\nimport { useLiveFrameCapture } from \"../hooks/useLiveFrameCapture\";\nimport { useI18n } from \"../../../hooks/useI18n\";\nimport useIsMobile from \"../../../hooks/useIsMobile\";\nimport { getUnisseyStrings } from \"../utils/unisseyStrings\";\n\ntype RecordingState = \"idle\" | \"preparing\" | \"recording\" | \"processing\";\n\ninterface SelfieRecorderProps {\n handleSelfie: (e: Event) => void;\n onBeginCapture?: () => void;\n isCapturing?: boolean;\n btnBg?: string;\n btnText?: string;\n}\n\ntype VideoRecorderElement = ElementRef<typeof VideoRecorder>;\n\nconst SelfieRecorder = ({\n handleSelfie,\n onBeginCapture = () => { },\n btnBg,\n btnText,\n}: SelfieRecorderProps) => {\n const { t } = useI18n();\n const isMobile = useIsMobile(768);\n const recorderRef = useRef<VideoRecorderElement | null>(null);\n const [disableButton, setDisableButton] = useState(false);\n const [recorderReady, setRecorderReady] = useState(false);\n const [recordingState, setRecordingState] = useState<RecordingState>(\"idle\");\n const recordingStateRef = useRef<RecordingState>(\"idle\");\n const lastRecorderStatusRef = useRef<string | undefined>();\n const capturedThumbnailRef = useRef<string | null>(null);\n const { captureFrame, cleanup } = useLiveFrameCapture();\n\n useVideoRecorderStyles(btnBg, btnText);\n\n const updateRecordingState = useCallback((state: RecordingState) => {\n recordingStateRef.current = state;\n setRecordingState(state);\n }, []);\n\n const resetCaptureControls = useCallback(() => {\n if (recordingStateRef.current === \"processing\") return;\n capturedThumbnailRef.current = null;\n updateRecordingState(\"idle\");\n setDisableButton(false);\n }, [updateRecordingState]);\n\n useEffect(() => {\n document.body.classList.add(\"recording-selfie\");\n const cleanupObserver = setupVideoElementsObserver();\n\n // iOS-specific fix: Add required attributes to video elements after mount\n if (isIOS()) {\n const addIOSVideoAttributes = () => {\n const videoRecorders = document.querySelectorAll(\"uni-video-recorder\");\n videoRecorders.forEach((recorder) => {\n // Try to access shadow DOM and video elements\n try {\n const shadowRoot = recorder.shadowRoot;\n if (shadowRoot) {\n const videoElements = shadowRoot.querySelectorAll(\"video\");\n videoElements.forEach((video: HTMLVideoElement) => {\n video.setAttribute(\"playsinline\", \"true\");\n video.setAttribute(\"autoplay\", \"true\");\n video.setAttribute(\"muted\", \"true\");\n // Ensure video plays inline and autoplays\n video.playsInline = true;\n video.autoplay = true;\n video.muted = true;\n });\n }\n } catch (error) {\n console.log(\"Could not access shadow DOM:\", error);\n }\n\n // Also set attributes on the component itself\n recorder.setAttribute(\"playsinline\", \"true\");\n recorder.setAttribute(\"autoplay\", \"true\");\n recorder.setAttribute(\"muted\", \"true\");\n });\n };\n\n // Apply immediately and also after a delay to catch dynamically created elements\n addIOSVideoAttributes();\n const iosTimeout = setTimeout(addIOSVideoAttributes, 500);\n const iosInterval = setInterval(addIOSVideoAttributes, 1000);\n\n return () => {\n document.body.classList.remove(\"recording-selfie\");\n cleanupObserver();\n cleanup();\n clearTimeout(iosTimeout);\n clearInterval(iosInterval);\n };\n }\n\n return () => {\n document.body.classList.remove(\"recording-selfie\");\n cleanupObserver();\n cleanup();\n };\n }, [cleanup]);\n\n const recordStarting = () => {\n if (!recorderReady || recordingState !== \"idle\") return;\n onBeginCapture();\n updateRecordingState(\"preparing\");\n setDisableButton(true);\n\n const triggerCapture = async () => {\n try {\n await waitForVideoFrame(recorderRef.current);\n await delay(200);\n updateRecordingState(\"recording\");\n\n // Capture a frame from the live video during recording (after a short delay)\n setTimeout(() => {\n const videoElement = getRecorderVideoElement(recorderRef.current);\n if (videoElement) {\n const thumbnail = captureFrame(videoElement);\n capturedThumbnailRef.current = thumbnail;\n }\n }, 1000); // Capture frame 1 second into recording\n\n recorderRef.current?.capture();\n } catch (error) {\n console.error(\"SelfieRecorder: failed to capture frame\", error);\n updateRecordingState(\"idle\");\n setDisableButton(false);\n }\n };\n\n void triggerCapture();\n };\n\n useEffect(() => {\n const interval = setInterval(() => {\n const status = recorderRef.current?.sdkJsStatus;\n const isReady = status === \"ready\" || status === \"running\";\n setRecorderReady((prev) => (prev !== isReady ? isReady : prev));\n\n const previousStatus = lastRecorderStatusRef.current;\n const wasReady = previousStatus === \"ready\" || previousStatus === \"running\";\n if (status !== previousStatus) {\n lastRecorderStatusRef.current = status;\n if (isReady && previousStatus !== undefined && !wasReady) {\n resetCaptureControls();\n }\n }\n }, 500);\n return () => clearInterval(interval);\n }, [resetCaptureControls]);\n\n const handleRecorderReady = () => {\n setRecorderReady(true);\n resetCaptureControls();\n };\n\n const handleRecordInterrupted = () => {\n resetCaptureControls();\n };\n\n const handleRecordCompleted = (e: Event) => {\n const customEvent = e as CustomEvent<{ media?: Blob; metadata?: string }>;\n if (!customEvent.detail?.media || customEvent.detail.media.size === 0) {\n console.error(\"❌ No valid media captured\");\n\n // iOS-specific debugging\n if (isIOS()) {\n console.log(\"🍎 iOS detected - checking video elements for proper attributes\");\n const videoRecorders = document.querySelectorAll(\"uni-video-recorder\");\n videoRecorders.forEach((recorder, index) => {\n console.log(`VideoRecorder ${index}:`, {\n playsinline: recorder.getAttribute(\"playsinline\"),\n autoplay: recorder.getAttribute(\"autoplay\"),\n muted: recorder.getAttribute(\"muted\")\n });\n });\n }\n\n updateRecordingState(\"idle\");\n setDisableButton(false);\n return;\n }\n\n // Attach the captured thumbnail to the event\n const enhancedEvent = new CustomEvent('record-completed', {\n detail: {\n media: customEvent.detail.media,\n metadata: customEvent.detail.metadata || '',\n thumbnail: capturedThumbnailRef.current || undefined,\n }\n });\n\n updateRecordingState(\"processing\");\n handleSelfie(enhancedEvent);\n };\n\n return (\n <div\n className=\"selfie selfie-recorder-root flex flex-col\"\n style={{\n [\"--dk-btn-bg\" as string]: btnBg ?? \"#11E5C5\",\n [\"--dk-btn-text\" as string]: btnText ?? \"#3C3C40\",\n position: isMobile ? \"fixed\" : \"relative\",\n inset: isMobile ? 0 : \"auto\",\n zIndex: isMobile ? 50 : \"auto\",\n height: \"100%\",\n width: \"100%\",\n }}\n >\n <div className=\"p-4 text-center bg-white shrink-0\">\n <Title className=\"text-lg md:text-xl mb-1\">{t(\"selfie.recorder.title\")}</Title>\n <Subtitle className=\"text-xs text-gray-600 md:text-sm\">{t(\"selfie.recorder.subtitle\")}</Subtitle>\n </div>\n\n <div className=\"video-container flex-1 relative overflow-hidden\">\n <VideoRecorder\n ref={recorderRef}\n preset={AcquisitionPreset.SELFIE_OPTIMIZED}\n hideCaptureBtn\n faceChecker={(typeof window !== 'undefined' && window.__E2E_DISABLE_FACE_CHECKER__) ? 'disabled' : 'enabled'}\n disableDebugMode\n onRecorderReady={handleRecorderReady}\n onRecordInterrupted={handleRecordInterrupted}\n onRecordCompleted={handleRecordCompleted}\n onRecord={recordStarting}\n style={{ width: \"100%\", height: \"100%\" }}\n className=\"video-recorder-no-radius w-full h-full\"\n {...(isIOS() && {\n \"data-playsinline\": \"true\",\n \"data-autoplay\": \"true\",\n \"data-muted\": \"true\"\n })}\n strings={getUnisseyStrings(t)}\n />\n </div>\n\n <div className=\"shrink-0 bg-white border-t border-gray-200 p-4 md:p-6 relative\" style={{ zIndex: 9999 }}>\n <div className=\"max-w-md mx-auto\">\n <div className=\"text-center text-xs text-gray-400 mt-3\">\n {t(\"selfie.recorder.note\")}\n </div>\n\n <Button\n onClick={recordStarting}\n className=\"w-full py-3 md:py-4 relative selfie-button\"\n disabled={disableButton || !recorderReady}\n style={{ backgroundColor: btnBg ?? \"#11E5C5\", color: btnText ?? \"#3C3C40\" }}\n >\n {recordingState === \"idle\" && t(\"selfie.recorder.start\")}\n {recordingState === \"preparing\" && t(\"selfie.recorder.preparing\")}\n {recordingState === \"recording\" && (\n <span className=\"flex items-center justify-center\">\n <span className=\"mr-2\">{t(\"selfie.recorder.recording_label\")}</span>\n <span className=\"flex space-x-1 loading-dots\">\n <span className=\"h-1 w-1 bg-white rounded-full\"></span>\n <span className=\"h-1 w-1 bg-white rounded-full\"></span>\n <span className=\"h-1 w-1 bg-white rounded-full\"></span>\n </span>\n </span>\n )}\n {recordingState === \"processing\" && t(\"selfie.recorder.processing\")}\n </Button>\n </div>\n </div>\n </div>\n );\n};\n\nexport default SelfieRecorder;\n"],"names":["useI18n","useIsMobile","useRef","useState","useLiveFrameCapture","useVideoRecorderStyles","useCallback","useEffect","setupVideoElementsObserver","isIOS","__awaiter","waitForVideoFrame","delay","getRecorderVideoElement","_jsxs","_jsx","Title","Subtitle","VideoRecorder","__assign","AcquisitionPreset","getUnisseyStrings","Button"],"mappings":"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"}
1
+ {"version":3,"file":"SelfieRecorder.js","sources":["../../../../../../src/components/selfie/selfie-flow/SelfieRecorder.tsx"],"sourcesContent":["import {\n useCallback,\n useRef,\n useState,\n useEffect,\n type ElementRef,\n} from \"react\";\nimport { AcquisitionPreset, VideoRecorder } from \"@unissey-web/sdk-react\";\nimport Button from \"../../ui/Button\";\nimport Title from \"../../ui/Title\";\nimport Subtitle from \"../../ui/Subtitle\";\nimport useVideoRecorderStyles from \"../hooks/useVideoRecorderStyles\";\nimport { setupVideoElementsObserver } from \"../utils/videoElementStyles\";\nimport { delay, isIOS, waitForVideoFrame, getRecorderVideoElement } from \"../utils/selfieCaptureUtils\";\nimport { useLiveFrameCapture } from \"../hooks/useLiveFrameCapture\";\nimport { useI18n } from \"../../../hooks/useI18n\";\nimport useIsMobile from \"../../../hooks/useIsMobile\";\nimport { getUnisseyStrings } from \"../utils/unisseyStrings\";\n\ntype RecordingState = \"idle\" | \"preparing\" | \"recording\" | \"processing\";\n\ninterface SelfieRecorderProps {\n handleSelfie: (e: Event) => void;\n onBeginCapture?: () => void;\n isCapturing?: boolean;\n btnBg?: string;\n btnText?: string;\n}\n\ntype VideoRecorderElement = ElementRef<typeof VideoRecorder>;\n\nconst SelfieRecorder = ({\n handleSelfie,\n onBeginCapture = () => { },\n btnBg,\n btnText,\n}: SelfieRecorderProps) => {\n const { t } = useI18n();\n const isMobile = useIsMobile(768);\n const recorderRef = useRef<VideoRecorderElement | null>(null);\n const [disableButton, setDisableButton] = useState(false);\n const [recorderReady, setRecorderReady] = useState(false);\n const [recordingState, setRecordingState] = useState<RecordingState>(\"idle\");\n const recordingStateRef = useRef<RecordingState>(\"idle\");\n const lastRecorderStatusRef = useRef<string | undefined>();\n const capturedThumbnailRef = useRef<string | null>(null);\n const { captureFrame, cleanup } = useLiveFrameCapture();\n\n useVideoRecorderStyles(btnBg, btnText);\n\n const updateRecordingState = useCallback((state: RecordingState) => {\n recordingStateRef.current = state;\n setRecordingState(state);\n }, []);\n\n const resetCaptureControls = useCallback(() => {\n capturedThumbnailRef.current = null;\n updateRecordingState(\"idle\");\n setDisableButton(false);\n }, [updateRecordingState]);\n\n // Réinitialisation déclenchée par le polling de statut Unissey.\n // Pendant une capture en cours (preparing/recording/processing), les transitions\n // internes du cycle d'enregistrement (starting → running → ready) ne doivent PAS\n // réactiver le bouton. Seule une perte réelle de la caméra (passage par\n // \"no-session\") justifie un reset pendant la capture (scénario retry caméra).\n const resetCaptureControlsFromPolling = useCallback(\n (previousStatus: string | undefined) => {\n if (\n recordingStateRef.current !== \"idle\" &&\n previousStatus !== \"no-session\"\n ) {\n return;\n }\n resetCaptureControls();\n },\n [resetCaptureControls]\n );\n\n useEffect(() => {\n document.body.classList.add(\"recording-selfie\");\n const cleanupObserver = setupVideoElementsObserver();\n\n // iOS-specific fix: Add required attributes to video elements after mount\n if (isIOS()) {\n const addIOSVideoAttributes = () => {\n const videoRecorders = document.querySelectorAll(\"uni-video-recorder\");\n videoRecorders.forEach((recorder) => {\n // Try to access shadow DOM and video elements\n try {\n const shadowRoot = recorder.shadowRoot;\n if (shadowRoot) {\n const videoElements = shadowRoot.querySelectorAll(\"video\");\n videoElements.forEach((video: HTMLVideoElement) => {\n video.setAttribute(\"playsinline\", \"true\");\n video.setAttribute(\"autoplay\", \"true\");\n video.setAttribute(\"muted\", \"true\");\n // Ensure video plays inline and autoplays\n video.playsInline = true;\n video.autoplay = true;\n video.muted = true;\n });\n }\n } catch (error) {\n console.log(\"Could not access shadow DOM:\", error);\n }\n\n // Also set attributes on the component itself\n recorder.setAttribute(\"playsinline\", \"true\");\n recorder.setAttribute(\"autoplay\", \"true\");\n recorder.setAttribute(\"muted\", \"true\");\n });\n };\n\n // Apply immediately and also after a delay to catch dynamically created elements\n addIOSVideoAttributes();\n const iosTimeout = setTimeout(addIOSVideoAttributes, 500);\n const iosInterval = setInterval(addIOSVideoAttributes, 1000);\n\n return () => {\n document.body.classList.remove(\"recording-selfie\");\n cleanupObserver();\n cleanup();\n clearTimeout(iosTimeout);\n clearInterval(iosInterval);\n };\n }\n\n return () => {\n document.body.classList.remove(\"recording-selfie\");\n cleanupObserver();\n cleanup();\n };\n }, [cleanup]);\n\n const recordStarting = () => {\n if (!recorderReady || recordingState !== \"idle\") return;\n onBeginCapture();\n updateRecordingState(\"preparing\");\n setDisableButton(true);\n\n const triggerCapture = async () => {\n try {\n await waitForVideoFrame(recorderRef.current);\n await delay(200);\n updateRecordingState(\"recording\");\n\n // Capture a frame from the live video during recording (after a short delay)\n setTimeout(() => {\n const videoElement = getRecorderVideoElement(recorderRef.current);\n if (videoElement) {\n const thumbnail = captureFrame(videoElement);\n capturedThumbnailRef.current = thumbnail;\n }\n }, 1000); // Capture frame 1 second into recording\n\n recorderRef.current?.capture();\n } catch (error) {\n console.error(\"SelfieRecorder: failed to capture frame\", error);\n updateRecordingState(\"idle\");\n setDisableButton(false);\n }\n };\n\n void triggerCapture();\n };\n\n useEffect(() => {\n const interval = setInterval(() => {\n const status = recorderRef.current?.sdkJsStatus;\n const isReady = status === \"ready\" || status === \"running\";\n setRecorderReady((prev) => (prev !== isReady ? isReady : prev));\n\n const previousStatus = lastRecorderStatusRef.current;\n const wasReady = previousStatus === \"ready\" || previousStatus === \"running\";\n if (status !== previousStatus) {\n lastRecorderStatusRef.current = status;\n if (isReady && previousStatus !== undefined && !wasReady) {\n resetCaptureControlsFromPolling(previousStatus);\n }\n }\n }, 500);\n return () => clearInterval(interval);\n }, [resetCaptureControlsFromPolling]);\n\n const handleRecorderReady = () => {\n setRecorderReady(true);\n resetCaptureControls();\n };\n\n const handleRecordInterrupted = () => {\n resetCaptureControls();\n };\n\n const handleRecordCompleted = (e: Event) => {\n const customEvent = e as CustomEvent<{ media?: Blob; metadata?: string }>;\n if (!customEvent.detail?.media || customEvent.detail.media.size === 0) {\n console.error(\"❌ No valid media captured\");\n\n // iOS-specific debugging\n if (isIOS()) {\n console.log(\"🍎 iOS detected - checking video elements for proper attributes\");\n const videoRecorders = document.querySelectorAll(\"uni-video-recorder\");\n videoRecorders.forEach((recorder, index) => {\n console.log(`VideoRecorder ${index}:`, {\n playsinline: recorder.getAttribute(\"playsinline\"),\n autoplay: recorder.getAttribute(\"autoplay\"),\n muted: recorder.getAttribute(\"muted\")\n });\n });\n }\n\n updateRecordingState(\"idle\");\n setDisableButton(false);\n return;\n }\n\n // Attach the captured thumbnail to the event\n const enhancedEvent = new CustomEvent('record-completed', {\n detail: {\n media: customEvent.detail.media,\n metadata: customEvent.detail.metadata || '',\n thumbnail: capturedThumbnailRef.current || undefined,\n }\n });\n\n updateRecordingState(\"processing\");\n handleSelfie(enhancedEvent);\n };\n\n return (\n <div\n className=\"selfie selfie-recorder-root flex flex-col\"\n style={{\n [\"--dk-btn-bg\" as string]: btnBg ?? \"#11E5C5\",\n [\"--dk-btn-text\" as string]: btnText ?? \"#3C3C40\",\n position: isMobile ? \"fixed\" : \"relative\",\n inset: isMobile ? 0 : \"auto\",\n zIndex: isMobile ? 50 : \"auto\",\n height: \"100%\",\n width: \"100%\",\n }}\n >\n <div className=\"p-4 text-center bg-white shrink-0\">\n <Title className=\"text-lg md:text-xl mb-1\">{t(\"selfie.recorder.title\")}</Title>\n <Subtitle className=\"text-xs text-gray-600 md:text-sm\">{t(\"selfie.recorder.subtitle\")}</Subtitle>\n </div>\n\n <div className=\"video-container flex-1 relative overflow-hidden\">\n <VideoRecorder\n ref={recorderRef}\n preset={AcquisitionPreset.SELFIE_OPTIMIZED}\n hideCaptureBtn\n faceChecker={(typeof window !== 'undefined' && window.__E2E_DISABLE_FACE_CHECKER__) ? 'disabled' : 'enabled'}\n disableDebugMode\n onRecorderReady={handleRecorderReady}\n onRecordInterrupted={handleRecordInterrupted}\n onRecordCompleted={handleRecordCompleted}\n style={{ width: \"100%\", height: \"100%\" }}\n className=\"video-recorder-no-radius w-full h-full\"\n {...(isIOS() && {\n \"data-playsinline\": \"true\",\n \"data-autoplay\": \"true\",\n \"data-muted\": \"true\"\n })}\n strings={getUnisseyStrings(t)}\n />\n </div>\n\n <div className=\"shrink-0 bg-white border-t border-gray-200 p-4 md:p-6 relative\" style={{ zIndex: 9999 }}>\n <div className=\"max-w-md mx-auto\">\n <div className=\"text-center text-xs text-gray-400 mt-3\">\n {t(\"selfie.recorder.note\")}\n </div>\n\n <Button\n onClick={recordStarting}\n className=\"w-full py-3 md:py-4 relative selfie-button\"\n disabled={disableButton || !recorderReady}\n style={{ backgroundColor: btnBg ?? \"#11E5C5\", color: btnText ?? \"#3C3C40\" }}\n >\n {recordingState === \"idle\" && t(\"selfie.recorder.start\")}\n {recordingState === \"preparing\" && t(\"selfie.recorder.preparing\")}\n {recordingState === \"recording\" && (\n <span className=\"flex items-center justify-center\">\n <span className=\"mr-2\">{t(\"selfie.recorder.recording_label\")}</span>\n <span className=\"flex space-x-1 loading-dots\">\n <span className=\"h-1 w-1 bg-white rounded-full\"></span>\n <span className=\"h-1 w-1 bg-white rounded-full\"></span>\n <span className=\"h-1 w-1 bg-white rounded-full\"></span>\n </span>\n </span>\n )}\n {recordingState === \"processing\" && t(\"selfie.recorder.processing\")}\n </Button>\n </div>\n </div>\n </div>\n );\n};\n\nexport default SelfieRecorder;\n"],"names":["useI18n","useIsMobile","useRef","useState","useLiveFrameCapture","useVideoRecorderStyles","useCallback","useEffect","setupVideoElementsObserver","isIOS","__awaiter","waitForVideoFrame","delay","getRecorderVideoElement","_jsxs","_jsx","Title","Subtitle","VideoRecorder","AcquisitionPreset","getUnisseyStrings","Button"],"mappings":"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"}
@@ -12,6 +12,9 @@ var check = require('../../assets/check.svg.js');
12
12
  var LoadingState = require('../states/LoadingState.js');
13
13
  var Title = require('../ui/Title.js');
14
14
  var Subtitle = require('../ui/Subtitle.js');
15
+ var Button = require('../ui/Button.js');
16
+ var PageActions = require('../ui/PageActions.js');
17
+ var MobilePageLayout = require('../ui/MobilePageLayout.js');
15
18
 
16
19
  var FIELD_ALIASES = {
17
20
  siren: ['siren', 'siren_number', 'company_siren', 'legal_siren', 'num_siren'],
@@ -285,7 +288,7 @@ var ExternalVerificationNodeHandler = function (_a) {
285
288
  }
286
289
  // ─── Mismatch phase ────────────────────────────────────────────────────────
287
290
  if (phase === 'mismatch') {
288
- return (jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center h-full px-6 py-8 text-center space-y-5", children: [jsxRuntime.jsx("div", { className: "w-16 h-16 rounded-full bg-[#F4D940]/20 flex items-center justify-center text-3xl", children: "\u26A0\uFE0F" }), jsxRuntime.jsx("h3", { className: "text-[#3C3C40] font-poppins text-xl font-bold", children: t('inpi_verification.mismatch_title', 'Identité non confirmée') }), jsxRuntime.jsx("p", { className: "max-w-sm text-sm text-gray-500", children: t('inpi_verification.mismatch_desc', "Les informations saisies ne correspondent à aucune personne déclarée à l'INPI pour cette société.") }), jsxRuntime.jsxs("div", { className: "flex w-full max-w-xs flex-col gap-3", children: [jsxRuntime.jsx("button", { onClick: onPrevious, className: "w-full rounded-lg border border-gray-300 px-4 py-2.5 text-sm font-medium text-gray-700 transition hover:bg-gray-50", "data-cy": "inpi-mismatch-go-back", children: t('inpi_verification.mismatch_correct', 'Corriger ma saisie') }), jsxRuntime.jsx("button", { onClick: onNext, className: "w-full rounded-lg bg-primary px-4 py-2.5 text-sm font-medium text-white transition hover:opacity-90", "data-cy": "inpi-mismatch-continue", children: t('inpi_verification.mismatch_continue', 'Continuer quand même') })] })] }));
291
+ return (jsxRuntime.jsx(MobilePageLayout.default, { header: jsxRuntime.jsxs("div", { className: "p-4 text-center bg-white border-b border-gray-100", children: [jsxRuntime.jsx(Title.default, { className: "text-xl md:text-2xl", children: t('inpi_verification.mismatch_title', 'Identité non confirmée') }), jsxRuntime.jsx(Subtitle.default, { className: "text-xs text-gray-600 mt-2 md:text-sm", children: t('inpi_verification.mismatch_desc', "Les informations saisies ne correspondent à aucune personne déclarée à l'INPI pour cette société.") })] }), footer: jsxRuntime.jsx(PageActions.default, { primary: jsxRuntime.jsx(Button.default, { onClick: onNext, "data-cy": "inpi-mismatch-continue", children: t('inpi_verification.mismatch_continue', 'Continuer quand même') }), secondary: jsxRuntime.jsx(Button.default, { variant: "secondary", onClick: onPrevious, "data-cy": "inpi-mismatch-go-back", children: t('inpi_verification.mismatch_correct', 'Corriger ma saisie') }) }), className: "bg-white", children: jsxRuntime.jsx("div", { className: "px-4 py-6 pt-8 md:px-8 md:py-8", children: jsxRuntime.jsxs("div", { className: "w-full max-w-md mx-auto space-y-6", children: [jsxRuntime.jsx("div", { className: "flex justify-center", children: jsxRuntime.jsx("div", { className: "w-20 h-20 rounded-full bg-amber-50 flex items-center justify-center", children: jsxRuntime.jsx("svg", { className: "w-10 h-10 text-amber-500", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: jsxRuntime.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M12 9v2m0 4h.01M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z" }) }) }) }), jsxRuntime.jsxs("div", { className: "flex items-start bg-amber-50 border border-amber-200 rounded-lg p-4 gap-3", children: [jsxRuntime.jsx("div", { className: "w-5 h-5 rounded-full bg-amber-100 flex items-center justify-center flex-shrink-0 mt-0.5", children: jsxRuntime.jsx("svg", { className: "w-3 h-3 text-amber-600", fill: "currentColor", viewBox: "0 0 20 20", children: jsxRuntime.jsx("path", { fillRule: "evenodd", d: "M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z", clipRule: "evenodd" }) }) }), jsxRuntime.jsx("p", { className: "text-sm text-amber-800", children: t('inpi_verification.mismatch_hint', 'Vérifiez que le nom et le prénom saisis correspondent exactement aux informations enregistrées au Registre National des Entreprises.') })] })] }) }) }));
289
292
  }
290
293
  // ─── Error / fallback ─────────────────────────────────────────────────────
291
294
  return (jsxRuntime.jsx(LoadingState.default, { message: t('verification_node.verifying_title', 'Vérification en cours…'), subtitle: t('verification_node.verifying_desc', 'Vérification en cours…') }));
@@ -1 +1 @@
1
- {"version":3,"file":"ExternalVerificationNodeHandler.js","sources":["../../../../../src/components/template/ExternalVerificationNodeHandler.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport sdkI18n from '../../i18n';\nimport { apiService } from '../../services/api';\nimport checkIcon from '../../assets/check.svg';\nimport LoadingState from '../states/LoadingState';\nimport Title from '../ui/Title';\nimport Subtitle from '../ui/Subtitle';\nimport type { SessionData, SessionTemplateNode } from '../../types/session';\nimport type { UserInput } from '../../types/userInput';\n\ntype VerificationStatus =\n | 'ok'\n | 'not_found'\n | 'invalid_input'\n | 'config_error'\n | 'external_error'\n | 'person_mismatch';\n\ninterface VerificationResponsePayload {\n isVerified: boolean;\n status: VerificationStatus;\n message?: string;\n errorCode?: string;\n inpiData?: Record<string, unknown>;\n}\n\ninterface ExternalVerificationNodeHandlerProps {\n node: SessionTemplateNode;\n session: SessionData;\n userInput: UserInput;\n setUserInput: React.Dispatch<React.SetStateAction<UserInput>>;\n onNext: () => void;\n onPrevious: () => void;\n}\n\nconst FIELD_ALIASES: Record<'siren' | 'siret', string[]> = {\n siren: ['siren', 'siren_number', 'company_siren', 'legal_siren', 'num_siren'],\n siret: ['siret', 'siret_number', 'company_siret', 'legal_siret', 'num_siret'],\n};\n\nconst normalizeReferenceField = (field?: string): 'siren' | 'siret' | undefined => {\n if (!field) return undefined;\n const normalized = field.toLowerCase().replace(/[\\s_.-]/g, '');\n if (normalized.includes('siret')) return 'siret';\n if (normalized.includes('siren')) return 'siren';\n return undefined;\n};\n\nconst maskReferenceValue = (value: string): string => {\n const clean = value.replace(/\\s+/g, '');\n if (!clean) return '';\n if (clean.length <= 4) return '****';\n return `${'*'.repeat(clean.length - 4)}${clean.slice(-4)}`;\n};\n\nconst resolveFieldValue = (\n nodeInput: any,\n userInputFlat: any,\n keys: string[],\n): string | undefined => {\n for (const key of keys) {\n const candidate =\n nodeInput?.[key] ??\n nodeInput?.customFormData?.[key] ??\n userInputFlat?.customFormData?.[key] ??\n userInputFlat?.[key];\n if (candidate !== undefined && candidate !== null && `${candidate}`.trim() !== '') {\n return String(candidate);\n }\n }\n return undefined;\n};\n\ntype LoaderStep = { title: string; subtitle: string; status: 'pending' | 'active' | 'done' };\n\nconst ExternalVerificationNodeHandler: React.FC<ExternalVerificationNodeHandlerProps> = ({\n node,\n session,\n userInput,\n setUserInput,\n onNext,\n onPrevious,\n}) => {\n const { t } = useTranslation('translation', { i18n: sdkI18n });\n\n const nodeData = node as any;\n const apiType = String(nodeData.targetApi || 'INSEE');\n const isInpiRbe = apiType === 'INPI_RBE';\n\n const [phase, setPhase] = useState<'loading' | 'success' | 'mismatch' | 'error'>('loading');\n const [steps, setSteps] = useState<LoaderStep[]>(() => {\n if (isInpiRbe) {\n return [\n {\n title: t('inpi_verification.step1', 'Appel au RNE'),\n subtitle: t('inpi_verification.step1_sub', 'Connexion au registre national des entreprises'),\n status: 'active',\n },\n {\n title: t('inpi_verification.step2', \"Récupération des données d'entreprise\"),\n subtitle: t('inpi_verification.step2_sub', 'Lecture des informations légales et des dirigeants'),\n status: 'pending',\n },\n {\n title: t('inpi_verification.step3', 'Comparaison avec les données saisies'),\n subtitle: t('inpi_verification.step3_sub', 'Vérification de la concordance des informations'),\n status: 'pending',\n },\n ];\n }\n return [{\n title: t('verification_node.verifying_title', 'Vérification en cours…'),\n subtitle: t('verification_node.verifying_desc', 'Connexion au service externe'),\n status: 'active',\n }];\n });\n\n const advanceStep = (index: number) => {\n setSteps(prev =>\n prev.map((s, i) => {\n if (i < index) return { ...s, status: 'done' };\n if (i === index) return { ...s, status: 'active' };\n return s;\n }),\n );\n };\n\n const completeSteps = () => {\n setSteps(prev => prev.map(s => ({ ...s, status: 'done' })));\n };\n\n // Mapping from builder TYPE_FIELDS keys → actual SDK userInput storage keys.\n // e.g. builder stores 'prenom' but SDK stores 'firstName'.\n const STANDARD_FIELD_ALIASES: Record<string, string[]> = {\n prenom: ['firstName', 'first_name', 'prenom'],\n nom: ['lastName', 'last_name', 'surname', 'familyName', 'nom'],\n date_naissance: ['birthDate', 'birth_date', 'dateOfBirth', 'date_naissance'],\n };\n const expandFieldKey = (key: string): string[] =>\n [key, ...(STANDARD_FIELD_ALIASES[key] ?? [])];\n\n useEffect(() => {\n const abortController = new AbortController();\n\n const run = async () => {\n let result: VerificationResponsePayload = {\n isVerified: false,\n status: 'external_error',\n message: 'Verification did not run.',\n };\n let referenceField: 'siren' | 'siret' | undefined;\n let referenceValueMasked = '';\n\n try {\n if (!session?.id) throw new Error('Session ID is missing');\n\n const referenceNodeId = String(nodeData.referenceNodeId || '');\n const referenceVariable = String(nodeData.referenceVariable || '');\n referenceField = normalizeReferenceField(\n String(nodeData.referenceField || referenceVariable || ''),\n );\n\n if (!referenceNodeId || !referenceField) {\n result = {\n isVerified: false,\n status: 'config_error',\n message: 'External verification node is missing reference configuration.',\n errorCode: 'MISSING_REFERENCE_CONFIG',\n };\n } else {\n const nodeInput = (userInput as any)[referenceNodeId];\n const userInputFlat = userInput as any;\n const lookupKeys = Array.from(\n new Set([referenceVariable, referenceField, ...FIELD_ALIASES[referenceField]].filter(Boolean)),\n );\n\n let referenceValue = resolveFieldValue(nodeInput, userInputFlat, lookupKeys);\n\n // Smart numeric fallback\n if (!referenceValue) {\n const allCustomFields = {\n ...(userInputFlat?.customFormData || {}),\n ...(nodeInput?.customFormData || {}),\n ...(nodeInput || {}),\n };\n for (const [, value] of Object.entries(allCustomFields)) {\n if (typeof value !== 'string' && typeof value !== 'number') continue;\n const str = String(value).replace(/\\s+/g, '');\n if (referenceField === 'siren' && /^\\d{9}$/.test(str)) { referenceValue = str; break; }\n if (referenceField === 'siret' && /^\\d{14}$/.test(str)) { referenceValue = str; break; }\n }\n }\n\n if (!referenceValue) {\n result = {\n isVerified: false,\n status: 'invalid_input',\n message: 'No SIREN/SIRET value found in source node data.',\n errorCode: 'REFERENCE_VALUE_NOT_FOUND',\n };\n } else {\n referenceValueMasked = maskReferenceValue(referenceValue);\n\n // Build comparison payload for INPI_RBE\n let comparisonConfig: Record<string, unknown> | undefined;\n if (isInpiRbe && nodeData.comparisonConfig?.personReferenceNodeId) {\n const cfg = nodeData.comparisonConfig;\n const personNodeInput = (userInput as any)[cfg.personReferenceNodeId] ?? {};\n const flat = userInput as any;\n\n // Expand keys to handle builder's TYPE_FIELDS keys (e.g. 'prenom')\n // vs SDK storage keys (e.g. 'firstName').\n const firstNameKeys = expandFieldKey(cfg.personFirstNameField ?? '').filter(Boolean);\n const lastNameKeys = expandFieldKey(cfg.personLastNameField ?? '').filter(Boolean);\n const birthDateKeys = cfg.personBirthDateField\n ? expandFieldKey(cfg.personBirthDateField).filter(Boolean)\n : [];\n\n const firstName = resolveFieldValue(personNodeInput, flat, firstNameKeys) ?? '';\n const lastName = resolveFieldValue(personNodeInput, flat, lastNameKeys) ?? '';\n const dateOfBirth = cfg.compareBirthDate && birthDateKeys.length\n ? resolveFieldValue(personNodeInput, flat, birthDateKeys)\n : undefined;\n\n if (firstName && lastName) {\n comparisonConfig = {\n firstName,\n lastName,\n compareTargets: cfg.compareTargets ?? ['mandataires'],\n ...(dateOfBirth ? { dateOfBirth } : {}),\n };\n }\n }\n\n // Step 2 — after building request\n if (isInpiRbe) advanceStep(1);\n\n try {\n const response = await apiService.post(\n `/session/sdk/${session.id}/verify-external/${node.id}`,\n { apiType, referenceValue, referenceField, ...(comparisonConfig ? { comparisonConfig } : {}) },\n { signal: abortController.signal },\n );\n\n // Step 3 — response received\n if (isInpiRbe) advanceStep(2);\n await new Promise(r => setTimeout(r, 600));\n\n const res = response.data?.data as VerificationResponsePayload | undefined;\n if (res && typeof res.isVerified === 'boolean') {\n result = res;\n }\n } catch (apiErr: any) {\n if (abortController.signal.aborted) return;\n if (isInpiRbe) advanceStep(2);\n const apiResult = apiErr?.response?.data?.data as VerificationResponsePayload | undefined;\n if (apiResult && typeof apiResult.isVerified === 'boolean') {\n result = apiResult;\n } else {\n result = {\n isVerified: false,\n status: 'external_error',\n message: 'External verification request failed.',\n errorCode: 'REQUEST_FAILED',\n };\n }\n }\n }\n }\n } catch (err) {\n result = {\n isVerified: false,\n status: 'external_error',\n message: 'Unexpected error during verification.',\n errorCode: 'UNEXPECTED_ERROR',\n };\n }\n\n if (abortController.signal.aborted) return;\n\n completeSteps();\n\n setUserInput(prev => ({\n ...prev,\n [node.id]: {\n isVerified: result.isVerified,\n apiType,\n referenceField,\n referenceValueMasked,\n verifiedAt: new Date().toISOString(),\n status: result.status,\n errorCode: result.errorCode,\n message: result.message,\n inpiData: result.inpiData,\n hasError: result.status !== 'ok' && result.status !== 'not_found' && result.status !== 'person_mismatch',\n },\n } as any));\n\n // Determine phase to show\n if (result.status === 'person_mismatch') {\n setPhase('mismatch');\n } else if (result.isVerified || result.status === 'ok' || result.status === 'not_found') {\n setPhase('success');\n setTimeout(onNext, 1200);\n } else if (result.status === 'config_error' || result.status === 'invalid_input') {\n setPhase('success');\n setTimeout(onNext, 800);\n } else {\n setPhase('error');\n setTimeout(onNext, 1500);\n }\n };\n\n run();\n return () => abortController.abort();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // ─── Loading phase ─────────────────────────────────────────────────────────\n if (phase === 'loading') {\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 {t('verification_node.verifying_title', 'Vérification en cours…')}\n </Title>\n <Subtitle className=\"text-sm text-gray-600 leading-relaxed\">\n {t('verification_node.verifying_desc', 'Nous vérifions vos informations. Cela peut prendre quelques instants.')}\n </Subtitle>\n </div>\n <div className=\"w-full flex justify-center\">\n <div className=\"space-y-5\">\n {steps.map((step, index) => (\n <div key={index} className=\"flex items-start\">\n <div className=\"mr-4 mt-1 flex-shrink-0\">\n {step.status === 'done' ? (\n <div className=\"flex items-center justify-center w-6 h-6 rounded-full bg-[#11E5C5] text-white text-xs\">\n ✓\n </div>\n ) : step.status === 'active' ? (\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\" />\n ) : (\n <div className=\"w-6 h-6 rounded-full border-2 border-gray-300\" />\n )}\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"font-medium text-[#3C3C40] text-sm\">{step.title}</p>\n <p className=\"text-xs text-gray-500 mt-1\">{step.subtitle}</p>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n // ─── Success phase ─────────────────────────────────────────────────────────\n if (phase === 'success') {\n return (\n <div className=\"flex flex-col items-center justify-center h-full px-6 py-8 text-center space-y-4\">\n <img src={checkIcon} alt=\"success\" className=\"w-24 h-24\" />\n <h3 className=\"text-[#3C3C40] font-poppins text-xl font-bold\">\n {t('inpi_verification.success_title', 'Vérification réussie')}\n </h3>\n <p className=\"text-gray-500 text-sm\">\n {t('inpi_verification.success_desc', \"Passage à l'étape suivante…\")}\n </p>\n </div>\n );\n }\n\n // ─── Mismatch phase ────────────────────────────────────────────────────────\n if (phase === 'mismatch') {\n return (\n <div className=\"flex flex-col items-center justify-center h-full px-6 py-8 text-center space-y-5\">\n <div className=\"w-16 h-16 rounded-full bg-[#F4D940]/20 flex items-center justify-center text-3xl\">\n ⚠️\n </div>\n <h3 className=\"text-[#3C3C40] font-poppins text-xl font-bold\">\n {t('inpi_verification.mismatch_title', 'Identité non confirmée')}\n </h3>\n <p className=\"max-w-sm text-sm text-gray-500\">\n {t(\n 'inpi_verification.mismatch_desc',\n \"Les informations saisies ne correspondent à aucune personne déclarée à l'INPI pour cette société.\",\n )}\n </p>\n <div className=\"flex w-full max-w-xs flex-col gap-3\">\n <button\n onClick={onPrevious}\n className=\"w-full rounded-lg border border-gray-300 px-4 py-2.5 text-sm font-medium text-gray-700 transition hover:bg-gray-50\"\n data-cy=\"inpi-mismatch-go-back\"\n >\n {t('inpi_verification.mismatch_correct', 'Corriger ma saisie')}\n </button>\n <button\n onClick={onNext}\n className=\"w-full rounded-lg bg-primary px-4 py-2.5 text-sm font-medium text-white transition hover:opacity-90\"\n data-cy=\"inpi-mismatch-continue\"\n >\n {t('inpi_verification.mismatch_continue', 'Continuer quand même')}\n </button>\n </div>\n </div>\n );\n }\n\n // ─── Error / fallback ─────────────────────────────────────────────────────\n return (\n <LoadingState\n message={t('verification_node.verifying_title', 'Vérification en cours…')}\n subtitle={t('verification_node.verifying_desc', 'Vérification en cours…')}\n />\n );\n};\n\nexport default ExternalVerificationNodeHandler;\n"],"names":["useTranslation","sdkI18n","useState","__assign","__spreadArray","useEffect","__awaiter","apiService","_jsx","_jsxs","Title","Subtitle","checkIcon","LoadingState"],"mappings":"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"}
1
+ {"version":3,"file":"ExternalVerificationNodeHandler.js","sources":["../../../../../src/components/template/ExternalVerificationNodeHandler.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport sdkI18n from '../../i18n';\nimport { apiService } from '../../services/api';\nimport checkIcon from '../../assets/check.svg';\nimport LoadingState from '../states/LoadingState';\nimport Title from '../ui/Title';\nimport Subtitle from '../ui/Subtitle';\nimport Button from '../ui/Button';\nimport PageActions from '../ui/PageActions';\nimport MobilePageLayout from '../ui/MobilePageLayout';\nimport type { SessionData, SessionTemplateNode } from '../../types/session';\nimport type { UserInput } from '../../types/userInput';\n\ntype VerificationStatus =\n | 'ok'\n | 'not_found'\n | 'invalid_input'\n | 'config_error'\n | 'external_error'\n | 'person_mismatch';\n\ninterface VerificationResponsePayload {\n isVerified: boolean;\n status: VerificationStatus;\n message?: string;\n errorCode?: string;\n inpiData?: Record<string, unknown>;\n}\n\ninterface ExternalVerificationNodeHandlerProps {\n node: SessionTemplateNode;\n session: SessionData;\n userInput: UserInput;\n setUserInput: React.Dispatch<React.SetStateAction<UserInput>>;\n onNext: () => void;\n onPrevious: () => void;\n}\n\nconst FIELD_ALIASES: Record<'siren' | 'siret', string[]> = {\n siren: ['siren', 'siren_number', 'company_siren', 'legal_siren', 'num_siren'],\n siret: ['siret', 'siret_number', 'company_siret', 'legal_siret', 'num_siret'],\n};\n\nconst normalizeReferenceField = (field?: string): 'siren' | 'siret' | undefined => {\n if (!field) return undefined;\n const normalized = field.toLowerCase().replace(/[\\s_.-]/g, '');\n if (normalized.includes('siret')) return 'siret';\n if (normalized.includes('siren')) return 'siren';\n return undefined;\n};\n\nconst maskReferenceValue = (value: string): string => {\n const clean = value.replace(/\\s+/g, '');\n if (!clean) return '';\n if (clean.length <= 4) return '****';\n return `${'*'.repeat(clean.length - 4)}${clean.slice(-4)}`;\n};\n\nconst resolveFieldValue = (\n nodeInput: any,\n userInputFlat: any,\n keys: string[],\n): string | undefined => {\n for (const key of keys) {\n const candidate =\n nodeInput?.[key] ??\n nodeInput?.customFormData?.[key] ??\n userInputFlat?.customFormData?.[key] ??\n userInputFlat?.[key];\n if (candidate !== undefined && candidate !== null && `${candidate}`.trim() !== '') {\n return String(candidate);\n }\n }\n return undefined;\n};\n\ntype LoaderStep = { title: string; subtitle: string; status: 'pending' | 'active' | 'done' };\n\nconst ExternalVerificationNodeHandler: React.FC<ExternalVerificationNodeHandlerProps> = ({\n node,\n session,\n userInput,\n setUserInput,\n onNext,\n onPrevious,\n}) => {\n const { t } = useTranslation('translation', { i18n: sdkI18n });\n\n const nodeData = node as any;\n const apiType = String(nodeData.targetApi || 'INSEE');\n const isInpiRbe = apiType === 'INPI_RBE';\n\n const [phase, setPhase] = useState<'loading' | 'success' | 'mismatch' | 'error'>('loading');\n const [steps, setSteps] = useState<LoaderStep[]>(() => {\n if (isInpiRbe) {\n return [\n {\n title: t('inpi_verification.step1', 'Appel au RNE'),\n subtitle: t('inpi_verification.step1_sub', 'Connexion au registre national des entreprises'),\n status: 'active',\n },\n {\n title: t('inpi_verification.step2', \"Récupération des données d'entreprise\"),\n subtitle: t('inpi_verification.step2_sub', 'Lecture des informations légales et des dirigeants'),\n status: 'pending',\n },\n {\n title: t('inpi_verification.step3', 'Comparaison avec les données saisies'),\n subtitle: t('inpi_verification.step3_sub', 'Vérification de la concordance des informations'),\n status: 'pending',\n },\n ];\n }\n return [{\n title: t('verification_node.verifying_title', 'Vérification en cours…'),\n subtitle: t('verification_node.verifying_desc', 'Connexion au service externe'),\n status: 'active',\n }];\n });\n\n const advanceStep = (index: number) => {\n setSteps(prev =>\n prev.map((s, i) => {\n if (i < index) return { ...s, status: 'done' };\n if (i === index) return { ...s, status: 'active' };\n return s;\n }),\n );\n };\n\n const completeSteps = () => {\n setSteps(prev => prev.map(s => ({ ...s, status: 'done' })));\n };\n\n // Mapping from builder TYPE_FIELDS keys → actual SDK userInput storage keys.\n // e.g. builder stores 'prenom' but SDK stores 'firstName'.\n const STANDARD_FIELD_ALIASES: Record<string, string[]> = {\n prenom: ['firstName', 'first_name', 'prenom'],\n nom: ['lastName', 'last_name', 'surname', 'familyName', 'nom'],\n date_naissance: ['birthDate', 'birth_date', 'dateOfBirth', 'date_naissance'],\n };\n const expandFieldKey = (key: string): string[] =>\n [key, ...(STANDARD_FIELD_ALIASES[key] ?? [])];\n\n useEffect(() => {\n const abortController = new AbortController();\n\n const run = async () => {\n let result: VerificationResponsePayload = {\n isVerified: false,\n status: 'external_error',\n message: 'Verification did not run.',\n };\n let referenceField: 'siren' | 'siret' | undefined;\n let referenceValueMasked = '';\n\n try {\n if (!session?.id) throw new Error('Session ID is missing');\n\n const referenceNodeId = String(nodeData.referenceNodeId || '');\n const referenceVariable = String(nodeData.referenceVariable || '');\n referenceField = normalizeReferenceField(\n String(nodeData.referenceField || referenceVariable || ''),\n );\n\n if (!referenceNodeId || !referenceField) {\n result = {\n isVerified: false,\n status: 'config_error',\n message: 'External verification node is missing reference configuration.',\n errorCode: 'MISSING_REFERENCE_CONFIG',\n };\n } else {\n const nodeInput = (userInput as any)[referenceNodeId];\n const userInputFlat = userInput as any;\n const lookupKeys = Array.from(\n new Set([referenceVariable, referenceField, ...FIELD_ALIASES[referenceField]].filter(Boolean)),\n );\n\n let referenceValue = resolveFieldValue(nodeInput, userInputFlat, lookupKeys);\n\n // Smart numeric fallback\n if (!referenceValue) {\n const allCustomFields = {\n ...(userInputFlat?.customFormData || {}),\n ...(nodeInput?.customFormData || {}),\n ...(nodeInput || {}),\n };\n for (const [, value] of Object.entries(allCustomFields)) {\n if (typeof value !== 'string' && typeof value !== 'number') continue;\n const str = String(value).replace(/\\s+/g, '');\n if (referenceField === 'siren' && /^\\d{9}$/.test(str)) { referenceValue = str; break; }\n if (referenceField === 'siret' && /^\\d{14}$/.test(str)) { referenceValue = str; break; }\n }\n }\n\n if (!referenceValue) {\n result = {\n isVerified: false,\n status: 'invalid_input',\n message: 'No SIREN/SIRET value found in source node data.',\n errorCode: 'REFERENCE_VALUE_NOT_FOUND',\n };\n } else {\n referenceValueMasked = maskReferenceValue(referenceValue);\n\n // Build comparison payload for INPI_RBE\n let comparisonConfig: Record<string, unknown> | undefined;\n if (isInpiRbe && nodeData.comparisonConfig?.personReferenceNodeId) {\n const cfg = nodeData.comparisonConfig;\n const personNodeInput = (userInput as any)[cfg.personReferenceNodeId] ?? {};\n const flat = userInput as any;\n\n // Expand keys to handle builder's TYPE_FIELDS keys (e.g. 'prenom')\n // vs SDK storage keys (e.g. 'firstName').\n const firstNameKeys = expandFieldKey(cfg.personFirstNameField ?? '').filter(Boolean);\n const lastNameKeys = expandFieldKey(cfg.personLastNameField ?? '').filter(Boolean);\n const birthDateKeys = cfg.personBirthDateField\n ? expandFieldKey(cfg.personBirthDateField).filter(Boolean)\n : [];\n\n const firstName = resolveFieldValue(personNodeInput, flat, firstNameKeys) ?? '';\n const lastName = resolveFieldValue(personNodeInput, flat, lastNameKeys) ?? '';\n const dateOfBirth = cfg.compareBirthDate && birthDateKeys.length\n ? resolveFieldValue(personNodeInput, flat, birthDateKeys)\n : undefined;\n\n if (firstName && lastName) {\n comparisonConfig = {\n firstName,\n lastName,\n compareTargets: cfg.compareTargets ?? ['mandataires'],\n ...(dateOfBirth ? { dateOfBirth } : {}),\n };\n }\n }\n\n // Step 2 — after building request\n if (isInpiRbe) advanceStep(1);\n\n try {\n const response = await apiService.post(\n `/session/sdk/${session.id}/verify-external/${node.id}`,\n { apiType, referenceValue, referenceField, ...(comparisonConfig ? { comparisonConfig } : {}) },\n { signal: abortController.signal },\n );\n\n // Step 3 — response received\n if (isInpiRbe) advanceStep(2);\n await new Promise(r => setTimeout(r, 600));\n\n const res = response.data?.data as VerificationResponsePayload | undefined;\n if (res && typeof res.isVerified === 'boolean') {\n result = res;\n }\n } catch (apiErr: any) {\n if (abortController.signal.aborted) return;\n if (isInpiRbe) advanceStep(2);\n const apiResult = apiErr?.response?.data?.data as VerificationResponsePayload | undefined;\n if (apiResult && typeof apiResult.isVerified === 'boolean') {\n result = apiResult;\n } else {\n result = {\n isVerified: false,\n status: 'external_error',\n message: 'External verification request failed.',\n errorCode: 'REQUEST_FAILED',\n };\n }\n }\n }\n }\n } catch (err) {\n result = {\n isVerified: false,\n status: 'external_error',\n message: 'Unexpected error during verification.',\n errorCode: 'UNEXPECTED_ERROR',\n };\n }\n\n if (abortController.signal.aborted) return;\n\n completeSteps();\n\n setUserInput(prev => ({\n ...prev,\n [node.id]: {\n isVerified: result.isVerified,\n apiType,\n referenceField,\n referenceValueMasked,\n verifiedAt: new Date().toISOString(),\n status: result.status,\n errorCode: result.errorCode,\n message: result.message,\n inpiData: result.inpiData,\n hasError: result.status !== 'ok' && result.status !== 'not_found' && result.status !== 'person_mismatch',\n },\n } as any));\n\n // Determine phase to show\n if (result.status === 'person_mismatch') {\n setPhase('mismatch');\n } else if (result.isVerified || result.status === 'ok' || result.status === 'not_found') {\n setPhase('success');\n setTimeout(onNext, 1200);\n } else if (result.status === 'config_error' || result.status === 'invalid_input') {\n setPhase('success');\n setTimeout(onNext, 800);\n } else {\n setPhase('error');\n setTimeout(onNext, 1500);\n }\n };\n\n run();\n return () => abortController.abort();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // ─── Loading phase ─────────────────────────────────────────────────────────\n if (phase === 'loading') {\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 {t('verification_node.verifying_title', 'Vérification en cours…')}\n </Title>\n <Subtitle className=\"text-sm text-gray-600 leading-relaxed\">\n {t('verification_node.verifying_desc', 'Nous vérifions vos informations. Cela peut prendre quelques instants.')}\n </Subtitle>\n </div>\n <div className=\"w-full flex justify-center\">\n <div className=\"space-y-5\">\n {steps.map((step, index) => (\n <div key={index} className=\"flex items-start\">\n <div className=\"mr-4 mt-1 flex-shrink-0\">\n {step.status === 'done' ? (\n <div className=\"flex items-center justify-center w-6 h-6 rounded-full bg-[#11E5C5] text-white text-xs\">\n ✓\n </div>\n ) : step.status === 'active' ? (\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\" />\n ) : (\n <div className=\"w-6 h-6 rounded-full border-2 border-gray-300\" />\n )}\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"font-medium text-[#3C3C40] text-sm\">{step.title}</p>\n <p className=\"text-xs text-gray-500 mt-1\">{step.subtitle}</p>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n // ─── Success phase ─────────────────────────────────────────────────────────\n if (phase === 'success') {\n return (\n <div className=\"flex flex-col items-center justify-center h-full px-6 py-8 text-center space-y-4\">\n <img src={checkIcon} alt=\"success\" className=\"w-24 h-24\" />\n <h3 className=\"text-[#3C3C40] font-poppins text-xl font-bold\">\n {t('inpi_verification.success_title', 'Vérification réussie')}\n </h3>\n <p className=\"text-gray-500 text-sm\">\n {t('inpi_verification.success_desc', \"Passage à l'étape suivante…\")}\n </p>\n </div>\n );\n }\n\n // ─── Mismatch phase ────────────────────────────────────────────────────────\n if (phase === 'mismatch') {\n return (\n <MobilePageLayout\n header={\n <div className=\"p-4 text-center bg-white border-b border-gray-100\">\n <Title className=\"text-xl md:text-2xl\">\n {t('inpi_verification.mismatch_title', 'Identité non confirmée')}\n </Title>\n <Subtitle className=\"text-xs text-gray-600 mt-2 md:text-sm\">\n {t(\n 'inpi_verification.mismatch_desc',\n \"Les informations saisies ne correspondent à aucune personne déclarée à l'INPI pour cette société.\",\n )}\n </Subtitle>\n </div>\n }\n footer={\n <PageActions\n primary={\n <Button onClick={onNext} data-cy=\"inpi-mismatch-continue\">\n {t('inpi_verification.mismatch_continue', 'Continuer quand même')}\n </Button>\n }\n secondary={\n <Button variant=\"secondary\" onClick={onPrevious} data-cy=\"inpi-mismatch-go-back\">\n {t('inpi_verification.mismatch_correct', 'Corriger ma saisie')}\n </Button>\n }\n />\n }\n className=\"bg-white\"\n >\n <div className=\"px-4 py-6 pt-8 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-6\">\n <div className=\"flex justify-center\">\n <div className=\"w-20 h-20 rounded-full bg-amber-50 flex items-center justify-center\">\n <svg className=\"w-10 h-10 text-amber-500\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M12 9v2m0 4h.01M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\" />\n </svg>\n </div>\n </div>\n <div className=\"flex items-start bg-amber-50 border border-amber-200 rounded-lg p-4 gap-3\">\n <div className=\"w-5 h-5 rounded-full bg-amber-100 flex items-center justify-center flex-shrink-0 mt-0.5\">\n <svg className=\"w-3 h-3 text-amber-600\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path fillRule=\"evenodd\" d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z\" clipRule=\"evenodd\" />\n </svg>\n </div>\n <p className=\"text-sm text-amber-800\">\n {t(\n 'inpi_verification.mismatch_hint',\n 'Vérifiez que le nom et le prénom saisis correspondent exactement aux informations enregistrées au Registre National des Entreprises.',\n )}\n </p>\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n }\n\n // ─── Error / fallback ─────────────────────────────────────────────────────\n return (\n <LoadingState\n message={t('verification_node.verifying_title', 'Vérification en cours…')}\n subtitle={t('verification_node.verifying_desc', 'Vérification en cours…')}\n />\n );\n};\n\nexport default ExternalVerificationNodeHandler;\n"],"names":["useTranslation","sdkI18n","useState","__assign","__spreadArray","useEffect","__awaiter","apiService","_jsx","_jsxs","Title","Subtitle","checkIcon","MobilePageLayout","PageActions","Button","LoadingState"],"mappings":"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"}