From a02a4774def6de0f3f3609077ea95a3286a027a4 Mon Sep 17 00:00:00 2001
From: Sidharth Vinod <sidharthv96@gmail.com>
Date: Fri, 23 Aug 2024 17:21:55 +0530
Subject: [PATCH 1/4] feat: Add requestTimeout to avoid long running queries

---
 packages/sdk/src/index.ts | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/packages/sdk/src/index.ts b/packages/sdk/src/index.ts
index ca212ea..3c64d7f 100644
--- a/packages/sdk/src/index.ts
+++ b/packages/sdk/src/index.ts
@@ -1,21 +1,22 @@
-import { v4 as uuid } from 'uuid';
 import { OAuth2Client, generateCodeVerifier } from '@badgateway/oauth2-client';
-import defaultAxios from 'axios';
 import type { AxiosInstance, AxiosResponse } from 'axios';
-import { RequiredParameterMissingError, OAuthError } from './errors.js';
-import { URLS } from './urls.js';
+import defaultAxios from 'axios';
+import { v4 as uuid } from 'uuid';
+import { OAuthError, RequiredParameterMissingError } from './errors.js';
 import type {
   AuthState,
+  AuthorizationData,
   Document,
   InitParams,
-  AuthorizationData,
-  MCUser,
-  MCProject,
   MCDocument,
+  MCProject,
+  MCUser,
 } from './types.js';
+import { URLS } from './urls.js';
 
 const defaultBaseURL = 'https://www.mermaidchart.com'; // "http://127.0.0.1:5174"
 const authorizationURLTimeout = 60_000;
+const requestTimeout = 5000;
 
 export class MermaidChart {
   private clientID: string;
@@ -52,6 +53,7 @@ export class MermaidChart {
     });
     this.axios = defaultAxios.create({
       baseURL: this.#baseURL,
+      timeout: requestTimeout,
     });
 
     this.axios.interceptors.response.use((res: AxiosResponse) => {

From 1e0f33cc02ddf2e8cfdda405b5bba0d9e8696ba4 Mon Sep 17 00:00:00 2001
From: Sidharth Vinod <sidharthv96@gmail.com>
Date: Fri, 23 Aug 2024 17:42:51 +0530
Subject: [PATCH 2/4] Increase request timeout

---
 packages/sdk/src/index.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/sdk/src/index.ts b/packages/sdk/src/index.ts
index 3c64d7f..5335bb7 100644
--- a/packages/sdk/src/index.ts
+++ b/packages/sdk/src/index.ts
@@ -16,7 +16,7 @@ import { URLS } from './urls.js';
 
 const defaultBaseURL = 'https://www.mermaidchart.com'; // "http://127.0.0.1:5174"
 const authorizationURLTimeout = 60_000;
-const requestTimeout = 5000;
+const requestTimeout = 30_000;
 
 export class MermaidChart {
   private clientID: string;

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 3/4] 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 {

From 87e0131f4bb6640f557f3d36f70cb1e4ff2021a4 Mon Sep 17 00:00:00 2001
From: Sidharth Vinod <sidharthv96@gmail.com>
Date: Fri, 23 Aug 2024 18:43:55 +0530
Subject: [PATCH 4/4] docs: Update changelog

---
 packages/sdk/CHANGELOG.md | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/packages/sdk/CHANGELOG.md b/packages/sdk/CHANGELOG.md
index 8063089..b8f67b6 100644
--- a/packages/sdk/CHANGELOG.md
+++ b/packages/sdk/CHANGELOG.md
@@ -3,12 +3,17 @@
 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 
-## [Unreleased]
+## [UNRELEASED]
 
 ### Changes
 
+- Set a 30 second default timeout for all requests
 - `MermaidChart#resetAccessToken()` no longer returns a `Promise`.
 
+### Added
+
+- Added `requestTimeout` option to configure timeout.
+
 ## [0.2.0] - 2024-04-11
 
 ### Added