// create the resource request r({ uri: uri, method: resourceOptions.method, headers: authHeader, body: payload, json: true }, function(error, response, body) { if (error) { // On error, return the error object return cb(new Error(error), response.body); } else if (response.body.error && response.body.error === 'unauthorized' && response.statusCode === 401) { // On authorization error, try to authenticate return self.login(function() { self.resource(resourceOptions, cb); }); } else if (response.statusCode === 200 || response.statusCode === 201) { return cb(null, response.body); } else { return cb(new Error(response.body), response.body); } });
// make a new request to gain access_token r({ uri: actionUrl.login, method: 'POST', form: { client_id: this.clientId, client_secret: this.clientSecret, grant_type: 'client_credentials' }, json: true }, function(error, response, body) { if (error) { return cb(new Error(error), null); } else if (response.statusCode === 200 && body.access_token) { self.token = { access_token: body.access_token, token_type: body.token_type, expires_in: body.expires_in, scope: body.scope }; return cb(null, self.token); } else { return cb(new Error(response.body), null); } });
// create the query request r({ uri: uri, method: 'GET', headers: authHeader, qs: { query: '"' + queryOptions.query + '"', fields: queryOptions.fields, orderBy: queryOptions.orderBy, limit: queryOptions.limit, offset: queryOptions.offset }, json: true }, function(error, response, body) { if (error) { // On error, return the error object return cb(new Error(error), response.body); } else if (response.body.error && response.body.error === 'unauthorized' && response.statusCode === 401) { // On authorization error, try to authenticate return self.login(function() { self.query(queryOptions, cb); }); } else if (response.statusCode === 200) { return cb(null, response.body); } else { return cb(new Error(response.body), response.body); } });