mirror of
https://github.com/sasjs/adapter.git
synced 2026-01-03 18:50:05 +00:00
75 lines
1.9 KiB
TypeScript
75 lines
1.9 KiB
TypeScript
import { AuthConfig, ServerType } from '@sasjs/utils/types'
|
|
import { SASViyaApiClient } from '../SASViyaApiClient'
|
|
import {
|
|
ErrorResponse,
|
|
ComputeJobExecutionError,
|
|
LoginRequiredError
|
|
} from '../types/errors'
|
|
import { BaseJobExecutor } from './JobExecutor'
|
|
|
|
export class ComputeJobExecutor extends BaseJobExecutor {
|
|
constructor(serverUrl: string, private sasViyaApiClient: SASViyaApiClient) {
|
|
super(serverUrl, ServerType.SasViya)
|
|
}
|
|
|
|
async execute(
|
|
sasJob: string,
|
|
data: any,
|
|
config: any,
|
|
loginRequiredCallback?: any,
|
|
authConfig?: AuthConfig
|
|
) {
|
|
const loginCallback = loginRequiredCallback || (() => Promise.resolve())
|
|
const waitForResult = true
|
|
const expectWebout = true
|
|
|
|
const requestPromise = new Promise((resolve, reject) => {
|
|
this.sasViyaApiClient
|
|
?.executeComputeJob(
|
|
sasJob,
|
|
config.contextName,
|
|
config.debug,
|
|
data,
|
|
authConfig,
|
|
waitForResult,
|
|
expectWebout
|
|
)
|
|
.then((response) => {
|
|
this.appendRequest(response, sasJob, config.debug)
|
|
|
|
resolve(response.result)
|
|
})
|
|
.catch(async (e: Error) => {
|
|
if (e instanceof ComputeJobExecutionError) {
|
|
this.appendRequest(e, sasJob, config.debug)
|
|
|
|
reject(new ErrorResponse(e?.message, e))
|
|
}
|
|
|
|
if (e instanceof LoginRequiredError) {
|
|
await loginCallback()
|
|
this.appendWaitingRequest(() => {
|
|
return this.execute(
|
|
sasJob,
|
|
data,
|
|
config,
|
|
loginRequiredCallback
|
|
).then(
|
|
(res: any) => {
|
|
resolve(res)
|
|
},
|
|
(err: any) => {
|
|
reject(err)
|
|
}
|
|
)
|
|
})
|
|
} else {
|
|
reject(new ErrorResponse(e?.message, e))
|
|
}
|
|
})
|
|
})
|
|
|
|
return requestPromise
|
|
}
|
|
}
|