1
0
mirror of https://github.com/sasjs/adapter.git synced 2026-01-03 10:40:06 +00:00

Merge pull request #13 from sasjs/requestConfigOverride

Request config override
This commit is contained in:
Krishna Acondy
2020-07-22 19:53:33 +01:00
committed by GitHub
25 changed files with 3080 additions and 315 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -43,7 +43,7 @@ const requestRetryLimit = 5;
*
*/
export default class SASjs {
private sasjsConfig = new SASjsConfig();
private sasjsConfig: SASjsConfig = new SASjsConfig();
private jobsPath: string = "";
private logoutUrl: string = "";
private loginUrl: string = "";
@@ -60,7 +60,7 @@ export default class SASjs {
...defaultConfig,
...config,
};
this.setupConfiguration();
}
@@ -374,8 +374,9 @@ export default class SASjs {
* Process.) Is prepended at runtime with the value of `appLoc`.
* @param data - A JSON object containing one or more tables to be sent to
* SAS. Can be `null` if no inputs required.
* @param params - Provide any changes to the config here, for instance to
* enable / disable `debug`.
* @param config - Provide any changes to the config here, for instance to
* enable / disable `debug`. Any change provided will override the global config,
* for that particular function call.
* @param loginRequiredCallback - provide a function here to be called if the
* user is not logged in (eg to display a login form). The request will be
* resubmitted after logon.
@@ -383,40 +384,50 @@ export default class SASjs {
public async request(
sasJob: string,
data: any,
params?: any,
config: any = {},
loginRequiredCallback?: any,
accessToken?: string
) {
let requestResponse;
config = {
...this.sasjsConfig,
...config
}
sasJob = sasJob.startsWith("/") ? sasJob.replace("/", "") : sasJob;
if (
this.sasjsConfig.serverType === ServerType.SASViya &&
this.sasjsConfig.contextName
config.serverType === ServerType.SASViya &&
config.contextName
) {
if (this.sasjsConfig.useComputeApi) {
return await this.executeJobViaComputeApi(
if (config.useComputeApi) {
requestResponse = await this.executeJobViaComputeApi(
sasJob,
data,
params,
config,
loginRequiredCallback,
accessToken
);
} else {
return await this.executeJobViaJesApi(
requestResponse = await this.executeJobViaJesApi(
sasJob,
data,
params,
config,
loginRequiredCallback,
accessToken
);
}
} else {
return await this.executeJobViaJes(
requestResponse = await this.executeJobViaWeb(
sasJob,
data,
params,
config,
loginRequiredCallback
);
}
return requestResponse;
}
/**
@@ -483,7 +494,7 @@ export default class SASjs {
private async executeJobViaComputeApi(
sasJob: string,
data: any,
params?: any,
config: any,
loginRequiredCallback?: any,
accessToken?: string
) {
@@ -494,8 +505,7 @@ export default class SASjs {
reject: null,
},
SASjob: sasJob,
data,
params,
data
};
sasjsWaitingRequest.requestPromise.promise = new Promise(
@@ -504,13 +514,13 @@ export default class SASjs {
await this.sasViyaApiClient
?.executeComputeJob(
sasJob,
this.sasjsConfig.contextName,
this.sasjsConfig.debug,
config.contextName,
config.debug,
data,
accessToken
)
.then((response) => {
if (!this.sasjsConfig.debug) {
if (!config.debug) {
this.appendSasjsRequest(null, sasJob, null);
} else {
this.appendSasjsRequest(response, sasJob, null);
@@ -522,6 +532,7 @@ export default class SASjs {
if (loginRequiredCallback) loginRequiredCallback(true);
sasjsWaitingRequest.requestPromise.resolve = resolve;
sasjsWaitingRequest.requestPromise.reject = reject;
sasjsWaitingRequest.config = config;
this.sasjsWaitingRequests.push(sasjsWaitingRequest);
} else {
reject({ MESSAGE: e || "Job execution failed" });
@@ -536,7 +547,7 @@ export default class SASjs {
private async executeJobViaJesApi(
sasJob: string,
data: any,
params?: any,
config: any,
loginRequiredCallback?: any,
accessToken?: string
) {
@@ -547,8 +558,7 @@ export default class SASjs {
reject: null,
},
SASjob: sasJob,
data,
params,
data
};
sasjsWaitingRequest.requestPromise.promise = new Promise(
@@ -559,19 +569,20 @@ export default class SASjs {
if (loginRequiredCallback) loginRequiredCallback(true);
sasjsWaitingRequest.requestPromise.resolve = resolve;
sasjsWaitingRequest.requestPromise.reject = reject;
sasjsWaitingRequest.config = config;
this.sasjsWaitingRequests.push(sasjsWaitingRequest);
} else {
resolve(
await this.sasViyaApiClient
?.executeJob(
sasJob,
this.sasjsConfig.contextName,
this.sasjsConfig.debug,
config.contextName,
config.debug,
data,
accessToken
)
.then((response) => {
if (!this.sasjsConfig.debug) {
if (!config.debug) {
this.appendSasjsRequest(null, sasJob, null);
} else {
this.appendSasjsRequest(response, sasJob, null);
@@ -588,10 +599,10 @@ export default class SASjs {
return sasjsWaitingRequest.requestPromise.promise;
}
private async executeJobViaJes(
private async executeJobViaWeb(
sasJob: string,
data: any,
params?: any,
config: any,
loginRequiredCallback?: any
) {
const sasjsWaitingRequest: SASjsWaitingRequest = {
@@ -601,25 +612,22 @@ export default class SASjs {
reject: null,
},
SASjob: sasJob,
data,
params,
data
};
const program = this.sasjsConfig.appLoc
? this.sasjsConfig.appLoc.replace(/\/?$/, "/") + sasJob.replace(/^\//, "")
const program = config.appLoc
? config.appLoc.replace(/\/?$/, "/") + sasJob.replace(/^\//, "")
: sasJob;
const jobUri =
this.sasjsConfig.serverType === "SASVIYA"
config.serverType === "SASVIYA"
? await this.getJobUri(sasJob)
: "";
const apiUrl = `${this.sasjsConfig.serverUrl}${this.jobsPath}/?${
const apiUrl = `${config.serverUrl}${this.jobsPath}/?${
jobUri.length > 0
? "__program=" + program + "&_job=" + jobUri
: "_program=" + program
}`;
const inputParams = params ? params : {};
const requestParams = {
...inputParams,
...this.getRequestParams(),
};
@@ -631,7 +639,7 @@ export default class SASjs {
if (data) {
const stringifiedData = JSON.stringify(data);
if (
this.sasjsConfig.serverType === ServerType.SAS9 ||
config.serverType === ServerType.SAS9 ||
stringifiedData.length > 500000 ||
stringifiedData.includes(";")
) {
@@ -725,7 +733,7 @@ export default class SASjs {
if (
response.redirected &&
this.sasjsConfig.serverType === ServerType.SAS9
config.serverType === ServerType.SAS9
) {
isRedirected = true;
}
@@ -739,7 +747,7 @@ export default class SASjs {
) {
if (this.retryCount < requestRetryLimit) {
this.retryCount++;
this.request(sasJob, data, params).then(
this.request(sasJob, data).then(
(res: any) => resolve(res),
(err: any) => reject(err)
);
@@ -755,11 +763,12 @@ export default class SASjs {
if (loginRequiredCallback) loginRequiredCallback(true);
sasjsWaitingRequest.requestPromise.resolve = resolve;
sasjsWaitingRequest.requestPromise.reject = reject;
sasjsWaitingRequest.config = config;
this.sasjsWaitingRequests.push(sasjsWaitingRequest);
} else {
if (
this.sasjsConfig.serverType === ServerType.SAS9 &&
this.sasjsConfig.debug
config.serverType === ServerType.SAS9 &&
config.debug
) {
this.updateUsername(responseText);
const jsonResponseText = this.parseSAS9Response(responseText);
@@ -772,8 +781,8 @@ export default class SASjs {
});
}
} else if (
this.sasjsConfig.serverType === ServerType.SASViya &&
this.sasjsConfig.debug
config.serverType === ServerType.SASViya &&
config.debug
) {
try {
this.parseSASVIYADebugResponse(responseText).then(
@@ -821,8 +830,7 @@ export default class SASjs {
for (const sasjsWaitingRequest of this.sasjsWaitingRequests) {
this.request(
sasjsWaitingRequest.SASjob,
sasjsWaitingRequest.data,
sasjsWaitingRequest.params
sasjsWaitingRequest.data
).then(
(res: any) => {
sasjsWaitingRequest.requestPromise.resolve(res);

View File

@@ -10,5 +10,5 @@ export interface SASjsWaitingRequest {
};
SASjob: string;
data: any;
params?: any;
config?: any;
}