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/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. ' ) ) 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) }