mirror of
https://github.com/danny-avila/LibreChat.git
synced 2026-08-28 12:44:28 +00:00
🛟 fix: Auto-Recover from Stale Service Worker Assets After Deploys (#13686)
Some checks are pending
Docker Dev Images Build / build (Dockerfile, librechat-dev, node) (push) Waiting to run
Docker Dev Images Build / build (Dockerfile.multi, librechat-dev-api, api-build) (push) Waiting to run
GitNexus Index / index (push) Waiting to run
GitNexus Index / post-index (push) Blocked by required conditions
Sync Locize Translations & Create Translation PR / Sync Translation Keys with Locize (push) Waiting to run
Sync Locize Translations & Create Translation PR / Create Translation PR on Version Published (push) Blocked by required conditions
Sync Helm Chart Tags / Ignore non-main push (push) Waiting to run
Sync Helm Chart Tags / Sync chart tags (push) Waiting to run
Some checks are pending
Docker Dev Images Build / build (Dockerfile, librechat-dev, node) (push) Waiting to run
Docker Dev Images Build / build (Dockerfile.multi, librechat-dev-api, api-build) (push) Waiting to run
GitNexus Index / index (push) Waiting to run
GitNexus Index / post-index (push) Blocked by required conditions
Sync Locize Translations & Create Translation PR / Sync Translation Keys with Locize (push) Waiting to run
Sync Locize Translations & Create Translation PR / Create Translation PR on Version Published (push) Blocked by required conditions
Sync Helm Chart Tags / Ignore non-main push (push) Waiting to run
Sync Helm Chart Tags / Sync chart tags (push) Waiting to run
* 🛟 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
This commit is contained in:
parent
e0f715bd24
commit
788cc5ac07
8 changed files with 194 additions and 3 deletions
20
api/server/utils/fallback.js
Normal file
20
api/server/utils/fallback.js
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
/** 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;
|
||||
|
|
@ -38,7 +38,8 @@ function staticCache(staticPath, options = {}) {
|
|||
fileName === 'index.html' ||
|
||||
fileName.endsWith('.webmanifest') ||
|
||||
fileName === 'manifest.json' ||
|
||||
fileName === 'sw.js'
|
||||
fileName === 'sw.js' ||
|
||||
fileName === 'sw-heal.js'
|
||||
) {
|
||||
res.setHeader('Cache-Control', 'no-store, no-cache, must-revalidate');
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue