Changeset b5924eb in Klonkt


Ignore:
Timestamp:
07/24/2026 08:07:47 PM (7 weeks ago)
Author:
Robin Genis <roboburr@…>
Branches:
main
Children:
c502242
Parents:
780a7c6
Message:

Guardian-PWA: cache-bust op de assets (stale JS was de "fire-and-forget")

Root van de klachten (geen verzend-bericht, lijkt fire-and-forget, en aan de
ward-kant "komt niet aan"): /assets wordt met een 1-jaar-cache geserveerd, dus
de browser bleef de oude guardian.js draaien na een deploy. Die oude versie
las S.pendingOffers (nu S.offers), dus de "Verzonden aanvragen"-sectie bleef
leeg en er kwam geen feedback. De server-kant werkte al: een echte offer
sound-fabrics -> beta wordt bezorgd en door beta opgeslagen (geverifieerd).

Fix: de guardian.js/css krijgen een ?v=<mtime>-versie die per deploy bumpt
(proces-restart herberekent de mtime), zodat een update meteen doorkomt.

Changed files:
src/routes/guardian.js

  • ASSET_V uit de bestand-mtime; meegegeven aan de render

src/views/pages/guardian.ejs

  • ?v= op guardian.css en guardian.js

remarks: bestaande browsers met de oude JS gecached: eenmalig hard-refreshen
(of de PWA herinstalleren). Daarna vangt de versie-query het af. De rest van
/assets houdt de 1-jaar-cache; alleen deze PWA-in-ontwikkeling wordt gebust.

-robo
Co-Authored-By: Claude Opus 4.8 <noreply@…>

Location:
src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/routes/guardian.js

    r780a7c6 rb5924eb  
    1010 */
    1111import express from 'express';
     12import fs from 'fs';
     13import path from 'path';
     14import { fileURLToPath } from 'url';
    1215import db from '../config/database.js';
    1316import { requireAuth } from '../middleware/auth.js';
     
    1720
    1821const router = express.Router();
     22
     23// Cache-bust the PWA assets: /assets is served with a 1-year cache, so without
     24// a per-build version the browser keeps running an old guardian.js/css after a
     25// deploy (that was exactly the "no feedback / not arriving" bug). The version
     26// is the file's mtime at process start; a redeploy restarts us and bumps it.
     27const __dir = path.dirname(fileURLToPath(import.meta.url));
     28function assetVersion(rel) {
     29  try { return Math.floor(fs.statSync(path.join(__dir, '..', 'assets', rel)).mtimeMs).toString(36); }
     30  catch { return '0'; }
     31}
     32const ASSET_V = { js: assetVersion('js/guardian.js'), css: assetVersion('css/guardian.css') };
    1933
    2034/** The acting site: ?site=slug when owned, else the user's first site. */
     
    6478    sites,
    6579    lang: L,
     80    assetV: ASSET_V,
    6681    t: (k, v) => i18nT(L, k, v),
    6782    cspNonce: res.locals.cspNonce,
  • src/views/pages/guardian.ejs

    r780a7c6 rb5924eb  
    88  <link rel="icon" href="/guardian/icon.svg" type="image/svg+xml">
    99  <meta name="theme-color" content="#ff6b35">
    10   <link rel="stylesheet" href="/assets/css/guardian.css">
     10  <link rel="stylesheet" href="/assets/css/guardian.css?v=<%= assetV.css %>">
    1111</head>
    1212<body>
     
    7777
    7878  <script type="application/json" id="guardian-state"><%- JSON.stringify(state) %></script>
    79   <script src="/assets/js/guardian.js" defer></script>
     79  <script src="/assets/js/guardian.js?v=<%= assetV.js %>" defer></script>
    8080</body>
    8181</html>
Note: See TracChangeset for help on using the changeset viewer.