11import Axios from 'axios'
2+ import OAuthHandler from './oauthHandler'
23const defaultConfig = {
34 maxRequests : 5 ,
45 retryLimit : 5 ,
@@ -75,17 +76,17 @@ export function ConcurrencyQueue ({ axios, config }) {
7576 request . formdata = request . data
7677 request . data = transformFormData ( request )
7778 }
78- request . retryCount = request . retryCount || 0
79- if ( request . headers . authorization && request . headers . authorization !== undefined ) {
80- if ( this . config . authorization && this . config . authorization !== undefined ) {
81- request . headers . authorization = this . config . authorization
82- request . authorization = this . config . authorization
79+ if ( axios ?. oauth ?. accessToken ) {
80+ const isTokenExpired = axios . oauth . tokenExpiryTime && Date . now ( ) > axios . oauth . tokenExpiryTime ;
81+ if ( isTokenExpired ) {
82+ return refreshAccessToken ( ) . catch ( ( error ) => {
83+ throw new Error ( 'Failed to refresh access token: ' + error . message ) ;
84+ } ) ;
8385 }
84- delete request . headers . authtoken
85- } else if ( request . headers . authtoken && request . headers . authtoken !== undefined && this . config . authtoken && this . config . authtoken !== undefined ) {
86- request . headers . authtoken = this . config . authtoken
87- request . authtoken = this . config . authtoken
88- }
86+ }
87+
88+ request . retryCount = request ?. retryCount || 0
89+ setAuthorizationHeaders ( request ) ;
8990 if ( request . cancelToken === undefined ) {
9091 const source = Axios . CancelToken . source ( )
9192 request . cancelToken = source . token
@@ -108,6 +109,40 @@ export function ConcurrencyQueue ({ axios, config }) {
108109 } )
109110 }
110111
112+ const setAuthorizationHeaders = ( request ) => {
113+ if ( request . headers . authorization && request . headers . authorization !== undefined ) {
114+ if ( this . config . authorization && this . config . authorization !== undefined ) {
115+ request . headers . authorization = this . config . authorization
116+ request . authorization = this . config . authorization
117+ }
118+ delete request . headers . authtoken
119+ } else if ( request . headers . authtoken && request . headers . authtoken !== undefined && this . config . authtoken && this . config . authtoken !== undefined ) {
120+ request . headers . authtoken = this . config . authtoken
121+ request . authtoken = this . config . authtoken
122+ } else if ( axios ?. oauth ?. accessToken ) {
123+ // If OAuth access token is available in axios instance
124+ request . headers . authorization = `Bearer ${ axios . oauth . accessToken } ` ;
125+ request . authorization = `Bearer ${ axios . oauth . accessToken } ` ;
126+ delete request . headers . authtoken
127+ }
128+ }
129+
130+ //Refresh Access Token
131+ const refreshAccessToken = async ( ) => {
132+ try {
133+ await new OAuthHandler ( axios ) . refreshAccessToken ( ) ;
134+ this . paused = false ; // Resume the request queue once the token is refreshed
135+ this . running . forEach ( ( { request, resolve, reject } ) => {
136+ resolve ( request ) ; // Retry the queued requests
137+ } ) ;
138+ this . running = [ ] ; // Clear the running queue
139+ } catch ( error ) {
140+ this . paused = false ; // Ensure we stop queueing requests on failure
141+ this . running . forEach ( ( { reject } ) => reject ( error ) ) ; // Reject all queued requests
142+ this . running = [ ] ; // Clear the running queue
143+ }
144+ } ;
145+
111146 const delay = ( time , isRefreshToken = false ) => {
112147 if ( ! this . paused ) {
113148 this . paused = true
0 commit comments