UNPKG

node-landmark

Version:
84 lines (60 loc) 1.62 kB
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;