**Motivations:** - Parcours login contrat: sélection service → membre → build path → proof, vérification côté parent (service-login-verify) - Scripts data: initialisation SQLite (utxos, anchors, fees), migration depuis fichiers, sync UTXOs - Website-skeleton: intégration contrat, extraction validateurs login, vérification preuve **Root causes:** - N/A (évolutions) **Correctifs:** - N/A **Evolutions:** - UserWallet: MemberSelectionScreen, LoginScreen machine à états (S_LOGIN_SELECT_SERVICE → S_LOGIN_SELECT_MEMBER → build path), service/membre via query params, useChannel/iframeChannel - Website-skeleton: contract.ts (extractLoginValidators, isValidContract, isValidAction), main.ts validateurs depuis contrat, config étendu - Data: init-db.js (tables utxos/anchors/fees), migrate-from-files.js **Pages affectées:** - data/init-db.js, data/migrate-from-files.js, data/sync-utxos.log - userwallet: App, LoginCollectShare, LoginScreen, MemberSelectionScreen, ServiceListScreen, useChannel, iframeChannel - website-skeleton: README, config, contract, main
website-skeleton
Squelette d'un site qui intègre UserWallet en iframe : écoute des messages postMessage (auth-request, login-proof, error, contract), vérification des preuves de login via service-login-verify, et affichage du statut (accepté / refusé).
Prérequis
- service-login-verify :
npm run builddans../service-login-verifyavant d'installer ou builder le skeleton. - UserWallet : à servir sur l'URL configurée (voir ci‑dessous) pour que l'iframe fonctionne.
Installation
cd website-skeleton
npm install
npm run build
Développement
npm run dev
Ouvre par défaut sur http://localhost:3024. L'iframe pointe vers UserWallet (USERWALLET_ORIGIN).
Configuration
- Origine UserWallet :
src/config.tsdéfinitUSERWALLET_ORIGIN. En dev, défauthttp://localhost:3018(si UserWallet tourne en dev sur ce port). En prod, défauthttps://userwallet.certificator.4nkweb.com. Pour override : variable d'environnementVITE_USERWALLET_ORIGIN(ex.VITE_USERWALLET_ORIGIN=http://localhost:3018 npm run dev). - Validateurs :
DEFAULT_VALIDATEURSdanssrc/config.tsest un placeholder. Le skeleton charge dynamiquement les validateurs depuis les contrats reçus via channel messages (typecontract). Si aucun contrat n'est reçu, les validateurs par défaut sont utilisés.
Chargement dynamique des contrats
Le skeleton écoute les messages postMessage de type contract pour recevoir le contrat et mettre à jour les validateurs dynamiquement :
// Exemple d'envoi de contrat depuis le parent
window.postMessage({
type: 'contract',
payload: {
contrat: {
uuid: '...',
validateurs: { membres_du_role: [...] },
datajson: { types_names_chiffres: 'contrat' }
},
contrats_fils: [...], // Optionnel
actions: [...] // Optionnel, pour extraire l'action login
}
}, '*');
Le skeleton :
- Reçoit le message
contract - Extrait les validateurs de l'action login (recherche dans
actionspour un type contenant "login") - Met à jour les
allowedPubkeysutilisés pour la vérification - Affiche un statut de confirmation
Si aucun contrat n'est reçu, les DEFAULT_VALIDATEURS sont utilisés comme fallback.
Utilisation
- Lancer UserWallet (dev ou déployé) sur l'URL configurée.
- Lancer le skeleton (
npm run devou servirdist/). - Ouvrir la page du skeleton : l'iframe affiche UserWallet.
- Envoyer contrat (optionnel) : envoyer un message
contractavec le contrat et ses actions pour mettre à jour les validateurs. - Demander auth : bouton « Demander auth (auth-request) » → envoi de
auth-requestà l'iframe. - Login : depuis l'iframe, effectuer le flux de login ; à la fin, UserWallet envoie
login-proofau parent. Le skeleton vérifie la preuve (verifyLoginProof) et affiche « Login accepté » ou « Login refusé : … ».
Structure
index.html: page avec iframe, zone de statut, bouton auth.src/main.ts: chargement de l'iframe, écoutemessage, envoiauth-request, appel àverifyLoginProof, mise à jour du statut, gestion des messagescontract.src/config.ts:USERWALLET_ORIGIN,DEFAULT_VALIDATEURS, typesContratetAction.src/contract.ts: extraction des validateurs depuis les contrats (extractLoginValidators), validation de structure (isValidContract,isValidAction).
Déploiement
- Production :
https://skeleton.certificator.4nkweb.com(proxy → 192.168.1.105:3024). - Installation :
./install-website-skeleton.shsur le backend, puis./update-proxy-nginx.shpour proxy + certificat. Voirdocs/WEBSITE_SKELETON.md.
Références
docs/WEBSITE_SKELETON.md(documentation détaillée)features/service-login-verify.mdfeatures/userwallet-contrat-login-reste-a-faire.md(§ 3.7)userwallet/(iframe)service-login-verify/(vérification)