1
0
mirror of https://github.com/sasjs/adapter.git synced 2025-12-11 09:24:35 +00:00

fix(*): handle login required state, fix session creation logic

This commit is contained in:
Krishna Acondy
2020-07-18 15:08:40 +01:00
parent a12244cf78
commit 8bf74d17e9
4 changed files with 47 additions and 33 deletions

View File

@@ -661,7 +661,7 @@ export class SASViyaApiClient {
contextName,
accessToken,
"",
false,
true,
data,
debug
);
@@ -864,12 +864,19 @@ export class SASViyaApiClient {
if (accessToken) {
requestInfo.headers = { Authorization: `Bearer ${accessToken}` };
}
let error;
const rootFolder = await this.request<Folder>(
`${this.serverUrl}${url}`,
requestInfo
).catch(() => null);
).catch((e) => {
error = e;
return null;
});
this.rootFolder = rootFolder?.result || null;
if (error) {
throw new Error(JSON.stringify(error));
}
}
private async pollJobState(

View File

@@ -387,6 +387,7 @@ export default class SASjs {
loginRequiredCallback?: any,
accessToken?: string
) {
sasJob = sasJob.startsWith("/") ? sasJob.replace("/", "") : sasJob;
if (
this.sasjsConfig.serverType === ServerType.SASViya &&
this.sasjsConfig.contextName
@@ -498,36 +499,34 @@ export default class SASjs {
sasjsWaitingRequest.requestPromise.promise = new Promise(
async (resolve, reject) => {
const session = await this.checkSession();
if (!session.isLoggedIn) {
if (loginRequiredCallback) loginRequiredCallback(true);
sasjsWaitingRequest.requestPromise.resolve = resolve;
sasjsWaitingRequest.requestPromise.reject = reject;
this.sasjsWaitingRequests.push(sasjsWaitingRequest);
} else {
resolve(
await this.sasViyaApiClient
?.executeComputeJob(
sasJob,
this.sasjsConfig.contextName,
this.sasjsConfig.debug,
data,
accessToken
)
.then((response) => {
if (!this.sasjsConfig.debug) {
this.appendSasjsRequest(null, sasJob, null);
} else {
this.appendSasjsRequest(response, sasJob, null);
}
return JSON.parse(response!.result);
})
.catch((e) =>
reject({ MESSAGE: (e && e.message) || "Job execution failed" })
)
);
}
resolve(
await this.sasViyaApiClient
?.executeComputeJob(
sasJob,
this.sasjsConfig.contextName,
this.sasjsConfig.debug,
data,
accessToken
)
.then((response) => {
if (!this.sasjsConfig.debug) {
this.appendSasjsRequest(null, sasJob, null);
} else {
this.appendSasjsRequest(response, sasJob, null);
}
return JSON.parse(response!.result);
})
.catch((e) => {
if (e && e.includes(401)) {
if (loginRequiredCallback) loginRequiredCallback(true);
sasjsWaitingRequest.requestPromise.resolve = resolve;
sasjsWaitingRequest.requestPromise.reject = reject;
this.sasjsWaitingRequests.push(sasjsWaitingRequest);
} else {
reject({ MESSAGE: e || "Job execution failed" });
}
})
);
}
);
return sasjsWaitingRequest.requestPromise.promise;

View File

@@ -38,6 +38,7 @@ export class SessionManager {
);
await this.waitForSession(createdSession, etag);
this.sessions.push(createdSession);
return createdSession;
}

View File

@@ -11,7 +11,7 @@ export async function makeRequest<T>(
? (res: Response) => res.json()
: (res: Response) => res.text();
let etag = null;
const result = await fetch(url, request).then((response) => {
const result = await fetch(url, request).then(async (response) => {
if (!response.ok) {
if (response.status === 403) {
const tokenHeader = response.headers.get("X-CSRF-HEADER");
@@ -32,8 +32,15 @@ export async function makeRequest<T>(
return responseTransform(res);
});
}
} else {
const body = await response.text();
return Promise.reject({ status: response.status, body });
}
} else {
if (response.redirected && response.url.includes("SASLogon/login")) {
const body = await response.text();
return Promise.reject({ status: 401, body });
}
etag = response.headers.get("ETag");
return responseTransform(response);
}