gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-wallet-core] 02/02: handler request timeout


From: gnunet
Subject: [taler-wallet-core] 02/02: handler request timeout
Date: Tue, 20 Dec 2022 17:44:51 +0100

This is an automated email from the git hooks/post-receive script.

sebasjm pushed a commit to branch master
in repository wallet-core.

commit 46607dc2601d6d7835d2112185c88de8fafc2b49
Author: Sebastian <sebasjm@gmail.com>
AuthorDate: Tue Dec 20 13:44:42 2022 -0300

    handler request timeout
---
 .../src/serviceWorkerHttpLib.ts                    | 68 +++++++++++++++-------
 1 file changed, 48 insertions(+), 20 deletions(-)

diff --git a/packages/taler-wallet-webextension/src/serviceWorkerHttpLib.ts 
b/packages/taler-wallet-webextension/src/serviceWorkerHttpLib.ts
index 74c7f161d..c9327b8e6 100644
--- a/packages/taler-wallet-webextension/src/serviceWorkerHttpLib.ts
+++ b/packages/taler-wallet-webextension/src/serviceWorkerHttpLib.ts
@@ -17,7 +17,11 @@
 /**
  * Imports.
  */
-import { RequestThrottler, TalerErrorCode } from "@gnu-taler/taler-util";
+import {
+  Logger,
+  RequestThrottler,
+  TalerErrorCode,
+} from "@gnu-taler/taler-util";
 import {
   Headers,
   HttpRequestLibrary,
@@ -41,6 +45,7 @@ export class ServiceWorkerHttpLib implements 
HttpRequestLibrary {
     const requestMethod = options?.method ?? "GET";
     const requestBody = options?.body;
     const requestHeader = options?.headers;
+    const requestTimeout = options?.timeout ?? { d_ms: 2 * 1000 };
 
     if (this.throttlingEnabled && this.throttle.applyThrottle(requestUrl)) {
       const parsedUrl = new URL(requestUrl);
@@ -70,26 +75,49 @@ export class ServiceWorkerHttpLib implements 
HttpRequestLibrary {
       }
     }
 
-    const response = await fetch(requestUrl, {
-      headers: requestHeader,
-      body: myBody,
-      method: requestMethod,
-      // timeout: options?.timeout
-    });
+    const controller = new AbortController();
+    let timeoutId: any | undefined;
+    if (requestTimeout.d_ms !== "forever") {
+      timeoutId = setTimeout(() => {
+        controller.abort(TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT);
+      }, requestTimeout.d_ms);
+    }
 
-    const headerMap = new Headers();
-    response.headers.forEach((value, key) => {
-      headerMap.set(key, value);
-    });
-    return {
-      headers: headerMap,
-      status: response.status,
-      requestMethod,
-      requestUrl,
-      json: makeJsonHandler(response, requestUrl),
-      text: makeTextHandler(response, requestUrl),
-      bytes: async () => (await response.blob()).arrayBuffer(),
-    };
+    try {
+      const response = await fetch(requestUrl, {
+        headers: requestHeader,
+        body: myBody,
+        method: requestMethod,
+        signal: controller.signal,
+      });
+
+      if (timeoutId) {
+        clearTimeout(timeoutId);
+      }
+
+      const headerMap = new Headers();
+      response.headers.forEach((value, key) => {
+        headerMap.set(key, value);
+      });
+      return {
+        headers: headerMap,
+        status: response.status,
+        requestMethod,
+        requestUrl,
+        json: makeJsonHandler(response, requestUrl),
+        text: makeTextHandler(response, requestUrl),
+        bytes: async () => (await response.blob()).arrayBuffer(),
+      };
+    } catch (e) {
+      if (controller.signal) {
+        throw TalerError.fromDetail(
+          controller.signal.reason,
+          {},
+          `request to ${requestUrl} timed out`,
+        );
+      }
+      throw e;
+    }
   }
 
   get(url: string, opt?: HttpRequestOptions): Promise<HttpResponse> {

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]