mirror of
https://github.com/sasjs/adapter.git
synced 2026-01-10 13:50:05 +00:00
fix(*): handle login required state, fix session creation logic
This commit is contained in:
@@ -661,7 +661,7 @@ export class SASViyaApiClient {
|
|||||||
contextName,
|
contextName,
|
||||||
accessToken,
|
accessToken,
|
||||||
"",
|
"",
|
||||||
false,
|
true,
|
||||||
data,
|
data,
|
||||||
debug
|
debug
|
||||||
);
|
);
|
||||||
@@ -864,12 +864,19 @@ export class SASViyaApiClient {
|
|||||||
if (accessToken) {
|
if (accessToken) {
|
||||||
requestInfo.headers = { Authorization: `Bearer ${accessToken}` };
|
requestInfo.headers = { Authorization: `Bearer ${accessToken}` };
|
||||||
}
|
}
|
||||||
|
let error;
|
||||||
const rootFolder = await this.request<Folder>(
|
const rootFolder = await this.request<Folder>(
|
||||||
`${this.serverUrl}${url}`,
|
`${this.serverUrl}${url}`,
|
||||||
requestInfo
|
requestInfo
|
||||||
).catch(() => null);
|
).catch((e) => {
|
||||||
|
error = e;
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
|
||||||
this.rootFolder = rootFolder?.result || null;
|
this.rootFolder = rootFolder?.result || null;
|
||||||
|
if (error) {
|
||||||
|
throw new Error(JSON.stringify(error));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async pollJobState(
|
private async pollJobState(
|
||||||
|
|||||||
59
src/SASjs.ts
59
src/SASjs.ts
@@ -387,6 +387,7 @@ export default class SASjs {
|
|||||||
loginRequiredCallback?: any,
|
loginRequiredCallback?: any,
|
||||||
accessToken?: string
|
accessToken?: string
|
||||||
) {
|
) {
|
||||||
|
sasJob = sasJob.startsWith("/") ? sasJob.replace("/", "") : sasJob;
|
||||||
if (
|
if (
|
||||||
this.sasjsConfig.serverType === ServerType.SASViya &&
|
this.sasjsConfig.serverType === ServerType.SASViya &&
|
||||||
this.sasjsConfig.contextName
|
this.sasjsConfig.contextName
|
||||||
@@ -498,36 +499,34 @@ export default class SASjs {
|
|||||||
|
|
||||||
sasjsWaitingRequest.requestPromise.promise = new Promise(
|
sasjsWaitingRequest.requestPromise.promise = new Promise(
|
||||||
async (resolve, reject) => {
|
async (resolve, reject) => {
|
||||||
const session = await this.checkSession();
|
resolve(
|
||||||
|
await this.sasViyaApiClient
|
||||||
if (!session.isLoggedIn) {
|
?.executeComputeJob(
|
||||||
if (loginRequiredCallback) loginRequiredCallback(true);
|
sasJob,
|
||||||
sasjsWaitingRequest.requestPromise.resolve = resolve;
|
this.sasjsConfig.contextName,
|
||||||
sasjsWaitingRequest.requestPromise.reject = reject;
|
this.sasjsConfig.debug,
|
||||||
this.sasjsWaitingRequests.push(sasjsWaitingRequest);
|
data,
|
||||||
} else {
|
accessToken
|
||||||
resolve(
|
)
|
||||||
await this.sasViyaApiClient
|
.then((response) => {
|
||||||
?.executeComputeJob(
|
if (!this.sasjsConfig.debug) {
|
||||||
sasJob,
|
this.appendSasjsRequest(null, sasJob, null);
|
||||||
this.sasjsConfig.contextName,
|
} else {
|
||||||
this.sasjsConfig.debug,
|
this.appendSasjsRequest(response, sasJob, null);
|
||||||
data,
|
}
|
||||||
accessToken
|
return JSON.parse(response!.result);
|
||||||
)
|
})
|
||||||
.then((response) => {
|
.catch((e) => {
|
||||||
if (!this.sasjsConfig.debug) {
|
if (e && e.includes(401)) {
|
||||||
this.appendSasjsRequest(null, sasJob, null);
|
if (loginRequiredCallback) loginRequiredCallback(true);
|
||||||
} else {
|
sasjsWaitingRequest.requestPromise.resolve = resolve;
|
||||||
this.appendSasjsRequest(response, sasJob, null);
|
sasjsWaitingRequest.requestPromise.reject = reject;
|
||||||
}
|
this.sasjsWaitingRequests.push(sasjsWaitingRequest);
|
||||||
return JSON.parse(response!.result);
|
} else {
|
||||||
})
|
reject({ MESSAGE: e || "Job execution failed" });
|
||||||
.catch((e) =>
|
}
|
||||||
reject({ MESSAGE: (e && e.message) || "Job execution failed" })
|
})
|
||||||
)
|
);
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
return sasjsWaitingRequest.requestPromise.promise;
|
return sasjsWaitingRequest.requestPromise.promise;
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ export class SessionManager {
|
|||||||
);
|
);
|
||||||
|
|
||||||
await this.waitForSession(createdSession, etag);
|
await this.waitForSession(createdSession, etag);
|
||||||
|
this.sessions.push(createdSession);
|
||||||
return createdSession;
|
return createdSession;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ export async function makeRequest<T>(
|
|||||||
? (res: Response) => res.json()
|
? (res: Response) => res.json()
|
||||||
: (res: Response) => res.text();
|
: (res: Response) => res.text();
|
||||||
let etag = null;
|
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.ok) {
|
||||||
if (response.status === 403) {
|
if (response.status === 403) {
|
||||||
const tokenHeader = response.headers.get("X-CSRF-HEADER");
|
const tokenHeader = response.headers.get("X-CSRF-HEADER");
|
||||||
@@ -32,8 +32,15 @@ export async function makeRequest<T>(
|
|||||||
return responseTransform(res);
|
return responseTransform(res);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
const body = await response.text();
|
||||||
|
return Promise.reject({ status: response.status, body });
|
||||||
}
|
}
|
||||||
} else {
|
} 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");
|
etag = response.headers.get("ETag");
|
||||||
return responseTransform(response);
|
return responseTransform(response);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user