**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/*
7.3 KiB
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 :
-
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
-
Gestion du polling
startPolling(intervalMs): démarre le polling périodiquestopPolling(): arrête le polling- Fenêtre temporelle configurable pour le scan des clés
- Émission d'événements
RelayHashEventavecsource: 'polling'
1.2 Optimisations mobile (backoff, reconnexions)
Fichier modifié : userwallet/src/services/relayNotificationService.ts
Implémentations :
-
Stratégie de backoff exponentiel
- Interface
BackoffStatepour 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 tentativesrecordSuccess(endpoint): réinitialise le backoff après succèsshouldRetry(endpoint): vérifie si un retry est autorisé (max 5 tentatives)
- Interface
-
Gestion réseau mobile
setupNetworkListeners(): écoute des événementsonline/offlineresumeOperations(): reprend les opérations après reconnexionpauseOperations(): pause les opérations en mode offline- Vérification
isOnlineavant chaque opération réseau
-
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
- Retry avec backoff pour
1.3 Fetch automatique des données
Fichier modifié : userwallet/src/services/relayNotificationService.ts
Implémentations :
-
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
-
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)
-
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()etcleanup()
Fichier modifié : userwallet/src/hooks/useRelayNotifications.ts
Implémentations :
- Polling HTTP REST
startPolling()démarre le polling périodiquestopPolling()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 :
-
Media queries
@media (max-width: 768px): tablettes et petits écrans@media (max-width: 480px): smartphones- Adaptation des paddings, marges, tailles de police
-
Tailles tactiles
min-height: 44pxpour tous les boutons (recommandation Apple/Google)min-width: 44pxpour les éléments interactifs- Boutons en
width: 100%sur mobile
-
Gestion du clavier virtuel
font-size: 16pxpour les inputs (évite le zoom automatique iOS)scroll-margin-top: 100pxpour le focus des inputs- Adaptation des hauteurs d'iframe selon la taille d'écran
-
Optimisations tactiles
@media (hover: none) and (pointer: coarse): détection tactile- Feedback visuel avec
opacityettransformsur: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 :
-
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
-
Nettoyage IndexedDB
cleanupIndexedDB(now): supprime les entrées expirées depuis IndexedDB- Utilisation de l'index
timestamppour les requêtes efficaces - Nettoyage asynchrone non-bloquant
-
Double persistance
- localStorage : accès synchrone (requis par
NonceCacheLike) - IndexedDB : persistance entre sessions (backup)
- Les deux sont maintenus en synchronisation
- localStorage : accès synchrone (requis par
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
-
userwallet/src/services/relayNotificationService.ts:- Modèle pull-only (HTTP REST)
- Optimisations mobile (backoff, reconnexions)
- Gestion réseau online/offline
-
userwallet/src/hooks/useRelayNotifications.ts:- Polling HTTP REST automatique
- Gestion du cycle de vie
-
userwallet/src/index.css:- Media queries responsive
- Tailles tactiles
- Gestion clavier virtuel
-
service-login-verify/src/persistentNonceCache.ts:- Persistance IndexedDB améliorée
Utilisation
userwallet - Activer les notifications
Le hook useRelayNotifications active le polling HTTP REST :
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 :
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 :
PersistentNonceCacheutilise 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émenteruserwallet/src/services/relayNotificationService.ts: Service de notificationsservice-login-verify/src/persistentNonceCache.ts: Cache persistant