diff --git a/src/domains/services/archiver.service.ts b/src/domains/services/archiver.service.ts index 635d1a218..52b9b4a5d 100644 --- a/src/domains/services/archiver.service.ts +++ b/src/domains/services/archiver.service.ts @@ -27,15 +27,18 @@ export class ArchiverService { public appendAsyncAPIDocument( archive: Archiver, - asyncapi: string, + asyncapi: string | object, fileName = 'asyncapi', ) { - asyncapi = JSON.stringify(asyncapi); - const language = retrieveLangauge(asyncapi); + const content = + typeof asyncapi === 'string' + ? asyncapi + : JSON.stringify(asyncapi, null, 2); + const language = retrieveLangauge(content); if (language === 'yaml') { - archive.append(asyncapi, { name: `${fileName}.yml` }); + archive.append(content, { name: `${fileName}.yml` }); } else { - archive.append(asyncapi, { name: `${fileName}.json` }); + archive.append(content, { name: `${fileName}.json` }); } } diff --git a/src/utils/generate/registry.ts b/src/utils/generate/registry.ts index 16fdda2e5..d559986e9 100644 --- a/src/utils/generate/registry.ts +++ b/src/utils/generate/registry.ts @@ -8,12 +8,25 @@ export function registryURLParser(input?: string) { export async function registryValidation(registryUrl?: string, registryAuth?: string, registryToken?: string) { if (!registryUrl) { return; } + const TIMEOUT_MS = 5000; + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), TIMEOUT_MS); + try { - const response = await fetch(registryUrl as string); + const response = await fetch(registryUrl as string, { + method: 'HEAD', + signal: controller.signal, + }); + clearTimeout(timeoutId); + 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 (err: any) { + clearTimeout(timeoutId); + if (err.name === 'AbortError') { + throw new Error(`Registry URL timed out after ${TIMEOUT_MS}ms: ${registryUrl}`); + } throw new Error(`Can't fetch registryURL: ${registryUrl}`); } }