anchorage_layer_simple/features/login-bout-en-bout-implémentations.md
ncantu fe7f49b6cd Update API anchorage, services, and website skeleton
**Motivations:**
- Synchronisation des modifications sur l'API anchorage, les services et le website skeleton
- Ajout de scripts de monitoring et de diagnostic pour l'API anchorage
- Documentation des problèmes de mutex et de provisioning UTXO

**Root causes:**
- N/A (commit de synchronisation)

**Correctifs:**
- N/A (commit de synchronisation)

**Evolutions:**
- Ajout de scripts de monitoring et de diagnostic pour l'API anchorage
- Amélioration de la gestion des mutex et des UTXOs
- Mise à jour de la documentation

**Pages affectées:**
- api-anchorage/src/bitcoin-rpc.js
- api-anchorage/src/routes/anchor.js
- api-anchorage/src/routes/health.js
- api-anchorage/src/server.js
- api-anchorage/README-MONITORING.md
- api-anchorage/cleanup-stale-locks.mjs
- api-anchorage/diagnose.mjs
- api-anchorage/unlock-utxos.mjs
- service-login-verify/src/persistentNonceCache.ts
- signet-dashboard/src/server.js
- signet-dashboard/public/*
- userwallet/src/hooks/useChannel.ts
- userwallet/src/services/relayNotificationService.ts
- userwallet/src/utils/defaultContract.ts
- website-skeleton/src/*
- docs/DOMAINS_AND_PORTS.md
- docs/INTERFACES.md
- features/*
- fixKnowledge/*
2026-01-28 15:11:59 +01:00

208 lines
7.3 KiB
Markdown

# Login fonctionnel de bout en bout - Implémentations réalisées
**Author:** Équipe 4NK
**Date:** 2026-01-28
## Vue d'ensemble
Ce document décrit les implémentations réalisées pour compléter le login fonctionnel de bout en bout sur PC et mobile.
---
## 1. userwallet - Notifications relais pour mobile
**Note importante :** Le modèle est **pull-only** (HTTP REST uniquement). Les WebSockets ne sont pas souhaités selon la documentation (`userwallet/features/userwallet-notifications-relais.md`).
### 1.1 Modèle pull-only (HTTP REST)
**Fichier modifié :** `userwallet/src/services/relayNotificationService.ts`
**Implémentations :**
1. **Polling HTTP REST uniquement**
- Modèle pull-only : uniquement des appels GET HTTP REST
- Pas de WebSocket (non souhaité selon la documentation)
- Polling périodique des relais pour détecter nouveaux hashes
- Détection via `GET /keys?start=&end=` pour scanner les nouveaux messages
2. **Gestion du polling**
- `startPolling(intervalMs)` : démarre le polling périodique
- `stopPolling()` : arrête le polling
- Fenêtre temporelle configurable pour le scan des clés
- Émission d'événements `RelayHashEvent` avec `source: 'polling'`
### 1.2 Optimisations mobile (backoff, reconnexions)
**Fichier modifié :** `userwallet/src/services/relayNotificationService.ts`
**Implémentations :**
1. **Stratégie de backoff exponentiel**
- Interface `BackoffState` pour gérer l'état de retry par relais
- `getBackoffDelay(endpoint)` : calcul du délai avec exponentiel (max 60s)
- `recordFailure(endpoint)` : enregistre un échec et incrémente les tentatives
- `recordSuccess(endpoint)` : réinitialise le backoff après succès
- `shouldRetry(endpoint)` : vérifie si un retry est autorisé (max 5 tentatives)
2. **Gestion réseau mobile**
- `setupNetworkListeners()` : écoute des événements `online`/`offline`
- `resumeOperations()` : reprend les opérations après reconnexion
- `pauseOperations()` : pause les opérations en mode offline
- Vérification `isOnline` avant chaque opération réseau
3. **Optimisation des appels réseau**
- Retry avec backoff pour `getMessageByHash`, `getSignatures`, `getKeys`
- Skip des relais en échec répétés
- Réduction des appels inutiles en mode offline
### 1.3 Fetch automatique des données
**Fichier modifié :** `userwallet/src/services/relayNotificationService.ts`
**Implémentations :**
1. **ProcessHash amélioré**
- Fetch automatique de message, signatures, clés quand un hash est connu
- Déchiffrement et mise à jour du graphe automatiques
- Gestion des erreurs avec backoff par relais
2. **ProcessHashByType optimisé**
- Optimisation selon le type d'objet (signature, contrat, membre, pair, action, champ)
- Fetch sélectif selon le type (ex: pas besoin de clés pour une signature seule)
3. **Intégration avec useRelayNotifications**
- Auto-processing des hashes détectés via polling
- Démarrage automatique du polling avec `startPolling()`
- Arrêt propre avec `stopPolling()` et `cleanup()`
**Fichier modifié :** `userwallet/src/hooks/useRelayNotifications.ts`
**Implémentations :**
1. **Polling HTTP REST**
- `startPolling()` démarre le polling périodique
- `stopPolling()` arrête le polling
- Gestion du cycle de vie du polling
---
## 2. userwallet - Responsive design mobile
### 2.1 CSS responsive
**Fichier modifié :** `userwallet/src/index.css`
**Implémentations :**
1. **Media queries**
- `@media (max-width: 768px)` : tablettes et petits écrans
- `@media (max-width: 480px)` : smartphones
- Adaptation des paddings, marges, tailles de police
2. **Tailles tactiles**
- `min-height: 44px` pour tous les boutons (recommandation Apple/Google)
- `min-width: 44px` pour les éléments interactifs
- Boutons en `width: 100%` sur mobile
3. **Gestion du clavier virtuel**
- `font-size: 16px` pour les inputs (évite le zoom automatique iOS)
- `scroll-margin-top: 100px` pour le focus des inputs
- Adaptation des hauteurs d'iframe selon la taille d'écran
4. **Optimisations tactiles**
- `@media (hover: none) and (pointer: coarse)` : détection tactile
- Feedback visuel avec `opacity` et `transform` sur `:active`
- Espacement suffisant entre les éléments interactifs
---
## 3. service-login-verify - Persistance NonceCache
### 3.1 Amélioration PersistentNonceCache
**Fichier modifié :** `service-login-verify/src/persistentNonceCache.ts`
**Implémentations :**
1. **Persistance IndexedDB en arrière-plan**
- `persistToIndexedDB(nonce, timestamp)` : persiste en IndexedDB de manière asynchrone
- Utilisation de localStorage comme stockage principal (synchrone, requis par l'interface)
- IndexedDB utilisé comme backup persistant
2. **Nettoyage IndexedDB**
- `cleanupIndexedDB(now)` : supprime les entrées expirées depuis IndexedDB
- Utilisation de l'index `timestamp` pour les requêtes efficaces
- Nettoyage asynchrone non-bloquant
3. **Double persistance**
- localStorage : accès synchrone (requis par `NonceCacheLike`)
- IndexedDB : persistance entre sessions (backup)
- Les deux sont maintenus en synchronisation
**Note :** `PersistentNonceCache` est déjà disponible et peut être utilisé à la place de `NonceCache` dans `website-skeleton` si persistance entre redémarrages nécessaire.
---
## Synthèse des modifications
### Fichiers modifiés
1. `userwallet/src/services/relayNotificationService.ts` :
- Modèle pull-only (HTTP REST)
- Optimisations mobile (backoff, reconnexions)
- Gestion réseau online/offline
2. `userwallet/src/hooks/useRelayNotifications.ts` :
- Polling HTTP REST automatique
- Gestion du cycle de vie
3. `userwallet/src/index.css` :
- Media queries responsive
- Tailles tactiles
- Gestion clavier virtuel
4. `service-login-verify/src/persistentNonceCache.ts` :
- Persistance IndexedDB améliorée
---
## Utilisation
### userwallet - Activer les notifications
Le hook `useRelayNotifications` active le polling HTTP REST :
```typescript
const { startPolling, stopPolling } = useRelayNotifications(graphResolver, true);
// Démarrer polling HTTP REST (pull-only)
startPolling(60000); // 60 secondes
```
### service-login-verify - Utiliser PersistentNonceCache
Dans `website-skeleton/src/main.ts` :
```typescript
import { PersistentNonceCache } from 'service-login-verify';
const nonceCache = new PersistentNonceCache(3600000);
await nonceCache.init(); // Initialiser IndexedDB
```
---
## Notes importantes
- **Modèle pull-only** : Le système utilise uniquement des appels HTTP REST (GET). Les WebSockets ne sont pas souhaités selon la documentation (`userwallet/features/userwallet-notifications-relais.md`).
- **Persistance NonceCache** : `PersistentNonceCache` utilise localStorage comme stockage principal (synchrone) et IndexedDB en arrière-plan (asynchrone).
- **Backoff** : Limité à 5 tentatives maximum avec délai exponentiel jusqu'à 60 secondes.
- **Mobile** : Les optimisations réduisent les appels réseau et gèrent les reconnexions automatiquement.
---
## Références
- `features/login-bout-en-bout-reste-a-faire.md` : Liste initiale des éléments à implémenter
- `userwallet/src/services/relayNotificationService.ts` : Service de notifications
- `service-login-verify/src/persistentNonceCache.ts` : Cache persistant