sunuid-sdk 1.0.34 → 1.0.35

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
@@ -1,274 +1,602 @@
1
- # SunuID SDK JavaScript
1
+ # 🔐 SunuID SDK
2
2
 
3
- SDK JavaScript officiel pour l'intégration des services d'authentification, KYC et signature électronique SunuID.
3
+ [![npm version](https://badge.fury.io/js/sunuid-sdk.svg)](https://badge.fury.io/js/sunuid-sdk)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
+ [![Build Status](https://github.com/sunuid/sunuid-sdk/workflows/Build/badge.svg)](https://github.com/sunuid/sunuid-sdk/actions)
4
6
 
5
- ## 🚀 Installation
7
+ SDK JavaScript officiel pour intégrer facilement les QR codes d'authentification et KYC SunuID dans vos applications web.
6
8
 
7
- ### Via CDN (Recommandé)
8
- ```html
9
- <!-- Socket.IO (requis) -->
10
- <script src="https://cdn.socket.io/4.7.4/socket.io.min.js"></script>
9
+ ## Fonctionnalités
11
10
 
12
- <!-- SunuID SDK -->
13
- <script src="https://unpkg.com/sunuid-sdk@1.0.34/dist/sunuid-sdk.min.js"></script>
14
- ```
11
+ - 🔐 **Authentification QR Code** - Connexion sécurisée avec SunuID
12
+ - 📋 **Vérification KYC** - Collecte et validation d'identité
13
+ - 🔒 **Mode Sécurisé** - Initialisation via PHP pour masquer les credentials
14
+ - 🌐 **WebSocket en Temps Réel** - Connexion automatique pour les mises à jour
15
+ - 🎨 **Thèmes personnalisables** - Support des thèmes clair et sombre
16
+ - 🔄 **Actualisation automatique** - QR codes qui se renouvellent automatiquement
17
+ - 📱 **Responsive design** - Compatible mobile et desktop
18
+ - 🌍 **Multi-langue** - Support français, anglais, arabe
19
+ - 🛡️ **Sécurisé** - Authentification par clés API avec validation renforcée
20
+ - 🔢 **Types de services** - Support des types 1 (KYC), 2 (AUTH), 3 (SIGNATURE)
21
+ - 🎯 **Affichage progressif** - Loader et animations fluides
22
+ - 📊 **Logs de sécurité** - Monitoring et debugging avancés
23
+
24
+ ## 🚀 Installation
15
25
 
16
26
  ### Via NPM
27
+
17
28
  ```bash
18
29
  npm install sunuid-sdk
19
30
  ```
20
31
 
21
- ```javascript
22
- import SunuID from 'sunuid-sdk';
32
+ ### Via CDN
33
+
34
+ ```html
35
+ <!-- Socket.IO requis pour WebSocket -->
36
+ <script src="https://cdn.socket.io/4.7.0/socket.io.min.js"></script>
37
+
38
+ <!-- CSS -->
39
+ <link rel="stylesheet" href="https://unpkg.com/sunuid-sdk@1.0.25/dist/sunuid-sdk.css">
40
+
41
+ <!-- JavaScript -->
42
+ <script src="https://unpkg.com/sunuid-sdk@1.0.25/dist/sunuid-sdk.js"></script>
23
43
  ```
24
44
 
25
- ## 📦 Version actuelle
26
- **v1.0.34** - Interface épurée et correction des appels répétitifs
45
+ ## 📖 Utilisation Rapide
46
+
47
+ > **🚀 [Démarrage en 30 secondes](GET_STARTED.md)** | **🌍 [Intégration Universelle](INTEGRATION_UNIVERSAL.md)** | **⚡ [Démarrage en 2 minutes](QUICKSTART.md)** | **💡 [Intégration simplifiée](INTEGRATION_SIMPLE.md)** | **🔒 [Intégration PHP complète](PHP_INTEGRATION.md)** | **🏭 [Migration Production](MIGRATION_PRODUCTION.md)**
27
48
 
28
- ## 🎯 Utilisation rapide
49
+ ### 1. Mode Classique (Credentials visibles)
29
50
 
30
- ### Configuration de base
31
51
  ```javascript
32
- const config = {
33
- clientId: '1754166754_221A57B46843D755',
34
- secretId: '56d40fe70507228b27f2640ae65894177c2fedbf246e2b30978fde1fc43953c5',
35
- type: 2, // 1=KYC, 2=AUTH, 3=SIGNATURE
36
- autoRefresh: false // Désactivé par défaut pour éviter les appels répétitifs
37
- };
38
-
39
- const sunuid = new SunuID(config);
52
+ const sunuid = initSunuID({
53
+ apiUrl: 'https://api.sunuid.fayma.sn',
54
+ clientId: 'VOTRE_CLIENT_ID',
55
+ secretId: 'VOTRE_SECRET_ID',
56
+ type: 2, // 1 = KYC, 2 = AUTH, 3 = SIGNATURE
57
+ theme: 'light',
58
+ onSuccess: function(data) {
59
+ console.log('Authentification réussie:', data);
60
+ },
61
+ onError: function(error) {
62
+ console.error('Erreur:', error);
63
+ },
64
+ onStatusUpdate: function(data) {
65
+ console.log('Mise à jour statut:', data);
66
+ },
67
+ onExpired: function(data) {
68
+ console.log('QR expiré:', data);
69
+ }
70
+ });
40
71
  ```
41
72
 
42
- ### Initialisation et génération QR
73
+ ### 2. Mode Sécurisé (Credentials masqués)
74
+
43
75
  ```javascript
44
- // Initialiser le SDK
45
- await sunuid.init();
76
+ const sunuid = initSunuID({
77
+ apiUrl: 'https://api.sunuid.fayma.sn',
78
+ type: 2, // 1 = KYC, 2 = AUTH, 3 = SIGNATURE
79
+ secureInit: true, // Active le mode sécurisé
80
+ secureInitUrl: 'https://votre-serveur.com/secure-init.php',
81
+ theme: 'light',
82
+ partnerName: 'Votre Entreprise',
83
+ onSuccess: function(data) {
84
+ console.log('Authentification réussie:', data);
85
+ },
86
+ onError: function(error) {
87
+ console.error('Erreur:', error);
88
+ }
89
+ });
90
+ ```
91
+
92
+ ### 3. Génération QR avec WebSocket
46
93
 
47
- // Générer un QR code
48
- const result = await sunuid.generateQR('qr-container');
49
- console.log('QR Code généré:', result.qrCodeUrl);
94
+ ```html
95
+ <div id="qr-container"></div>
50
96
  ```
51
97
 
52
- ## 🔧 Configuration
98
+ ```javascript
99
+ // Génère QR et émet automatiquement un événement WebSocket
100
+ const result = await sunuid.generateQR('qr-container', {
101
+ metadata: {
102
+ customData: 'votre-donnée'
103
+ }
104
+ });
105
+
106
+ console.log('QR généré:', result.qrCodeUrl);
107
+ console.log('Service ID:', result.service_id);
108
+ ```
109
+
110
+ ### 4. Écoute des événements WebSocket
53
111
 
54
- ### Options disponibles
55
112
  ```javascript
56
- const config = {
57
- // API Configuration
58
- apiUrl: 'https://api.sunuid.fayma.sn',
59
- clientId: 'your-client-id',
60
- secretId: 'your-secret-id',
61
- type: 2, // Type de service
113
+ // Le SDK se connecte automatiquement au WebSocket
114
+ // Événements disponibles :
115
+ // - qr_status_update : Mise à jour du statut
116
+ // - qr_scan_success : Scan réussi
117
+ // - qr_expired : QR expiré
118
+
119
+ // Émettre un événement personnalisé
120
+ sunuid.emitWebSocketEvent('custom_event', {
121
+ message: 'Hello WebSocket!',
122
+ timestamp: Date.now()
123
+ });
124
+
125
+ // Vérifier le statut WebSocket
126
+ const status = sunuid.getWebSocketStatus(); // 'connected', 'disconnected', 'not_initialized'
127
+ ```
128
+
129
+ ## 🔒 Mode Sécurisé
130
+
131
+ ### Configuration PHP
132
+
133
+ Créez un endpoint PHP pour l'initialisation sécurisée :
134
+
135
+ ```php
136
+ <?php
137
+ // secure-init.php
138
+ header('Access-Control-Allow-Origin: *');
139
+ header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
140
+ header('Access-Control-Allow-Headers: Content-Type');
141
+ header('Content-Type: application/json');
142
+
143
+ $SUNUID_CONFIG = [
144
+ 'client_id' => 'VOTRE_CLIENT_ID',
145
+ 'secret_id' => 'VOTRE_SECRET_ID',
146
+ 'api_url' => 'https://api.sunuid.fayma.sn',
147
+ 'token_expiry' => 3600,
148
+ 'max_requests_per_token' => 100
149
+ ];
150
+
151
+ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
152
+ $input = json_decode(file_get_contents('php://input'), true);
62
153
 
63
- // Interface
64
- theme: 'light', // 'light' ou 'dark'
65
- language: 'fr',
154
+ // Validation des paramètres
155
+ if (!isset($input['type']) || !in_array($input['type'], [1, 2, 3])) {
156
+ echo json_encode(['success' => false, 'error' => 'Type invalide']);
157
+ exit;
158
+ }
66
159
 
67
- // Rafraîchissement automatique
68
- autoRefresh: false, // Désactivé par défaut
69
- refreshInterval: 30000, // 30 secondes
160
+ // Génération du token sécurisé
161
+ $payload = [
162
+ 'client_id' => $SUNUID_CONFIG['client_id'],
163
+ 'secret_id' => $SUNUID_CONFIG['secret_id'],
164
+ 'api_url' => $SUNUID_CONFIG['api_url'],
165
+ 'type' => $input['type'],
166
+ 'partner_name' => $input['partnerName'] ?? 'SunuID',
167
+ 'theme' => $input['theme'] ?? 'light',
168
+ 'exp' => time() + $SUNUID_CONFIG['token_expiry'],
169
+ 'iat' => time(),
170
+ 'jti' => uniqid('sunuid_', true)
171
+ ];
70
172
 
71
- // Sécurité
72
- enableSecurityLogs: true,
73
- validateInputs: true,
74
- maxRetries: 3,
75
- requestTimeout: 10000,
173
+ $token = base64_encode(json_encode($payload));
76
174
 
77
- // Callbacks
78
- onSuccess: (data) => console.log('Succès:', data),
79
- onError: (error) => console.error('Erreur:', error),
80
- onStatusUpdate: (status) => console.log('Statut:', status)
81
- };
175
+ echo json_encode([
176
+ 'success' => true,
177
+ 'data' => [
178
+ 'token' => $token,
179
+ 'expires_in' => $SUNUID_CONFIG['token_expiry'],
180
+ 'api_url' => $SUNUID_CONFIG['api_url'],
181
+ 'type' => $input['type'],
182
+ 'partner_name' => $input['partnerName'] ?? 'SunuID',
183
+ 'theme' => $input['theme'] ?? 'light',
184
+ 'max_requests' => $SUNUID_CONFIG['max_requests_per_token']
185
+ ],
186
+ 'message' => 'Token généré avec succès'
187
+ ]);
188
+ }
189
+ ?>
82
190
  ```
83
191
 
84
- ## 📱 Types de services
192
+ ### Avantages du Mode Sécurisé
85
193
 
86
- | Type | Description | Utilisation |
87
- |------|-------------|-------------|
88
- | `1` | **KYC** | Vérification d'identité |
89
- | `2` | **AUTH** | Authentification (défaut) |
90
- | `3` | **SIGNATURE** | Signature électronique |
194
+ - 🔐 **Credentials masqués** - Non visibles dans le code client
195
+ - ⏰ **Tokens temporaires** - Expiration automatique
196
+ - 📊 **Limite de requêtes** - Contrôle d'usage
197
+ - 🛡️ **Validation côté serveur** - Sécurité renforcée
91
198
 
92
- ## 🔌 WebSocket
199
+ ## 🎨 Exemples
93
200
 
94
- Le SDK utilise Socket.IO pour la communication en temps réel :
201
+ ### Exemples Universels
95
202
 
96
- ```javascript
97
- // Vérifier le statut WebSocket
98
- const status = sunuid.getWebSocketStatus();
99
- console.log('WebSocket connecté:', status.connected);
203
+ - **[Connexion Universelle](examples/universal-login.html)** - Copier-coller en 30 secondes
204
+ - **[KYC Universel](examples/universal-kyc.html)** - Vérification d'identité simple
205
+ - **[Guide d'intégration universelle](INTEGRATION_UNIVERSAL.md)** - Pour tous les niveaux
100
206
 
101
- // Écouter les événements
102
- sunuid.socket.on('qr_scanned', (data) => {
103
- console.log('QR code scanné:', data);
104
- });
105
- ```
207
+ ### Exemples Simples
208
+
209
+ - **[Connexion Simple](examples/simple-login.html)** - Page de connexion basique
210
+ - **[KYC Simple](examples/simple-kyc.html)** - Page de vérification KYC basique
211
+ - **[Guide d'intégration rapide](INTEGRATION_SIMPLE.md)** - Intégration en 3 étapes
106
212
 
107
- ## 🎨 Interface personnalisée
213
+ ### Intégration Côté Serveur
214
+
215
+ - **[Intégration PHP complète](PHP_INTEGRATION.md)** - Gestion entièrement côté serveur
216
+ - **Credentials sécurisés** - Jamais exposés côté client
217
+ - **Validation serveur** - Contrôle total des requêtes
218
+ - **Webhooks** - Notifications en temps réel
219
+ - **Gestion des sessions** - Intégration avec votre système
220
+
221
+ ### Page de Connexion avec Mode Sécurisé
108
222
 
109
- ### Conteneur personnalisé
110
223
  ```html
111
- <div id="my-qr-container" class="custom-qr">
112
- <!-- Le QR code sera affiché ici -->
113
- </div>
224
+ <!DOCTYPE html>
225
+ <html lang="fr">
226
+ <head>
227
+ <meta charset="UTF-8">
228
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
229
+ <title>Connexion - Mon Application</title>
230
+ <link rel="stylesheet" href="https://unpkg.com/sunuid-sdk@1.0.25/dist/sunuid-sdk.css">
231
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
232
+ </head>
233
+ <body>
234
+ <div class="login-container">
235
+ <h1>Connexion Sécurisée</h1>
236
+ <p>Scannez le QR code avec l'application SunuID</p>
237
+
238
+ <div id="qr-container"></div>
239
+
240
+ <div class="login-footer">
241
+ <p>Pas encore d'application SunuID ?</p>
242
+ <a href="https://sunuid.sn/download" target="_blank">Télécharger</a>
243
+ </div>
244
+ </div>
245
+
246
+ <!-- Socket.IO requis -->
247
+ <script src="https://cdn.socket.io/4.7.0/socket.io.min.js"></script>
248
+
249
+ <!-- SDK SunuID -->
250
+ <script src="https://unpkg.com/sunuid-sdk@1.0.25/dist/sunuid-sdk.js"></script>
251
+
252
+ <script>
253
+ const sunuid = initSunuID({
254
+ apiUrl: 'https://api.sunuid.fayma.sn',
255
+ type: 2, // AUTH
256
+ secureInit: true, // Mode sécurisé
257
+ secureInitUrl: 'https://votre-serveur.com/secure-init.php',
258
+ theme: 'light',
259
+ partnerName: 'Mon Application',
260
+ onSuccess: function(data) {
261
+ console.log('✅ Authentification réussie:', data);
262
+ window.location.href = '/dashboard?token=' + data.token;
263
+ },
264
+ onError: function(error) {
265
+ console.error('❌ Erreur:', error);
266
+ alert('Erreur de connexion: ' + error.message);
267
+ },
268
+ onStatusUpdate: function(data) {
269
+ console.log('📱 Mise à jour statut:', data);
270
+ },
271
+ onExpired: function(data) {
272
+ console.log('⏰ QR expiré:', data);
273
+ }
274
+ });
275
+
276
+ // Générer le QR code (WebSocket se connecte automatiquement)
277
+ sunuid.generateQR('qr-container');
278
+ </script>
279
+ </body>
280
+ </html>
114
281
  ```
115
282
 
116
- ```javascript
117
- await sunuid.generateQR('my-qr-container');
118
- ```
283
+ ## 🔧 Configuration
119
284
 
120
- ### Thème personnalisé
121
- ```javascript
122
- const config = {
123
- theme: 'dark',
124
- // ... autres options
125
- };
126
- ```
285
+ ### Options disponibles
127
286
 
128
- ## 🔄 Contrôle du rafraîchissement
287
+ | Option | Type | Défaut | Description |
288
+ |--------|------|--------|-------------|
289
+ | `apiUrl` | string | `'https://api.sunuid.fayma.sn'` | URL de l'API SunuID |
290
+ | `clientId` | string | - | Clé client (requise en mode classique) |
291
+ | `secretId` | string | - | Clé secrète (requise en mode classique) |
292
+ | `type` | number | `2` | Type de service: `1` (KYC), `2` (AUTH), `3` (SIGNATURE) |
293
+ | `theme` | string | `'light'` | Thème: `'light'` ou `'dark'` |
294
+ | `language` | string | `'fr'` | Langue: `'fr'`, `'en'`, `'ar'` |
295
+ | `autoRefresh` | boolean | `true` | Actualisation automatique |
296
+ | `refreshInterval` | number | `30000` | Intervalle en millisecondes |
297
+ | `secureInit` | boolean | `false` | Active le mode sécurisé |
298
+ | `secureInitUrl` | string | `'https://api.sunuid.fayma.sn/secure-init.php'` | URL de l'endpoint sécurisé |
299
+ | `partnerName` | string | `'SunuID'` | Nom du partenaire |
300
+ | `enableSecurityLogs` | boolean | `true` | Active les logs de sécurité |
301
+ | `validateInputs` | boolean | `true` | Validation des entrées |
302
+ | `maxRetries` | number | `3` | Nombre max de tentatives API |
303
+ | `requestTimeout` | number | `10000` | Timeout des requêtes (ms) |
304
+ | `onSuccess` | function | - | Callback en cas de succès |
305
+ | `onError` | function | - | Callback en cas d'erreur |
306
+ | `onStatusUpdate` | function | - | Callback pour mises à jour WebSocket |
307
+ | `onExpired` | function | - | Callback quand le QR expire |
308
+
309
+ ### Types de Services
310
+
311
+ | Type | Nom | Description |
312
+ |------|-----|-------------|
313
+ | `1` | **KYC** | Vérification d'identité et conformité |
314
+ | `2` | **AUTH** | Authentification utilisateur |
315
+ | `3` | **SIGNATURE** | Signature électronique (non supporté par l'API) |
316
+
317
+ ### Événements WebSocket
129
318
 
130
- ### Démarrer le rafraîchissement automatique
131
319
  ```javascript
132
- sunuid.startAutoRefresh('qr-container', 2, {});
320
+ const sunuid = initSunuID({
321
+ // ... configuration
322
+ onSuccess: function(data) {
323
+ console.log('✅ Authentification réussie:', data);
324
+ // data contient: token, user, service_id, etc.
325
+ },
326
+ onError: function(error) {
327
+ console.error('❌ Erreur:', error);
328
+ // error contient: message, code, details
329
+ },
330
+ onStatusUpdate: function(data) {
331
+ console.log('📱 Mise à jour statut:', data);
332
+ // Mise à jour reçue via WebSocket
333
+ },
334
+ onExpired: function(data) {
335
+ console.log('⏰ QR expiré:', data);
336
+ // QR expiré, actualisation automatique
337
+ }
338
+ });
133
339
  ```
134
340
 
135
- ### Arrêter le rafraîchissement
341
+ ## 📱 API Référence
342
+
343
+ ### Méthodes principales
344
+
345
+ #### `generateQR(containerId, options)`
346
+ Génère un QR code avec le type configuré et émet un événement WebSocket.
347
+
136
348
  ```javascript
137
- sunuid.stopAutoRefresh();
349
+ const result = await sunuid.generateQR('container-id', {
350
+ metadata: {
351
+ customData: 'votre-donnée',
352
+ timestamp: Date.now()
353
+ }
354
+ });
355
+
356
+ console.log('QR généré:', result.qrCodeUrl);
357
+ console.log('Service ID:', result.service_id);
138
358
  ```
139
359
 
140
- ### Rafraîchissement manuel
360
+ #### `generateKYCQR(containerId, options)` (Alias)
361
+ Génère un QR code KYC (type 1).
362
+
141
363
  ```javascript
142
- await sunuid.refreshQR('qr-container');
364
+ sunuid.generateKYCQR('container-id', {
365
+ theme: 'light',
366
+ kycType: 'full', // 'basic' ou 'full'
367
+ requiredFields: ['identity', 'address', 'phone'],
368
+ redirectUrl: 'https://votre-site.com/kyc-complete'
369
+ });
143
370
  ```
144
371
 
145
- ## 📊 API Reference
372
+ #### `generateAuthQR(containerId, options)` (Alias)
373
+ Génère un QR code d'authentification (type 2).
146
374
 
147
- ### Méthodes principales
148
-
149
- #### `init()`
150
- Initialise le SDK et établit les connexions.
151
375
  ```javascript
152
- await sunuid.init();
376
+ sunuid.generateAuthQR('container-id', {
377
+ theme: 'light',
378
+ redirectUrl: 'https://votre-site.com/dashboard',
379
+ customData: { /* données personnalisées */ }
380
+ });
153
381
  ```
154
382
 
155
- #### `generateQR(containerId, options)`
156
- Génère et affiche un QR code.
383
+ #### `generateSignatureQR(containerId, options)` (Alias)
384
+ Génère un QR code de signature (type 3) - **Non supporté par l'API**.
385
+
157
386
  ```javascript
158
- const result = await sunuid.generateQR('container-id', {
159
- size: 300,
160
- margin: 10
387
+ sunuid.generateSignatureQR('container-id', {
388
+ theme: 'dark',
389
+ documentId: 'doc-123',
390
+ signatureType: 'electronic'
161
391
  });
162
392
  ```
163
393
 
164
- #### `getQRCode()`
165
- Récupère l'URL du QR code généré.
394
+ #### `checkQRStatus(serviceId)`
395
+ Vérifie le statut d'un QR code.
396
+
166
397
  ```javascript
167
- const qrUrl = sunuid.getQRCode();
398
+ const status = await sunuid.checkQRStatus('service-id-123');
399
+ console.log('Statut:', status);
168
400
  ```
169
401
 
170
- #### `checkConnections()`
171
- Vérifie l'état des connexions API et WebSocket.
402
+ #### `refreshQR(containerId, options)`
403
+ Actualise un QR code.
404
+
172
405
  ```javascript
173
- const status = await sunuid.checkConnections();
406
+ sunuid.refreshQR('container-id', { theme: 'light' });
174
407
  ```
175
408
 
176
- #### `destroy()`
177
- Nettoie les ressources et ferme les connexions.
409
+ ### Méthodes WebSocket
410
+
411
+ #### `getWebSocketStatus()`
412
+ Retourne le statut de la connexion WebSocket.
413
+
178
414
  ```javascript
179
- sunuid.destroy();
415
+ const status = sunuid.getWebSocketStatus();
416
+ // 'connected', 'disconnected', 'not_initialized'
180
417
  ```
181
418
 
182
- ## 🧪 Tests
419
+ #### `emitWebSocketEvent(event, data)`
420
+ Émet un événement WebSocket personnalisé.
183
421
 
184
- ### Page de test incluse
185
- Ouvrir `test-sdk-simple.html` dans votre navigateur pour tester toutes les fonctionnalités.
186
-
187
- ### Test rapide
188
422
  ```javascript
189
- // Test complet
190
- const sunuid = new SunuID({
191
- clientId: 'test-client',
192
- secretId: 'test-secret',
193
- type: 2
423
+ sunuid.emitWebSocketEvent('custom_event', {
424
+ message: 'Hello WebSocket!',
425
+ timestamp: Date.now(),
426
+ serviceId: 'service-id'
194
427
  });
428
+ ```
195
429
 
196
- await sunuid.init();
197
- const result = await sunuid.generateQR('test-container');
198
- console.log('Test réussi:', result);
430
+ #### `forceWebSocketInit()`
431
+ Force l'initialisation WebSocket si Socket.IO devient disponible plus tard.
432
+
433
+ ```javascript
434
+ sunuid.forceWebSocketInit();
199
435
  ```
200
436
 
201
- ## 🔒 Sécurité
437
+ ### Méthodes de Sécurité
202
438
 
203
- ### Fonctionnalités de sécurité
204
- - Validation des paramètres d'entrée
205
- - ✅ Sanitisation des données
206
- - ✅ Logs de sécurité
207
- - ✅ Gestion des timeouts
208
- - ✅ Retry automatique
209
- - ✅ Protection contre les appels répétitifs
439
+ #### `getSecurityLogs()`
440
+ Récupère les logs de sécurité.
210
441
 
211
- ### Logs de sécurité
212
442
  ```javascript
213
- // Récupérer les logs de sécurité
214
443
  const logs = sunuid.getSecurityLogs();
215
444
  console.log('Logs de sécurité:', logs);
445
+ ```
446
+
447
+ #### `clearSecurityLogs()`
448
+ Efface les logs de sécurité.
216
449
 
217
- // Nettoyer les logs
450
+ ```javascript
218
451
  sunuid.clearSecurityLogs();
219
452
  ```
220
453
 
221
- ## 🐛 Dépannage
222
-
223
- ### Problèmes courants
454
+ #### `destroy()`
455
+ Nettoie les ressources du SDK et ferme la connexion WebSocket.
224
456
 
225
- #### "SDK non initialisé"
226
457
  ```javascript
227
- // Assurez-vous d'attendre l'initialisation
228
- await sunuid.init();
458
+ sunuid.destroy();
229
459
  ```
230
460
 
231
- #### "Connexions non disponibles"
461
+ ## 🌐 WebSocket
462
+
463
+ ### Connexion Automatique
464
+ Le SDK se connecte automatiquement au WebSocket lors de l'initialisation :
465
+ - **Serveur :** `wss://samasocket.fayma.sn:9443`
466
+ - **Paramètres :** token, type: 'web', userId, username
467
+
468
+ ### Événements Reçus
469
+ - `qr_status_update` - Mise à jour du statut QR
470
+ - `qr_scan_success` - Scan QR réussi
471
+ - `qr_expired` - QR expiré
472
+
473
+ ### Événements Émis
474
+ - `qr_generated` - QR généré (automatique)
475
+ - `custom_event` - Événements personnalisés
476
+
477
+ ### Gestion des Erreurs
478
+ - Tentatives limitées (5 max) si Socket.IO non disponible
479
+ - Désactivation automatique après échec
480
+ - Logs détaillés pour le debugging
481
+
482
+ ## 🛡️ Sécurité
483
+
484
+ ### Authentification
485
+ Le SDK utilise les clés API pour s'authentifier :
486
+ - `clientId` et `secretId` dans le corps des requêtes
487
+ - Connexion WebSocket sécurisée avec token
488
+ - Mode sécurisé avec tokens temporaires
489
+
490
+ ### Validation
491
+ - Vérification des paramètres requis
492
+ - Validation des URLs de redirection
493
+ - Protection contre les attaques CSRF
494
+ - Types numériques pour éviter les injections
495
+ - Sanitisation des entrées utilisateur
496
+ - Logs de sécurité avec obfuscation des credentials
497
+
498
+ ### Mode Sécurisé
499
+ - Tokens temporaires avec expiration
500
+ - Limite de requêtes par token
501
+ - Validation côté serveur
502
+ - Credentials masqués du code client
503
+
504
+ ## 🌐 Compatibilité
505
+
506
+ - **Navigateurs** : Chrome 60+, Firefox 55+, Safari 12+, Edge 79+
507
+ - **Mobile** : iOS Safari 12+, Chrome Mobile 60+
508
+ - **Node.js** : 14.0.0+
509
+ - **WebSocket** : Socket.IO 4.7.0+
510
+
511
+ ## 📊 Monitoring
512
+
513
+ ### Logs
514
+ Le SDK génère des logs pour le debugging :
232
515
  ```javascript
233
- // Vérifier les connexions
234
- const status = await sunuid.checkConnections();
235
- console.log('Statut connexions:', status);
516
+ console.log('SunuID SDK initialisé avec succès');
517
+ console.log('🌐 WebSocket connecté avec succès');
518
+ console.log('📤 Événement WebSocket émis: qr_generated');
519
+ console.error('❌ Erreur connexion WebSocket:', error);
236
520
  ```
237
521
 
238
- #### Appels répétitifs à l'API
522
+ ### Logs de Sécurité
239
523
  ```javascript
240
- // Désactiver le rafraîchissement automatique
241
- const config = {
242
- autoRefresh: false,
243
- // ... autres options
244
- };
524
+ // Logs automatiques avec obfuscation
525
+ 🔒 [SECURITY] SDK_INIT_START
526
+ 🔒 [SECURITY] SECURE_INIT_SUCCESS
527
+ 🔒 [SECURITY] API_REQUEST_START
528
+ 🔒 [SECURITY] API_REQUEST_SUCCESS
245
529
  ```
246
530
 
247
- ## 📝 Changelog
531
+ ### Métriques
532
+ Les partenaires peuvent suivre :
533
+ - Nombre de QR codes générés
534
+ - Taux de succès d'authentification
535
+ - Temps de réponse de l'API
536
+ - Statut des connexions WebSocket
537
+ - Utilisation du mode sécurisé
248
538
 
249
- ### v1.0.27 (2025-01-06)
250
- - ✅ **Interface épurée** : Suppression des textes d'instructions superflus
251
- - ✅ **Correction des appels répétitifs** : Rafraîchissement automatique désactivé par défaut
252
- - ✅ **Contrôle du rafraîchissement** : Méthodes `startAutoRefresh()` et `stopAutoRefresh()`
253
- - ✅ **Gestion des timers** : Arrêt automatique des timers précédents
254
- - ✅ **Page de test améliorée** : Contrôles pour le rafraîchissement automatique
539
+ ## 🆘 Support
255
540
 
256
- ### v1.0.26 (2025-01-06)
257
- - **QR content simplifié** : Utilisation du socketID uniquement
258
- - **Nom de partenaire dynamique** : Récupération depuis l'API
259
- - ✅ **Service ID dynamique** : Récupération depuis l'API
260
- - **Sélecteur de type** : Choix du type de service dans la page de test
541
+ ### Documentation
542
+ - [Guide d'intégration](https://docs.sunuid.sn)
543
+ - [API Reference](https://api.sunuid.sn/docs)
544
+ - [Exemples](https://github.com/sunuid/sdk-examples)
545
+ - [Guide de sécurité](SECURITY_GUIDE.md)
546
+ - [Guide d'initialisation sécurisée](SECURE_INIT_GUIDE.md)
261
547
 
262
- ## 🤝 Support
548
+ ### Support technique
549
+ - Email : support@sunuid.sn
550
+ - Chat : https://chat.sunuid.sn
551
+ - Documentation : https://docs.sunuid.sn
263
552
 
264
- - **Email** : dev@sunuid.sn
265
- - **Documentation** : https://docs.sunuid.sn
266
- - **Issues** : https://github.com/sunuid/sunuid-sdk/issues
553
+ ### Communauté
554
+ - [GitHub Issues](https://github.com/sunuid/sunuid-sdk/issues)
555
+ - [Discussions](https://github.com/sunuid/sunuid-sdk/discussions)
556
+ - [Stack Overflow](https://stackoverflow.com/questions/tagged/sunuid)
557
+
558
+ ## 🤝 Contribution
559
+
560
+ Les contributions sont les bienvenues ! Consultez notre [guide de contribution](CONTRIBUTING.md).
561
+
562
+ ### Développement
563
+
564
+ ```bash
565
+ # Cloner le repository
566
+ git clone https://github.com/sunuid/sunuid-sdk.git
567
+ cd sunuid-sdk
568
+
569
+ # Installer les dépendances
570
+ npm install
571
+
572
+ # Démarrer le mode développement
573
+ npm run dev
574
+
575
+ # Construire pour la production
576
+ npm run build
577
+
578
+ # Lancer les tests
579
+ npm test
580
+
581
+ # Démarrer le serveur de démonstration
582
+ npm run serve
583
+ npm run demo
584
+ ```
267
585
 
268
586
  ## 📄 Licence
269
587
 
270
- MIT License - Voir le fichier `LICENSE` pour plus de détails.
588
+ Ce projet est distribué sous licence MIT. Voir le fichier [LICENSE](LICENSE) pour plus de détails.
589
+
590
+ ## 🙏 Remerciements
591
+
592
+ - [FontAwesome](https://fontawesome.com/) pour les icônes
593
+ - [Inter](https://rsms.me/inter/) pour la typographie
594
+ - [Rollup](https://rollupjs.org/) pour le bundling
595
+ - [Socket.IO](https://socket.io/) pour les WebSockets
596
+ - [Endroid QR Code](https://github.com/endroid/qr-code) pour la génération QR
271
597
 
272
598
  ---
273
599
 
274
- **SunuID SDK** - SDK JavaScript officiel pour l'authentification et KYC SunuID 🚀
600
+ **Développé avec ❤️ par l'équipe SunuID**
601
+
602
+ [![SunuID](https://sunuid.sn/logo.png)](https://sunuid.sn)