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

5.5 KiB

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 :

// 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

# Ouvrir dans le navigateur
open examples/test-integration.html

Test complet

# Site externe d'exemple
open examples/external-site.html

🎹 Styles CSS

Les styles s'adaptent automatiquement :

/* Styles normaux */
.title-container { /* ... */ }

/* Styles iframe */
.iframe-mode .content-menu { /* ... */ }
.iframe-mode .menu-btn { /* ... */ }

🚀 Utilisation en production

1. Site autonome

<!-- Utilisation normale -->
<iframe src="https://your-4nk-site.com" width="100%" height="600px"></iframe>

2. Intégration personnalisée

<!-- 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

// 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

<iframe
  src="https://your-4nk-site.com"
  sandbox="allow-scripts allow-same-origin allow-forms"
  allow="clipboard-write">
</iframe>

📊 Monitoring

Logs de communication

// 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

// Activer le mode debug
localStorage.setItem('4nk-debug', 'true');

// Voir les logs détaillés
console.log('4NK Debug Mode:', localStorage.getItem('4nk-debug'));