Skip to content

Commit b0d5b99

Browse files
committed
Refactor update check to use localStorage with a cache expiration mechanism
1 parent d0f71b8 commit b0d5b99

1 file changed

Lines changed: 18 additions & 10 deletions

File tree

web/src/lib/version.ts

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,17 @@ export const APP_VERSION = "0.2.4";
66

77
const GITHUB_REPO = "K-Dense-AI/k-dense-byok";
88
const CACHE_KEY = "kdense-update-check";
9+
const CACHE_TTL_MS = 60 * 60 * 1000; // re-check at most once per hour
910

1011
interface UpdateCheckResult {
1112
updateAvailable: boolean;
1213
latestVersion: string | null;
1314
}
1415

16+
interface CachedCheck extends UpdateCheckResult {
17+
ts: number;
18+
}
19+
1520
function compareSemver(current: string, latest: string): boolean {
1621
const parse = (v: string) => v.split(".").map(Number);
1722
const [cMajor, cMinor, cPatch] = parse(current);
@@ -28,14 +33,17 @@ export function useUpdateCheck(): UpdateCheckResult {
2833
});
2934

3035
useEffect(() => {
31-
const cached = sessionStorage.getItem(CACHE_KEY);
32-
if (cached) {
33-
try {
34-
setResult(JSON.parse(cached));
35-
return;
36-
} catch {
37-
sessionStorage.removeItem(CACHE_KEY);
36+
try {
37+
const raw = localStorage.getItem(CACHE_KEY);
38+
if (raw) {
39+
const cached: CachedCheck = JSON.parse(raw);
40+
if (Date.now() - cached.ts < CACHE_TTL_MS) {
41+
setResult({ updateAvailable: cached.updateAvailable, latestVersion: cached.latestVersion });
42+
return;
43+
}
3844
}
45+
} catch {
46+
localStorage.removeItem(CACHE_KEY);
3947
}
4048

4149
fetch(`https://api.github.com/repos/${GITHUB_REPO}/releases/latest`)
@@ -48,9 +56,9 @@ export function useUpdateCheck(): UpdateCheckResult {
4856
const latestVersion = tag.replace(/^v/, "");
4957
const updateAvailable =
5058
latestVersion.length > 0 && compareSemver(APP_VERSION, latestVersion);
51-
const value = { updateAvailable, latestVersion };
52-
sessionStorage.setItem(CACHE_KEY, JSON.stringify(value));
53-
setResult(value);
59+
const value: CachedCheck = { updateAvailable, latestVersion, ts: Date.now() };
60+
localStorage.setItem(CACHE_KEY, JSON.stringify(value));
61+
setResult({ updateAvailable, latestVersion });
5462
})
5563
.catch(() => {
5664
// Network error or rate limit — silently ignore

0 commit comments

Comments
 (0)