mirror of
https://github.com/sasjs/adapter.git
synced 2026-01-07 12:30:06 +00:00
refactor(session): improve waitForSession method
This commit is contained in:
@@ -153,71 +153,71 @@ export class SessionManager {
|
|||||||
session: Session,
|
session: Session,
|
||||||
etag: string | null,
|
etag: string | null,
|
||||||
accessToken?: string
|
accessToken?: string
|
||||||
) {
|
): Promise<string> {
|
||||||
const logger = process.logger || console
|
const logger = process.logger || console
|
||||||
|
|
||||||
let sessionState = session.state
|
let sessionState = session.state
|
||||||
|
|
||||||
const stateLink = session.links.find((l: any) => l.rel === 'state')
|
const stateLink = session.links.find((l: any) => l.rel === 'state')
|
||||||
|
|
||||||
return new Promise(async (resolve) => {
|
if (
|
||||||
if (
|
sessionState === 'pending' ||
|
||||||
sessionState === 'pending' ||
|
sessionState === 'running' ||
|
||||||
sessionState === 'running' ||
|
sessionState === ''
|
||||||
sessionState === ''
|
) {
|
||||||
) {
|
if (stateLink) {
|
||||||
if (stateLink) {
|
if (this.debug && !this.printedSessionState.printed) {
|
||||||
if (this.debug && !this.printedSessionState.printed) {
|
logger.info('Polling session status...')
|
||||||
logger.info('Polling session status...')
|
|
||||||
|
|
||||||
this.printedSessionState.printed = true
|
this.printedSessionState.printed = true
|
||||||
}
|
|
||||||
|
|
||||||
const { result: state, responseStatus: responseStatus } =
|
|
||||||
await this.getSessionState(
|
|
||||||
`${this.serverUrl}${stateLink.href}?wait=30`,
|
|
||||||
etag!,
|
|
||||||
accessToken
|
|
||||||
).catch((err) => {
|
|
||||||
throw prefixMessage(err, 'Error while getting session state.')
|
|
||||||
})
|
|
||||||
|
|
||||||
sessionState = state.trim()
|
|
||||||
|
|
||||||
if (this.debug && this.printedSessionState.state !== sessionState) {
|
|
||||||
logger.info(`Current session state is '${sessionState}'`)
|
|
||||||
|
|
||||||
this.printedSessionState.state = sessionState
|
|
||||||
this.printedSessionState.printed = false
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!sessionState) {
|
|
||||||
const stateError = new NoSessionStateError(
|
|
||||||
responseStatus,
|
|
||||||
this.serverUrl + stateLink.href,
|
|
||||||
session.links.find((l: any) => l.rel === 'log')?.href as string
|
|
||||||
)
|
|
||||||
|
|
||||||
if (
|
|
||||||
!loggedErrors.find(
|
|
||||||
(err: NoSessionStateError) =>
|
|
||||||
err.serverResponseStatus === stateError.serverResponseStatus
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
loggedErrors.push(stateError)
|
|
||||||
|
|
||||||
logger.info(stateError.message)
|
|
||||||
}
|
|
||||||
|
|
||||||
resolve(this.waitForSession(session, etag, accessToken))
|
|
||||||
}
|
|
||||||
|
|
||||||
resolve(sessionState)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const { result: state, responseStatus: responseStatus } =
|
||||||
|
await this.getSessionState(
|
||||||
|
`${this.serverUrl}${stateLink.href}?wait=30`,
|
||||||
|
etag!,
|
||||||
|
accessToken
|
||||||
|
).catch((err) => {
|
||||||
|
throw prefixMessage(err, 'Error while getting session state.')
|
||||||
|
})
|
||||||
|
|
||||||
|
sessionState = state.trim()
|
||||||
|
|
||||||
|
if (this.debug && this.printedSessionState.state !== sessionState) {
|
||||||
|
logger.info(`Current session state is '${sessionState}'`)
|
||||||
|
|
||||||
|
this.printedSessionState.state = sessionState
|
||||||
|
this.printedSessionState.printed = false
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!sessionState) {
|
||||||
|
const stateError = new NoSessionStateError(
|
||||||
|
responseStatus,
|
||||||
|
this.serverUrl + stateLink.href,
|
||||||
|
session.links.find((l: any) => l.rel === 'log')?.href as string
|
||||||
|
)
|
||||||
|
|
||||||
|
if (
|
||||||
|
!loggedErrors.find(
|
||||||
|
(err: NoSessionStateError) =>
|
||||||
|
err.serverResponseStatus === stateError.serverResponseStatus
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
loggedErrors.push(stateError)
|
||||||
|
|
||||||
|
logger.info(stateError.message)
|
||||||
|
}
|
||||||
|
|
||||||
|
return await this.waitForSession(session, etag, accessToken)
|
||||||
|
}
|
||||||
|
|
||||||
|
return sessionState
|
||||||
} else {
|
} else {
|
||||||
resolve(sessionState)
|
throw 'Error while getting session state link.'
|
||||||
}
|
}
|
||||||
})
|
} else {
|
||||||
|
return sessionState
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async getSessionState(
|
private async getSessionState(
|
||||||
|
|||||||
Reference in New Issue
Block a user