1
0
mirror of https://github.com/sasjs/adapter.git synced 2025-12-11 01:14:36 +00:00

chore(imprvements): code changes for fileUploader

This commit is contained in:
Saad Jutt
2021-09-13 07:30:26 +05:00
parent 2cfba99bda
commit ec9dbd7ad6
6 changed files with 33 additions and 56 deletions

View File

@@ -3,21 +3,17 @@ import { UploadFile } from './types/UploadFile'
import { ErrorResponse, LoginRequiredError } from './types/errors'
import { RequestClient } from './request/RequestClient'
import { ServerType } from '@sasjs/utils/types'
import SASjs from './SASjs'
import { Server } from 'https'
import { SASjsConfig } from './types'
import { config } from 'process'
export class FileUploader {
constructor(
private sasjsConfig: SASjsConfig,
private jobsPath: string,
private requestClient: RequestClient
) {
if (this.sasjsConfig.serverUrl) isUrl(this.sasjsConfig.serverUrl)
}
constructor(private jobsPath: string, private requestClient: RequestClient) {}
public uploadFile(sasJob: string, files: UploadFile[], params: any) {
public async uploadFile(
sasJob: string,
files: UploadFile[],
params: any,
config: SASjsConfig
) {
if (files?.length < 1)
return Promise.reject(
new ErrorResponse('At least one file must be provided.')
@@ -33,8 +29,8 @@ export class FileUploader {
}
}
const program = this.sasjsConfig.appLoc
? this.sasjsConfig.appLoc.replace(/\/?$/, '/') + sasJob.replace(/^\//, '')
const program = config.appLoc
? config.appLoc.replace(/\/?$/, '/') + sasJob.replace(/^\//, '')
: sasJob
const uploadUrl = `${this.jobsPath}/?${
'_program=' + program
@@ -48,12 +44,9 @@ export class FileUploader {
const csrfToken = this.requestClient.getCsrfToken('file')
if (csrfToken) formData.append('_csrf', csrfToken.value)
if (this.sasjsConfig.debug) formData.append('_debug', '131')
if (
this.sasjsConfig.serverType === ServerType.SasViya &&
this.sasjsConfig.contextName
)
formData.append('_contextname', this.sasjsConfig.contextName)
if (config.debug) formData.append('_debug', '131')
if (config.serverType === ServerType.SasViya && config.contextName)
formData.append('_contextname', config.contextName)
const headers = {
'cache-control': 'no-cache',
@@ -66,15 +59,12 @@ export class FileUploader {
return this.requestClient
.post(uploadUrl, formData, undefined, 'application/json', headers)
.then(async (res) => {
this.requestClient!.appendRequest(res, sasJob, this.sasjsConfig.debug)
if (
this.sasjsConfig.serverType === ServerType.SasViya &&
this.sasjsConfig.debug
) {
this.requestClient.appendRequest(res, sasJob, config.debug)
if (config.serverType === ServerType.SasViya && config.debug) {
const jsonResponse = await parseSasViyaDebugResponse(
res.result as string,
this.requestClient,
this.sasjsConfig.serverUrl
config.serverUrl
)
return jsonResponse
}

View File

@@ -507,7 +507,7 @@ export default class SASjs {
...this.sasjsConfig,
...config
}
await this.setupConfiguration()
this.setupConfiguration()
}
/**
@@ -573,22 +573,16 @@ export default class SASjs {
* @param params - request URL parameters.
* @param overrideSasjsConfig - object to override existing config (optional)
*/
public uploadFile(
public async uploadFile(
sasJob: string,
files: UploadFile[],
params: any,
overrideSasjsConfig?: any
) {
const fileUploader = overrideSasjsConfig
? new FileUploader(
{ ...this.sasjsConfig, ...overrideSasjsConfig },
this.jobsPath,
this.requestClient!
)
: this.fileUploader ||
new FileUploader(this.sasjsConfig, this.jobsPath, this.requestClient!)
return fileUploader.uploadFile(sasJob, files, params)
return await this.fileUploader!.uploadFile(sasJob, files, params, {
...this.sasjsConfig,
...overrideSasjsConfig
})
}
/**
@@ -990,11 +984,7 @@ export default class SASjs {
)
}
this.fileUploader = new FileUploader(
this.sasjsConfig,
this.jobsPath,
this.requestClient
)
this.fileUploader = new FileUploader(this.jobsPath, this.requestClient)
this.webJobExecutor = new WebJobExecutor(
this.sasjsConfig.serverUrl,

View File

@@ -1,7 +1,6 @@
import { AuthConfig, ServerType } from '@sasjs/utils/types'
import { SASjsRequest } from '../types'
import { ExtraResponseAttributes } from '@sasjs/utils/types'
import { asyncForEach, parseGeneratedCode, parseSourceCode } from '../utils'
import { asyncForEach } from '../utils'
export type ExecuteFunction = () => Promise<any>
@@ -21,7 +20,6 @@ export abstract class BaseJobExecutor implements JobExecutor {
constructor(protected serverUrl: string, protected serverType: ServerType) {}
private waitingRequests: ExecuteFunction[] = []
private requests: SASjsRequest[] = []
abstract execute(
sasJob: string,

View File

@@ -90,7 +90,7 @@ export class WebJobExecutor extends BaseJobExecutor {
// file upload approach
try {
formData = generateFileUploadForm(formData, data)
} catch (e) {
} catch (e: any) {
return Promise.reject(new ErrorResponse(e?.message, e))
}
} else {
@@ -100,7 +100,7 @@ export class WebJobExecutor extends BaseJobExecutor {
generateTableUploadForm(formData, data)
formData = newFormData
requestParams = { ...requestParams, ...params }
} catch (e) {
} catch (e: any) {
return Promise.reject(new ErrorResponse(e?.message, e))
}
}

View File

@@ -182,7 +182,7 @@ export class RequestClient implements HttpClient {
})
}
public post<T>(
public async post<T>(
url: string,
data: any,
accessToken: string | undefined,
@@ -286,7 +286,7 @@ export class RequestClient implements HttpClient {
result: response.data,
etag: response.headers['etag'] as string
}
} catch (e) {
} catch (e: any) {
const response = e.response as AxiosResponse
if (response?.status === 403 || response?.status === 449) {
this.parseAndSetFileUploadCsrfToken(response)

View File

@@ -39,7 +39,6 @@ describe('FileUploader', () => {
}
const fileUploader = new FileUploader(
config,
'/jobs/path',
new RequestClient('https://sample.server.com')
)
@@ -51,7 +50,7 @@ describe('FileUploader', () => {
Promise.resolve({ data: sampleResponse })
)
const res = await fileUploader.uploadFile(sasJob, files, params)
const res = await fileUploader.uploadFile(sasJob, files, params, config)
expect(res).toEqual(JSON.parse(sampleResponse))
})
@@ -62,7 +61,7 @@ describe('FileUploader', () => {
const params = { table: 'libtable' }
const err = await fileUploader
.uploadFile(sasJob, files, params)
.uploadFile(sasJob, files, params, config)
.catch((err: any) => err)
expect(err.error.message).toEqual('At least one file must be provided.')
})
@@ -72,7 +71,7 @@ describe('FileUploader', () => {
const { files, params } = prepareFilesAndParams()
const err = await fileUploader
.uploadFile(sasJob, files, params)
.uploadFile(sasJob, files, params, config)
.catch((err: any) => err)
expect(err.error.message).toEqual('sasJob must be provided.')
})
@@ -86,7 +85,7 @@ describe('FileUploader', () => {
const { files, params } = prepareFilesAndParams()
const err = await fileUploader
.uploadFile(sasJob, files, params)
.uploadFile(sasJob, files, params, config)
.catch((err: any) => err)
expect(err.error.message).toEqual('You must be logged in to upload a file.')
})
@@ -100,7 +99,7 @@ describe('FileUploader', () => {
const { files, params } = prepareFilesAndParams()
const err = await fileUploader
.uploadFile(sasJob, files, params)
.uploadFile(sasJob, files, params, config)
.catch((err: any) => err)
expect(err.error.message).toEqual('File upload request failed.')
})
@@ -114,7 +113,7 @@ describe('FileUploader', () => {
const { files, params } = prepareFilesAndParams()
const err = await fileUploader
.uploadFile(sasJob, files, params)
.uploadFile(sasJob, files, params, config)
.catch((err: any) => err)
expect(err.error.message).toEqual('File upload request failed.')
})