feat: cero dependencias externas y caché de peticiones al nodo

Las librerías (React, Babel) venían de unpkg.com y las fuentes de Google.
Ninguno veía qué transacciones analizabas, pero ambos recibían tu IP y la hora
en cada apertura: sabían que usabas Txoko, cuándo y desde dónde — el metadato
que la propia herramienta enseña a proteger. Ahora se sirven desde el nodo,
con verificación por hash y versiones fijadas. El dashboard funciona sin
internet.

Además, caché con TTL y coalescencia en useApi: las transacciones confirmadas
son inmutables y se cachean toda la sesión, así que repetir un análisis ya
explorado no cuesta ninguna petición al nodo (medido).
This commit is contained in:
2026-07-27 13:22:08 +02:00
parent fd2e38fd45
commit 020f9318aa
5 changed files with 269 additions and 13 deletions
+32
View File
@@ -10,6 +10,38 @@ y el versionado sigue [Versionado Semántico](https://semver.org/lang/es/):
- **MENOR** — características nuevas que no rompen lo anterior
- **PARCHE** — arreglos de errores
---
## [1.11.0] — 2026-07-27
### Añadido
- **Las librerías del frontend se sirven desde tu propio nodo.** React, ReactDOM
y Babel se cargaban desde unpkg.com, y las fuentes IBM Plex desde
fonts.googleapis.com. Ninguno de los dos veía qué transacciones analizabas —
pero ambos recibían tu IP pública, la hora y el referer en cada apertura del
dashboard: sabían que usabas Txoko, cuándo y desde dónde. Ese metadato es
justo lo que esta herramienta enseña a proteger. Ahora no sale ni una
petición fuera de tu red, verificable con
`grep -E '(src|href)="https?://' dashboard.html` (no devuelve nada).
- Consecuencia práctica: **el dashboard funciona sin conexión a internet**.
- Las librerías se descargan una vez durante la instalación y se **verifican
por hash** (SHA-256 publicados en SETUP.md).
- Versiones fijadas (`react@18.3.1`, `@babel/standalone@7.23.10`) en vez de
rangos: antes el CDN decidía qué versión te entregaba y podía cambiar sin
aviso.
- `instalar-fuentes.sh` automatiza la descarga de IBM Plex (licencia OFL) y
genera el CSS. Comprueba cada archivo y aborta si algo falla.
- **Caché de respuestas del nodo con TTL y coalescencia** en `useApi`. Las
pestañas se montan y desmontan al navegar, así que ir a otra pestaña y volver
repetía todas las peticiones. Ahora:
- Las **transacciones confirmadas se cachean toda la sesión** — son
inmutables, no hay motivo para volver a pedirlas. Analizador, rastro de
procedencia y peritaje dejan de pedir las mismas por separado.
- Historial de direcciones 60 s, bloques 60 s, mempool y comisiones 20 s,
estado del sistema 2 s (para que el monitor siga mostrando datos vivos).
- **Coalescencia:** dos componentes que piden lo mismo a la vez generan una
sola petición al nodo, no dos. Mismo patrón que ya usaba
`system-metrics.js` en el servidor.
- Medido: repetir un rastreo forense ya explorado cuesta **cero peticiones**.
---
## [1.10.1] — 2026-07-27
### Añadido