mirror of
https://github.com/fosrl/pangolin.git
synced 2026-02-26 14:56:39 +00:00
Fix #1321
This commit is contained in:
@@ -21,11 +21,22 @@ async function getLatestNewtVersion(): Promise<string | null> {
|
|||||||
return cachedVersion;
|
return cachedVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const controller = new AbortController();
|
||||||
|
const timeoutId = setTimeout(() => controller.abort(), 1500); // Reduced timeout to 1.5 seconds
|
||||||
|
|
||||||
const response = await fetch(
|
const response = await fetch(
|
||||||
"https://api.github.com/repos/fosrl/newt/tags"
|
"https://api.github.com/repos/fosrl/newt/tags",
|
||||||
|
{
|
||||||
|
signal: controller.signal
|
||||||
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
clearTimeout(timeoutId);
|
||||||
|
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
logger.warn("Failed to fetch latest Newt version from GitHub");
|
logger.warn(
|
||||||
|
`Failed to fetch latest Newt version from GitHub: ${response.status} ${response.statusText}`
|
||||||
|
);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -40,8 +51,21 @@ async function getLatestNewtVersion(): Promise<string | null> {
|
|||||||
newtVersionCache.set("latestNewtVersion", latestVersion);
|
newtVersionCache.set("latestNewtVersion", latestVersion);
|
||||||
|
|
||||||
return latestVersion;
|
return latestVersion;
|
||||||
} catch (error) {
|
} catch (error: any) {
|
||||||
logger.error("Error fetching latest Newt version:", error);
|
if (error.name === "AbortError") {
|
||||||
|
logger.warn(
|
||||||
|
"Request to fetch latest Newt version timed out (1.5s)"
|
||||||
|
);
|
||||||
|
} else if (error.cause?.code === "UND_ERR_CONNECT_TIMEOUT") {
|
||||||
|
logger.warn(
|
||||||
|
"Connection timeout while fetching latest Newt version"
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
logger.warn(
|
||||||
|
"Error fetching latest Newt version:",
|
||||||
|
error.message || error
|
||||||
|
);
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -190,33 +214,48 @@ export async function listSites(
|
|||||||
const totalCountResult = await countQuery;
|
const totalCountResult = await countQuery;
|
||||||
const totalCount = totalCountResult[0].count;
|
const totalCount = totalCountResult[0].count;
|
||||||
|
|
||||||
const latestNewtVersion = await getLatestNewtVersion();
|
// Get latest version asynchronously without blocking the response
|
||||||
|
const latestNewtVersionPromise = getLatestNewtVersion();
|
||||||
|
|
||||||
const sitesWithUpdates: SiteWithUpdateAvailable[] = sitesList.map(
|
const sitesWithUpdates: SiteWithUpdateAvailable[] = sitesList.map(
|
||||||
(site) => {
|
(site) => {
|
||||||
const siteWithUpdate: SiteWithUpdateAvailable = { ...site };
|
const siteWithUpdate: SiteWithUpdateAvailable = { ...site };
|
||||||
|
// Initially set to false, will be updated if version check succeeds
|
||||||
if (
|
siteWithUpdate.newtUpdateAvailable = false;
|
||||||
site.type === "newt" &&
|
|
||||||
site.newtVersion &&
|
|
||||||
latestNewtVersion
|
|
||||||
) {
|
|
||||||
try {
|
|
||||||
siteWithUpdate.newtUpdateAvailable = semver.lt(
|
|
||||||
site.newtVersion,
|
|
||||||
latestNewtVersion
|
|
||||||
);
|
|
||||||
} catch (error) {
|
|
||||||
siteWithUpdate.newtUpdateAvailable = false;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
siteWithUpdate.newtUpdateAvailable = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return siteWithUpdate;
|
return siteWithUpdate;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Try to get the latest version, but don't block if it fails
|
||||||
|
try {
|
||||||
|
const latestNewtVersion = await latestNewtVersionPromise;
|
||||||
|
|
||||||
|
if (latestNewtVersion) {
|
||||||
|
sitesWithUpdates.forEach((site) => {
|
||||||
|
if (
|
||||||
|
site.type === "newt" &&
|
||||||
|
site.newtVersion &&
|
||||||
|
latestNewtVersion
|
||||||
|
) {
|
||||||
|
try {
|
||||||
|
site.newtUpdateAvailable = semver.lt(
|
||||||
|
site.newtVersion,
|
||||||
|
latestNewtVersion
|
||||||
|
);
|
||||||
|
} catch (error) {
|
||||||
|
site.newtUpdateAvailable = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
// Log the error but don't let it block the response
|
||||||
|
logger.warn(
|
||||||
|
"Failed to check for Newt updates, continuing without update info:",
|
||||||
|
error
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return response<ListSitesResponse>(res, {
|
return response<ListSitesResponse>(res, {
|
||||||
data: {
|
data: {
|
||||||
sites: sitesWithUpdates,
|
sites: sitesWithUpdates,
|
||||||
|
|||||||
@@ -331,9 +331,16 @@ export default function Page() {
|
|||||||
let olmVersion = "latest";
|
let olmVersion = "latest";
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
const controller = new AbortController();
|
||||||
|
const timeoutId = setTimeout(() => controller.abort(), 3000);
|
||||||
|
|
||||||
const response = await fetch(
|
const response = await fetch(
|
||||||
`https://api.github.com/repos/fosrl/olm/releases/latest`
|
`https://api.github.com/repos/fosrl/olm/releases/latest`,
|
||||||
|
{ signal: controller.signal }
|
||||||
);
|
);
|
||||||
|
|
||||||
|
clearTimeout(timeoutId);
|
||||||
|
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
t("olmErrorFetchReleases", {
|
t("olmErrorFetchReleases", {
|
||||||
@@ -345,14 +352,18 @@ export default function Page() {
|
|||||||
const latestVersion = data.tag_name;
|
const latestVersion = data.tag_name;
|
||||||
olmVersion = latestVersion;
|
olmVersion = latestVersion;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(
|
if (error instanceof Error && error.name === 'AbortError') {
|
||||||
t("olmErrorFetchLatest", {
|
console.error(t("olmErrorFetchTimeout"));
|
||||||
err:
|
} else {
|
||||||
error instanceof Error
|
console.error(
|
||||||
? error.message
|
t("olmErrorFetchLatest", {
|
||||||
: String(error)
|
err:
|
||||||
})
|
error instanceof Error
|
||||||
);
|
? error.message
|
||||||
|
: String(error)
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
await api
|
await api
|
||||||
|
|||||||
@@ -488,9 +488,16 @@ WantedBy=default.target`
|
|||||||
let currentNewtVersion = "latest";
|
let currentNewtVersion = "latest";
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
const controller = new AbortController();
|
||||||
|
const timeoutId = setTimeout(() => controller.abort(), 3000);
|
||||||
|
|
||||||
const response = await fetch(
|
const response = await fetch(
|
||||||
`https://api.github.com/repos/fosrl/newt/releases/latest`
|
`https://api.github.com/repos/fosrl/newt/releases/latest`,
|
||||||
|
{ signal: controller.signal }
|
||||||
);
|
);
|
||||||
|
|
||||||
|
clearTimeout(timeoutId);
|
||||||
|
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
t("newtErrorFetchReleases", {
|
t("newtErrorFetchReleases", {
|
||||||
@@ -503,14 +510,18 @@ WantedBy=default.target`
|
|||||||
currentNewtVersion = latestVersion;
|
currentNewtVersion = latestVersion;
|
||||||
setNewtVersion(latestVersion);
|
setNewtVersion(latestVersion);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(
|
if (error instanceof Error && error.name === 'AbortError') {
|
||||||
t("newtErrorFetchLatest", {
|
console.error(t("newtErrorFetchTimeout"));
|
||||||
err:
|
} else {
|
||||||
error instanceof Error
|
console.error(
|
||||||
? error.message
|
t("newtErrorFetchLatest", {
|
||||||
: String(error)
|
err:
|
||||||
})
|
error instanceof Error
|
||||||
);
|
? error.message
|
||||||
|
: String(error)
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const generatedKeypair = generateKeypair();
|
const generatedKeypair = generateKeypair();
|
||||||
|
|||||||
Reference in New Issue
Block a user