Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import rp from 'request-promise'
- import { logger } from './logger'
- import Token from '../database/models/token'
- import Plugin from '../database/models/plugin'
- import Auth from './auth'
- import delay from './delay'
- export default async (options) => {
- try {
- return await rp(options)
- } catch (err) {
- if (err.name === 'StatusCodeError') {
- switch (err.statusCode) {
- case 401:
- logger.error('EXPIRED TOKEN', { scope: 'request' })
- const token = await Token.findOne({ access_token: options.headers.Authorization.replace(/Bearer /gi, '') })
- if (token) {
- const plugin = await Plugin.findOne({ client_id: token.client_id })
- const refreshedToken = await Auth.refreshToken(token.mall_id, token.client_id, plugin.client_secret)
- options.headers.Authorization = `Bearer ${refreshedToken.access_token}`
- return await exports.default(options)
- }
- break
- case 429:
- logger.error('LEAKY BUCKET', { scope: 'request' })
- await delay(1000)
- return await exports.default(options)
- }
- }
- throw err
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement