From c5a6c975912e71fa37ba68ad16358f2d92f896b3 Mon Sep 17 00:00:00 2001
From: Sidharth Vinod <sidharthv96@gmail.com>
Date: Fri, 23 Aug 2024 17:58:33 +0530
Subject: [PATCH] feat: Make requestTimeout configurable

Co-authored-by: Alois Klink <alois@mermaidchart.com>
---
 packages/sdk/src/index.ts | 9 ++++++---
 packages/sdk/src/types.ts | 1 +
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/packages/sdk/src/index.ts b/packages/sdk/src/index.ts
index 5335bb7..ef7ce4a 100644
--- a/packages/sdk/src/index.ts
+++ b/packages/sdk/src/index.ts
@@ -16,7 +16,6 @@ import { URLS } from './urls.js';
 
 const defaultBaseURL = 'https://www.mermaidchart.com'; // "http://127.0.0.1:5174"
 const authorizationURLTimeout = 60_000;
-const requestTimeout = 30_000;
 
 export class MermaidChart {
   private clientID: string;
@@ -26,13 +25,17 @@ export class MermaidChart {
   private pendingStates: Record<string, AuthState> = {};
   private redirectURI!: string;
   private accessToken?: string;
+  private requestTimeout = 30_000;
 
-  constructor({ clientID, baseURL, redirectURI }: InitParams) {
+  constructor({ clientID, baseURL, redirectURI, requestTimeout }: InitParams) {
     this.clientID = clientID;
     this.setBaseURL(baseURL || defaultBaseURL);
     if (redirectURI) {
       this.setRedirectURI(redirectURI);
     }
+    if (requestTimeout) {
+      this.requestTimeout = requestTimeout;
+    }
   }
 
   public setRedirectURI(redirectURI: string) {
@@ -53,7 +56,7 @@ export class MermaidChart {
     });
     this.axios = defaultAxios.create({
       baseURL: this.#baseURL,
-      timeout: requestTimeout,
+      timeout: this.requestTimeout,
     });
 
     this.axios.interceptors.response.use((res: AxiosResponse) => {
diff --git a/packages/sdk/src/types.ts b/packages/sdk/src/types.ts
index 8f487b4..b755b56 100644
--- a/packages/sdk/src/types.ts
+++ b/packages/sdk/src/types.ts
@@ -2,6 +2,7 @@ export interface InitParams {
   clientID: string;
   redirectURI?: string;
   baseURL?: string;
+  requestTimeout?: number;
 }
 
 export interface OAuthAuthorizationParams {