Files
LibreChat/api/server/utils/fallback.js
Danny Avila 788cc5ac07 🛟 fix: Auto-Recover from Stale Service Worker Assets After Deploys (#13686)
* 🛟 fix: Auto-Recover from Stale Service Worker Assets After Deploys

- 404 missing static assets in the SPA fallback instead of serving index.html
- inline recovery script unregisters stale SWs and reloads once on chunk failure
- route vite:preloadError into the same recovery path for stale lazy chunks

* 🛟 fix: Address Review — SW-Side Recovery, Scoped Unregister, Shared Fallback

- importScripts'd sw-heal.js pings window clients on activation and reloads
  ones that can't pong: stale pages carry no recovery code of their own
- scope SW unregistration to the deployment base for subpath installs
- preventDefault vite:preloadError only when a recovery reload was initiated
- extract createSpaFallback and apply the asset 404 guard to experimental.js
2026-06-11 11:57:06 -04:00

21 lines
758 B
JavaScript

/** Static asset extensions that must 404 when missing — serving the SPA's
* index.html for them breaks strict MIME checks and poisons SW/browser caches. */
const STATIC_ASSET_EXT =
/\.(?:js|mjs|css|map|json|wasm|webmanifest|png|jpe?g|gif|svg|ico|webp|avif|woff2?|ttf|otf|eot)$/i;
/**
* Creates the SPA fallback middleware: serves index.html for unmatched
* routes while returning 404 for missing static assets.
* @param {(req: import('express').Request, res: import('express').Response) => void} sendIndexHtml
*/
function createSpaFallback(sendIndexHtml) {
return (req, res) => {
if (STATIC_ASSET_EXT.test(req.path)) {
return res.status(404).end();
}
return sendIndexHtml(req, res);
};
}
module.exports = createSpaFallback;