Socket
Socket
Sign inDemoInstall

sapi

Package Overview
Dependencies
12
Maintainers
1
Versions
10
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.0.5 to 0.1.0

5

CHANGELOG.md

@@ -1,2 +0,5 @@

### 0.0.5 (SNAPSHOT)
### 0.1.0-pre
* Update constructor signature, url and proxy are now optional
### 0.0.5
* Handle non-200 endpoint response.

@@ -3,0 +6,0 @@

36

lib/endpoint/getbylistingid.js
/**
* Get by Listing ID endpoint name and parameters.
* Reference: http://developers.sensis.com.au/docs/endpoint_reference/Metadata
**/
*/
var name = 'getByListingId',

@@ -9,10 +9,11 @@ params = {

optional: []
};
},
handlers = { 200: _success, 400: _invalid };
/**
* getbylistingid#path -> String
* - params (Object): endpoint parameters constructed from chainable functions
* Create the endpoint URL path, to be appended to SAPI base URL.
*
* Create the endpoint URL path, to be appended to SAPI base URL.
**/
* @param params {Object}: endpoint parameters constructed from chainable functions
* @return {String} endpoint path
*/
function path (params) {

@@ -22,19 +23,12 @@ return name;

/**
* getbylistingid#handlers -> Object
* - cb (Function): standard cb(err, result) callback
*
* Set up endpoint success and error handlers.
**/
function handlers(cb) {
return {
200: function (result) {
cb(null, result);
},
400: function (result) {
cb(new Error('Validation error'), result);
}
};
// endpoint handlers
function _success(result, cb) {
cb(null, result);
}
function _invalid(result, cb) {
cb(new Error('Validation error'), result);
}
exports.name = name;

@@ -41,0 +35,0 @@ exports.params = params;

/**
* Metadata endpoint name and parameters.
* Reference: http://developers.sensis.com.au/docs/endpoint_reference/Metadata
**/
*/
var name = 'metadata',

@@ -9,10 +9,11 @@ params = {

optional: []
};
},
handlers = { 200: _success };
/**
* metadata#path -> String
* - params (Object): endpoint parameters constructed from chainable functions
* Create the endpoint URL path, to be appended to SAPI base URL.
*
* Create the endpoint URL path, to be appended to SAPI base URL.
**/
* @param params {Object}: endpoint parameters constructed from chainable functions
* @return {String} endpoint path
*/
function path (params) {

@@ -22,14 +23,6 @@ return name + '/' + params.dataType;

/**
* metadata#handlers -> Object
* - cb (Function): standard cb(err, result) callback
*
* Set up endpoint success and error handlers.
**/
function handlers(cb) {
return {
200: function (result) {
cb(null, result);
}
};
// endpoint handlers
function _success(result, cb) {
cb(null, result);
}

@@ -36,0 +29,0 @@

/**
* Report endpoint name and parameters.
* Reference: http://developers.sensis.com.au/docs/endpoint_reference/Report
**/
*/
var name = 'report',

@@ -9,10 +9,11 @@ params = {

optional: ['userAgent', 'userSessionId', 'content']
};
},
handlers = { 200: _success, 206: _spellChecked, 400: _invalid };
/**
* report#path -> String
* - params (Object): endpoint parameters constructed from chainable functions
* Create the endpoint URL path, to be appended to SAPI base URL.
*
* Create the endpoint URL path, to be appended to SAPI base URL.
**/
* @param params {Object}: endpoint parameters constructed from chainable functions
* @return {String} endpoint path
*/
function path (params) {

@@ -22,22 +23,16 @@ return name + '/' + params.eventName;

/**
* report#handlers -> Object
* - cb (Function): standard cb(err, result) callback
*
* Set up endpoint success and error handlers.
**/
function handlers(cb) {
return {
200: function (result) {
cb(null, result);
},
206: function (result) {
cb(null, result);
},
400: function (result) {
cb(new Error('Validation error'), result);
}
};
// endpoint handlers
function _success(result, cb) {
cb(null, result);
}
function _spellChecked(result, cb) {
cb(null, result);
}
function _invalid(result, cb) {
cb(new Error('Validation error'), result);
}
exports.name = name;

@@ -44,0 +39,0 @@ exports.params = params;

/**
* Search endpoint name and parameters.
* Reference: http://developers.sensis.com.au/docs/endpoint_reference/Search
**/
*/
var name = 'search',

@@ -9,10 +9,11 @@ params = {

optional: ['page', 'rows', 'sortBy', 'sensitiveCategories', 'categoryId', 'postcode', 'radius', 'locationTiers', 'suburb', 'state', 'boundingBox', 'content', 'productKeyword']
};
},
handlers = { 200: _success, 206: _spellChecked, 400: _invalid };
/**
* search#path -> String
* - params (Object): endpoint parameters constructed from chainable functions
* Create the endpoint URL path, to be appended to SAPI base URL.
*
* Create the endpoint URL path, to be appended to SAPI base URL.
**/
* @param {Object} params: endpoint parameters constructed from chainable functions
* @return {String} endpoint path
*/
function path (params) {

@@ -22,22 +23,16 @@ return name;

/**
* search#handlers -> Object
* - cb (Function): standard cb(err, result) callback
*
* Set up endpoint success and error handlers.
**/
function handlers(cb) {
return {
200: function (result) {
cb(null, result);
},
206: function (result) {
cb(null, result);
},
400: function (result) {
cb(new Error('Validation error'), result);
}
};
// endpoint handlers
function _success(result, cb) {
cb(null, result);
}
function _spellChecked(result, cb) {
cb(null, result);
}
function _invalid(result, cb) {
cb(new Error('Validation error'), result);
}
exports.name = name;

@@ -44,0 +39,0 @@ exports.params = params;

@@ -1,2 +0,3 @@

var request = require('request'),
var _ = require('underscore'),
bag = require('bagofholding'),
search = require('./endpoint/search'),

@@ -8,73 +9,31 @@ getByListingId = require('./endpoint/getbylistingid'),

/** internal
* sapi#_http(method, url, qs, handlers, cb)
* - method (String): http method
* - url (String): Jenkins URL without query string
* - proxy (String): proxy server URL in format http://user:pass@host:port
* - qs (Object): object containing URL query strings with format { name: value }
* - handlers (Object): response handlers with format { statuscode: handlerfunction }
* - cb (Function): standard cb(err, result) callback
/**
* class Sapi
*
* Sends a HTTP request to a SAPI URL and handle the following errors:
* - request error
* - authentication error
* - unexpected status error
**/
function _http(method, url, proxy, queryStrings, handlers, cb) {
* @param {String} key: Sensis API key, apply for the key here http://developers.sensis.com.au/docs/getting_started/Apply_for_an_API_key
* @param {Object} opts: optional
* - url: optional Sensis API base URL, defaults to http://developers.sensis.com.au/docs/using_endpoints
*/
function Sapi(key, opts) {
opts = opts || {};
var params = {
method: method,
uri: url,
qs: queryStrings
};
if (proxy) {
params.proxy = proxy;
}
request(params, function (err, result) {
if (err) {
cb(err);
} else if (result.statusCode === 403) {
// SAPI does not differentiate required authentication and failed authentication
// since both return status code 403, need to check key param existence to differentiate the two
if (queryStrings.key) {
cb(new Error('Authentication failed - invalid key ' + queryStrings.key));
} else {
cb(new Error('SAPI requires authentication - set key to SAPI instance'));
}
} else if (handlers[result.statusCode]) {
// SAPI documentation indicates that all expected response is in JSON format
handlers[result.statusCode](JSON.parse(result.body));
function _authRequire(result, cb) {
// SAPI does not differentiate required authentication and failed authentication
// since both return status code 403, need to check key param existence to differentiate the two
if (key) {
cb(new Error('Authentication failed - invalid key ' + key));
} else {
cb(new Error('Unexpected status code ' + result.statusCode + ' from SAPI\nResponse body:\n' + result.body));
cb(new Error('Authentication required - set API key in Sapi constructor'));
}
});
}
}
/**
* class Sapi
* - key (String): Sensis API key, apply here http://developers.sensis.com.au/docs/getting_started/Apply_for_an_API_key
* - url (String): Sensis API base URL - http://developers.sensis.com.au/docs/using_endpoints
**/
function Sapi(key, url) {
this.params = { key: key };
this.url = (url || 'http://api.sensis.com.au/ob-20110511/test').replace(/\/$/, '');
if (process.env.http_proxy) {
this._proxy = process.env.http_proxy;
}
this.url = (opts.url || 'http://api.sensis.com.au/ob-20110511/test').replace(/\/$/, '');
this.opts = {
handlers: {
403: _authRequire
}
};
}
/**
* Sapi#proxy(String) -> Object
* - proxy (String): proxy server URL in format http://user:pass@host:port
*
* Set proxy server URL, used to connect to SAPI service.
**/
Sapi.prototype.proxy = function (proxy) {
this._proxy = proxy;
return this;
};
endpoints.forEach(function (endpoint) {

@@ -86,9 +45,8 @@

/**
* Sapi#endpointparam(value) -> Object
* - value (String): parameter value
*
* Chainable function for each parameter.
* Usage pattern: sapi.param1().param2().param3().end();
* The idea here is to allow the construction of 0...* parameters before calling the endpoint.
**/
*
* @param {String} value: parameter value
*/
Sapi.prototype[param] = function (value) {

@@ -101,12 +59,15 @@ this.params[param] = value;

/**
* Sapi#endpointname(cb)
* - cb (Function): standard cb(err, result) callback
* End function for each endpoint that makes http request to SAPI.
*
* End function for each endpoint that makes http request to SAPI.
**/
Sapi.prototype[endpoint.name] = function _endpoint(cb) {
_http('get', this.url + '/' + endpoint.path(this.params), this._proxy, this.params, endpoint.handlers(cb), cb);
* @param {Function} cb: standard cb(err, result) callback
*/
Sapi.prototype[endpoint.name] = function (cb) {
this.opts.queryStrings = this.params;
this.opts.handlers = _.extend(this.opts.handlers, endpoint.handlers);
bag.http.request('get', this.url + '/' + endpoint.path(this.params), this.opts, cb);
};
});
module.exports = Sapi;
module.exports = Sapi;

@@ -11,8 +11,8 @@ {

],
"version": "0.0.5",
"version": "0.1.0",
"homepage": "http://github.com/cliffano/sapi",
"author": "Cliffano Subagio <blah@cliffano.com> (http://blog.cliffano.com)",
"bin": {
"sapi": "./bin/sapi"
},
"contributors": [
"All contributors (https://github.com/cliffano/sapi/graphs/contributors)"
],
"main": "./lib/sapi",

@@ -32,10 +32,9 @@ "repository": {

"dependencies": {
"request": "2.9.203"
"bagofholding": "0.1.2",
"underscore": "1.4.4"
},
"devDependencies": {
"bagofholding": "0.0.10",
"mocha": "1.3.0",
"sandboxed-module": "0.1.3",
"should": "0.6.3"
"buster": "0.6.12"
},
"scripts": {},
"engines": {

@@ -42,0 +41,0 @@ "node": ">= 0.4.0"

@@ -1,5 +0,6 @@

Sapi [![http://travis-ci.org/cliffano/sapi](https://secure.travis-ci.org/cliffano/sapi.png?branch=master)](http://travis-ci.org/cliffano/sapi)
Sapi [![Build Status](https://secure.travis-ci.org/cliffano/sapi.png?branch=master)](http://travis-ci.org/cliffano/sapi) [![Dependencies Status](https://david-dm.org/cliffano/sapi.png)](http://david-dm.org/cliffano/sapi)
-----------
<img align="right" src="https://raw.github.com/cliffano/sapi/master/avatar.jpg" alt="Avatar"/>
[Sensis API](http://developers.sensis.com.au/about) Node.js client.
Sapi is a [Sensis API](http://developers.sensis.com.au/about) Node.js client.

@@ -24,5 +25,9 @@ This is handy when you want to use [Sensis API](http://developers.sensis.com.au/about) service from a Node.js application. Sapi module provides a chainable interface to set the endpoint parameters.

var sapi = new (require('sapi'))('key', 'http://api.sensis.com.au/ob-20110511/test/');
var Sapi = require('sapi'),
sapi = new Sapi('apikey', {
url: 'http://api.sensis.com.au/ob-20110511/test/',
proxy: 'http://user:pass@proxy:8080'
});
sapi.proxy('http://user:pass@proxy:8080'); // optional
You can [apply for Sensis API key](http://developers.sensis.com.au/docs/getting_started/Apply_for_an_API_key) from Sensis Developer Centre.

@@ -29,0 +34,0 @@ Parameters can then be chained to an endpoint:

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc