mirror of
https://github.com/sasjs/adapter.git
synced 2026-01-07 12:30:06 +00:00
Merge pull request #13 from sasjs/requestConfigOverride
Request config override
This commit is contained in:
100
src/SASjs.ts
100
src/SASjs.ts
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user