From 9c88f92f44896407ce55ea6c30c638d10042906f Mon Sep 17 00:00:00 2001 From: Matthew Taylor Date: Wed, 10 Aug 2016 15:33:17 -0400 Subject: [PATCH 1/4] check street number range for address rather than exact address, so that we can more flexibly allow outdate post office data --- src/lib/api.js | 15 ++++++++------- src/lib/smarty-streets.js | 6 +++++- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/lib/api.js b/src/lib/api.js index 2efd806b7..e7d9fc012 100644 --- a/src/lib/api.js +++ b/src/lib/api.js @@ -1,4 +1,5 @@ var defaults = require('lodash.defaults'); +var defaultsDeep = require('lodash.defaultsdeep'); var xhr = require('xhr'); var jar = require('./jar'); @@ -15,17 +16,15 @@ var urlParams = require('./url-params'); */ module.exports = function (opts, callback) { - defaults(opts, { + defaultsDeep(opts, { host: process.env.API_HOST, - headers: {}, + headers: { + 'X-Requested-With': 'XMLHttpRequest' + }, responseType: 'json', useCsrf: false }); - defaults(opts.headers, { - 'X-Requested-With': 'XMLHttpRequest' - }); - opts.uri = opts.host + opts.uri; if (opts.params) { @@ -43,7 +42,9 @@ module.exports = function (opts, callback) { // For IE < 10, we must use XDR for cross-domain requests. XDR does not support // custom headers. defaults(opts, {useXDR: true}); - delete opts.headers; + if (opts.useXDR) { + delete opts.headers; + } if (opts.authentication) { var authenticationParams = ['x-token=' + opts.authentication]; var parts = opts.uri.split('?'); diff --git a/src/lib/smarty-streets.js b/src/lib/smarty-streets.js index 42400626a..87b245e23 100644 --- a/src/lib/smarty-streets.js +++ b/src/lib/smarty-streets.js @@ -8,7 +8,11 @@ module.exports = function smartyStreetApi (params, callback) { api({ host: 'https://api.smartystreets.com', uri: '/street-address', - params: params + headers: { + 'X-Standardize-Only': true + }, + params: params, + useXDR: false }, function (err, body, res) { if (err) return callback(err); if (res.statusCode !== 200) { From fa2c3269550f6251857f7436574dd9a9929a4f14 Mon Sep 17 00:00:00 2001 From: Matthew Taylor Date: Thu, 11 Aug 2016 14:54:13 -0400 Subject: [PATCH 2/4] Only apply `X-Requested-With` to same domain it breaks on cross domain --- src/lib/api.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lib/api.js b/src/lib/api.js index e7d9fc012..1207647a7 100644 --- a/src/lib/api.js +++ b/src/lib/api.js @@ -18,9 +18,7 @@ var urlParams = require('./url-params'); module.exports = function (opts, callback) { defaultsDeep(opts, { host: process.env.API_HOST, - headers: { - 'X-Requested-With': 'XMLHttpRequest' - }, + headers: {}, responseType: 'json', useCsrf: false }); @@ -52,6 +50,8 @@ module.exports = function (opts, callback) { opts.uri = parts[0] + '?' + qs; } + } else { + opts['X-Requested-With'] = 'XMLHttpRequest'; } xhr(opts, function (err, res, body) { if (err) log.error(err); From 4dc85b1bc48deb63cb8057454bf2ae679dc32585 Mon Sep 17 00:00:00 2001 From: Matthew Taylor Date: Thu, 11 Aug 2016 14:55:20 -0400 Subject: [PATCH 3/4] use `defaults` again deep is no longer necessary with the `headers` change --- src/lib/api.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/lib/api.js b/src/lib/api.js index 1207647a7..bf5aa2b36 100644 --- a/src/lib/api.js +++ b/src/lib/api.js @@ -1,5 +1,4 @@ var defaults = require('lodash.defaults'); -var defaultsDeep = require('lodash.defaultsdeep'); var xhr = require('xhr'); var jar = require('./jar'); @@ -16,7 +15,7 @@ var urlParams = require('./url-params'); */ module.exports = function (opts, callback) { - defaultsDeep(opts, { + defaults(opts, { host: process.env.API_HOST, headers: {}, responseType: 'json', From d6d5fa0f8ab1da4f8ca93f8b6b134f486394dca4 Mon Sep 17 00:00:00 2001 From: Matthew Taylor Date: Thu, 11 Aug 2016 15:19:32 -0400 Subject: [PATCH 4/4] Make `X-Requested-With` overridable thanks @rschamp! --- src/lib/api.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/lib/api.js b/src/lib/api.js index bf5aa2b36..0446c43e8 100644 --- a/src/lib/api.js +++ b/src/lib/api.js @@ -22,6 +22,12 @@ module.exports = function (opts, callback) { useCsrf: false }); + if (opts.host === '') { + defaults(opts.headers, { + 'X-Requested-With': 'XMLHttpRequest' + }); + } + opts.uri = opts.host + opts.uri; if (opts.params) { @@ -49,8 +55,6 @@ module.exports = function (opts, callback) { opts.uri = parts[0] + '?' + qs; } - } else { - opts['X-Requested-With'] = 'XMLHttpRequest'; } xhr(opts, function (err, res, body) { if (err) log.error(err);