diff --git a/package.json b/package.json
index bd07311..8750cde 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "hypermind",
- "version": "0.12.2",
+ "version": "0.13.0",
"description": "A decentralized P2P counter of active deployments",
"main": "server.js",
"scripts": {
diff --git a/public/index.html b/public/index.html
index 53d0fec..34b52d4 100644
--- a/public/index.html
+++ b/public/index.html
@@ -104,6 +104,10 @@
>{{FULL_ID}}
+
+ Version
+ {{VERSION}}
+
Heartbeats Received
0
diff --git a/public/js/version-checker.js b/public/js/version-checker.js
index 9f8dec6..c8e48e0 100644
--- a/public/js/version-checker.js
+++ b/public/js/version-checker.js
@@ -2,78 +2,91 @@ const CACHE_KEY = "hypermind-version-check";
const CACHE_DURATION = 86400000;
const getCurrentVersion = () => {
- return document.body.dataset.version || "no-version";
+ return document.body.dataset.version || "no-version";
+};
+
+const isNewer = (latest, current) => {
+ if (current === "no-version") return true;
+
+ const l = latest.split(".").map(Number);
+ const c = current.split(".").map(Number);
+
+ for (let i = 0; i < 3; i++) {
+ if (l[i] > (c[i] || 0)) return true;
+ if (l[i] < (c[i] || 0)) return false;
+ }
+ return false;
};
const checkForNewVersion = async () => {
- try {
- const cached = localStorage.getItem(CACHE_KEY);
- if (cached) {
- try {
- const parsedCache = JSON.parse(cached);
- const now = Date.now();
+ try {
+ const cached = localStorage.getItem(CACHE_KEY);
+ if (cached) {
+ try {
+ const parsedCache = JSON.parse(cached);
+ const now = Date.now();
- if (now - parsedCache.timestamp < CACHE_DURATION) {
- if (parsedCache.data) {
- showVersionNotification(parsedCache.data);
- }
- return;
- }
- } catch (e) {
- localStorage.removeItem(CACHE_KEY);
- }
+ if (now - parsedCache.timestamp < CACHE_DURATION) {
+ if (parsedCache.data) {
+ showVersionNotification(parsedCache.data);
+ }
+ return;
}
-
- const response = await fetch("/api/github/latest-release");
- if (!response.ok) return;
-
- const release = await response.json();
-
- const cacheData = {
- data: release,
- timestamp: Date.now(),
- };
- localStorage.setItem(CACHE_KEY, JSON.stringify(cacheData));
-
- showVersionNotification(release);
- } catch (error) {
- console.error("Error checking for new version:", error);
+ } catch (e) {
+ localStorage.removeItem(CACHE_KEY);
+ }
}
+
+ const response = await fetch("/api/github/latest-release");
+ if (!response.ok) return;
+
+ const release = await response.json();
+
+ const cacheData = {
+ data: release,
+ timestamp: Date.now(),
+ };
+ localStorage.setItem(CACHE_KEY, JSON.stringify(cacheData));
+
+ showVersionNotification(release);
+ } catch (error) {
+ console.error("Error checking for new version:", error);
+ }
};
const showVersionNotification = (release) => {
- if (!release || !release.tag_name) return;
+ if (!release || !release.tag_name) return;
- const latestVersion = release.tag_name.replace(/^v/, "");
- const currentVersion = getCurrentVersion();
+ const latestVersion = release.tag_name.replace(/^v/, "");
+ const currentVersion = getCurrentVersion();
- if (latestVersion === currentVersion) return;
+ if (!isNewer(latestVersion, currentVersion)) return;
- const dismissedKey = `hypermind-version-dismissed-${release.tag_name}`;
- if (localStorage.getItem(dismissedKey) === "true") return;
+ const dismissedKey = `hypermind-version-dismissed-${release.tag_name}`;
+ if (localStorage.getItem(dismissedKey) === "true") return;
- const banner = document.getElementById("version-notification");
- if (!banner) return;
+ const banner = document.getElementById("version-notification");
+ if (!banner) return;
- const versionText = banner.querySelector(".version-text");
- const updateLink = banner.querySelector(".update-link");
- const dismissBtn = banner.querySelector(".dismiss-btn");
+ const versionText = banner.querySelector(".version-text");
+ const updateLink = banner.querySelector(".update-link");
+ const dismissBtn = banner.querySelector(".dismiss-btn");
- versionText.textContent = `New version ${release.tag_name} available!`;
- updateLink.href = release.html_url;
+ versionText.textContent = `New version ${release.tag_name} available!`;
+ updateLink.href = release.html_url;
- dismissBtn.onclick = () => {
- banner.classList.remove("active");
- localStorage.setItem(dismissedKey, "true");
- };
+ dismissBtn.onclick = () => {
+ banner.classList.remove("active");
+ localStorage.setItem(dismissedKey, "true");
+ };
- setTimeout(() => {
- banner.classList.add("active");
- }, 1000);
+ setTimeout(() => {
+ banner.classList.add("active");
+ }, 1000);
};
if (document.readyState === "loading") {
- document.addEventListener("DOMContentLoaded", checkForNewVersion);
+ document.addEventListener("DOMContentLoaded", checkForNewVersion);
} else {
- checkForNewVersion();
+ checkForNewVersion();
}