@fye/xservices-client
Version:
FYE Micros Xservices Client
120 lines (97 loc) • 2.56 kB
JavaScript
/*!
* twec-xservices-client
* Copyright(c) 2014-2020 F.Y.E
* Created by Nicholas Penree
*/
/**
* Module dependencies.
*/
var Service = require('@fye/soap-client');
var util = require('util');
var clone = require('clone');
var isObject = require('is-object');
var pkg = require('../package.json');
/**
* Creates an instance of an `XService`.
*
* @constructor
* @augments Service
* @this {XService}
* @param {Object} opts
* @api public
*/
function XService(opts, conns) {
Service.call(this, opts, conns);
this.registerMapping = {};
this.viewsPath = __dirname + '/../views';
this.namespace = 'ws';
this.requestOpts = {
strictSSL: false,
forever: true,
//gzip: true,
headers: {
'Accept': 'text/xml, multipart/related, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2',
'Content-Type': 'text/xml;charset="utf-8"',
'User-Agent': util.format('%s/%s', pkg.name, pkg.version),
'Connection': 'keep-alive'
}
};
(Array.isArray(conns) ? conns : [conns]).filter(function(conn) {
return isObject(conn);
}).forEach(function(conn) {
if (!this.registerMapping[conn.hostname]) {
this.registerMapping[conn.hostname] = conn.register;
}
}, this);
}
/**
* Inherit from `Service`.
*/
util.inherits(XService, Service);
/**
* Convert a string to a boolean value.
*
* @param {String} str
* @return {String}
* @api private
*/
XService.prototype._convertBool = function(str) {
return (str === 'true');
};
XService.prototype._convertFields = function(opts) {
var floats = opts.floats || [];
var bools = opts.bools || [];
var dates = opts.dates || [];
var ints = opts.ints || [];
var numbers = opts.numbers || [];
var obj = clone(opts.obj);
numbers.forEach(function(field) {
obj[field] = Number(obj[field]);
}, this);
floats.forEach(function(field) {
obj[field] = parseFloat(obj[field]);
}, this);
ints.forEach(function(field) {
obj[field] = parseInt(obj[field], 10);
}, this);
bools.forEach(function(field) {
obj[field] = this._convertBool(obj[field]);
}, this);
dates.forEach(function(field) {
obj[field] = new Date(Date.parse(obj[field]));
}, this);
return obj;
};
XService.prototype._locals = function(opts) {
return function(conn) {
var _opts = clone(opts);
if (isObject(_opts) && isObject(_opts.serviceContext)) {
_opts.serviceContext.register = this.registerMapping[conn.hostname];
}
return _opts;
}.bind(this);
};
/**
* Expose `XService`.
*/
module.exports = XService;