From 732424a87931e1a8e141a2b5cebf88a9b3cf2968 Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Thu, 20 Jul 2023 19:25:02 +0200 Subject: [PATCH] GramJS: Fix HTTP fetch timeout (#3640) --- src/lib/gramjs/extensions/HttpStream.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/lib/gramjs/extensions/HttpStream.ts b/src/lib/gramjs/extensions/HttpStream.ts index dddf9cee2..2f534f815 100644 --- a/src/lib/gramjs/extensions/HttpStream.ts +++ b/src/lib/gramjs/extensions/HttpStream.ts @@ -1,4 +1,11 @@ const closeError = new Error('HttpStream was closed'); +const REQUEST_TIMEOUT = 10000; + +AbortSignal.timeout ??= function timeout(ms) { + const ctrl = new AbortController(); + setTimeout(() => ctrl.abort(), ms); + return ctrl.signal; +}; class HttpStream { private url: string | undefined; @@ -54,6 +61,7 @@ class HttpStream { method: 'POST', body: Buffer.from([]), mode: 'cors', + signal: AbortSignal.timeout(REQUEST_TIMEOUT), }); this.isClosed = false; @@ -69,13 +77,13 @@ class HttpStream { method: 'POST', body: data, mode: 'cors', + signal: AbortSignal.timeout(REQUEST_TIMEOUT), }).then(async (response) => { if (this.isClosed) { this.handleDisconnect(); return; } if (response.status !== 200) { - this.handleDisconnect(); throw closeError; } @@ -83,6 +91,9 @@ class HttpStream { this.stream = this.stream.concat(Buffer.from(arrayBuffer)); if (this.resolveRead && !this.isClosed) this.resolveRead(); + }).catch((err) => { + this.handleDisconnect(); + throw err; }); }