datakeen-session-react 1.1.140-dev.24 → 1.1.140-dev.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -15,11 +15,26 @@
15
15
  | `staging` | [![pipeline](https://gitlab.com/datakeenteam/teamfullstack/client-sessions-react-sdk/badges/staging/pipeline.svg)](https://gitlab.com/datakeenteam/teamfullstack/client-sessions-react-sdk/-/pipelines) | [![coverage](https://gitlab.com/datakeenteam/teamfullstack/client-sessions-react-sdk/badges/staging/coverage.svg)](https://gitlab.com/datakeenteam/teamfullstack/client-sessions-react-sdk/-/commits/staging) | [![npm rc](https://img.shields.io/npm/v/datakeen-session-react/rc?label=%40rc&color=orange)](https://www.npmjs.com/package/datakeen-session-react?activeTab=versions) |
16
16
  | `dev` | [![pipeline](https://gitlab.com/datakeenteam/teamfullstack/client-sessions-react-sdk/badges/dev/pipeline.svg)](https://gitlab.com/datakeenteam/teamfullstack/client-sessions-react-sdk/-/pipelines) | [![coverage](https://gitlab.com/datakeenteam/teamfullstack/client-sessions-react-sdk/badges/dev/coverage.svg)](https://gitlab.com/datakeenteam/teamfullstack/client-sessions-react-sdk/-/commits/dev) | [![npm dev](https://img.shields.io/npm/v/datakeen-session-react/dev?label=%40dev&color=yellow)](https://www.npmjs.com/package/datakeen-session-react?activeTab=versions) |
17
17
 
18
- <div style="color: #3C3C40; font-size: 16px;">
18
+ ---
19
19
 
20
- ## 📦 Installation du SDK
20
+ ## Table des matières
21
21
 
22
- Pour intégrer le SDK Datakeen Session dans votre projet React, vous pouvez utiliser npm, yarn ou pnpm :
22
+ 1. [Installation](#installation)
23
+ 2. [Stratégie de publication](#stratégie-de-publication)
24
+ 3. [Démarrage rapide](#démarrage-rapide)
25
+ 4. [API publique](#api-publique)
26
+ 5. [Configuration de l'URL API](#configuration-de-lurl-api)
27
+ 6. [Flux de vérification supportés](#flux-de-vérification-supportés)
28
+ 7. [Architecture du SDK](#architecture-du-sdk)
29
+ 8. [Système de polling](#système-de-polling)
30
+ 9. [Internationalisation (i18n)](#internationalisation-i18n)
31
+ 10. [Documentation avancée](#documentation-avancée)
32
+ 11. [Développement et tests](#développement-et-tests)
33
+ 12. [Support](#support)
34
+
35
+ ---
36
+
37
+ ## Installation
23
38
 
24
39
  ```bash
25
40
  # Via npm
@@ -32,200 +47,537 @@ yarn add datakeen-session-react
32
47
  pnpm add datakeen-session-react
33
48
  ```
34
49
 
35
- ### 🔖 Stratégie de publication automatique multi-environnements
36
-
37
- Le SDK utilise une **pipeline CI/CD automatisée** qui publie automatiquement sur npm avec trois tags distincts selon la branche Git :
38
-
39
- | Branche Git | Tag NPM | Format de version | Environnement | Commande d'installation |
40
- | ----------- | --------- | ----------------------------------- | --------------------------- | ---------------------------------------- |
41
- | `main` | `@latest` | `1.1.135` (Stable) | **Production** | `npm install datakeen-session-react` |
42
- | `staging` | `@rc` | `1.1.135-rc.0` (Release Candidate) | **Pré-production** (QA/UAT) | `npm install datakeen-session-react@rc` |
43
- | `dev` | `@dev` | `1.1.135-dev.3` (Integration Build) | **Développement** | `npm install datakeen-session-react@dev` |
44
-
45
- #### 📦 Installation par environnement
50
+ ### Peer dependencies requises
46
51
 
47
52
  ```bash
48
- # Production (stable) - par défaut
49
- npm install datakeen-session-react
50
- # ou explicitement
51
- npm install datakeen-session-react@latest
53
+ npm install axios react react-dom
54
+ # axios@^1.8.0 react@^18.0.0 react-dom@^18.0.0
55
+ ```
52
56
 
53
- # Pré-production (Release Candidate pour tests QA/UAT)
54
- npm install datakeen-session-react@rc
57
+ ---
55
58
 
56
- # Développement (dernières fonctionnalités en cours)
57
- npm install datakeen-session-react@dev
58
- ```
59
+ ## Stratégie de publication
60
+
61
+ Le SDK utilise une **pipeline CI/CD automatisée** qui publie sur npm avec trois tags distincts selon la branche Git :
59
62
 
60
- #### 🔄 Processus de publication automatique
63
+ | Branche Git | Tag NPM | Format de version | Environnement | Commande d'installation |
64
+ |-------------|-----------|---------------------------|--------------------|------------------------------------------|
65
+ | `main` | `@latest` | `1.1.x` (Stable) | **Production** | `npm install datakeen-session-react` |
66
+ | `staging` | `@rc` | `1.1.x-rc.y` (RC) | **Pré-production** | `npm install datakeen-session-react@rc` |
67
+ | `dev` | `@dev` | `1.1.x-dev.y` (Dev Build) | **Développement** | `npm install datakeen-session-react@dev` |
61
68
 
62
69
  Chaque merge sur les branches principales déclenche automatiquement :
63
70
 
64
- 1. **Branche `dev`** → Incrémente la pré-version → Publie sur `@dev` (ex: `1.1.135-dev.0`, `1.1.135-dev.1`, ...)
65
- 2. **Branche `staging`** → Incrémente la pré-version RC → Publie sur `@rc` (ex: `1.1.135-rc.0`, `1.1.135-rc.1`, ...)
66
- 3. **Branche `main`** → Incrémente le patch → Publie sur `@latest` (ex: `1.1.135`, `1.1.136`, ...)
71
+ 1. **`dev`** → Incrémente la pré-version → Publie sur `@dev`
72
+ 2. **`staging`** → Incrémente la RC → Publie sur `@rc`
73
+ 3. **`main`** → Incrémente le patch → Publie sur `@latest`
67
74
 
68
- > **💡 Note :** Ce système permet de tester et valider les nouvelles fonctionnalités à travers plusieurs environnements avant leur déploiement en production, garantissant ainsi la stabilité du SDK.
75
+ ---
69
76
 
70
- ## 🚀 Guide de démarrage rapide
77
+ ## Démarrage rapide
71
78
 
72
79
  ### Prérequis
73
80
 
74
- - Une application React fonctionnelle (React 16.8+ recommandé pour support des Hooks)
81
+ - React 18+
75
82
  - Un identifiant de session Datakeen valide (obtenu via l'API Datakeen)
76
83
 
77
- ### Étape 1 : Importer le SDK
84
+ ### Option 1 Hook `useSession` (recommandé)
78
85
 
79
- ```jsx
86
+ ```tsx
80
87
  import useSession from "datakeen-session-react";
88
+
89
+ const VerificationPage = () => {
90
+ const { SessionComponent } = useSession(
91
+ "votre-session-id",
92
+ { selfie: false, requireMobile: false }, // optionnel
93
+ "https://app-v3.datakeen.co/backend" // optionnel
94
+ );
95
+
96
+ return <div>{SessionComponent}</div>;
97
+ };
81
98
  ```
82
99
 
83
- ### Étape 2 : Initialiser et afficher la session
100
+ ### Option 2 Composant `DatakeenSession`
84
101
 
85
- ```jsx
86
- const MonComposant = () => {
87
- // Initialisation avec l'ID de session
88
- const { SessionComponent } = useSession("votre-session-id");
102
+ ```tsx
103
+ import { DatakeenSession } from "datakeen-session-react";
89
104
 
90
- return (
91
- <div>
92
- {/* Intégrez le composant de session où vous le souhaitez */}
93
- {SessionComponent}
94
- </div>
95
- );
96
- };
105
+ const VerificationPage = () => (
106
+ <DatakeenSession
107
+ sessionId="votre-session-id"
108
+ sessionConfig={{ selfie: false, requireMobile: false }}
109
+ apiBaseUrl="https://app-v3.datakeen.co/backend"
110
+ />
111
+ );
112
+ ```
113
+
114
+ ### Option 3 — Configuration globale avec `ConfigProvider`
115
+
116
+ ```tsx
117
+ import { DatakeenSession, ConfigProvider } from "datakeen-session-react";
118
+
119
+ const App = () => (
120
+ <ConfigProvider apiBaseUrl="https://app-v3.datakeen.co/backend">
121
+ <DatakeenSession sessionId="votre-session-id" />
122
+ </ConfigProvider>
123
+ );
97
124
  ```
98
125
 
99
- ## 💡 Cas d'utilisation courants
126
+ ---
127
+
128
+ ## API publique
100
129
 
101
- ### Intégration dans une page de vérification d'identité
130
+ ### `useSession(sessionId, sessionConfig?, apiBaseUrl?)` Hook principal
102
131
 
103
- ```jsx
104
- import React from "react";
132
+ ```typescript
105
133
  import useSession from "datakeen-session-react";
106
134
 
107
- const VerificationPage = () => {
108
- // Vous pouvez récupérer l'ID de session depuis votre backend
109
- const sessionId = "votre-session-id";
110
- const { SessionComponent } = useSession(sessionId);
111
-
112
- return (
113
- <div className="verification-container">
114
- <h1>Vérification d'identité</h1>
115
- <p>Merci de suivre les étapes ci-dessous pour vérifier votre identité</p>
116
-
117
- {/* Le SDK gère automatiquement toutes les étapes du processus */}
118
- <div className="session-wrapper">{SessionComponent}</div>
119
- </div>
120
- );
121
- };
135
+ const { SessionComponent } = useSession(
136
+ sessionId: string,
137
+ sessionConfig?: SessionConfig,
138
+ apiBaseUrl?: string
139
+ );
122
140
  ```
123
141
 
124
- ### Intégration dans un flux d'onboarding
142
+ | Paramètre | Type | Requis | Description |
143
+ |-----------|------|--------|-------------|
144
+ | `sessionId` | `string` | ✅ | ID unique de la session Datakeen |
145
+ | `sessionConfig` | `SessionConfig` | ❌ | Options de configuration du flux |
146
+ | `apiBaseUrl` | `string` | ❌ | URL de base de l'API (override la config globale) |
125
147
 
126
- ```jsx
127
- import React, { useState } from "react";
128
- import useSession from "datakeen-session-react";
148
+ **`SessionConfig`**
129
149
 
130
- const OnboardingFlow = () => {
131
- const [step, setStep] = useState(1);
132
- const [sessionId, setSessionId] = useState(null);
133
-
134
- // Fonction pour initialiser la session après l'étape 1
135
- const initializeSession = async (userData) => {
136
- // Exemple d'appel API pour obtenir un ID de session
137
- const response = await fetch("https://api.votreservice.com/init-session", {
138
- method: "POST",
139
- body: JSON.stringify(userData),
140
- });
141
-
142
- const data = await response.json();
143
- setSessionId(data.sessionId);
144
- setStep(2);
145
- };
146
-
147
- // Rendu conditionnel basé sur l'étape
148
- if (step === 1) {
149
- return (
150
- <div>
151
- <h2>Étape 1: Informations de base</h2>
152
- {/* Votre formulaire de collecte d'informations */}
153
- <button
154
- onClick={() =>
155
- initializeSession({
156
- /* données utilisateur */
157
- })
158
- }
159
- >
160
- Continuer
161
- </button>
162
- </div>
163
- );
164
- }
150
+ | Propriété | Type | Description |
151
+ |-----------|------|-------------|
152
+ | `selfie` | `boolean` | Active la vérification par selfie biométrique |
153
+ | `requireMobile` | `boolean` | Force l'utilisation d'un appareil mobile (redirection QR code) |
165
154
 
166
- if (step === 2 && sessionId) {
167
- const { SessionComponent } = useSession(sessionId);
155
+ **Retour :** `{ SessionComponent: React.ReactElement }`
168
156
 
169
- return (
170
- <div>
171
- <h2>Étape 2: Vérification d'identité</h2>
172
- {SessionComponent}
173
- </div>
174
- );
175
- }
176
- };
157
+ ---
158
+
159
+ ### `DatakeenSession` Composant principal
160
+
161
+ ```tsx
162
+ import { DatakeenSession } from "datakeen-session-react";
163
+
164
+ <DatakeenSession
165
+ sessionId="votre-session-id"
166
+ sessionConfig={{ selfie: true }}
167
+ apiBaseUrl="https://app-v3.datakeen.co/backend"
168
+ />
169
+ ```
170
+
171
+ Gère automatiquement : loading/erreur/expiration, layouts mobile/desktop, couleurs dynamiques depuis le template, redirection QR code si `requireMobile`.
172
+
173
+ ---
174
+
175
+ ### `ConfigProvider` — Provider de configuration
176
+
177
+ ```tsx
178
+ import { ConfigProvider } from "datakeen-session-react";
179
+
180
+ <ConfigProvider apiBaseUrl="https://app-v3.datakeen.co/backend">
181
+ {/* Tous les DatakeenSession enfants utilisent cette URL */}
182
+ <DatakeenSession sessionId="session-1" />
183
+ </ConfigProvider>
184
+ ```
185
+
186
+ ---
187
+
188
+ ### `configureApiBaseURL(baseURL)` — Configuration runtime
189
+
190
+ ```typescript
191
+ import { configureApiBaseURL } from "datakeen-session-react";
192
+
193
+ // À appeler une fois au démarrage de l'application
194
+ configureApiBaseURL("https://app-v3.datakeen.co/backend");
195
+ ```
196
+
197
+ ---
198
+
199
+ ### `useI18n()` — Hook de traduction
200
+
201
+ ```typescript
202
+ import { useI18n } from "datakeen-session-react";
203
+
204
+ const { t, translateCodeDescription, translateDocumentType, setLanguage, currentLanguage } = useI18n();
205
+
206
+ // Changer la langue ("fr" | "en")
207
+ await setLanguage("en");
208
+
209
+ // Traduire un code d'analyse (ex: "2.2")
210
+ const desc = translateCodeDescription("2.2");
211
+
212
+ // Traduire un type de document
213
+ const label = translateDocumentType("passport");
214
+ ```
215
+
216
+ ---
217
+
218
+ ### `I18nProvider` / `useI18nContext()` — Contexte i18n
219
+
220
+ ```tsx
221
+ import { I18nProvider, useI18nContext } from "datakeen-session-react";
222
+
223
+ // Provider
224
+ <I18nProvider defaultLanguage="fr">
225
+ {children}
226
+ </I18nProvider>
227
+
228
+ // Hook contexte
229
+ const { language, setLanguage } = useI18nContext();
230
+ ```
231
+
232
+ ---
233
+
234
+ ### Utilitaires d'analyse — `extractRootCauses`, `hasAnalysisFailed`, `getPrimaryRootCause`
235
+
236
+ ```typescript
237
+ import { extractRootCauses, hasAnalysisFailed, getPrimaryRootCause } from "datakeen-session-react";
238
+ import type { Prediction, AnalysisResult } from "datakeen-session-react";
239
+
240
+ // Extraire toutes les causes d'échec
241
+ const causes: string[] = extractRootCauses(predictions);
242
+
243
+ // Vérifier si l'analyse a échoué
244
+ const failed: boolean = hasAnalysisFailed(predictions);
245
+
246
+ // Obtenir la cause principale
247
+ const primary: string | null = getPrimaryRootCause(predictions);
177
248
  ```
178
249
 
179
- ## 📋 Flux de vérification supportés
250
+ **Interface `Prediction`**
180
251
 
181
- Le SDK prend en charge les documents d'identité des pays suivants :
252
+ ```typescript
253
+ interface Prediction {
254
+ code: string; // ex: "1.0", "2.2", "4.0"
255
+ codeName: string; // ex: "conform", "non_conform"
256
+ codeDescription: string;
257
+ type: string;
258
+ userInput?: { birthDate?: string; firstName?: string; lastName?: string };
259
+ }
260
+ ```
261
+
262
+ **Codes de résultat principaux :**
263
+
264
+ | Code | Statut | Signification |
265
+ |------|--------|---------------|
266
+ | `1.0` | `ai_approved` | Document vérifié avec succès |
267
+ | `2.x` | `ai_rejected` | Document refusé (ex: `2.1` qualité, `2.2` non-conforme) |
268
+ | `3.0` | `failed` | Erreur d'analyse |
269
+ | `4.0` | `to_verify` | Vérification manuelle requise |
182
270
 
183
- - 🇫🇷 France
271
+ ---
184
272
 
185
- Les types de documents supportés incluent :
273
+ ### Service qualité image `professionalImageQuality`
186
274
 
187
- - Carte Nationale d'Identité
188
- - Passeport
189
- - Permis de conduire
190
- - Titre de séjour
275
+ ```typescript
276
+ import { professionalImageQuality } from "datakeen-session-react";
277
+ import type { QualityAnalysis, QualityEnhancementOptions } from "datakeen-session-react";
191
278
 
192
- ## 🔧 Personnalisation
279
+ // Analyser la qualité
280
+ const analysis: QualityAnalysis = professionalImageQuality.analyzeQuality(width, height);
281
+
282
+ // Amélioration automatique depuis flux vidéo
283
+ const { dataUrl, analysis, enhanced } = professionalImageQuality.autoEnhanceImage(
284
+ videoElement,
285
+ { x: 0, y: 0, width: 640, height: 480 },
286
+ { outputFormat: "jpeg", jpegQuality: 0.92 }
287
+ );
288
+ ```
193
289
 
194
- Le SDK s'intègre naturellement avec votre interface utilisateur et adopte automatiquement les styles CSS de votre application. Pour une personnalisation avancée, vous pouvez encapsuler le composant de session dans vos propres conteneurs stylisés.
290
+ ---
195
291
 
196
- ## ⚙️ Configuration de l'environnement
292
+ ### Chargement CSS dynamique — `useRouteCSS`
197
293
 
198
- Le SDK utilise des variables d'environnement pour la configuration. Pour configurer l'URL de l'API, créez un fichier `.env` à la racine de votre projet avec le contenu suivant :
294
+ ```typescript
295
+ import { useRouteCSS } from "datakeen-session-react";
199
296
 
297
+ // Charger le CSS d'une route au montage
298
+ const { loadCSS, unloadCSS } = useRouteCSS("selfie", {
299
+ unloadOnUnmount: true
300
+ });
200
301
  ```
201
- VITE_API_BASE_URL=https://dev2.datakeen.co/backend/session
302
+
303
+ **Routes CSS disponibles :** `start`, `user-input`, `contact-info`, `otp`, `selfie`, `document-check`, `end-flow`, `jdi`, `video-recorder`, `ui-components`
304
+
305
+ ---
306
+
307
+ ## Configuration de l'URL API
308
+
309
+ Le SDK résout l'URL API dans cet ordre de priorité :
310
+
311
+ 1. Prop `apiBaseUrl` passée à `useSession` / `DatakeenSession`
312
+ 2. `ConfigProvider` parent avec `apiBaseUrl`
313
+ 3. `configureApiBaseURL()` appelée au runtime
314
+ 4. `window.VITE_API_BASE_URL` (variable globale injectée)
315
+ 5. `import.meta.env.VITE_API_BASE_URL` (Vite)
316
+ 6. Fallback : `http://localhost:8888`
317
+
318
+ ### Configuration par environnement (exemple)
319
+
320
+ ```typescript
321
+ // sdk-configuration.ts
322
+ import { configureApiBaseURL } from "datakeen-session-react";
323
+
324
+ const urls = {
325
+ production: "https://app-v3.datakeen.co/backend",
326
+ staging: "https://app.staging.datakeen.co/backend",
327
+ development:"https://app.dev.datakeen.co/backend",
328
+ };
329
+
330
+ configureApiBaseURL(urls[process.env.NODE_ENV] ?? urls.development);
202
331
  ```
203
332
 
204
- Pour une configuration rapide, vous pouvez utiliser la commande suivante dans le projet SDK :
333
+ ### Via `.env` (Vite)
334
+
335
+ ```env
336
+ VITE_API_BASE_URL=https://app-v3.datakeen.co/backend
337
+ ```
205
338
 
339
+ Commande de setup rapide :
206
340
  ```bash
207
341
  npm run setup:env
208
342
  ```
209
343
 
210
- Cette commande génère les fichiers `.env` nécessaires pour le SDK et le projet de démo.
344
+ Voir [docs/configuration.md](./docs/configuration.md) et [docs/dynamic-configuration.md](./docs/dynamic-configuration.md) pour plus de détails.
211
345
 
212
- Pour plus de détails sur la configuration de l'environnement, consultez [la documentation dédiée](./docs/environment.md).
346
+ ---
213
347
 
214
- ## 💬 Support et assistance
348
+ ## Flux de vérification supportés
215
349
 
216
- Pour toute question technique ou problème d'intégration :
350
+ ### Types de nœuds dans un parcours (template)
217
351
 
218
- - **Email Support**: support@datakeen.co
219
- - **Documentation API**: [https://api.datakeen.co/docs](https://api.datakeen.co/docs)
220
- - **Site Web**: [www.datakeen.co](https://www.datakeen.co)
352
+ | Type de nœud | Description |
353
+ |---|---|
354
+ | `information-input` | Saisie données utilisateur (identité, contact, adresse, champs custom) |
355
+ | `document-collection` | Collecte et analyse de document (upload ou photo recto/verso) |
356
+ | `controle-jdi` | Justificatif de domicile (JDI) |
357
+ | `selfie-capture` | Capture selfie biométrique (via Unissey) |
358
+ | `biometric-capture` | Capture biométrique |
359
+ | `video-capture` | Capture vidéo du document |
360
+ | `condition` | Branchement conditionnel basé sur les données de session |
361
+ | `end` | Écran de fin et callback |
362
+ | `custom` | Nœud personnalisé avec champs définis dans le template |
221
363
 
222
- </div>
364
+ ### Documents d'identité supportés
365
+
366
+ - 🇫🇷 Carte Nationale d'Identité
367
+ - 🇫🇷 Passeport
368
+ - 🇫🇷 Permis de conduire
369
+ - 🇫🇷 Titre de séjour
370
+
371
+ ### Types de champs custom (`CustomField`)
372
+
373
+ ```typescript
374
+ type CustomFieldValueType =
375
+ | "text" | "enum" | "number" | "boolean"
376
+ | "date" | "address" | "list";
377
+ ```
378
+
379
+ ---
380
+
381
+ ## Architecture du SDK
382
+
383
+ ```
384
+ DatakeenSession
385
+ ├── useSessionData → Chargement & normalisation session depuis API
386
+ ├── useStepNavigation → Navigation graph-like (edges + conditions)
387
+ └── SessionContent → Dispatcher étapes → composants
388
+ ├── StartSession
389
+ ├── UserInputForm (identity / contact / address / custom fields)
390
+ ├── DocumentCollection (upload + photo recto/verso + retry)
391
+ ├── JDI flow (Justificatif de domicile)
392
+ ├── Selfie / VideoCapture / BiometricCapture
393
+ ├── OTPVerification
394
+ ├── ContactInfoForm
395
+ ├── PdfGeneration
396
+ └── EndFlow
397
+ ```
398
+
399
+ ### Gestion d'état
400
+
401
+ - **Store global** : `SessionContext` (session, step, userInput, contactInfo)
402
+ - **Mémoire session** : `sessionMemoryStore` (Map<sessionId, données>) — persiste userInput entre les étapes
403
+ - **Retry counts** : Stockés dans `session.retryCounts: Record<nodeId, number>`
404
+
405
+ ### Navigation
406
+
407
+ La navigation suit les **edges du template** (graphe orienté). Les nœuds `condition` et `external-verification` s'auto-exécutent et sont sautés lors du retour arrière.
408
+
409
+ ```typescript
410
+ // Primitives exposées par useStepNavigation
411
+ setStep(n, skipHistory?) // navigation directe
412
+ goBack() // retour (skip auto-executing nodes)
413
+ goToNextStep(nodeId, template, handle?) // suit les edges
414
+ canGoBack // boolean
415
+ ```
416
+
417
+ Voir [docs/navigation-history.md](./docs/navigation-history.md).
418
+
419
+ ### Nœud conditionnel
420
+
421
+ Le nœud `condition` évalue des expressions basées sur :
422
+ - `userInput.*` — données saisies par l'utilisateur
423
+ - `session.result.*` — résultat d'analyse IA
424
+ - `{documentTemplateId}.*` — champs extraits du document
425
+
426
+ Voir [docs/condition-node.md](./docs/condition-node.md).
427
+
428
+ ---
429
+
430
+ ## Système de polling
431
+
432
+ Le système de polling (v2.0.0) supporte les **analyses multiples par session** et suit l'état via `analysisId`.
433
+
434
+ ### Cycle d'états d'une analyse
435
+
436
+ | `status` | `analysisId` | `progress` | `code` | Signification |
437
+ |----------|-------------|-----------|--------|---------------|
438
+ | `processing` | `null` | 50% | `null` | Analyse en cours |
439
+ | `ai_approved` | set | 100% | `1.0` | Document approuvé |
440
+ | `ai_rejected` | set | 100% | `2.x` | Document refusé |
441
+ | `to_verify` | set | 100% | `4.0` | Vérification manuelle |
442
+ | `failed` | set | 100% | `3.0` | Erreur d'analyse |
443
+
444
+ ### Options de polling
445
+
446
+ ```typescript
447
+ analyzeFiles(sessionId, nodeId, files, docTypeId, {
448
+ enablePolling: true,
449
+ pollingOptions: {
450
+ interval: 2000, // ms entre chaque poll
451
+ maxAttempts: 300, // max 10 min
452
+ timeout: 600000,
453
+ onProgress: (status) => { /* ... */ },
454
+ onComplete: (result) => { /* ... */ },
455
+ onFailed: (error) => { /* ... */ },
456
+ }
457
+ });
458
+ ```
459
+
460
+ Voir [docs/POLLING_SYSTEM.md](./docs/POLLING_SYSTEM.md) pour la documentation complète.
461
+
462
+ ---
463
+
464
+ ## Internationalisation (i18n)
465
+
466
+ Le SDK utilise sa propre instance **i18next** (isolée de l'application hôte).
467
+
468
+ - **Langues supportées** : `fr` (défaut), `en`
469
+ - **Persistance** : `localStorage` clé `datakeen-sdk-language`
470
+ - **Ressources** : traductions principales, types de documents, noms de pays (ISO2/ISO3)
471
+
472
+ ```tsx
473
+ // Intégration avec I18nProvider
474
+ <I18nProvider defaultLanguage="fr">
475
+ <DatakeenSession sessionId="..." />
476
+ </I18nProvider>
477
+
478
+ // Changement de langue depuis l'application hôte
479
+ const { setLanguage } = useI18nContext();
480
+ setLanguage("en");
481
+ ```
482
+
483
+ ---
484
+
485
+ ## Documentation avancée
486
+
487
+ | Document | Description |
488
+ |----------|-------------|
489
+ | [docs/JOURNEY_NODE_BUILDER.md](./docs/JOURNEY_NODE_BUILDER.md) | Architecture runtime, ajouter un nouveau type de nœud |
490
+ | [docs/POLLING_SYSTEM.md](./docs/POLLING_SYSTEM.md) | Système de polling v2.0.0 — **point de départ recommandé** |
491
+ | [docs/condition-node.md](./docs/condition-node.md) | Nœud conditionnel — tokens, expressions, exemples |
492
+ | [docs/navigation-history.md](./docs/navigation-history.md) | Système d'historique de navigation |
493
+ | [docs/configuration.md](./docs/configuration.md) | Configuration de base |
494
+ | [docs/dynamic-configuration.md](./docs/dynamic-configuration.md) | Configuration dynamique multienv |
495
+ | [docs/environment.md](./docs/environment.md) | Variables d'environnement |
496
+ | [docs/migration-guide.md](./docs/migration-guide.md) | Guide de migration depuis l'ancienne API |
497
+ | [docs/sdk_integration_guide.md](./docs/sdk_integration_guide.md) | Intégration dans un projet Vite + React |
498
+
499
+ ### Exemples de code
500
+
501
+ | Fichier | Description |
502
+ |---------|-------------|
503
+ | [examples/usage-example.tsx](./examples/usage-example.tsx) | Intégration basique |
504
+ | [examples/analysis-progress-example.tsx](./examples/analysis-progress-example.tsx) | Polling avec barre de progression |
505
+ | [examples/sdk-configuration.ts](./examples/sdk-configuration.ts) | Configuration par environnement |
506
+ | [examples/test-updated-urls.ts](./examples/test-updated-urls.ts) | Tests de validation des URLs |
507
+
508
+ ---
509
+
510
+ ## Développement et tests
511
+
512
+ ### Scripts disponibles
513
+
514
+ ```bash
515
+ # Build production (CJS + ESM + types)
516
+ pnpm build
517
+
518
+ # Build en mode watch
519
+ pnpm build:watch
520
+
521
+ # Développement avec hot-reload
522
+ pnpm dev
523
+
524
+ # Lancer les tests Jest
525
+ pnpm test
526
+
527
+ # Lancer le SDK + la démo en parallèle
528
+ pnpm dev:full
529
+
530
+ # Lint
531
+ pnpm lint
532
+ ```
533
+
534
+ ### Stack technique
535
+
536
+ | Outil | Version | Rôle |
537
+ |-------|---------|------|
538
+ | TypeScript | 5.8 | Typage strict |
539
+ | Rollup | 4.x | Bundler (CJS + ESM + types) |
540
+ | Babel | 7.x | Transpilation |
541
+ | Jest | 29.x | Tests unitaires |
542
+ | React Testing Library | — | Tests composants |
543
+ | Cypress | 13.x | Tests composants E2E |
544
+ | Tailwind CSS | 4.x | Styles |
545
+ | ESLint | 9.x | Linting (flat config) |
546
+
547
+ ### Formats de build
548
+
549
+ | Format | Chemin | Usage |
550
+ |--------|--------|-------|
551
+ | CommonJS | `dist/cjs/` | Node.js / bundlers CJS |
552
+ | ES Module | `dist/esm/` | Bundlers modernes (Vite, etc.) |
553
+ | TypeScript | `dist/types/` | Déclarations de types |
554
+
555
+ ### Ajouter un nouveau nœud
556
+
557
+ 1. Étendre `SessionTemplateNode` dans `src/types/session.ts`
558
+ 2. Créer le composant dans `src/components/`
559
+ 3. Brancher dans `src/components/template/TemplateNodeRenderer.tsx`
560
+ 4. Gérer navigation et persistance
561
+ 5. Ajouter styles et traductions (`src/i18n/fr.json`, `en.json`)
562
+ 6. Écrire les tests
563
+
564
+ Voir [docs/JOURNEY_NODE_BUILDER.md](./docs/JOURNEY_NODE_BUILDER.md) pour la checklist complète.
565
+
566
+ ---
567
+
568
+ ## Support
569
+
570
+ - **Email** : support@datakeen.co
571
+ - **Documentation API** : [https://api.datakeen.co/docs](https://api.datakeen.co/docs)
572
+ - **Site Web** : [www.datakeen.co](https://www.datakeen.co)
573
+
574
+ ---
223
575
 
224
576
  <div style="background-color: #11E5C5; color: white; padding: 15px; border-radius: 5px; margin-top: 30px; display: flex; align-items: center; justify-content: space-between;">
225
577
  <div>
226
578
  <strong>Datakeen</strong> - Solutions d'identité numérique
227
579
  </div>
228
580
  <div>
229
- Dernière mise à jour: Juin 2025
581
+ Dernière mise à jour: Mars 2026
230
582
  </div>
231
583
  </div>