datakeen-session-react 1.1.180 → 1.1.181

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/cjs/components/document-collection/DocumentCollection.js +10 -7
  2. package/dist/cjs/components/document-collection/DocumentCollection.js.map +1 -1
  3. package/dist/cjs/components/document-collection/DocumentError.js +16 -12
  4. package/dist/cjs/components/document-collection/DocumentError.js.map +1 -1
  5. package/dist/cjs/components/document-collection/DocumentProcessing.js +17 -5
  6. package/dist/cjs/components/document-collection/DocumentProcessing.js.map +1 -1
  7. package/dist/cjs/components/jdi/JDIError.js +14 -10
  8. package/dist/cjs/components/jdi/JDIError.js.map +1 -1
  9. package/dist/cjs/components/jdi/JDIProcessing.js +13 -5
  10. package/dist/cjs/components/jdi/JDIProcessing.js.map +1 -1
  11. package/dist/cjs/components/session/DocumentCheck.js +13 -10
  12. package/dist/cjs/components/session/DocumentCheck.js.map +1 -1
  13. package/dist/cjs/components/session/UserInputForm/AddressFields.js +1 -1
  14. package/dist/cjs/components/session/UserInputForm/AddressFields.js.map +1 -1
  15. package/dist/cjs/components/signature-electronic/SignatureElectronic.js +17 -4
  16. package/dist/cjs/components/signature-electronic/SignatureElectronic.js.map +1 -1
  17. package/dist/cjs/components/signature-electronic/SignedDocumentPreview.js +130 -0
  18. package/dist/cjs/components/signature-electronic/SignedDocumentPreview.js.map +1 -0
  19. package/dist/cjs/components/template/ExternalVerificationNodeHandler.js +21 -11
  20. package/dist/cjs/components/template/ExternalVerificationNodeHandler.js.map +1 -1
  21. package/dist/cjs/i18n/en.json.js +9 -3
  22. package/dist/cjs/i18n/en.json.js.map +1 -1
  23. package/dist/cjs/i18n/fr.json.js +9 -3
  24. package/dist/cjs/i18n/fr.json.js.map +1 -1
  25. package/dist/cjs/index.css.js +1 -1
  26. package/dist/cjs/types/session.js.map +1 -1
  27. package/dist/cjs/utils/analysisErrors.js +22 -0
  28. package/dist/cjs/utils/analysisErrors.js.map +1 -0
  29. package/dist/esm/components/document-collection/DocumentCollection.js +10 -7
  30. package/dist/esm/components/document-collection/DocumentCollection.js.map +1 -1
  31. package/dist/esm/components/document-collection/DocumentError.js +17 -13
  32. package/dist/esm/components/document-collection/DocumentError.js.map +1 -1
  33. package/dist/esm/components/document-collection/DocumentProcessing.js +17 -5
  34. package/dist/esm/components/document-collection/DocumentProcessing.js.map +1 -1
  35. package/dist/esm/components/jdi/JDIError.js +15 -11
  36. package/dist/esm/components/jdi/JDIError.js.map +1 -1
  37. package/dist/esm/components/jdi/JDIProcessing.js +13 -5
  38. package/dist/esm/components/jdi/JDIProcessing.js.map +1 -1
  39. package/dist/esm/components/session/DocumentCheck.js +13 -10
  40. package/dist/esm/components/session/DocumentCheck.js.map +1 -1
  41. package/dist/esm/components/session/UserInputForm/AddressFields.js +1 -1
  42. package/dist/esm/components/session/UserInputForm/AddressFields.js.map +1 -1
  43. package/dist/esm/components/signature-electronic/SignatureElectronic.js +17 -4
  44. package/dist/esm/components/signature-electronic/SignatureElectronic.js.map +1 -1
  45. package/dist/esm/components/signature-electronic/SignedDocumentPreview.js +126 -0
  46. package/dist/esm/components/signature-electronic/SignedDocumentPreview.js.map +1 -0
  47. package/dist/esm/components/template/ExternalVerificationNodeHandler.js +21 -11
  48. package/dist/esm/components/template/ExternalVerificationNodeHandler.js.map +1 -1
  49. package/dist/esm/i18n/en.json.js +9 -3
  50. package/dist/esm/i18n/en.json.js.map +1 -1
  51. package/dist/esm/i18n/fr.json.js +9 -3
  52. package/dist/esm/i18n/fr.json.js.map +1 -1
  53. package/dist/esm/index.css.js +1 -1
  54. package/dist/esm/types/session.js.map +1 -1
  55. package/dist/esm/utils/analysisErrors.js +19 -0
  56. package/dist/esm/utils/analysisErrors.js.map +1 -0
  57. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SignatureElectronic.js","sources":["../../../../../src/components/signature-electronic/SignatureElectronic.tsx"],"sourcesContent":["import React, { useState, useMemo, useEffect } from \"react\";\nimport type { stepObject, SessionTemplateNode, SessionData } from \"../../types/session\";\nimport type { UserInput } from \"../../types/userInput\";\nimport type { ContactInfo } from \"../../types/contactInfo\";\nimport { useTranslation } from \"react-i18next\";\nimport sdkI18n from \"../../i18n\";\nimport SignatureElectronicIntroduction from \"./SignatureElectronicIntroduction\";\nimport DocusealSignature from \"./DocusealSignature\";\nimport { updateSessionStatus } from \"../../services/sessionService\";\n\n/**\n * Maps an InformationFieldKey (journey field) to the corresponding UserInput key.\n * This bridges the admin-defined field names to the actual data collected in the SDK.\n */\nconst FIELD_KEY_TO_USER_INPUT: Record<string, (ui: UserInput, ci?: ContactInfo) => string | undefined> = {\n nom: (ui) => ui.lastName,\n denomination_sociale: (ui) => ui.companyName,\n prenom: (ui) => ui.firstName,\n date_naissance: (ui) => ui.birthDate,\n email: (ui, ci) => ui.email || ci?.email,\n sms: (ui, ci) => ui.sms || ui.phoneNumber || ci?.phoneNumber,\n adresse: (ui) => [ui.addressLine1, ui.addressLine2, ui.postalCode, ui.city, ui.countryCode].filter(Boolean).join(', '),\n nationalite: (ui) => ui.nationality,\n siret: (ui) => ui.siret,\n tva: (ui) => ui.tva,\n};\n\ninterface SignatureElectronicProps {\n sessionId: string;\n stepObject: stepObject;\n node: SessionTemplateNode;\n session: SessionData;\n title?: string;\n description?: string;\n external_id?: string;\n fieldMappings?: SessionTemplateNode['fieldMappings'];\n userInput?: UserInput;\n contactInfo?: ContactInfo;\n}\n\nconst SignatureElectronic: React.FC<SignatureElectronicProps> = ({\n sessionId,\n stepObject,\n node,\n session,\n title,\n description,\n external_id,\n fieldMappings,\n userInput,\n contactInfo,\n}) => {\n const { t } = useTranslation(\"translation\", { i18n: sdkI18n });\n const signatureViewStorageKey = useMemo(() => `dk-signature-open:${sessionId}:${external_id ?? \"no-template\"}`, [sessionId, external_id]);\n const [showSignature, setShowSignature] = useState<boolean>(() => {\n if (typeof window === \"undefined\") return false;\n return window.sessionStorage.getItem(signatureViewStorageKey) === \"1\";\n });\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n if (showSignature) {\n window.sessionStorage.setItem(signatureViewStorageKey, \"1\");\n } else {\n window.sessionStorage.removeItem(signatureViewStorageKey);\n }\n }, [showSignature, signatureViewStorageKey]);\n\n /**\n * Build the pre-fill values object from userInput + fieldMappings.\n * Maps each configured field to its value from userInput.\n * Used by DocusealForm's `values` prop for client-side pre-filling.\n */\n const prefillValues = useMemo<Record<string, string> | undefined>(() => {\n if (!fieldMappings || !userInput) return undefined;\n\n const values: Record<string, string> = {};\n\n fieldMappings.forEach(mapping => {\n const resolver = FIELD_KEY_TO_USER_INPUT[mapping.sourceFieldId];\n let value: string | undefined;\n\n if (resolver) {\n value = resolver(userInput, contactInfo);\n } else if (userInput.customFormData) {\n const raw = userInput.customFormData[mapping.sourceFieldId];\n value = raw != null ? String(raw) : undefined;\n }\n\n if (value !== undefined && value !== '') {\n values[mapping.sourceFieldId] = value;\n }\n });\n\n return Object.keys(values).length > 0 ? values : undefined;\n }, [fieldMappings, userInput, contactInfo]);\n\n /**\n * Build the list of field names that should be read-only in the signing form.\n * Only includes fields that are both mapped AND marked as readonly by the admin.\n */\n const readonlyFieldNames = useMemo<string[] | undefined>(() => {\n if (!fieldMappings) return undefined;\n\n const names = fieldMappings\n .filter(m => m.readonly)\n .map(m => m.sourceFieldId);\n\n return names.length > 0 ? names : undefined;\n }, [fieldMappings]);\n\n const handleContinue = () => {\n setShowSignature(true);\n };\n\n const handleComplete = async () => {\n if (typeof window !== \"undefined\") {\n window.sessionStorage.removeItem(signatureViewStorageKey);\n }\n try {\n await updateSessionStatus(sessionId, \"conform\");\n } catch (err) {\n console.error(\"[SignatureElectronic] Failed to update session status:\", err);\n // Non-bloquant : l'utilisateur avance quoi qu'il arrive\n }\n // Progress to the next step via graph edges (pas d'arithmétique — évite de sauter dans la mauvaise branche)\n stepObject.goToNextStep(node.id, session.template);\n };\n\n const handleBack = () => {\n if (showSignature) {\n setShowSignature(false);\n } else {\n if (typeof window !== \"undefined\") {\n window.sessionStorage.removeItem(signatureViewStorageKey);\n }\n stepObject.goBack();\n }\n };\n\n if (showSignature && external_id) {\n return (\n <DocusealSignature\n sessionId={sessionId}\n templateId={external_id}\n templateName={title}\n onComplete={handleComplete}\n onBack={handleBack}\n prefillValues={prefillValues}\n readonlyFieldNames={readonlyFieldNames}\n />\n );\n }\n\n if (showSignature && !external_id) {\n // No template configured — show error instead of silently falling back to intro\n return (\n <div className=\"flex flex-col items-center justify-center h-full p-4 text-center\">\n <div className=\"text-red-500 text-4xl mb-4\">⚠️</div>\n <h2 className=\"text-xl font-bold text-red-600 mb-2\">\n {t(\"signature.error_title\", \"Erreur\")}\n </h2>\n <p className=\"text-gray-600 mb-4\">\n {t(\"signature.no_template\", \"Le modèle de signature n'est pas configuré.\")}\n </p>\n <button\n className=\"px-4 py-2 bg-primary text-white rounded hover:bg-primary-dark transition-colors\"\n onClick={handleBack}\n >\n {t(\"buttons.back\", \"Retour\")}\n </button>\n </div>\n );\n }\n\n return (\n <SignatureElectronicIntroduction\n onContinue={handleContinue}\n onBack={handleBack}\n title={title}\n description={description}\n />\n );\n};\n\nexport default SignatureElectronic;\n"],"names":["useTranslation","sdkI18n","useMemo","useState","useEffect","__awaiter","updateSessionStatus","_jsx","DocusealSignature","_jsxs","SignatureElectronicIntroduction"],"mappings":"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"}
1
+ {"version":3,"file":"SignatureElectronic.js","sources":["../../../../../src/components/signature-electronic/SignatureElectronic.tsx"],"sourcesContent":["import React, { useState, useMemo, useEffect } from \"react\";\nimport type { stepObject, SessionTemplateNode, SessionData } from \"../../types/session\";\nimport type { UserInput } from \"../../types/userInput\";\nimport type { ContactInfo } from \"../../types/contactInfo\";\nimport { useTranslation } from \"react-i18next\";\nimport sdkI18n from \"../../i18n\";\nimport SignatureElectronicIntroduction from \"./SignatureElectronicIntroduction\";\nimport DocusealSignature from \"./DocusealSignature\";\nimport SignedDocumentPreview from \"./SignedDocumentPreview\";\nimport { updateSessionStatus } from \"../../services/sessionService\";\n\n/**\n * Maps an InformationFieldKey (journey field) to the corresponding UserInput key.\n * This bridges the admin-defined field names to the actual data collected in the SDK.\n */\nconst FIELD_KEY_TO_USER_INPUT: Record<string, (ui: UserInput, ci?: ContactInfo) => string | undefined> = {\n nom: (ui) => ui.lastName,\n denomination_sociale: (ui) => ui.companyName,\n prenom: (ui) => ui.firstName,\n date_naissance: (ui) => ui.birthDate,\n email: (ui, ci) => ui.email || ci?.email,\n sms: (ui, ci) => ui.sms || ui.phoneNumber || ci?.phoneNumber,\n adresse: (ui) => [ui.addressLine1, ui.addressLine2, ui.postalCode, ui.city, ui.countryCode].filter(Boolean).join(', '),\n nationalite: (ui) => ui.nationality,\n siret: (ui) => ui.siret,\n tva: (ui) => ui.tva,\n};\n\ninterface SignatureElectronicProps {\n sessionId: string;\n stepObject: stepObject;\n node: SessionTemplateNode;\n session: SessionData;\n title?: string;\n description?: string;\n external_id?: string;\n fieldMappings?: SessionTemplateNode['fieldMappings'];\n userInput?: UserInput;\n contactInfo?: ContactInfo;\n}\n\nconst SignatureElectronic: React.FC<SignatureElectronicProps> = ({\n sessionId,\n stepObject,\n node,\n session,\n title,\n description,\n external_id,\n fieldMappings,\n userInput,\n contactInfo,\n}) => {\n const { t } = useTranslation(\"translation\", { i18n: sdkI18n });\n const signatureViewStorageKey = useMemo(() => `dk-signature-open:${sessionId}:${external_id ?? \"no-template\"}`, [sessionId, external_id]);\n const [showSignature, setShowSignature] = useState<boolean>(() => {\n if (typeof window === \"undefined\") return false;\n return window.sessionStorage.getItem(signatureViewStorageKey) === \"1\";\n });\n const [showSignedDocumentPreview, setShowSignedDocumentPreview] = useState<boolean>(false);\n const [signedAt, setSignedAt] = useState<string | null>(null);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n if (showSignature) {\n window.sessionStorage.setItem(signatureViewStorageKey, \"1\");\n } else {\n window.sessionStorage.removeItem(signatureViewStorageKey);\n }\n }, [showSignature, signatureViewStorageKey]);\n\n /**\n * Build the pre-fill values object from userInput + fieldMappings.\n * Maps each configured field to its value from userInput.\n * Used by DocusealForm's `values` prop for client-side pre-filling.\n */\n const prefillValues = useMemo<Record<string, string> | undefined>(() => {\n if (!fieldMappings || !userInput) return undefined;\n\n const values: Record<string, string> = {};\n\n fieldMappings.forEach(mapping => {\n const resolver = FIELD_KEY_TO_USER_INPUT[mapping.sourceFieldId];\n let value: string | undefined;\n\n if (resolver) {\n value = resolver(userInput, contactInfo);\n } else if (userInput.customFormData) {\n const raw = userInput.customFormData[mapping.sourceFieldId];\n value = raw != null ? String(raw) : undefined;\n }\n\n if (value !== undefined && value !== '') {\n values[mapping.sourceFieldId] = value;\n }\n });\n\n return Object.keys(values).length > 0 ? values : undefined;\n }, [fieldMappings, userInput, contactInfo]);\n\n /**\n * Build the list of field names that should be read-only in the signing form.\n * Only includes fields that are both mapped AND marked as readonly by the admin.\n */\n const readonlyFieldNames = useMemo<string[] | undefined>(() => {\n if (!fieldMappings) return undefined;\n\n const names = fieldMappings\n .filter(m => m.readonly)\n .map(m => m.sourceFieldId);\n\n return names.length > 0 ? names : undefined;\n }, [fieldMappings]);\n\n const handleContinue = () => {\n setShowSignature(true);\n };\n\n const handleComplete = async () => {\n if (typeof window !== \"undefined\") {\n window.sessionStorage.removeItem(signatureViewStorageKey);\n }\n try {\n await updateSessionStatus(sessionId, \"conform\");\n } catch (err) {\n console.error(\"[SignatureElectronic] Failed to update session status:\", err);\n // Non-bloquant : l'utilisateur avance quoi qu'il arrive\n }\n // Toujours montrer le document réellement signé avant de continuer\n // (rassure l'utilisateur — pas de bascule directe vers l'étape suivante).\n setSignedAt(new Date().toISOString());\n setShowSignedDocumentPreview(true);\n };\n\n const handleContinueFromPreview = () => {\n // Progress to the next step via graph edges (pas d'arithmétique — évite de sauter dans la mauvaise branche)\n stepObject.goToNextStep(node.id, session.template);\n };\n\n const handleBack = () => {\n if (showSignature) {\n setShowSignature(false);\n } else {\n if (typeof window !== \"undefined\") {\n window.sessionStorage.removeItem(signatureViewStorageKey);\n }\n stepObject.goBack();\n }\n };\n\n if (showSignedDocumentPreview) {\n return (\n <SignedDocumentPreview\n sessionId={sessionId}\n nodeId={node.id}\n nodeTitle={node.pageTitle || node.title}\n completedAt={signedAt}\n logo={session?.template?.logo}\n onContinue={handleContinueFromPreview}\n />\n );\n }\n\n if (showSignature && external_id) {\n return (\n <DocusealSignature\n sessionId={sessionId}\n templateId={external_id}\n templateName={title}\n onComplete={handleComplete}\n onBack={handleBack}\n prefillValues={prefillValues}\n readonlyFieldNames={readonlyFieldNames}\n />\n );\n }\n\n if (showSignature && !external_id) {\n // No template configured — show error instead of silently falling back to intro\n return (\n <div className=\"flex flex-col items-center justify-center h-full p-4 text-center\">\n <div className=\"text-red-500 text-4xl mb-4\">⚠️</div>\n <h2 className=\"text-xl font-bold text-red-600 mb-2\">\n {t(\"signature.error_title\", \"Erreur\")}\n </h2>\n <p className=\"text-gray-600 mb-4\">\n {t(\"signature.no_template\", \"Le modèle de signature n'est pas configuré.\")}\n </p>\n <button\n className=\"px-4 py-2 bg-primary text-white rounded hover:bg-primary-dark transition-colors\"\n onClick={handleBack}\n >\n {t(\"buttons.back\", \"Retour\")}\n </button>\n </div>\n );\n }\n\n return (\n <SignatureElectronicIntroduction\n onContinue={handleContinue}\n onBack={handleBack}\n title={title}\n description={description}\n />\n );\n};\n\nexport default SignatureElectronic;\n"],"names":["useTranslation","sdkI18n","useMemo","useState","useEffect","__awaiter","updateSessionStatus","_jsx","SignedDocumentPreview","DocusealSignature","_jsxs","SignatureElectronicIntroduction"],"mappings":"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"}
@@ -0,0 +1,130 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var tslib_es6 = require('../../node_modules/tslib/tslib.es6.js');
6
+ var jsxRuntime = require('react/jsx-runtime');
7
+ var React = require('react');
8
+ var lucideReact = require('lucide-react');
9
+ var reactI18next = require('react-i18next');
10
+ var index = require('../../i18n/index.js');
11
+ var api = require('../../services/api.js');
12
+ var LoadingState = require('../states/LoadingState.js');
13
+ var MobilePageLayout = require('../ui/MobilePageLayout.js');
14
+ var PageActions = require('../ui/PageActions.js');
15
+ var Button = require('../ui/Button.js');
16
+
17
+ var STATUS_POLL_INTERVAL_MS = 2000;
18
+ // DocuSeal flags a submission "completed" before generating the flattened
19
+ // signed PDF — 15 attempts (30s) leaves enough margin for that async step.
20
+ var MAX_STATUS_POLL_ATTEMPTS = 15;
21
+ var SignedDocumentPreview = function (_a) {
22
+ var sessionId = _a.sessionId, nodeId = _a.nodeId, nodeTitle = _a.nodeTitle, completedAt = _a.completedAt, logo = _a.logo, onContinue = _a.onContinue;
23
+ var _b = reactI18next.useTranslation("translation", { i18n: index.default }), t = _b.t, i18n = _b.i18n;
24
+ var _c = React.useState("polling"), status = _c[0], setStatus = _c[1];
25
+ var _d = React.useState(null), viewUrl = _d[0], setViewUrl = _d[1];
26
+ var cancelledRef = React.useRef(false);
27
+ React.useEffect(function () {
28
+ cancelledRef.current = false;
29
+ var attempts = 0;
30
+ var timer;
31
+ var fetchAccessLink = function () { return tslib_es6.__awaiter(void 0, void 0, void 0, function () {
32
+ var response, token, baseURL, path;
33
+ var _a, _b;
34
+ return tslib_es6.__generator(this, function (_c) {
35
+ switch (_c.label) {
36
+ case 0: return [4 /*yield*/, api.apiService.get("/session/sdk/".concat(sessionId, "/signed-document/").concat(nodeId, "/access-link"))];
37
+ case 1:
38
+ response = _c.sent();
39
+ token = (_b = (_a = response.data) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.token;
40
+ if (!token) {
41
+ throw new Error("Missing signed document access token");
42
+ }
43
+ baseURL = (api.apiService.getRawClient().defaults.baseURL || "").replace(/\/+$/, "");
44
+ path = "/session/sdk/".concat(sessionId, "/signed-document/").concat(nodeId, "/view?token=").concat(token);
45
+ if (!cancelledRef.current) {
46
+ setViewUrl(baseURL ? "".concat(baseURL).concat(path) : path);
47
+ setStatus("ready");
48
+ }
49
+ return [2 /*return*/];
50
+ }
51
+ });
52
+ }); };
53
+ var poll = function () { return tslib_es6.__awaiter(void 0, void 0, void 0, function () {
54
+ var statusResponse, ready, error, err_1, err_2;
55
+ var _a, _b, _c, _d;
56
+ return tslib_es6.__generator(this, function (_e) {
57
+ switch (_e.label) {
58
+ case 0:
59
+ _e.trys.push([0, 6, , 7]);
60
+ return [4 /*yield*/, api.apiService.get("/session/sdk/".concat(sessionId, "/signed-document/").concat(nodeId, "/status"))];
61
+ case 1:
62
+ statusResponse = _e.sent();
63
+ ready = !!((_b = (_a = statusResponse.data) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.ready);
64
+ error = (_d = (_c = statusResponse.data) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.error;
65
+ if (error === "declined" || error === "expired") {
66
+ if (!cancelledRef.current)
67
+ setStatus(error);
68
+ return [2 /*return*/];
69
+ }
70
+ if (!ready) return [3 /*break*/, 5];
71
+ _e.label = 2;
72
+ case 2:
73
+ _e.trys.push([2, 4, , 5]);
74
+ return [4 /*yield*/, fetchAccessLink()];
75
+ case 3:
76
+ _e.sent();
77
+ return [2 /*return*/];
78
+ case 4:
79
+ err_1 = _e.sent();
80
+ // DocuSeal can report the submission "completed" before the
81
+ // signed document is actually linked — treat like "not ready
82
+ // yet" instead of failing permanently on the first miss.
83
+ console.error("[SignedDocumentPreview] Failed to fetch access link:", err_1);
84
+ return [3 /*break*/, 5];
85
+ case 5:
86
+ attempts += 1;
87
+ if (attempts >= MAX_STATUS_POLL_ATTEMPTS) {
88
+ if (!cancelledRef.current)
89
+ setStatus("error");
90
+ return [2 /*return*/];
91
+ }
92
+ timer = setTimeout(poll, STATUS_POLL_INTERVAL_MS);
93
+ return [3 /*break*/, 7];
94
+ case 6:
95
+ err_2 = _e.sent();
96
+ console.error("[SignedDocumentPreview] Failed to poll signed document status:", err_2);
97
+ attempts += 1;
98
+ if (attempts >= MAX_STATUS_POLL_ATTEMPTS) {
99
+ if (!cancelledRef.current)
100
+ setStatus("error");
101
+ return [2 /*return*/];
102
+ }
103
+ timer = setTimeout(poll, STATUS_POLL_INTERVAL_MS);
104
+ return [3 /*break*/, 7];
105
+ case 7: return [2 /*return*/];
106
+ }
107
+ });
108
+ }); };
109
+ poll();
110
+ return function () {
111
+ cancelledRef.current = true;
112
+ if (timer)
113
+ clearTimeout(timer);
114
+ };
115
+ }, [sessionId, nodeId]);
116
+ if (status === "polling") {
117
+ return (jsxRuntime.jsx(LoadingState.default, { message: t("signed_document.loading", "Préparation du document signé..."), subtitle: "" }));
118
+ }
119
+ var formattedDate = completedAt
120
+ ? new Intl.DateTimeFormat(i18n.language || "fr", {
121
+ day: "numeric",
122
+ month: "long",
123
+ year: "numeric",
124
+ }).format(new Date(completedAt))
125
+ : null;
126
+ return (jsxRuntime.jsx(MobilePageLayout.default, { footer: jsxRuntime.jsx(PageActions.default, { primary: jsxRuntime.jsx(Button.default, { onClick: onContinue, type: "button", children: t("buttons.continue", "Continuer") }) }), children: jsxRuntime.jsxs("div", { className: "flex flex-col items-center h-full px-4 py-8 md:px-8 text-center gap-6", children: [logo && jsxRuntime.jsx("img", { src: logo, alt: "", className: "h-12 max-w-[200px] object-contain" }), status === "ready" && viewUrl && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("div", { className: "w-full max-w-md bg-gray-50 rounded-lg p-4 flex items-start gap-3 text-left", children: [jsxRuntime.jsx(lucideReact.PenTool, { className: "w-5 h-5 shrink-0 mt-0.5 text-gray-500" }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("p", { className: "font-semibold text-gray-900 break-all", children: nodeTitle }), formattedDate && (jsxRuntime.jsxs("p", { className: "text-xs text-gray-500 mt-1", children: [t("signed_document.submitted_on", "Soumis le"), " ", formattedDate] }))] })] }), jsxRuntime.jsx("p", { className: "text-sm text-gray-600", children: t("signed_document.ready_text", "Merci d'avoir signé le document, vous pouvez le consulter en cliquant ci-dessous :") }), jsxRuntime.jsx("a", { href: viewUrl, target: "_blank", rel: "noopener noreferrer", className: "text-primary underline font-medium", children: t("signed_document.view_link", "Consulter le document ↗") })] })), status === "error" && (jsxRuntime.jsx("p", { className: "text-sm text-gray-600 py-8", children: t("signed_document.error", "Le document n'a pas pu être chargé, mais votre signature est bien enregistrée. Vous pouvez continuer.") })), status === "declined" && (jsxRuntime.jsx("p", { className: "text-sm text-gray-600 py-8", children: t("signed_document.declined", "Vous avez refusé de signer ce document.") })), status === "expired" && (jsxRuntime.jsx("p", { className: "text-sm text-gray-600 py-8", children: t("signed_document.expired", "Le lien de signature a expiré.") }))] }) }));
127
+ };
128
+
129
+ exports.default = SignedDocumentPreview;
130
+ //# sourceMappingURL=SignedDocumentPreview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignedDocumentPreview.js","sources":["../../../../../src/components/signature-electronic/SignedDocumentPreview.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from \"react\";\nimport { PenTool } from \"lucide-react\";\nimport { useTranslation } from \"react-i18next\";\nimport sdkI18n from \"../../i18n\";\nimport { apiService } from \"../../services/api\";\nimport LoadingState from \"../states/LoadingState\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport PageActions from \"../ui/PageActions\";\nimport Button from \"../ui/Button\";\n\ninterface SignedDocumentPreviewProps {\n sessionId: string;\n nodeId: string;\n nodeTitle: string;\n completedAt: string | null;\n logo?: string;\n onContinue: () => void;\n}\n\nconst STATUS_POLL_INTERVAL_MS = 2000;\n// DocuSeal flags a submission \"completed\" before generating the flattened\n// signed PDF — 15 attempts (30s) leaves enough margin for that async step.\nconst MAX_STATUS_POLL_ATTEMPTS = 15;\n\nconst SignedDocumentPreview: React.FC<SignedDocumentPreviewProps> = ({\n sessionId,\n nodeId,\n nodeTitle,\n completedAt,\n logo,\n onContinue,\n}) => {\n const { t, i18n } = useTranslation(\"translation\", { i18n: sdkI18n });\n const [status, setStatus] = useState<\"polling\" | \"ready\" | \"error\" | \"declined\" | \"expired\">(\n \"polling\",\n );\n const [viewUrl, setViewUrl] = useState<string | null>(null);\n const cancelledRef = useRef(false);\n\n useEffect(() => {\n cancelledRef.current = false;\n let attempts = 0;\n let timer: ReturnType<typeof setTimeout> | undefined;\n\n const fetchAccessLink = async () => {\n const response = await apiService.get(\n `/session/sdk/${sessionId}/signed-document/${nodeId}/access-link`,\n );\n const token = response.data?.data?.token;\n if (!token) {\n throw new Error(\"Missing signed document access token\");\n }\n\n const baseURL = (apiService.getRawClient().defaults.baseURL || \"\").replace(\n /\\/+$/,\n \"\",\n );\n const path = `/session/sdk/${sessionId}/signed-document/${nodeId}/view?token=${token}`;\n\n if (!cancelledRef.current) {\n setViewUrl(baseURL ? `${baseURL}${path}` : path);\n setStatus(\"ready\");\n }\n };\n\n const poll = async () => {\n try {\n const statusResponse = await apiService.get(\n `/session/sdk/${sessionId}/signed-document/${nodeId}/status`,\n );\n const ready = !!statusResponse.data?.data?.ready;\n const error = statusResponse.data?.data?.error as\n | \"declined\"\n | \"expired\"\n | undefined;\n\n if (error === \"declined\" || error === \"expired\") {\n if (!cancelledRef.current) setStatus(error);\n return;\n }\n\n if (ready) {\n try {\n await fetchAccessLink();\n return;\n } catch (err) {\n // DocuSeal can report the submission \"completed\" before the\n // signed document is actually linked — treat like \"not ready\n // yet\" instead of failing permanently on the first miss.\n console.error(\n \"[SignedDocumentPreview] Failed to fetch access link:\",\n err,\n );\n }\n }\n\n attempts += 1;\n if (attempts >= MAX_STATUS_POLL_ATTEMPTS) {\n if (!cancelledRef.current) setStatus(\"error\");\n return;\n }\n timer = setTimeout(poll, STATUS_POLL_INTERVAL_MS);\n } catch (err) {\n console.error(\"[SignedDocumentPreview] Failed to poll signed document status:\", err);\n attempts += 1;\n if (attempts >= MAX_STATUS_POLL_ATTEMPTS) {\n if (!cancelledRef.current) setStatus(\"error\");\n return;\n }\n timer = setTimeout(poll, STATUS_POLL_INTERVAL_MS);\n }\n };\n\n poll();\n\n return () => {\n cancelledRef.current = true;\n if (timer) clearTimeout(timer);\n };\n }, [sessionId, nodeId]);\n\n if (status === \"polling\") {\n return (\n <LoadingState\n message={t(\"signed_document.loading\", \"Préparation du document signé...\")}\n subtitle=\"\"\n />\n );\n }\n\n const formattedDate = completedAt\n ? new Intl.DateTimeFormat(i18n.language || \"fr\", {\n day: \"numeric\",\n month: \"long\",\n year: \"numeric\",\n }).format(new Date(completedAt))\n : null;\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button onClick={onContinue} type=\"button\">\n {t(\"buttons.continue\", \"Continuer\")}\n </Button>\n }\n />\n }\n >\n <div className=\"flex flex-col items-center h-full px-4 py-8 md:px-8 text-center gap-6\">\n {logo && <img src={logo} alt=\"\" className=\"h-12 max-w-[200px] object-contain\" />}\n\n {status === \"ready\" && viewUrl && (\n <>\n <div className=\"w-full max-w-md bg-gray-50 rounded-lg p-4 flex items-start gap-3 text-left\">\n <PenTool className=\"w-5 h-5 shrink-0 mt-0.5 text-gray-500\" />\n <div>\n <p className=\"font-semibold text-gray-900 break-all\">{nodeTitle}</p>\n {formattedDate && (\n <p className=\"text-xs text-gray-500 mt-1\">\n {t(\"signed_document.submitted_on\", \"Soumis le\")} {formattedDate}\n </p>\n )}\n </div>\n </div>\n\n <p className=\"text-sm text-gray-600\">\n {t(\n \"signed_document.ready_text\",\n \"Merci d'avoir signé le document, vous pouvez le consulter en cliquant ci-dessous :\",\n )}\n </p>\n\n <a\n href={viewUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-primary underline font-medium\"\n >\n {t(\"signed_document.view_link\", \"Consulter le document ↗\")}\n </a>\n </>\n )}\n\n {status === \"error\" && (\n <p className=\"text-sm text-gray-600 py-8\">\n {t(\n \"signed_document.error\",\n \"Le document n'a pas pu être chargé, mais votre signature est bien enregistrée. Vous pouvez continuer.\",\n )}\n </p>\n )}\n {status === \"declined\" && (\n <p className=\"text-sm text-gray-600 py-8\">\n {t(\"signed_document.declined\", \"Vous avez refusé de signer ce document.\")}\n </p>\n )}\n {status === \"expired\" && (\n <p className=\"text-sm text-gray-600 py-8\">\n {t(\"signed_document.expired\", \"Le lien de signature a expiré.\")}\n </p>\n )}\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default SignedDocumentPreview;\n"],"names":["useTranslation","sdkI18n","useState","useRef","useEffect","__awaiter","apiService","_jsx","LoadingState","MobilePageLayout","PageActions","Button","_jsxs","_Fragment","PenTool"],"mappings":"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"}
@@ -68,13 +68,16 @@ var ExternalVerificationNodeHandler = function (_a) {
68
68
  if (isInpiRbe) {
69
69
  return [
70
70
  {
71
- title: t('inpi_verification.step1', 'Appel au RNE'),
72
- subtitle: t('inpi_verification.step1_sub', 'Connexion au registre national des entreprises'),
71
+ // Générique : le backend interroge le RNE puis, si besoin, le RNA en
72
+ // fallback (associations) via un seul appel la source réelle n'est
73
+ // connue qu'à la réponse finale (cf. inpiData.source).
74
+ title: t('inpi_verification.step1', 'Vérification du SIREN auprès des registres officiels'),
75
+ subtitle: t('inpi_verification.step1_sub', 'Connexion aux registres RNE et RNA'),
73
76
  status: 'active',
74
77
  },
75
78
  {
76
- title: t('inpi_verification.step2', "Récupération des données d'entreprise"),
77
- subtitle: t('inpi_verification.step2_sub', 'Lecture des informations légales et des dirigeants'),
79
+ title: t('inpi_verification.step2', "Récupération des données d'identité"),
80
+ subtitle: t('inpi_verification.step2_sub', 'Lecture des informations légales et des responsables'),
78
81
  status: 'pending',
79
82
  },
80
83
  {
@@ -192,7 +195,7 @@ var ExternalVerificationNodeHandler = function (_a) {
192
195
  _s.label = 4;
193
196
  case 4:
194
197
  _s.trys.push([4, 7, , 8]);
195
- return [4 /*yield*/, api.apiService.post("/session/sdk/".concat(session.id, "/verify-external/").concat(node.id), tslib_es6.__assign({ apiType: apiType, referenceValue: referenceValue, referenceField: referenceField }, (comparisonConfig ? { comparisonConfig: comparisonConfig } : {})), { signal: abortController.signal })];
198
+ return [4 /*yield*/, api.apiService.post("/session/sdk/".concat(session.id, "/verify-external/").concat(node.id), tslib_es6.__assign({ apiType: apiType, referenceValue: referenceValue, referenceField: referenceField, enableRnaFallback: isInpiRbe && nodeData.rnaFallbackEnabled === true }, (comparisonConfig ? { comparisonConfig: comparisonConfig } : {})), { signal: abortController.signal })];
196
199
  case 5:
197
200
  response = _s.sent();
198
201
  if (isInpiRbe)
@@ -265,6 +268,7 @@ var ExternalVerificationNodeHandler = function (_a) {
265
268
  personNodeId: (_r = cfg === null || cfg === void 0 ? void 0 : cfg.personReferenceNodeId) !== null && _r !== void 0 ? _r : '',
266
269
  siren: resolvedReferenceValue,
267
270
  sirenNodeId: referenceNodeId,
271
+ source: inpi === null || inpi === void 0 ? void 0 : inpi.source,
268
272
  });
269
273
  setPhase('mismatch');
270
274
  }
@@ -278,6 +282,7 @@ var ExternalVerificationNodeHandler = function (_a) {
278
282
  personNodeId: '',
279
283
  siren: resolvedReferenceValue,
280
284
  sirenNodeId: referenceNodeId,
285
+ isDoubleNotFound: result.errorCode === 'NOT_FOUND_RNE_RNA',
281
286
  });
282
287
  setPhase('not_found');
283
288
  }
@@ -327,11 +332,14 @@ var ExternalVerificationNodeHandler = function (_a) {
327
332
  var showBeneficiaires = ((_b = d === null || d === void 0 ? void 0 : d.compareTargets) === null || _b === void 0 ? void 0 : _b.includes('beneficiairesEffectifs')) && ((_d = (_c = d === null || d === void 0 ? void 0 : d.beneficiairesEffectifs) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0) > 0;
328
333
  var showMandataires = (!((_e = d === null || d === void 0 ? void 0 : d.compareTargets) === null || _e === void 0 ? void 0 : _e.length) || ((_f = d === null || d === void 0 ? void 0 : d.compareTargets) === null || _f === void 0 ? void 0 : _f.includes('mandataires'))) &&
329
334
  ((_h = (_g = d === null || d === void 0 ? void 0 : d.mandataires) === null || _g === void 0 ? void 0 : _g.length) !== null && _h !== void 0 ? _h : 0) > 0;
330
- var personListLabel = ((_j = d === null || d === void 0 ? void 0 : d.compareTargets) === null || _j === void 0 ? void 0 : _j.includes('beneficiairesEffectifs')) && !((_k = d === null || d === void 0 ? void 0 : d.compareTargets) === null || _k === void 0 ? void 0 : _k.includes('mandataires'))
331
- ? t('inpi_verification.beneficiaires_label', 'Bénéficiaires effectifs renseignés au RNE')
332
- : ((_l = d === null || d === void 0 ? void 0 : d.compareTargets) === null || _l === void 0 ? void 0 : _l.includes('mandataires')) && !((_m = d === null || d === void 0 ? void 0 : d.compareTargets) === null || _m === void 0 ? void 0 : _m.includes('beneficiairesEffectifs'))
333
- ? t('inpi_verification.mandataires_label', 'Mandataires renseignés au RNE')
334
- : t('inpi_verification.persons_label', 'Personnes renseignées au RNE');
335
+ var isRna = (d === null || d === void 0 ? void 0 : d.source) === 'RNA';
336
+ var personListLabel = isRna
337
+ ? t('inpi_verification.dirigeants_label', 'Dirigeants renseignés au RNA')
338
+ : ((_j = d === null || d === void 0 ? void 0 : d.compareTargets) === null || _j === void 0 ? void 0 : _j.includes('beneficiairesEffectifs')) && !((_k = d === null || d === void 0 ? void 0 : d.compareTargets) === null || _k === void 0 ? void 0 : _k.includes('mandataires'))
339
+ ? t('inpi_verification.beneficiaires_label', 'Bénéficiaires effectifs renseignés au RNE')
340
+ : ((_l = d === null || d === void 0 ? void 0 : d.compareTargets) === null || _l === void 0 ? void 0 : _l.includes('mandataires')) && !((_m = d === null || d === void 0 ? void 0 : d.compareTargets) === null || _m === void 0 ? void 0 : _m.includes('beneficiairesEffectifs'))
341
+ ? t('inpi_verification.mandataires_label', 'Mandataires renseignés au RNE')
342
+ : t('inpi_verification.persons_label', 'Personnes renseignées au RNE');
335
343
  return (jsxRuntime.jsxs("div", { className: "flex flex-col justify-between h-full w-full", children: [jsxRuntime.jsx("div", { className: "flex-1 px-4 py-6 pt-11 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: "text-center", children: jsxRuntime.jsx("div", { className: "mx-auto w-16 h-16 bg-red-100 rounded-full flex items-center justify-center mb-4", children: jsxRuntime.jsx("div", { className: "w-8 h-8 bg-red-500 rounded-full flex items-center justify-center", children: jsxRuntime.jsx("span", { className: "text-white text-lg", children: "\u2715" }) }) }) }), jsxRuntime.jsxs("div", { className: "text-center space-y-4", children: [jsxRuntime.jsx(Title.default, { className: "text-xl md:text-2xl lg:text-3xl text-red-600", children: t('inpi_verification.mismatch_title', 'Identité non confirmée') }), jsxRuntime.jsx(Subtitle.default, { className: "text-sm text-gray-600 leading-relaxed", children: t('inpi_verification.mismatch_desc', "Les informations saisies ne correspondent à aucune personne déclarée à l'INPI pour cette société.") })] }), d && (d.submittedLastName || d.submittedFirstName) && (jsxRuntime.jsxs("div", { className: "bg-red-50 border border-red-200 rounded-lg p-4", children: [jsxRuntime.jsx("h3", { className: "font-medium text-red-900 mb-2", children: t('errors.problems_detected', 'Problèmes détectés') }), jsxRuntime.jsxs("div", { className: "text-sm text-red-800 space-y-1", children: [d.submittedLastName && (jsxRuntime.jsxs("p", { children: [t('inpi_verification.submitted_last_name', 'Nom saisi'), ' : ', jsxRuntime.jsx("strong", { children: d.submittedLastName })] })), d.submittedFirstName && (jsxRuntime.jsxs("p", { children: [t('inpi_verification.submitted_first_name', 'Prénom saisi'), ' : ', jsxRuntime.jsx("strong", { children: d.submittedFirstName })] }))] })] })), (showMandataires || showBeneficiaires) && (jsxRuntime.jsxs("div", { className: "bg-blue-50 border border-blue-200 rounded-lg p-4", children: [jsxRuntime.jsx("h3", { className: "font-medium text-blue-900 mb-2", children: personListLabel }), jsxRuntime.jsxs("div", { className: "text-sm text-blue-800 space-y-1", children: [showMandataires && d.mandataires.map(function (m, i) {
336
344
  var _a, _b;
337
345
  return (jsxRuntime.jsxs("p", { children: [jsxRuntime.jsx("strong", { children: (_a = m.nom) !== null && _a !== void 0 ? _a : '—' }), ((_b = m.prenoms) !== null && _b !== void 0 ? _b : []).length > 0 && " ".concat(m.prenoms.join(' '))] }, "m-".concat(i)));
@@ -343,7 +351,9 @@ var ExternalVerificationNodeHandler = function (_a) {
343
351
  // ─── Not found phase ───────────────────────────────────────────────────────
344
352
  if (phase === 'not_found') {
345
353
  var d = errorScreenData;
346
- return (jsxRuntime.jsxs("div", { className: "flex flex-col justify-between h-full w-full", children: [jsxRuntime.jsx("div", { className: "flex-1 px-4 py-6 pt-11 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: "text-center", children: jsxRuntime.jsx("div", { className: "mx-auto w-16 h-16 bg-orange-100 rounded-full flex items-center justify-center mb-4", children: jsxRuntime.jsx("div", { className: "w-8 h-8 bg-orange-500 rounded-full flex items-center justify-center", children: jsxRuntime.jsx("span", { className: "text-white text-lg font-bold", children: "!" }) }) }) }), jsxRuntime.jsxs("div", { className: "text-center space-y-4", children: [jsxRuntime.jsx(Title.default, { className: "text-xl md:text-2xl lg:text-3xl text-orange-600", children: t('inpi_verification.not_found_title', 'Société introuvable') }), jsxRuntime.jsx(Subtitle.default, { className: "text-sm text-gray-600 leading-relaxed", children: t('inpi_verification.not_found_desc', "Le numéro saisi ne correspond à aucune société enregistrée dans le Registre National des Entreprises.") })] }), jsxRuntime.jsxs("div", { className: "bg-orange-50 border border-orange-200 rounded-lg p-4", children: [jsxRuntime.jsx("h3", { className: "font-medium text-orange-900 mb-2", children: t('errors.problems_detected', 'Problèmes détectés') }), jsxRuntime.jsxs("div", { className: "text-sm text-orange-800 space-y-1", children: [(d === null || d === void 0 ? void 0 : d.siren) && (jsxRuntime.jsxs("p", { children: [t('inpi_verification.siren_label', 'SIREN'), ' : ', jsxRuntime.jsx("strong", { children: d.siren })] })), jsxRuntime.jsx("p", { children: t('inpi_verification.not_found_detail', 'Aucune société trouvée dans le Registre National des Entreprises.') })] })] })] }) }), jsxRuntime.jsx("div", { className: "sticky bottom-0 md:static bg-white border-t md:border-t-0 p-4 md:p-0 md:pb-8", children: jsxRuntime.jsxs("div", { className: "w-full max-w-md mx-auto", children: [jsxRuntime.jsxs("div", { className: "flex flex-col space-y-3 md:hidden", children: [jsxRuntime.jsx(Button.default, { variant: "secondary", onClick: handleCorrect, "data-cy": "inpi-not-found-go-back", children: t('inpi_verification.mismatch_correct', 'Corriger ma saisie') }), jsxRuntime.jsx(Button.default, { onClick: onNext, "data-cy": "inpi-not-found-continue", children: t('inpi_verification.mismatch_continue', 'Continuer quand même') })] }), jsxRuntime.jsxs("div", { className: "hidden md:flex justify-center space-x-3", children: [jsxRuntime.jsx(Button.default, { variant: "secondary", onClick: handleCorrect, "data-cy": "inpi-not-found-go-back", children: t('inpi_verification.mismatch_correct', 'Corriger ma saisie') }), jsxRuntime.jsx(Button.default, { onClick: onNext, "data-cy": "inpi-not-found-continue", children: t('inpi_verification.mismatch_continue', 'Continuer quand même') })] })] }) })] }));
354
+ return (jsxRuntime.jsxs("div", { className: "flex flex-col justify-between h-full w-full", children: [jsxRuntime.jsx("div", { className: "flex-1 px-4 py-6 pt-11 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: "text-center", children: jsxRuntime.jsx("div", { className: "mx-auto w-16 h-16 bg-orange-100 rounded-full flex items-center justify-center mb-4", children: jsxRuntime.jsx("div", { className: "w-8 h-8 bg-orange-500 rounded-full flex items-center justify-center", children: jsxRuntime.jsx("span", { className: "text-white text-lg font-bold", children: "!" }) }) }) }), jsxRuntime.jsxs("div", { className: "text-center space-y-4", children: [jsxRuntime.jsx(Title.default, { className: "text-xl md:text-2xl lg:text-3xl text-orange-600", children: t('inpi_verification.not_found_title', 'Société introuvable') }), jsxRuntime.jsx(Subtitle.default, { className: "text-sm text-gray-600 leading-relaxed", children: t('inpi_verification.not_found_desc', "Le numéro saisi ne correspond à aucune société enregistrée dans le Registre National des Entreprises.") })] }), jsxRuntime.jsxs("div", { className: "bg-orange-50 border border-orange-200 rounded-lg p-4", children: [jsxRuntime.jsx("h3", { className: "font-medium text-orange-900 mb-2", children: t('errors.problems_detected', 'Problèmes détectés') }), jsxRuntime.jsxs("div", { className: "text-sm text-orange-800 space-y-1", children: [(d === null || d === void 0 ? void 0 : d.siren) && (jsxRuntime.jsxs("p", { children: [t('inpi_verification.siren_label', 'SIREN'), ' : ', jsxRuntime.jsx("strong", { children: d.siren })] })), jsxRuntime.jsx("p", { children: (d === null || d === void 0 ? void 0 : d.isDoubleNotFound)
355
+ ? t('inpi_verification.not_found_detail_rne_rna', "Aucune société ni association trouvée, ni dans le Registre National des Entreprises (RNE), ni dans le Répertoire National des Associations (RNA).")
356
+ : t('inpi_verification.not_found_detail', 'Aucune société trouvée dans le Registre National des Entreprises.') })] })] })] }) }), jsxRuntime.jsx("div", { className: "sticky bottom-0 md:static bg-white border-t md:border-t-0 p-4 md:p-0 md:pb-8", children: jsxRuntime.jsxs("div", { className: "w-full max-w-md mx-auto", children: [jsxRuntime.jsxs("div", { className: "flex flex-col space-y-3 md:hidden", children: [jsxRuntime.jsx(Button.default, { variant: "secondary", onClick: handleCorrect, "data-cy": "inpi-not-found-go-back", children: t('inpi_verification.mismatch_correct', 'Corriger ma saisie') }), jsxRuntime.jsx(Button.default, { onClick: onNext, "data-cy": "inpi-not-found-continue", children: t('inpi_verification.mismatch_continue', 'Continuer quand même') })] }), jsxRuntime.jsxs("div", { className: "hidden md:flex justify-center space-x-3", children: [jsxRuntime.jsx(Button.default, { variant: "secondary", onClick: handleCorrect, "data-cy": "inpi-not-found-go-back", children: t('inpi_verification.mismatch_correct', 'Corriger ma saisie') }), jsxRuntime.jsx(Button.default, { onClick: onNext, "data-cy": "inpi-not-found-continue", children: t('inpi_verification.mismatch_continue', 'Continuer quand même') })] })] }) })] }));
347
357
  }
348
358
  // ─── Error / fallback ─────────────────────────────────────────────────────
349
359
  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…') }));