mirror of
https://github.com/sasjs/adapter.git
synced 2026-01-04 11:10:05 +00:00
fix: web approach login callback and debug issue
This commit is contained in:
@@ -20,35 +20,50 @@ export class ComputeJobExecutor extends BaseJobExecutor {
|
|||||||
const waitForResult = true
|
const waitForResult = true
|
||||||
const expectWebout = true
|
const expectWebout = true
|
||||||
|
|
||||||
return this.sasViyaApiClient
|
const requestPromise = new Promise((resolve, reject) => {
|
||||||
?.executeComputeJob(
|
this.sasViyaApiClient
|
||||||
sasJob,
|
?.executeComputeJob(
|
||||||
config.contextName,
|
sasJob,
|
||||||
config.debug,
|
config.contextName,
|
||||||
data,
|
config.debug,
|
||||||
accessToken,
|
data,
|
||||||
waitForResult,
|
accessToken,
|
||||||
expectWebout
|
waitForResult,
|
||||||
)
|
expectWebout
|
||||||
.then((response) => {
|
)
|
||||||
this.appendRequest(response, sasJob, config.debug)
|
.then((response) => {
|
||||||
let responseJson
|
this.appendRequest(response, sasJob, config.debug)
|
||||||
|
|
||||||
return response.result
|
resolve(response.result)
|
||||||
|
})
|
||||||
|
.catch(async (e: Error) => {
|
||||||
|
if (e instanceof ComputeJobExecutionError) {
|
||||||
|
this.appendRequest(e, sasJob, config.debug)
|
||||||
|
|
||||||
return responseJson
|
reject(new ErrorResponse(e?.message, e))
|
||||||
})
|
}
|
||||||
.catch(async (e: Error) => {
|
|
||||||
if (e instanceof ComputeJobExecutionError) {
|
if (e instanceof LoginRequiredError) {
|
||||||
this.appendRequest(e, sasJob, config.debug)
|
await loginCallback()
|
||||||
}
|
this.appendWaitingRequest(() => {
|
||||||
if (e instanceof LoginRequiredError) {
|
return this.execute(
|
||||||
await loginCallback()
|
sasJob,
|
||||||
this.appendWaitingRequest(() =>
|
data,
|
||||||
this.execute(sasJob, data, config, loginRequiredCallback)
|
config,
|
||||||
)
|
loginRequiredCallback
|
||||||
}
|
).then(
|
||||||
return Promise.reject(new ErrorResponse(e?.message, e))
|
(res: any) => {
|
||||||
})
|
resolve(res)
|
||||||
|
},
|
||||||
|
(err: any) => {
|
||||||
|
reject(err)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
return requestPromise
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,24 +17,50 @@ export class JesJobExecutor extends BaseJobExecutor {
|
|||||||
accessToken?: string
|
accessToken?: string
|
||||||
) {
|
) {
|
||||||
const loginCallback = loginRequiredCallback || (() => Promise.resolve())
|
const loginCallback = loginRequiredCallback || (() => Promise.resolve())
|
||||||
return await this.sasViyaApiClient
|
|
||||||
?.executeJob(sasJob, config.contextName, config.debug, data, accessToken)
|
|
||||||
.then((response) => {
|
|
||||||
this.appendRequest(response, sasJob, config.debug)
|
|
||||||
|
|
||||||
return response.result
|
const requestPromise = new Promise((resolve, reject) => {
|
||||||
})
|
this.sasViyaApiClient
|
||||||
.catch(async (e: Error) => {
|
?.executeJob(
|
||||||
if (e instanceof JobExecutionError) {
|
sasJob,
|
||||||
this.appendRequest(e, sasJob, config.debug)
|
config.contextName,
|
||||||
}
|
config.debug,
|
||||||
if (e instanceof LoginRequiredError) {
|
data,
|
||||||
await loginCallback()
|
accessToken
|
||||||
this.appendWaitingRequest(() =>
|
)
|
||||||
this.execute(sasJob, data, config, loginRequiredCallback)
|
.then((response) => {
|
||||||
)
|
this.appendRequest(response, sasJob, config.debug)
|
||||||
}
|
|
||||||
return Promise.reject(new ErrorResponse(e?.message, e))
|
resolve(response.result)
|
||||||
})
|
})
|
||||||
|
.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)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
return requestPromise
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,11 @@ import { SASViyaApiClient } from '../SASViyaApiClient'
|
|||||||
import { isRelativePath } from '../utils'
|
import { isRelativePath } from '../utils'
|
||||||
import { BaseJobExecutor } from './JobExecutor'
|
import { BaseJobExecutor } from './JobExecutor'
|
||||||
|
|
||||||
|
export interface WaitingRequstPromise {
|
||||||
|
promise: Promise<any> | null
|
||||||
|
resolve: any
|
||||||
|
reject: any
|
||||||
|
}
|
||||||
export class WebJobExecutor extends BaseJobExecutor {
|
export class WebJobExecutor extends BaseJobExecutor {
|
||||||
constructor(
|
constructor(
|
||||||
serverUrl: string,
|
serverUrl: string,
|
||||||
@@ -80,30 +85,49 @@ export class WebJobExecutor extends BaseJobExecutor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.requestClient!.post(apiUrl, formData, undefined)
|
const requestPromise = new Promise((resolve, reject) => {
|
||||||
.then(async (res) => {
|
this.requestClient!.post(apiUrl, formData, undefined)
|
||||||
if (this.serverType === ServerType.SasViya && config.debug) {
|
.then(async (res) => {
|
||||||
const jsonResponse = await this.parseSasViyaDebugResponse(
|
if (this.serverType === ServerType.SasViya && config.debug) {
|
||||||
res.result as string
|
const jsonResponse = await this.parseSasViyaDebugResponse(
|
||||||
)
|
res.result as string
|
||||||
|
)
|
||||||
|
this.appendRequest(res, sasJob, config.debug)
|
||||||
|
resolve(jsonResponse)
|
||||||
|
}
|
||||||
this.appendRequest(res, sasJob, config.debug)
|
this.appendRequest(res, sasJob, config.debug)
|
||||||
return jsonResponse
|
resolve(res.result)
|
||||||
}
|
})
|
||||||
this.appendRequest(res, sasJob, config.debug)
|
.catch(async (e: Error) => {
|
||||||
return res.result
|
if (e instanceof JobExecutionError) {
|
||||||
})
|
this.appendRequest(e, sasJob, config.debug)
|
||||||
.catch(async (e: Error) => {
|
|
||||||
if (e instanceof JobExecutionError) {
|
reject(new ErrorResponse(e?.message, e))
|
||||||
this.appendRequest(e, sasJob, config.debug)
|
}
|
||||||
}
|
|
||||||
if (e instanceof LoginRequiredError) {
|
if (e instanceof LoginRequiredError) {
|
||||||
await loginCallback()
|
await loginCallback()
|
||||||
this.appendWaitingRequest(() =>
|
|
||||||
this.execute(sasJob, data, config, loginRequiredCallback)
|
this.appendWaitingRequest(() => {
|
||||||
)
|
return this.execute(
|
||||||
}
|
sasJob,
|
||||||
return Promise.reject(new ErrorResponse(e?.message, e))
|
data,
|
||||||
})
|
config,
|
||||||
|
loginRequiredCallback
|
||||||
|
).then(
|
||||||
|
(res: any) => {
|
||||||
|
resolve(res)
|
||||||
|
},
|
||||||
|
(err: any) => {
|
||||||
|
reject(err)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
return requestPromise
|
||||||
}
|
}
|
||||||
|
|
||||||
private parseSasViyaDebugResponse = async (response: string) => {
|
private parseSasViyaDebugResponse = async (response: string) => {
|
||||||
|
|||||||
@@ -376,6 +376,7 @@ export class RequestClient implements HttpClient {
|
|||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
result: parsedResponse as T,
|
result: parsedResponse as T,
|
||||||
|
log: response.data,
|
||||||
etag
|
etag
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,16 @@ const mockedAxios = axios as jest.Mocked<typeof axios>
|
|||||||
describe('ContextManager', () => {
|
describe('ContextManager', () => {
|
||||||
dotenv.config()
|
dotenv.config()
|
||||||
|
|
||||||
|
const sampleLogResponse = {
|
||||||
|
"items": [{
|
||||||
|
"attributes": {},
|
||||||
|
"createdBy": "fake creator",
|
||||||
|
"id": "fakeId",
|
||||||
|
"name": "Compute Context To Delete",
|
||||||
|
"version": 2,
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
|
||||||
const contextManager = new ContextManager(
|
const contextManager = new ContextManager(
|
||||||
process.env.SERVER_URL as string,
|
process.env.SERVER_URL as string,
|
||||||
new RequestClient(process.env.SERVER_URL as string)
|
new RequestClient(process.env.SERVER_URL as string)
|
||||||
@@ -448,9 +458,12 @@ describe('ContextManager', () => {
|
|||||||
Promise.resolve({ data: sampleResponseGetComputeContextByName })
|
Promise.resolve({ data: sampleResponseGetComputeContextByName })
|
||||||
)
|
)
|
||||||
|
|
||||||
|
sampleLogResponse.items[0].name = 'updated name'
|
||||||
|
|
||||||
const expectedResponse = {
|
const expectedResponse = {
|
||||||
etag: '',
|
etag: '',
|
||||||
result: sampleResponseGetComputeContextByName
|
result: sampleResponseGetComputeContextByName,
|
||||||
|
log: sampleLogResponse
|
||||||
}
|
}
|
||||||
|
|
||||||
await expect(
|
await expect(
|
||||||
@@ -577,9 +590,12 @@ describe('ContextManager', () => {
|
|||||||
Promise.resolve({ data: sampleResponseDeletedContext })
|
Promise.resolve({ data: sampleResponseDeletedContext })
|
||||||
)
|
)
|
||||||
|
|
||||||
|
sampleLogResponse.items[0].name = 'Compute Context To Delete'
|
||||||
|
|
||||||
const expectedResponse = {
|
const expectedResponse = {
|
||||||
etag: '',
|
etag: '',
|
||||||
result: sampleResponseDeletedContext
|
result: sampleResponseDeletedContext,
|
||||||
|
log: sampleLogResponse
|
||||||
}
|
}
|
||||||
|
|
||||||
await expect(
|
await expect(
|
||||||
|
|||||||
@@ -25,11 +25,20 @@ describe('SessionManager', () => {
|
|||||||
version: 1
|
version: 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const sampleLogResponse = {
|
||||||
|
"links": [],
|
||||||
|
"name": "SYSJOBID",
|
||||||
|
"ok": true,
|
||||||
|
"scope": "GLOBAL",
|
||||||
|
"value": "25218",
|
||||||
|
"version": 1,
|
||||||
|
}
|
||||||
|
|
||||||
mockedAxios.get.mockImplementation(() =>
|
mockedAxios.get.mockImplementation(() =>
|
||||||
Promise.resolve({ data: sampleResponse })
|
Promise.resolve({ data: sampleResponse })
|
||||||
)
|
)
|
||||||
|
|
||||||
const expectedResponse = { etag: '', result: sampleResponse }
|
const expectedResponse = { etag: '', result: sampleResponse, log: sampleLogResponse}
|
||||||
|
|
||||||
await expect(
|
await expect(
|
||||||
sessionManager.getVariable(
|
sessionManager.getVariable(
|
||||||
|
|||||||
Reference in New Issue
Block a user