leopard-tie-client
Version:
Extended TIE Client that accepts additional custom request headers
137 lines (121 loc) • 3.97 kB
JavaScript
;
exports.__esModule = true;
exports["default"] = void 0;
var _superagent = _interopRequireDefault(require("superagent"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
// import unescapeJs from 'unescape-js';
var generateHeaders = function generateHeaders(additionalHeaders) {
return Object.assign(additionalHeaders, {
Accept: 'application/json'
});
};
var getCorrectType = function getCorrectType(val) {
var temp = val.trim().toLowerCase();
temp = temp === 'true' || (temp === 'false' ? false : val.trim()); //
if (typeof temp === 'boolean') {
return temp;
}
if (/^\d+$/.test(temp)) {
// is number
return parseInt(temp, 16);
} else {
return temp;
}
};
var isJSON = function isJSON(str) {
if (/^\s*$/.test(str)) return false;
str = str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@');
str = str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']');
str = str.replace(/(?:^|:|,)(?:\s*\[)+/g, '');
return /^[\],:{}\s]*$/.test(str);
};
var cleanOutputParams = function cleanOutputParams(responseObj) {
for (var _i = 0, _Object$entries = Object.entries(responseObj.output.parameters); _i < _Object$entries.length; _i++) {
var _Object$entries$_i = _Object$entries[_i],
key = _Object$entries$_i[0],
value = _Object$entries$_i[1];
if (isJSON(value)) {
try {
var parsedJsonResult = JSON.parse(value);
responseObj.output.parameters[key.trim()] = parsedJsonResult;
} catch (e) {
delete responseObj.output.parameters[key];
}
} else {
// not json - check for empty param and delete
if (value && value.trim() !== '') {
responseObj.output.parameters[key.trim()] = getCorrectType(value);
} else {
delete responseObj.output.parameters[key];
}
}
if (key !== key.trim() && key in responseObj.output.parameters) {
delete responseObj.output.parameters[key];
}
}
return responseObj;
};
var success = {
status: 1,
message: 'logout'
};
var errors = {
timeout: {
success: false,
status: 2,
message: 'Request Timeout: '
},
net: {
success: false,
status: 3,
message: 'Network Error'
},
business: {
success: false,
status: 4,
message: 'System Error'
}
};
var _default = {
post: function post(url, params, headers, timeoutSeconds) {
if (headers === void 0) {
headers = {};
}
return new Promise(function (resolve, reject) {
_superagent["default"].post(url).withCredentials().type('form').timeout({
response: timeoutSeconds * 1000,
// Wait timeoutSeconds seconds for the server to start sending,
deadline: timeoutSeconds * 1000 // but allow timeoutSeconds seconds for the request to finish.
}).set(generateHeaders(headers)).send(params).then(function (res) {
var json = res.body;
if (json instanceof Object && 'status' in json) {
resolve(cleanOutputParams(json));
return;
} else if (json === null) {
resolve(success);
return;
} else {
var businessError = errors.business;
businessError.message = json;
reject(businessError);
return;
}
}, function (err) {
if (err.timeout) {
var timeout = Object.assign({}, errors.timeout);
timeout.message = timeout.message + timeoutSeconds + ' seconds';
reject(timeout);
} else if (url.includes('endsession') && err.message.includes('Access-Control-Allow-Origin')) {
// This happens on teneo.ai for endsession CORS requests.. Assume session was killed
resolve(success);
} else {
var e = errors.business;
e.message = err;
reject(e);
}
});
});
}
};
exports["default"] = _default;
module.exports = exports.default;