diff --git a/src/SASjs.ts b/src/SASjs.ts index ce07b95..3153466 100644 --- a/src/SASjs.ts +++ b/src/SASjs.ts @@ -27,7 +27,6 @@ import { ComputeJobExecutor, JesJobExecutor, Sas9JobExecutor, - SasJsJobExecutor, FileUploader } from './job-execution' import { ErrorResponse } from './types/errors' @@ -63,7 +62,6 @@ export default class SASjs { private computeJobExecutor: JobExecutor | null = null private jesJobExecutor: JobExecutor | null = null private sas9JobExecutor: JobExecutor | null = null - private sasJsJobExecutor: JobExecutor | null = null constructor(config?: Partial) { this.sasjsConfig = { @@ -683,16 +681,7 @@ export default class SASjs { const validationResult = this.validateInput(data) if (validationResult.status) { - if (config.serverType === ServerType.Sasjs) { - return await this.sasJsJobExecutor!.execute( - sasJob, - data, - config, - loginRequiredCallback, - authConfig, - extraResponseAttributes - ) - } else if ( + if ( config.serverType !== ServerType.Sas9 && config.useComputeApi !== undefined && config.useComputeApi !== null @@ -1114,13 +1103,6 @@ export default class SASjs { this.sasViyaApiClient! ) - this.sasJsJobExecutor = new SasJsJobExecutor( - this.sasjsConfig.serverUrl, - this.sasjsConfig.serverType!, - this.jobsPath, - this.requestClient - ) - this.sas9JobExecutor = new Sas9JobExecutor( this.sasjsConfig.serverUrl, this.sasjsConfig.serverType!, diff --git a/src/file/generateFileUploadForm.ts b/src/file/generateFileUploadForm.ts index e358c08..8421327 100644 --- a/src/file/generateFileUploadForm.ts +++ b/src/file/generateFileUploadForm.ts @@ -1,9 +1,10 @@ +import * as NodeFormData from 'form-data' import { convertToCSV } from '../utils/convertToCsv' export const generateFileUploadForm = ( - formData: FormData, + formData: FormData | NodeFormData, data: any -): FormData => { +): FormData | NodeFormData => { for (const tableName in data) { if (!Array.isArray(data[tableName])) continue diff --git a/src/file/generateTableUploadForm.ts b/src/file/generateTableUploadForm.ts index 140cae4..450333b 100644 --- a/src/file/generateTableUploadForm.ts +++ b/src/file/generateTableUploadForm.ts @@ -1,7 +1,11 @@ +import * as NodeFormData from 'form-data' import { convertToCSV } from '../utils/convertToCsv' import { splitChunks } from '../utils/splitChunks' -export const generateTableUploadForm = (formData: FormData, data: any) => { +export const generateTableUploadForm = ( + formData: FormData | NodeFormData, + data: any +) => { const sasjsTables = [] const requestParams: any = {} let tableCounter = 0 diff --git a/src/job-execution/SasJsJobExecutor.ts b/src/job-execution/SasJsJobExecutor.ts deleted file mode 100644 index fd3e56e..0000000 --- a/src/job-execution/SasJsJobExecutor.ts +++ /dev/null @@ -1,131 +0,0 @@ -import { - AuthConfig, - ExtraResponseAttributes, - ServerType -} from '@sasjs/utils/types' -import { - ErrorResponse, - JobExecutionError, - LoginRequiredError -} from '../types/errors' -import { RequestClient } from '../request/RequestClient' -import { - isRelativePath, - appendExtraResponseAttributes, - getValidJson -} from '../utils' -import { BaseJobExecutor } from './JobExecutor' -import { parseWeboutResponse } from '../utils/parseWeboutResponse' - -export class SasJsJobExecutor extends BaseJobExecutor { - constructor( - serverUrl: string, - serverType: ServerType, - private jobsPath: string, - private requestClient: RequestClient - ) { - super(serverUrl, serverType) - } - - async execute( - sasJob: string, - data: any, - config: any, - loginRequiredCallback?: any, - authConfig?: AuthConfig, - extraResponseAttributes: ExtraResponseAttributes[] = [] - ) { - const loginCallback = loginRequiredCallback || (() => Promise.resolve()) - const program = isRelativePath(sasJob) - ? config.appLoc - ? config.appLoc.replace(/\/?$/, '/') + sasJob.replace(/^\//, '') - : sasJob - : sasJob - let apiUrl = `${config.serverUrl}${this.jobsPath}/?${'_program=' + program}` - - const requestParams = this.getRequestParams(config) - - const requestPromise = new Promise((resolve, reject) => { - this.requestClient!.post( - apiUrl, - { ...requestParams, ...data }, - authConfig?.access_token - ) - .then(async (res: any) => { - const parsedSasjsServerLog = res.result.log - .map((logLine: any) => logLine.line) - .join('\n') - - const resObj = { - result: res.result._webout, - log: parsedSasjsServerLog - } - this.requestClient!.appendRequest(resObj, sasJob, config.debug) - - let jsonResponse = res.result - - if (config.debug) { - if (typeof res.result._webout === 'object') { - jsonResponse = res.result._webout - } else { - const webout = parseWeboutResponse(res.result._webout, apiUrl) - jsonResponse = getValidJson(webout) - } - } else { - jsonResponse = getValidJson(res.result._webout) - } - - const responseObject = appendExtraResponseAttributes( - { result: jsonResponse }, - extraResponseAttributes - ) - resolve(responseObject) - }) - .catch(async (e: Error) => { - if (e instanceof JobExecutionError) { - this.requestClient!.appendRequest(e, sasJob, config.debug) - reject(new ErrorResponse(e?.message, e)) - } - - if (e instanceof LoginRequiredError) { - this.appendWaitingRequest(() => { - return this.execute( - sasJob, - data, - config, - loginRequiredCallback, - authConfig, - extraResponseAttributes - ).then( - (res: any) => { - resolve(res) - }, - (err: any) => { - reject(err) - } - ) - }) - - await loginCallback() - } else { - reject(new ErrorResponse(e?.message, e)) - } - }) - }) - - return requestPromise - } - - private getRequestParams(config: any): any { - const requestParams: any = {} - - if (config.debug) { - requestParams['_omittextlog'] = 'false' - requestParams['_omitsessionresults'] = 'false' - - requestParams['_debug'] = 131 - } - - return requestParams - } -} diff --git a/src/job-execution/WebJobExecutor.ts b/src/job-execution/WebJobExecutor.ts index 5100da4..bb54ca1 100644 --- a/src/job-execution/WebJobExecutor.ts +++ b/src/job-execution/WebJobExecutor.ts @@ -1,3 +1,4 @@ +import * as NodeFormData from 'form-data' import { AuthConfig, ExtraResponseAttributes, @@ -108,7 +109,8 @@ export class WebJobExecutor extends BaseJobExecutor { ...this.getRequestParams(config) } - let formData = new FormData() + let formData = + typeof FormData === 'undefined' ? new NodeFormData() : new FormData() if (data) { const stringifiedData = JSON.stringify(data) @@ -143,8 +145,18 @@ export class WebJobExecutor extends BaseJobExecutor { } } + const contentType = + formData instanceof NodeFormData + ? `multipart/form-data; boundary=${formData.getBoundary()}` + : undefined + const requestPromise = new Promise((resolve, reject) => { - this.requestClient!.post(apiUrl, formData, authConfig?.access_token) + this.requestClient!.post( + apiUrl, + formData, + authConfig?.access_token, + contentType + ) .then(async (res: any) => { const parsedSasjsServerLog = this.serverType === ServerType.Sasjs diff --git a/src/job-execution/index.ts b/src/job-execution/index.ts index 0fd44f7..f0025cb 100644 --- a/src/job-execution/index.ts +++ b/src/job-execution/index.ts @@ -3,5 +3,4 @@ export * from './FileUploader' export * from './JesJobExecutor' export * from './JobExecutor' export * from './Sas9JobExecutor' -export * from './SasJsJobExecutor' export * from './WebJobExecutor'