refactor(js): extract crypto module from app.js monofile (§3.1 start)
First slice of the app.js split. Approach: ordered classic-script files loaded via separate <script> tags (argon2.js → app.crypto.js → app.js), NOT ES modules / a bundler. Classic scripts share one global lexical environment, so consts/functions cross-reference across files exactly as in the monofile — zero call-site rewrites, near-zero risk. Chosen over the audit's esbuild/ES-module suggestion because the code is written entirely in global scope (functions call each other by bare name everywhere). - js/app.crypto.js: KDF (PBKDF2 + Argon2id), verifier, AES-GCM encrypt/ decrypt, key persist/restore. Verified byte-for-byte identical to the original block before removal; no duplicate const across the two scripts. - index.html + BuildAssets whitelist + test harness updated for the load order. Harness CONCATENATES app.crypto.js + app.js (node:vm doesn't share top-level const across separate runInContext calls the way browsers share it across <script> tags); argon2.js stays a separate IIFE. - Runtime-validated: rebuilt exe unlocks via quick-unlock and loads/decrypts entries — the extracted crypto (restoreCryptoKey, verifierFromKeyHex, decryptPwd) works from the separate file. 42/42 tests green. - Docs: CLAUDE.md "Découpage frontend" (pattern + rules), file map, tests README, CODE_AUDIT §3.1. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+15
-11
@@ -71,10 +71,11 @@ décplé). Détails dans le CLAUDE.md « Auth-hash schemes ».
|
||||
- Tests : 8 tests crypto Argon2 (vecteur RFC, branche KDF, contrat de
|
||||
params register↔login, sensibilité aux params). 42/42.
|
||||
|
||||
**Reste** : dériver via `argon2idAsync` pour ne pas geler l'UI ~0.65 s
|
||||
(actuellement sync) ; option « migrer vers Argon2id sans changer de pw »
|
||||
(aujourd'hui il faut changer le master pw). **Non compilé/testé runtime
|
||||
Delphi dans cette session** — nécessite un rebuild `PMServer.dproj`.
|
||||
**Validé runtime** : un compte ayant tourné sa master pw affiche
|
||||
`hash_algo=argon2id-v2` (m=19456, t=2, p=1) et se reconnecte/déchiffre.
|
||||
|
||||
**Reste (mineur)** : dériver via `argon2idAsync` pour ne pas geler l'UI
|
||||
~0.65 s (actuellement sync).
|
||||
|
||||
### 1.3 🟡 Métadonnées en clair
|
||||
|
||||
@@ -219,13 +220,16 @@ un edit malencontreux casse tout le parse (déjà arrivé cette session : une
|
||||
déclaration de fonction supprimée → app entièrement morte, découvert
|
||||
seulement au runtime).
|
||||
|
||||
**Recommandations** :
|
||||
- Découper en modules ES (`crypto.js`, `sync.js`, `slideover.js`,
|
||||
`quicksearch.js`, `settings.js`…) + un bundle simple (esbuild) dans
|
||||
`BuildAssets.cmd`.
|
||||
- **Ajouter `node --check` (ou eslint) en pré-étape de `BuildAssets.cmd`**
|
||||
→ aurait attrapé le syntax error avant le rebuild. Gain immédiat, coût
|
||||
quasi nul.
|
||||
**En cours (2026-07-05)** : découpage incrémental en fichiers classic-script
|
||||
chargés dans l'ordre via `<script>` séparés — **pas de bundler ES/esbuild**
|
||||
(les classic scripts partagent l'environnement lexical global, donc zéro
|
||||
réécriture des call-sites, risque quasi nul vs conversion en modules ES).
|
||||
- ✅ `js/app.crypto.js` extrait (KDF, verifier, AES-GCM) — vérifié
|
||||
byte-for-byte identique à l'original, 42 tests verts, pas de `const`
|
||||
dupliqué. Pattern + règles documentés dans CLAUDE.md « Découpage frontend ».
|
||||
- Reste à extraire (grosses sections cohésives) : sync, slideover,
|
||||
settings, quicksearch, autofill…
|
||||
- ✅ `node --check` en pré-étape de `BuildAssets.ps1` : **déjà fait** (cf. §3.2).
|
||||
|
||||
### 3.2 🟡 Aucun test automatisé — **partiellement adressé (2026-07-04)**
|
||||
|
||||
|
||||
Reference in New Issue
Block a user