diff --git a/packages/backend/src/server/web/index.ts b/packages/backend/src/server/web/index.ts index c81506384c..cd8d6f530b 100644 --- a/packages/backend/src/server/web/index.ts +++ b/packages/backend/src/server/web/index.ts @@ -42,6 +42,9 @@ const app = new Koa(); //#region Bull Dashboard const bullBoardPath = '/queue'; + // used as a url param to prevent caching css and images + const nowDateMs = Date.now(); + // Authenticate app.use(async (ctx, next) => { if (ctx.path === bullBoardPath || ctx.path.startsWith(bullBoardPath + '/')) { @@ -295,6 +298,7 @@ router.get(['/@:user', '/@:user/:sub'], async (ctx, next) => { icon: meta.iconUrl, themeColor: meta.themeColor, privateMode: meta.privateMode, + nowDateMs: nowDateMs, }); ctx.set('Cache-Control', 'public, max-age=15'); } else { @@ -340,6 +344,7 @@ router.get('/notes/:note', async (ctx, next) => { icon: meta.iconUrl, privateMode: meta.privateMode, themeColor: meta.themeColor, + nowDateMs: nowDateMs, }); ctx.set('Cache-Control', 'public, max-age=15'); @@ -377,6 +382,7 @@ router.get('/@:user/pages/:page', async (ctx, next) => { icon: meta.iconUrl, themeColor: meta.themeColor, privateMode: meta.privateMode, + nowDateMs: nowDateMs, }); if (['public'].includes(page.visibility)) { @@ -410,6 +416,7 @@ router.get('/clips/:clip', async (ctx, next) => { privateMode: meta.privateMode, icon: meta.iconUrl, themeColor: meta.themeColor, + nowDateMs: nowDateMs, }); ctx.set('Cache-Control', 'public, max-age=15'); @@ -436,6 +443,7 @@ router.get('/gallery/:post', async (ctx, next) => { icon: meta.iconUrl, themeColor: meta.themeColor, privateMode: meta.privateMode, + nowDateMs: nowDateMs, }); ctx.set('Cache-Control', 'public, max-age=15'); @@ -461,6 +469,7 @@ router.get('/channels/:channel', async (ctx, next) => { icon: meta.iconUrl, themeColor: meta.themeColor, privateMode: meta.privateMode, + nowDateMs: nowDateMs, }); ctx.set('Cache-Control', 'public, max-age=15'); @@ -536,6 +545,7 @@ router.get('(.*)', async ctx => { themeColor: meta.themeColor, randomMOTD: motd[Math.floor(Math.random() * motd.length)], privateMode: meta.privateMode, + nowDateMs: nowDateMs, }); ctx.set('Cache-Control', 'public, max-age=3'); }); diff --git a/packages/backend/src/server/web/views/base.pug b/packages/backend/src/server/web/views/base.pug index 8b4d41e123..f06f2cab2d 100644 --- a/packages/backend/src/server/web/views/base.pug +++ b/packages/backend/src/server/web/views/base.pug @@ -29,15 +29,14 @@ html meta(property='twitter:card' content='summary') meta(property='og:site_name' content= instanceName || 'Calckey') meta(name='viewport' content='width=device-width, initial-scale=1') - meta(name='darkreader-lock') - link(rel='icon' href= icon || '/favicon.ico') - link(rel='apple-touch-icon' href= icon || '/apple-touch-icon.png') + link(rel='icon' href= icon || `/favicon.ico?${ nowDateMs }`) + link(rel='apple-touch-icon' href= icon || `/apple-touch-icon.png?${ nowDateMs }`) link(rel='manifest' href='/manifest.json') - link(rel='prefetch' href='/static-assets/badges/info.png') - link(rel='prefetch' href='/static-assets/badges/not-found.png') - link(rel='prefetch' href='/static-assets/badges/error.png') + link(rel='prefetch' href=`/static-assets/badges/info.png?${ nowDateMs }`) + link(rel='prefetch' href=`/static-assets/badges/not-found.png?${ nowDateMs }`) + link(rel='prefetch' href=`/static-assets/badges/error.png?${ nowDateMs }`) link(rel='stylesheet' href='/assets/fontawesome/css/all.css') - link(rel='stylesheet' href='/static-assets/instance.css') + link(rel='stylesheet' href=`/static-assets/instance.css?${ nowDateMs }`) link(rel='modulepreload' href=`/assets/${clientEntry.file}`) each href in clientEntry.css @@ -78,7 +77,7 @@ html br | Please turn on your JavaScript div#splash - img#splashIcon(src= splashIcon || '/static-assets/splash.png') + img#splashIcon(src= splashIcon || `/static-assets/splash.png?${ nowDateMs }`) span#splashText block randomMOTD = randomMOTD