mirror of
https://github.com/sasjs/adapter.git
synced 2026-01-03 18:50:05 +00:00
72 lines
1.8 KiB
TypeScript
72 lines
1.8 KiB
TypeScript
import { ServerType } from '@sasjs/utils/types'
|
|
import { SASViyaApiClient } from '../SASViyaApiClient'
|
|
import {
|
|
ErrorResponse,
|
|
JobExecutionError,
|
|
LoginRequiredError
|
|
} from '../types/errors'
|
|
import { BaseJobExecutor } from './JobExecutor'
|
|
|
|
export class JesJobExecutor extends BaseJobExecutor {
|
|
constructor(serverUrl: string, private sasViyaApiClient: SASViyaApiClient) {
|
|
super(serverUrl, ServerType.SasViya)
|
|
}
|
|
|
|
async execute(
|
|
sasJob: string,
|
|
data: any,
|
|
config: any,
|
|
loginRequiredCallback?: any,
|
|
accessToken?: string
|
|
) {
|
|
const loginCallback = loginRequiredCallback || (() => Promise.resolve())
|
|
|
|
const requestPromise = new Promise((resolve, reject) => {
|
|
this.sasViyaApiClient
|
|
?.executeJob(
|
|
sasJob,
|
|
config.contextName,
|
|
config.debug,
|
|
data,
|
|
accessToken
|
|
)
|
|
.then((response) => {
|
|
this.appendRequest(response, sasJob, config.debug)
|
|
|
|
resolve(response)
|
|
})
|
|
.catch(async (e: Error) => {
|
|
if (e instanceof JobExecutionError) {
|
|
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
|
|
}
|
|
}
|