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:
@@ -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(
|
||||
|
||||
59
src/SASjs.ts
59
src/SASjs.ts
@@ -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;
|
||||
|
||||
@@ -38,6 +38,7 @@ export class SessionManager {
|
||||
);
|
||||
|
||||
await this.waitForSession(createdSession, etag);
|
||||
this.sessions.push(createdSession);
|
||||
return createdSession;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user