sunuid-sdk 1.0.32 → 1.0.34

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,602 +1,274 @@
1
- # 🔐 SunuID SDK
1
+ # SunuID SDK JavaScript
2
2
 
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)
6
-
7
- SDK JavaScript officiel pour intégrer facilement les QR codes d'authentification et KYC SunuID dans vos applications web.
8
-
9
- ## ✨ Fonctionnalités
10
-
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
3
+ SDK JavaScript officiel pour l'intégration des services d'authentification, KYC et signature électronique SunuID.
23
4
 
24
5
  ## 🚀 Installation
25
6
 
26
- ### Via NPM
27
-
28
- ```bash
29
- npm install sunuid-sdk
30
- ```
31
-
32
- ### Via CDN
33
-
7
+ ### Via CDN (Recommandé)
34
8
  ```html
35
- <!-- Socket.IO requis pour WebSocket -->
36
- <script src="https://cdn.socket.io/4.7.0/socket.io.min.js"></script>
9
+ <!-- Socket.IO (requis) -->
10
+ <script src="https://cdn.socket.io/4.7.4/socket.io.min.js"></script>
37
11
 
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>
12
+ <!-- SunuID SDK -->
13
+ <script src="https://unpkg.com/sunuid-sdk@1.0.34/dist/sunuid-sdk.min.js"></script>
43
14
  ```
44
15
 
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)**
48
-
49
- ### 1. Mode Classique (Credentials visibles)
50
-
51
- ```javascript
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
- });
16
+ ### Via NPM
17
+ ```bash
18
+ npm install sunuid-sdk
71
19
  ```
72
20
 
73
- ### 2. Mode Sécurisé (Credentials masqués)
74
-
75
21
  ```javascript
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
- });
22
+ import SunuID from 'sunuid-sdk';
90
23
  ```
91
24
 
92
- ### 3. Génération QR avec WebSocket
25
+ ## 📦 Version actuelle
26
+ **v1.0.34** - Interface épurée et correction des appels répétitifs
93
27
 
94
- ```html
95
- <div id="qr-container"></div>
96
- ```
28
+ ## 🎯 Utilisation rapide
97
29
 
30
+ ### Configuration de base
98
31
  ```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);
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);
108
40
  ```
109
41
 
110
- ### 4. Écoute des événements WebSocket
111
-
42
+ ### Initialisation et génération QR
112
43
  ```javascript
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
- });
44
+ // Initialiser le SDK
45
+ await sunuid.init();
124
46
 
125
- // Vérifier le statut WebSocket
126
- const status = sunuid.getWebSocketStatus(); // 'connected', 'disconnected', 'not_initialized'
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);
127
50
  ```
128
51
 
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
- ];
52
+ ## 🔧 Configuration
150
53
 
151
- if ($_SERVER['REQUEST_METHOD'] === 'POST') {
152
- $input = json_decode(file_get_contents('php://input'), true);
54
+ ### Options disponibles
55
+ ```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
153
62
 
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
- }
63
+ // Interface
64
+ theme: 'light', // 'light' ou 'dark'
65
+ language: 'fr',
159
66
 
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
- ];
67
+ // Rafraîchissement automatique
68
+ autoRefresh: false, // Désactivé par défaut
69
+ refreshInterval: 30000, // 30 secondes
172
70
 
173
- $token = base64_encode(json_encode($payload));
71
+ // Sécurité
72
+ enableSecurityLogs: true,
73
+ validateInputs: true,
74
+ maxRetries: 3,
75
+ requestTimeout: 10000,
174
76
 
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
- ?>
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
+ };
190
82
  ```
191
83
 
192
- ### Avantages du Mode Sécurisé
193
-
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
198
-
199
- ## 🎨 Exemples
200
-
201
- ### Exemples Universels
202
-
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
206
-
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
84
+ ## 📱 Types de services
212
85
 
213
- ### Intégration Côté Serveur
86
+ | Type | Description | Utilisation |
87
+ |------|-------------|-------------|
88
+ | `1` | **KYC** | Vérification d'identité |
89
+ | `2` | **AUTH** | Authentification (défaut) |
90
+ | `3` | **SIGNATURE** | Signature électronique |
214
91
 
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
92
+ ## 🔌 WebSocket
220
93
 
221
- ### Page de Connexion avec Mode Sécurisé
222
-
223
- ```html
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>
281
- ```
282
-
283
- ## 🔧 Configuration
284
-
285
- ### Options disponibles
286
-
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
94
+ Le SDK utilise Socket.IO pour la communication en temps réel :
318
95
 
319
96
  ```javascript
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
- });
339
- ```
340
-
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.
97
+ // Vérifier le statut WebSocket
98
+ const status = sunuid.getWebSocketStatus();
99
+ console.log('WebSocket connecté:', status.connected);
347
100
 
348
- ```javascript
349
- const result = await sunuid.generateQR('container-id', {
350
- metadata: {
351
- customData: 'votre-donnée',
352
- timestamp: Date.now()
353
- }
101
+ // Écouter les événements
102
+ sunuid.socket.on('qr_scanned', (data) => {
103
+ console.log('QR code scanné:', data);
354
104
  });
355
-
356
- console.log('QR généré:', result.qrCodeUrl);
357
- console.log('Service ID:', result.service_id);
358
105
  ```
359
106
 
360
- #### `generateKYCQR(containerId, options)` (Alias)
361
- Génère un QR code KYC (type 1).
107
+ ## 🎨 Interface personnalisée
362
108
 
363
- ```javascript
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
- });
109
+ ### Conteneur personnalisé
110
+ ```html
111
+ <div id="my-qr-container" class="custom-qr">
112
+ <!-- Le QR code sera affiché ici -->
113
+ </div>
370
114
  ```
371
115
 
372
- #### `generateAuthQR(containerId, options)` (Alias)
373
- Génère un QR code d'authentification (type 2).
374
-
375
116
  ```javascript
376
- sunuid.generateAuthQR('container-id', {
377
- theme: 'light',
378
- redirectUrl: 'https://votre-site.com/dashboard',
379
- customData: { /* données personnalisées */ }
380
- });
117
+ await sunuid.generateQR('my-qr-container');
381
118
  ```
382
119
 
383
- #### `generateSignatureQR(containerId, options)` (Alias)
384
- Génère un QR code de signature (type 3) - **Non supporté par l'API**.
385
-
120
+ ### Thème personnalisé
386
121
  ```javascript
387
- sunuid.generateSignatureQR('container-id', {
122
+ const config = {
388
123
  theme: 'dark',
389
- documentId: 'doc-123',
390
- signatureType: 'electronic'
391
- });
124
+ // ... autres options
125
+ };
392
126
  ```
393
127
 
394
- #### `checkQRStatus(serviceId)`
395
- Vérifie le statut d'un QR code.
128
+ ## 🔄 Contrôle du rafraîchissement
396
129
 
130
+ ### Démarrer le rafraîchissement automatique
397
131
  ```javascript
398
- const status = await sunuid.checkQRStatus('service-id-123');
399
- console.log('Statut:', status);
132
+ sunuid.startAutoRefresh('qr-container', 2, {});
400
133
  ```
401
134
 
402
- #### `refreshQR(containerId, options)`
403
- Actualise un QR code.
404
-
135
+ ### Arrêter le rafraîchissement
405
136
  ```javascript
406
- sunuid.refreshQR('container-id', { theme: 'light' });
137
+ sunuid.stopAutoRefresh();
407
138
  ```
408
139
 
409
- ### Méthodes WebSocket
410
-
411
- #### `getWebSocketStatus()`
412
- Retourne le statut de la connexion WebSocket.
413
-
140
+ ### Rafraîchissement manuel
414
141
  ```javascript
415
- const status = sunuid.getWebSocketStatus();
416
- // 'connected', 'disconnected', 'not_initialized'
142
+ await sunuid.refreshQR('qr-container');
417
143
  ```
418
144
 
419
- #### `emitWebSocketEvent(event, data)`
420
- Émet un événement WebSocket personnalisé.
145
+ ## 📊 API Reference
421
146
 
147
+ ### Méthodes principales
148
+
149
+ #### `init()`
150
+ Initialise le SDK et établit les connexions.
422
151
  ```javascript
423
- sunuid.emitWebSocketEvent('custom_event', {
424
- message: 'Hello WebSocket!',
425
- timestamp: Date.now(),
426
- serviceId: 'service-id'
427
- });
152
+ await sunuid.init();
428
153
  ```
429
154
 
430
- #### `forceWebSocketInit()`
431
- Force l'initialisation WebSocket si Socket.IO devient disponible plus tard.
432
-
155
+ #### `generateQR(containerId, options)`
156
+ Génère et affiche un QR code.
433
157
  ```javascript
434
- sunuid.forceWebSocketInit();
158
+ const result = await sunuid.generateQR('container-id', {
159
+ size: 300,
160
+ margin: 10
161
+ });
435
162
  ```
436
163
 
437
- ### Méthodes de Sécurité
438
-
439
- #### `getSecurityLogs()`
440
- Récupère les logs de sécurité.
441
-
164
+ #### `getQRCode()`
165
+ Récupère l'URL du QR code généré.
442
166
  ```javascript
443
- const logs = sunuid.getSecurityLogs();
444
- console.log('Logs de sécurité:', logs);
167
+ const qrUrl = sunuid.getQRCode();
445
168
  ```
446
169
 
447
- #### `clearSecurityLogs()`
448
- Efface les logs de sécurité.
449
-
170
+ #### `checkConnections()`
171
+ Vérifie l'état des connexions API et WebSocket.
450
172
  ```javascript
451
- sunuid.clearSecurityLogs();
173
+ const status = await sunuid.checkConnections();
452
174
  ```
453
175
 
454
176
  #### `destroy()`
455
- Nettoie les ressources du SDK et ferme la connexion WebSocket.
456
-
177
+ Nettoie les ressources et ferme les connexions.
457
178
  ```javascript
458
179
  sunuid.destroy();
459
180
  ```
460
181
 
461
- ## 🌐 WebSocket
182
+ ## 🧪 Tests
462
183
 
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
184
+ ### Page de test incluse
185
+ Ouvrir `test-sdk-simple.html` dans votre navigateur pour tester toutes les fonctionnalités.
467
186
 
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
187
+ ### Test rapide
188
+ ```javascript
189
+ // Test complet
190
+ const sunuid = new SunuID({
191
+ clientId: 'test-client',
192
+ secretId: 'test-secret',
193
+ type: 2
194
+ });
481
195
 
482
- ## 🛡️ Sécurité
196
+ await sunuid.init();
197
+ const result = await sunuid.generateQR('test-container');
198
+ console.log('Test réussi:', result);
199
+ ```
483
200
 
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
201
+ ## 🔒 Sécurité
489
202
 
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
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
497
210
 
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
211
+ ### Logs de sécurité
212
+ ```javascript
213
+ // Récupérer les logs de sécurité
214
+ const logs = sunuid.getSecurityLogs();
215
+ console.log('Logs de sécurité:', logs);
503
216
 
504
- ## 🌐 Compatibilité
217
+ // Nettoyer les logs
218
+ sunuid.clearSecurityLogs();
219
+ ```
505
220
 
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+
221
+ ## 🐛 Dépannage
510
222
 
511
- ## 📊 Monitoring
223
+ ### Problèmes courants
512
224
 
513
- ### Logs
514
- Le SDK génère des logs pour le debugging :
225
+ #### "SDK non initialisé"
515
226
  ```javascript
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);
227
+ // Assurez-vous d'attendre l'initialisation
228
+ await sunuid.init();
520
229
  ```
521
230
 
522
- ### Logs de Sécurité
231
+ #### "Connexions non disponibles"
523
232
  ```javascript
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
233
+ // Vérifier les connexions
234
+ const status = await sunuid.checkConnections();
235
+ console.log('Statut connexions:', status);
529
236
  ```
530
237
 
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é
538
-
539
- ## 🆘 Support
540
-
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)
547
-
548
- ### Support technique
549
- - Email : support@sunuid.sn
550
- - Chat : https://chat.sunuid.sn
551
- - Documentation : https://docs.sunuid.sn
552
-
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
238
+ #### Appels répétitifs à l'API
239
+ ```javascript
240
+ // Désactiver le rafraîchissement automatique
241
+ const config = {
242
+ autoRefresh: false,
243
+ // ... autres options
244
+ };
245
+ ```
568
246
 
569
- # Installer les dépendances
570
- npm install
247
+ ## 📝 Changelog
571
248
 
572
- # Démarrer le mode développement
573
- npm run dev
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
574
255
 
575
- # Construire pour la production
576
- npm run build
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
577
261
 
578
- # Lancer les tests
579
- npm test
262
+ ## 🤝 Support
580
263
 
581
- # Démarrer le serveur de démonstration
582
- npm run serve
583
- npm run demo
584
- ```
264
+ - **Email** : dev@sunuid.sn
265
+ - **Documentation** : https://docs.sunuid.sn
266
+ - **Issues** : https://github.com/sunuid/sunuid-sdk/issues
585
267
 
586
268
  ## 📄 Licence
587
269
 
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
270
+ MIT License - Voir le fichier `LICENSE` pour plus de détails.
597
271
 
598
272
  ---
599
273
 
600
- **Développé avec ❤️ par l'équipe SunuID**
601
-
602
- [![SunuID](https://sunuid.sn/logo.png)](https://sunuid.sn)
274
+ **SunuID SDK** - SDK JavaScript officiel pour l'authentification et KYC SunuID 🚀