function throttledRequest() { var requestArgs = arguments; limiter.removeTokens(1, function () { request.apply(null, requestArgs); }); }
function throttledRequest() { const requestArgs = arguments; limiter.removeTokens(1, () => { request.apply(null, requestArgs); }); }
var getLatLon = function (searchString, callback) { nominatimLimiter.removeTokens(1, function() { request.get({ 'url': 'http://nominatim.openstreetmap.org/search', 'headers': { 'User-Agent': process.env.USER_AGENT }, 'qs': { 'format': 'json', 'q': searchString }, 'json': false }, function (error, response, body) { if (error) { callback(error); return; } try { body = JSON.parse(body); } catch(err) { throw new Error("Nominatim did not return valid JSON content. Perhaps you broke the usage policy? Aborting."); } if (body.length === 0) { // the call to the API could not find anything callback(new Error("Nominatim did not return any results.")); return; } callback(error, { 'lat': body[0].lat, 'lon': body[0].lon }); }); }); };
function saveToParse(data, className, idKey, cb) { var CN = Parse.Object.extend(className); var query = new Parse.Query(CN); query.equalTo(idKey, data[idKey]); parseLimiter.removeTokens(1, function() { query.find({ success: function(results) { var obj; if (results.length) { obj = results[0]; } else { obj = new CN(); } obj.set(data); parseLimiter.removeTokens(1, function() { obj.save(null, { success: function(o) { cb(o); }, error: function(o, e) { console.error(e); } }); }); } }); }); }
function getRdio(){ if (track.releases && track.releases.rdio && track.releases.rdio.length > 0){ lmtRdio.removeTokens(1, function(er, remainingRequests) { rdio.makeRequest('get', {'keys':track.releases.rdio.join(',')}, function(er, r){ if (er || r.status != 'ok'){ cb(er); }else{ var i = 0; for (rid in r.result){ try{ track.images.push(r.result[rid].icon); if(r.result[rid].releaseDate){ track.releaseDate = r.result[rid].releaseDate; } }catch(e){} if (i == track.releases.rdio.length-1){ getMb(); } i++; } } }); }); }else{ getMb(); } }
exec('echoprint-codegen "' + fname + '"', function(er, sout, serr){ if (er) return cb('local fingerprint: ' + er); if (serr) return cb('local fingerprint: ' + serr); var data = JSON.parse(sout)[0]; if (data.error){ return cb('local fingerprint: ' + data.error); } lmtEco.removeTokens(1, function(er, remainingRequests) { var record = { "code": data.code }; if (data.metadata){ record.metadata = data.metadata; } var r = request.post('http://developer.echonest.com/api/v4/song/identify?api_key=' + module.exports.secrets['echo'].key + '&format=json', function (er, r, body) { if (er) return cb('remote echo: ' + er); var bod = JSON.parse(body); if (bod.response.status.code !=0){ return cb('remote echo: ' + bod.response.status.message); } cb(null, bod.response.songs[0]); }); var form = r.form(); form.append('query', JSON.stringify(record)); buckets.forEach(function(bucket){ form.append('bucket', bucket); }); }); });
handler: async (params) => { if (params[0].toLowerCase() === 'languages') return 'You can find a list of languages here - https://msdn.microsoft.com/en-us/library/hh456380.aspx' if (!params[1]) return if (this.transLimiter.tryRemoveTokens(1)) { let toL = params.shift() , fromL = 'en' if (toL.indexOf(':') > -1) { let spl = toL.split(':') toL = spl[1] fromL = spl[0] } let resp = await this.transApi.translateAsync({ text: params.join(' '), from: fromL, to: toL }) return `${resp} (\`${fromL}:${toL}\`)` } // silently drop }
function fetchComments(subreddit, callback) { limiter.removeTokens(1, function () { client.get(subreddit + ':last.comment.id', function (result, commentId) { var url = 'http://reddit.com/r/' + subreddit + '/comments.json'; request({ url: url, json: true }, function (error, response, body) { var comments = []; if (!error && response.statusCode === 200) { for (var comment of body.data.children) { if (comment.data.name == commentId) break; comments.push(comment); } } else { console.log(response); } callback(comments); }); }); }); }
var get = function (callback, params, path) { var url = host + path; if (debug) console.log('get: ' + url); // Throttle requests limiter.removeTokens(1, function (err, callbacks) { // err will only be set if we request more than the maximum number of // requests we set in the constructor // remainingRequests tells us how many additional requests could be sent // right this moment console.log('running limited request' + limiter.getTokensRemaining()); request(url, function (error, response, body) { if (!error && response.statusCode == 200) { if (debug) console.log('response body: ' + body); callback(error, body); } else if (error) { console.log('error: ' + err); } }); }); };
this.get = function (state, city, callback) { var url = urljoin(host, apiKey, 'conditions', 'q', state, city + format); if (debug) { console.log('Send HTTP request: ' + url); } limiter.removeTokens(1, function(err, remainingRequests) { if (debug) { console.log('remainingRequests=', remainingRequests); } if (remainingRequests < 0) { console.log('Your wunderground API key exceeded its allotted usage today (' + '10 calls per minute limit).'); //callback(false, body); } else { // Send http request if the token is available request(url, function (error, response, body) { if (!error && response.statusCode == 200) { if (debug) { //console.log('response body: ' + body); } callback(error, body); } else { console.log('Request failed!'); } }); } }); };
return new Promise(function(resolve, reject) { requestLimit.removeTokens(1, () => { request(options, function(error, response, body) { if (error) reject(error); else resolve({response: response, body: body}); }); }); });
function get(url, callback) { limiter.removeTokens(1, function(err, remainingRequests) { request(url, function(e, response, content) { if (e) { console.log("error when fetching " + url + " : " + e); } else { callback(response, content); } }); }); }
handler: async () => { if (this.meowLimiter.tryRemoveTokens(1)) { let cat = (await axios.get('http://random.cat/meow')).data if (!cat.file) throw new Error('no cat file/api broke') return `meow! ${encodeURI(cat.file)}` } // otherwise silently drop command }
function rateLimiter (req, res, next) { limiter.removeTokens(1, function(err, remainingRequests) { if (remainingRequests < 0) { res.writeHead(429, {'Content-Type': 'text/plain;charset=UTF-8'}); res.end('Too Many Requests - your IP is being rate limited'+'\n'+'Need more responses? info@bitcharts.io'); }else{ return next(); } }); }
function throttledPriceLookup (asin, callback) { var workOffline = process.env.OFFLINE; if (workOffline) { return callback(null, {}); } limiter.removeTokens(1, function(err) { if (err) { return callback(err); } priceAsin.fetch(asin, callback); }); }
_.times(pageCount, function(idx) { var pageNumber = idx + 1; if (isCachedPage(pageNumber)) { page = RSVP.resolve(loadCachedPage(pageNumber)); progress(page); } else { limiter.removeTokens(1, function(err, remaning) { page = getPage(idx + 1); progress(page); }); } });
var withdrawalQueue = async.queue(function (task, callback) { limiter.removeTokens(1, function (err, remainingRequests) { if (remainingRequests < 0) { callback(true); } UserService.getBalance(task.userId, 1).then(function (result) { if (result) { callback(null, result); } }); }); }, 1);
'fn': function (callback) { var options = { url: 'http://forum15.hkgolden.com/ProfilePage.aspx?userid={}'.format(req.params.id), headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0', 'Referer': 'http://forum15.hkgolden.com' }, timeout: REQUEST_TIMEOUT }; desktopLimiter.removeTokens(1, function (err, remainingRequests) { if (err) { console.log(err); } request(options, function (error, response, body) { if (error !== null && 'code' in error && error.code === 'ETIMEDOUT') { req.code = 503; req.result = 'Timed out connecting to upstream.'; callback(); return; } if (error || response.statusCode !== 200) { req.code = 503; req.result = 'Server has received an invalid response from upstream.'; callback(); return; } var $ = cheerio.load(body); var websiteField = $('#ctl00_ContentPlaceHolder1_lb_website'); if (!websiteField.length) { req.code = 503; req.result = 'Server has received an invalid response from upstream.'; callback(); return; } var publicToken = websiteField.text().trim(); if (publicToken !== db['accounts'][req.params.id]['public_token']) { req.code = 417; req.result = 'Fetched public token does not match database\'s record.'; callback(); return; } db['accounts'][req.params.id]['verified'] = true; db['accounts'][req.params.id]['private_token'] = db['accounts'][req.params.id]['pending_private_token']; req.result = 'Successfully verified this account or this new private token.'; saveDb(); callback(); }); }); },
say (channel, message, action = false) { if (!this.chatLimiter.tryRemoveTokens(1)) { return Xikbot.error('Could not send response, rate limited') } if (channel.indexOf('#') === -1) { channel = `#${channel}` } if (!action) { message = message.replace(/^[.|/]+/i, '') } this.client[action ? 'action' : 'say'](channel, message) }
respondToEvent(type, value) { this.limiter.removeTokens(1, () => { if(type == 1){ this.log(`Got temperatur update: ${value} for ${this.name}`) this.service.getCharacteristic(this.Characteristic.CurrentTemperature) .setValue(parseFloat(value) ) }else{ this.log(`Got humidity update: ${value} for ${this.name}`) this.service.getCharacteristic(this.Characteristic.CurrentRelativeHumidity) .setValue(parseFloat(value) ) } }) }
join (channel) { if (typeof channel === 'object') { return channel.forEach(channel => this.join(channel)) } if (channel.indexOf('#') === -1) { channel = `#${channel}` } this.joinLimiter.removeTokens(1, () => { this.client.join(channel) ModuleManager.loadConfig(channel.substr(1)) .catch(e => Log.error(e.stack)) EventManager.emit('channel:join', channel) }) }
function fetchRottenTomatoesId(review) { var deferred = Q.defer(); rtLimiter.removeTokens(1, function() { Request.get(review.rt_url, function(err, response, body) { if (!err && response && response.statusCode === 200 && body) { var rtId = findRottenTomatoesId(body); deferred.resolve(rtId); } else { console.log('Rotten Tomatoes error: ' + review.rt_url); deferred.reject(); } }); }); return deferred.promise; }
facebookRequest(url_orig, limit, function (err) { if (err && err.body && err.body.error && err.body.error.code === 613) { // We have to purge requests, we hit rate limit // We purge half each time (to allow faster recovery) var requests = parseInt(facebookLimiter.tokenBucket.content / 2) || 1; purgeWarning(requests); facebookLimiter.removeTokens(requests, function(err, remainingRequests) { purgedWarning(remainingRequests); }); } processQueue(); var args = _.toArray(arguments); if (err) { args[0] = err.error } cb.apply(this, args); }, payload);
function processQueue(purge_requests) { var f = facebookQueue.pop(); if (!f) { return; } if (facebookQueue.length > 1000) { // Ups, queue is really long queueWarning(); } facebookLimiter.removeTokens(1, function(err, remainingRequests) { f(); if (remainingRequests < 10) { limiterWarning(remainingRequests); } }); }
success: function(results) { var obj; if (results.length) { obj = results[0]; } else { obj = new CN(); } obj.set(data); parseLimiter.removeTokens(1, function() { obj.save(null, { success: function(o) { cb(o); }, error: function(o, e) { console.error(e); } }); }); }
repos.forEach(repo => { if (repo.status === 404) { console.log(`${repo.fullName} (${repo.status} status, skipping)`) return } if (Array.isArray(repo.releases)) { console.log(`${repo.fullName} (already has ${repo.releases.length} releases, skipping)`) return } limiter.removeTokens(1, function () { octo.repos(repo.owner.login, repo.name).releases.fetch({per_page: 100}) .then(releases => { repo.releases = releases repo.save(`${repo.releases.length} releases`) }) }) })
function callApi() { limiter.removeTokens(1, function(err, remainingRequests) { if (err || remainingRequests < 1) { console.log('remaining requests:', remainingRequests); deferred.reject(new Error({ status_code: 500, status_text: 'To many calls to the API' })); } else { http.get(endpoint, function(res) { var data = []; res .on('data', function(chunk) { data.push(chunk); }) .on('end', function() { data = data.join('').trim(); var result; try { result = JSON.parse(data); } catch(e) { result = { status_code: 500, status_text: 'JSON parse failed' }; deferred.reject(new Error(result)); } cacheWeather(key, { timestamp: Date.now(), locale: location, lookupType: lookupType, data: JSON.stringify(result) }); deferred.resolve(result); }); //end res }).on('error', function(err) { deferred.reject(new Error(err)); }); } // end if err }); //end api lookup } //end function callApi()
// // Worker function // function openCalaisEnrich (content, cb) { // // Set up the headers // var postOptions = { host : "api.opencalais.com", port : "80", path : "/tag/rs/enrich", method : "POST", headers : { "Content-Type" : "text/raw", "Content-Length" : content.length, "x-calais-licenseID" : apiKey.Key, "outputFormat" : "Application/JSON", "enableMetadataType" : "GenericRelations,SocialTags", "calculateRelevanceScore" : "true" } }; // Set up the request limiter.removeTokens(1, function(err, remainingRequests) { var postRequest = http.request(postOptions, function(res) { res.setEncoding("utf8"); var response = ""; res.on("end", function() { cb(null, JSON.parse(response)); }); res.on("data", function (chunk) { response += chunk; }); }); postRequest.write(content); postRequest.end(); }); }
curr.participants.forEach(function(current, index){ limiter.removeTokens(1, function(err){ if(err){console.log(err);} https.get('https://' + regionTwo + '.api.pvp.net/api/lol/' + region + '/v1.4/summoner/by-name/' + current.summonerName + '?api_key=' + KEY, function(result){ var body = ''; result .on('data', function(chunk){ body += chunk; }) .on('end', function(){ defCount++; try { var obj = JSON.parse(body); //console.log(obj); if(obj[Object.keys(obj)[0]].id){ IDs.push(obj[Object.keys(obj)[0]].id); //console.log("\nID: " + obj[Object.keys(obj)[0]].id); } } catch(e){ console.log(e); console.log(body); } if(defCount>48){ console.log("Resolved!"); namesDeferred.resolve(); } }) .on('error', function(err){ console.log("An error was encountered."); console.log(err); }); }); }) });
socket.on('warriorSelection', function(selectedId) { // limit the incoming events to help prevent hacking limiter.removeTokens(1, function(err, remainingRequests) { // disconnect malicious users if (remainingRequests < 0) { socket.emit('tooManyRequests'); socket.disconnect('unauthorized'); } // otherwise, process the incoming request else { console.log('warriorSelection', selectedId); var newWarriors = warriors.map(function(warrior) { if (warrior.id === selectedId) warrior.wins++; return warrior; }); io.sockets.emit('allWarriorsData', newWarriors); warriors = newWarriors; } }); });