sunuid-sdk 1.0.23 → 1.0.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
@@ -10,11 +10,13 @@ SDK JavaScript officiel pour intégrer facilement les QR codes d'authentificatio
10
10
 
11
11
  - 🔐 **Authentification QR Code** - Connexion sécurisée avec SunuID
12
12
  - 📋 **Vérification KYC** - Collecte et validation d'identité
13
+ - 🌐 **WebSocket en Temps Réel** - Connexion automatique pour les mises à jour
13
14
  - 🎨 **Thèmes personnalisables** - Support des thèmes clair et sombre
14
15
  - 🔄 **Actualisation automatique** - QR codes qui se renouvellent automatiquement
15
16
  - 📱 **Responsive design** - Compatible mobile et desktop
16
17
  - 🌍 **Multi-langue** - Support français, anglais, arabe
17
18
  - 🛡️ **Sécurisé** - Authentification par clés API
19
+ - 🔢 **Types numériques** - Support des types 1, 2, 3 pour différents services
18
20
 
19
21
  ## 🚀 Installation
20
22
 
@@ -27,54 +29,82 @@ npm install sunuid-sdk
27
29
  ### Via CDN
28
30
 
29
31
  ```html
32
+ <!-- Socket.IO requis pour WebSocket -->
33
+ <script src="https://cdn.socket.io/4.7.0/socket.io.min.js"></script>
34
+
30
35
  <!-- CSS -->
31
- <link rel="stylesheet" href="https://unpkg.com/sunuid-sdk@1.0.0/dist/sunuid-sdk.css">
36
+ <link rel="stylesheet" href="https://unpkg.com/sunuid-sdk@1.0.23/dist/sunuid-sdk.css">
32
37
 
33
38
  <!-- JavaScript -->
34
- <script src="https://unpkg.com/sunuid-sdk@1.0.0/dist/sunuid-sdk.js"></script>
39
+ <script src="https://unpkg.com/sunuid-sdk@1.0.23/dist/sunuid-sdk.js"></script>
35
40
  ```
36
41
 
37
42
  ## 📖 Utilisation Rapide
38
43
 
39
- ### 1. Initialisation
44
+ ### 1. Initialisation avec WebSocket
40
45
 
41
46
  ```javascript
42
47
  const sunuid = initSunuID({
43
- apiUrl: 'https://sunuid.fayma.sn/api',
48
+ apiUrl: 'https://api.sunuid.fayma.sn',
44
49
  clientId: 'VOTRE_CLIENT_ID',
45
50
  secretId: 'VOTRE_SECRET_ID',
46
- theme: 'light'
51
+ type: 1, // 1 = authentification, 2 = KYC, 3 = service personnalisé
52
+ theme: 'light',
53
+ onSuccess: function(data) {
54
+ console.log('Authentification réussie:', data);
55
+ },
56
+ onError: function(error) {
57
+ console.error('Erreur:', error);
58
+ },
59
+ onStatusUpdate: function(data) {
60
+ console.log('Mise à jour statut:', data);
61
+ },
62
+ onExpired: function(data) {
63
+ console.log('QR expiré:', data);
64
+ }
47
65
  });
48
66
  ```
49
67
 
50
- ### 2. Authentification
68
+ ### 2. Génération QR avec WebSocket
51
69
 
52
70
  ```html
53
- <div id="auth-qr-container"></div>
71
+ <div id="qr-container"></div>
54
72
  ```
55
73
 
56
74
  ```javascript
57
- sunuid.generateAuthQR('auth-qr-container', {
58
- redirectUrl: 'https://votre-site.com/dashboard'
75
+ // Génère QR et émet automatiquement un événement WebSocket
76
+ const result = await sunuid.generateQR('qr-container', {
77
+ metadata: {
78
+ customData: 'votre-donnée'
79
+ }
59
80
  });
60
- ```
61
81
 
62
- ### 3. KYC
63
-
64
- ```html
65
- <div id="kyc-qr-container"></div>
82
+ console.log('QR généré:', result.qrCodeUrl);
83
+ console.log('Service ID:', result.service_id);
66
84
  ```
67
85
 
86
+ ### 3. Écoute des événements WebSocket
87
+
68
88
  ```javascript
69
- sunuid.generateKYCQR('kyc-qr-container', {
70
- kycType: 'full',
71
- requiredFields: ['identity', 'address', 'phone']
89
+ // Le SDK se connecte automatiquement au WebSocket
90
+ // Événements disponibles :
91
+ // - qr_status_update : Mise à jour du statut
92
+ // - qr_scan_success : Scan réussi
93
+ // - qr_expired : QR expiré
94
+
95
+ // Émettre un événement personnalisé
96
+ sunuid.emitWebSocketEvent('custom_event', {
97
+ message: 'Hello WebSocket!',
98
+ timestamp: Date.now()
72
99
  });
100
+
101
+ // Vérifier le statut WebSocket
102
+ const status = sunuid.getWebSocketStatus(); // 'connected', 'disconnected', 'not_initialized'
73
103
  ```
74
104
 
75
105
  ## 🎨 Exemples
76
106
 
77
- ### Page de Connexion
107
+ ### Page de Connexion avec WebSocket
78
108
 
79
109
  ```html
80
110
  <!DOCTYPE html>
@@ -83,7 +113,7 @@ sunuid.generateKYCQR('kyc-qr-container', {
83
113
  <meta charset="UTF-8">
84
114
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
85
115
  <title>Connexion - Mon Application</title>
86
- <link rel="stylesheet" href="https://unpkg.com/sunuid-sdk@1.0.0/dist/sunuid-sdk.css">
116
+ <link rel="stylesheet" href="https://unpkg.com/sunuid-sdk@1.0.23/dist/sunuid-sdk.css">
87
117
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
88
118
  </head>
89
119
  <body>
@@ -91,7 +121,7 @@ sunuid.generateKYCQR('kyc-qr-container', {
91
121
  <h1>Connexion Sécurisée</h1>
92
122
  <p>Scannez le QR code avec l'application SunuID</p>
93
123
 
94
- <div id="auth-qr-container"></div>
124
+ <div id="qr-container"></div>
95
125
 
96
126
  <div class="login-footer">
97
127
  <p>Pas encore d'application SunuID ?</p>
@@ -99,22 +129,37 @@ sunuid.generateKYCQR('kyc-qr-container', {
99
129
  </div>
100
130
  </div>
101
131
 
102
- <script src="https://unpkg.com/sunuid-sdk@1.0.0/dist/sunuid-sdk.js"></script>
132
+ <!-- Socket.IO requis -->
133
+ <script src="https://cdn.socket.io/4.7.0/socket.io.min.js"></script>
134
+
135
+ <!-- SDK SunuID -->
136
+ <script src="https://unpkg.com/sunuid-sdk@1.0.23/dist/sunuid-sdk.js"></script>
137
+
103
138
  <script>
104
139
  const sunuid = initSunuID({
105
- apiUrl: 'https://sunuid.fayma.sn/api',
140
+ apiUrl: 'https://api.sunuid.fayma.sn',
106
141
  clientId: 'VOTRE_CLIENT_ID',
107
142
  secretId: 'VOTRE_SECRET_ID',
143
+ type: 1,
108
144
  theme: 'light',
109
145
  onSuccess: function(data) {
146
+ console.log('✅ Authentification réussie:', data);
110
147
  window.location.href = '/dashboard?token=' + data.token;
111
148
  },
112
149
  onError: function(error) {
150
+ console.error('❌ Erreur:', error);
113
151
  alert('Erreur de connexion: ' + error.message);
152
+ },
153
+ onStatusUpdate: function(data) {
154
+ console.log('📱 Mise à jour statut:', data);
155
+ },
156
+ onExpired: function(data) {
157
+ console.log('⏰ QR expiré:', data);
114
158
  }
115
159
  });
116
160
 
117
- sunuid.generateAuthQR('auth-qr-container');
161
+ // Générer le QR code (WebSocket se connecte automatiquement)
162
+ sunuid.generateQR('qr-container');
118
163
  </script>
119
164
  </body>
120
165
  </html>
@@ -126,33 +171,39 @@ sunuid.generateKYCQR('kyc-qr-container', {
126
171
 
127
172
  | Option | Type | Défaut | Description |
128
173
  |--------|------|--------|-------------|
129
- | `apiUrl` | string | `'https://sunuid.fayma.sn/api'` | URL de l'API SunuID |
174
+ | `apiUrl` | string | `'https://api.sunuid.fayma.sn'` | URL de l'API SunuID |
130
175
  | `clientId` | string | - | Clé client (requise) |
131
176
  | `secretId` | string | - | Clé secrète (requise) |
177
+ | `type` | number | `1` | Type de service: `1` (auth), `2` (KYC), `3` (personnalisé) |
132
178
  | `theme` | string | `'light'` | Thème: `'light'` ou `'dark'` |
133
179
  | `language` | string | `'fr'` | Langue: `'fr'`, `'en'`, `'ar'` |
134
180
  | `autoRefresh` | boolean | `true` | Actualisation automatique |
135
181
  | `refreshInterval` | number | `30000` | Intervalle en millisecondes |
136
182
  | `onSuccess` | function | - | Callback en cas de succès |
137
183
  | `onError` | function | - | Callback en cas d'erreur |
184
+ | `onStatusUpdate` | function | - | Callback pour mises à jour WebSocket |
138
185
  | `onExpired` | function | - | Callback quand le QR expire |
139
186
 
140
- ### Événements
187
+ ### Événements WebSocket
141
188
 
142
189
  ```javascript
143
190
  const sunuid = initSunuID({
144
191
  // ... configuration
145
192
  onSuccess: function(data) {
146
- console.log('Authentification réussie:', data);
147
- // data contient: token, user, partner, etc.
193
+ console.log('Authentification réussie:', data);
194
+ // data contient: token, user, service_id, etc.
148
195
  },
149
196
  onError: function(error) {
150
- console.error('Erreur:', error);
197
+ console.error('Erreur:', error);
151
198
  // error contient: message, code, details
152
199
  },
153
- onExpired: function() {
154
- console.log('QR code expiré');
155
- // Le QR code a expiré, actualisation automatique
200
+ onStatusUpdate: function(data) {
201
+ console.log('📱 Mise à jour statut:', data);
202
+ // Mise à jour reçue via WebSocket
203
+ },
204
+ onExpired: function(data) {
205
+ console.log('⏰ QR expiré:', data);
206
+ // QR expiré, actualisation automatique
156
207
  }
157
208
  });
158
209
  ```
@@ -161,8 +212,23 @@ const sunuid = initSunuID({
161
212
 
162
213
  ### Méthodes principales
163
214
 
164
- #### `generateAuthQR(containerId, options)`
165
- Génère un QR code d'authentification.
215
+ #### `generateQR(containerId, options)`
216
+ Génère un QR code avec le type configuré et émet un événement WebSocket.
217
+
218
+ ```javascript
219
+ const result = await sunuid.generateQR('container-id', {
220
+ metadata: {
221
+ customData: 'votre-donnée',
222
+ timestamp: Date.now()
223
+ }
224
+ });
225
+
226
+ console.log('QR généré:', result.qrCodeUrl);
227
+ console.log('Service ID:', result.service_id);
228
+ ```
229
+
230
+ #### `generateAuthQR(containerId, options)` (Alias)
231
+ Génère un QR code d'authentification (type 1).
166
232
 
167
233
  ```javascript
168
234
  sunuid.generateAuthQR('container-id', {
@@ -172,8 +238,8 @@ sunuid.generateAuthQR('container-id', {
172
238
  });
173
239
  ```
174
240
 
175
- #### `generateKYCQR(containerId, options)`
176
- Génère un QR code KYC.
241
+ #### `generateKYCQR(containerId, options)` (Alias)
242
+ Génère un QR code KYC (type 2).
177
243
 
178
244
  ```javascript
179
245
  sunuid.generateKYCQR('container-id', {
@@ -184,45 +250,96 @@ sunuid.generateKYCQR('container-id', {
184
250
  });
185
251
  ```
186
252
 
187
- #### `checkQRStatus(qrId)`
253
+ #### `checkQRStatus(serviceId)`
188
254
  Vérifie le statut d'un QR code.
189
255
 
190
256
  ```javascript
191
- const status = await sunuid.checkQRStatus('qr-id-123');
257
+ const status = await sunuid.checkQRStatus('service-id-123');
192
258
  console.log('Statut:', status);
193
259
  ```
194
260
 
195
- #### `refreshQR(containerId, type, options)`
261
+ #### `refreshQR(containerId, options)`
196
262
  Actualise un QR code.
197
263
 
198
264
  ```javascript
199
- sunuid.refreshQR('container-id', 'auth', { theme: 'light' });
265
+ sunuid.refreshQR('container-id', { theme: 'light' });
266
+ ```
267
+
268
+ ### Méthodes WebSocket
269
+
270
+ #### `getWebSocketStatus()`
271
+ Retourne le statut de la connexion WebSocket.
272
+
273
+ ```javascript
274
+ const status = sunuid.getWebSocketStatus();
275
+ // 'connected', 'disconnected', 'not_initialized'
276
+ ```
277
+
278
+ #### `emitWebSocketEvent(event, data)`
279
+ Émet un événement WebSocket personnalisé.
280
+
281
+ ```javascript
282
+ sunuid.emitWebSocketEvent('custom_event', {
283
+ message: 'Hello WebSocket!',
284
+ timestamp: Date.now(),
285
+ serviceId: 'service-id'
286
+ });
287
+ ```
288
+
289
+ #### `forceWebSocketInit()`
290
+ Force l'initialisation WebSocket si Socket.IO devient disponible plus tard.
291
+
292
+ ```javascript
293
+ sunuid.forceWebSocketInit();
200
294
  ```
201
295
 
202
296
  #### `destroy()`
203
- Nettoie les ressources du SDK.
297
+ Nettoie les ressources du SDK et ferme la connexion WebSocket.
204
298
 
205
299
  ```javascript
206
300
  sunuid.destroy();
207
301
  ```
208
302
 
303
+ ## 🌐 WebSocket
304
+
305
+ ### Connexion Automatique
306
+ Le SDK se connecte automatiquement au WebSocket lors de l'initialisation :
307
+ - **Serveur :** `wss://samasocket.fayma.sn:9443`
308
+ - **Paramètres :** token, type: 'web', userId, username
309
+
310
+ ### Événements Reçus
311
+ - `qr_status_update` - Mise à jour du statut QR
312
+ - `qr_scan_success` - Scan QR réussi
313
+ - `qr_expired` - QR expiré
314
+
315
+ ### Événements Émis
316
+ - `qr_generated` - QR généré (automatique)
317
+ - `custom_event` - Événements personnalisés
318
+
319
+ ### Gestion des Erreurs
320
+ - Tentatives limitées (5 max) si Socket.IO non disponible
321
+ - Désactivation automatique après échec
322
+ - Logs détaillés pour le debugging
323
+
209
324
  ## 🛡️ Sécurité
210
325
 
211
326
  ### Authentification
212
327
  Le SDK utilise les clés API pour s'authentifier :
213
- - `X-SunuID-Client-ID`
214
- - `X-SunuID-Secret-ID`
328
+ - `clientId` et `secretId` dans le corps des requêtes
329
+ - Connexion WebSocket sécurisée avec token
215
330
 
216
331
  ### Validation
217
332
  - Vérification des paramètres requis
218
333
  - Validation des URLs de redirection
219
334
  - Protection contre les attaques CSRF
335
+ - Types numériques pour éviter les injections
220
336
 
221
337
  ## 🌐 Compatibilité
222
338
 
223
339
  - **Navigateurs** : Chrome 60+, Firefox 55+, Safari 12+, Edge 79+
224
340
  - **Mobile** : iOS Safari 12+, Chrome Mobile 60+
225
341
  - **Node.js** : 14.0.0+
342
+ - **WebSocket** : Socket.IO 4.7.0+
226
343
 
227
344
  ## 📊 Monitoring
228
345
 
@@ -230,7 +347,9 @@ Le SDK utilise les clés API pour s'authentifier :
230
347
  Le SDK génère des logs pour le debugging :
231
348
  ```javascript
232
349
  console.log('SunuID SDK initialisé avec succès');
233
- console.error('SunuID SDK Error:', error);
350
+ console.log('🌐 WebSocket connecté avec succès');
351
+ console.log('📤 Événement WebSocket émis: qr_generated');
352
+ console.error('❌ Erreur connexion WebSocket:', error);
234
353
  ```
235
354
 
236
355
  ### Métriques
@@ -238,6 +357,7 @@ Les partenaires peuvent suivre :
238
357
  - Nombre de QR codes générés
239
358
  - Taux de succès d'authentification
240
359
  - Temps de réponse de l'API
360
+ - Statut des connexions WebSocket
241
361
 
242
362
  ## 🆘 Support
243
363
 
@@ -293,6 +413,7 @@ Ce projet est distribué sous licence MIT. Voir le fichier [LICENSE](LICENSE) po
293
413
  - [FontAwesome](https://fontawesome.com/) pour les icônes
294
414
  - [Inter](https://rsms.me/inter/) pour la typographie
295
415
  - [Rollup](https://rollupjs.org/) pour le bundling
416
+ - [Socket.IO](https://socket.io/) pour les WebSockets
296
417
 
297
418
  ---
298
419