'use client'; import { useState, useEffect } from 'react'; import Link from 'next/link'; interface Admin { handle: string; displayName: string | null; avatarUrl: string | null; } export function RightSidebar() { const fallbackDescription = process.env.NEXT_PUBLIC_NODE_DESCRIPTION || 'A swarm social network node.'; const [nodeInfo, setNodeInfo] = useState({ name: process.env.NEXT_PUBLIC_NODE_NAME || 'Synapsis Node', description: fallbackDescription, longDescription: '', rules: '', bannerUrl: '', admins: [] as Admin[], }); const [version, setVersion] = useState<{ version: string; commit: string | null; buildDate: string | null; githubUrl: string | null; } | null>(null); const [loading, setLoading] = useState(true); useEffect(() => { fetch('/api/node', { cache: 'no-store' }) .then(res => res.json()) .then(data => { setNodeInfo(prev => ({ ...prev, ...data, name: data?.name ?? prev.name, description: data?.description ?? prev.description, longDescription: data?.longDescription ?? prev.longDescription, rules: data?.rules ?? prev.rules, bannerUrl: data?.bannerUrl ?? prev.bannerUrl, admins: data?.admins ?? [], })); }) .catch(() => { }) .finally(() => setLoading(false)); // Fetch version info fetch('/api/version') .then(res => res.json()) .then(data => setVersion(data)) .catch(() => setVersion({ version: 'unknown', commit: null, buildDate: null, githubUrl: null })); }, []); if (loading) { return ( ); } return ( ); }