leopard-tie-client
Version:
Extended TIE Client that accepts additional custom request headers
99 lines (83 loc) • 3.13 kB
JavaScript
import http from './utils/http';
import prune from './utils/prune';
import TeneoResponse from './utils/teneo-response';
import { isNode } from 'browser-or-node';
var readClientOrigin = function readClientOrigin() {
if (typeof document === 'undefined' || !document.location) return;
return document.location.origin;
};
var getHeaders = function getHeaders(currentSessionId, inputData) {
var headers = currentSessionId && isNode ? {
Cookie: "JSESSIONID=" + currentSessionId
} : {};
return 'headers' in inputData ? Object.assign(inputData.headers, headers) : headers;
};
var getParameters = prune(['viewtype', 'userinput', 'text', 'clientOrigin', 'headers']);
var formatEngineUrl = function formatEngineUrl(url) {
return url.endsWith('/') ? url : url + "/";
};
var appendSessionId = function appendSessionId(url, sessionId) {
return sessionId ? url + ";jsessionid=" + sessionId : url;
};
var requestBody = function requestBody(body) {
var clientOrigin = readClientOrigin();
var jspViewNames = {
viewtype: 'tieapi'
};
var parameters = clientOrigin ? Object.assign(jspViewNames, {
clientOrigin: clientOrigin
}) : jspViewNames;
return Object.assign(parameters, body);
};
function close(teneoEngineUrl, sessionId, timeoutSeconds) {
if (timeoutSeconds === void 0) {
timeoutSeconds = 20;
}
var endSessionUrl = appendSessionId(formatEngineUrl(teneoEngineUrl) + "endsession", sessionId);
var headers = sessionId && isNode ? {
Cookie: "JSESSIONID=" + sessionId
} : {};
return http.post(endSessionUrl, requestBody(), headers, timeoutSeconds); // returns a promise
}
var verifyInputData = function verifyInputData(inputData) {
var validDataType = function validDataType(x) {
return ['string', 'number', 'bool', 'object'].includes(typeof x);
};
var keys = Object.keys(inputData);
if (!(typeof inputData === 'object' && keys.includes('text'))) {
throw new TypeError("sendInput input data must be an object with atleast a 'text' property: " + JSON.stringify(inputData));
}
if (!keys.every(function (key) {
return validDataType(inputData[key]);
})) {
throw new TypeError("sendInput input data object can only contain values of type string, number or bool " + JSON.stringify(inputData));
}
};
function sendInput(teneoEngineUrl, currentSessionId, inputData, timeoutSeconds) {
if (timeoutSeconds === void 0) {
timeoutSeconds = 20;
}
verifyInputData(inputData);
var headers = getHeaders(currentSessionId, inputData);
var parameters = getParameters(inputData);
var body = requestBody(Object.assign({
userinput: inputData.text
}, parameters));
var url = appendSessionId(formatEngineUrl(teneoEngineUrl), currentSessionId);
return http.post(url, body, headers, timeoutSeconds); // returns a promise
}
function wrap(teneoResp) {
return new TeneoResponse(teneoResp);
}
export default {
wrap: wrap,
close: close,
sendInput: sendInput,
init: function init(teneoEngineUrl) {
return {
close: close.bind(null, teneoEngineUrl),
sendInput: sendInput.bind(null, teneoEngineUrl),
wrap: wrap
};
}
};