appnexus-api
Advanced tools
Comparing version 0.0.3 to 0.0.4
'use strict'; | ||
function responseContainsError(response, body) { | ||
@@ -14,3 +15,3 @@ if (body && body.response && body.response.error_id) { | ||
function wrapAppnexusError(body) { | ||
var error = new Error(body && body.response && body.response.error || err); | ||
var error = new Error(body && body.response && body.response.error); | ||
error.error_id = body && body.response && body.response.error_id; | ||
@@ -17,0 +18,0 @@ return error; |
@@ -9,5 +9,2 @@ 'use strict'; | ||
RateLimiter = require('limiter').RateLimiter, | ||
writeLimiter = new RateLimiter(60, 'second'), | ||
readLimiter = new RateLimiter(100, 'second'), | ||
authLimiter = new RateLimiter(10, 5 * 60 * 1000), | ||
request = require('request').defaults({ | ||
@@ -46,2 +43,20 @@ json: true | ||
} | ||
if (!options.writeLimit) { | ||
options.writeLimit = 60; | ||
} | ||
if (!options.readLimit) { | ||
options.readLimit = 100; | ||
} | ||
if (!options.authLimit) { | ||
options.authLimit = 10; | ||
} | ||
if (!options.writeLimitInterval) { | ||
options.writeLimitInterval = 60; | ||
} | ||
if (!options.readLimitInterval) { | ||
options.readLimitInterval = 60; | ||
} | ||
if (!options.authLimitInterval) { | ||
options.authLimitInterval = 5 * 60; | ||
} | ||
events.EventEmitter.call(this); | ||
@@ -51,2 +66,5 @@ this.endpoint = endpoint(options.endpoint); | ||
this.password = options.password; | ||
this.writeLimiter = new RateLimiter(options.writeLimit, options.writeLimitInterval * 1000); | ||
this.readLimiter = new RateLimiter(options.readLimit, options.readLimitInterval * 1000); | ||
this.authLimiter = new RateLimiter(options.authLimit, options.authLimitInterval * 1000); | ||
} | ||
@@ -77,6 +95,7 @@ util.inherits(Appnexus, events.EventEmitter); | ||
var methodToChangeMap = { | ||
'POST': 'Created', | ||
'PUT': 'Updated', | ||
'DELETE': 'Deleted' | ||
}, typeOfChange = methodToChangeMap[method]; | ||
'POST': 'Created', | ||
'PUT': 'Updated', | ||
'DELETE': 'Deleted' | ||
}, | ||
typeOfChange = methodToChangeMap[method]; | ||
if (typeOfChange) { | ||
@@ -146,6 +165,6 @@ return type + typeOfChange; | ||
} | ||
readLimiter.removeTokens(1, function (err, remainingRequests) { | ||
this.readLimiter.removeTokens(1, function (err, remainingRequests) { | ||
if (err) { | ||
this.emit('error', err); | ||
return; | ||
return; | ||
} | ||
@@ -156,3 +175,5 @@ self.query(type, id2options(id), callback); | ||
Appnexus.prototype.create = function (type, id, data, callback) { | ||
var json = {}, options = {}, self = this; | ||
var json = {}, | ||
options = {}, | ||
self = this; | ||
if (!data || typeof data === 'function') { | ||
@@ -167,6 +188,6 @@ callback = data; | ||
options.method = 'POST'; | ||
writeLimiter.removeTokens(1, function (err, remainingRequests) { | ||
this.writeLimiter.removeTokens(1, function (err, remainingRequests) { | ||
if (err) { | ||
this.emit('error', err); | ||
return; | ||
return; | ||
} | ||
@@ -178,9 +199,10 @@ self.query(type, options, callback); | ||
var options = id2options(id, { | ||
json: true, | ||
method: 'DELETE' | ||
}), self = this; | ||
writeLimiter.removeTokens(1, function (err, remainingRequests) { | ||
json: true, | ||
method: 'DELETE' | ||
}), | ||
self = this; | ||
this.writeLimiter.removeTokens(1, function (err, remainingRequests) { | ||
if (err) { | ||
this.emit('error', err); | ||
return; | ||
return; | ||
} | ||
@@ -191,3 +213,4 @@ self.query(type, options, callback); | ||
Appnexus.prototype.update = function (type, id, data, callback) { | ||
var json = {}, options, self = this; | ||
var json = {}, | ||
options, self = this; | ||
json[type] = data; | ||
@@ -201,6 +224,6 @@ options = id2options(id, { | ||
// which requires both *code* and *member_id* | ||
writeLimiter.removeTokens(1, function (err, remainingRequests) { | ||
this.writeLimiter.removeTokens(1, function (err, remainingRequests) { | ||
if (err) { | ||
this.emit('error', err); | ||
return; | ||
return; | ||
} | ||
@@ -217,7 +240,8 @@ self.query(type, options, callback); | ||
} | ||
}, that = this; | ||
authLimiter.removeTokens(1, function (err, remainingRequests) { | ||
}, | ||
that = this; | ||
this.authLimiter.removeTokens(1, function (err, remainingRequests) { | ||
if (err) { | ||
this.emit('error', err); | ||
return; | ||
return; | ||
} | ||
@@ -243,6 +267,24 @@ request.post({ | ||
}; | ||
Appnexus.prototype.limits = function (callback) { | ||
this.query('advertiser', 0, function (error, ret) { | ||
if (error) { | ||
return callback(error) | ||
} | ||
var info = ret.response.dbg_info; | ||
var limits = { | ||
read_limit: info.read_limit || 100, | ||
read_limit_seconds: info.read_limit_seconds || 60, | ||
write_limit: info.write_limit || 60, | ||
write_limit_seconds: info.write_limit_seconds || 60, | ||
}; | ||
return callback(error, limits); | ||
}); | ||
}; | ||
function create(options) { | ||
return new Appnexus(options); | ||
} | ||
exports.create = create; | ||
exports.create = create; |
{ | ||
"name": "appnexus-api", | ||
"version": "0.0.3", | ||
"version": "0.0.4", | ||
"description": "Appnexus client for node.js", | ||
@@ -38,2 +38,2 @@ "main": "index.js", | ||
} | ||
} | ||
} |
25346
15
596