UNPKG

sharetribe-flex-sdk

Version:
59 lines (49 loc) 1.44 kB
import contextRunner from '../context_runner'; import SaveToken from './save_token'; import AddAuthTokenResponse from './add_auth_token_response'; /** Retries with a fresh anon token. `enter`: Save current `enterQueue` to `retryQueue` and save current `attempts` count `error`: Try to fetch new anon token. If successful, save it to `ctx` Changes to `ctx`: - add `anonTokenRetry` - add `authToken` */ export default class RetryWithAnonToken { enter(enterCtx) { const { enterQueue, anonTokenRetry: { attempts = 0 } = {} } = enterCtx; return { ...enterCtx, anonTokenRetry: { retryQueue: [...enterQueue, new RetryWithAnonToken()], attempts: attempts + 1, }, }; } error(errorCtx) { const { clientId, tokenStore, endpointInterceptors, anonTokenRetry: { retryQueue, attempts }, } = errorCtx; if (attempts > 1) { return errorCtx; } if (errorCtx.res && errorCtx.res.status === 401) { return contextRunner([ new SaveToken(), new AddAuthTokenResponse(), ...endpointInterceptors.auth.token, ])({ params: { client_id: clientId, grant_type: 'client_credentials', scope: 'public-read', }, tokenStore, }).then(({ authToken }) => ({ ...errorCtx, authToken, enterQueue: retryQueue, error: null })); } return errorCtx; } }