**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/*
208 lines
7.3 KiB
Markdown
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
|