Advertisement
Guest User

Untitled

a guest
May 23rd, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import rp from 'request-promise'
  2. import { logger } from './logger'
  3.  
  4. import Token from '../database/models/token'
  5. import Plugin from '../database/models/plugin'
  6.  
  7. import Auth from './auth'
  8. import delay from './delay'
  9.  
  10. export default async (options) => {
  11.  
  12.   try {
  13.     return await rp(options)
  14.   } catch (err) {
  15.     if (err.name === 'StatusCodeError') {
  16.       switch (err.statusCode) {
  17.         case 401:
  18.           logger.error('EXPIRED TOKEN', { scope: 'request' })
  19.           const token = await Token.findOne({ access_token: options.headers.Authorization.replace(/Bearer /gi, '') })
  20.           if (token) {
  21.             const plugin = await Plugin.findOne({ client_id: token.client_id })
  22.             const refreshedToken = await Auth.refreshToken(token.mall_id, token.client_id, plugin.client_secret)
  23.             options.headers.Authorization = `Bearer ${refreshedToken.access_token}`
  24.             return await exports.default(options)
  25.           }
  26.           break
  27.         case 429:
  28.           logger.error('LEAKY BUCKET', { scope: 'request' })
  29.           await delay(1000)
  30.           return await exports.default(options)
  31.       }
  32.     }
  33.     throw err
  34.   }
  35. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement