ihm_client/INTEGRATION.md
NicolasCantu bf680ab6dd ci: docker_tag=pbkdf2-credentials
🔐 Implémentation PBKDF2 avec credentials navigateur

 Fonctionnalités ajoutées:
- SecureCredentialsService avec PBKDF2 (100k itérations)
- Chiffrement AES-GCM des clés spend/scan
- Interface utilisateur complète pour gestion credentials
- Tests unitaires complets
- Architecture modulaire avec EventBus
- Gestion mémoire optimisée
- Performance monitoring
- Web Workers pour encodage asynchrone

🛡️ Sécurité:
- Dérivation PBKDF2 avec salt unique
- Chiffrement AES-GCM des clés sensibles
- Validation force mot de passe
- Stockage sécurisé IndexedDB + WebAuthn
- Logging sécurisé sans exposition données

🔧 Corrections:
- Erreur 500 résolue (clé dupliquée package.json)
- Configuration Vite simplifiée
- Dépendances manquantes corrigées

📊 Améliorations:
- Architecture découplée avec repositories
- Services spécialisés (PairingService, etc.)
- Monitoring performance et mémoire
- Tests avec couverture complète
- Documentation technique détaillée
2025-10-23 12:51:49 +02:00

212 lines
5.5 KiB
Markdown

# 4NK Integration Guide
## 🎯 Modes d'utilisation
Le site 4NK peut être utilisé de deux façons :
### 1. **Mode Normal** (Site autonome)
- **URL** : http://localhost:3004
- **Interface** : Header complet + navigation normale
- **Utilisation** : Application standalone
- **Fonctionnalités** : Toutes les fonctionnalités disponibles
### 2. **Mode Iframe** (Intégration externe)
- **URL** : http://localhost:3004 (détection automatique)
- **Interface** : Header masqué + menu intégré dans le contenu
- **Utilisation** : Intégration dans un site externe
- **Fonctionnalités** : Communication bidirectionnelle avec le parent
## 🔧 Détection automatique
Le site détecte automatiquement s'il est chargé dans une iframe :
```javascript
// Détection iframe
if (window.parent !== window) {
// Mode iframe activé
document.body.classList.add('iframe-mode');
// Header masqué automatiquement
}
```
## 📱 Interface adaptative
### Mode Normal
```
┌─────────────────────────────────────┐
│ Header (Navigation, Logo, etc.) │
├─────────────────────────────────────┤
│ Contenu principal │
│ ├── Titre et description │
│ ├── Interface de pairing │
│ └── Boutons d'action │
└─────────────────────────────────────┘
```
### Mode Iframe
```
┌─────────────────────────────────────┐
│ Contenu principal (sans header) │
│ ├── Titre et description │
│ ├── Menu intégré (Home, Account...) │
│ ├── Interface de pairing │
│ └── Boutons d'action │
└─────────────────────────────────────┘
```
## 🔄 Communication iframe
### Messages envoyés au parent
- `IFRAME_READY` : Iframe initialisé
- `MENU_NAVIGATION` : Navigation du menu
- `PAIRING_4WORDS_WORDS_GENERATED` : 4 mots générés
- `PAIRING_4WORDS_STATUS_UPDATE` : Mise à jour du statut
- `PAIRING_4WORDS_SUCCESS` : Pairing réussi
- `PAIRING_4WORDS_ERROR` : Erreur de pairing
### Messages reçus du parent
- `TEST_MESSAGE` : Test de communication
- `PAIRING_4WORDS_CREATE` : Créer un pairing
- `PAIRING_4WORDS_JOIN` : Rejoindre avec 4 mots
## 🧪 Tests d'intégration
### Test rapide
```bash
# Ouvrir dans le navigateur
open examples/test-integration.html
```
### Test complet
```bash
# Site externe d'exemple
open examples/external-site.html
```
## 🎨 Styles CSS
Les styles s'adaptent automatiquement :
```css
/* Styles normaux */
.title-container { /* ... */ }
/* Styles iframe */
.iframe-mode .content-menu { /* ... */ }
.iframe-mode .menu-btn { /* ... */ }
```
## 🚀 Utilisation en production
### 1. Site autonome
```html
<!-- Utilisation normale -->
<iframe src="https://your-4nk-site.com" width="100%" height="600px"></iframe>
```
### 2. Intégration personnalisée
```html
<!-- Site externe -->
<div id="4nk-container">
<iframe
src="https://your-4nk-site.com"
sandbox="allow-scripts allow-same-origin allow-forms"
onload="init4NKIntegration(this)">
</iframe>
</div>
<script>
function init4NKIntegration(iframe) {
// Écouter les messages de l'iframe
window.addEventListener('message', (event) => {
if (event.origin !== 'https://your-4nk-site.com') return;
const { type, data } = event.data;
switch (type) {
case 'IFRAME_READY':
console.log('4NK iframe ready');
break;
case 'PAIRING_4WORDS_SUCCESS':
console.log('Pairing successful:', data.message);
break;
}
});
// Envoyer des commandes à l'iframe
function createPairing() {
iframe.contentWindow.postMessage({
type: 'PAIRING_4WORDS_CREATE',
data: {}
}, 'https://your-4nk-site.com');
}
}
</script>
```
## 🔒 Sécurité
### Vérification d'origine
```javascript
// Toujours vérifier l'origine des messages
window.addEventListener('message', (event) => {
if (event.origin !== 'https://trusted-4nk-site.com') {
return; // Ignorer les messages non autorisés
}
// Traiter le message
});
```
### Sandbox iframe
```html
<iframe
src="https://your-4nk-site.com"
sandbox="allow-scripts allow-same-origin allow-forms"
allow="clipboard-write">
</iframe>
```
## 📊 Monitoring
### Logs de communication
```javascript
// Activer les logs détaillés
window.DEBUG_IFRAME = true;
// Écouter tous les messages
window.addEventListener('message', (event) => {
console.log('📨 Message received:', {
origin: event.origin,
type: event.data.type,
data: event.data.data
});
});
```
## 🐛 Dépannage
### Problèmes courants
1. **Iframe ne se charge pas**
- Vérifier les paramètres CORS
- Vérifier l'URL de l'iframe
- Vérifier les paramètres sandbox
2. **Messages non reçus**
- Vérifier la vérification d'origine
- Vérifier le format des messages
- Vérifier la console pour les erreurs
3. **Styles cassés**
- Vérifier la classe `iframe-mode`
- Vérifier les styles CSS conditionnels
- Vérifier la détection d'iframe
### Debug mode
```javascript
// Activer le mode debug
localStorage.setItem('4nk-debug', 'true');
// Voir les logs détaillés
console.log('4NK Debug Mode:', localStorage.getItem('4nk-debug'));
```