node-landmark
Version:
Landmark International API client
84 lines (60 loc) • 1.62 kB
JavaScript
var _ = require('lodash');
var q = require('bluebird');
var qs = require('querystring');
var http = require('https');
var xml2js = require('xml2js');
function Request(config){
config = _.defaults(config || {}, {
pathPrefix: '/api/api.php'
});
if(!config.username){
throw new Error('username is required');
}
if(!config.password){
throw new Error('password is required');
}
this.config = config;
};
Request.prototype.makeRequest = function(xmlData, options){
xmlData = xmlData || '';
options = options || {};
var path = this.config.pathPrefix;
options.queryParams = options.queryParams || {};
// WHO CAME UP WITH THIS OH MY GOD WHY
console.log(xmlData);
options.queryParams.RQXML = xmlData;
if(_.keys(options.queryParams).length){
path = [path, qs.stringify(options.queryParams)].join('?')
}
var options = {
hostname: 'mercury.landmarkglobal.com',
port: 443,
path: path,
method: 'POST'
};
return new q.Promise(function(resolve, reject){
var req = http.request(options, function(res){
var data = '';
res.on('data', function(d){
data += d.toString();
});
res.on('end', function(){
var shortCode = ~~(res.statusCode / 100);
return q.promisify(xml2js.parseString)(data)
.then(function(data){
var payload = data[_.first(_.keys(data))];
if(payload && payload.Errors && payload.Errors.length){
return reject({ Errors: payload.Errors });
}
return resolve(data);
}, reject);
});
});
req.on('error', function(err){
console.log(err);
reject(err);
});
req.end();
});
};
module.exports = Request;