1
0
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:
Yury Shkoda
2021-07-27 16:03:41 +03:00
parent fb7a0f43e1
commit 0b9284e481

View File

@@ -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(