diff --git a/.changeset/warm-swans-peel.md b/.changeset/warm-swans-peel.md new file mode 100644 index 000000000..297ce7b5e --- /dev/null +++ b/.changeset/warm-swans-peel.md @@ -0,0 +1,5 @@ +--- +"@asyncapi/cli": patch +--- + +fix: add 10s timeout to registry validation to prevent indefinite hang diff --git a/src/utils/generate/registry.ts b/src/utils/generate/registry.ts index 16fdda2e5..d526c9dc8 100644 --- a/src/utils/generate/registry.ts +++ b/src/utils/generate/registry.ts @@ -9,11 +9,17 @@ export function registryURLParser(input?: string) { export async function registryValidation(registryUrl?: string, registryAuth?: string, registryToken?: string) { if (!registryUrl) { return; } try { - const response = await fetch(registryUrl as string); + const controller = new AbortController(); + const timeout = setTimeout(() => controller.abort(), 10000); + const response = await fetch(registryUrl as string, { signal: controller.signal }); + clearTimeout(timeout); if (response.status === 401 && !registryAuth && !registryToken) { throw new Error('You Need to pass either registryAuth in username:password encoded in Base64 or need to pass registryToken'); } - } catch { + } catch (error: any) { + if (error.name === 'AbortError') { + throw new Error(`Registry URL timed out after 10s: ${registryUrl}. Check the URL or network connectivity.`); + } throw new Error(`Can't fetch registryURL: ${registryUrl}`); } }