Skip to content

Commit e9ae353

Browse files
committed
Clear fetch abort timeout
1 parent ffbf5a6 commit e9ae353

File tree

2 files changed

+19
-19
lines changed

2 files changed

+19
-19
lines changed

.changeset/four-baboons-behave.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@firebase/vertexai': patch
3+
---
4+
5+
Clear fetch timeout after request completion. Fixes an issue that caused Node scripts to hang due to a pending timeout.

packages/vertexai/src/requests/request.ts

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,6 @@ export async function constructRequest(
116116
return {
117117
url: url.toString(),
118118
fetchOptions: {
119-
...buildFetchOptions(requestOptions),
120119
method: 'POST',
121120
headers: await getHeaders(url),
122121
body
@@ -134,6 +133,7 @@ export async function makeRequest(
134133
): Promise<Response> {
135134
const url = new RequestUrl(model, task, apiSettings, stream, requestOptions);
136135
let response;
136+
let fetchTimeoutId: string | number | NodeJS.Timeout | undefined;
137137
try {
138138
const request = await constructRequest(
139139
model,
@@ -143,6 +143,15 @@ export async function makeRequest(
143143
body,
144144
requestOptions
145145
);
146+
// Timeout is 180s by default
147+
const timeoutMillis =
148+
requestOptions?.timeout !== undefined
149+
? requestOptions.timeout
150+
: 180 * 1000;
151+
const abortController = new AbortController();
152+
fetchTimeoutId = setTimeout(() => abortController.abort(), timeoutMillis);
153+
request.fetchOptions.signal = abortController.signal;
154+
146155
response = await fetch(request.url, request.fetchOptions);
147156
if (!response.ok) {
148157
let message = '';
@@ -211,24 +220,10 @@ export async function makeRequest(
211220
}
212221

213222
throw err;
223+
} finally {
224+
if (fetchTimeoutId) {
225+
clearTimeout(fetchTimeoutId);
226+
}
214227
}
215228
return response;
216229
}
217-
218-
/**
219-
* Generates the request options to be passed to the fetch API.
220-
* @param requestOptions - The user-defined request options.
221-
* @returns The generated request options.
222-
*/
223-
function buildFetchOptions(requestOptions?: RequestOptions): RequestInit {
224-
const fetchOptions = {} as RequestInit;
225-
let timeoutMillis = 180 * 1000; // default: 180 s
226-
if (requestOptions?.timeout && requestOptions?.timeout >= 0) {
227-
timeoutMillis = requestOptions.timeout;
228-
}
229-
const abortController = new AbortController();
230-
const signal = abortController.signal;
231-
setTimeout(() => abortController.abort(), timeoutMillis);
232-
fetchOptions.signal = signal;
233-
return fetchOptions;
234-
}

0 commit comments

Comments
 (0)