function (context, options, callback) {
    // add the current request to the queue
    context.retryQueue.push([options, callback]);
    // bail if the token is currently being refreshed
    if (context.refreshActive) {
        return false;
    }
    // ready to refresh
    context.refreshActive = true;
    return request({
        uri: baseUrl + '/oauth2/token',
        method: 'POST',
        headers: {
            'Authorization': 'Basic ' + new Buffer(context.clientId + ':' + context.clientSecret).toString('base64'),
            'User-Agent': userAgent
        },
        form: {
            grant_type: 'client_credentials'
        }
    }, function (err, res, body) {
        context.refreshActive = false;
        // if anything but a 200 is returned from the token refresh call, we return the error to the
        // caller and blow out the retry queue
        if (res.statusCode != 200) {
            context.retryQueue = [];
            return callback && callback(res.body, res);
        }
        // set the access token on the connection
        var token = JSON.parse(body);
        context.accessToken = token.access_token;
        // process the queue of requests for the current connection
        while (0 < context.retryQueue.length) {
            var reqArgs = context.retryQueue.pop();
            context.apiRequest(reqArgs[0], reqArgs[1]);
        }
    });
}
function (context, options, callback) {
    // add the current request to the queue
    context.retryQueue.push([options, callback]);
    // bail if the token is currently being refreshed
    if (context.refreshActive) {
        return false;
    }
    // ready to refresh
    context.refreshActive = true;
    return request({
        uri: baseUrl + '/oauth2/token',
        method: 'POST',
        headers: {
            'Authorization': 'Basic ' + new Buffer(context.clientId + ':' + context.clientSecret).toString('base64'),
            'User-Agent': userAgent
        },
        form: {
            grant_type: 'client_credentials'
        }
    }, function (err, res, body) {
        context.refreshActive = false;
        // if anything but a 200 is returned from the token refresh call, we return the error to the
        // caller and blow out the retry queue
        if (res.statusCode != 200) {
            context.retryQueue = [];
            return callback && callback(res.body, res);
        }
        // set the access token on the connection
        var token = JSON.parse(body);
        context.accessToken = token.access_token;
        // process the queue of requests for the current connection
        while (0 < context.retryQueue.length) {
            var reqArgs = context.retryQueue.pop();
            context.apiRequest(reqArgs[0], reqArgs[1]);
        }
    });
}
function ( context , options , callback ) { // add the current request to the queue context . retryQueue . push ( [ options , callback ] ) ; // bail if the token is currently being refreshed if ( context . refreshActive ) { return false ; } // ready to refresh context . refreshActive = true ; return request ( { uri : baseUrl + '/oauth2/token' , method : 'POST' , headers : { 'Authorization' : 'Basic ' + new Buffer ( context . clientId + ':' + context . clientSecret ) . toString ( 'base64' ) , 'User-Agent' : userAgent } , form : { grant_type : 'client_credentials' } } , function ( err , res , body ) { context . refreshActive = false ; // if anything but a 200 is returned from the token refresh call, we return the error to the // caller and blow out the retry queue if ( res . statusCode != 200 ) { context . retryQueue = [ ] ; return callback && callback ( res . body , res ) ; } // set the access token on the connection var token = JSON . parse ( body ) ; context . accessToken = token . access_token ; // process the queue of requests for the current connection while ( 0 < context . retryQueue . length ) { var reqArgs = context . retryQueue . pop ( ) ; context . apiRequest ( reqArgs [ 0 ] , reqArgs [ 1 ] ) ; } } ) ; }
a private function to automatically refresh the access token when receiving a 401. Adds rejected requests to a queue to be processed
a private function to automatically refresh the access token when receiving a 401 . Adds rejected requests to a queue to be processed