**Motivations:** - Anchor API requests were being aborted with 'This operation was aborted' error - API anchorage had performance issues causing long response times (30-60s) - Mutex could block indefinitely if a previous request crashed or timed out **Root causes:** - No timeout on mutex acquisition, causing indefinite blocking - Sequential RPC calls (8+ getNewAddress calls) instead of parallel - Expensive fee calculation making N RPC calls (one per input) instead of using known UTXO amounts - RPC timeout too short (30s) for slow Bitcoin node operations - No guarantee of mutex release in error cases **Correctifs:** - Added 180s timeout on mutex acquisition with Promise.race() to prevent indefinite blocking - Parallelized getNewAddress() calls with Promise.all() (9 sequential calls → 1 parallel call) - Optimized fee calculation to use known UTXO amounts instead of getRawTransaction() per input (saves N RPC calls, up to 20+) - Increased RPC timeout from 30s to 120s in .env.example - Added finally block to guarantee mutex release in all cases (success, error, timeout) - Added timeout and explicit error handling in api-filigrane callAnchorAPI() with AbortController (120s timeout) **Evolutions:** - Performance improvement: execution time reduced from ~30-60s to ~10-20s - RPC calls reduction: from ~15-35 calls to ~8-12 calls per anchor transaction - Better resilience: mutex cannot block indefinitely anymore - Improved error messages with explicit timeout/abort information **Pages affectées:** - api-anchorage/src/bitcoin-rpc.js: mutex timeout, parallel address generation, optimized fee calculation, finally block - api-anchorage/.env.example: increased RPC timeout to 120s - api-filigrane/src/routes/watermark.js: timeout and error handling for anchor API calls - fixKnowledge/api-filigrane-anchor-request-aborted.md: documentation of issues and fixes
2.6 KiB
2.6 KiB
UserWallet – Validation stricte CNIL
Author: Équipe 4NK
Date: 2026-01-28
Objectif
Implémenter la validation stricte CNIL pour les contrats et champs, permettant de transformer les warnings en erreurs selon la politique métier.
Motivations
- Conformité CNIL stricte selon la politique métier
- Possibilité d'activer/désactiver la validation stricte
- Bloquer l'utilisation des contrats/champs non conformes CNIL en mode strict
Modifications
src/utils/cnilValidation.ts
- Ajout de
CNILValidationPolicypour configurer la validation - Ajout de
DEFAULT_CNIL_POLICY(mode non strict par défaut) - Ajout de
STRICT_CNIL_POLICY(mode strict avec tous les champs requis) - Extension de
validateCNILFields()pour accepter une politique - Extension de
validateContractCNIL()pour accepter une politique - Extension de
validateChampCNIL()pour accepter une politique - Ajout de
getCNILPolicy()pour récupérer la politique depuis le localStorage - Ajout de
setCNILPolicy()pour stocker la politique
src/services/graphResolver.ts
- Mise à jour de
addContrat()pour utilisergetCNILPolicy() - Mise à jour de
addChamp()pour utilisergetCNILPolicy() - Rejet des contrats/champs non conformes en mode strict (suppression du cache)
Utilisation
Mode par défaut (non strict)
import { validateContractCNIL, DEFAULT_CNIL_POLICY } from './utils/cnilValidation';
const validation = validateContractCNIL(contrat, DEFAULT_CNIL_POLICY);
// Génère des warnings mais n'échoue pas
Mode strict
import { validateContractCNIL, STRICT_CNIL_POLICY } from './utils/cnilValidation';
const validation = validateContractCNIL(contrat, STRICT_CNIL_POLICY);
// Génère des erreurs si les champs CNIL sont manquants
if (!validation.valid) {
// Contrat rejeté
}
Configuration personnalisée
import { setCNILPolicy, getCNILPolicy } from './utils/cnilValidation';
// Activer le mode strict
setCNILPolicy(STRICT_CNIL_POLICY);
// Récupérer la politique actuelle
const policy = getCNILPolicy();
Politique métier
La politique CNIL peut être configurée via :
strict: Mode strict (warnings → errors)requireRaisonsUsageTiers: Requireraisons_usage_tiersrequireRaisonsPartageTiers: Requireraisons_partage_tiersrequireConditionsConservation: Requireconditions_conservation
En mode strict, les contrats/champs non conformes sont rejetés et retirés du cache du graphe.
Références
features/userwallet-champs-obligatoires-cnil.mduserwallet/docs/specs-champs-obligatoires-cnil.md