From 7d4eeedc624fc3efa0120fc6975cbc03af9f72d1 Mon Sep 17 00:00:00 2001 From: Ron Cohen Date: Wed, 17 Sep 2025 14:14:14 +0200 Subject: [PATCH 1/2] fix: version check can cause failures --- packages/cli/index.ts | 22 +++++++-------- packages/cli/utils/version.ts | 50 +++++++++++++++++++---------------- 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/packages/cli/index.ts b/packages/cli/index.ts index bbc22a46..1646d371 100755 --- a/packages/cli/index.ts +++ b/packages/cli/index.ts @@ -91,19 +91,15 @@ async function main() { } } - try { - const { latestVersion, currentVersion, isNewerAvailable } = - await cliVersionCheckPromise; - - if (isNewerAvailable) { - console.info( - `A new version of the CLI is available: ${chalk.yellow( - currentVersion, - )} -> ${chalk.green(latestVersion)}. Update to ensure you have the latest features and bug fixes.`, - ); - } - } catch { - // Ignore errors + const { latestVersion, currentVersion, isNewerAvailable } = + await cliVersionCheckPromise; + + if (isNewerAvailable) { + console.info( + `A new version of the CLI is available: ${chalk.yellow( + currentVersion, + )} -> ${chalk.green(latestVersion)}. Update to ensure you have the latest features and bug fixes.`, + ); } if (debug) { diff --git a/packages/cli/utils/version.ts b/packages/cli/utils/version.ts index d29cf22d..96641220 100644 --- a/packages/cli/utils/version.ts +++ b/packages/cli/utils/version.ts @@ -25,37 +25,41 @@ export async function current() { } async function getLatestVersionFromNpm(packageName: string): Promise { - try { - const response = await fetch(`https://registry.npmjs.org/${packageName}`, { - signal: AbortSignal.timeout(5000), - }); + // await new Promise((resolve) => setTimeout(resolve, 1000)); + throw new Error(`Failed to fetch latest version from npm: ${packageName}`); + // try { + // const response = await fetch(`https://registry.npmjs.org/${packageName}`, { + // signal: AbortSignal.timeout(5000), + // }); - if (!response.ok) { - throw new Error( - `Failed to fetch package info: ${response.status} ${response.statusText}`, - ); - } + // if (!response.ok) { + // throw new Error( + // `Failed to fetch package info: ${response.status} ${response.statusText}`, + // ); + // } - const data: { - "dist-tags": { - latest: string; - }; - } = await response.json(); + // const data: { + // "dist-tags": { + // latest: string; + // }; + // } = await response.json(); - return data["dist-tags"].latest; - } catch (error) { - throw new Error( - `Failed to fetch latest version from npm: ${error instanceof Error ? error.message : "Unknown error"}`, - ); - } + // return data["dist-tags"].latest; + // } catch (error) { + // throw new Error( + // `Failed to fetch latest version from npm: ${error instanceof Error ? error.message : "Unknown error"}`, + // ); + // } } export async function checkLatest() { const { version: currentVersion, name: packageName } = await current(); - const latestVersion = await getLatestVersionFromNpm(packageName); - const isNewerAvailable = gt(latestVersion, currentVersion); - + const latestVersion = await getLatestVersionFromNpm(packageName).catch( + () => null, + ); + const isNewerAvailable = + latestVersion !== null && gt(latestVersion, currentVersion); return { currentVersion, latestVersion, From a1e27b01358d9c35b28395dedc21685092cabcef Mon Sep 17 00:00:00 2001 From: Ron Cohen Date: Thu, 18 Sep 2025 11:54:27 +0200 Subject: [PATCH 2/2] clean up --- packages/cli/index.ts | 8 ++++- packages/cli/utils/version.ts | 55 ++++++++++++++++------------------- 2 files changed, 32 insertions(+), 31 deletions(-) diff --git a/packages/cli/index.ts b/packages/cli/index.ts index 1646d371..30b2cd59 100755 --- a/packages/cli/index.ts +++ b/packages/cli/index.ts @@ -35,7 +35,13 @@ type Options = { async function main() { // Start a version check in the background - const cliVersionCheckPromise = checkLatestVersion(); + // unhandled promise rejection can happen even without the `await` + // so we need a `catch` here. + const cliVersionCheckPromise = checkLatestVersion().catch(() => ({ + latestVersion: "unknown", + currentVersion: "unknown", + isNewerAvailable: false, + })); // Must load tokens and config before anything else await authStore.initialize(); diff --git a/packages/cli/utils/version.ts b/packages/cli/utils/version.ts index 96641220..116cf48b 100644 --- a/packages/cli/utils/version.ts +++ b/packages/cli/utils/version.ts @@ -25,41 +25,36 @@ export async function current() { } async function getLatestVersionFromNpm(packageName: string): Promise { - // await new Promise((resolve) => setTimeout(resolve, 1000)); - throw new Error(`Failed to fetch latest version from npm: ${packageName}`); - // try { - // const response = await fetch(`https://registry.npmjs.org/${packageName}`, { - // signal: AbortSignal.timeout(5000), - // }); - - // if (!response.ok) { - // throw new Error( - // `Failed to fetch package info: ${response.status} ${response.statusText}`, - // ); - // } - - // const data: { - // "dist-tags": { - // latest: string; - // }; - // } = await response.json(); - - // return data["dist-tags"].latest; - // } catch (error) { - // throw new Error( - // `Failed to fetch latest version from npm: ${error instanceof Error ? error.message : "Unknown error"}`, - // ); - // } + try { + const response = await fetch(`https://registry.npmjs.org/${packageName}`, { + signal: AbortSignal.timeout(5000), + }); + + if (!response.ok) { + throw new Error( + `Failed to fetch package info: ${response.status} ${response.statusText}`, + ); + } + + const data: { + "dist-tags": { + latest: string; + }; + } = await response.json(); + + return data["dist-tags"].latest; + } catch (error) { + throw new Error( + `Failed to fetch latest version from npm: ${error instanceof Error ? error.message : "Unknown error"}`, + ); + } } export async function checkLatest() { const { version: currentVersion, name: packageName } = await current(); - const latestVersion = await getLatestVersionFromNpm(packageName).catch( - () => null, - ); - const isNewerAvailable = - latestVersion !== null && gt(latestVersion, currentVersion); + const latestVersion = await getLatestVersionFromNpm(packageName); + const isNewerAvailable = gt(latestVersion, currentVersion); return { currentVersion, latestVersion,