diff --git a/src/lib/hooks/useVersion.ts b/src/lib/hooks/useVersion.ts index 4eac3a8d..75deb319 100755 --- a/src/lib/hooks/useVersion.ts +++ b/src/lib/hooks/useVersion.ts @@ -1,10 +1,9 @@ import useSWR from 'swr'; import { Response } from '../api/response'; const f = async () => { - const res = await fetch('/api/version', { - cache: 'force-cache', - }); + const res = await fetch('/api/version'); if (!res.ok) throw new Error('Failed to fetch version'); + const r = await res.json(); return r; }; diff --git a/src/server/routes/api/version.ts b/src/server/routes/api/version.ts index bc496448..3f3d52fd 100755 --- a/src/server/routes/api/version.ts +++ b/src/server/routes/api/version.ts @@ -7,6 +7,7 @@ import fastifyPlugin from 'fastify-plugin'; export type ApiVersionResponse = { details: ReturnType; data: VersionAPI; + cached: true; }; interface VersionAPI { @@ -31,6 +32,9 @@ interface VersionAPI { const logger = log('api').c('version'); +let cachedData: VersionAPI | null = null; +let cachedAt = 0; + export const PATH = '/api/version'; export default fastifyPlugin( (server, _, done) => { @@ -39,6 +43,11 @@ export default fastifyPlugin( const details = getVersion(); + // 6 hrs cache + if (cachedData && Date.now() - cachedAt < (6 * 60 * 60 * 1000)) { + return res.send({ data: cachedData, details, cached: true }); + } + const url = new URL(config.features.versionAPI); url.pathname = '/'; url.searchParams.set('details', JSON.stringify(details)); @@ -52,9 +61,13 @@ export default fastifyPlugin( const data: VersionAPI = await resp.json(); + cachedData = data; + cachedAt = Date.now(); + return res.send({ data, details, + cached: false, }); } catch (e) { logger.error('failed to fetch version details').error(e as Error);