From 53990a9ba38ba0ec9c667f11346e8a6ee363ccbd Mon Sep 17 00:00:00 2001 From: Mihajlo Medjedovic Date: Mon, 14 Sep 2020 16:47:54 +0200 Subject: [PATCH] feat: added type for error response --- src/SASjs.ts | 56 ++++++++++++++++++++++++++++---------- src/types/ErrorResponse.ts | 15 ++++++++++ src/types/index.ts | 1 + 3 files changed, 58 insertions(+), 14 deletions(-) create mode 100644 src/types/ErrorResponse.ts diff --git a/src/SASjs.ts b/src/SASjs.ts index 1818dec..20ea940 100644 --- a/src/SASjs.ts +++ b/src/SASjs.ts @@ -30,7 +30,8 @@ import { ServerType, CsrfToken, UploadFile, - EditContextInput + EditContextInput, + ErrorResponse } from './types' import { SASViyaApiClient } from './SASViyaApiClient' import { SAS9ApiClient } from './SAS9ApiClient' @@ -686,7 +687,9 @@ export default class SASjs { resolve(retryResponse) } else { this.retryCountComputeApi = 0 - reject({ MESSAGE: 'Compute API retry requests limit reached' }) + reject( + new ErrorResponse('Compute API retry requests limit reached') + ) } } @@ -697,7 +700,7 @@ export default class SASjs { sasjsWaitingRequest.config = config this.sasjsWaitingRequests.push(sasjsWaitingRequest) } else { - reject({ MESSAGE: error || 'Job execution failed' }) + reject(new ErrorResponse('Job execution failed', error)) } this.appendSasjsRequest(response.log, sasJob, null) @@ -779,11 +782,13 @@ export default class SASjs { resolve(retryResponse) } else { this.retryCountJeseApi = 0 - reject({ MESSAGE: 'Jes API retry requests limit reached' }) + reject( + new ErrorResponse('Jes API retry requests limit reached') + ) } } - reject({ MESSAGE: (e && e.message) || 'Job execution failed' }) + reject(new ErrorResponse('Job execution failed', e)) }) ) } @@ -895,7 +900,7 @@ export default class SASjs { sasjsWaitingRequest.requestPromise.promise = new Promise( (resolve, reject) => { if (isError) { - reject({ MESSAGE: errorMsg }) + reject(new ErrorResponse(errorMsg)) } const headers: any = {} if (this.csrfTokenWeb) { @@ -961,9 +966,12 @@ export default class SASjs { if (jsonResponseText !== '') { resolve(JSON.parse(jsonResponseText)) } else { - reject({ - MESSAGE: this.parseSAS9ErrorResponse(responseText) - }) + reject( + new ErrorResponse( + 'Job WEB execution failed', + this.parseSAS9ErrorResponse(responseText) + ) + ) } } else if ( config.serverType === ServerType.SASViya && @@ -976,15 +984,30 @@ export default class SASjs { try { resolve(JSON.parse(resText)) } catch (e) { - reject({ MESSAGE: resText }) + reject( + new ErrorResponse( + 'Job WEB debug response parsing failed', + { response: resText, exception: e } + ) + ) } }, (err: any) => { - reject({ MESSAGE: err }) + reject( + new ErrorResponse( + 'Job WEB debug response parsing failed', + err + ) + ) } ) } catch (e) { - reject({ MESSAGE: responseText }) + reject( + new ErrorResponse( + 'Job WEB debug response parsing failed', + { response: responseText, exception: e } + ) + ) } } else { this.updateUsername(responseText) @@ -992,14 +1015,19 @@ export default class SASjs { const parsedJson = JSON.parse(responseText) resolve(parsedJson) } catch (e) { - reject({ MESSAGE: responseText }) + reject( + new ErrorResponse('Job WEB response parsing failed', { + response: responseText, + exception: e + }) + ) } } } } }) .catch((e: Error) => { - reject(e) + reject(new ErrorResponse('Job WEB request failed', e)) }) } ) diff --git a/src/types/ErrorResponse.ts b/src/types/ErrorResponse.ts new file mode 100644 index 0000000..1f88c8f --- /dev/null +++ b/src/types/ErrorResponse.ts @@ -0,0 +1,15 @@ +export class ErrorResponse { + body: ErrorBody + + constructor(message: string, details?: any) { + this.body = { + message, + details + } + } +} + +interface ErrorBody { + message: string + details: any +} diff --git a/src/types/index.ts b/src/types/index.ts index 5235df3..74a1159 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -9,3 +9,4 @@ export * from './SASjsWaitingRequest' export * from './ServerType' export * from './Session' export * from './UploadFile' +export * from './ErrorResponse'