From b79029435453d0c153dfc9d373c1282f3aed9af8 Mon Sep 17 00:00:00 2001 From: Lubos Date: Mon, 3 Feb 2025 00:58:56 +0000 Subject: [PATCH 1/2] fix: allow passing timeout value to sendRequest --- lib/resolvers/url.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/resolvers/url.ts b/lib/resolvers/url.ts index 8122b644..007b8a41 100644 --- a/lib/resolvers/url.ts +++ b/lib/resolvers/url.ts @@ -6,10 +6,12 @@ import type { FileInfo } from "../types/index.js"; export const sendRequest = async ({ init, redirects = [], + timeout = 60_000, url, }: { init?: RequestInit; redirects?: string[]; + timeout?: number; url: URL | string; }): Promise<{ response: Response; @@ -21,7 +23,7 @@ export const sendRequest = async ({ const controller = new AbortController(); const timeoutId = setTimeout(() => { controller.abort(); - }, 60_000); + }, timeout); const response = await fetch(url, { signal: controller.signal, ...init, @@ -29,6 +31,11 @@ export const sendRequest = async ({ clearTimeout(timeoutId); if (response.status >= 400) { + // gracefully handle HEAD method not allowed + if (response.status === 405 && init?.method === 'HEAD') { + return { response }; + } + throw ono({ status: response.status }, `HTTP ERROR ${response.status}`); } @@ -49,6 +56,7 @@ export const sendRequest = async ({ return sendRequest({ init, redirects, + timeout, url: resolve(url.href, response.headers.location as string), }); } From e5c19c0ed027e8734635d643b5cda947c399c0c9 Mon Sep 17 00:00:00 2001 From: Lubos Date: Mon, 3 Feb 2025 00:58:59 +0000 Subject: [PATCH 2/2] 0.0.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8ec4bc48..7e3e1489 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@hey-api/json-schema-ref-parser", - "version": "0.0.2", + "version": "0.0.3", "description": "Parse, Resolve, and Dereference JSON Schema $ref pointers", "homepage": "https://heyapi.dev/", "repository": {