omniacare
Version:
CHR OmniaCare API SDK for NodeJS
72 lines (65 loc) • 2.1 kB
JavaScript
;
var _ = require('lodash'),
http = require('http'),
querystring = require('querystring'),
parseXMLString = require('xml2js').parseString;
var configuration = require('../configure');
/**
* Set up configuration by merging user provided configurations with the
* default settings
* @param {Object} options Configuration parameters passed as an object
* @return {undefined}
*/
var configure = exports.configure = function configure(options) {
if (options !== undefined && typeof options === 'object') {
configuration.defaultOptions = _.merge({}, configuration.defaultOptions, options);
}
};
/**
* Makes an OmniaCare API Call
* @param {Object} options http configuration object
* @param {Object} data post data object
* @return {function} Promise
*/
var executeHTTP = exports.executeHTTP = function(method, data) {
var post_data = querystring.stringify({'sXML': data});
var options = _.merge({}, configuration.defaultOptions, {
path: configuration.defaultOptions.path + method,
headers: {'Content-Length': Buffer.byteLength(post_data)}
});
return new Promise(function(resolve, reject) {
// var nock = require('nock');
// nock.recorder.rec();
var request = http.request(options, function(res) {
res.setEncoding('utf8');
var data = '';
res.on('data', function(chunk) {
data += chunk;
});
res.on('end', function() {
parseXMLString(data, function(err, result) {
if (err) {
return reject(err);
}
var xml = result.string._
.replace(/[\n\r]/g, '\\n')
.replace(/&/g,"&")
.replace(/-/g,"-");
parseXMLString(xml, function(err, result) {
if (err) {
return reject(err);
}
return resolve(result);
});
});
});
res.on('error', function(e) {
return reject(e.message);
});
});
request.write(post_data);
request.end();
// var nockCalls = nock.recorder.play();
// console.log(nockCalls);
});
};