**Motivations:** - Add new features and fixes for userwallet application - Update documentation for pairing, login state machine, and sync - Add new utilities for bloom filters, nonce store, and contract versioning - Fix mempool websocket offline issues **Root causes:** - N/A (feature additions and improvements) **Correctifs:** - Fix mempool websocket offline handling - Update ESLint configuration **Evolutions:** - Add login state machine service and hook - Add sync loop service - Add bloom filter utilities for anti-replay and state visibility - Add nonce store and contract version utilities - Update pairing confirmation and graph resolver services - Add new documentation for features and fixes - Update userwallet components (LoginScreen, SyncScreen) - Update types for contract, identity, and messages **Pages affectées:** - userwallet/src/components/LoginScreen.tsx - userwallet/src/components/SyncScreen.tsx - userwallet/src/hooks/useChannel.ts - userwallet/src/hooks/useLoginStateMachine.ts (new) - userwallet/src/services/graphResolver.ts - userwallet/src/services/pairingConfirm.ts - userwallet/src/services/syncService.ts - userwallet/src/services/syncLoop.ts (new) - userwallet/src/services/loginStateMachine.ts (new) - userwallet/src/types/contract.ts - userwallet/src/types/identity.ts - userwallet/src/types/message.ts - userwallet/src/utils/canonical.ts - userwallet/src/utils/identity.ts - userwallet/src/utils/indexedDbStorage.ts - userwallet/src/utils/relay.ts - userwallet/src/utils/verification.ts - userwallet/src/utils/bloom.ts (new) - userwallet/src/utils/contractVersion.ts (new) - userwallet/src/utils/nonceStore.ts (new) - userwallet/eslint.config.mjs - userwallet/package.json - userwallet/package-lock.json - userwallet/docs/synthese.md - userwallet/docs/specs-champs-obligatoires-cnil.md (new) - api-relay/README.md - features/userwallet-pairing-words-only-finalise.md - features/userwallet-anti-rejeu-etats-visibles-bloom.md (new) - features/userwallet-bloom-usage-sync.md (new) - features/userwallet-contrat-login-reste-a-faire.md (new) - features/userwallet-ecrans-login-a-valider.md (new) - features/userwallet-eslint-fix.md (new) - features/userwallet-login-state-machine.md (new) - features/userwallet-validation-conformite.md (new) - fixKnowledge/mempool-websocket-offline-fix.md (new) - mempool (submodule) - hash_list.txt - hash_list_cache.txt
2.4 KiB
2.4 KiB
UserWallet – Machine à états login (3.1)
Author: Équipe 4NK
Date: 2026-01-26
Objectif
Implémenter la machine à états formelle du login (S_LOGIN_* , E_* , transitions) décrite dans specs.md, et l’intégrer au flux login existant.
Impacts
- Module :
services/loginStateMachine.ts(états, événements,transition,getInitialLoginState,isTerminal,isErrorState). - Hook :
hooks/useLoginStateMachine(state,dispatch,reset). - LoginScreen : utilise le hook, dispatch des événements aux points clés (build path, challenge, publish, Retour), affichage de l’état (sr-only, aria-live).
- Flux : E_SELECT_SERVICE / E_SELECT_MEMBER → E_PATH_OK | E_PATH_INCOMPLETE | E_PATH_INVALID → E_PAIRS_OK → E_CHALLENGE_READY → E_SIGNATURES_COMPLETE → E_PUBLISH_LOGIN_OK | E_PUBLISH_LOGIN_PARTIAL → E_LOCAL_VERDICT_ACCEPT | (reject) → S_LOGIN_SUCCESS | S_LOGIN_FAILURE. E_BACK, E_RETRY, E_SYNC_NOW, E_ADD_PAIR pour reprises.
Modifications
src/services/loginStateMachine.ts: typesLoginState,LoginEvent,TransitionResult;transition(state, event); helpers.src/hooks/useLoginStateMachine.ts: état local,dispatch,reset.src/components/LoginScreen.tsx: hook, dispatch danshandleBuildPath,handleBuildChallenge,handlePublish;handleBack+ E_BACK ; libellé état (sr-only).src/index.css:.sr-onlypour le statut.
États couverts
S_LOGIN_SELECT_SERVICE, S_LOGIN_SELECT_MEMBER, S_LOGIN_BUILD_PATH, S_LOGIN_CHECK_PAIRS, S_LOGIN_NEED_MORE_PAIRS, S_LOGIN_BUILD_CHALLENGE, S_LOGIN_COLLECT_SIGNATURES, S_LOGIN_PUBLISH_PROOF, S_LOGIN_VERIFY_LOCAL, S_LOGIN_SUCCESS, S_LOGIN_FAILURE, S_ERROR_RECOVERABLE.
Reste à faire (hors scope 3.1)
- Timeouts (réseau, collecte signatures), backoff.
- Gardes explicites (G_PAIRING_SATISFIED, etc.) côté UI avant dispatch.
- S_LOGIN_NEED_MORE_PAIRS : boutons E_ADD_PAIR, E_SYNC_NOW dédiés.
Modalités de déploiement
Déploiement classique du front userwallet.
Modalités d’analyse
- Parcourir le flux login (sélection → chemin → challenge → publication) et vérifier les transitions (DevTools, log état si besoin).
- Vérifier que Retour envoie E_BACK et navigue vers
/. - Publication partielle → S_ERROR_RECOVERABLE, pas S_LOGIN_SUCCESS.
Références
userwallet/docs/specs.md(machine à états)features/userwallet-contrat-login-reste-a-faire.md(§ 3.1)