From aa6dc67015854db79583c1486d3fbd4c3a44487b Mon Sep 17 00:00:00 2001 From: Owen Date: Mon, 27 Jul 2026 10:01:12 -0400 Subject: [PATCH] Pull the version on the info page and use api --- .../sites/[niceId]/credentials/page.tsx | 9 ++++ .../[orgId]/settings/sites/create/page.tsx | 48 ++++--------------- 2 files changed, 17 insertions(+), 40 deletions(-) diff --git a/src/app/[orgId]/settings/sites/[niceId]/credentials/page.tsx b/src/app/[orgId]/settings/sites/[niceId]/credentials/page.tsx index d4463cb7c..41b8f62eb 100644 --- a/src/app/[orgId]/settings/sites/[niceId]/credentials/page.tsx +++ b/src/app/[orgId]/settings/sites/[niceId]/credentials/page.tsx @@ -40,6 +40,8 @@ import { NewtSiteInstallCommands } from "@app/components/newt-install-commands"; import { usePaidStatus } from "@app/hooks/usePaidStatus"; import { tierMatrix } from "@server/lib/billing/tierMatrix"; import type { AxiosResponse } from "axios"; +import { useQuery } from "@tanstack/react-query"; +import { productUpdatesQueries } from "@app/lib/queries"; export default function CredentialsPage() { const { env } = useEnvContext(); @@ -67,6 +69,12 @@ export default function CredentialsPage() { const { isPaidUser } = usePaidStatus(); + const { data: latestVersions } = useQuery( + productUpdatesQueries.latestVersion(true) + ); + const newtVersion = + latestVersions?.data?.newt?.latestVersion ?? "latest"; + // Fetch site defaults for wireguard sites to show in obfuscated config useEffect(() => { const fetchSiteDefaults = async () => { @@ -302,6 +310,7 @@ export default function CredentialsPage() { id={displayNewtId ?? "**********"} secret={displaySecret ?? "**************"} endpoint={env.app.dashboardUrl} + version={newtVersion} /> )} diff --git a/src/app/[orgId]/settings/sites/create/page.tsx b/src/app/[orgId]/settings/sites/create/page.tsx index bf74b91d7..27d50bc8b 100644 --- a/src/app/[orgId]/settings/sites/create/page.tsx +++ b/src/app/[orgId]/settings/sites/create/page.tsx @@ -56,6 +56,8 @@ import { QRCodeCanvas } from "qrcode.react"; import { useTranslations } from "next-intl"; import { build } from "@server/build"; import { NewtSiteInstallCommands } from "@app/components/newt-install-commands"; +import { useQuery } from "@tanstack/react-query"; +import { productUpdatesQueries } from "@app/lib/queries"; type SiteType = "newt" | "wireguard" | "local"; @@ -189,9 +191,14 @@ export default function Page() { const [wgConfig, setWgConfig] = useState(""); const [createLoading, setCreateLoading] = useState(false); - const [newtVersion, setNewtVersion] = useState("latest"); const [showAdvancedSettings, setShowAdvancedSettings] = useState(false); + const { data: latestVersions } = useQuery( + productUpdatesQueries.latestVersion(true) + ); + const newtVersion = + latestVersions?.data?.newt?.latestVersion ?? "latest"; + const [siteDefaults, setSiteDefaults] = useState(null); @@ -302,45 +309,6 @@ export default function Page() { const load = async () => { setLoadingPage(true); - let currentNewtVersion = "latest"; - - try { - const controller = new AbortController(); - const timeoutId = setTimeout(() => controller.abort(), 3000); - - const response = await fetch( - `https://api.github.com/repos/fosrl/newt/releases/latest`, - { signal: controller.signal } - ); - - clearTimeout(timeoutId); - - if (!response.ok) { - throw new Error( - t("newtErrorFetchReleases", { - err: response.statusText - }) - ); - } - const data = await response.json(); - const latestVersion = data.tag_name; - currentNewtVersion = latestVersion; - setNewtVersion(latestVersion); - } catch (error) { - if (error instanceof Error && error.name === "AbortError") { - console.error(t("newtErrorFetchTimeout")); - } else { - console.error( - t("newtErrorFetchLatest", { - err: - error instanceof Error - ? error.message - : String(error) - }) - ); - } - } - const generatedKeypair = generateKeypair(); const privateKey = generatedKeypair.privateKey;