diff --git a/src/FileUploader.ts b/src/FileUploader.ts index 8237981..c9cecc6 100644 --- a/src/FileUploader.ts +++ b/src/FileUploader.ts @@ -1,6 +1,6 @@ import { isUrl } from './utils' import { UploadFile } from './types/UploadFile' -import { ErrorResponse, LoginRequiredError } from './types' +import { ErrorResponse, LoginRequiredError } from './types/errors' import { RequestClient } from './request/RequestClient' export class FileUploader { diff --git a/src/SASViyaApiClient.ts b/src/SASViyaApiClient.ts index b52f7a5..beaf51b 100644 --- a/src/SASViyaApiClient.ts +++ b/src/SASViyaApiClient.ts @@ -8,10 +8,13 @@ import { Folder, EditContextInput, JobDefinition, - PollOptions, - ComputeJobExecutionError, - JobExecutionError + PollOptions } from './types' +import { + ComputeJobExecutionError, + JobExecutionError, + NotFoundError +} from './types/errors' import { formatDataForRequest } from './utils/formatDataForRequest' import { SessionManager } from './SessionManager' import { ContextManager } from './ContextManager' @@ -19,7 +22,6 @@ import { timestampToYYYYMMDDHHMMSS } from '@sasjs/utils/time' import { Logger, LogLevel } from '@sasjs/utils/logger' import { isAuthorizeFormRequired } from './auth/isAuthorizeFormRequired' import { RequestClient } from './request/RequestClient' -import { NotFoundError } from './types/NotFoundError' import { SasAuthResponse } from '@sasjs/utils/types' import { prefixMessage } from '@sasjs/utils/error' @@ -1082,7 +1084,9 @@ export class SASViyaApiClient { .get( `${this.serverUrl}${stateLink.href}?_action=wait&wait=30`, accessToken, - 'text/plain' + 'text/plain', + {}, + this.debug ) .catch((err) => { throw prefixMessage(err, 'Error while getting job state. ') @@ -1107,7 +1111,9 @@ export class SASViyaApiClient { .get( `${this.serverUrl}${stateLink.href}?_action=wait&wait=30`, accessToken, - 'text/plain' + 'text/plain', + {}, + this.debug ) .catch((err) => { throw prefixMessage( diff --git a/src/index.ts b/src/index.ts index 709febe..251fe50 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,6 @@ import SASjs from './SASjs' export * from './types' +export * from './types/errors' export * from './SASViyaApiClient' export * from './SAS9ApiClient' export default SASjs diff --git a/src/job-execution/ComputeJobExecutor.ts b/src/job-execution/ComputeJobExecutor.ts index 4ed67ed..33f31ca 100644 --- a/src/job-execution/ComputeJobExecutor.ts +++ b/src/job-execution/ComputeJobExecutor.ts @@ -1,7 +1,10 @@ import { ServerType } from '@sasjs/utils/types' -import { ErrorResponse } from '..' import { SASViyaApiClient } from '../SASViyaApiClient' -import { ComputeJobExecutionError, LoginRequiredError } from '../types' +import { + ErrorResponse, + ComputeJobExecutionError, + LoginRequiredError +} from '../types/errors' import { BaseJobExecutor } from './JobExecutor' export class ComputeJobExecutor extends BaseJobExecutor { diff --git a/src/job-execution/JesJobExecutor.ts b/src/job-execution/JesJobExecutor.ts index 277f32c..60cf52f 100644 --- a/src/job-execution/JesJobExecutor.ts +++ b/src/job-execution/JesJobExecutor.ts @@ -1,7 +1,10 @@ import { ServerType } from '@sasjs/utils/types' -import { ErrorResponse } from '..' import { SASViyaApiClient } from '../SASViyaApiClient' -import { JobExecutionError, LoginRequiredError } from '../types' +import { + ErrorResponse, + JobExecutionError, + LoginRequiredError +} from '../types/errors' import { BaseJobExecutor } from './JobExecutor' export class JesJobExecutor extends BaseJobExecutor { diff --git a/src/job-execution/WebJobExecutor.ts b/src/job-execution/WebJobExecutor.ts index 494cf61..816c6d7 100644 --- a/src/job-execution/WebJobExecutor.ts +++ b/src/job-execution/WebJobExecutor.ts @@ -1,5 +1,9 @@ import { ServerType } from '@sasjs/utils/types' -import { ErrorResponse, JobExecutionError, LoginRequiredError } from '..' +import { + ErrorResponse, + JobExecutionError, + LoginRequiredError +} from '../types/errors' import { generateFileUploadForm } from '../file/generateFileUploadForm' import { generateTableUploadForm } from '../file/generateTableUploadForm' import { RequestClient } from '../request/RequestClient' diff --git a/src/request/RequestClient.ts b/src/request/RequestClient.ts index 16a0e97..c55060b 100644 --- a/src/request/RequestClient.ts +++ b/src/request/RequestClient.ts @@ -1,9 +1,13 @@ import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios' -import { CsrfToken, JobExecutionError } from '..' +import { CsrfToken } from '..' import { isAuthorizeFormRequired, isLogInRequired } from '../auth' -import { LoginRequiredError } from '../types' -import { AuthorizeError } from '../types/AuthorizeError' -import { NotFoundError } from '../types/NotFoundError' +import { + AuthorizeError, + LoginRequiredError, + NotFoundError, + InternalServerError, + JobExecutionError +} from '../types/errors' import { parseWeboutResponse } from '../utils/parseWeboutResponse' import { prefixMessage } from '@sasjs/utils/error' @@ -73,7 +77,8 @@ export class RequestClient implements HttpClient { url: string, accessToken: string | undefined, contentType: string = 'application/json', - overrideHeaders: { [key: string]: string | number } = {} + overrideHeaders: { [key: string]: string | number } = {}, + debug: boolean = false ): Promise<{ result: T; etag: string }> { const headers = { ...this.getHeaders(accessToken, contentType), @@ -97,15 +102,18 @@ export class RequestClient implements HttpClient { return this.parseResponse(response) }) .catch(async (e) => { - return await this.handleError(e, () => - this.get(url, accessToken, contentType, overrideHeaders).catch( - (err) => { - throw prefixMessage( - err, - 'Error while executing handle error callback. ' - ) - } - ) + return await this.handleError( + e, + () => + this.get(url, accessToken, contentType, overrideHeaders).catch( + (err) => { + throw prefixMessage( + err, + 'Error while executing handle error callback. ' + ) + } + ), + debug ).catch((err) => { throw prefixMessage(err, 'Error while handling error. ') }) @@ -340,7 +348,11 @@ export class RequestClient implements HttpClient { } } - private handleError = async (e: any, callback: any) => { + private handleError = async ( + e: any, + callback: any, + debug: boolean = false + ) => { const response = e.response as AxiosResponse if (e instanceof AuthorizeError) { @@ -386,10 +398,11 @@ export class RequestClient implements HttpClient { throw e } else if (response?.status === 404) { throw new NotFoundError(response.config.url!) + } else if (response?.status === 502) { + if (debug) throw new InternalServerError() + else return } - console.log(`[e]`, e) - throw e } diff --git a/src/types/AuthorizeError.ts b/src/types/errors/AuthorizeError.ts similarity index 100% rename from src/types/AuthorizeError.ts rename to src/types/errors/AuthorizeError.ts diff --git a/src/types/ComputeJobExecutionError.ts b/src/types/errors/ComputeJobExecutionError.ts similarity index 90% rename from src/types/ComputeJobExecutionError.ts rename to src/types/errors/ComputeJobExecutionError.ts index 0f5db94..2505c71 100644 --- a/src/types/ComputeJobExecutionError.ts +++ b/src/types/errors/ComputeJobExecutionError.ts @@ -1,4 +1,4 @@ -import { Job } from './Job' +import { Job } from '../Job' export class ComputeJobExecutionError extends Error { constructor(public job: Job, public log: string) { diff --git a/src/types/ErrorResponse.ts b/src/types/errors/ErrorResponse.ts similarity index 100% rename from src/types/ErrorResponse.ts rename to src/types/errors/ErrorResponse.ts diff --git a/src/types/errors/InternalServerError.ts b/src/types/errors/InternalServerError.ts new file mode 100644 index 0000000..0b6c0ad --- /dev/null +++ b/src/types/errors/InternalServerError.ts @@ -0,0 +1,9 @@ +export class InternalServerError extends Error { + constructor() { + super('Error: Internal server error.') + + this.name = 'InternalServerError' + + Object.setPrototypeOf(this, InternalServerError.prototype) + } +} diff --git a/src/types/JobExecutionError.ts b/src/types/errors/JobExecutionError.ts similarity index 100% rename from src/types/JobExecutionError.ts rename to src/types/errors/JobExecutionError.ts diff --git a/src/types/LoginRequiredError.ts b/src/types/errors/LoginRequiredError.ts similarity index 100% rename from src/types/LoginRequiredError.ts rename to src/types/errors/LoginRequiredError.ts diff --git a/src/types/NotFoundError.ts b/src/types/errors/NotFoundError.ts similarity index 100% rename from src/types/NotFoundError.ts rename to src/types/errors/NotFoundError.ts diff --git a/src/types/errors/index.ts b/src/types/errors/index.ts new file mode 100644 index 0000000..3db6b72 --- /dev/null +++ b/src/types/errors/index.ts @@ -0,0 +1,7 @@ +export * from './AuthorizeError' +export * from './ComputeJobExecutionError' +export * from './InternalServerError' +export * from './JobExecutionError' +export * from './LoginRequiredError' +export * from './NotFoundError' +export * from './ErrorResponse' diff --git a/src/types/index.ts b/src/types/index.ts index 2719da1..36ee543 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,14 +1,10 @@ -export * from './ComputeJobExecutionError' export * from './Context' export * from './CsrfToken' -export * from './ErrorResponse' export * from './Folder' export * from './Job' -export * from './JobExecutionError' export * from './JobDefinition' export * from './JobResult' export * from './Link' -export * from './LoginRequiredError' export * from './SASjsConfig' export * from './SASjsRequest' export * from './Session'