UNPKG

sensis-validation

Version:

Validation addresses with sensis validation API

86 lines (67 loc) 2.2 kB
var request = require('request'); var querystring = require('querystring'); module.exports = function(opts) { var ROOT_URI = 'sensisdata.com.au/rest/'; var VERSION = (opts && opts.version) || 'current'; var ENV = (opts && opts.env) || 'development'; var USERNAME = (opts && opts.username) || ''; var PASSWORD = (opts && opts.password) || ''; function validateAddress(address, callback) { var root = getRootUri(); var authHeader = getAuthorizationHeader(); var qs = querystring.stringify({'formatted_address': address}); var uri = [root, '?', qs].join(''); var opts = { url: uri, headers: {'Authorization': authHeader}, json: true }; request(opts, handleSearchResponse(callback)); } function handleSearchResponse(callback) { return function(err, response, body) { if(err) return callback(err); if(!body || !body.status || body.status !== 'OK') return callback(invalidResponse()); if(body.result_count === 0) return callback(null, null); var authHeader = getAuthorizationHeader(); var search_id = body.results[0].search_result_id; var root = getRootUri(); var uri = [root, search_id].join(''); var opts = { url: uri, headers: {'Authorization': authHeader}, json: true }; request(opts, function(err, response, body) { if(err) return callback(err); if(!body || !body.status || body.status !== 'OK') return callback(invalidResponse()); return callback(null, body.result); }); } } function invalidResponse() { return new Error("Invalid response recieved."); } function getAuthorizationHeader() { var buff = new Buffer(USERNAME + ':' + PASSWORD); return 'Basic ' + buff.toString('base64'); } function getRootUri() { var sub = (ENV && ENV === 'production') ? 'api.' : 'stage-api.ext.'; return [ 'https://', sub, ROOT_URI, VERSION, '/address/' ].join(''); } return { validateAddress: validateAddress }; }