From 4a4618dd32113aca3efd419f35ff0b5071d49dc2 Mon Sep 17 00:00:00 2001 From: Mihajlo Medjedovic Date: Mon, 9 Nov 2020 18:19:39 +0100 Subject: [PATCH 1/3] feat: service not found error handling for SAS9 --- src/SASjs.ts | 5 +++++ src/types/ErrorResponse.ts | 18 ++++++++++-------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/SASjs.ts b/src/SASjs.ts index 69c8469..b47da33 100644 --- a/src/SASjs.ts +++ b/src/SASjs.ts @@ -1107,6 +1107,11 @@ export default class SASjs { } } else { this.updateUsername(responseText) + if (responseText.includes('The requested URL /SASStoredProcess/do/ was not found on this server.') || + responseText.includes('Stored process not found')) { + reject(new ErrorResponse('Service not found on the server', {service: sasJob}, responseText)) + } + try { const parsedJson = JSON.parse(responseText) resolve(parsedJson) diff --git a/src/types/ErrorResponse.ts b/src/types/ErrorResponse.ts index 85635df..67400e0 100644 --- a/src/types/ErrorResponse.ts +++ b/src/types/ErrorResponse.ts @@ -1,14 +1,16 @@ export class ErrorResponse { error: ErrorBody - constructor(message: string, details?: any) { - let detailsString = '' - let raw - - try { - detailsString = JSON.stringify(details) - } catch { - raw = details + constructor(message: string, details?: any, raw?: any) { + let detailsString = details + + if (typeof details !== 'object') { + try { + detailsString = JSON.parse(details) + } catch { + raw = details + detailsString = '' + } } this.error = { From c7b082108139432e4c35f613267b52f8959caae3 Mon Sep 17 00:00:00 2001 From: Mihajlo Medjedovic Date: Mon, 9 Nov 2020 18:24:10 +0100 Subject: [PATCH 2/3] style: lint --- src/SASjs.ts | 16 +++++++++++++--- src/types/ErrorResponse.ts | 2 +- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/SASjs.ts b/src/SASjs.ts index b47da33..53c1202 100644 --- a/src/SASjs.ts +++ b/src/SASjs.ts @@ -1107,9 +1107,19 @@ export default class SASjs { } } else { this.updateUsername(responseText) - if (responseText.includes('The requested URL /SASStoredProcess/do/ was not found on this server.') || - responseText.includes('Stored process not found')) { - reject(new ErrorResponse('Service not found on the server', {service: sasJob}, responseText)) + if ( + responseText.includes( + 'The requested URL /SASStoredProcess/do/ was not found on this server.' + ) || + responseText.includes('Stored process not found') + ) { + reject( + new ErrorResponse( + 'Service not found on the server', + { service: sasJob }, + responseText + ) + ) } try { diff --git a/src/types/ErrorResponse.ts b/src/types/ErrorResponse.ts index 67400e0..0057f3a 100644 --- a/src/types/ErrorResponse.ts +++ b/src/types/ErrorResponse.ts @@ -3,7 +3,7 @@ export class ErrorResponse { constructor(message: string, details?: any, raw?: any) { let detailsString = details - + if (typeof details !== 'object') { try { detailsString = JSON.parse(details) From e9be1cf99accb9f44b6f9536e8c1836905ddbb7c Mon Sep 17 00:00:00 2001 From: Mihajlo Medjedovic Date: Thu, 12 Nov 2020 16:03:32 +0100 Subject: [PATCH 3/3] fix: service not found error handling --- src/SASViyaApiClient.ts | 4 ++-- src/SASjs.ts | 48 ++++++++++++++++++++++++++++++----------- 2 files changed, 37 insertions(+), 15 deletions(-) diff --git a/src/SASViyaApiClient.ts b/src/SASViyaApiClient.ts index 1289b53..6453698 100644 --- a/src/SASViyaApiClient.ts +++ b/src/SASViyaApiClient.ts @@ -607,7 +607,7 @@ export class SASViyaApiClient { }) return Promise.reject( - new ErrorResponse('Job execution failed', { + new ErrorResponse('Job execution failed.', { status: 500, body: log }) @@ -1114,7 +1114,7 @@ export class SASViyaApiClient { } if (!jobToExecute) { - throw new Error(`The job ${sasJob} was not found.`) + throw new Error(`Job was not found.`) } const jobDefinitionLink = jobToExecute?.links.find( (l) => l.rel === 'getResource' diff --git a/src/SASjs.ts b/src/SASjs.ts index 53c1202..edb0232 100644 --- a/src/SASjs.ts +++ b/src/SASjs.ts @@ -780,11 +780,23 @@ export default class SASjs { } else { this.retryCountComputeApi = 0 reject( - new ErrorResponse('Compute API retry requests limit reached') + new ErrorResponse('Compute API retry requests limit reached.') ) } } + if (response?.log) { + this.appendSasjsRequest(response.log, sasJob, null) + } + + if (error.toString().includes('Job was not found')) { + reject( + new ErrorResponse('Service not found on the server.', { + sasJob: sasJob + }) + ) + } + if (error && error.status === 401) { if (loginRequiredCallback) loginRequiredCallback(true) sasjsWaitingRequest.requestPromise.resolve = resolve @@ -792,10 +804,8 @@ export default class SASjs { sasjsWaitingRequest.config = config this.sasjsWaitingRequests.push(sasjsWaitingRequest) } else { - reject(new ErrorResponse('Job execution failed', error)) + reject(new ErrorResponse('Job execution failed.', error)) } - - this.appendSasjsRequest(response.log, sasJob, null) }) } ) @@ -875,12 +885,24 @@ export default class SASjs { } else { this.retryCountJeseApi = 0 reject( - new ErrorResponse('Jes API retry requests limit reached') + new ErrorResponse('Jes API retry requests limit reached.') ) } } - reject(new ErrorResponse('Job execution failed', e)) + if (e?.log) { + this.appendSasjsRequest(e.log, sasJob, null) + } + + if (e.toString().includes('Job was not found')) { + reject( + new ErrorResponse('Service not found on the server.', { + sasJob: sasJob + }) + ) + } + + reject(new ErrorResponse('Job execution failed.', e)) }) ) } @@ -1064,7 +1086,7 @@ export default class SASjs { } else { reject( new ErrorResponse( - 'Job WEB execution failed', + 'Job WEB execution failed.', this.parseSAS9ErrorResponse(responseText) ) ) @@ -1082,7 +1104,7 @@ export default class SASjs { } catch (e) { reject( new ErrorResponse( - 'Job WEB debug response parsing failed', + 'Job WEB debug response parsing failed.', { response: resText, exception: e } ) ) @@ -1091,7 +1113,7 @@ export default class SASjs { (err: any) => { reject( new ErrorResponse( - 'Job WEB debug response parsing failed', + 'Job WEB debug response parsing failed.', err ) ) @@ -1100,7 +1122,7 @@ export default class SASjs { } catch (e) { reject( new ErrorResponse( - 'Job WEB debug response parsing failed', + 'Job WEB debug response parsing failed.', { response: responseText, exception: e } ) ) @@ -1115,7 +1137,7 @@ export default class SASjs { ) { reject( new ErrorResponse( - 'Service not found on the server', + 'Service not found on the server.', { service: sasJob }, responseText ) @@ -1127,7 +1149,7 @@ export default class SASjs { resolve(parsedJson) } catch (e) { reject( - new ErrorResponse('Job WEB response parsing failed', { + new ErrorResponse('Job WEB response parsing failed.', { response: responseText, exception: e }) @@ -1138,7 +1160,7 @@ export default class SASjs { } }) .catch((e: Error) => { - reject(new ErrorResponse('Job WEB request failed', e)) + reject(new ErrorResponse('Job WEB request failed.', e)) }) } )