UNPKG

leopard-tie-client

Version:

Extended TIE Client that accepts additional custom request headers

99 lines (83 loc) 3.13 kB
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 }; } };