anchorage_layer_simple/features/userwallet-login-state-machine.md
ncantu c3c11f0ef0 Update userwallet components, services and documentation
**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
2026-01-26 14:00:32 +01:00

48 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 linté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` : types `LoginState`, `LoginEvent`, `TransitionResult` ; `transition(state, event)` ; helpers.
- `src/hooks/useLoginStateMachine.ts` : état local, `dispatch`, `reset`.
- `src/components/LoginScreen.tsx` : hook, dispatch dans `handleBuildPath`, `handleBuildChallenge`, `handlePublish` ; `handleBack` + E_BACK ; libellé état (sr-only).
- `src/index.css` : `.sr-only` pour 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 danalyse
- 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)