From 93c9a34591c7b3d4f880ad3d2964fc61f287f814 Mon Sep 17 00:00:00 2001 From: sabhas Date: Mon, 21 Jun 2021 00:45:37 +0500 Subject: [PATCH] fix: if response is not valid json throw error #409 --- src/job-execution/WebJobExecutor.ts | 16 +++++++++++++++- src/request/RequestClient.ts | 9 ++++++++- src/utils/index.ts | 1 + src/utils/isValidJson.ts | 11 +++++++++++ 4 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 src/utils/isValidJson.ts diff --git a/src/job-execution/WebJobExecutor.ts b/src/job-execution/WebJobExecutor.ts index 61f215c..4227987 100644 --- a/src/job-execution/WebJobExecutor.ts +++ b/src/job-execution/WebJobExecutor.ts @@ -8,8 +8,9 @@ import { generateFileUploadForm } from '../file/generateFileUploadForm' import { generateTableUploadForm } from '../file/generateTableUploadForm' import { RequestClient } from '../request/RequestClient' import { SASViyaApiClient } from '../SASViyaApiClient' -import { isRelativePath } from '../utils' +import { isRelativePath, isValidJson } from '../utils' import { BaseJobExecutor } from './JobExecutor' +import { parseWeboutResponse } from '../utils/parseWeboutResponse' export interface WaitingRequstPromise { promise: Promise | null @@ -97,6 +98,19 @@ export class WebJobExecutor extends BaseJobExecutor { this.appendRequest(res, sasJob, config.debug) resolve(jsonResponse) } + if (this.serverType === ServerType.Sas9 && config.debug) { + const jsonResponse = parseWeboutResponse(res.result as string) + if (jsonResponse === '') { + throw new Error( + 'Valid JSON could not be extracted from response.' + ) + } + console.log('WebJobExecutor') + isValidJson(jsonResponse) + this.appendRequest(res, sasJob, config.debug) + resolve(res.result) + } + isValidJson(res.result as string) this.appendRequest(res, sasJob, config.debug) resolve(res.result) }) diff --git a/src/request/RequestClient.ts b/src/request/RequestClient.ts index 62a144e..492328b 100644 --- a/src/request/RequestClient.ts +++ b/src/request/RequestClient.ts @@ -11,6 +11,7 @@ import { import { parseWeboutResponse } from '../utils/parseWeboutResponse' import { prefixMessage } from '@sasjs/utils/error' import { SAS9AuthError } from '../types/errors/SAS9AuthError' +import { isValidJson } from '../utils' export interface HttpClient { get( @@ -419,7 +420,13 @@ export class RequestClient implements HttpClient { } } catch { try { - parsedResponse = JSON.parse(parseWeboutResponse(response.data)) + const weboutResponse = parseWeboutResponse(response.data) + if (weboutResponse === '') { + throw new Error('Valid JSON could not be extracted from response.') + } + console.log('RequestClient') + isValidJson(weboutResponse) + parsedResponse = JSON.parse(weboutResponse) } catch { parsedResponse = response.data } diff --git a/src/utils/index.ts b/src/utils/index.ts index 4603194..3f6ec1d 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -12,3 +12,4 @@ export * from './serialize' export * from './splitChunks' export * from './parseWeboutResponse' export * from './fetchLogByChunks' +export * from './isValidJson' diff --git a/src/utils/isValidJson.ts b/src/utils/isValidJson.ts new file mode 100644 index 0000000..5ec3af6 --- /dev/null +++ b/src/utils/isValidJson.ts @@ -0,0 +1,11 @@ +/** + * Checks if string is in valid JSON format else throw error. + * @param str - string to check. + */ +export const isValidJson = (str: string) => { + try { + JSON.parse(str) + } catch (e) { + throw new Error('Invalid JSON response.') + } +}