From b6b31cb93ff3324ae8e995e4e52dab5077ed538b Mon Sep 17 00:00:00 2001 From: mleku Date: Thu, 25 Dec 2025 10:08:50 +0100 Subject: [PATCH] Add version display to web UI sidebar (v0.36.18) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add version footer to sidebar bottom-left with Gitea icon link - Fetch relay version from NIP-11 relay info document - Link opens https://next.orly.dev in new tab - Responsive design hides version text on medium screens Files modified: - app/web/src/api.js: Add fetchRelayInfo() function - app/web/src/Sidebar.svelte: Add version display with Gitea SVG icon - app/web/src/App.svelte: Add relayVersion state and fetch on init - pkg/version/version: Bump to v0.36.18 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- app/web/src/App.svelte | 18 ++++++++++++ app/web/src/Sidebar.svelte | 56 ++++++++++++++++++++++++++++++++++++++ app/web/src/api.js | 22 +++++++++++++++ pkg/version/version | 2 +- 4 files changed, 97 insertions(+), 1 deletion(-) diff --git a/app/web/src/App.svelte b/app/web/src/App.svelte index 4d83087..61b573b 100644 --- a/app/web/src/App.svelte +++ b/app/web/src/App.svelte @@ -116,6 +116,9 @@ // ACL mode let aclMode = ""; + // Relay version + let relayVersion = ""; + // Compose tab state let composeEventJson = ""; let composePublishError = ""; @@ -859,6 +862,9 @@ // Load policy configuration loadPolicyConfig(); + + // Load relay version + fetchRelayVersion(); } function savePersistentState() { @@ -2020,6 +2026,17 @@ } } + async function fetchRelayVersion() { + try { + const info = await api.fetchRelayInfo(); + if (info && info.version) { + relayVersion = info.version; + } + } catch (error) { + console.error("Error fetching relay version:", error); + } + } + // Export functionality async function exportEvents(pubkeys = []) { // Skip login check when ACL is "none" (open relay mode) @@ -2737,6 +2754,7 @@ {isDarkTheme} {tabs} {selectedTab} + version={relayVersion} on:selectTab={(e) => selectTab(e.detail)} on:closeSearchTab={(e) => closeSearchTab(e.detail)} /> diff --git a/app/web/src/Sidebar.svelte b/app/web/src/Sidebar.svelte index 52d89a0..2fdcbfc 100644 --- a/app/web/src/Sidebar.svelte +++ b/app/web/src/Sidebar.svelte @@ -2,6 +2,7 @@ export let isDarkTheme = false; export let tabs = []; export let selectedTab = ""; + export let version = ""; import { createEventDispatcher } from "svelte"; const dispatch = createEventDispatcher(); @@ -41,6 +42,15 @@ {/each} + {#if version} + + + + + + v{version} + + {/if} diff --git a/app/web/src/api.js b/app/web/src/api.js index 1638c90..5281cb5 100644 --- a/app/web/src/api.js +++ b/app/web/src/api.js @@ -319,6 +319,28 @@ export async function fetchPolicyFollows(signer, pubkey) { return data.follows || []; } +// ==================== Relay Info API ==================== + +/** + * Fetch relay info document (NIP-11) + * @returns {Promise} Relay info including version + */ +export async function fetchRelayInfo() { + try { + const response = await fetch(window.location.origin, { + headers: { + Accept: "application/nostr+json", + }, + }); + if (response.ok) { + return await response.json(); + } + } catch (error) { + console.error("Error fetching relay info:", error); + } + return null; +} + // ==================== Export/Import API ==================== /** diff --git a/pkg/version/version b/pkg/version/version index 7b4c69b..7bcc525 100644 --- a/pkg/version/version +++ b/pkg/version/version @@ -1 +1 @@ -v0.36.17 +v0.36.18