sunuid-sdk 1.0.24 → 1.0.26
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 +204 -24
- package/dist/sunuid-sdk.esm.js +1047 -199
- package/dist/sunuid-sdk.esm.js.map +1 -1
- package/dist/sunuid-sdk.js +1047 -199
- package/dist/sunuid-sdk.js.map +1 -1
- package/dist/sunuid-sdk.min.js +3 -3
- package/dist/sunuid-sdk.min.js.map +1 -1
- package/package.json +3 -4
package/dist/sunuid-sdk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sunuid-sdk.js","sources":["../src/sunuid-sdk.js"],"sourcesContent":["/**\n * SunuID SDK - Package d'intégration pour partenaires\n * \n * @version 1.0.0\n * @author SunuID Team\n * @license MIT\n */\n\n(function(window) {\n 'use strict';\n\n // Configuration par défaut\n const DEFAULT_CONFIG = {\n apiUrl: window.SunuIDConfig?.apiUrl || 'https://api.sunuid.fayma.sn',\n clientId: null,\n secretId: null,\n type: 1, // Type par défaut (1 = authentification)\n theme: 'light',\n language: 'fr',\n autoRefresh: true,\n refreshInterval: 30000, // 30 secondes\n onSuccess: null,\n onError: null,\n onStatusUpdate: null,\n onExpired: null\n };\n\n /**\n * Classe principale SunuID\n */\n class SunuID {\n constructor(config = {}) {\n this.config = { ...DEFAULT_CONFIG, ...config };\n this.qrCode = null;\n this.refreshTimer = null;\n this.isInitialized = false;\n this.socket = null;\n this.websocketRetryCount = 0;\n this.maxWebSocketRetries = 5;\n \n this.init();\n }\n\n /**\n * Initialisation du SDK\n */\n init() {\n if (!this.config.clientId || !this.config.secretId) {\n throw new Error('SunuID: clientId et secretId sont requis');\n }\n\n this.isInitialized = true;\n console.log('SunuID SDK initialisé avec succès');\n \n // Initialiser la connexion WebSocket\n this.initWebSocket();\n }\n\n /**\n * Initialiser la connexion WebSocket\n */\n initWebSocket() {\n try {\n // Vérifier si Socket.IO est disponible\n if (typeof io === 'undefined') {\n this.websocketRetryCount++;\n \n if (this.websocketRetryCount <= this.maxWebSocketRetries) {\n console.warn(`⚠️ Socket.IO non disponible (tentative ${this.websocketRetryCount}/${this.maxWebSocketRetries}), WebSocket sera initialisé plus tard`);\n // Réessayer après un délai\n setTimeout(() => this.initWebSocket(), 1000);\n } else {\n console.warn('⚠️ Socket.IO non disponible après plusieurs tentatives, WebSocket désactivé');\n }\n return;\n }\n \n // Obtenir l'IP du client (simulation)\n const ip = this.getClientIP();\n \n // Initialiser la connexion WebSocket si elle n'existe pas\n if (!this.socket) {\n this.socket = io('wss://samasocket.fayma.sn:9443', {\n query: {\n token: this.config.clientId,\n type: 'web',\n userId: this.config.clientId,\n username: ip\n }\n });\n\n // Gestion des événements WebSocket\n this.socket.on('connect', () => {\n console.log('🌐 WebSocket connecté avec succès');\n console.log('📊 Socket ID:', this.socket.id);\n });\n\n this.socket.on('disconnect', (reason) => {\n console.log('❌ WebSocket déconnecté:', reason);\n });\n\n this.socket.on('connect_error', (error) => {\n console.error('❌ Erreur connexion WebSocket:', error);\n });\n\n // Écouter les événements spécifiques\n this.socket.on('qr_status_update', (data) => {\n console.log('📱 Mise à jour statut QR reçue:', data);\n this.handleQRStatusUpdate(data);\n });\n\n this.socket.on('qr_scan_success', (data) => {\n console.log('✅ Scan QR réussi reçu:', data);\n this.handleQRScanSuccess(data);\n });\n\n this.socket.on('qr_expired', (data) => {\n console.log('⏰ QR expiré reçu:', data);\n this.handleQRExpired(data);\n });\n }\n } catch (error) {\n console.error('❌ Erreur initialisation WebSocket:', error);\n }\n }\n\n /**\n * Obtenir l'IP du client (simulation)\n */\n getClientIP() {\n // Simulation - en production, vous pourriez utiliser un service d'IP\n return '127.0.0.1';\n }\n\n /**\n * Gérer la mise à jour du statut QR\n */\n handleQRStatusUpdate(data) {\n if (this.config.onStatusUpdate) {\n this.config.onStatusUpdate(data);\n }\n }\n\n /**\n * Gérer le succès du scan QR\n */\n handleQRScanSuccess(data) {\n if (this.config.onSuccess) {\n this.config.onSuccess(data);\n }\n }\n\n /**\n * Gérer l'expiration du QR\n */\n handleQRExpired(data) {\n if (this.config.onExpired) {\n this.config.onExpired(data);\n }\n }\n\n /**\n * Émettre un événement WebSocket\n */\n emitWebSocketEvent(event, data) {\n if (this.socket && this.socket.connected) {\n this.socket.emit(event, data);\n console.log(`📤 Événement WebSocket émis: ${event}`, data);\n } else if (typeof io === 'undefined') {\n console.warn('⚠️ Socket.IO non disponible, impossible d\\'émettre l\\'événement:', event);\n } else {\n console.warn('⚠️ WebSocket non connecté, impossible d\\'émettre l\\'événement:', event);\n }\n }\n\n /**\n * Obtenir le statut de la connexion WebSocket\n */\n getWebSocketStatus() {\n if (!this.socket) {\n return 'not_initialized';\n }\n return this.socket.connected ? 'connected' : 'disconnected';\n }\n\n /**\n * Forcer l'initialisation WebSocket (si Socket.IO devient disponible plus tard)\n */\n forceWebSocketInit() {\n if (typeof io !== 'undefined' && !this.socket) {\n console.log('🔄 Forçage de l\\'initialisation WebSocket...');\n this.initWebSocket();\n }\n }\n\n /**\n * Générer un QR code avec le type configuré\n */\n async generateQR(containerId, options = {}) {\n if (!this.isInitialized) {\n throw new Error('SunuID: SDK non initialisé');\n }\n\n try {\n const response = await this.makeRequest('/qr-generate', {\n type: this.config.type, // Utilise le type configuré\n ...options\n });\n\n if (response.success) {\n // Construire l'URL complète de l'image QR avec la base URL pour les images\n const imageBaseUrl = 'https://sunuid.fayma.sn';\n const qrImageUrl = `${imageBaseUrl}${response.data.qrcode}`;\n this.displayQRCode(containerId, qrImageUrl, this.config.type, options);\n this.startAutoRefresh(containerId, this.config.type, options);\n \n // Émettre un événement WebSocket pour la génération du QR\n this.emitWebSocketEvent('qr_generated', {\n serviceId: response.data.service_id,\n type: this.config.type,\n qrCodeUrl: qrImageUrl,\n timestamp: Date.now()\n });\n \n return {\n ...response.data,\n qrCodeUrl: qrImageUrl,\n sessionId: response.data.service_id\n };\n } else {\n throw new Error(response.message || 'Erreur lors de la génération du QR code');\n }\n } catch (error) {\n console.error('Erreur API détectée:', error.message);\n console.log('Affichage du message \"Service non disponible\" pour type ' + this.config.type);\n this.displayServiceUnavailable(containerId, this.config.type);\n throw new Error('Service non disponible');\n }\n }\n\n\n\n /**\n * Générer un QR code avec un type personnalisé\n */\n async generateCustomQR(containerId, type, options = {}) {\n if (!this.isInitialized) {\n throw new Error('SunuID: SDK non initialisé');\n }\n\n try {\n const response = await this.makeRequest('/qr-generate', {\n type: type, // Type personnalisé (1, 2, 3, etc.)\n ...options\n });\n\n if (response.success) {\n // Construire l'URL complète de l'image QR avec la base URL pour les images\n const imageBaseUrl = 'https://sunuid.fayma.sn';\n const qrImageUrl = `${imageBaseUrl}${response.data.qrcode}`;\n this.displayQRCode(containerId, qrImageUrl, type, options);\n this.startAutoRefresh(containerId, type, options);\n return {\n ...response.data,\n qrCodeUrl: qrImageUrl,\n sessionId: response.data.service_id\n };\n } else {\n throw new Error(response.message || 'Erreur lors de la génération du QR code');\n }\n } catch (error) {\n console.error('Erreur API détectée:', error.message);\n console.log('Affichage du message \"Service non disponible\" pour type ' + type);\n this.displayServiceUnavailable(containerId, type);\n throw new Error('Service non disponible');\n }\n }\n\n // Alias pour maintenir la compatibilité\n async generateAuthQR(containerId, options = {}) {\n return this.generateQR(containerId, options);\n }\n\n async generateKYCQR(containerId, options = {}) {\n // Sauvegarder le type actuel\n const originalType = this.config.type;\n // Changer temporairement le type pour KYC\n this.config.type = 2;\n try {\n return await this.generateQR(containerId, options);\n } finally {\n // Restaurer le type original\n this.config.type = originalType;\n }\n }\n\n /**\n * Vérifier le statut d'un QR code\n */\n async checkQRStatus(sessionId) {\n if (!this.isInitialized) {\n throw new Error('SunuID: SDK non initialisé');\n }\n\n try {\n const response = await this.makeRequest('/qr-status', {\n serviceId: sessionId\n });\n\n if (response.success) {\n return response.data;\n } else {\n throw new Error(response.message || 'Erreur lors de la vérification du statut');\n }\n } catch (error) {\n this.handleError(error);\n throw error;\n }\n }\n\n /**\n * Afficher un QR code dans un conteneur\n */\n displayQRCode(containerId, qrUrl, type, options = {}) {\n const container = document.getElementById(containerId);\n if (!container) {\n throw new Error(`Conteneur avec l'ID \"${containerId}\" non trouvé`);\n }\n\n // Nettoyer le conteneur\n container.innerHTML = '';\n\n // Créer l'élément QR code\n const qrElement = document.createElement('div');\n qrElement.className = 'sunuid-qr-code';\n qrElement.innerHTML = `\n <div class=\"sunuid-qr-header\">\n <h3>${type === 1 ? 'Authentification' : type === 2 ? 'Vérification KYC' : type === 3 ? 'Service Type 3' : 'Service Type ' + type}</h3>\n </div>\n <div class=\"sunuid-qr-image\">\n <img src=\"${qrUrl}\" alt=\"QR Code SunuID\" style=\"max-width: 300px; height: auto;\">\n </div>\n <div class=\"sunuid-qr-instructions\">\n <p>Scannez ce QR code avec l'application SunuID pour vous connecter</p>\n </div>\n <div class=\"sunuid-qr-status\" id=\"sunuid-status\">\n <p>En attente de scan...</p>\n </div>\n `;\n\n container.appendChild(qrElement);\n\n // Appliquer le thème\n this.applyTheme(options.theme || this.config.theme);\n }\n\n /**\n * Afficher \"Service non disponible\"\n */\n displayServiceUnavailable(containerId, type) {\n console.log(`displayServiceUnavailable appelée pour ${containerId}, type: ${type}`);\n const container = document.getElementById(containerId);\n if (!container) {\n console.error(`Container ${containerId} non trouvé`);\n return;\n }\n\n container.innerHTML = `\n <div class=\"sunuid-service-unavailable\" style=\"\n text-align: center;\n padding: 40px 20px;\n background: #f8f9fa;\n border: 2px dashed #dee2e6;\n border-radius: 10px;\n color: #6c757d;\n font-family: Arial, sans-serif;\n \">\n <div style=\"font-size: 48px; margin-bottom: 20px;\">⚠️</div>\n <h3 style=\"margin: 0 0 10px 0; color: #495057;\">Service Non Disponible</h3>\n <p style=\"margin: 0; font-size: 14px;\">\n Le service d'authentification est temporairement indisponible.<br>\n Veuillez réessayer plus tard.\n </p>\n <div style=\"margin-top: 20px; font-size: 12px; color: #adb5bd;\">\n Type: ${type.toUpperCase()}\n </div>\n </div>\n `;\n }\n\n /**\n * Rafraîchir un QR code\n */\n async refreshQR(containerId, options = {}) {\n try {\n const result = await this.generateQR(containerId, options);\n return result;\n } catch (error) {\n console.error('Erreur lors du rafraîchissement:', error.message);\n this.displayServiceUnavailable(containerId, this.config.type);\n throw error;\n }\n }\n\n /**\n * Démarrer le rafraîchissement automatique\n */\n startAutoRefresh(containerId, type, options) {\n if (!this.config.autoRefresh) return;\n\n this.refreshTimer = setInterval(async () => {\n try {\n await this.refreshQR(containerId, type, options);\n } catch (error) {\n console.warn('Erreur lors du rafraîchissement automatique:', error);\n }\n }, this.config.refreshInterval);\n }\n\n /**\n * Démarrer le timer de compte à rebours\n */\n\n\n /**\n * Effectuer une requête API\n */\n async makeRequest(endpoint, data) {\n // Utiliser l'endpoint depuis la configuration si disponible\n const endpointPath = window.SunuIDConfig?.endpoints?.[endpoint.replace('/', '')] || endpoint;\n const url = `${this.config.apiUrl}${endpointPath}`;\n \n // Log pour déboguer l'envoi du type\n if (data.type !== undefined) {\n console.log(`🌐 Envoi requête API - Type: ${data.type}, Endpoint: ${endpoint}`);\n }\n \n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${this.config.clientId}:${this.config.secretId}`,\n 'Accept': 'application/json'\n },\n body: JSON.stringify({\n ...data,\n client_id: this.config.clientId,\n secret_id: this.config.secretId\n })\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n let errorData;\n try {\n errorData = JSON.parse(errorText);\n } catch (e) {\n errorData = { message: errorText };\n }\n \n throw new Error(errorData.message || `Erreur HTTP: ${response.status}`);\n }\n\n const result = await response.json();\n return result;\n } catch (error) {\n console.error('Erreur API SunuID:', error);\n throw error;\n }\n }\n\n /**\n * Appliquer le thème\n */\n applyTheme(theme) {\n const container = document.querySelector('.sunuid-qr-code');\n if (container) {\n container.className = `sunuid-qr-code sunuid-theme-${theme}`;\n }\n }\n\n /**\n * Gérer les erreurs\n */\n handleError(error) {\n console.error('SunuID SDK Error:', error);\n \n if (this.config.onError) {\n this.config.onError(error);\n }\n }\n\n /**\n * Nettoyer les ressources\n */\n destroy() {\n if (this.refreshTimer) {\n clearInterval(this.refreshTimer);\n }\n \n // Fermer la connexion WebSocket\n if (this.socket) {\n this.socket.disconnect();\n this.socket = null;\n console.log('🌐 WebSocket déconnecté');\n }\n \n this.isInitialized = false;\n console.log('SunuID SDK détruit');\n }\n }\n\n // Exposer la classe globalement\n window.SunuID = SunuID;\n window.sunuidInstance = null;\n\n // Fonction d'initialisation globale\n window.initSunuID = function(config) {\n try {\n window.sunuidInstance = new SunuID(config);\n return window.sunuidInstance;\n } catch (error) {\n console.error('Erreur lors de l\\'initialisation de SunuID:', error);\n throw error;\n }\n };\n\n})(window); "],"names":["window","_window$SunuIDConfig","DEFAULT_CONFIG","apiUrl","SunuIDConfig","clientId","secretId","type","theme","language","autoRefresh","refreshInterval","onSuccess","onError","onStatusUpdate","onExpired","SunuID","config","arguments","length","undefined","_classCallCheck","_objectSpread","qrCode","refreshTimer","isInitialized","socket","websocketRetryCount","maxWebSocketRetries","init","_createClass","key","value","Error","console","log","initWebSocket","_this","io","warn","concat","setTimeout","ip","getClientIP","query","token","userId","username","on","id","reason","error","data","handleQRStatusUpdate","handleQRScanSuccess","handleQRExpired","emitWebSocketEvent","event","connected","emit","getWebSocketStatus","forceWebSocketInit","_generateQR","_asyncToGenerator","_regenerator","m","_callee","containerId","options","response","imageBaseUrl","qrImageUrl","_args","_t","w","_context","p","n","makeRequest","v","success","qrcode","displayQRCode","startAutoRefresh","serviceId","service_id","qrCodeUrl","timestamp","Date","now","a","sessionId","message","displayServiceUnavailable","generateQR","_x","apply","_generateCustomQR","_callee2","_args2","_t2","_context2","generateCustomQR","_x2","_x3","_generateAuthQR","_callee3","_args3","_context3","generateAuthQR","_x4","_generateKYCQR","_callee4","originalType","_args4","_context4","f","generateKYCQR","_x5","_checkQRStatus","_callee5","_t3","_context5","handleError","checkQRStatus","_x6","qrUrl","container","document","getElementById","innerHTML","qrElement","createElement","className","appendChild","applyTheme","toUpperCase","_refreshQR","_callee6","result","_args6","_t4","_context6","refreshQR","_x7","_this2","setInterval","_callee7","_t5","_context7","_makeRequest","_callee8","endpoint","_window$SunuIDConfig2","endpointPath","url","errorText","errorData","_t6","_context8","endpoints","replace","fetch","method","headers","body","JSON","stringify","client_id","secret_id","ok","text","parse","e","status","json","_x8","_x9","querySelector","destroy","clearInterval","disconnect","sunuidInstance","initSunuID"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sunuid-sdk.js","sources":["../src/sunuid-sdk.js"],"sourcesContent":["/**\n * SunuID SDK - Package d'intégration pour partenaires\n * \n * @version 1.0.0\n * @author SunuID Team\n * @license MIT\n */\n\n(function(window) {\n 'use strict';\n\n // Configuration par défaut\n const DEFAULT_CONFIG = {\n apiUrl: window.SunuIDConfig?.apiUrl || 'https://api.sunuid.fayma.sn',\n clientId: null,\n secretId: null,\n type: 2, // Type par défaut (2 = authentification)\n partnerName: 'SunuID', // Nom du partenaire par défaut\n theme: 'light',\n language: 'fr',\n autoRefresh: true,\n refreshInterval: 30000, // 30 secondes\n onSuccess: null,\n onError: null,\n onStatusUpdate: null,\n onExpired: null,\n // Nouvelles options de sécurité\n enableSecurityLogs: true,\n validateInputs: true,\n maxRetries: 3,\n requestTimeout: 10000, // 10 secondes\n // Options d'initialisation sécurisée\n secureInit: false,\n secureInitUrl: 'http://localhost:8081/secure-init.php',\n token: null\n };\n\n /**\n * Classe principale SunuID\n */\n class SunuID {\n constructor(config = {}) {\n this.config = { ...DEFAULT_CONFIG, ...config };\n this.qrCode = null;\n this.refreshTimer = null;\n this.isInitialized = false;\n this.socket = null;\n \n // Initialisation asynchrone\n this.initPromise = this.init();\n }\n\n /**\n * Initialisation du SDK\n */\n async init() {\n try {\n // Initialisation sécurisée si activée\n if (this.config.secureInit) {\n await this.secureInit();\n } else {\n // Validation sécurisée des paramètres\n if (this.config.validateInputs) {\n this.validateSecurityParams();\n }\n }\n\n // Log de sécurité pour l'initialisation\n this.logSecurityEvent('SDK_INIT_START', {\n apiUrl: this.config.apiUrl,\n type: this.config.type,\n partnerName: this.config.partnerName,\n secureInit: this.config.secureInit\n });\n\n // Obscurcir les credentials dans les logs\n this.obfuscateCredentials();\n\n this.isInitialized = true;\n console.log('SunuID SDK initialisé avec succès');\n \n this.logSecurityEvent('SDK_INIT_SUCCESS');\n \n // Initialiser la connexion WebSocket\n this.initWebSocket();\n \n } catch (error) {\n this.logSecurityEvent('SDK_INIT_ERROR', { error: error.message });\n throw error;\n }\n }\n\n /**\n * Initialisation sécurisée via PHP\n */\n async secureInit() {\n try {\n this.logSecurityEvent('SECURE_INIT_START');\n \n const initData = {\n type: this.config.type,\n partnerName: this.config.partnerName,\n theme: this.config.theme\n };\n\n const response = await fetch(this.config.secureInitUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Accept': 'application/json'\n },\n body: JSON.stringify(initData)\n });\n\n if (!response.ok) {\n throw new Error(`Erreur HTTP: ${response.status}`);\n }\n\n const result = await response.json();\n \n if (!result.success) {\n throw new Error(result.error || 'Erreur lors de l\\'initialisation sécurisée');\n }\n\n // Stocker le token et les données sécurisées\n this.config.token = result.data.token;\n this.config.apiUrl = result.data.api_url;\n \n // Décoder le token pour récupérer les credentials\n const decodedToken = this.decodeSecureToken(result.data.token);\n if (decodedToken) {\n this.config.clientId = decodedToken.client_id;\n this.config.secretId = decodedToken.secret_id;\n } else {\n throw new Error('Impossible de décoder le token sécurisé');\n }\n \n this.config.expiresIn = result.data.expires_in;\n this.config.maxRequests = result.data.max_requests;\n this.config.requestCount = 0;\n\n this.logSecurityEvent('SECURE_INIT_SUCCESS', {\n expiresIn: result.data.expires_in,\n maxRequests: result.data.max_requests\n });\n\n console.log('✅ Initialisation sécurisée réussie');\n \n } catch (error) {\n this.logSecurityEvent('SECURE_INIT_ERROR', { error: error.message });\n throw new Error(`Échec de l'initialisation sécurisée: ${error.message}`);\n }\n }\n\n /**\n * Décoder le token sécurisé\n */\n decodeSecureToken(token) {\n try {\n const parts = token.split('.');\n if (parts.length !== 2) {\n console.error('❌ Format de token invalide');\n return null;\n }\n \n const [payload, signature] = parts;\n \n // Décoder le payload (base64)\n const decodedPayload = atob(payload);\n const tokenData = JSON.parse(decodedPayload);\n \n // Vérifier l'expiration\n if (tokenData.exp && tokenData.exp < Date.now() / 1000) {\n console.error('❌ Token expiré');\n return null;\n }\n \n console.log('✅ Token décodé avec succès');\n return tokenData;\n \n } catch (error) {\n console.error('❌ Erreur décodage token:', error);\n return null;\n }\n }\n\n /**\n * Initialiser la connexion WebSocket\n */\n initWebSocket() {\n try {\n // Vérifier si Socket.IO est disponible\n if (typeof io === 'undefined') {\n console.warn('⚠️ Socket.IO non disponible, WebSocket sera initialisé plus tard');\n // Réessayer après un délai\n setTimeout(() => this.initWebSocket(), 1000);\n return;\n }\n \n // Obtenir l'IP du client (simulation)\n const ip = this.getClientIP();\n \n // Initialiser la connexion WebSocket si elle n'existe pas\n if (!this.socket) {\n this.socket = io('wss://samasocket.fayma.sn:9443', {\n query: {\n token: this.config.clientId,\n type: 'web',\n userId: this.config.clientId,\n username: ip\n }\n });\n\n // Gestion des événements WebSocket\n this.socket.on('connect', () => {\n console.log('🌐 WebSocket connecté avec succès');\n console.log('📊 Socket ID:', this.socket.id);\n });\n\n this.socket.on('disconnect', (reason) => {\n console.log('❌ WebSocket déconnecté:', reason);\n });\n\n this.socket.on('connect_error', (error) => {\n console.error('❌ Erreur connexion WebSocket:', error);\n });\n\n // Écouter les événements spécifiques\n this.socket.on('qr_status_update', (data) => {\n console.log('📱 Mise à jour statut QR reçue:', data);\n this.handleQRStatusUpdate(data);\n });\n\n this.socket.on('qr_scan_success', (data) => {\n console.log('✅ Scan QR réussi reçu:', data);\n this.handleQRScanSuccess(data);\n });\n\n this.socket.on('qr_expired', (data) => {\n console.log('⏰ QR expiré reçu:', data);\n this.handleQRExpired(data);\n });\n }\n } catch (error) {\n console.error('❌ Erreur initialisation WebSocket:', error);\n }\n }\n\n /**\n * Obtenir l'IP du client (simulation)\n */\n getClientIP() {\n // Simulation - en production, vous pourriez utiliser un service d'IP\n return '127.0.0.1';\n }\n\n /**\n * Obtenir le nom du type à partir du numéro\n */\n getTypeName(type) {\n switch(type) {\n case 1: return 'KYC';\n case 2: return 'AUTH';\n case 3: return 'SIGNATURE';\n default: return `TYPE-${type}`;\n }\n }\n\n /**\n * Validation sécurisée des paramètres\n */\n validateSecurityParams() {\n const errors = [];\n \n // Validation du clientId\n if (!this.config.clientId || typeof this.config.clientId !== 'string') {\n errors.push('clientId invalide ou manquant');\n } else if (this.config.clientId.length < 10) {\n errors.push('clientId trop court');\n }\n \n // Validation du secretId\n if (!this.config.secretId || typeof this.config.secretId !== 'string') {\n errors.push('secretId invalide ou manquant');\n } else if (this.config.secretId.length < 32) {\n errors.push('secretId trop court (minimum 32 caractères)');\n }\n \n // Validation de l'URL API\n if (!this.config.apiUrl || !this.isValidUrl(this.config.apiUrl)) {\n errors.push('apiUrl invalide');\n }\n \n // Validation du type\n if (![1, 2, 3].includes(this.config.type)) {\n errors.push('type invalide (doit être 1, 2 ou 3)');\n }\n \n if (errors.length > 0) {\n this.logSecurityEvent('VALIDATION_ERROR', { errors });\n throw new Error(`Paramètres de sécurité invalides: ${errors.join(', ')}`);\n }\n \n this.logSecurityEvent('VALIDATION_SUCCESS');\n }\n\n /**\n * Validation d'URL sécurisée\n */\n isValidUrl(string) {\n try {\n const url = new URL(string);\n return url.protocol === 'https:' || url.protocol === 'http:';\n } catch (_) {\n return false;\n }\n }\n\n /**\n * Logs de sécurité\n */\n logSecurityEvent(event, data = {}) {\n if (!this.config.enableSecurityLogs) return;\n \n const securityLog = {\n timestamp: new Date().toISOString(),\n event: event,\n data: data,\n userAgent: navigator.userAgent,\n url: window.location.href\n };\n \n console.warn('🔒 [SECURITY]', securityLog);\n \n // Stocker les logs de sécurité (optionnel)\n if (!window.SunuIDSecurityLogs) {\n window.SunuIDSecurityLogs = [];\n }\n window.SunuIDSecurityLogs.push(securityLog);\n }\n\n /**\n * Chiffrement simple des credentials (pour éviter l'exposition en clair)\n */\n obfuscateCredentials() {\n // Stocker les vraies valeurs pour les logs de sécurité\n this.config.originalClientId = this.config.clientId;\n this.config.originalSecretId = this.config.secretId;\n \n // Créer des versions obfusquées pour l'affichage uniquement\n if (this.config.clientId) {\n this.config.clientIdDisplay = this.config.clientId.replace(/(.{3}).*(.{3})/, '$1***$2');\n }\n if (this.config.secretId) {\n this.config.secretIdDisplay = this.config.secretId.replace(/(.{4}).*(.{4})/, '$1***$2');\n }\n }\n\n /**\n * Validation des entrées utilisateur\n */\n sanitizeInput(input) {\n if (typeof input !== 'string') return input;\n \n // Protection contre les injections XSS basiques\n return input\n .replace(/[<>]/g, '') // Supprimer les balises HTML\n .replace(/javascript:/gi, '') // Supprimer les protocoles dangereux\n .trim();\n }\n\n /**\n * Gérer la mise à jour du statut QR\n */\n handleQRStatusUpdate(data) {\n if (this.config.onStatusUpdate) {\n this.config.onStatusUpdate(data);\n }\n }\n\n /**\n * Gérer le succès du scan QR\n */\n handleQRScanSuccess(data) {\n if (this.config.onSuccess) {\n this.config.onSuccess(data);\n }\n }\n\n /**\n * Gérer l'expiration du QR\n */\n handleQRExpired(data) {\n if (this.config.onExpired) {\n this.config.onExpired(data);\n }\n }\n\n /**\n * Émettre un événement WebSocket\n */\n emitWebSocketEvent(event, data) {\n if (this.socket && this.socket.connected) {\n this.socket.emit(event, data);\n console.log(`📤 Événement WebSocket émis: ${event}`, data);\n } else if (typeof io === 'undefined') {\n console.warn('⚠️ Socket.IO non disponible, impossible d\\'émettre l\\'événement:', event);\n } else {\n console.warn('⚠️ WebSocket non connecté, impossible d\\'émettre l\\'événement:', event);\n }\n }\n\n /**\n * Obtenir le statut de la connexion WebSocket\n */\n getWebSocketStatus() {\n if (!this.socket) {\n return 'not_initialized';\n }\n return this.socket.connected ? 'connected' : 'disconnected';\n }\n\n /**\n * Forcer l'initialisation WebSocket (si Socket.IO devient disponible plus tard)\n */\n forceWebSocketInit() {\n if (typeof io !== 'undefined' && !this.socket) {\n console.log('🔄 Forçage de l\\'initialisation WebSocket...');\n this.initWebSocket();\n }\n }\n\n /**\n * Générer un QR code avec le type configuré\n */\n async generateQR(containerId, options = {}) {\n // Attendre l'initialisation si nécessaire\n if (this.initPromise) {\n await this.initPromise;\n this.initPromise = null;\n }\n \n if (!this.isInitialized) {\n throw new Error('SunuID: SDK non initialisé');\n }\n\n try {\n const response = await this.makeRequest('/qr-generate', {\n type: this.config.type, // Utilise le type configuré\n ...options\n });\n\n if (response.success) {\n // Construire l'URL complète de l'image QR avec la base URL pour les images\n const imageBaseUrl = 'https://sunuid.fayma.sn';\n const qrImageUrl = `${imageBaseUrl}${response.data.qrcode}`;\n this.displayQRCode(containerId, qrImageUrl, this.config.type, options);\n \n // Générer le QR code personnalisé avec le type + code de l'API + socket ID\n if (this.pendingQRInfo && response.data.code) {\n // Attendre que le socket ID soit bien défini\n const waitForSocketId = () => {\n if (this.socket && this.socket.id && this.socket.id !== 'unknown') {\n const socketId = this.socket.id;\n const qrContent = `${this.config.type}-${response.data.code}-${socketId}`;\n \n // Utiliser le partnerName de la réponse API et le nom du type\n const partnerName = response.data.partnerName || this.config.partnerName || 'SunuID';\n const typeName = this.getTypeName(this.config.type);\n const qrLabel = `${typeName} - ${partnerName}`;\n \n this.generateCustomQRCode(qrContent, qrLabel, this.pendingQRInfo.options);\n this.pendingQRInfo = null; // Nettoyer\n } else {\n // Réessayer après un délai si le socket ID n'est pas encore disponible\n setTimeout(waitForSocketId, 100);\n }\n };\n \n waitForSocketId();\n }\n \n this.startAutoRefresh(containerId, this.config.type, options);\n \n // Émettre un événement WebSocket pour la génération du QR\n this.emitWebSocketEvent('qr_generated', {\n serviceId: response.data.service_id,\n type: this.config.type,\n qrCodeUrl: qrImageUrl,\n code: response.data.code,\n timestamp: Date.now()\n });\n \n return {\n ...response.data,\n qrCodeUrl: qrImageUrl,\n sessionId: response.data.service_id\n };\n } else {\n throw new Error(response.message || 'Erreur lors de la génération du QR code');\n }\n } catch (error) {\n console.error('Erreur API détectée:', error.message);\n console.error('Stack trace complet:', error.stack);\n console.error('Configuration SDK:', {\n apiUrl: this.config.apiUrl,\n type: this.config.type,\n secureInit: this.config.secureInit,\n clientId: this.config.clientId ? '***' + this.config.clientId.slice(-4) : 'null',\n secretId: this.config.secretId ? '***' + this.config.secretId.slice(-4) : 'null'\n });\n console.log('Affichage du message \"Service non disponible\" pour type ' + this.config.type);\n this.displayServiceUnavailable(containerId, this.config.type);\n throw new Error('Service non disponible');\n }\n }\n\n\n\n /**\n * Générer un QR code avec un type personnalisé\n */\n async generateCustomQR(containerId, type, options = {}) {\n // Attendre l'initialisation si nécessaire\n if (this.initPromise) {\n await this.initPromise;\n this.initPromise = null;\n }\n \n if (!this.isInitialized) {\n throw new Error('SunuID: SDK non initialisé');\n }\n\n try {\n const response = await this.makeRequest('/qr-generate', {\n type: type, // Type personnalisé (1, 2, 3, etc.)\n ...options\n });\n\n if (response.success) {\n // Construire l'URL complète de l'image QR avec la base URL pour les images\n const imageBaseUrl = 'https://sunuid.fayma.sn';\n const qrImageUrl = `${imageBaseUrl}${response.data.qrcode}`;\n this.displayQRCode(containerId, qrImageUrl, type, options);\n \n // Générer le QR code personnalisé avec le type + code de l'API + socket ID\n if (this.pendingQRInfo && response.data.code) {\n // Attendre que le socket ID soit bien défini\n const waitForSocketId = () => {\n if (this.socket && this.socket.id && this.socket.id !== 'unknown') {\n const socketId = this.socket.id;\n const qrContent = `${type}-${response.data.code}-${socketId}`;\n \n // Utiliser le partnerName de la réponse API et le nom du type\n const partnerName = response.data.partnerName || this.config.partnerName || 'SunuID';\n const typeName = this.getTypeName(type);\n const qrLabel = `${typeName} - ${partnerName}`;\n \n this.generateCustomQRCode(qrContent, qrLabel, this.pendingQRInfo.options);\n this.pendingQRInfo = null; // Nettoyer\n } else {\n // Réessayer après un délai si le socket ID n'est pas encore disponible\n setTimeout(waitForSocketId, 100);\n }\n };\n \n waitForSocketId();\n }\n \n this.startAutoRefresh(containerId, type, options);\n return {\n ...response.data,\n qrCodeUrl: qrImageUrl,\n sessionId: response.data.service_id\n };\n } else {\n throw new Error(response.message || 'Erreur lors de la génération du QR code');\n }\n } catch (error) {\n console.error('Erreur API détectée:', error.message);\n console.error('Stack trace complet:', error.stack);\n console.error('Configuration SDK (Custom):', {\n apiUrl: this.config.apiUrl,\n type: type,\n secureInit: this.config.secureInit,\n clientId: this.config.clientId ? '***' + this.config.clientId.slice(-4) : 'null',\n secretId: this.config.secretId ? '***' + this.config.secretId.slice(-4) : 'null'\n });\n console.log('Affichage du message \"Service non disponible\" pour type ' + type);\n this.displayServiceUnavailable(containerId, type);\n throw new Error('Service non disponible');\n }\n }\n\n // Alias pour maintenir la compatibilité\n async generateAuthQR(containerId, options = {}) {\n return this.generateQR(containerId, options);\n }\n\n async generateKYCQR(containerId, options = {}) {\n // Sauvegarder le type actuel\n const originalType = this.config.type;\n // Changer temporairement le type pour KYC\n this.config.type = 1;\n try {\n return await this.generateQR(containerId, options);\n } finally {\n // Restaurer le type original\n this.config.type = originalType;\n }\n }\n\n async generateSignatureQR(containerId, options = {}) {\n // Sauvegarder le type actuel\n const originalType = this.config.type;\n // Changer temporairement le type pour Signature\n this.config.type = 3;\n try {\n return await this.generateQR(containerId, options);\n } finally {\n // Restaurer le type original\n this.config.type = originalType;\n }\n }\n\n /**\n * Vérifier le statut d'un QR code\n */\n async checkQRStatus(sessionId) {\n if (!this.isInitialized) {\n throw new Error('SunuID: SDK non initialisé');\n }\n\n try {\n const response = await this.makeRequest('/qr-status', {\n serviceId: sessionId\n });\n\n if (response.success) {\n return response.data;\n } else {\n throw new Error(response.message || 'Erreur lors de la vérification du statut');\n }\n } catch (error) {\n this.handleError(error);\n throw error;\n }\n }\n\n /**\n * Afficher un QR code dans un conteneur\n */\n displayQRCode(containerId, qrUrl, type, options = {}) {\n const container = document.getElementById(containerId);\n if (!container) {\n throw new Error(`Conteneur avec l'ID \"${containerId}\" non trouvé`);\n }\n\n // Nettoyer le conteneur\n container.innerHTML = '';\n\n // Créer l'élément QR code\n const qrElement = document.createElement('div');\n qrElement.className = 'sunuid-qr-code';\n \n // Afficher un loader en attendant la réponse API et la connexion socket\n const typeName = this.getTypeName(type);\n qrElement.innerHTML = `\n <div class=\"sunuid-qr-header\">\n <h3>${type === 1 ? 'Vérification KYC' : type === 2 ? 'Authentification' : type === 3 ? 'Signature' : 'Service Type ' + type}</h3>\n </div>\n <div class=\"sunuid-qr-image\" id=\"sunuid-qr-container\">\n <div style=\"text-align: center; padding: 40px;\">\n <div class=\"sunuid-loader\">\n <div class=\"sunuid-spinner\"></div>\n <p style=\"margin-top: 20px; color: #666;\">Initialisation en cours...</p>\n <p style=\"font-size: 12px; color: #999; margin-top: 10px;\">Connexion API et WebSocket</p>\n <p style=\"font-size: 11px; color: #ccc; margin-top: 5px;\">Attente du Socket ID...</p>\n </div>\n </div>\n </div>\n <div class=\"sunuid-qr-instructions\" style=\"display: none;\">\n <p>Scannez ce QR code avec l'application SunuID pour vous connecter</p>\n </div>\n <div class=\"sunuid-qr-status\" id=\"sunuid-status\" style=\"display: none;\">\n <p>En attente de scan...</p>\n </div>\n `;\n\n container.appendChild(qrElement);\n\n // Stocker les informations pour la génération ultérieure\n this.pendingQRInfo = {\n containerId,\n type,\n options\n };\n\n // Appliquer le thème\n this.applyTheme(options.theme || this.config.theme);\n }\n\n /**\n * Générer un QR code personnalisé avec PHP Endroid\n */\n async generateCustomQRCode(content, label, options = {}) {\n try {\n console.log('🎨 Début génération QR personnalisé avec PHP...');\n console.log('📄 Contenu:', content);\n console.log('🏷️ Label:', label);\n \n const qrContainer = document.getElementById('sunuid-qr-container');\n if (!qrContainer) {\n console.error('❌ QR container not found');\n this.displayFallbackImage();\n return;\n }\n \n console.log('✅ QR container trouvé');\n\n // Nettoyer le conteneur\n qrContainer.innerHTML = '<div style=\"text-align: center; padding: 20px;\"><p>Génération QR code avec PHP...</p></div>';\n\n // Appeler l'endpoint PHP\n console.log('🔄 Appel endpoint PHP...');\n const response = await fetch('http://localhost:8081/qr-generator.php', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Accept': 'application/json'\n },\n body: JSON.stringify({\n content: content,\n label: label,\n size: 300,\n margin: 10\n })\n });\n \n console.log('📥 Réponse PHP reçue - Status:', response.status);\n \n if (!response.ok) {\n throw new Error(`Erreur HTTP: ${response.status}`);\n }\n \n const responseData = await response.json();\n \n if (!responseData.success) {\n throw new Error(`Erreur PHP: ${responseData.error}`);\n }\n \n console.log('✅ QR code généré par PHP avec succès');\n console.log('📊 Taille:', responseData.data.size + 'px');\n console.log('📊 Longueur base64:', responseData.data.length + ' caractères');\n\n // Créer le conteneur avec le QR code PHP\n qrContainer.innerHTML = `\n <div class=\"sunuid-qr-ready\" style=\"text-align: center; padding: 20px;\">\n <img src=\"${responseData.data.dataUrl}\" alt=\"QR Code SunuID\" style=\"max-width: 300px; border: 2px solid #ddd; border-radius: 10px;\">\n <div style=\"margin-top: 15px;\">\n <p style=\"font-weight: bold; color: #333; margin: 5px 0;\">${label}</p>\n <p style=\"color: #666; font-size: 12px; margin: 5px 0;\">${content}</p>\n </div>\n </div>\n `;\n \n // Afficher les instructions et le statut maintenant que le QR est prêt\n const instructionsElement = qrContainer.parentElement.querySelector('.sunuid-qr-instructions');\n const statusElement = qrContainer.parentElement.querySelector('.sunuid-qr-status');\n \n if (instructionsElement) {\n instructionsElement.style.display = 'block';\n instructionsElement.classList.add('sunuid-qr-ready');\n }\n if (statusElement) {\n statusElement.style.display = 'block';\n statusElement.classList.add('sunuid-qr-ready');\n }\n \n console.log('✅ QR code PHP affiché dans le conteneur');\n\n } catch (error) {\n console.error('❌ Erreur génération QR PHP:', error);\n console.error('Stack trace:', error.stack);\n this.displayFallbackImage();\n }\n }\n\n /**\n * Ajouter le logo au centre du QR code\n */\n addLogoToCenter(ctx, x, y, width, height) {\n try {\n // Créer une image pour le logo\n const logo = new Image();\n logo.onload = () => {\n const logoSize = 40;\n const logoX = x + (width - logoSize) / 2;\n const logoY = y + (width - logoSize) / 2;\n\n // Dessiner un fond blanc pour le logo\n ctx.fillStyle = 'white';\n ctx.fillRect(logoX - 2, logoY - 2, logoSize + 4, logoSize + 4);\n\n // Dessiner le logo\n ctx.drawImage(logo, logoX, logoY, logoSize, logoSize);\n };\n logo.src = 'src/logoqr.png';\n } catch (error) {\n console.warn('Logo non disponible:', error);\n }\n }\n\n /**\n * Afficher l'image de fallback\n */\n displayFallbackImage() {\n console.log('⚠️ Affichage de l\\'image de fallback');\n const qrContainer = document.getElementById('sunuid-qr-container');\n if (qrContainer) {\n qrContainer.innerHTML = `\n <div style=\"text-align: center; padding: 20px; color: #666;\">\n <p>⚠️ Génération QR personnalisé non disponible</p>\n <p>Utilisation de l'image par défaut</p>\n <p><strong>Debug:</strong> QRCode disponible: ${typeof QRCode !== 'undefined'}</p>\n <p><strong>Debug:</strong> Container trouvé: ${qrContainer !== null}</p>\n </div>\n `;\n } else {\n console.error('❌ Container QR non trouvé pour fallback');\n }\n }\n\n /**\n * Afficher \"Service non disponible\"\n */\n displayServiceUnavailable(containerId, type) {\n console.log(`displayServiceUnavailable appelée pour ${containerId}, type: ${type}`);\n const container = document.getElementById(containerId);\n if (!container) {\n console.error(`Container ${containerId} non trouvé`);\n return;\n }\n\n container.innerHTML = `\n <div class=\"sunuid-service-unavailable\" style=\"\n text-align: center;\n padding: 40px 20px;\n background: #f8f9fa;\n border: 2px dashed #dee2e6;\n border-radius: 10px;\n color: #6c757d;\n font-family: Arial, sans-serif;\n \">\n <div style=\"font-size: 48px; margin-bottom: 20px;\">⚠️</div>\n <h3 style=\"margin: 0 0 10px 0; color: #495057;\">Service Non Disponible</h3>\n <p style=\"margin: 0; font-size: 14px;\">\n Le service d'authentification est temporairement indisponible.<br>\n Veuillez réessayer plus tard.\n </p>\n <div style=\"margin-top: 20px; font-size: 12px; color: #adb5bd;\">\n Type: ${String(type).toUpperCase()}\n </div>\n </div>\n `;\n }\n\n /**\n * Rafraîchir un QR code\n */\n async refreshQR(containerId, options = {}) {\n try {\n const result = await this.generateQR(containerId, options);\n return result;\n } catch (error) {\n console.error('Erreur lors du rafraîchissement:', error.message);\n this.displayServiceUnavailable(containerId, this.config.type);\n throw error;\n }\n }\n\n /**\n * Démarrer le rafraîchissement automatique\n */\n startAutoRefresh(containerId, type, options) {\n if (!this.config.autoRefresh) return;\n\n this.refreshTimer = setInterval(async () => {\n try {\n await this.refreshQR(containerId, type, options);\n } catch (error) {\n console.warn('Erreur lors du rafraîchissement automatique:', error);\n }\n }, this.config.refreshInterval);\n }\n\n /**\n * Démarrer le timer de compte à rebours\n */\n\n\n /**\n * Effectuer une requête API sécurisée\n */\n async makeRequest(endpoint, data) {\n // Validation de sécurité\n if (!this.isInitialized) {\n this.logSecurityEvent('REQUEST_BEFORE_INIT', { endpoint });\n throw new Error('SDK non initialisé');\n }\n\n // Vérifier les limites de requêtes pour l'initialisation sécurisée\n if (this.config.secureInit) {\n this.config.requestCount++;\n if (this.config.requestCount > this.config.maxRequests) {\n this.logSecurityEvent('API_REQUEST_LIMIT_EXCEEDED', { \n requestCount: this.config.requestCount,\n maxRequests: this.config.maxRequests \n });\n throw new Error('Limite de requêtes dépassée');\n }\n }\n\n // Sanitisation des données\n const sanitizedData = this.sanitizeRequestData(data);\n \n // Debug: Afficher les données envoyées\n console.log('🔍 Debug makeRequest - endpoint:', endpoint);\n console.log('🔍 Debug makeRequest - apiUrl:', this.config.apiUrl);\n console.log('🔍 Debug makeRequest - url:', `${this.config.apiUrl}${endpoint}`);\n console.log('🔍 Debug makeRequest - data:', JSON.stringify(sanitizedData, null, 2));\n console.log('🔍 Debug makeRequest - secureInit:', this.config.secureInit);\n console.log('🔍 Debug makeRequest - isInitialized:', this.isInitialized);\n \n // Utiliser l'endpoint depuis la configuration si disponible\n const endpointPath = window.SunuIDConfig?.endpoints?.[endpoint.replace('/', '')] || endpoint;\n const url = `${this.config.apiUrl}${endpointPath}`;\n \n // Debug: Afficher l'URL finale\n console.log('🔍 URL finale construite:', url);\n console.log('🔍 EndpointPath:', endpointPath);\n console.log('🔍 SunuIDConfig endpoints:', JSON.stringify(window.SunuIDConfig?.endpoints));\n \n // Log de sécurité pour la requête\n this.logSecurityEvent('API_REQUEST_START', {\n endpoint: endpointPath,\n url: url,\n dataKeys: Object.keys(sanitizedData),\n secureInit: this.config.secureInit\n });\n \n let retryCount = 0;\n const maxRetries = this.config.maxRetries;\n \n while (retryCount <= maxRetries) {\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.config.requestTimeout);\n \n // Headers minimaux (API SunuID n'accepte que les headers essentiels)\n const headers = {\n 'Content-Type': 'application/json'\n };\n\n // Note: En mode sécurisé, les credentials sont dans le body\n // Pas besoin d'ajouter de header spécial pour éviter les problèmes CORS\n // if (this.config.secureInit && this.config.token) {\n // headers['X-Secure-Token'] = this.config.token;\n // }\n \n const response = await fetch(url, {\n method: 'POST',\n headers: headers,\n body: JSON.stringify(sanitizedData),\n signal: controller.signal\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const errorText = await response.text();\n let errorData;\n try {\n errorData = JSON.parse(errorText);\n } catch (e) {\n errorData = { message: errorText };\n }\n \n this.logSecurityEvent('API_REQUEST_ERROR', {\n status: response.status,\n statusText: response.statusText,\n error: errorData.message\n });\n \n throw new Error(errorData.message || `Erreur HTTP: ${response.status}`);\n }\n\n const result = await response.json();\n \n this.logSecurityEvent('API_REQUEST_SUCCESS', {\n endpoint: endpointPath,\n responseKeys: Object.keys(result)\n });\n \n return result;\n \n } catch (error) {\n retryCount++;\n \n if (error.name === 'AbortError') {\n this.logSecurityEvent('API_REQUEST_TIMEOUT', { retryCount });\n if (retryCount > maxRetries) {\n throw new Error('Timeout de la requête API');\n }\n continue;\n }\n \n if (retryCount > maxRetries) {\n this.logSecurityEvent('API_REQUEST_MAX_RETRIES', { \n retryCount, \n error: error.message \n });\n throw error;\n }\n \n // Attendre avant de réessayer\n await new Promise(resolve => setTimeout(resolve, 1000 * retryCount));\n }\n }\n }\n\n /**\n * Sanitisation des données de requête\n */\n sanitizeRequestData(data) {\n const sanitized = {};\n \n for (const [key, value] of Object.entries(data)) {\n if (typeof value === 'string') {\n sanitized[key] = this.sanitizeInput(value);\n } else if (typeof value === 'object' && value !== null) {\n sanitized[key] = this.sanitizeRequestData(value);\n } else {\n sanitized[key] = value;\n }\n }\n \n // Ajouter les credentials dans le body (API SunuID les attend ici)\n // Utiliser les vraies valeurs (originales) si disponibles, sinon les valeurs directes\n sanitized.client_id = this.config.originalClientId || this.config.clientId;\n sanitized.secret_id = this.config.originalSecretId || this.config.secretId;\n \n // Debug: Vérifier les credentials\n console.log('🔍 Credentials dans sanitizeRequestData - clientId:', this.config.clientId);\n console.log('🔍 Credentials dans sanitizeRequestData - secretId:', this.config.secretId ? '***' + this.config.secretId.slice(-4) : 'null');\n console.log('🔍 Credentials dans sanitizeRequestData - sanitizedClientId:', sanitized.client_id);\n console.log('🔍 Credentials dans sanitizeRequestData - sanitizedSecretId:', sanitized.secret_id ? '***' + sanitized.secret_id.slice(-4) : 'null');\n console.log('🔍 Credentials dans sanitizeRequestData - data complet:', JSON.stringify(sanitized, null, 2));\n \n // Debug: Vérifier les credentials\n console.log('🔍 Credentials dans sanitizeRequestData - clientId:', this.config.clientId);\n console.log('🔍 Credentials dans sanitizeRequestData - secretId:', this.config.secretId ? '***' + this.config.secretId.slice(-4) : 'null');\n console.log('🔍 Credentials dans sanitizeRequestData - sanitizedClientId:', sanitized.client_id);\n console.log('🔍 Credentials dans sanitizeRequestData - sanitizedSecretId:', sanitized.secret_id ? '***' + sanitized.secret_id.slice(-4) : 'null');\n console.log('🔍 Credentials dans sanitizeRequestData - data complet:', JSON.stringify(sanitized, null, 2));\n \n return sanitized;\n }\n\n /**\n * Générer un ID de requête unique\n */\n generateRequestId() {\n return 'req_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);\n }\n\n /**\n * Appliquer le thème\n */\n applyTheme(theme) {\n const container = document.querySelector('.sunuid-qr-code');\n if (container) {\n container.className = `sunuid-qr-code sunuid-theme-${theme}`;\n }\n }\n\n /**\n * Gérer les erreurs\n */\n handleError(error) {\n console.error('SunuID SDK Error:', error);\n \n if (this.config.onError) {\n this.config.onError(error);\n }\n }\n\n /**\n * Nettoyer les ressources\n */\n destroy() {\n if (this.refreshTimer) {\n clearInterval(this.refreshTimer);\n }\n \n // Fermer la connexion WebSocket\n if (this.socket) {\n this.socket.disconnect();\n this.socket = null;\n console.log('🌐 WebSocket déconnecté');\n }\n \n this.isInitialized = false;\n this.logSecurityEvent('SDK_DESTROY');\n console.log('SunuID SDK détruit');\n }\n\n /**\n * Obtenir les logs de sécurité\n */\n getSecurityLogs() {\n return window.SunuIDSecurityLogs || [];\n }\n\n /**\n * Nettoyer les logs de sécurité\n */\n clearSecurityLogs() {\n window.SunuIDSecurityLogs = [];\n this.logSecurityEvent('SECURITY_LOGS_CLEARED');\n }\n }\n\n // Exposer la classe globalement\n window.SunuID = SunuID;\n window.sunuidInstance = null;\n\n // Fonction d'initialisation globale\n window.initSunuID = function(config) {\n try {\n window.sunuidInstance = new SunuID(config);\n return window.sunuidInstance;\n } catch (error) {\n console.error('Erreur lors de l\\'initialisation de SunuID:', error);\n throw error;\n }\n };\n\n})(window); "],"names":["window","_window$SunuIDConfig","DEFAULT_CONFIG","apiUrl","SunuIDConfig","clientId","secretId","type","partnerName","theme","language","autoRefresh","refreshInterval","onSuccess","onError","onStatusUpdate","onExpired","enableSecurityLogs","validateInputs","maxRetries","requestTimeout","secureInit","secureInitUrl","token","SunuID","config","arguments","length","undefined","_classCallCheck","_objectSpread","qrCode","refreshTimer","isInitialized","socket","initPromise","init","_createClass","key","value","_init","_asyncToGenerator","_regenerator","m","_callee","_t","w","_context","p","n","validateSecurityParams","logSecurityEvent","obfuscateCredentials","console","log","initWebSocket","v","error","message","a","apply","_secureInit","_callee2","initData","response","result","decodedToken","_t2","_context2","fetch","method","headers","body","JSON","stringify","ok","Error","concat","status","json","success","data","api_url","decodeSecureToken","client_id","secret_id","expiresIn","expires_in","maxRequests","max_requests","requestCount","parts","split","_parts","_slicedToArray","payload","signature","decodedPayload","atob","tokenData","parse","exp","Date","now","_this","io","warn","setTimeout","ip","getClientIP","query","userId","username","on","id","reason","handleQRStatusUpdate","handleQRScanSuccess","handleQRExpired","getTypeName","errors","push","isValidUrl","includes","join","string","url","URL","protocol","_","event","securityLog","timestamp","toISOString","userAgent","navigator","location","href","SunuIDSecurityLogs","originalClientId","originalSecretId","clientIdDisplay","replace","secretIdDisplay","sanitizeInput","input","trim","emitWebSocketEvent","connected","emit","getWebSocketStatus","forceWebSocketInit","_generateQR","_callee3","containerId","_this2","options","imageBaseUrl","qrImageUrl","_waitForSocketId","_args3","_t3","_context3","makeRequest","qrcode","displayQRCode","pendingQRInfo","code","waitForSocketId","socketId","qrContent","typeName","qrLabel","generateCustomQRCode","startAutoRefresh","serviceId","service_id","qrCodeUrl","sessionId","stack","slice","displayServiceUnavailable","generateQR","_x","_generateCustomQR","_callee4","_this3","_response","_waitForSocketId2","_args4","_t4","_context4","generateCustomQR","_x2","_x3","_generateAuthQR","_callee5","_args5","_context5","generateAuthQR","_x4","_generateKYCQR","_callee6","originalType","_args6","_context6","f","generateKYCQR","_x5","_generateSignatureQR","_callee7","_args7","_context7","generateSignatureQR","_x6","_checkQRStatus","_callee8","_response2","_t5","_context8","handleError","checkQRStatus","_x7","qrUrl","container","document","getElementById","innerHTML","qrElement","createElement","className","appendChild","applyTheme","_generateCustomQRCode","_callee9","content","label","qrContainer","_response3","responseData","instructionsElement","statusElement","_args9","_t6","_context9","displayFallbackImage","size","margin","dataUrl","parentElement","querySelector","style","display","classList","add","_x8","_x9","addLogoToCenter","ctx","x","y","width","height","logo","Image","onload","logoSize","logoX","logoY","fillStyle","fillRect","drawImage","src","QRCode","String","toUpperCase","_refreshQR","_callee0","_args0","_t7","_context0","refreshQR","_x0","_this4","setInterval","_callee1","_t8","_context1","_makeRequest","_callee10","endpoint","_window$SunuIDConfig2","_window$SunuIDConfig3","_this5","sanitizedData","endpointPath","retryCount","_loop","_ret","_context11","sanitizeRequestData","endpoints","dataKeys","Object","keys","controller","timeoutId","_response4","errorText","errorData","_t9","_context10","AbortController","abort","signal","clearTimeout","text","e","statusText","responseKeys","name","Promise","resolve","d","_regeneratorValues","_x1","_x10","sanitized","_i","_Object$entries","entries","_Object$entries$_i","_typeof","generateRequestId","Math","random","toString","substr","destroy","clearInterval","disconnect","getSecurityLogs","clearSecurityLogs","sunuidInstance","initSunuID"],"mappings":"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"}
|
package/dist/sunuid-sdk.min.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
!function(){"use strict";function e(e,t,n,
|
|
1
|
+
!function(){"use strict";function e(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=Array(t);n<t;n++)i[n]=e[n];return i}function t(e,t,n,i,r,o,s){try{var a=e[o](s),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(i,r)}function n(e){return function(){var n=this,i=arguments;return new Promise(function(r,o){var s=e.apply(n,i);function a(e){t(s,r,o,a,c,"next",e)}function c(e){t(s,r,o,a,c,"throw",e)}a(void 0)})}}function i(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,d(i.key),i)}}function r(e,t,n){return(t=d(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,i)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach(function(t){r(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function a(){
|
|
2
2
|
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
|
|
3
|
-
var e,t,n="function"==typeof Symbol?Symbol:{},
|
|
3
|
+
var e,t,n="function"==typeof Symbol?Symbol:{},i=n.iterator||"@@iterator",r=n.toStringTag||"@@toStringTag";function o(n,i,r,o){var a=i&&i.prototype instanceof u?i:u,l=Object.create(a.prototype);return c(l,"_invoke",function(n,i,r){var o,a,c,u=0,l=r||[],d=!1,f={p:0,n:0,v:e,a:p,f:p.bind(e,4),d:function(t,n){return o=t,a=0,c=e,f.n=n,s}};function p(n,i){for(a=n,c=i,t=0;!d&&u&&!r&&t<l.length;t++){var r,o=l[t],p=f.p,h=o[2];n>3?(r=h===i)&&(c=o[(a=o[4])?5:(a=3,3)],o[4]=o[5]=e):o[0]<=p&&((r=n<2&&p<o[1])?(a=0,f.v=i,f.n=o[1]):p<h&&(r=n<3||o[0]>i||i>h)&&(o[4]=n,o[5]=i,f.n=h,a=0))}if(r||n>1)return s;throw d=!0,i}return function(r,l,h){if(u>1)throw TypeError("Generator is already running");for(d&&1===l&&p(l,h),a=l,c=h;(t=a<2?e:c)||!d;){o||(a?a<3?(a>1&&(f.n=-1),p(a,c)):f.n=c:f.v=c);try{if(u=2,o){if(a||(r="next"),t=o[r]){if(!(t=t.call(o,c)))throw TypeError("iterator result is not an object");if(!t.done)return t;c=t.value,a<2&&(a=0)}else 1===a&&(t=o.return)&&t.call(o),a<2&&(c=TypeError("The iterator does not provide a '"+r+"' method"),a=1);o=e}else if((t=(d=f.n<0)?c:n.call(i,f))!==s)break}catch(t){o=e,a=1,c=t}finally{u=1}}return{value:t,done:d}}}(n,r,o),!0),l}var s={};function u(){}function l(){}function d(){}t=Object.getPrototypeOf;var f=[][i]?t(t([][i]())):(c(t={},i,function(){return this}),t),p=d.prototype=u.prototype=Object.create(f);function h(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,c(e,r,"GeneratorFunction")),e.prototype=Object.create(p),e}return l.prototype=d,c(p,"constructor",d),c(d,"constructor",l),l.displayName="GeneratorFunction",c(d,r,"GeneratorFunction"),c(p),c(p,r,"Generator"),c(p,i,function(){return this}),c(p,"toString",function(){return"[object Generator]"}),(a=function(){return{w:o,m:h}})()}function c(e,t,n,i){var r=Object.defineProperty;try{r({},"",{})}catch(e){r=0}c=function(e,t,n,i){function o(t,n){c(e,t,function(e){return this._invoke(t,n,e)})}t?r?r(e,t,{value:n,enumerable:!i,configurable:!i,writable:!i}):e[t]=n:(o("next",0),o("throw",1),o("return",2))},c(e,t,n,i)}function u(e){if(null!=e){var t=e["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],n=0;if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length))return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}throw new TypeError(typeof e+" is not iterable")}function l(t,n){return function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var i,r,o,s,a=[],c=!0,u=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(i=o.call(n)).done)&&(a.push(i.value),a.length!==t);c=!0);}catch(e){u=!0,r=e}finally{try{if(!c&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(u)throw r}}return a}}(t,n)||function(t,n){if(t){if("string"==typeof t)return e(t,n);var i={}.toString.call(t).slice(8,-1);return"Object"===i&&t.constructor&&(i=t.constructor.name),"Map"===i||"Set"===i?Array.from(t):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?e(t,n):void 0}}
|
|
4
4
|
/**
|
|
5
5
|
* SunuID SDK - Package d'intégration pour partenaires
|
|
6
6
|
*
|
|
7
7
|
* @version 1.0.0
|
|
8
8
|
* @author SunuID Team
|
|
9
9
|
* @license MIT
|
|
10
|
-
*/!function(e,r){var i={apiUrl:(null===(r=e.SunuIDConfig)||void 0===r?void 0:r.apiUrl)||"https://api.sunuid.fayma.sn",clientId:null,secretId:null,type:1,theme:"light",language:"fr",autoRefresh:!0,refreshInterval:3e4,onSuccess:null,onError:null,onStatusUpdate:null,onExpired:null},s=function(){return r=function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.config=o(o({},i),t),this.qrCode=null,this.refreshTimer=null,this.isInitialized=!1,this.socket=null,this.websocketRetryCount=0,this.maxWebSocketRetries=5,this.init()},s=[{key:"init",value:function(){if(!this.config.clientId||!this.config.secretId)throw new Error("SunuID: clientId et secretId sont requis");this.isInitialized=!0,console.log("SunuID SDK initialisé avec succès"),this.initWebSocket()}},{key:"initWebSocket",value:function(){var e=this;try{if("undefined"==typeof io)return this.websocketRetryCount++,void(this.websocketRetryCount<=this.maxWebSocketRetries?(console.warn("⚠️ Socket.IO non disponible (tentative ".concat(this.websocketRetryCount,"/").concat(this.maxWebSocketRetries,"), WebSocket sera initialisé plus tard")),setTimeout(function(){return e.initWebSocket()},1e3)):console.warn("⚠️ Socket.IO non disponible après plusieurs tentatives, WebSocket désactivé"));var t=this.getClientIP();this.socket||(this.socket=io("wss://samasocket.fayma.sn:9443",{query:{token:this.config.clientId,type:"web",userId:this.config.clientId,username:t}}),this.socket.on("connect",function(){console.log("🌐 WebSocket connecté avec succès"),console.log("📊 Socket ID:",e.socket.id)}),this.socket.on("disconnect",function(e){console.log("❌ WebSocket déconnecté:",e)}),this.socket.on("connect_error",function(e){console.error("❌ Erreur connexion WebSocket:",e)}),this.socket.on("qr_status_update",function(t){console.log("📱 Mise à jour statut QR reçue:",t),e.handleQRStatusUpdate(t)}),this.socket.on("qr_scan_success",function(t){console.log("✅ Scan QR réussi reçu:",t),e.handleQRScanSuccess(t)}),this.socket.on("qr_expired",function(t){console.log("⏰ QR expiré reçu:",t),e.handleQRExpired(t)}))}catch(e){console.error("❌ Erreur initialisation WebSocket:",e)}}},{key:"getClientIP",value:function(){return"127.0.0.1"}},{key:"handleQRStatusUpdate",value:function(e){this.config.onStatusUpdate&&this.config.onStatusUpdate(e)}},{key:"handleQRScanSuccess",value:function(e){this.config.onSuccess&&this.config.onSuccess(e)}},{key:"handleQRExpired",value:function(e){this.config.onExpired&&this.config.onExpired(e)}},{key:"emitWebSocketEvent",value:function(e,t){this.socket&&this.socket.connected?(this.socket.emit(e,t),console.log("📤 Événement WebSocket émis: ".concat(e),t)):"undefined"==typeof io?console.warn("⚠️ Socket.IO non disponible, impossible d'émettre l'événement:",e):console.warn("⚠️ WebSocket non connecté, impossible d'émettre l'événement:",e)}},{key:"getWebSocketStatus",value:function(){return this.socket?this.socket.connected?"connected":"disconnected":"not_initialized"}},{key:"forceWebSocketInit",value:function(){"undefined"==typeof io||this.socket||(console.log("🔄 Forçage de l'initialisation WebSocket..."),this.initWebSocket())}},{key:"generateQR",value:(v=t(c().m(function e(t){var n,r,i,s,a=arguments;return c().w(function(e){for(;;)switch(e.p=e.n){case 0:if(n=a.length>1&&void 0!==a[1]?a[1]:{},this.isInitialized){e.n=1;break}throw new Error("SunuID: SDK non initialisé");case 1:return e.p=1,e.n=2,this.makeRequest("/qr-generate",o({type:this.config.type},n));case 2:if(!(r=e.v).success){e.n=3;break}return i="".concat("https://sunuid.fayma.sn").concat(r.data.qrcode),this.displayQRCode(t,i,this.config.type,n),this.startAutoRefresh(t,this.config.type,n),this.emitWebSocketEvent("qr_generated",{serviceId:r.data.service_id,type:this.config.type,qrCodeUrl:i,timestamp:Date.now()}),e.a(2,o(o({},r.data),{},{qrCodeUrl:i,sessionId:r.data.service_id}));case 3:throw new Error(r.message||"Erreur lors de la génération du QR code");case 4:e.n=6;break;case 5:throw e.p=5,s=e.v,console.error("Erreur API détectée:",s.message),console.log('Affichage du message "Service non disponible" pour type '+this.config.type),this.displayServiceUnavailable(t,this.config.type),new Error("Service non disponible");case 6:return e.a(2)}},e,this,[[1,5]])})),function(e){return v.apply(this,arguments)})},{key:"generateCustomQR",value:(p=t(c().m(function e(t,n){var r,i,s,a,u=arguments;return c().w(function(e){for(;;)switch(e.p=e.n){case 0:if(r=u.length>2&&void 0!==u[2]?u[2]:{},this.isInitialized){e.n=1;break}throw new Error("SunuID: SDK non initialisé");case 1:return e.p=1,e.n=2,this.makeRequest("/qr-generate",o({type:n},r));case 2:if(!(i=e.v).success){e.n=3;break}return s="".concat("https://sunuid.fayma.sn").concat(i.data.qrcode),this.displayQRCode(t,s,n,r),this.startAutoRefresh(t,n,r),e.a(2,o(o({},i.data),{},{qrCodeUrl:s,sessionId:i.data.service_id}));case 3:throw new Error(i.message||"Erreur lors de la génération du QR code");case 4:e.n=6;break;case 5:throw e.p=5,a=e.v,console.error("Erreur API détectée:",a.message),console.log('Affichage du message "Service non disponible" pour type '+n),this.displayServiceUnavailable(t,n),new Error("Service non disponible");case 6:return e.a(2)}},e,this,[[1,5]])})),function(e,t){return p.apply(this,arguments)})},{key:"generateAuthQR",value:(h=t(c().m(function e(t){var n,r=arguments;return c().w(function(e){for(;;)if(0===e.n)return n=r.length>1&&void 0!==r[1]?r[1]:{},e.a(2,this.generateQR(t,n))},e,this)})),function(e){return h.apply(this,arguments)})},{key:"generateKYCQR",value:(d=t(c().m(function e(t){var n,r,i=arguments;return c().w(function(e){for(;;)switch(e.p=e.n){case 0:return n=i.length>1&&void 0!==i[1]?i[1]:{},r=this.config.type,this.config.type=2,e.p=1,e.n=2,this.generateQR(t,n);case 2:return e.a(2,e.v);case 3:return e.p=3,this.config.type=r,e.f(3);case 4:return e.a(2)}},e,this,[[1,,3,4]])})),function(e){return d.apply(this,arguments)})},{key:"checkQRStatus",value:(f=t(c().m(function e(t){var n,r;return c().w(function(e){for(;;)switch(e.p=e.n){case 0:if(this.isInitialized){e.n=1;break}throw new Error("SunuID: SDK non initialisé");case 1:return e.p=1,e.n=2,this.makeRequest("/qr-status",{serviceId:t});case 2:if(!(n=e.v).success){e.n=3;break}return e.a(2,n.data);case 3:throw new Error(n.message||"Erreur lors de la vérification du statut");case 4:e.n=6;break;case 5:throw e.p=5,r=e.v,this.handleError(r),r;case 6:return e.a(2)}},e,this,[[1,5]])})),function(e){return f.apply(this,arguments)})},{key:"displayQRCode",value:function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=document.getElementById(e);if(!i)throw new Error("Conteneur avec l'ID \"".concat(e,'" non trouvé'));i.innerHTML="";var o=document.createElement("div");o.className="sunuid-qr-code",o.innerHTML='\n <div class="sunuid-qr-header">\n <h3>'.concat(1===n?"Authentification":2===n?"Vérification KYC":3===n?"Service Type 3":"Service Type "+n,'</h3>\n </div>\n <div class="sunuid-qr-image">\n <img src="').concat(t,'" alt="QR Code SunuID" style="max-width: 300px; height: auto;">\n </div>\n <div class="sunuid-qr-instructions">\n <p>Scannez ce QR code avec l\'application SunuID pour vous connecter</p>\n </div>\n <div class="sunuid-qr-status" id="sunuid-status">\n <p>En attente de scan...</p>\n </div>\n '),i.appendChild(o),this.applyTheme(r.theme||this.config.theme)}},{key:"displayServiceUnavailable",value:function(e,t){console.log("displayServiceUnavailable appelée pour ".concat(e,", type: ").concat(t));var n=document.getElementById(e);n?n.innerHTML='\n <div class="sunuid-service-unavailable" style="\n text-align: center;\n padding: 40px 20px;\n background: #f8f9fa;\n border: 2px dashed #dee2e6;\n border-radius: 10px;\n color: #6c757d;\n font-family: Arial, sans-serif;\n ">\n <div style="font-size: 48px; margin-bottom: 20px;">⚠️</div>\n <h3 style="margin: 0 0 10px 0; color: #495057;">Service Non Disponible</h3>\n <p style="margin: 0; font-size: 14px;">\n Le service d\'authentification est temporairement indisponible.<br>\n Veuillez réessayer plus tard.\n </p>\n <div style="margin-top: 20px; font-size: 12px; color: #adb5bd;">\n Type: '.concat(t.toUpperCase(),"\n </div>\n </div>\n "):console.error("Container ".concat(e," non trouvé"))}},{key:"refreshQR",value:(l=t(c().m(function e(t){var n,r,i,o=arguments;return c().w(function(e){for(;;)switch(e.p=e.n){case 0:return n=o.length>1&&void 0!==o[1]?o[1]:{},e.p=1,e.n=2,this.generateQR(t,n);case 2:return r=e.v,e.a(2,r);case 3:throw e.p=3,i=e.v,console.error("Erreur lors du rafraîchissement:",i.message),this.displayServiceUnavailable(t,this.config.type),i;case 4:return e.a(2)}},e,this,[[1,3]])})),function(e){return l.apply(this,arguments)})},{key:"startAutoRefresh",value:function(e,n,r){var i=this;this.config.autoRefresh&&(this.refreshTimer=setInterval(t(c().m(function t(){var o;return c().w(function(t){for(;;)switch(t.p=t.n){case 0:return t.p=0,t.n=1,i.refreshQR(e,n,r);case 1:t.n=3;break;case 2:t.p=2,o=t.v,console.warn("Erreur lors du rafraîchissement automatique:",o);case 3:return t.a(2)}},t,null,[[0,2]])})),this.config.refreshInterval))}},{key:"makeRequest",value:(u=t(c().m(function t(n,r){var i,s,a,u,l,f,d,h;return c().w(function(t){for(;;)switch(t.p=t.n){case 0:return s=(null===(i=e.SunuIDConfig)||void 0===i||null===(i=i.endpoints)||void 0===i?void 0:i[n.replace("/","")])||n,a="".concat(this.config.apiUrl).concat(s),void 0!==r.type&&console.log("🌐 Envoi requête API - Type: ".concat(r.type,", Endpoint: ").concat(n)),t.p=1,t.n=2,fetch(a,{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(this.config.clientId,":").concat(this.config.secretId),Accept:"application/json"},body:JSON.stringify(o(o({},r),{},{client_id:this.config.clientId,secret_id:this.config.secretId}))});case 2:if((u=t.v).ok){t.n=4;break}return t.n=3,u.text();case 3:l=t.v;try{f=JSON.parse(l)}catch(e){f={message:l}}throw new Error(f.message||"Erreur HTTP: ".concat(u.status));case 4:return t.n=5,u.json();case 5:return d=t.v,t.a(2,d);case 6:throw t.p=6,h=t.v,console.error("Erreur API SunuID:",h),h;case 7:return t.a(2)}},t,this,[[1,6]])})),function(e,t){return u.apply(this,arguments)})},{key:"applyTheme",value:function(e){var t=document.querySelector(".sunuid-qr-code");t&&(t.className="sunuid-qr-code sunuid-theme-".concat(e))}},{key:"handleError",value:function(e){console.error("SunuID SDK Error:",e),this.config.onError&&this.config.onError(e)}},{key:"destroy",value:function(){this.refreshTimer&&clearInterval(this.refreshTimer),this.socket&&(this.socket.disconnect(),this.socket=null,console.log("🌐 WebSocket déconnecté")),this.isInitialized=!1,console.log("SunuID SDK détruit")}}],s&&n(r.prototype,s),a&&n(r,a),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,s,a,u,l,f,d,h,p,v}();e.SunuID=s,e.sunuidInstance=null,e.initSunuID=function(t){try{return e.sunuidInstance=new s(t),e.sunuidInstance}catch(e){throw console.error("Erreur lors de l'initialisation de SunuID:",e),e}}}(window)}();
|
|
10
|
+
*/(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function d(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}function f(e){return f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},f(e)}!function(e,t){var r={apiUrl:(null===(t=e.SunuIDConfig)||void 0===t?void 0:t.apiUrl)||"https://api.sunuid.fayma.sn",clientId:null,secretId:null,type:2,partnerName:"SunuID",theme:"light",language:"fr",autoRefresh:!0,refreshInterval:3e4,onSuccess:null,onError:null,onStatusUpdate:null,onExpired:null,enableSecurityLogs:!0,validateInputs:!0,maxRetries:3,requestTimeout:1e4,secureInit:!1,secureInitUrl:"http://localhost:8081/secure-init.php",token:null},o=function(){return t=function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.config=s(s({},r),t),this.qrCode=null,this.refreshTimer=null,this.isInitialized=!1,this.socket=null,this.initPromise=this.init()},o=[{key:"init",value:(k=n(a().m(function e(){var t;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:if(e.p=0,!this.config.secureInit){e.n=2;break}return e.n=1,this.secureInit();case 1:e.n=3;break;case 2:this.config.validateInputs&&this.validateSecurityParams();case 3:this.logSecurityEvent("SDK_INIT_START",{apiUrl:this.config.apiUrl,type:this.config.type,partnerName:this.config.partnerName,secureInit:this.config.secureInit}),this.obfuscateCredentials(),this.isInitialized=!0,console.log("SunuID SDK initialisé avec succès"),this.logSecurityEvent("SDK_INIT_SUCCESS"),this.initWebSocket(),e.n=5;break;case 4:throw e.p=4,t=e.v,this.logSecurityEvent("SDK_INIT_ERROR",{error:t.message}),t;case 5:return e.a(2)}},e,this,[[0,4]])})),function(){return k.apply(this,arguments)})},{key:"secureInit",value:(b=n(a().m(function e(){var t,n,i,r,o;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,this.logSecurityEvent("SECURE_INIT_START"),t={type:this.config.type,partnerName:this.config.partnerName,theme:this.config.theme},e.n=1,fetch(this.config.secureInitUrl,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(t)});case 1:if((n=e.v).ok){e.n=2;break}throw new Error("Erreur HTTP: ".concat(n.status));case 2:return e.n=3,n.json();case 3:if((i=e.v).success){e.n=4;break}throw new Error(i.error||"Erreur lors de l'initialisation sécurisée");case 4:if(this.config.token=i.data.token,this.config.apiUrl=i.data.api_url,!(r=this.decodeSecureToken(i.data.token))){e.n=5;break}this.config.clientId=r.client_id,this.config.secretId=r.secret_id,e.n=6;break;case 5:throw new Error("Impossible de décoder le token sécurisé");case 6:this.config.expiresIn=i.data.expires_in,this.config.maxRequests=i.data.max_requests,this.config.requestCount=0,this.logSecurityEvent("SECURE_INIT_SUCCESS",{expiresIn:i.data.expires_in,maxRequests:i.data.max_requests}),console.log("✅ Initialisation sécurisée réussie"),e.n=8;break;case 7:throw e.p=7,o=e.v,this.logSecurityEvent("SECURE_INIT_ERROR",{error:o.message}),new Error("Échec de l'initialisation sécurisée: ".concat(o.message));case 8:return e.a(2)}},e,this,[[0,7]])})),function(){return b.apply(this,arguments)})},{key:"decodeSecureToken",value:function(e){try{var t=e.split(".");if(2!==t.length)return console.error("❌ Format de token invalide"),null;var n=l(t,2),i=n[0],r=(n[1],atob(i)),o=JSON.parse(r);return o.exp&&o.exp<Date.now()/1e3?(console.error("❌ Token expiré"),null):(console.log("✅ Token décodé avec succès"),o)}catch(e){return console.error("❌ Erreur décodage token:",e),null}}},{key:"initWebSocket",value:function(){var e=this;try{if("undefined"==typeof io)return console.warn("⚠️ Socket.IO non disponible, WebSocket sera initialisé plus tard"),void setTimeout(function(){return e.initWebSocket()},1e3);var t=this.getClientIP();this.socket||(this.socket=io("wss://samasocket.fayma.sn:9443",{query:{token:this.config.clientId,type:"web",userId:this.config.clientId,username:t}}),this.socket.on("connect",function(){console.log("🌐 WebSocket connecté avec succès"),console.log("📊 Socket ID:",e.socket.id)}),this.socket.on("disconnect",function(e){console.log("❌ WebSocket déconnecté:",e)}),this.socket.on("connect_error",function(e){console.error("❌ Erreur connexion WebSocket:",e)}),this.socket.on("qr_status_update",function(t){console.log("📱 Mise à jour statut QR reçue:",t),e.handleQRStatusUpdate(t)}),this.socket.on("qr_scan_success",function(t){console.log("✅ Scan QR réussi reçu:",t),e.handleQRScanSuccess(t)}),this.socket.on("qr_expired",function(t){console.log("⏰ QR expiré reçu:",t),e.handleQRExpired(t)}))}catch(e){console.error("❌ Erreur initialisation WebSocket:",e)}}},{key:"getClientIP",value:function(){return"127.0.0.1"}},{key:"getTypeName",value:function(e){switch(e){case 1:return"KYC";case 2:return"AUTH";case 3:return"SIGNATURE";default:return"TYPE-".concat(e)}}},{key:"validateSecurityParams",value:function(){var e=[];if(this.config.clientId&&"string"==typeof this.config.clientId?this.config.clientId.length<10&&e.push("clientId trop court"):e.push("clientId invalide ou manquant"),this.config.secretId&&"string"==typeof this.config.secretId?this.config.secretId.length<32&&e.push("secretId trop court (minimum 32 caractères)"):e.push("secretId invalide ou manquant"),this.config.apiUrl&&this.isValidUrl(this.config.apiUrl)||e.push("apiUrl invalide"),[1,2,3].includes(this.config.type)||e.push("type invalide (doit être 1, 2 ou 3)"),e.length>0)throw this.logSecurityEvent("VALIDATION_ERROR",{errors:e}),new Error("Paramètres de sécurité invalides: ".concat(e.join(", ")));this.logSecurityEvent("VALIDATION_SUCCESS")}},{key:"isValidUrl",value:function(e){try{var t=new URL(e);return"https:"===t.protocol||"http:"===t.protocol}catch(e){return!1}}},{key:"logSecurityEvent",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(this.config.enableSecurityLogs){var i={timestamp:(new Date).toISOString(),event:t,data:n,userAgent:navigator.userAgent,url:e.location.href};console.warn("🔒 [SECURITY]",i),e.SunuIDSecurityLogs||(e.SunuIDSecurityLogs=[]),e.SunuIDSecurityLogs.push(i)}}},{key:"obfuscateCredentials",value:function(){this.config.originalClientId=this.config.clientId,this.config.originalSecretId=this.config.secretId,this.config.clientId&&(this.config.clientIdDisplay=this.config.clientId.replace(/(.{3}).*(.{3})/,"$1***$2")),this.config.secretId&&(this.config.secretIdDisplay=this.config.secretId.replace(/(.{4}).*(.{4})/,"$1***$2"))}},{key:"sanitizeInput",value:function(e){return"string"!=typeof e?e:e.replace(/[<>]/g,"").replace(/javascript:/gi,"").trim()}},{key:"handleQRStatusUpdate",value:function(e){this.config.onStatusUpdate&&this.config.onStatusUpdate(e)}},{key:"handleQRScanSuccess",value:function(e){this.config.onSuccess&&this.config.onSuccess(e)}},{key:"handleQRExpired",value:function(e){this.config.onExpired&&this.config.onExpired(e)}},{key:"emitWebSocketEvent",value:function(e,t){this.socket&&this.socket.connected?(this.socket.emit(e,t),console.log("📤 Événement WebSocket émis: ".concat(e),t)):"undefined"==typeof io?console.warn("⚠️ Socket.IO non disponible, impossible d'émettre l'événement:",e):console.warn("⚠️ WebSocket non connecté, impossible d'émettre l'événement:",e)}},{key:"getWebSocketStatus",value:function(){return this.socket?this.socket.connected?"connected":"disconnected":"not_initialized"}},{key:"forceWebSocketInit",value:function(){"undefined"==typeof io||this.socket||(console.log("🔄 Forçage de l'initialisation WebSocket..."),this.initWebSocket())}},{key:"generateQR",value:(I=n(a().m(function e(t){var n,i,r,o,c,u=this,l=arguments;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:if(n=l.length>1&&void 0!==l[1]?l[1]:{},!this.initPromise){e.n=2;break}return e.n=1,this.initPromise;case 1:this.initPromise=null;case 2:if(this.isInitialized){e.n=3;break}throw new Error("SunuID: SDK non initialisé");case 3:return e.p=3,e.n=4,this.makeRequest("/qr-generate",s({type:this.config.type},n));case 4:if(!(i=e.v).success){e.n=5;break}return r="".concat("https://sunuid.fayma.sn").concat(i.data.qrcode),this.displayQRCode(t,r,this.config.type,n),this.pendingQRInfo&&i.data.code&&(o=function(){if(u.socket&&u.socket.id&&"unknown"!==u.socket.id){var e=u.socket.id,t="".concat(u.config.type,"-").concat(i.data.code,"-").concat(e),n=i.data.partnerName||u.config.partnerName||"SunuID",r=u.getTypeName(u.config.type),s="".concat(r," - ").concat(n);u.generateCustomQRCode(t,s,u.pendingQRInfo.options),u.pendingQRInfo=null}else setTimeout(o,100)})(),this.startAutoRefresh(t,this.config.type,n),this.emitWebSocketEvent("qr_generated",{serviceId:i.data.service_id,type:this.config.type,qrCodeUrl:r,code:i.data.code,timestamp:Date.now()}),e.a(2,s(s({},i.data),{},{qrCodeUrl:r,sessionId:i.data.service_id}));case 5:throw new Error(i.message||"Erreur lors de la génération du QR code");case 6:e.n=8;break;case 7:throw e.p=7,c=e.v,console.error("Erreur API détectée:",c.message),console.error("Stack trace complet:",c.stack),console.error("Configuration SDK:",{apiUrl:this.config.apiUrl,type:this.config.type,secureInit:this.config.secureInit,clientId:this.config.clientId?"***"+this.config.clientId.slice(-4):"null",secretId:this.config.secretId?"***"+this.config.secretId.slice(-4):"null"}),console.log('Affichage du message "Service non disponible" pour type '+this.config.type),this.displayServiceUnavailable(t,this.config.type),new Error("Service non disponible");case 8:return e.a(2)}},e,this,[[3,7]])})),function(e){return I.apply(this,arguments)})},{key:"generateCustomQR",value:(S=n(a().m(function e(t,n){var i,r,o,c,u,l=this,d=arguments;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:if(i=d.length>2&&void 0!==d[2]?d[2]:{},!this.initPromise){e.n=2;break}return e.n=1,this.initPromise;case 1:this.initPromise=null;case 2:if(this.isInitialized){e.n=3;break}throw new Error("SunuID: SDK non initialisé");case 3:return e.p=3,e.n=4,this.makeRequest("/qr-generate",s({type:n},i));case 4:if(!(r=e.v).success){e.n=5;break}return o="".concat("https://sunuid.fayma.sn").concat(r.data.qrcode),this.displayQRCode(t,o,n,i),this.pendingQRInfo&&r.data.code&&(c=function(){if(l.socket&&l.socket.id&&"unknown"!==l.socket.id){var e=l.socket.id,t="".concat(n,"-").concat(r.data.code,"-").concat(e),i=r.data.partnerName||l.config.partnerName||"SunuID",o=l.getTypeName(n),s="".concat(o," - ").concat(i);l.generateCustomQRCode(t,s,l.pendingQRInfo.options),l.pendingQRInfo=null}else setTimeout(c,100)})(),this.startAutoRefresh(t,n,i),e.a(2,s(s({},r.data),{},{qrCodeUrl:o,sessionId:r.data.service_id}));case 5:throw new Error(r.message||"Erreur lors de la génération du QR code");case 6:e.n=8;break;case 7:throw e.p=7,u=e.v,console.error("Erreur API détectée:",u.message),console.error("Stack trace complet:",u.stack),console.error("Configuration SDK (Custom):",{apiUrl:this.config.apiUrl,type:n,secureInit:this.config.secureInit,clientId:this.config.clientId?"***"+this.config.clientId.slice(-4):"null",secretId:this.config.secretId?"***"+this.config.secretId.slice(-4):"null"}),console.log('Affichage du message "Service non disponible" pour type '+n),this.displayServiceUnavailable(t,n),new Error("Service non disponible");case 8:return e.a(2)}},e,this,[[3,7]])})),function(e,t){return S.apply(this,arguments)})},{key:"generateAuthQR",value:(m=n(a().m(function e(t){var n,i=arguments;return a().w(function(e){for(;;)if(0===e.n)return n=i.length>1&&void 0!==i[1]?i[1]:{},e.a(2,this.generateQR(t,n))},e,this)})),function(e){return m.apply(this,arguments)})},{key:"generateKYCQR",value:(v=n(a().m(function e(t){var n,i,r=arguments;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:return n=r.length>1&&void 0!==r[1]?r[1]:{},i=this.config.type,this.config.type=1,e.p=1,e.n=2,this.generateQR(t,n);case 2:return e.a(2,e.v);case 3:return e.p=3,this.config.type=i,e.f(3);case 4:return e.a(2)}},e,this,[[1,,3,4]])})),function(e){return v.apply(this,arguments)})},{key:"generateSignatureQR",value:(y=n(a().m(function e(t){var n,i,r=arguments;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:return n=r.length>1&&void 0!==r[1]?r[1]:{},i=this.config.type,this.config.type=3,e.p=1,e.n=2,this.generateQR(t,n);case 2:return e.a(2,e.v);case 3:return e.p=3,this.config.type=i,e.f(3);case 4:return e.a(2)}},e,this,[[1,,3,4]])})),function(e){return y.apply(this,arguments)})},{key:"checkQRStatus",value:(g=n(a().m(function e(t){var n,i;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:if(this.isInitialized){e.n=1;break}throw new Error("SunuID: SDK non initialisé");case 1:return e.p=1,e.n=2,this.makeRequest("/qr-status",{serviceId:t});case 2:if(!(n=e.v).success){e.n=3;break}return e.a(2,n.data);case 3:throw new Error(n.message||"Erreur lors de la vérification du statut");case 4:e.n=6;break;case 5:throw e.p=5,i=e.v,this.handleError(i),i;case 6:return e.a(2)}},e,this,[[1,5]])})),function(e){return g.apply(this,arguments)})},{key:"displayQRCode",value:function(e,t,n){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},r=document.getElementById(e);if(!r)throw new Error("Conteneur avec l'ID \"".concat(e,'" non trouvé'));r.innerHTML="";var o=document.createElement("div");o.className="sunuid-qr-code",this.getTypeName(n),o.innerHTML='\n <div class="sunuid-qr-header">\n <h3>'.concat(1===n?"Vérification KYC":2===n?"Authentification":3===n?"Signature":"Service Type "+n,'</h3>\n </div>\n <div class="sunuid-qr-image" id="sunuid-qr-container">\n <div style="text-align: center; padding: 40px;">\n <div class="sunuid-loader">\n <div class="sunuid-spinner"></div>\n <p style="margin-top: 20px; color: #666;">Initialisation en cours...</p>\n <p style="font-size: 12px; color: #999; margin-top: 10px;">Connexion API et WebSocket</p>\n <p style="font-size: 11px; color: #ccc; margin-top: 5px;">Attente du Socket ID...</p>\n </div>\n </div>\n </div>\n <div class="sunuid-qr-instructions" style="display: none;">\n <p>Scannez ce QR code avec l\'application SunuID pour vous connecter</p>\n </div>\n <div class="sunuid-qr-status" id="sunuid-status" style="display: none;">\n <p>En attente de scan...</p>\n </div>\n '),r.appendChild(o),this.pendingQRInfo={containerId:e,type:n,options:i},this.applyTheme(i.theme||this.config.theme)}},{key:"generateCustomQRCode",value:(h=n(a().m(function e(t,n){var i,r,o,s,c,u;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:if(e.p=1,console.log("🎨 Début génération QR personnalisé avec PHP..."),console.log("📄 Contenu:",t),console.log("🏷️ Label:",n),i=document.getElementById("sunuid-qr-container")){e.n=2;break}return console.error("❌ QR container not found"),this.displayFallbackImage(),e.a(2);case 2:return console.log("✅ QR container trouvé"),i.innerHTML='<div style="text-align: center; padding: 20px;"><p>Génération QR code avec PHP...</p></div>',console.log("🔄 Appel endpoint PHP..."),e.n=3,fetch("http://localhost:8081/qr-generator.php",{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({content:t,label:n,size:300,margin:10})});case 3:if(r=e.v,console.log("📥 Réponse PHP reçue - Status:",r.status),r.ok){e.n=4;break}throw new Error("Erreur HTTP: ".concat(r.status));case 4:return e.n=5,r.json();case 5:if((o=e.v).success){e.n=6;break}throw new Error("Erreur PHP: ".concat(o.error));case 6:console.log("✅ QR code généré par PHP avec succès"),console.log("📊 Taille:",o.data.size+"px"),console.log("📊 Longueur base64:",o.data.length+" caractères"),i.innerHTML='\n <div class="sunuid-qr-ready" style="text-align: center; padding: 20px;">\n <img src="'.concat(o.data.dataUrl,'" alt="QR Code SunuID" style="max-width: 300px; border: 2px solid #ddd; border-radius: 10px;">\n <div style="margin-top: 15px;">\n <p style="font-weight: bold; color: #333; margin: 5px 0;">').concat(n,'</p>\n <p style="color: #666; font-size: 12px; margin: 5px 0;">').concat(t,"</p>\n </div>\n </div>\n "),s=i.parentElement.querySelector(".sunuid-qr-instructions"),c=i.parentElement.querySelector(".sunuid-qr-status"),s&&(s.style.display="block",s.classList.add("sunuid-qr-ready")),c&&(c.style.display="block",c.classList.add("sunuid-qr-ready")),console.log("✅ QR code PHP affiché dans le conteneur"),e.n=8;break;case 7:e.p=7,u=e.v,console.error("❌ Erreur génération QR PHP:",u),console.error("Stack trace:",u.stack),this.displayFallbackImage();case 8:return e.a(2)}},e,this,[[1,7]])})),function(e,t){return h.apply(this,arguments)})},{key:"addLogoToCenter",value:function(e,t,n,i,r){try{var o=new Image;o.onload=function(){var r=40,s=t+(i-r)/2,a=n+(i-r)/2;e.fillStyle="white",e.fillRect(s-2,a-2,44,44),e.drawImage(o,s,a,r,r)},o.src="src/logoqr.png"}catch(e){console.warn("Logo non disponible:",e)}}},{key:"displayFallbackImage",value:function(){console.log("⚠️ Affichage de l'image de fallback");var e=document.getElementById("sunuid-qr-container");e?e.innerHTML='\n <div style="text-align: center; padding: 20px; color: #666;">\n <p>⚠️ Génération QR personnalisé non disponible</p>\n <p>Utilisation de l\'image par défaut</p>\n <p><strong>Debug:</strong> QRCode disponible: '.concat("undefined"!=typeof QRCode,"</p>\n <p><strong>Debug:</strong> Container trouvé: ").concat(null!==e,"</p>\n </div>\n "):console.error("❌ Container QR non trouvé pour fallback")}},{key:"displayServiceUnavailable",value:function(e,t){console.log("displayServiceUnavailable appelée pour ".concat(e,", type: ").concat(t));var n=document.getElementById(e);n?n.innerHTML='\n <div class="sunuid-service-unavailable" style="\n text-align: center;\n padding: 40px 20px;\n background: #f8f9fa;\n border: 2px dashed #dee2e6;\n border-radius: 10px;\n color: #6c757d;\n font-family: Arial, sans-serif;\n ">\n <div style="font-size: 48px; margin-bottom: 20px;">⚠️</div>\n <h3 style="margin: 0 0 10px 0; color: #495057;">Service Non Disponible</h3>\n <p style="margin: 0; font-size: 14px;">\n Le service d\'authentification est temporairement indisponible.<br>\n Veuillez réessayer plus tard.\n </p>\n <div style="margin-top: 20px; font-size: 12px; color: #adb5bd;">\n Type: '.concat(String(t).toUpperCase(),"\n </div>\n </div>\n "):console.error("Container ".concat(e," non trouvé"))}},{key:"refreshQR",value:(p=n(a().m(function e(t){var n,i,r,o=arguments;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:return n=o.length>1&&void 0!==o[1]?o[1]:{},e.p=1,e.n=2,this.generateQR(t,n);case 2:return i=e.v,e.a(2,i);case 3:throw e.p=3,r=e.v,console.error("Erreur lors du rafraîchissement:",r.message),this.displayServiceUnavailable(t,this.config.type),r;case 4:return e.a(2)}},e,this,[[1,3]])})),function(e){return p.apply(this,arguments)})},{key:"startAutoRefresh",value:function(e,t,i){var r=this;this.config.autoRefresh&&(this.refreshTimer=setInterval(n(a().m(function n(){var o;return a().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,r.refreshQR(e,t,i);case 1:n.n=3;break;case 2:n.p=2,o=n.v,console.warn("Erreur lors du rafraîchissement automatique:",o);case 3:return n.a(2)}},n,null,[[0,2]])})),this.config.refreshInterval))}},{key:"makeRequest",value:(d=n(a().m(function t(n,i){var r,o,s,c,l,d,f,p,h,g=this;return a().w(function(t){for(;;)switch(t.n){case 0:if(this.isInitialized){t.n=1;break}throw this.logSecurityEvent("REQUEST_BEFORE_INIT",{endpoint:n}),new Error("SDK non initialisé");case 1:if(!this.config.secureInit){t.n=2;break}if(this.config.requestCount++,!(this.config.requestCount>this.config.maxRequests)){t.n=2;break}throw this.logSecurityEvent("API_REQUEST_LIMIT_EXCEEDED",{requestCount:this.config.requestCount,maxRequests:this.config.maxRequests}),new Error("Limite de requêtes dépassée");case 2:s=this.sanitizeRequestData(i),console.log("🔍 Debug makeRequest - endpoint:",n),console.log("🔍 Debug makeRequest - apiUrl:",this.config.apiUrl),console.log("🔍 Debug makeRequest - url:","".concat(this.config.apiUrl).concat(n)),console.log("🔍 Debug makeRequest - data:",JSON.stringify(s,null,2)),console.log("🔍 Debug makeRequest - secureInit:",this.config.secureInit),console.log("🔍 Debug makeRequest - isInitialized:",this.isInitialized),c=(null===(r=e.SunuIDConfig)||void 0===r||null===(r=r.endpoints)||void 0===r?void 0:r[n.replace("/","")])||n,l="".concat(this.config.apiUrl).concat(c),console.log("🔍 URL finale construite:",l),console.log("🔍 EndpointPath:",c),console.log("🔍 SunuIDConfig endpoints:",JSON.stringify(null===(o=e.SunuIDConfig)||void 0===o?void 0:o.endpoints)),this.logSecurityEvent("API_REQUEST_START",{endpoint:c,url:l,dataKeys:Object.keys(s),secureInit:this.config.secureInit}),d=0,f=this.config.maxRetries,p=a().m(function e(){var t,n,i,r,o,u,p,h;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,t=new AbortController,n=setTimeout(function(){return t.abort()},g.config.requestTimeout),i={"Content-Type":"application/json"},e.n=1,fetch(l,{method:"POST",headers:i,body:JSON.stringify(s),signal:t.signal});case 1:if(r=e.v,clearTimeout(n),r.ok){e.n=3;break}return e.n=2,r.text();case 2:o=e.v;try{u=JSON.parse(o)}catch(e){u={message:o}}throw g.logSecurityEvent("API_REQUEST_ERROR",{status:r.status,statusText:r.statusText,error:u.message}),new Error(u.message||"Erreur HTTP: ".concat(r.status));case 3:return e.n=4,r.json();case 4:return p=e.v,g.logSecurityEvent("API_REQUEST_SUCCESS",{endpoint:c,responseKeys:Object.keys(p)}),e.a(2,{v:p});case 5:if(e.p=5,h=e.v,d++,"AbortError"!==h.name){e.n=7;break}if(g.logSecurityEvent("API_REQUEST_TIMEOUT",{retryCount:d}),!(d>f)){e.n=6;break}throw new Error("Timeout de la requête API");case 6:return e.a(2,0);case 7:if(!(d>f)){e.n=8;break}throw g.logSecurityEvent("API_REQUEST_MAX_RETRIES",{retryCount:d,error:h.message}),h;case 8:return e.n=9,new Promise(function(e){return setTimeout(e,1e3*d)});case 9:return e.a(2)}},e,null,[[0,5]])});case 3:if(!(d<=f)){t.n=7;break}return t.d(u(p()),4);case 4:if(0!==(h=t.v)){t.n=5;break}return t.a(3,3);case 5:if(!h){t.n=6;break}return t.a(2,h.v);case 6:t.n=3;break;case 7:return t.a(2)}},t,this)})),function(e,t){return d.apply(this,arguments)})},{key:"sanitizeRequestData",value:function(e){for(var t={},n=0,i=Object.entries(e);n<i.length;n++){var r=l(i[n],2),o=r[0],s=r[1];"string"==typeof s?t[o]=this.sanitizeInput(s):"object"===f(s)&&null!==s?t[o]=this.sanitizeRequestData(s):t[o]=s}return t.client_id=this.config.originalClientId||this.config.clientId,t.secret_id=this.config.originalSecretId||this.config.secretId,console.log("🔍 Credentials dans sanitizeRequestData - clientId:",this.config.clientId),console.log("🔍 Credentials dans sanitizeRequestData - secretId:",this.config.secretId?"***"+this.config.secretId.slice(-4):"null"),console.log("🔍 Credentials dans sanitizeRequestData - sanitizedClientId:",t.client_id),console.log("🔍 Credentials dans sanitizeRequestData - sanitizedSecretId:",t.secret_id?"***"+t.secret_id.slice(-4):"null"),console.log("🔍 Credentials dans sanitizeRequestData - data complet:",JSON.stringify(t,null,2)),console.log("🔍 Credentials dans sanitizeRequestData - clientId:",this.config.clientId),console.log("🔍 Credentials dans sanitizeRequestData - secretId:",this.config.secretId?"***"+this.config.secretId.slice(-4):"null"),console.log("🔍 Credentials dans sanitizeRequestData - sanitizedClientId:",t.client_id),console.log("🔍 Credentials dans sanitizeRequestData - sanitizedSecretId:",t.secret_id?"***"+t.secret_id.slice(-4):"null"),console.log("🔍 Credentials dans sanitizeRequestData - data complet:",JSON.stringify(t,null,2)),t}},{key:"generateRequestId",value:function(){return"req_"+Date.now()+"_"+Math.random().toString(36).substr(2,9)}},{key:"applyTheme",value:function(e){var t=document.querySelector(".sunuid-qr-code");t&&(t.className="sunuid-qr-code sunuid-theme-".concat(e))}},{key:"handleError",value:function(e){console.error("SunuID SDK Error:",e),this.config.onError&&this.config.onError(e)}},{key:"destroy",value:function(){this.refreshTimer&&clearInterval(this.refreshTimer),this.socket&&(this.socket.disconnect(),this.socket=null,console.log("🌐 WebSocket déconnecté")),this.isInitialized=!1,this.logSecurityEvent("SDK_DESTROY"),console.log("SunuID SDK détruit")}},{key:"getSecurityLogs",value:function(){return e.SunuIDSecurityLogs||[]}},{key:"clearSecurityLogs",value:function(){e.SunuIDSecurityLogs=[],this.logSecurityEvent("SECURITY_LOGS_CLEARED")}}],o&&i(t.prototype,o),c&&i(t,c),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,o,c,d,p,h,g,y,v,m,S,I,b,k}();e.SunuID=o,e.sunuidInstance=null,e.initSunuID=function(t){try{return e.sunuidInstance=new o(t),e.sunuidInstance}catch(e){throw console.error("Erreur lors de l'initialisation de SunuID:",e),e}}}(window)}();
|
|
11
11
|
//# sourceMappingURL=sunuid-sdk.min.js.map
|