[FEAT] Sessione + release: refresh token silenzioso + avviso "nuova versione"

Evita la "sessione scaduta" e i deploy che restano invisibili all'utente.
- api.js: refresh PROATTIVO dell'access token ~2 min prima della scadenza
  (scheduleTokenRefresh su exp del JWT, riprogrammato ad ogni setTokens) +
  ensureFreshToken() per rinnovo immediato al ritorno sulla scheda. Con refresh
  a 7gg l'utente resta loggato senza mai vedere il login.
- common.js: watch versione (poll version.json ogni 5 min + su visibilitychange)
  → banner "È disponibile una nuova versione — Aggiorna" (reload) quando cambia;
  nudge service worker (registration.update); su visibilitychange chiama anche
  api.ensureFreshToken(). Nessun hard-refresh manuale.
- Cache-buster api/common ?v=20260729b. version 1.25.12. Solo frontend.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
DevEnv nis2-agile
2026-07-29 16:07:57 +02:00
co-authored by Claude Opus 4.8
parent faadb62da6
commit cf224480cc
45 changed files with 171 additions and 82 deletions
+1 -1
View File
@@ -1 +1 @@
{"version": "1.25.11", "build": "2026-07-29-v1.25.11", "date": "2026-07-29", "changelog": "Cruscotto Studio: ora e' previsto anche il ruolo CONSULENTE. Un utente con ruolo 'consulente' vede nel selettore azienda e nel Cruscotto Studio SOLO le aziende del proprio studio (i clienti collegati al proprio studio) piu' quelle di cui e' membro diretto, non l'intero elenco (che resta agli amministratori)."}
{"version": "1.25.12", "build": "2026-07-29-v1.25.12", "date": "2026-07-29", "changelog": "Sessione e aggiornamenti piu' fluidi. (1) Il collegamento ora si RINNOVA DA SOLO in background poco prima di scadere (e al ritorno sulla scheda dopo una pausa il rinnovo e' immediato): non serve piu' rifare il login dopo un po', e le pagine non restano piu' 'appese'. (2) Quando esce una NUOVA VERSIONE dell'app, compare in basso un avviso 'E' disponibile una nuova versione - Aggiorna': un clic ricarica con la versione aggiornata, senza dover svuotare la cache o ricaricare a mano."}