From 2e843e3f3628eaa406c99ffa75f79560028e4df1 Mon Sep 17 00:00:00 2001 From: Saad Jutt Date: Wed, 2 Mar 2022 20:25:56 +0500 Subject: [PATCH 1/2] fix: raising error with details we get from server --- src/request/RequestClient.ts | 14 ++++++++++++-- src/types/errors/LoginRequiredError.ts | 8 ++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/request/RequestClient.ts b/src/request/RequestClient.ts index 5a82291..3645c08 100644 --- a/src/request/RequestClient.ts +++ b/src/request/RequestClient.ts @@ -557,8 +557,18 @@ export class RequestClient implements HttpClient { } export const throwIfError = (response: AxiosResponse) => { - if (response.status === 401) { - throw new LoginRequiredError() + switch (response.status) { + case 400: + if (typeof response.data === 'object') { + throw new LoginRequiredError(response.data) + } + break + case 401: + if (typeof response.data === 'object') { + throw new LoginRequiredError(response.data) + } else { + throw new LoginRequiredError() + } } if (response.data?.entityID?.includes('login')) { diff --git a/src/types/errors/LoginRequiredError.ts b/src/types/errors/LoginRequiredError.ts index 854c032..4f0ed20 100644 --- a/src/types/errors/LoginRequiredError.ts +++ b/src/types/errors/LoginRequiredError.ts @@ -1,6 +1,10 @@ export class LoginRequiredError extends Error { - constructor() { - super('Auth error: You must be logged in to access this resource') + constructor(details?: any) { + const message = details + ? JSON.stringify(details, null, 2) + : 'You must be logged in to access this resource' + + super(`Auth error: ${message}`) this.name = 'LoginRequiredError' Object.setPrototypeOf(this, LoginRequiredError.prototype) } From 495e4b9069f7e9c437cfa5ec71dcc598383e83a0 Mon Sep 17 00:00:00 2001 From: Saad Jutt Date: Wed, 2 Mar 2022 20:42:14 +0500 Subject: [PATCH 2/2] test: updated RequestClient specs --- src/test/RequestClient.spec.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/test/RequestClient.spec.ts b/src/test/RequestClient.spec.ts index 9f8ec7d..b428380 100644 --- a/src/test/RequestClient.spec.ts +++ b/src/test/RequestClient.spec.ts @@ -30,6 +30,11 @@ const ERROR_MESSAGES = { CCA: 'unable to verify the first certificate' } +const incorrectAuthCodeErr = { + error: 'unauthorized', + error_description: 'Bad credentials' +} + describe('RequestClient', () => { let server: http.Server @@ -65,7 +70,7 @@ describe('RequestClient', () => { adapter.getAccessToken('clientId', 'clientSecret', 'incorrect') ).rejects.toEqual( prefixMessage( - new LoginRequiredError(), + new LoginRequiredError(incorrectAuthCodeErr), 'Error while getting access token. ' ) ) @@ -246,7 +251,7 @@ describe('RequestClient - Self Signed Server', () => { adapter.getAccessToken('clientId', 'clientSecret', 'incorrect') ).rejects.toEqual( prefixMessage( - new LoginRequiredError(), + new LoginRequiredError(incorrectAuthCodeErr), 'Error while getting access token. ' ) )