frontend: print sdk version
rabbitprincess committed
Mar 22, 2026 at 00:10 UTC
496201d55a1d8e819e0acd8f01822a6c06405888
3 files changed
+22
-23
frontend/src/components/ServerListView.tsx
+18
-21
@@ -27,11 +27,11 @@ type ListServer = ClientServer | AdminServer;
27
interface OfficialRegistryRelay {
28
url: string;
29
status: "online" | "unreachable";
30
- version?: string;
30
+ releaseVersion?: string;
31
}
32
33
interface RelayDomainResponse {
34
- version?: string;
34
+ release_version?: string;
35
}
36
37
interface OfficialRegistryDocument {
@@ -52,10 +52,17 @@ async function loadOfficialRegistryRelay(
52
return {
53
url: relayURL,
54
status: "online",
55
- version: typeof domain?.version === "string" ? domain.version.trim() : "",
55
+ releaseVersion:
56
+ typeof domain?.release_version === "string"
57
+ ? domain.release_version.trim()
58
+ : "",
59
};
60
} catch {
58
- return { url: relayURL, status: "unreachable", version: "" };
61
+ return {
62
+ url: relayURL,
63
+ status: "unreachable",
64
+ releaseVersion: "",
65
+ };
66
}
67
}
68
@@ -647,15 +654,6 @@ export function ServerListView({
654
) : officialRegistryAvailable ? (
655
<div className="mt-6 grid gap-3 md:grid-cols-2 xl:grid-cols-3">
656
{officialRegistryRelays.map((relay) => {
650
- const statusLabel = {
651
- online: "ONLINE",
652
- unreachable: "OFFLINE",
653
- }[relay.status];
654
- const statusClass = {
655
- online: "bg-primary/12 text-primary",
656
- unreachable: "bg-secondary text-text-muted",
657
- }[relay.status];
658
-
657
return (
658
<div
659
key={relay.url}
@@ -670,16 +668,15 @@ export function ServerListView({
668
{relay.url}
669
</a>
670
<div className="flex shrink-0 flex-wrap items-center gap-2">
673
- <span
674
- className={`rounded-full px-2.5 py-1 text-[10px] font-semibold uppercase tracking-[0.18em] ${statusClass}`}
675
- >
676
- {statusLabel}
677
- </span>
678
- {relay.version && (
671
+ {relay.status === "unreachable" ? (
672
+ <span className="rounded-full bg-background px-2.5 py-1 text-[10px] font-semibold uppercase tracking-[0.18em] text-text-muted ring-1 ring-border">
673
+ Offline
674
+ </span>
675
+ ) : relay.releaseVersion ? (
676
<span className="rounded-full bg-background px-2.5 py-1 text-[10px] font-semibold uppercase tracking-[0.18em] text-text-muted ring-1 ring-border">
680
- SDK {relay.version}
677
+ Release {relay.releaseVersion}
678
</span>
682
- )}
679
+ ) : null}
680
</div>
681
</div>
682
);
portal/api_server.go
+2
-1
@@ -164,7 +164,8 @@ func (s *Server) handleDomain(w http.ResponseWriter, r *http.Request) {
164
}
165
166
utils.WriteAPIData(w, http.StatusOK, types.DomainResponse{
167
- Version: types.SDKProtocolVersion,
167
+ SDKVersion: types.SDKProtocolVersion,
168
+ ReleaseVersion: types.ReleaseVersion,
169
})
170
}
171
types/api.go
+2
-1
@@ -115,7 +115,8 @@ type UnregisterRequest struct {
115
}
116
117
type DomainResponse struct {
118
- Version string `json:"version"`
118
+ SDKVersion string `json:"sdk_version"`
119
+ ReleaseVersion string `json:"release_version"`
120
}
121
122
type TunnelStatusResponse struct {