# UserWallet – Timeouts réseau (3.1) **Author:** Équipe 4NK **Date:** 2026-01-26 ## Objectif Timeouts sur les appels relay (X_RELAY_TIMEOUT). Pas de backoff. ## Impacts - **Relay** : tous les fetch (GET /messages, /signatures, /keys, /bloom ; POST /messages, /signatures, /keys) utilisent `AbortSignal.timeout(RELAY_FETCH_TIMEOUT_MS)` (15 s). En cas de dépassement, l’appel échoue (AbortError). - **Collecte signatures** : chaque GET /signatures pendant la boucle de collecte utilise un timeout **distinct** `COLLECT_FETCH_TIMEOUT_MS` (15 s). Configurable via `CollectLoopOpts.fetchTimeoutMs`. En échec, le relais est ignoré pour ce poll, log `fetchSignaturesForHash relay failure`. ## Modifications - **`utils/relay.ts`** : `RELAY_FETCH_TIMEOUT_MS` ; `getSignatures(relay, hash, timeoutMs?)` avec `timeoutMs` optionnel ; `signal: AbortSignal.timeout(...)` sur chaque `fetch`. - **`utils/collectSignatures.ts`** : `COLLECT_FETCH_TIMEOUT_MS` ; `fetchSignaturesForHash(..., fetchTimeoutMs?)` ; `CollectLoopOpts.fetchTimeoutMs` ; `runCollectLoop` passe le timeout aux fetch ; log `console.error` en cas d’échec fetch par relais. - **`services/syncService.ts`** : pas de retry ; en échec fetch, le relais est marqué `ok: false`. ## Modalités de déploiement Déploiement classique du front userwallet. ## Modalités d’analyse - Relais lent ou coupé : timeout après 15 s ; `relayStatus` indique `ok: false` pour ce relais. Log « Error syncing from … ». - Collecte : un relais en timeout sur GET /signatures → log « fetchSignaturesForHash relay failure » ; le poll continue avec les autres relais. Boucle globale `COLLECT_TIMEOUT_MS` (5 min). ## Références - `features/userwallet-contrat-login-reste-a-faire.md` (§ 3.1) - `userwallet/docs/specs.md` (X_RELAY_TIMEOUT)