{"version":3,"sources":["webpack://telia-chat/webpack/universalModuleDefinition","webpack://telia-chat/webpack/bootstrap","webpack://telia-chat/./node_modules/axios/lib/utils.js","webpack://telia-chat/./src/messages/message.ts","webpack://telia-chat/./src/interfaces/chat-client.ts","webpack://telia-chat/./src/interfaces/config.ts","webpack://telia-chat/./src/misc/helpers.ts","webpack://telia-chat/./node_modules/axios/lib/defaults.js","webpack://telia-chat/./src/misc/errors.ts","webpack://telia-chat/./src/ace-client.ts","webpack://telia-chat/./src/boost-client.ts","webpack://telia-chat/./node_modules/axios/index.js","webpack://telia-chat/./node_modules/axios/lib/helpers/bind.js","webpack://telia-chat/./node_modules/axios/lib/adapters/xhr.js","webpack://telia-chat/./node_modules/axios/lib/core/createError.js","webpack://telia-chat/./node_modules/axios/lib/cancel/isCancel.js","webpack://telia-chat/./node_modules/axios/lib/cancel/Cancel.js","webpack://telia-chat/./src/misc/message-dispatcher.ts","webpack://telia-chat/./src/html-element-creator.ts","webpack://telia-chat/./src/telia-chat.ts","webpack://telia-chat/./src/chat-instance.ts","webpack://telia-chat/./node_modules/axios/lib/axios.js","webpack://telia-chat/./node_modules/is-buffer/index.js","webpack://telia-chat/./node_modules/axios/lib/core/Axios.js","webpack://telia-chat/./node_modules/process/browser.js","webpack://telia-chat/./node_modules/axios/lib/helpers/normalizeHeaderName.js","webpack://telia-chat/./node_modules/axios/lib/core/settle.js","webpack://telia-chat/./node_modules/axios/lib/core/enhanceError.js","webpack://telia-chat/./node_modules/axios/lib/helpers/buildURL.js","webpack://telia-chat/./node_modules/axios/lib/helpers/parseHeaders.js","webpack://telia-chat/./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack://telia-chat/./node_modules/axios/lib/helpers/btoa.js","webpack://telia-chat/./node_modules/axios/lib/helpers/cookies.js","webpack://telia-chat/./node_modules/axios/lib/core/InterceptorManager.js","webpack://telia-chat/./node_modules/axios/lib/core/dispatchRequest.js","webpack://telia-chat/./node_modules/axios/lib/core/transformData.js","webpack://telia-chat/./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack://telia-chat/./node_modules/axios/lib/helpers/combineURLs.js","webpack://telia-chat/./node_modules/axios/lib/cancel/CancelToken.js","webpack://telia-chat/./node_modules/axios/lib/helpers/spread.js","webpack://telia-chat/./src/messages/google-message.ts","webpack://telia-chat/./src/chat-box.ts","webpack://telia-chat/./src/paths.ts","webpack://telia-chat/./src/misc/draggable.ts","webpack://telia-chat/./node_modules/file-saver/dist/FileSaver.min.js","webpack://telia-chat/(webpack)/buildin/global.js","webpack://telia-chat/./src/interfaces/ui.ts","webpack://telia-chat/./src/cookie-storage.ts"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","isBuffer","toString","isArray","val","isObject","isFunction","forEach","obj","fn","length","isArrayBuffer","isFormData","FormData","isArrayBufferView","ArrayBuffer","isView","buffer","isString","isNumber","isUndefined","isDate","isFile","isBlob","isStream","pipe","isURLSearchParams","URLSearchParams","isStandardBrowserEnv","navigator","product","document","merge","result","assignValue","arguments","extend","a","b","thisArg","trim","str","replace","ChatMessage","author","id","this","_author","_id","HTMLMessage","_super","htmlContent","_this","_htmlContent","__extends","LinkMessage","links","_links","TextMessage","text","chatState","_text","_chatState","Environment","environmentURLs","development","logger_api_url","surveyUrl","production","aceEntrance","formdata","serviceName","errand","errandName","handoverEntrance","skill","getCookie","cname","ca","cookie","split","charAt","substring","indexOf","setCookie","cvalue","exdays","Date","setTime","getTime","expires","toUTCString","chatConfig","storage","ACEEntrance","baseUrl","botIconLink","botImageFooterLink","botImageFooterAltText","handoverText","outsideOpeningHoursText","headerTitle","hideWhenInactive","conversationId","filterValues","agentIconLink","chat_client_1","getState","state","getItem","NOT_STARTED","setState","setItem","getEntrance","entrance","setEntrance","process","utils","normalizeHeaderName","DEFAULT_CONTENT_TYPE","Content-Type","setContentTypeIfUnset","headers","defaults","adapter","XMLHttpRequest","getDefaultAdapter","transformRequest","data","JSON","stringify","transformResponse","parse","e","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","validateStatus","status","common","Accept","method","axios_1","config_1","EntranceClosedError","ChatError","innerError","sourceMethod","sourceFile","localState","message","stack","Logger","Log","error","url","default","post","errorMessage","errorName","errorStack","methodName","fileName","errorState","createStateString","catch","responseError","console","_a","sent","stateObjectArray","_i","keys","stateObject","push","formatText","_b","_c","objectName","join","message_1","helpers_1","AceClient","config","userInterface","callGuide","onDoneCallback","sessionStorage","sessionResumed","contactData","clientId","ready","eventCallBacks","readyObj","ACE","aceChatState","api","chat","request","visitorQuestion","clientID","startup","startupObj","infoText","appendMessage","queue","queueObj","queuePos","setQueuePosition","established","establishedObj","transcript","getTranscript","sendMessage","clearQueuePosition","userInputEnabled","placedInQueue","placedInQueueObj","afterChat","afterChatObj","chatEnded","resetWindow","delete","finished","finishedObj","errorObj","reason","entranceClosed","entranceClosedObj","chatEntry","chatEntryObj","source","getAuthor","configObj","setMaxInputLength","chatEntryMaxLength","messageSent","clearInputField","penStatus","penObj","typingStatus","undefined","setTypingStatus","alias","emailResult","emailResultObj","clear","clearObj","emptyChatHistory","noSession","noSessionObj","confirmVideo","confVideoObj","replyFunction","showVideo","showVideoObj","stopVideo","stopVideoObj","videoStandby","videoStandbyObj","info","infoObj","requestCallbacks","hideChatActivations","showChatActivations","startChat","chatInput","eventCallback","eventType","eventObject","requestCallback","_aceChatState","initialize","penStatusSelector","inputFieldSelector","clientType","cleanup","quit","Promise","write","isOpen","resolve","reject","__awaiter","isEntranceOpen","resultCode","resultData","getOpeningHours","days","getOpeningTimes","times","err","createSurveyUrl","surveyData","google_message_1","message_dispatcher_1","errors_1","BoostClient","chatInstance","pollInterval","lastKnownResponseId","registerClient","messageDispatcher","MessageDispatcher","userToken","getFilterValues","setFilterValues","dispatchEventType","removeItem","ensureConnected","displayMessage","BOOST","payload","command","conversation_id","type","user_token","filter_values","then","response","processResponse","downloadConversation","deleteConversation","giveMessageFeedback","messageId","giveConversationFeedback","positive","rating","clearTimeout","pollTimer","oldConversationId","err_1","connect","triggerActionLink","actionLinkId","showFeedback","appendMsgFeedback","conversation","hasConversationId","res","responses","isMultiResponse","processSubResponse","elements","pollingIsRequested","pollingIsDisallowed","setInterval","poll","hasProcessedFirstResponse","subResponse","seen","author_1","id_1","resLength_1","subRes","index","processResponseElement","element","last","html","GoogleDirectionsMessage","GooglePlacesMessage","GoogleLocationMessage","add","bodyResponse","args","Array","apply","settle","buildURL","parseHeaders","isURLSameOrigin","createError","btoa","requestData","requestHeaders","loadEvent","xDomain","XDomainRequest","onprogress","ontimeout","auth","username","password","Authorization","open","toUpperCase","params","paramsSerializer","readyState","responseURL","responseHeaders","getAllResponseHeaders","responseType","responseText","statusText","onerror","cookies","xsrfValue","withCredentials","read","toLowerCase","setRequestHeader","onDownloadProgress","addEventListener","onUploadProgress","upload","cancelToken","promise","cancel","abort","send","enhanceError","code","Error","__CANCEL__","Cancel","messages","timer","feedback","showTypingChatBubble","shift","clearInterval","paths_1","HTMLElementCreator","documentObject","thumbUpNoFill","thumbDownNoFill","linkArrowPath","openIcon","thumbDownFilled","thumbUpFilled","feedBackSendButtonPath","helpIconPath","minimizeIconPath","closeIconPath","numberOfFeedbackElements","createMessageLinks","callback","linkElements","messageLink","newMessage","createLinkMessage","createChatHeader","title","minimizeChatWindow","closeChatWindow","toggleHelpWindow","chatHeader","createElementWithAttributes","chatBoxTitle","dragEl","helpIconContainer","minimizeIconContainer","closeIconContainer","minimizeIcon","createSVGWithPath","appendChild","closeIcon","helpIcon","chatBoxTitleText","createTextNode","createMessageElement","createChatMessage","lastChild","innerHTML","allDivElements","getElementsByTagName","lastDivElement","item","textNode","createHelpWindow","onDownloadClick","onDeleteClick","onCloseClick","overlay","list","downloadButton","onclick","innerText","deleteButtonContainer","deleteButton","spinnerContainer","createSpinner","link","li","backButton","createSendButton","sendButtonWrapper","sendButton","sendButtonIcon","setAttribute","createFeedbackWindow","onFeedback","endChat","textArea","placeholder","conversationFeedback","closeButton","buttons","createFeedbackButtons","removeAttribute","div","createSurveyWindow","surveyWindow","createConfirmationWindow","confirmationWindow","createMessageWindow","messageWindow","messageList","createElement","tagName","attrs","el","attributes","attributes_1","attr","setAttributes","liElement","iconPath","icon","currentTarget","classList","externalLinkIcon","createBotIcon","createAgentIcon","createTypingBubble","bubble","divInner","sendFeedback","canUnselect","containerStyle","container","downButton","upDiv","downDiv","feedbackId","upThumb","createThumbSVG","downThumb","upButton","replaceThumbs","viewbox","svg","createElementNS","poly","spinner","blade","handViewBox","up","down","direction","oldState","upToggled","getElementById","getAttribute","downToggled","replaceThumb","elAToggled","elBToggled","elA","elB","fillOptions","newAThumbTriggered","newAThumb","newBThumb","flushElement","String","removeChild","chat_instance_1","cookie_storage_1","location","href","includes","ChatInstance","CookieStorage","onOteliaSearchSubmit","search_query","version","openBoost","openChatOtelia","openChatDirect","ace_client_1","boost_client_1","chat_box_1","html_element_creator_1","chatActivated","onHandover","resumeChat","abtest","chatBox","aceClient","CallGuide","onAceChatDone","disconnectClient","setTimeout","revertHandoverIfUnsuccessful","dispatchMessageFromInstance","chatbox","htmlCreator","eventDelegate","createFooter","loadState","body","footerElement","activateChat","startACEChat","chatContainer","initialMessage","runBoostChat","focusInputField","listener","options","dispatchEvent","event","removeEventListener","Event","startMinimized","shouldFocus","style","display","createChatInstance","hide","getRootElement","ChatBox","boostClient","customerName","cid","customerSpecific1","number","optOut","setContactData","openingHours","map","toLocaleDateString","getHours","close","err_2","toggleChat","ace","scrollDown","imageContainer","image","createBotFooterImage","isSmallScreen","matchMedia","matches","getChatInstance","handBack","resetHeaderTitle","err_3","Axios","createInstance","defaultConfig","context","instance","axios","instanceConfig","CancelToken","isCancel","all","promises","spread","constructor","readFloatLE","slice","isSlowBuffer","_isBuffer","InterceptorManager","dispatchRequest","interceptors","chain","interceptor","unshift","fulfilled","rejected","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","draining","queueIndex","cleanUpNextTick","concat","drainQueue","len","run","marker","runClearTimeout","Item","array","noop","nextTick","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","normalizedName","encode","encodeURIComponent","serializedParams","parts","v","toISOString","ignoreDuplicateOf","parsed","line","substr","originURL","msie","test","userAgent","urlParsingNode","resolveURL","protocol","host","search","hash","hostname","port","pathname","requestURL","chars","E","input","block","charCode","output","idx","charCodeAt","path","domain","secure","toGMTString","match","RegExp","decodeURIComponent","remove","now","handlers","use","eject","h","transformData","isAbsoluteURL","combineURLs","throwIfCancellationRequested","throwIfRequested","baseURL","fns","relativeURL","executor","TypeError","resolvePromise","token","arr","_directions","START_ADDRESS","END_ADDRESS","GD_START_LAT","GD_START_LNG","GD_END_LAT","GD_END_LNG","_place","GP_TITLE","PLACE","GP_LATITUDE","GP_LONGITUDE","_location","GL_FORMATTED_ADDRESS","GL_LATITUDE","GL_LONGITUDE","draggable_1","saveAs","ui_1","handoverCallback","shouldFocusOnEnabled","_userInputEnabled","maxInputLength","characterCount","sendButtonVisible","messageHistory","isUserIdentificationTriggered","isHandleCloseButtonTriggered","aceChatEndedByUser","isHandbackTriggered","actionLink","triggerHandover","isHandoverTrigger","ActionLinkTrigger","triggerActionLinkSync","triggerManualSkill","setSkillMessage","updateCounter","keyCode","altKey","shiftKey","ctrlKey","inputField","updateCounterField","showSendButton","hideSendButton","handleCloseButton","skipFeedback","getHistory","every","chatType","toggleWindow","headerItem","feedBackWindow","handback","tryAgainButton","endAceChat","chatClient","reset","headerElement","headerItems","rootElement","getElementsByClassName","className","detachChatBody","attachChatBody","detachedChatBody","startDeleteWait","stopDeleteWait","helpWindow","showDialog","boostclient","blob","Blob","createChatContainer","_inputFieldSelector","botTypingListElement","botIcon","typingBubble","unlockInputArea","focus","lockInputArea","show","parentNode","scrollIntoView","saveMessage","linkElement","linkElements_1","latestElement","messageElement","firstChild","typingIndicator","textContent","triggerUserIdentification","introMessage","subMessage","feedbackContainer","setTitle","__generator","tmp","chatWidget","querySelector","feedbackWindow","tryAgain","dragHandle","chatBody","chatInputField","createChatInputField","append","Draggable","typingText","sendContainer","counter","handleKeyEvent","clickSendButton","counterField","submitInputField","sendTextMessage","setCustomerInfo","inputfield","err_4","err_5","err_6","formatCid","strippedCid","formattedCid","from","parseInt","isNaN","preventDefault","err_7","remaining","minimize","toggleSurvey","find","src","aceChatHappened","some","getButtonsVisibleOnHelpWindow","helpButton","minimizeButton","cancelButton","header","hasConfirmation","onButtonClick","dialog","h2","h2Text","section","confirmButton","removeModalDialog","confirmButtonText","cancelButtonText","globalKeyDown","globalDocumentClick","focusableElements","querySelectorAll","activeElement","target","parent","parentElement","lastElementAfterChatBody","insertBefore","dragTarget","active","xOffset","yOffset","dragStart","dragEnd","drag","initialX","clientX","initialY","clientY","currentX","currentY","setTranslate","xPos","yPos","transform","global","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","onload","MouseEvent","createEvent","initMouseEvent","f","self","HTMLAnchorElement","g","URL","webkitURL","j","download","rel","origin","createObjectURL","revokeObjectURL","msSaveOrOpenBlob","autoBom","warn","HTMLElement","safari","FileReader","onloadend","readAsDataURL","k","Function","eval","ca_1","date","domainClause"],"mappings":"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","file":"telia-chat.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"telia-chat\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"telia-chat\"] = factory();\n\telse\n\t\troot[\"telia-chat\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 17);\n","'use strict';\n\nvar bind = require('./helpers/bind');\nvar isBuffer = require('is-buffer');\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim\n};\n","import { Link } from \"../interfaces/boost\";\r\nimport { chatState } from \"../interfaces/chat-client\";\r\n\r\nexport abstract class ChatMessage {\r\n public showFeedback?: boolean;\r\n private readonly _author: string;\r\n private readonly _id: string;\r\n\r\n protected constructor(author: string, id?: string) {\r\n this._author = author;\r\n this._id = id;\r\n }\r\n\r\n public get author(): string {\r\n return this._author;\r\n }\r\n\r\n public get id(): string {\r\n return this._id;\r\n }\r\n}\r\n\r\nexport class HTMLMessage extends ChatMessage {\r\n private readonly _htmlContent: string;\r\n\r\n constructor(htmlContent: string, author: string, id?: string) {\r\n super(author, id);\r\n this._htmlContent = htmlContent;\r\n }\r\n\r\n public get htmlContent(): string {\r\n return this._htmlContent;\r\n }\r\n}\r\n\r\nexport class LinkMessage extends ChatMessage {\r\n private readonly _links: Array;\r\n\r\n constructor(links: Array, author: string, id?: string) {\r\n super(author, id);\r\n this._links = links;\r\n }\r\n\r\n public get links(): Array {\r\n return this._links;\r\n }\r\n}\r\n\r\nexport class TextMessage extends ChatMessage {\r\n private readonly _text: string;\r\n private readonly _chatState: chatState;\r\n\r\n constructor(\r\n text: string,\r\n author: string,\r\n chatState: chatState,\r\n id?: string\r\n ) {\r\n super(author, id);\r\n this._text = text;\r\n this._chatState = chatState;\r\n }\r\n\r\n public get text(): string {\r\n return this._text;\r\n }\r\n\r\n public get chatState(): string {\r\n return this._chatState;\r\n }\r\n}\r\n","export interface ChatClient {\r\n sendMessage(message: string): Promise;\r\n cleanup(): Promise;\r\n}\r\n\r\nexport enum chatState {\r\n NOT_STARTED = \"ns\",\r\n BOOST = \"bs\",\r\n ACE = \"ac\",\r\n}\r\n","import { CustomerServiceForm } from \"./ace\";\r\n\r\nexport interface IChatConfig {\r\n ACEEntrance: string;\r\n errand: string;\r\n baseUrl?: string;\r\n botIconLink?: string;\r\n botImageFooterLink?: string;\r\n botImageFooterAltText?: string;\r\n agentIconLink?: string;\r\n handoverText?: string;\r\n outsideOpeningHoursText: string;\r\n headerTitle: string;\r\n hideWhenInactive: boolean;\r\n filterValues?: Array;\r\n userToken?: string;\r\n}\r\n\r\nexport const environmentURLs = () => {\r\n const environment = process.env.NODE_ENV;\r\n switch (environment) {\r\n case Environment.development:\r\n return {\r\n logger_api_url:\r\n \"https://local-beta.telia.no/Api/ChatErrorLogger/LogError\",\r\n surveyUrl:\r\n \"https://survey.ace.teliacompany.com/survey/start.jsp?id=812D94E6-B461-476A-8060-796D34CE9966\",\r\n };\r\n\r\n case Environment.production: {\r\n return {\r\n logger_api_url:\r\n \"https://www.telia.no/Api/ChatErrorLogger/LogError\",\r\n surveyUrl:\r\n \"https://survey.ace.teliacompany.com/survey/start.jsp?id=812D94E6-B461-476A-8060-796D34CE9966\",\r\n };\r\n }\r\n }\r\n};\r\n\r\nexport const aceEntrance = (formdata: CustomerServiceForm) => {\r\n\r\n switch (true) {\r\n case formdata.serviceName === \"mobile\":\r\n case formdata.serviceName === \"invoice mobile\":\r\n return {\r\n name: \"TNO Chat Kundeservice\",\r\n errand: \"212\",\r\n };\r\n case formdata.serviceName === \"TV\" && formdata.errandName === \"support\":\r\n return {\r\n name: \"GET Chat Support\",\r\n errand: \"197\"\r\n }\r\n case formdata.serviceName === \"broadband\" && formdata.errandName === \"support\":\r\n return {\r\n name: \"GET Chat Support\",\r\n errand: \"198\",\r\n };\r\n case formdata.errandName === \"invoice fixed\":\r\n return {\r\n name: \"GET Chat Faktura\",\r\n errand: \"182\",\r\n };\r\n case formdata.errandName === \"order fixed\":\r\n return {\r\n name: \"GET Chat Bestilling\",\r\n errand: \"181\",\r\n };\r\n }\r\n\r\n return {\r\n name: formdata.serviceName,\r\n errand: formdata.errandName\r\n }\r\n};\r\n\r\nexport const handoverEntrance = (skill: string) => {\r\n switch (skill) {\r\n case \"mobile\":\r\n case \"invoice mobile\":\r\n return {\r\n name: \"TNO Chat Chatbot\",\r\n errand: \"213\",\r\n };\r\n case \"TV\":\r\n return {\r\n name: \"GET Chatbot Support\",\r\n errand: \"199\",\r\n };\r\n case \"broadband\":\r\n return {\r\n name: \"GET Chatbot Support\",\r\n errand: \"200\",\r\n };\r\n case \"invoice fixed\":\r\n return {\r\n name: \"GET Chatbot Faktura\",\r\n errand: \"188\",\r\n };\r\n case \"order fixed\":\r\n return {\r\n name: \"GET Chatbot Bestilling\",\r\n errand: \"186\",\r\n };\r\n }\r\n};\r\n\r\nexport enum Environment {\r\n production = \"production\",\r\n development = \"development\",\r\n}\r\n\r\nexport const getCookie = function (cname: string) {\r\n var name = cname + \"=\";\r\n var ca = document.cookie.split(\";\");\r\n for (var i = 0; i < ca.length; i++) {\r\n var c = ca[i];\r\n while (c.charAt(0) == \" \") c = c.substring(1);\r\n if (c.indexOf(name) == 0) {\r\n return c.substring(name.length, c.length);\r\n }\r\n }\r\n return \"\";\r\n};\r\n\r\nexport const setCookie = function (\r\n cname: string,\r\n cvalue: string,\r\n exdays: number\r\n) {\r\n var d = new Date();\r\n d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000);\r\n var expires = \"expires=\" + d.toUTCString();\r\n document.cookie =\r\n cname + \"=\" + cvalue + \"; domain=.telia.no; \" + expires + \"; path=/\";\r\n};\r\n\r\nexport const chatConfig = function (storage: Storage) {\r\n return {\r\n ACEEntrance: \"\",\r\n errand: \"\",\r\n baseUrl: \"https://telianorge.boost.ai/api/chat/v2\",\r\n botIconLink:\r\n \"https://www.telia.no/filer/chat-bot/Chatbot_halvfigur.png\",\r\n //\"https://www.telia.no/filer/chat-bot/Otelia_Jul_Halvfigur.png\",\r\n botImageFooterLink:\r\n \"https://www.telia.no/filer/chat-bot/Chatbot_halvfigur.png\",\r\n //\"https://www.telia.no/filer/chat-bot/Otelia_Jul_Halvfigur.png\",\r\n botImageFooterAltText: \"Otelia med nisslue\",\r\n handoverText: \"Et øyeblikk..\",\r\n outsideOpeningHoursText: \"Chatten er nå stengt, åpningstider er: \",\r\n headerTitle: \"Otelia\",\r\n hideWhenInactive: true,\r\n conversationId: getCookie(\"boostClientConversationId\"),\r\n filterValues: [\"{{Environment}}\"],\r\n agentIconLink:\r\n \"https://www.telia.no/filer/chat-bot/cgChatAgentAvatar.svg\",\r\n };\r\n};\r\n","import { chatState } from \"../interfaces/chat-client\";\r\n\r\nexport const getState = (storage: Storage): chatState => {\r\n const state = storage.getItem(\"telia-chat-state\");\r\n if (!state) {\r\n return chatState.NOT_STARTED;\r\n }\r\n return state as chatState;\r\n};\r\n\r\nexport const setState = (storage: Storage, state: chatState): void => {\r\n storage.setItem(\"telia-chat-state\", state);\r\n};\r\n\r\nexport const getEntrance = (storage: Storage): any => {\r\n const entrance = {\r\n name: storage.getItem(\"entrance\"),\r\n errand: storage.getItem(\"errand\"),\r\n };\r\n\r\n if (entrance) {\r\n return entrance;\r\n }\r\n\r\n return { name: \"\", errand: \"\" };\r\n};\r\n\r\nexport const setEntrance = (storage: Storage, entrance: any): void => {\r\n storage.setItem(\"entrance\", entrance.name);\r\n storage.setItem(\"errand\", entrance.errand);\r\n};\r\n","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n } else if (typeof process !== 'undefined') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n }\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Content-Type');\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","import axios from \"axios\";\r\nimport { environmentURLs } from \"../interfaces/config\";\r\n\r\nexport class EntranceClosedError implements Error {\r\n public message: string;\r\n public name: string;\r\n\r\n constructor(name: string) {\r\n this.name = name;\r\n }\r\n}\r\n\r\nexport class ChatError implements Error {\r\n public message: string;\r\n public name: string;\r\n public stack: string;\r\n public sourceMethod: string;\r\n public sourceFile: string;\r\n public localState: any;\r\n\r\n constructor(\r\n innerError: Error,\r\n sourceMethod: string,\r\n sourceFile: string,\r\n localState: any\r\n ) {\r\n this.message = innerError.message;\r\n this.name = innerError.name;\r\n this.stack = innerError.stack;\r\n this.sourceMethod = sourceMethod;\r\n this.sourceFile = sourceFile;\r\n this.localState = localState;\r\n }\r\n}\r\n\r\nexport class Logger {\r\n public static async Log(error: ChatError) {\r\n if (!error) return;\r\n\r\n const url = environmentURLs();\r\n\r\n await axios\r\n .post(url.logger_api_url, {\r\n errorMessage:\r\n error.message ||\r\n \"An error has been thrown in the chatwindow\",\r\n errorName: error.name || \"ChatError\",\r\n errorStack: error.stack,\r\n methodName: error.sourceMethod,\r\n fileName: error.sourceFile,\r\n errorState: createStateString(error.localState)\r\n })\r\n .catch(responseError => {\r\n console.error(\"Log post failed: \" + responseError);\r\n });\r\n\r\n console.error(error);\r\n }\r\n}\r\n\r\nconst createStateString = (data: any) => {\r\n if (!data) return \"\";\r\n\r\n var stateObjectArray = [];\r\n\r\n for (var key of Object.keys(data)) {\r\n const stateObject = data[key];\r\n\r\n if (!stateObject) continue;\r\n\r\n stateObjectArray.push(\" \" + formatText(key, stateObject));\r\n\r\n for (var objectName of Object.keys(stateObject)) {\r\n if (objectName) {\r\n stateObjectArray.push(\r\n \" \" + formatText(objectName, stateObject[objectName])\r\n );\r\n }\r\n }\r\n }\r\n\r\n return stateObjectArray.join(\"\\n\");\r\n};\r\n\r\nconst formatText = (objectName: string, object: any) => {\r\n if (typeof object === \"function\") {\r\n return objectName + \" -> function\";\r\n } else {\r\n return objectName + \" -> \" + object;\r\n }\r\n};\r\n","import {\r\n ACE,\r\n AfterChatObject,\r\n ChatEntryObject,\r\n AceChatState,\r\n ClearObject,\r\n ConfigObject,\r\n ConfirmVideoObject,\r\n EmailResultObject,\r\n EntranceClosedObject,\r\n ErrorObject,\r\n EstablishedObject,\r\n EventCallback,\r\n FinishedObject,\r\n IAceError,\r\n InfoObject,\r\n ITimeInterval,\r\n NoSessionObject,\r\n PenStatusObject,\r\n PlacedInQueueObject,\r\n QueueObject,\r\n ReadyObject,\r\n RequestCallback,\r\n RequestCallbacks,\r\n RequestObject,\r\n StartupObject,\r\n ContactData,\r\n} from \"./interfaces/ace\";\r\nimport { ChatClient, chatState } from \"./interfaces/chat-client\";\r\nimport { IChatConfig } from \"./interfaces/config\";\r\nimport { environmentURLs } from \"./interfaces/config\";\r\nimport { IUserInterface } from \"./interfaces/ui\";\r\nimport { HTMLMessage, TextMessage } from \"./messages/message\";\r\nimport { setState } from \"./misc/helpers\";\r\n\r\ninterface EventCallbacks {\r\n established: (establishedObj: EstablishedObject) => void;\r\n entranceClosed: (entranceClosedObj: EntranceClosedObject) => void;\r\n chatEntry: (chatEntryObj: ChatEntryObject) => void;\r\n emailResult: (emailResultObj: EmailResultObject) => void;\r\n confirmVideo: (confVideoObj: ConfirmVideoObject) => void;\r\n noSession: (noSessionObj: NoSessionObject) => void;\r\n clear: (clearObj: ClearObject) => void;\r\n finished: (finishedObj: FinishedObject) => void;\r\n messageSent: () => void;\r\n afterChat: (afterChatObj: AfterChatObject) => void;\r\n error: (errorObj: ErrorObject) => void;\r\n penStatus: (penObj: PenStatusObject) => void;\r\n videoStandby: (videoStandbyObj: {}) => void;\r\n ready: (readyObj: ReadyObject | string) => void;\r\n startup: (startupObj: StartupObject) => void;\r\n showVideo: (showVideoObj: {}) => void;\r\n stopVideo: (stopVideoObj: {}) => void;\r\n config: (configObj: ConfigObject) => void;\r\n queue: (queueObj: QueueObject) => void;\r\n placedInQueue: (placedInQueueObj: PlacedInQueueObject) => void;\r\n info: (infoObj: InfoObject) => void;\r\n}\r\n\r\nexport class AceClient implements ChatClient {\r\n private clientId: string = \"OteliaHandover\";\r\n get aceChatState(): AceChatState {\r\n return this._aceChatState;\r\n }\r\n set aceChatState(value: AceChatState) {\r\n switch (value) {\r\n case \"established\":\r\n this.userInterface.userInputEnabled = true;\r\n break;\r\n case \"startup\":\r\n case \"queue\":\r\n }\r\n this._aceChatState = value;\r\n }\r\n private ready: boolean = false;\r\n private _aceChatState: AceChatState;\r\n\r\n private readonly eventCallBacks: EventCallbacks = {\r\n // TODO: If this would not lead to too much coupling, try to convert this to a class that keeps a reference\r\n // to this ACEClient object, and move the methods over to there.\r\n ready: (readyObj: any): void => {\r\n // console.debug(`ready - infoText is: ${readyObj.infoText}`);\r\n // \"Best practice is to not do anything in the Chat Client (besides calling initialize in\r\n // Web SDK) until ready is called back from Web SDK.\" -- Configuration Instructions ACE Web SDK\r\n this.ready = true;\r\n this.sessionStorage.setItem(\"telia-chat-state\", chatState.ACE);\r\n this.aceChatState = readyObj.state || readyObj; // looks like readyObj is just the state string.\r\n if (\r\n this.aceChatState === \"noSession\" ||\r\n this.aceChatState === \"finished\"\r\n ) {\r\n // const contactData = {\r\n // customerName: 'Eirik Test',\r\n // customerEmailAddress: 'ek@marcello.no',\r\n // pNr: '47823260'\r\n // };\r\n this.callGuide.api.chat.request({\r\n entrance: this.config.ACEEntrance,\r\n errand: this.config.errand,\r\n visitorQuestion: \"\",\r\n contactData: this.contactData,\r\n clientID: this.clientId,\r\n });\r\n }\r\n },\r\n\r\n startup: (startupObj: StartupObject): void => {\r\n // console.debug(`startup - infoText is: ${startupObj.infoText}`);\r\n this.aceChatState = \"startup\";\r\n if (startupObj.infoText) {\r\n this.userInterface.appendMessage(\r\n new TextMessage(\r\n startupObj.infoText,\r\n \"system\",\r\n chatState.ACE\r\n )\r\n );\r\n }\r\n },\r\n\r\n queue: (queueObj: QueueObject): void => {\r\n // console.debug(`queue - infoText is: ${queueObj.infoText}`);\r\n this.aceChatState = \"queue\";\r\n this.userInterface.appendMessage(\r\n new HTMLMessage(queueObj.infoText, \"system\")\r\n );\r\n if (queueObj.queuePos) {\r\n this.userInterface.setQueuePosition(queueObj.queuePos);\r\n }\r\n },\r\n\r\n established: (establishedObj: EstablishedObject): void => {\r\n // console.debug(`established - infoText is: ${establishedObj.infoText}`);\r\n this.aceChatState = \"established\";\r\n // only send transcript the first time, not on page reloads etc.\r\n if (!this.sessionResumed) {\r\n const transcript = this.userInterface.getTranscript();\r\n this.sendMessage(transcript);\r\n }\r\n this.userInterface.appendMessage(\r\n new TextMessage(\r\n establishedObj.infoText,\r\n \"system\",\r\n chatState.ACE\r\n )\r\n );\r\n this.userInterface.clearQueuePosition();\r\n this.userInterface.userInputEnabled = true;\r\n },\r\n\r\n placedInQueue: (placedInQueueObj: PlacedInQueueObject): void => {\r\n // This means that the agent placed the user _back_ in the queue.\r\n // console.debug(`placedInQueue - infoText is ${placedInQueueObj.infoText}`);\r\n this.aceChatState = \"placedInQueue\";\r\n this.userInterface.appendMessage(\r\n new TextMessage(\r\n placedInQueueObj.infoText,\r\n \"system\",\r\n chatState.ACE\r\n )\r\n );\r\n this.userInterface.userInputEnabled = false;\r\n },\r\n\r\n afterChat: (afterChatObj: AfterChatObject): void => {\r\n this.userInterface.chatEnded = true;\r\n this.userInterface.resetWindow();\r\n // This event happens when ACE Web SDK wants to offer the user to send the chat transcript on e-mail.\r\n // If the user's e-mail has already been captured by the login process, a default e-mail address\r\n // will be included in afterChatObj.\r\n // This happens on Telia, but some installations never dispatch the afterChat event.\r\n // console.debug(`afterChat - infoText is: ${afterChatObj.infoText}`);\r\n this.aceChatState = \"afterChat\";\r\n this.userInterface.appendMessage(\r\n new TextMessage(afterChatObj.infoText, \"system\", chatState.ACE)\r\n );\r\n // TODO: When adding the ability to send transcripts on e-mail, don't delete here; wait until after\r\n // the user has had a chance to send the transcript.\r\n this.callGuide.api.chat.delete(this.clientId);\r\n if (this.onDoneCallback) {\r\n this.onDoneCallback();\r\n }\r\n },\r\n\r\n finished: (finishedObj: FinishedObject): void => {\r\n // console.debug(`finished - infoText is: ${finishedObj.infoText}`);\r\n this.aceChatState = \"finished\";\r\n this.userInterface.appendMessage(\r\n new TextMessage(finishedObj.infoText, \"system\", chatState.ACE)\r\n ); // the chat is closed\r\n this.userInterface.userInputEnabled = false;\r\n this.callGuide.api.chat.delete(this.clientId);\r\n if (this.onDoneCallback) {\r\n this.onDoneCallback();\r\n }\r\n },\r\n\r\n error: (errorObj: ErrorObject): void => {\r\n // console.debug(`error - infoText is: ${errorObj.infoText}`);\r\n this.aceChatState = \"error\";\r\n setState(this.sessionStorage, chatState.NOT_STARTED);\r\n const message: TextMessage = new TextMessage(\r\n errorObj.infoText + `\\nReason: ${errorObj.reason}`,\r\n \"system\",\r\n chatState.ACE\r\n );\r\n this.userInterface.appendMessage(message);\r\n },\r\n\r\n entranceClosed: (entranceClosedObj: EntranceClosedObject): void => {\r\n // this.userInterface.appendMessage(new TextMessage(entranceClosedObj.infoText, 'system'));\r\n // console.debug(`entranceClosed - infoText is: ${entranceClosedObj.infoText}`);\r\n },\r\n\r\n chatEntry: (chatEntryObj: ChatEntryObject): void => {\r\n //console.log(`chatEntry - message is: ${chatEntryObj.message}`);\r\n // Ignore the transcript message sent on established connection.\r\n if (\r\n chatEntryObj.message &&\r\n chatEntryObj.message.indexOf(\r\n \"Samtale videresendt fra chatbot\"\r\n ) > -1\r\n ) {\r\n return;\r\n }\r\n\r\n // if (chatEntryObj.message.includes(\"[SURVEYDATA]\")) {\r\n // const surveyUrl = this.createSurveyUrl(chatEntryObj.message);\r\n // this.userInterface.toggleSurvey(surveyUrl);\r\n // this.userInterface.chatEnded = true;\r\n // return;\r\n // }\r\n\r\n function getAuthor(source: string): string {\r\n switch (source) {\r\n case \"system\":\r\n return \"system\";\r\n case \"agent\":\r\n return \"agent\";\r\n case \"customer\":\r\n return \"user\";\r\n }\r\n }\r\n\r\n const author: string = getAuthor(chatEntryObj.source);\r\n const message: HTMLMessage = new HTMLMessage(\r\n chatEntryObj.message,\r\n author\r\n );\r\n\r\n this.userInterface.appendMessage(message);\r\n },\r\n\r\n config: (configObj: ConfigObject): void => {\r\n this.userInterface.setMaxInputLength(configObj.chatEntryMaxLength);\r\n },\r\n\r\n messageSent: (): void => {\r\n // XXX - Is this guaranteed to be the message from the user, or could it also be orriginating from the system?\r\n this.userInterface.clearInputField();\r\n },\r\n\r\n penStatus: (penObj: PenStatusObject): void => {\r\n let typingStatus: boolean;\r\n switch (penObj.penStatus) {\r\n case \"on\":\r\n typingStatus = true;\r\n break;\r\n case \"off\":\r\n typingStatus = false;\r\n break;\r\n }\r\n // Only do something if it's on OR off\r\n if (typingStatus !== undefined) {\r\n this.userInterface.setTypingStatus(penObj.alias, typingStatus);\r\n }\r\n },\r\n\r\n emailResult: (emailResultObj: EmailResultObject): void => {\r\n // TODO: What kind of text should we send? Check reference chat client.\r\n this.userInterface.appendMessage(\r\n new TextMessage(\r\n emailResultObj.infoText,\r\n \"system\",\r\n chatState.ACE\r\n )\r\n );\r\n },\r\n\r\n clear: (clearObj: ClearObject): void => {\r\n this.userInterface.emptyChatHistory();\r\n if (clearObj.infoText) {\r\n this.userInterface.appendMessage(\r\n new TextMessage(clearObj.infoText, \"system\", chatState.ACE)\r\n );\r\n }\r\n },\r\n\r\n noSession: (noSessionObj: NoSessionObject): void => {\r\n // Doc says: \"If the result of initialize indicates that no chat session is in progress, this\r\n // handler is called.\"\r\n // It seems like this would be the normal case immediately after handoff, so I don't see why would\r\n // need to do anything in this case.\r\n },\r\n\r\n confirmVideo: (confVideoObj: ConfirmVideoObject): void => {\r\n // Not implementing video for now\r\n confVideoObj.replyFunction(\"denied\");\r\n },\r\n\r\n showVideo: (showVideoObj: {}): void => {\r\n return; // Should never be called, since we deny video\r\n },\r\n\r\n stopVideo: (stopVideoObj: {}): void => {\r\n return; // Should never be called, since we deny video\r\n },\r\n\r\n videoStandby: (videoStandbyObj: {}): void => {\r\n return; // Should never be called, since we deny video\r\n },\r\n\r\n info: (infoObj: InfoObject): void => {\r\n // The only possible values of infoObj.infoKey have to do with video.\r\n // Until this changes, or we add video support, we don't need to do anything here.\r\n },\r\n };\r\n private readonly requestCallbacks: RequestCallbacks = {\r\n hideChatActivations: (): void => {\r\n // It's not clear if we need to do anything here, since we don't show a traditional chat offer box.\r\n },\r\n\r\n showChatActivations: (): void => {\r\n //\r\n },\r\n\r\n startChat: (chatInput: RequestObject): void => {\r\n this.callGuide.api.chat.request(chatInput);\r\n },\r\n };\r\n constructor(\r\n private config: IChatConfig,\r\n private userInterface: IUserInterface,\r\n private callGuide: ACE,\r\n private onDoneCallback: () => void,\r\n private sessionStorage: Storage,\r\n private sessionResumed: boolean,\r\n private contactData: ContactData\r\n ) { }\r\n\r\n public initialize(): void {\r\n this.callGuide.api.chat.initialize({\r\n eventCallback: this.eventCallback,\r\n requestCallback: this.requestCallback,\r\n penStatusSelector: this.userInterface.inputFieldSelector,\r\n clientType: \"web\",\r\n clientID: this.clientId,\r\n });\r\n }\r\n\r\n public cleanup(): Promise {\r\n // TODO: If we implement e-mail transcripts, we need to split this in two: quit before the e-mail dialog,\r\n // and delete after.\r\n this.callGuide.api.chat.quit(this.clientId);\r\n return;\r\n }\r\n\r\n public async sendMessage(message: string): Promise {\r\n if (this.ready) {\r\n this.callGuide.api.chat.write(message, this.clientId);\r\n } else {\r\n this.userInterface.appendMessage(\r\n new TextMessage(\r\n \"Vi har ikke fått forbindelse med chatten ennå. Vent litt.\",\r\n \"system\",\r\n chatState.ACE\r\n )\r\n );\r\n }\r\n }\r\n\r\n public isOpen(): Promise {\r\n return new Promise(\r\n async (\r\n resolve: (openStatus: boolean) => void,\r\n reject: () => void\r\n ) => {\r\n const result = await this.callGuide.api.isEntranceOpen(\r\n 1,\r\n this.config.ACEEntrance,\r\n null\r\n );\r\n resolve(\r\n result.resultCode === 0 &&\r\n result.resultData &&\r\n result.resultData.isOpen === true\r\n );\r\n }\r\n );\r\n }\r\n public getOpeningHours(days: number): Promise> {\r\n return new Promise>(\r\n (\r\n resolve: (times: Array) => void,\r\n reject: (err: IAceError) => void\r\n ) => {\r\n this.callGuide.api.getOpeningTimes(\r\n this.config.ACEEntrance,\r\n new Date(),\r\n days,\r\n (times) => {\r\n resolve(times);\r\n },\r\n (err) => {\r\n reject(err);\r\n }\r\n );\r\n }\r\n );\r\n }\r\n\r\n public createSurveyUrl(surveyData: string): string {\r\n const url = environmentURLs();\r\n\r\n var surveyData = surveyData.replace(\"[SURVEYDATA]\", \"\");\r\n var surveyData = surveyData.replace(\"[/SURVEYDATA]\", \"\");\r\n\r\n // console.log(surveyData);\r\n // console.log(url);\r\n // console.log(\"Result: \" + url.surveyUrl + \"&\" + surveyData);\r\n return url.surveyUrl + \"&\" + surveyData;\r\n }\r\n\r\n private readonly eventCallback: EventCallback = (\r\n eventType: string,\r\n eventObject: any\r\n ): void => {\r\n // console.debug(`${eventType} - infoText is: ${eventObject.infoText}`);\r\n switch (eventType) {\r\n case \"messageSent\":\r\n return this.eventCallBacks[eventType]();\r\n case \"stopVideo\":\r\n case \"showVideo\":\r\n case \"videoStandby\":\r\n return this.eventCallBacks[eventType](eventObject);\r\n case \"clear\":\r\n case \"noSession\":\r\n return this.eventCallBacks[eventType](eventObject);\r\n case \"ready\":\r\n return this.eventCallBacks[eventType](eventObject);\r\n case \"startup\":\r\n return this.eventCallBacks[eventType](eventObject);\r\n case \"queue\":\r\n return this.eventCallBacks[eventType](eventObject);\r\n case \"established\":\r\n return this.eventCallBacks[eventType](eventObject);\r\n case \"placedInQueue\":\r\n return this.eventCallBacks[eventType](eventObject);\r\n case \"afterChat\":\r\n return this.eventCallBacks[eventType](eventObject);\r\n case \"finished\":\r\n return this.eventCallBacks[eventType](eventObject);\r\n case \"error\":\r\n return this.eventCallBacks[eventType](eventObject);\r\n case \"info\":\r\n return this.eventCallBacks[eventType](eventObject);\r\n case \"entranceClosed\":\r\n return this.eventCallBacks[eventType](eventObject);\r\n case \"chatEntry\":\r\n return this.eventCallBacks[eventType](eventObject);\r\n case \"config\":\r\n return this.eventCallBacks[eventType](eventObject);\r\n case \"penStatus\":\r\n return this.eventCallBacks[eventType](eventObject);\r\n case \"emailResult\":\r\n return this.eventCallBacks[eventType](eventObject);\r\n case \"confirmVideo\":\r\n return this.eventCallBacks[eventType](eventObject);\r\n default:\r\n return;\r\n }\r\n };\r\n\r\n private readonly requestCallback: RequestCallback = (\r\n eventType: string,\r\n eventObject?: RequestObject\r\n ): void => {\r\n switch (eventType) {\r\n case \"startChat\":\r\n this.requestCallbacks.startChat(eventObject);\r\n break;\r\n case \"hideChatActivations\":\r\n case \"showChatActivations\":\r\n this.requestCallbacks[eventType]();\r\n break;\r\n default:\r\n // Unknown event type\r\n }\r\n };\r\n}\r\n","import axios, { AxiosResponse } from \"axios\";\r\nimport {\r\n GoogleDirectionsMessage,\r\n GoogleLocationMessage,\r\n GooglePlacesMessage,\r\n} from \"./messages/google-message\";\r\nimport {\r\n AnyBoostResponse,\r\n BoostMultiResponse,\r\n BoostResponse,\r\n HTMLMessagePayload,\r\n IBoostDeleteRequest,\r\n IBoostPollRequest,\r\n IBoostPostRequest,\r\n IBoostRequest,\r\n IBoostStopRequest,\r\n LinkListPayload,\r\n ResponseElement,\r\n ResponseResponse,\r\n TextMessagePayload,\r\n} from \"./interfaces/boost\";\r\nimport { ChatClient } from \"./interfaces/chat-client\";\r\nimport { IChatConfig } from \"./interfaces/config\";\r\nimport {\r\n GoogleDirectionsPayload,\r\n GoogleLocationPayload,\r\n GooglePlacesPayload,\r\n} from \"./interfaces/google\";\r\nimport { IUserInterface } from \"./interfaces/ui\";\r\nimport {\r\n ChatMessage,\r\n HTMLMessage,\r\n LinkMessage,\r\n TextMessage,\r\n} from \"./messages/message\";\r\nimport {\r\n IMessageDispatcher,\r\n MessageDispatcher,\r\n} from \"./misc/message-dispatcher\";\r\nimport { ChatInstance } from \"./chat-instance\";\r\nimport { chatState } from \"./interfaces/chat-client\";\r\nimport { Logger, ChatError } from \"./misc/errors\";\r\n\r\nexport class BoostClient implements ChatClient {\r\n // Just delegate to ChatInstanceWithBot. We assume this.chatInstance will always exists, since it is\r\n // set in the constructor and never unset.\r\n get filterValues(): Array {\r\n return this.chatInstance.getFilterValues();\r\n }\r\n\r\n set filterValues(value: Array) {\r\n this.chatInstance.setFilterValues(value);\r\n }\r\n get conversationId(): string {\r\n return this.storage.getItem(\"boostClientConversationId\");\r\n }\r\n set conversationId(value: string) {\r\n if (value !== this.conversationId) {\r\n this.chatInstance.dispatchEventType(\"conversationIdChanged\");\r\n }\r\n if (value === null) {\r\n this.storage.removeItem(\"boostClientConversationId\");\r\n } else {\r\n this.storage.setItem(\"boostClientConversationId\", value);\r\n }\r\n }\r\n private hasProcessedFirstResponse: boolean;\r\n\r\n private readonly userInterface: IUserInterface;\r\n private readonly chatInstance: ChatInstance;\r\n private readonly config: IChatConfig;\r\n private readonly userToken: string;\r\n private readonly storage: Storage;\r\n private readonly pollInterval: number = 2000;\r\n private pollTimer: NodeJS.Timer; // TODO: Will this also work in the browser, where this is a numeric ID?\r\n private lastKnownResponseId: string = null;\r\n private messageDispatcher: IMessageDispatcher;\r\n\r\n constructor(\r\n config: IChatConfig,\r\n chatInstance: ChatInstance,\r\n userInterface: IUserInterface,\r\n storage: Storage\r\n ) {\r\n this.userInterface = userInterface;\r\n this.chatInstance = chatInstance;\r\n this.config = config;\r\n this.userInterface.registerClient(this);\r\n this.storage = storage;\r\n this.messageDispatcher = new MessageDispatcher(userInterface);\r\n this.userToken = this.config.userToken ? this.config.userToken : null;\r\n }\r\n\r\n public async sendMessage(message: string): Promise {\r\n await this.ensureConnected();\r\n this.displayMessage(new TextMessage(message, \"user\", chatState.BOOST)); // display own message immediately, for better user experience.\r\n const payload: any = {\r\n command: \"POST\",\r\n conversation_id: this.conversationId,\r\n type: \"text\",\r\n value: message,\r\n };\r\n if (this.userToken) {\r\n payload.user_token = this.userToken;\r\n }\r\n if (this.filterValues) {\r\n payload.filter_values = this.filterValues;\r\n }\r\n await axios\r\n .post(this.config.baseUrl, payload)\r\n .then((response) => {\r\n this.processResponse(response.data);\r\n })\r\n .catch((error) => {\r\n const data = {\r\n conversationId: this.conversationId,\r\n config: this.config,\r\n };\r\n Logger.Log(\r\n new ChatError(error, \"sendMessage\", \"boost-client.ts\", data)\r\n );\r\n });\r\n }\r\n\r\n public async downloadConversation(): Promise {\r\n const payload: any = {\r\n command: \"DOWNLOAD\",\r\n conversation_id: this.conversationId,\r\n };\r\n if (this.userToken) {\r\n payload.user_token = this.userToken;\r\n }\r\n if (this.filterValues) {\r\n payload.filter_values = this.filterValues;\r\n }\r\n return await axios.post(this.config.baseUrl, payload);\r\n }\r\n public async deleteConversation(): Promise {\r\n const payload: IBoostDeleteRequest = {\r\n command: \"DELETE\",\r\n conversation_id: this.conversationId,\r\n };\r\n if (this.filterValues) {\r\n payload.filter_values = this.filterValues;\r\n }\r\n await axios.post(this.config.baseUrl, payload);\r\n this.conversationId = null;\r\n }\r\n public async giveMessageFeedback(\r\n messageId: string,\r\n value: string\r\n ): Promise {\r\n const payload: IBoostPostRequest = {\r\n conversation_id: this.conversationId,\r\n command: \"POST\",\r\n type: \"feedback\",\r\n id: messageId,\r\n value,\r\n };\r\n if (this.userToken) {\r\n payload.user_token = this.userToken;\r\n }\r\n if (this.filterValues) {\r\n payload.filter_values = this.filterValues;\r\n }\r\n return await axios.post(this.config.baseUrl, payload);\r\n }\r\n public async giveConversationFeedback(\r\n positive: boolean,\r\n text?: string\r\n ): Promise {\r\n const payload: any = {\r\n conversation_id: this.conversationId,\r\n command: \"FEEDBACK\",\r\n value: {\r\n rating: positive ? 1 : 0,\r\n text: text || \"\",\r\n },\r\n };\r\n if (this.userToken) {\r\n payload.user_token = this.userToken;\r\n }\r\n if (this.filterValues) {\r\n payload.filter_values = this.filterValues;\r\n }\r\n await axios.post(this.config.baseUrl, payload);\r\n }\r\n public async cleanup(): Promise {\r\n try {\r\n clearTimeout(this.pollTimer);\r\n if (!this.conversationId) {\r\n // No conversation is ongoing, probably because the user requested a deletion\r\n return;\r\n }\r\n const oldConversationId: string = this.conversationId;\r\n this.conversationId = null;\r\n const payload: IBoostStopRequest = {\r\n command: \"STOP\",\r\n conversation_id: oldConversationId,\r\n };\r\n if (this.filterValues) {\r\n payload.filter_values = this.filterValues;\r\n }\r\n\r\n await axios.post(this.config.baseUrl, payload);\r\n } catch (err) {\r\n const data = {\r\n conversationId: this.conversationId,\r\n storage: this.storage,\r\n };\r\n Logger.Log(new ChatError(err, \"cleanup\", \"boost-client.ts\", data));\r\n }\r\n }\r\n\r\n public async connect(): Promise {\r\n let payload: IBoostRequest;\r\n if (this.conversationId) {\r\n payload = {\r\n command: \"RESUME\",\r\n conversation_id: this.conversationId,\r\n };\r\n } else {\r\n payload = { command: \"START\" };\r\n }\r\n if (this.userToken) {\r\n payload.user_token = this.userToken;\r\n }\r\n if (this.filterValues) {\r\n payload.filter_values = this.filterValues;\r\n }\r\n await axios\r\n .post(this.config.baseUrl, payload)\r\n .then((response) => {\r\n this.processResponse(response.data);\r\n })\r\n .catch((error) => {\r\n const data = {\r\n payload,\r\n };\r\n Logger.Log(\r\n new ChatError(error, \"connect\", \"boost-client.js\", data)\r\n );\r\n });\r\n }\r\n\r\n public async triggerActionLink(actionLinkId: string): Promise {\r\n await this.ensureConnected();\r\n const payload: IBoostPostRequest = {\r\n command: \"POST\",\r\n conversation_id: this.conversationId,\r\n type: \"action_link\",\r\n id: actionLinkId,\r\n };\r\n if (this.userToken) {\r\n payload.user_token = this.userToken;\r\n }\r\n if (this.filterValues) {\r\n payload.filter_values = this.filterValues;\r\n }\r\n await axios\r\n .post(this.config.baseUrl, payload)\r\n .then((response) => {\r\n this.processResponse(response.data);\r\n })\r\n .catch((error) => {\r\n const data = {\r\n payload,\r\n };\r\n\r\n Logger.Log(\r\n new ChatError(\r\n error,\r\n \"triggerActionLink\",\r\n \"boost-client.ts\",\r\n data\r\n )\r\n );\r\n });\r\n }\r\n\r\n public setFilterValues(filterValues: Array): void {\r\n this.filterValues = filterValues;\r\n }\r\n\r\n private async ensureConnected(): Promise {\r\n if (!this.conversationId) {\r\n await this.connect();\r\n }\r\n }\r\n\r\n private displayMessage(message: ChatMessage, showFeedback?: boolean): void {\r\n this.userInterface.appendMessage(message);\r\n if (showFeedback) {\r\n this.userInterface.appendMsgFeedback(message);\r\n }\r\n }\r\n\r\n private processResponse(response: AnyBoostResponse): void {\r\n // TODO: If the response is _not_ structured as expected, maybe show the user an indication\r\n // that something is wrong with the API?\r\n\r\n this.storage.setItem(\"chatSkill\", response.conversation.state.skill);\r\n\r\n function isMultiResponse(res: any): res is BoostMultiResponse {\r\n return res.responses;\r\n }\r\n\r\n if (this.hasConversationId(response)) {\r\n this.conversationId = response.conversation.id;\r\n\r\n if (isMultiResponse(response)) {\r\n if (response.responses) {\r\n for (const res of response.responses) {\r\n this.processSubResponse(res);\r\n }\r\n }\r\n } else {\r\n if (response.response && response.response.elements) {\r\n this.processSubResponse(response.response);\r\n }\r\n }\r\n\r\n if (!this.pollTimer && this.pollingIsRequested(response) === true) {\r\n // TODO: Rewrite to recursive setTimeout, to ensure we don't have concurrent requests going\r\n this.pollTimer = setInterval(async () => {\r\n await this.poll();\r\n }, this.pollInterval);\r\n } else if (this.pollTimer && this.pollingIsDisallowed(response)) {\r\n clearTimeout(this.pollTimer);\r\n }\r\n }\r\n this.hasProcessedFirstResponse = true;\r\n this.userInterface.userInputEnabled = true;\r\n }\r\n\r\n private processSubResponse(subResponse: ResponseResponse): void {\r\n function getAuthor(source: string): string {\r\n switch (source) {\r\n case \"bot\":\r\n return \"bot\";\r\n case \"client\":\r\n return \"user\";\r\n }\r\n }\r\n\r\n if (subResponse.elements) {\r\n this.seen(subResponse);\r\n if (subResponse.source) {\r\n const author: string = getAuthor(subResponse.source);\r\n const id: string = subResponse.id;\r\n const resLength: number = subResponse.elements.length;\r\n subResponse.elements.forEach(\r\n (subRes: ResponseElement, index: number) => {\r\n this.processResponseElement(\r\n subRes,\r\n author,\r\n id,\r\n index === resLength - 1\r\n );\r\n }\r\n );\r\n }\r\n }\r\n }\r\n\r\n private hasConversationId(response: BoostResponse): boolean {\r\n return (\r\n response &&\r\n response.conversation &&\r\n response.conversation.hasOwnProperty(\"id\")\r\n );\r\n }\r\n\r\n private pollingIsDisallowed(response: BoostResponse): boolean {\r\n return (\r\n response.conversation &&\r\n response.conversation.state &&\r\n response.conversation.state.poll === false\r\n );\r\n }\r\n\r\n private pollingIsRequested(response: BoostResponse): boolean {\r\n return (\r\n response.conversation &&\r\n response.conversation.state &&\r\n response.conversation.state.poll === true\r\n );\r\n }\r\n\r\n private processResponseElement(\r\n element: ResponseElement,\r\n author: string,\r\n id: string,\r\n last: boolean\r\n ): void {\r\n let message: ChatMessage = null;\r\n switch (element.type) {\r\n case \"html\":\r\n message = new HTMLMessage(\r\n (element.payload as HTMLMessagePayload).html,\r\n author,\r\n id\r\n );\r\n break;\r\n case \"text\":\r\n message = new TextMessage(\r\n (element.payload as TextMessagePayload).text,\r\n author,\r\n chatState.BOOST,\r\n id\r\n );\r\n break;\r\n case \"links\":\r\n message = new LinkMessage(\r\n (element.payload as LinkListPayload).links,\r\n author,\r\n id\r\n );\r\n break;\r\n case \"google_directions\":\r\n message = new GoogleDirectionsMessage(\r\n element.payload as GoogleDirectionsPayload,\r\n author\r\n );\r\n break;\r\n case \"google_places\":\r\n message = new GooglePlacesMessage(\r\n element.payload as GooglePlacesPayload,\r\n author\r\n );\r\n break;\r\n case \"google_location\":\r\n message = new GoogleLocationMessage(\r\n element.payload as GoogleLocationPayload,\r\n author\r\n );\r\n break;\r\n default:\r\n // TODO: Handle unknown response element type\r\n }\r\n if (message) {\r\n if (this.hasProcessedFirstResponse) {\r\n this.messageDispatcher.add(message, last);\r\n } else {\r\n this.displayMessage(message, last);\r\n }\r\n }\r\n }\r\n\r\n private async poll(): Promise {\r\n if (this.conversationId && this.lastKnownResponseId) {\r\n const payload: IBoostPollRequest = {\r\n command: \"POLL\",\r\n conversation_id: this.conversationId,\r\n value: this.lastKnownResponseId,\r\n };\r\n if (this.filterValues) {\r\n payload.filter_values = this.filterValues;\r\n }\r\n const response: AxiosResponse = await axios.post(\r\n this.config.baseUrl,\r\n payload\r\n );\r\n this.processResponse(response.data);\r\n }\r\n return;\r\n }\r\n\r\n private seen(bodyResponse: ResponseResponse): void {\r\n if (\r\n !this.lastKnownResponseId ||\r\n bodyResponse.id > this.lastKnownResponseId\r\n ) {\r\n this.lastKnownResponseId = bodyResponse.id;\r\n }\r\n }\r\n}\r\n","module.exports = require('./lib/axios');","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar buildURL = require('./../helpers/buildURL');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\nvar btoa = (typeof window !== 'undefined' && window.btoa && window.btoa.bind(window)) || require('./../helpers/btoa');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n var loadEvent = 'onreadystatechange';\n var xDomain = false;\n\n // For IE 8/9 CORS support\n // Only supports POST and GET calls and doesn't returns the response headers.\n // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n if (process.env.NODE_ENV !== 'test' &&\n typeof window !== 'undefined' &&\n window.XDomainRequest && !('withCredentials' in request) &&\n !isURLSameOrigin(config.url)) {\n request = new window.XDomainRequest();\n loadEvent = 'onload';\n xDomain = true;\n request.onprogress = function handleProgress() {};\n request.ontimeout = function handleTimeout() {};\n }\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request[loadEvent] = function handleLoad() {\n if (!request || (request.readyState !== 4 && !xDomain)) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n // IE sends 1223 instead of 204 (https://github.com/axios/axios/issues/201)\n status: request.status === 1223 ? 204 : request.status,\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (requestData === undefined) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","import { IUserInterface } from \"../interfaces/ui\";\r\nimport { ChatMessage } from \"../messages/message\";\r\n\r\nconst botMessageDelay: number = 2500;\r\n\r\nexport interface IMessageDispatcher {\r\n add(message: ChatMessage, feedback: boolean): void;\r\n}\r\n// MessageDispatcher is used to show delayed bot messages.\r\nexport class MessageDispatcher implements IMessageDispatcher {\r\n private messages: ChatMessage[] = [];\r\n private timer: NodeJS.Timer = null;\r\n constructor(private userInterface: IUserInterface) {\r\n this.messages = [];\r\n }\r\n public add(message: ChatMessage, feedback: boolean): void {\r\n message.showFeedback = feedback;\r\n this.messages.push(message);\r\n this.userInterface.showTypingChatBubble(true);\r\n if (this.timer === null) {\r\n this.timer = setInterval(() => this.process(), botMessageDelay);\r\n }\r\n }\r\n private process(): void {\r\n const message = this.messages.shift();\r\n if (!message) {\r\n clearInterval(this.timer);\r\n this.timer = null;\r\n this.userInterface.showTypingChatBubble(false);\r\n }\r\n if (message) {\r\n this.userInterface.appendMessage(message);\r\n if (message.showFeedback) {\r\n this.userInterface.appendMsgFeedback(message);\r\n this.userInterface.showTypingChatBubble(false);\r\n } else {\r\n this.userInterface.showTypingChatBubble(true);\r\n }\r\n }\r\n }\r\n}\r\n","import { MessageWithText } from \"./messages/google-message\";\r\nimport { Link } from \"./interfaces/boost\";\r\nimport { IChatConfig } from \"./interfaces/config\";\r\nimport { ChatMessage, HTMLMessage, LinkMessage } from \"./messages/message\";\r\nimport {\r\n minimizeIconPath,\r\n closeIconPath,\r\n feedBackSendButtonPath,\r\n helpIconPath,\r\n thumbDownFilled,\r\n thumbDownNoFill,\r\n thumbUpFilled,\r\n thumbUpNoFill,\r\n linkArrowPath,\r\n openIcon,\r\n} from \"./paths\";\r\n\r\ntype QualifiedName = string;\r\ntype Value = string;\r\ntype AttributeSpecification = [QualifiedName, Value];\r\ntype AttributeSpecificationList = Array;\r\n\r\nexport class HTMLElementCreator {\r\n private readonly documentObject: Document;\r\n private readonly botIconLink: string;\r\n private readonly agentIconLink: string;\r\n\r\n private readonly thumbUpNoFill = thumbUpNoFill;\r\n private readonly thumbDownNoFill = thumbDownNoFill;\r\n private readonly linkArrowPath = linkArrowPath;\r\n private readonly openIcon = openIcon;\r\n private readonly thumbDownFilled = thumbDownFilled;\r\n private readonly thumbUpFilled = thumbUpFilled;\r\n private readonly feedBackSendButtonPath = feedBackSendButtonPath;\r\n private readonly helpIconPath = helpIconPath;\r\n private readonly minimizeIconPath = minimizeIconPath;\r\n private readonly closeIconPath = closeIconPath;\r\n\r\n private numberOfFeedbackElements: number = 0;\r\n private conversationFeedback: string;\r\n\r\n constructor(documentObject: Document, chatConfig: IChatConfig) {\r\n this.documentObject = documentObject;\r\n this.botIconLink = chatConfig.botIconLink;\r\n this.agentIconLink = chatConfig.agentIconLink;\r\n }\r\n public createMessageLinks(\r\n message: LinkMessage,\r\n callback: (link: Link) => void\r\n ): Array {\r\n const linkElements: Array = [];\r\n for (const messageLink of message.links) {\r\n const newMessage: HTMLElement = this.createLinkMessage(\r\n messageLink,\r\n callback\r\n );\r\n linkElements.push(newMessage);\r\n }\r\n return linkElements;\r\n }\r\n public createChatHeader(\r\n title: string,\r\n minimizeChatWindow: (event: any) => void,\r\n closeChatWindow: (event: any) => void,\r\n toggleHelpWindow: () => void\r\n ): { chatHeader: HTMLElement; dragEl: HTMLElement } {\r\n const chatHeader: HTMLElement = this.createElementWithAttributes(\r\n \"div\",\r\n [[\"class\", \"telia-chat-header\"]]\r\n );\r\n\r\n const chatBoxTitle: HTMLElement = this.createElementWithAttributes(\r\n \"h2\",\r\n [[\"class\", \"chat-window-header\"]]\r\n );\r\n\r\n const dragEl: HTMLElement = this.createElementWithAttributes(\"div\", [\r\n [\"class\", \"drag-element\"],\r\n [\"style\", \"cursor: move;\"],\r\n ]);\r\n\r\n const helpIconContainer: HTMLElement = this.createElementWithAttributes(\r\n \"button\",\r\n [\r\n [\"class\", \"icon-help-circled-alt\"],\r\n [\"aria-label\", \"Hjelp\"],\r\n ]\r\n );\r\n const minimizeIconContainer: HTMLElement = this.createElementWithAttributes(\r\n \"button\",\r\n [\r\n [\"class\", \"minimize-btn icon-window-minimize enabled\"],\r\n [\"aria-label\", \"Skjul\"],\r\n ]\r\n );\r\n const closeIconContainer: HTMLElement = this.createElementWithAttributes(\r\n \"button\",\r\n [\r\n [\"class\", \"icon-cancel\"],\r\n [\"aria-label\", \"Lukk\"],\r\n ]\r\n );\r\n\r\n minimizeIconContainer.addEventListener(\"click\", minimizeChatWindow);\r\n const minimizeIcon = this.createSVGWithPath(this.minimizeIconPath);\r\n minimizeIconContainer.appendChild(minimizeIcon);\r\n\r\n closeIconContainer.addEventListener(\"click\", closeChatWindow);\r\n const closeIcon = this.createSVGWithPath(this.closeIconPath);\r\n closeIconContainer.appendChild(closeIcon);\r\n\r\n helpIconContainer.addEventListener(\"click\", toggleHelpWindow);\r\n const helpIcon = this.createSVGWithPath(this.helpIconPath);\r\n helpIconContainer.appendChild(helpIcon);\r\n\r\n const chatBoxTitleText: Text = this.documentObject.createTextNode(\r\n title\r\n );\r\n chatBoxTitle.appendChild(chatBoxTitleText);\r\n chatHeader.appendChild(chatBoxTitle);\r\n chatHeader.appendChild(dragEl);\r\n chatHeader.appendChild(helpIconContainer);\r\n chatHeader.appendChild(minimizeIconContainer);\r\n chatHeader.appendChild(closeIconContainer);\r\n return {\r\n chatHeader,\r\n dragEl,\r\n };\r\n }\r\n public createMessageElement(message: ChatMessage): HTMLElement {\r\n const newMessage: HTMLElement = this.createChatMessage(message);\r\n\r\n if (message instanceof HTMLMessage) {\r\n (newMessage.lastChild as HTMLElement).innerHTML =\r\n message.htmlContent;\r\n } else {\r\n const allDivElements = newMessage.getElementsByTagName(\"div\");\r\n const lastDivElement = allDivElements.item(\r\n allDivElements.length - 1\r\n );\r\n const textNode: Text = this.documentObject.createTextNode(\r\n (message as MessageWithText).text\r\n );\r\n lastDivElement.appendChild(textNode);\r\n }\r\n return newMessage;\r\n }\r\n public createHelpWindow(\r\n onDownloadClick: () => void,\r\n onDeleteClick: () => void,\r\n onCloseClick: () => void\r\n ): HTMLElement {\r\n const overlay = this.createElementWithAttributes(\"div\", [\r\n [\"class\", \"header-item hidden\"],\r\n ]);\r\n overlay.id = \"help\";\r\n\r\n const list = this.createElementWithAttributes(\"ul\", [\r\n [\"class\", \"help-list\"],\r\n ]);\r\n const links = [];\r\n const downloadButton = this.createElementWithAttributes(\"button\", [\r\n [\"class\", \"help-link\"],\r\n [\"href\", \"#\"],\r\n ]);\r\n downloadButton.onclick = onDownloadClick;\r\n downloadButton.innerText = \"Last ned samtalen med Otelia\";\r\n links.push(downloadButton);\r\n const deleteButtonContainer = this.createElementWithAttributes(\r\n \"div\",\r\n []\r\n );\r\n const deleteButton = this.createElementWithAttributes(\"button\", [\r\n [\"class\", \"help-link\"],\r\n [\"href\", \"#\"],\r\n ]);\r\n deleteButton.onclick = onDeleteClick;\r\n deleteButton.innerText = \"Slett samtalen med Otelia\";\r\n const spinnerContainer = this.createSpinner();\r\n deleteButtonContainer.appendChild(spinnerContainer);\r\n deleteButtonContainer.appendChild(deleteButton);\r\n links.push(deleteButtonContainer);\r\n links.forEach((link: HTMLElement) => {\r\n const li = this.createElementWithAttributes(\"li\", [\r\n [\"class\", \"help-list-item\"],\r\n ]);\r\n li.appendChild(link);\r\n list.appendChild(li);\r\n });\r\n\r\n const backButton = this.createElementWithAttributes(\"button\", [\r\n [\"class\", \"back-button\"],\r\n ]);\r\n backButton.addEventListener(\"click\", () => {\r\n onCloseClick();\r\n });\r\n backButton.innerText = \"Tilbake\";\r\n overlay.appendChild(list);\r\n overlay.appendChild(backButton);\r\n return overlay;\r\n }\r\n\r\n public createSendButton(): {\r\n sendButtonWrapper: HTMLElement;\r\n sendButton: HTMLElement;\r\n } {\r\n const sendButtonWrapper = this.createElementWithAttributes(\"div\", [\r\n [\"class\", \"send-button-wrapper\"],\r\n ]);\r\n const sendButton = this.createElementWithAttributes(\"button\", [\r\n [\"class\", \"send-button message-send-button\"],\r\n [\"aria-label\", \"Send melding\"],\r\n ]);\r\n // sendButton.setAttribute('visibility', 'hidden');\r\n const sendButtonIcon = this.createSVGWithPath(\r\n this.feedBackSendButtonPath\r\n );\r\n sendButtonIcon.setAttribute(\"class\", \"send-button-icon\");\r\n sendButton.appendChild(sendButtonIcon);\r\n sendButtonWrapper.appendChild(sendButton);\r\n return { sendButtonWrapper, sendButton };\r\n }\r\n public createFeedbackWindow(\r\n resetWindow: () => void,\r\n onFeedback: (id: string, value: string, text?: string) => string,\r\n endChat: () => void\r\n ): HTMLElement {\r\n const overlay = this.createElementWithAttributes(\"div\", [\r\n [\"class\", \"header-item hidden\"],\r\n ]);\r\n overlay.id = \"feedback\";\r\n\r\n const text = this.createElementWithAttributes(\"h3\", []);\r\n text.innerHTML =\r\n \"Gi meg gjerne en tilbakemelding slik at jeg kan bli bedre!\";\r\n\r\n const textArea = this.createElementWithAttributes(\"textarea\", [\r\n [\"class\", \"feedback-textarea\"],\r\n ]) as HTMLTextAreaElement;\r\n textArea.placeholder = \"Skriv her..\";\r\n textArea.setAttribute(\"hidden\", \"true\");\r\n\r\n const sendButton = this.createElementWithAttributes(\"button\", [\r\n [\"class\", \"send-button send-feedback-button\"],\r\n ]);\r\n const sendButtonIcon = this.createSVGWithPath(\r\n this.feedBackSendButtonPath\r\n );\r\n sendButtonIcon.setAttribute(\"class\", \"send-button-icon\");\r\n sendButtonIcon.setAttribute(\"visibility\", \"hidden\");\r\n sendButton.appendChild(sendButtonIcon);\r\n sendButton.setAttribute(\"visibility\", \"hidden\");\r\n sendButton.onclick = () =>\r\n onFeedback(null, this.conversationFeedback, textArea.value);\r\n\r\n const closeButton = this.createElementWithAttributes(\"button\", [\r\n [\"class\", \"close-button\"],\r\n ]);\r\n closeButton.addEventListener(\"click\", endChat);\r\n closeButton.innerText = \"Avslutt\";\r\n\r\n const backButton = this.createElementWithAttributes(\"button\", [\r\n [\"class\", \"back-button\"],\r\n ]);\r\n backButton.addEventListener(\"click\", resetWindow);\r\n backButton.innerText = \"Tilbake\";\r\n\r\n const onButtonClick = (id: string, value: string) => {\r\n this.conversationFeedback = value;\r\n textArea.removeAttribute(\"hidden\");\r\n sendButton.removeAttribute(\"visibility\");\r\n sendButtonIcon.removeAttribute(\"visibility\");\r\n backButton.setAttribute(\"hidden\", \"true\");\r\n closeButton.setAttribute(\"hidden\", \"true\");\r\n };\r\n\r\n const buttons = this.createFeedbackButtons(\r\n null,\r\n onButtonClick,\r\n false,\r\n \"giant-feedback-button-container\"\r\n );\r\n const div = this.createElementWithAttributes(\"div\", [\r\n [\"class\", \"giant-feedback-buttons\"],\r\n ]);\r\n div.appendChild(buttons);\r\n\r\n overlay.appendChild(text);\r\n overlay.appendChild(div);\r\n overlay.appendChild(textArea);\r\n overlay.appendChild(backButton);\r\n overlay.appendChild(closeButton);\r\n overlay.appendChild(sendButton);\r\n return overlay;\r\n }\r\n\r\n public createSurveyWindow() {\r\n const surveyWindow = this.createElementWithAttributes(\"iframe\", [\r\n [\"class\", \"header-item hidden\"],\r\n ]);\r\n\r\n surveyWindow.id = \"survey\";\r\n\r\n return surveyWindow;\r\n }\r\n\r\n public createConfirmationWindow(\r\n resetWindow: () => void,\r\n endChat: () => void\r\n ) {\r\n const confirmationWindow = this.createElementWithAttributes(\"div\", [\r\n [\"class\", \"header-item hidden\"],\r\n ]);\r\n confirmationWindow.id = \"confirmation\";\r\n\r\n const text = this.createElementWithAttributes(\"h3\", []);\r\n text.innerHTML = \"Du er i ferd med å forlate chatten, er du sikker?\";\r\n\r\n const closeButton = this.createElementWithAttributes(\"button\", [\r\n [\"class\", \"close-button\"],\r\n ]);\r\n closeButton.addEventListener(\"click\", endChat);\r\n closeButton.innerText = \"Avslutt\";\r\n\r\n const backButton = this.createElementWithAttributes(\"button\", [\r\n [\"class\", \"back-button\"],\r\n ]);\r\n backButton.addEventListener(\"click\", resetWindow);\r\n backButton.innerText = \"Tilbake\";\r\n\r\n confirmationWindow.appendChild(text);\r\n confirmationWindow.appendChild(backButton);\r\n confirmationWindow.appendChild(closeButton);\r\n\r\n return confirmationWindow;\r\n }\r\n\r\n public createMessageWindow(): HTMLElement {\r\n const messageWindow: HTMLElement = this.createElementWithAttributes(\r\n \"div\",\r\n [\r\n [\"class\", \"chat-msg-window\"],\r\n [\"aria-live\", \"polite\"],\r\n ]\r\n );\r\n const messageList = this.documentObject.createElement(\"ul\");\r\n messageWindow.appendChild(messageList);\r\n return messageWindow;\r\n }\r\n public createElementWithAttributes(\r\n tagName: string,\r\n attrs: AttributeSpecificationList\r\n ): HTMLElement {\r\n const setAttributes: (\r\n el: HTMLElement,\r\n attributes: AttributeSpecificationList\r\n ) => void = (el, attributes) => {\r\n for (const attr of attributes) {\r\n el.setAttribute(attr[0], attr[1]);\r\n }\r\n };\r\n\r\n const element: HTMLElement = this.documentObject.createElement(tagName);\r\n setAttributes(element, attrs);\r\n return element;\r\n }\r\n public createLinkMessage(\r\n link: Link,\r\n callback: (link: Link) => void\r\n ): HTMLElement {\r\n const url: string =\r\n link.type === \"external_link\" ? link.url : undefined;\r\n const textNode = this.documentObject.createTextNode(link.text);\r\n const liElement = this.createElementWithAttributes(\"li\", [\r\n [\"class\", \"bot zero\"],\r\n ]);\r\n\r\n const a: HTMLElement = this.createElementWithAttributes(\"a\", [\r\n [\"href\", url ? url : \"#\"],\r\n [\"class\", \"actionLink\"],\r\n ]);\r\n\r\n const iconPath = url ? this.openIcon : this.linkArrowPath;\r\n const icon: SVGElement = this.createSVGWithPath(iconPath, \"0 0 64 64\");\r\n\r\n if (link.type === \"action_link\") {\r\n a.addEventListener(\"click\", (e: MouseEvent) => {\r\n callback(link);\r\n // TODO: Disable not only _this_ action link, but _all_ action links!\r\n // TODO: And enable them after the action is submitted.\r\n (e.currentTarget as Element).classList.add(\"disabled\");\r\n });\r\n }\r\n\r\n a.appendChild(textNode);\r\n a.appendChild(icon);\r\n\r\n if (link.type === \"external_link\") {\r\n const externalLinkIcon: HTMLSpanElement = this.createElementWithAttributes(\r\n \"i\",\r\n [\r\n [\"class\", \"icon-link-ext\"],\r\n [\"style\", \"float: right\"],\r\n ]\r\n );\r\n a.appendChild(externalLinkIcon);\r\n }\r\n\r\n liElement.appendChild(a);\r\n return liElement;\r\n }\r\n public createBotIcon(): HTMLElement {\r\n return this.createElementWithAttributes(\"img\", [\r\n [\"src\", this.botIconLink],\r\n [\"alt\", \"Chat-bot icon\"],\r\n ]);\r\n }\r\n public createAgentIcon(): HTMLElement {\r\n return this.createElementWithAttributes(\"img\", [\r\n [\"src\", this.agentIconLink],\r\n [\"alt\", \"Agent icon\"],\r\n ]);\r\n }\r\n public createTypingBubble(): HTMLElement {\r\n const bubble = this.createElementWithAttributes(\"div\", [\r\n [\"class\", \"telia-chat-bubble telia-chat-bubble--typing bot\"],\r\n ]);\r\n bubble.appendChild(this.documentObject.createElement(\"span\"));\r\n bubble.appendChild(this.documentObject.createElement(\"span\"));\r\n bubble.appendChild(this.documentObject.createElement(\"span\"));\r\n return bubble;\r\n }\r\n public createChatMessage(message: ChatMessage): HTMLElement {\r\n const author = message.author === \"user\" ? \"client\" : message.author;\r\n const liElement = this.createElementWithAttributes(\"li\", [\r\n [\"class\", `${author} zero`],\r\n ]);\r\n const divInner = this.createElementWithAttributes(\"div\", [\r\n [\"class\", `telia-chat-bubble ${author}`],\r\n ]);\r\n let icon: HTMLElement;\r\n switch (author) {\r\n case \"client\":\r\n break;\r\n case \"bot\":\r\n icon = this.createBotIcon();\r\n liElement.appendChild(icon);\r\n break;\r\n case \"agent\":\r\n icon = this.createAgentIcon();\r\n liElement.appendChild(icon);\r\n break;\r\n }\r\n liElement.appendChild(divInner);\r\n return liElement;\r\n }\r\n\r\n public createFeedbackButtons(\r\n id: string,\r\n sendFeedback: (id: string, feedback: string) => void,\r\n canUnselect: boolean,\r\n containerStyle?: string\r\n ): HTMLElement {\r\n const container: HTMLElement = this.createElementWithAttributes(\"div\", [\r\n [\r\n \"class\",\r\n containerStyle === undefined ? \"feedback\" : containerStyle,\r\n ],\r\n ]);\r\n\r\n const downButton: HTMLElement = this.createElementWithAttributes(\r\n \"button\",\r\n [\r\n [\"class\", \"feedback\"],\r\n [\"aria-label\", \"Dårlig\"],\r\n ]\r\n );\r\n\r\n const upDiv: HTMLElement = this.createElementWithAttributes(\"div\", [\r\n [\"id\", `up-${this.numberOfFeedbackElements}`],\r\n [\"class\", \"up\"],\r\n [\"data-toggled\", \"false\"],\r\n ]);\r\n\r\n const downDiv: HTMLElement = this.createElementWithAttributes(\"div\", [\r\n [\"id\", `down-${this.numberOfFeedbackElements}`],\r\n [\"class\", \"down\"],\r\n [\"data-toggled\", \"false\"],\r\n ]);\r\n const feedbackId = this.numberOfFeedbackElements;\r\n this.numberOfFeedbackElements++;\r\n\r\n const upThumb: SVGElement = this.createThumbSVG(this.thumbUpNoFill);\r\n const downThumb: SVGElement = this.createThumbSVG(this.thumbDownNoFill);\r\n\r\n const upButton: HTMLElement = this.createElementWithAttributes(\r\n \"button\",\r\n [\r\n [\"class\", \"feedback\"],\r\n [\"aria-label\", \"Bra\"],\r\n ]\r\n );\r\n\r\n let feedback: string;\r\n upDiv.appendChild(upThumb);\r\n upButton.addEventListener(\"click\", () => {\r\n feedback = this.replaceThumbs(\r\n upDiv,\r\n downDiv,\r\n \"up\",\r\n feedbackId,\r\n canUnselect\r\n );\r\n sendFeedback(id, feedback);\r\n });\r\n\r\n downDiv.appendChild(downThumb);\r\n downButton.addEventListener(\"click\", () => {\r\n feedback = this.replaceThumbs(\r\n upDiv,\r\n downDiv,\r\n \"down\",\r\n feedbackId,\r\n canUnselect\r\n );\r\n sendFeedback(id, feedback);\r\n });\r\n\r\n upButton.appendChild(upDiv);\r\n downButton.appendChild(downDiv);\r\n container.appendChild(upButton);\r\n container.appendChild(downButton);\r\n return container;\r\n }\r\n public createSVGWithPath(\r\n d: string,\r\n viewbox: string = \"0 0 512 512\"\r\n ): SVGElement {\r\n const svg: SVGElement = this.documentObject.createElementNS(\r\n \"http://www.w3.org/2000/svg\",\r\n \"svg\"\r\n );\r\n\r\n svg.setAttribute(\"viewBox\", viewbox);\r\n svg.setAttribute(\"xmlns\", \"http://wwww.w3.org/2000/svg\");\r\n\r\n const poly = this.documentObject.createElementNS(\r\n \"http://www.w3.org/2000/svg\",\r\n \"path\"\r\n );\r\n\r\n poly.setAttribute(\"d\", d);\r\n svg.appendChild(poly);\r\n return svg;\r\n }\r\n\r\n public createSpinner(): HTMLElement {\r\n const spinnerContainer: HTMLElement = this.createElementWithAttributes(\r\n \"div\",\r\n [[\"class\", \"spinner-container hidden\"]]\r\n );\r\n const spinner: HTMLElement = this.createElementWithAttributes(\"div\", [\r\n [\"class\", \"spinner spinner--lg\"],\r\n ]);\r\n for (let i = 0; i < 14; i++) {\r\n const blade = this.createElementWithAttributes(\"div\", [\r\n [\"class\", `spinner__blade spinner__blade--${i}`],\r\n ]);\r\n spinner.appendChild(blade);\r\n }\r\n spinnerContainer.appendChild(spinner);\r\n return spinnerContainer;\r\n }\r\n\r\n private createThumbSVG(d: string): SVGElement {\r\n const handViewBox = this.createSVGWithPath(d);\r\n handViewBox.setAttribute(\"class\", \"feedback\");\r\n return handViewBox;\r\n }\r\n\r\n private replaceThumbs(\r\n up: HTMLElement,\r\n down: HTMLElement,\r\n direction: string,\r\n id: number,\r\n canUnselect: boolean\r\n ): string {\r\n let upToggled: boolean =\r\n this.documentObject\r\n .getElementById(`up-${id}`)\r\n .getAttribute(\"data-toggled\") === \"true\";\r\n let downToggled: boolean =\r\n this.documentObject\r\n .getElementById(`down-${id}`)\r\n .getAttribute(\"data-toggled\") === \"true\";\r\n let oldState: boolean;\r\n\r\n if (direction === \"up\") {\r\n const { elAToggled, elBToggled } = this.replaceThumb(\r\n upToggled,\r\n downToggled,\r\n up,\r\n down,\r\n canUnselect,\r\n [this.thumbUpFilled, this.thumbUpNoFill, this.thumbDownNoFill]\r\n );\r\n oldState = upToggled;\r\n upToggled = elAToggled;\r\n downToggled = elBToggled;\r\n if (oldState && !upToggled) {\r\n return \"remove-positive\";\r\n }\r\n } else {\r\n const { elAToggled, elBToggled } = this.replaceThumb(\r\n downToggled,\r\n upToggled,\r\n down,\r\n up,\r\n canUnselect,\r\n [this.thumbDownFilled, this.thumbDownNoFill, this.thumbUpNoFill]\r\n );\r\n oldState = downToggled;\r\n downToggled = elAToggled;\r\n upToggled = elBToggled;\r\n if (oldState && !downToggled) {\r\n return \"remove-negative\";\r\n }\r\n }\r\n\r\n if (upToggled && !downToggled) {\r\n return \"positive\";\r\n } else if (downToggled && !upToggled) {\r\n return \"negative\";\r\n }\r\n }\r\n\r\n private replaceThumb(\r\n elAToggled: boolean,\r\n elBToggled: boolean,\r\n elA: HTMLElement,\r\n elB: HTMLElement,\r\n canUnselect: boolean,\r\n fillOptions: Array\r\n ): { elAToggled: boolean; elBToggled: boolean } {\r\n let newAThumb: SVGElement = null;\r\n let newBThumb: SVGElement = null;\r\n let newAThumbTriggered: boolean;\r\n\r\n if (!elAToggled) {\r\n this.flushElement(elA);\r\n newAThumb = this.createThumbSVG(fillOptions[0]);\r\n newAThumbTriggered = true;\r\n } else if (canUnselect) {\r\n this.flushElement(elA);\r\n newAThumb = this.createThumbSVG(fillOptions[1]);\r\n newAThumbTriggered = true;\r\n }\r\n\r\n if (newAThumbTriggered) {\r\n elAToggled = !elAToggled;\r\n elA.setAttribute(\"data-toggled\", String(elAToggled));\r\n elA.appendChild(newAThumb);\r\n }\r\n\r\n if (elBToggled) {\r\n this.flushElement(elB);\r\n newBThumb = this.createThumbSVG(fillOptions[2]);\r\n elBToggled = !elBToggled;\r\n elB.setAttribute(\"data-toggled\", String(elBToggled));\r\n elB.appendChild(newBThumb);\r\n }\r\n\r\n return { elAToggled, elBToggled };\r\n }\r\n\r\n private flushElement(el: HTMLElement): void {\r\n while (el.lastChild) {\r\n el.removeChild(el.lastChild);\r\n }\r\n }\r\n}\r\n","import { ChatInstance } from \"./chat-instance\";\r\nimport { CookieStorage } from \"./cookie-storage\";\r\nimport { getCookie, setCookie, chatConfig } from \"./interfaces/config\";\r\nimport \"../style/style.scss\";\r\n\r\ndeclare const window: {\r\n chatInstance: ChatInstance;\r\n onOteliaSearchSubmit: (e: any, search_query: string, version?: any) => void;\r\n openChatOtelia: (version?: any) => void;\r\n openChatDirect: (formdata: any) => void;\r\n};\r\n\r\naddEventListener(\"load\", function (e) {\r\n var hideWhenInactive = true;\r\n if (\r\n location.href.includes(\"telia.no/5g\") ||\r\n location.href.includes(\"telia.no/hjelp\")\r\n ) {\r\n hideWhenInactive = false;\r\n }\r\n\r\n window.chatInstance = new ChatInstance(\r\n document,\r\n new CookieStorage(\".telia.no\"),\r\n hideWhenInactive\r\n );\r\n\r\n window.onOteliaSearchSubmit = function (e, search_query, version?) {\r\n window.chatInstance.setFilterValues([\"helpPage\"]);\r\n window.chatInstance.openBoost(search_query, version);\r\n setCookie(\r\n \"boostClientConversationId\",\r\n getCookie(\"boostClientConversationId\"),\r\n 1\r\n );\r\n };\r\n\r\n window.openChatOtelia = function (version?) {\r\n window.chatInstance.openBoost(null, version);\r\n setCookie(\r\n \"boostClientConversationId\",\r\n getCookie(\"boostClientConversationId\"),\r\n 1\r\n );\r\n };\r\n\r\n window.openChatDirect = function (formdata) {\r\n window.chatInstance.open(formdata);\r\n };\r\n});","import { AceClient } from \"./ace-client\";\r\nimport { BoostClient } from \"./boost-client\";\r\nimport { ChatBox } from \"./chat-box\";\r\nimport { HTMLElementCreator } from \"./html-element-creator\";\r\nimport { ACE, ContactData, CustomerServiceForm } from \"./interfaces/ace\";\r\nimport {\r\n IChatConfig,\r\n chatConfig,\r\n aceEntrance,\r\n handoverEntrance,\r\n} from \"./interfaces/config\";\r\nimport { TextMessage, HTMLMessage } from \"./messages/message\";\r\nimport { getState, setState, getEntrance, setEntrance } from \"./misc/helpers\";\r\nimport { EntranceClosedError, Logger, ChatError } from \"./misc/errors\";\r\nimport { chatState } from \"./interfaces/chat-client\";\r\n\r\ndeclare const CallGuide: ACE;\r\n\r\nexport class ChatInstance implements EventTarget {\r\n public chatActivated: boolean = false;\r\n protected readonly config: IChatConfig;\r\n protected readonly documentObject: Document;\r\n protected readonly htmlCreator: HTMLElementCreator;\r\n protected chatBox: ChatBox;\r\n protected aceClient: AceClient;\r\n protected footerElement: HTMLElement;\r\n protected chatContainer: HTMLElement;\r\n protected storage: Storage;\r\n protected eventDelegate: Text;\r\n private boostClient: BoostClient;\r\n private filterValues: Array;\r\n private hideWhenInactive: boolean;\r\n private version: string;\r\n\r\n constructor(\r\n documentObject: Document,\r\n storage: Storage,\r\n hideWhenInactive: boolean\r\n ) {\r\n this.documentObject = documentObject;\r\n this.storage = storage;\r\n this.config = chatConfig(storage);\r\n this.htmlCreator = new HTMLElementCreator(\r\n this.documentObject,\r\n this.config\r\n );\r\n this.eventDelegate = this.documentObject.createTextNode(null);\r\n this.hideWhenInactive = hideWhenInactive;\r\n\r\n this.setFilterValues(this.config.filterValues);\r\n this.createFooter();\r\n this.loadState();\r\n this.documentObject.body.appendChild(this.footerElement);\r\n }\r\n\r\n public open(formdata?: CustomerServiceForm): void {\r\n const state = getState(this.storage);\r\n\r\n if (state !== chatState.ACE) {\r\n if (this.chatBox) {\r\n this.chatBox.endChat();\r\n }\r\n this.activateChat();\r\n this.startACEChat(formdata);\r\n } else {\r\n setState(this.storage, chatState.ACE);\r\n this.chatContainer.removeAttribute(\"hidden\");\r\n }\r\n }\r\n\r\n public openBoost(initialMessage?: string, version?: string): void {\r\n const state = getState(this.storage);\r\n this.version = version;\r\n\r\n if (state !== chatState.BOOST) {\r\n if (this.chatBox) {\r\n this.chatBox.endChat();\r\n }\r\n const shouldFocus = true;\r\n this.activateChat(false, shouldFocus);\r\n\r\n this.runBoostChat(initialMessage);\r\n } else {\r\n setState(this.storage, chatState.BOOST);\r\n this.chatContainer.removeAttribute(\"hidden\");\r\n }\r\n this.chatBox.focusInputField();\r\n }\r\n\r\n // TODO: Can we *extend* EventTarget instead of implementing these methods here? WebPack won't allow this, but\r\n // supposedly newer browsers allow instantiating EventTarget objects.\r\n public addEventListener(\r\n type: string,\r\n listener: EventListenerOrEventListenerObject,\r\n options?: boolean | AddEventListenerOptions\r\n ): void {\r\n return this.eventDelegate.addEventListener(type, listener, options);\r\n }\r\n public dispatchEvent(event: Event): boolean {\r\n return this.eventDelegate.dispatchEvent(event);\r\n }\r\n public removeEventListener(\r\n type: string,\r\n callback: EventListenerOrEventListenerObject,\r\n options?: boolean | EventListenerOptions\r\n ): void {\r\n return this.eventDelegate.removeEventListener(type, callback, options);\r\n }\r\n\r\n // Utility method to be able to run tests in Node.js without having Event\r\n public dispatchEventType(type: string): boolean {\r\n return this.dispatchEvent(new Event(type));\r\n }\r\n\r\n protected activateChat(\r\n startMinimized?: boolean,\r\n shouldFocus?: boolean\r\n ): void {\r\n if (this.hideWhenInactive) {\r\n this.footerElement.style.display = \"\";\r\n }\r\n this.createChatInstance(shouldFocus);\r\n this.chatActivated = true;\r\n if (startMinimized) {\r\n this.chatBox.hide();\r\n }\r\n this.documentObject.body.appendChild(this.chatBox.getRootElement());\r\n }\r\n\r\n protected createChatInstance(shouldFocus: boolean = false): void {\r\n this.chatBox = new ChatBox(\r\n this.documentObject,\r\n this,\r\n this.config,\r\n this.onHandover,\r\n this.storage,\r\n shouldFocus\r\n );\r\n this.boostClient = new BoostClient(\r\n this.config,\r\n this,\r\n this.chatBox,\r\n this.storage\r\n );\r\n this.chatContainer = this.chatBox.getRootElement();\r\n }\r\n\r\n private async startACEChat(formdata?: CustomerServiceForm): Promise {\r\n var contactData = {\r\n customerName: \"\",\r\n cid: \"\",\r\n customerSpecific1: false,\r\n };\r\n if (formdata) {\r\n setEntrance(this.storage, aceEntrance(formdata));\r\n contactData = {\r\n customerName: formdata.name ?? \"Anonym\",\r\n cid: formdata.number,\r\n customerSpecific1: formdata.optOut,\r\n };\r\n }\r\n\r\n this.chatBox.setContactData(contactData);\r\n\r\n // this.config.ACEEntrance = getEntrance(this.storage);\r\n const entrance = getEntrance(this.storage);\r\n this.config.ACEEntrance = entrance.name;\r\n this.config.errand = entrance.errand;\r\n\r\n this.aceClient = new AceClient(\r\n this.config,\r\n this.chatBox,\r\n CallGuide,\r\n this.onAceChatDone,\r\n this.storage,\r\n true,\r\n contactData\r\n );\r\n const isOpen = await this.aceClient.isOpen();\r\n if (isOpen) {\r\n this.chatBox.appendMessage(\r\n new TextMessage(\r\n \"Finner en ledig kundekonsulent...\",\r\n \"system\",\r\n getState(this.storage)\r\n )\r\n );\r\n\r\n this.chatBox.registerClient(this.aceClient);\r\n this.aceClient.initialize();\r\n setState(this.storage, chatState.ACE);\r\n } else {\r\n let message: string;\r\n try {\r\n const openingHours = await this.aceClient.getOpeningHours(7);\r\n this.chatBox.appendMessage(\r\n new TextMessage(\r\n this.config.outsideOpeningHoursText,\r\n \"system\",\r\n getState(this.storage)\r\n )\r\n );\r\n message = openingHours\r\n .map(\r\n (o) =>\r\n `${o.open.toLocaleDateString()}: ${o.open.getHours()} - ${o.close.getHours()}`\r\n )\r\n .join(\"\\n\");\r\n } catch (err) {\r\n const data = {\r\n isOpen,\r\n aceClient: this.aceClient,\r\n storage: this.storage,\r\n };\r\n Logger.Log(\r\n new ChatError(err, \"startACEChat\", \"chat-instance.ts\", data)\r\n );\r\n message = \"\";\r\n }\r\n this.chatBox.appendMessage(\r\n new TextMessage(message, \"system\", getState(this.storage))\r\n );\r\n }\r\n }\r\n\r\n private toggleChat(ace?: boolean, startMinimized: boolean = false): void {\r\n if (!this.chatActivated) {\r\n // this.activateChat(null, ace, false, startMinimized);\r\n this.activateChat(startMinimized);\r\n\r\n if (ace) {\r\n this.startACEChat();\r\n } else {\r\n this.runBoostChat();\r\n }\r\n } else {\r\n const chatHidden = this.chatContainer.getAttribute(\"hidden\");\r\n if (chatHidden) {\r\n this.chatContainer.removeAttribute(\"hidden\");\r\n\r\n this.chatBox.focusInputField();\r\n this.chatBox.scrollDown();\r\n } else {\r\n this.chatContainer.setAttribute(\"hidden\", \"true\");\r\n }\r\n }\r\n }\r\n\r\n protected createFooter(): void {\r\n const imageContainer: HTMLElement = this.htmlCreator.createElementWithAttributes(\r\n \"button\",\r\n [\r\n [\"id\", \"footer-image-container\"],\r\n [\"aria-label\", \"Vis/skjul chatvindu\"],\r\n ]\r\n );\r\n\r\n const image: HTMLElement = this.createBotFooterImage();\r\n\r\n if (this.hideWhenInactive) {\r\n imageContainer.style.display = \"none\";\r\n }\r\n\r\n imageContainer.addEventListener(\"click\", () => {\r\n this.toggleChat();\r\n });\r\n imageContainer.appendChild(image);\r\n this.footerElement = imageContainer;\r\n }\r\n\r\n private createBotFooterImage(): HTMLElement {\r\n const botImageDefaultAltText: string = \"Vis/skjul chatvindu\";\r\n const botImageFooterAltText: string = this.config.botImageFooterAltText\r\n ? this.config.botImageFooterAltText\r\n : botImageDefaultAltText;\r\n return this.htmlCreator.createElementWithAttributes(\"img\", [\r\n [\"src\", this.config.botImageFooterLink],\r\n [\"alt\", botImageFooterAltText],\r\n [\"class\", \"footer-image\"],\r\n ]);\r\n }\r\n\r\n protected loadState(): void {\r\n // this.config.ACEEntrance = getEntrance(this.storage);\r\n const state = getState(this.storage);\r\n const startMinimized = this.isSmallScreen();\r\n switch (state) {\r\n case chatState.BOOST:\r\n this.toggleChat(false, startMinimized);\r\n break;\r\n case chatState.ACE:\r\n this.toggleChat(true, startMinimized);\r\n break;\r\n }\r\n }\r\n\r\n private isSmallScreen(): boolean {\r\n // TODO: specify this value once, and get a reference both here and in the CSS:\r\n const mobileScreen: string = \"768px\";\r\n return !window.matchMedia(`screen and (min-width: ${mobileScreen})`)\r\n .matches;\r\n }\r\n\r\n public setFilterValues(filterValues: Array): void {\r\n this.filterValues = filterValues;\r\n }\r\n\r\n public getFilterValues(): Array {\r\n return this.filterValues;\r\n }\r\n\r\n public getChatInstance(): { chatBox: ChatBox; boostClient: BoostClient } {\r\n return { chatBox: this.chatBox, boostClient: this.boostClient };\r\n }\r\n\r\n public handBack(): void {\r\n this.chatBox.registerClient(this.boostClient);\r\n this.runBoostChat(null);\r\n }\r\n\r\n private async runBoostChat(initialMessage?: string): Promise {\r\n try {\r\n await this.boostClient.connect();\r\n setState(this.storage, chatState.BOOST);\r\n if (initialMessage) {\r\n await this.boostClient.sendMessage(initialMessage);\r\n }\r\n this.chatBox.resetHeaderTitle();\r\n } catch (err) {\r\n const data = {\r\n chatState,\r\n boostClient: this.boostClient,\r\n storage: this.storage,\r\n };\r\n Logger.Log(\r\n new ChatError(err, \"runBoostChat\", \"chat-instance.ts\", data)\r\n );\r\n }\r\n }\r\n\r\n private revertHandoverIfUnsuccessful(): void {\r\n // If there is a chat ongoing in the ACE Reference Chat Client, calls to ACE's initialize method have no effect.\r\n // There is no obvious way to know ahead of time if ACE Web SDK is in use by another client, either.\r\n // To work around this, we wait a few seconds and check if we are properly connected to ACE Web SDK, and if not,\r\n // we revert to Boost.\r\n\r\n if (!this.aceClient.aceChatState) {\r\n this.chatBox.appendMessage(\r\n new TextMessage(\r\n \"En teknisk feil oppstod. Har du et annet chatvindu åpent?\",\r\n \"system\",\r\n getState(this.storage)\r\n )\r\n );\r\n this.chatBox.appendMessage(\r\n new TextMessage(\r\n \"Setter deg tilbake til Otelia\",\r\n \"system\",\r\n getState(this.storage)\r\n )\r\n );\r\n this.handBack();\r\n }\r\n }\r\n\r\n private onHandover = async (\r\n text: string,\r\n contactData: ContactData,\r\n resumeChat?: boolean\r\n ): Promise => {\r\n try {\r\n const skill = this.storage.getItem(\"chatSkill\");\r\n setEntrance(this.storage, handoverEntrance(skill));\r\n\r\n const entrance = getEntrance(this.storage);\r\n\r\n this.config.ACEEntrance = entrance.name;\r\n this.config.errand = entrance.errand;\r\n contactData.abtest = this.version;\r\n\r\n // this might be triggered from a link, in that case, we don't add any message.\r\n if (text && text !== \"\") {\r\n this.chatBox.appendMessage(\r\n new TextMessage(text, \"user\", getState(this.storage))\r\n ); // add users own message to chatbox.\r\n }\r\n this.aceClient = new AceClient(\r\n this.config,\r\n this.chatBox,\r\n CallGuide,\r\n this.onAceChatDone,\r\n this.storage,\r\n resumeChat,\r\n contactData\r\n );\r\n\r\n // We also may have to see if the client has received the hideChatActivations event from ACE.\r\n // this.boostClient.cleanup();\r\n const isOpen = await this.aceClient.isOpen();\r\n if (isOpen) {\r\n this.chatBox.appendMessage(\r\n new TextMessage(\r\n this.config.handoverText,\r\n \"system\",\r\n getState(this.storage)\r\n )\r\n );\r\n this.chatBox.disconnectClient();\r\n this.chatBox.registerClient(this.aceClient);\r\n this.aceClient.initialize();\r\n setTimeout(() => {\r\n this.revertHandoverIfUnsuccessful();\r\n }, 5000);\r\n } else {\r\n this.chatBox.dispatchMessageFromInstance(\r\n new TextMessage(\r\n \"Kollegaene mine har tatt seg en velfortjent pust i bakken, og er ikke på jobb for øyeblikket 😊\",\r\n \"bot\",\r\n getState(this.storage)\r\n ),\r\n false\r\n );\r\n\r\n this.chatBox.dispatchMessageFromInstance(\r\n new TextMessage(\r\n \"Du finner våre åpningstider på Kontakt oss-sidene via linken under 👇\",\r\n \"bot\",\r\n getState(this.storage)\r\n ),\r\n false\r\n );\r\n\r\n this.chatBox.dispatchMessageFromInstance(\r\n new HTMLMessage(\r\n 'Kontakt oss',\r\n \"bot\",\r\n getState(this.storage)\r\n ),\r\n false\r\n );\r\n\r\n this.chatBox.dispatchMessageFromInstance(\r\n new TextMessage(\r\n \"Husk at du kan løse det meste selv på Min Side, og jeg kan forsøke å hjelpe deg videre om du stiller et annet spørsmål 😊\",\r\n \"bot\",\r\n getState(this.storage)\r\n ),\r\n true\r\n );\r\n }\r\n } catch (err) {\r\n const data = {\r\n aceClient: this.aceClient,\r\n resumeChat,\r\n text,\r\n chatbox: this.chatBox,\r\n storage: this.storage,\r\n };\r\n\r\n Logger.Log(\r\n new ChatError(err, \"onHandover\", \"chat-instance.ts\", data)\r\n );\r\n\r\n this.chatBox.appendMessage(\r\n new TextMessage(err, \"system\", getState(this.storage))\r\n );\r\n setState(this.storage, chatState.NOT_STARTED);\r\n }\r\n };\r\n\r\n protected onAceChatDone = (): void => {\r\n this.chatBox.disconnectClient();\r\n delete this.aceClient; // Bit heavy-handed, don't you think?\r\n setState(this.storage, chatState.NOT_STARTED);\r\n };\r\n}\r\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n return createInstance(utils.merge(defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nmodule.exports = function (obj) {\n return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n}\n\nfunction isBuffer (obj) {\n return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n}\n","'use strict';\n\nvar defaults = require('./../defaults');\nvar utils = require('./../utils');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = utils.merge({\n url: arguments[0]\n }, arguments[1]);\n }\n\n config = utils.merge(defaults, {method: 'get'}, this.defaults, config);\n config.method = config.method.toLowerCase();\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n // Note: status is not exposed by XDomainRequest\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n error.request = request;\n error.response = response;\n return error;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","'use strict';\n\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\nfunction E() {\n this.message = 'String contains an invalid character';\n}\nE.prototype = new Error;\nE.prototype.code = 5;\nE.prototype.name = 'InvalidCharacterError';\n\nfunction btoa(input) {\n var str = String(input);\n var output = '';\n for (\n // initialize result and counter\n var block, charCode, idx = 0, map = chars;\n // if the next str index does not exist:\n // change the mapping table to \"=\"\n // check if d has no fractional digits\n str.charAt(idx | 0) || (map = '=', idx % 1);\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n ) {\n charCode = str.charCodeAt(idx += 3 / 4);\n if (charCode > 0xFF) {\n throw new E();\n }\n block = block << 8 | charCode;\n }\n return output;\n}\n\nmodule.exports = btoa;\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar isAbsoluteURL = require('./../helpers/isAbsoluteURL');\nvar combineURLs = require('./../helpers/combineURLs');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Support baseURL config\n if (config.baseURL && !isAbsoluteURL(config.url)) {\n config.url = combineURLs(config.baseURL, config.url);\n }\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers || {}\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData(\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData(\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","import {\r\n GoogleDirectionsPayload,\r\n GoogleLocationPayload,\r\n GooglePlacesPayload\r\n} from \"../interfaces/google\";\r\nimport { ChatMessage, TextMessage } from \"./message\";\r\n\r\n// We don't expect to receive Google Maps messages, but if we do, we should show _something_,\r\n// even if it looks rough.\r\n// (A proper solution for the future would be to feed it to the Google Maps JavaScript API)\r\n\r\ntype GoogleMessage =\r\n | GoogleDirectionsMessage\r\n | GooglePlacesMessage\r\n | GoogleLocationMessage;\r\nexport type MessageWithText = TextMessage | GoogleMessage; // Anything except TextMessage and LinkMessage\r\n\r\nexport class GoogleDirectionsMessage extends ChatMessage {\r\n private readonly _directions: GoogleDirectionsPayload;\r\n\r\n constructor(payload: GoogleDirectionsPayload, author: string) {\r\n super(author);\r\n this._directions = payload;\r\n }\r\n\r\n public get directions(): GoogleDirectionsPayload {\r\n return this._directions;\r\n }\r\n\r\n public get text(): string {\r\n const d = this._directions;\r\n return (\r\n `${d.START_ADDRESS}, ${d.END_ADDRESS}, ` +\r\n `${d.GD_START_LAT}, ${d.GD_START_LNG}, ${d.GD_END_LAT}, ${d.GD_END_LNG}`\r\n );\r\n }\r\n}\r\n\r\nexport class GooglePlacesMessage extends ChatMessage {\r\n private readonly _place: GooglePlacesPayload;\r\n\r\n constructor(payload: GooglePlacesPayload, author: string) {\r\n super(author);\r\n this._place = payload;\r\n }\r\n\r\n public get place(): GooglePlacesPayload {\r\n return this._place;\r\n }\r\n\r\n public get text(): string {\r\n const p = this._place;\r\n return `${p.GP_TITLE}, ${p.PLACE}, ${p.GP_LATITUDE}, ${p.GP_LONGITUDE}`;\r\n }\r\n}\r\n\r\nexport class GoogleLocationMessage extends ChatMessage {\r\n private readonly _location: GoogleLocationPayload;\r\n\r\n constructor(payload: GoogleLocationPayload, author: string) {\r\n super(author);\r\n this._location = payload;\r\n }\r\n\r\n public get location(): GoogleLocationPayload {\r\n return this._location;\r\n }\r\n\r\n public get text(): string {\r\n const l = this._location;\r\n return `${l.GL_FORMATTED_ADDRESS}, ${l.GL_LATITUDE}, ${l.GL_LONGITUDE}`;\r\n }\r\n}\r\n","import { BoostClient } from \"./boost-client\";\r\nimport { HTMLElementCreator } from \"./html-element-creator\";\r\nimport { ChatClient } from \"./interfaces/chat-client\";\r\nimport { IChatConfig, handoverEntrance } from \"./interfaces/config\";\r\nimport { IUserInterface } from \"./interfaces/ui\";\r\nimport { ContactData } from \"./interfaces/ace\";\r\nimport {\r\n ChatMessage,\r\n HTMLMessage,\r\n LinkMessage,\r\n TextMessage,\r\n} from \"./messages/message\";\r\nimport { Draggable } from \"./misc/draggable\";\r\nimport { ChatInstance } from \"./chat-instance\";\r\nimport { chatState } from \"./interfaces/chat-client\";\r\nimport saveAs = require(\"file-saver\");\r\nimport { Link } from \"./interfaces/boost\";\r\nimport { EntranceClosedError, Logger, ChatError } from \"./misc/errors\";\r\nimport { getState, setState } from \"./misc/helpers\";\r\nimport {\r\n IMessageDispatcher,\r\n MessageDispatcher,\r\n} from \"./misc/message-dispatcher\";\r\nimport { headerItem } from \"./interfaces/ui\";\r\nimport { AceClient } from \"./ace-client\";\r\n\r\nexport class ChatBox implements IUserInterface {\r\n get userInputEnabled(): boolean {\r\n return this._userInputEnabled;\r\n }\r\n set userInputEnabled(value: boolean) {\r\n this._userInputEnabled = value;\r\n if (value) {\r\n this.unlockInputArea();\r\n this.updateCounter(); // This will make the submit button look enabled, if the textarea is non-empty\r\n this.shouldFocusOnEnabled && this.inputField.focus();\r\n } else {\r\n this.lockInputArea();\r\n }\r\n }\r\n get inputFieldSelector(): string {\r\n return this._inputFieldSelector;\r\n }\r\n private sendButton: HTMLElement;\r\n private detachedChatBody: Element;\r\n\r\n private _userInputEnabled: boolean = false;\r\n\r\n private typingIndicator: HTMLElement;\r\n private readonly botTypingListElement: HTMLElement;\r\n private sendButtonWrapper: HTMLElement;\r\n private inputField: HTMLTextAreaElement;\r\n private chatHeader: HTMLElement;\r\n private feedbackWindow: HTMLElement;\r\n private confirmationWindow: HTMLElement;\r\n private surveyWindow: HTMLElement;\r\n private downloadButton: Element;\r\n private deleteButton: Element;\r\n private closeButton: Element;\r\n private readonly rootElement: HTMLElement;\r\n private readonly documentObject: Document;\r\n private readonly chatInstance: ChatInstance;\r\n private readonly messageWindow: HTMLElement;\r\n private readonly _inputFieldSelector: string;\r\n private readonly htmlCreator: HTMLElementCreator;\r\n private readonly headerTitle: string;\r\n private latestElement: HTMLElement;\r\n private dragHandle: HTMLElement;\r\n private maxInputLength: number = 110;\r\n private chatClient: ChatClient;\r\n private boostClient: BoostClient;\r\n private storage: Storage;\r\n private counterField: HTMLElement;\r\n private tryAgainButton: HTMLElement;\r\n private characterCount: number = 0;\r\n private sendButtonVisible: boolean = false;\r\n private messageHistory: TextMessage[] = [];\r\n private shouldFocusOnEnabled: boolean = false;\r\n private messageDispatcher: IMessageDispatcher;\r\n private contactData: ContactData;\r\n private ActionLinkTrigger: Link;\r\n private isUserIdentificationTriggered: boolean = false;\r\n private isHandleCloseButtonTriggered: boolean = false;\r\n public chatEnded: boolean = false;\r\n public aceChatEndedByUser: boolean = false;\r\n public isHandbackTriggered: boolean = false;\r\n\r\n constructor(\r\n documentObject: Document,\r\n chatInstance: ChatInstance,\r\n chatConfig: IChatConfig,\r\n private handoverCallback: (\r\n text: string,\r\n contactData: ContactData\r\n ) => Promise,\r\n storage: Storage,\r\n shouldFocusOnEnabled: boolean = false\r\n ) {\r\n this.contactData = {};\r\n this.messageDispatcher = new MessageDispatcher(this);\r\n this.documentObject = documentObject;\r\n this.chatInstance = chatInstance;\r\n this.htmlCreator = new HTMLElementCreator(\r\n this.documentObject,\r\n chatConfig\r\n );\r\n this.headerTitle = chatConfig.headerTitle;\r\n const { messageWindow, chatContainer } = this.createChatContainer(\r\n this.headerTitle\r\n );\r\n this.messageWindow = messageWindow;\r\n this.rootElement = chatContainer;\r\n this._inputFieldSelector = \".telia-chat-text-wrap textarea\";\r\n\r\n this.botTypingListElement = this.htmlCreator.createElementWithAttributes(\r\n \"li\",\r\n [[\"class\", \"bot zero\"]]\r\n );\r\n const botIcon = this.htmlCreator.createBotIcon();\r\n const typingBubble = this.htmlCreator.createTypingBubble();\r\n this.botTypingListElement.appendChild(botIcon);\r\n this.botTypingListElement.appendChild(typingBubble);\r\n\r\n this.storage = storage;\r\n this.shouldFocusOnEnabled = shouldFocusOnEnabled;\r\n }\r\n public showTypingChatBubble(show: boolean): void {\r\n const messageList: HTMLUListElement = this.messageWindow.getElementsByTagName(\r\n \"ul\"\r\n )[0];\r\n\r\n if (this.botTypingListElement.parentNode === messageList) {\r\n messageList.removeChild(this.botTypingListElement);\r\n }\r\n if (show) {\r\n messageList.appendChild(this.botTypingListElement);\r\n this.botTypingListElement.scrollIntoView();\r\n }\r\n }\r\n public getHistory(): TextMessage[] {\r\n return this.messageHistory;\r\n }\r\n public getTranscript(): string {\r\n const transcript = this.getHistory()\r\n .map((m) => `${m.author}: ${m.text}`)\r\n .join(\"\\r\\n\\r\\n\");\r\n return `Samtale videresendt fra chatbot:\\r\\n ${transcript}`;\r\n }\r\n public getRootElement(): HTMLElement {\r\n return this.rootElement;\r\n }\r\n\r\n public setContactData(contactData: ContactData) {\r\n this.contactData = contactData;\r\n }\r\n\r\n public appendMessage(message: ChatMessage): void {\r\n this.saveMessage(message);\r\n const messageList: HTMLUListElement = this.messageWindow.getElementsByTagName(\r\n \"ul\"\r\n )[0];\r\n if (message instanceof LinkMessage) {\r\n const linkElements = this.htmlCreator.createMessageLinks(\r\n message,\r\n this.triggerActionLink\r\n );\r\n let linkElement;\r\n for (linkElement of linkElements) {\r\n messageList.appendChild(linkElement);\r\n }\r\n this.latestElement = linkElement;\r\n } else {\r\n const messageElement = this.htmlCreator.createMessageElement(\r\n message\r\n );\r\n messageList.appendChild(messageElement);\r\n this.latestElement = messageElement;\r\n }\r\n this.latestElement.scrollIntoView();\r\n }\r\n\r\n public dispatchMessageFromInstance(\r\n message: ChatMessage,\r\n bubble: boolean\r\n ): void {\r\n this.messageDispatcher.add(message, bubble);\r\n }\r\n\r\n public registerClient(chatClient: ChatClient): void {\r\n // TODO: If we were already connected to a client, this means that we are now switching clients,\r\n // probably from a chatbot to a human, and we should notify the user that we are doing this.\r\n this.userInputEnabled = false;\r\n this.chatClient = chatClient;\r\n // need to save ref to BoostClient, to be able to call boost apis during ace chat (download, delete convo etc)\r\n if (chatClient instanceof BoostClient) {\r\n this.boostClient = chatClient;\r\n }\r\n }\r\n\r\n public clearInputField(): void {\r\n this.inputField.value = \"\";\r\n }\r\n\r\n public emptyChatHistory(): void {\r\n const messageList: HTMLUListElement = this.messageWindow.getElementsByTagName(\r\n \"ul\"\r\n )[0];\r\n while (messageList.firstChild) {\r\n messageList.removeChild(messageList.firstChild);\r\n }\r\n }\r\n\r\n public setMaxInputLength(chatEntryMaxLength: number): void {\r\n this.maxInputLength = chatEntryMaxLength;\r\n if (this.inputField) {\r\n this.inputField.setAttribute(\r\n \"maxlength\",\r\n chatEntryMaxLength.toString()\r\n );\r\n }\r\n this.updateCounter();\r\n }\r\n\r\n public setTypingStatus(name: string, typingStatus: boolean): void {\r\n if (typingStatus === false) {\r\n this.typingIndicator.classList.add(\"telia-chat-hidden\");\r\n } else {\r\n this.typingIndicator.textContent = name\r\n ? `${name} skriver…`\r\n : \"Skriver…\";\r\n this.typingIndicator.classList.remove(\"telia-chat-hidden\");\r\n }\r\n }\r\n\r\n public triggerActionLink = (actionLink: Link): void => {\r\n if (actionLink.id === \"skill\") {\r\n this.storage.setItem(\"chatSkill\", actionLink.skill);\r\n this.triggerHandover();\r\n return;\r\n }\r\n if (this.isHandoverTrigger(actionLink)) {\r\n this.ActionLinkTrigger = actionLink;\r\n this.triggerHandover();\r\n return;\r\n }\r\n\r\n if (this.boostClient) {\r\n this.triggerActionLinkSync(actionLink);\r\n } else {\r\n const message = new TextMessage(\r\n \"Forbindelsen med roboten er brutt, og du kan ikke trykke på denne linken.\",\r\n \"system\",\r\n getState(this.storage)\r\n );\r\n this.appendMessage(message);\r\n }\r\n };\r\n\r\n public triggerHandover() {\r\n const skill = this.storage.getItem(\"chatSkill\");\r\n\r\n if (skill === \"undefined\") {\r\n this.triggerManualSkill();\r\n return;\r\n }\r\n\r\n if (!this.contactData.customerName) {\r\n this.triggerUserIdentification();\r\n return;\r\n }\r\n\r\n this.handoverCallback(null, this.contactData).catch((err: Error) => {\r\n const data = {\r\n Boostclient: this.boostClient,\r\n actionLink: this.ActionLinkTrigger,\r\n storage: this.storage,\r\n };\r\n\r\n if (err instanceof EntranceClosedError) {\r\n this.triggerActionLinkSync(this.ActionLinkTrigger);\r\n } else {\r\n throw err;\r\n }\r\n });\r\n }\r\n\r\n public triggerManualSkill = (): void => {\r\n const setSkillMessage = new TextMessage(\r\n \"Før jeg setter deg over trenger jeg å bekrefte hva du trenger hjelp til, så velg alternativet som passer:\",\r\n \"bot\",\r\n getState(this.storage)\r\n );\r\n\r\n const skillChoices = [\r\n {\r\n id: \"skill\",\r\n text: \"TV - Support\",\r\n url: \"url\",\r\n type: \"action_link\",\r\n skill: \"TV\",\r\n },\r\n {\r\n id: \"skill\",\r\n text: \"Bredbånd - Support\",\r\n url: \"url\",\r\n type: \"action_link\",\r\n skill: \"broadband\",\r\n },\r\n {\r\n id: \"skill\",\r\n text: \"Mobil/Mobilt bredbånd\",\r\n url: \"url\",\r\n type: \"action_link\",\r\n skill: \"mobile\",\r\n },\r\n {\r\n id: \"skill\",\r\n text: \"TV/Bredbånd - Faktura\",\r\n url: \"url\",\r\n type: \"action_link\",\r\n skill: \"invoice fixed\",\r\n },\r\n {\r\n id: \"skill\",\r\n text: \"TV/Bredbånd - Bestilling\",\r\n url: \"url\",\r\n type: \"action_link\",\r\n skill: \"order fixed\",\r\n },\r\n ];\r\n\r\n this.messageDispatcher.add(setSkillMessage, false);\r\n this.messageDispatcher.add(\r\n new LinkMessage(skillChoices, \"bot\", getState(this.storage)),\r\n true\r\n );\r\n };\r\n\r\n public triggerUserIdentification() {\r\n this.isUserIdentificationTriggered = true;\r\n var message: TextMessage;\r\n if (!this.contactData.customerName) {\r\n this.showSendButton();\r\n const introMessage = new TextMessage(\r\n \"For å gi deg raskest mulig hjelp trenger vi å vite hvem du er, men du kan svare med tom melding om du ikke vil oppgi navn og/eller nummer.\",\r\n \"bot\",\r\n getState(this.storage)\r\n );\r\n this.messageDispatcher.add(introMessage, false);\r\n\r\n const subMessage = new HTMLMessage(\r\n \"OBS: Dersom du er bedriftskunde, så finner du bedriftschatten vår her.\",\r\n \"bot\",\r\n getState(this.storage)\r\n );\r\n this.messageDispatcher.add(subMessage, false);\r\n\r\n message = new TextMessage(\r\n \"Vennligst oppgi navnet ditt:\",\r\n \"bot\",\r\n getState(this.storage)\r\n );\r\n } else if (!this.contactData.cid) {\r\n message = new TextMessage(\r\n \"Takk! Vennligst oppgi ditt mobilnummer:\",\r\n \"bot\",\r\n getState(this.storage)\r\n );\r\n }\r\n this.messageDispatcher.add(message, true);\r\n }\r\n\r\n public appendMsgFeedback(message: ChatMessage): void {\r\n if (message.author === \"bot\") {\r\n const feedbackContainer = this.htmlCreator.createFeedbackButtons(\r\n message.id,\r\n this.giveMessageFeedback,\r\n true\r\n );\r\n this.latestElement.appendChild(feedbackContainer);\r\n }\r\n }\r\n\r\n public setQueuePosition(queuePos: number): void {\r\n this.setTitle(`Kønr: ${queuePos}`);\r\n }\r\n\r\n public clearQueuePosition(): void {\r\n this.setTitle(this.headerTitle);\r\n }\r\n\r\n public disconnectClient(): void {\r\n (async () => await this.chatClient.cleanup())();\r\n\r\n this.chatInstance.chatActivated = false;\r\n setState(this.storage, chatState.NOT_STARTED);\r\n }\r\n\r\n public resetHeaderTitle(): void {\r\n this.setTitle(this.headerTitle);\r\n }\r\n\r\n public focusInputField(): void {\r\n this.inputField.focus();\r\n }\r\n\r\n public hide(): void {\r\n this.rootElement.setAttribute(\"hidden\", \"true\");\r\n }\r\n\r\n private triggerActionLinkSync(actionLink: Link): void {\r\n (async () => {\r\n try {\r\n await this.boostClient.triggerActionLink(actionLink.id);\r\n } catch (err) {\r\n const data = {\r\n actionLink,\r\n boostclient: this.boostClient,\r\n storage: this.storage,\r\n };\r\n Logger.Log(\r\n new ChatError(\r\n err,\r\n \"triggerActionLinkSync\",\r\n \"chat-box.ts\",\r\n data\r\n )\r\n );\r\n }\r\n })();\r\n }\r\n\r\n private giveMessageFeedback = (id: string, value: string) => {\r\n if (this.boostClient) {\r\n this.boostClient.giveMessageFeedback(id, value);\r\n }\r\n };\r\n\r\n private saveMessage(message: ChatMessage): void {\r\n if (message instanceof TextMessage) {\r\n this.messageHistory.push(message);\r\n } else if (message instanceof HTMLMessage) {\r\n const tmp = document.createElement(\"p\");\r\n tmp.innerHTML = message.htmlContent;\r\n this.messageHistory.push(\r\n new TextMessage(\r\n tmp.textContent || tmp.innerText || \"\",\r\n message.author,\r\n getState(this.storage)\r\n )\r\n );\r\n }\r\n }\r\n private createChatContainer(\r\n title: string\r\n ): { messageWindow: HTMLElement; chatContainer: HTMLElement } {\r\n const chatContainer = this.htmlCreator.createElementWithAttributes(\r\n \"div\",\r\n [[\"id\", \"chat-container\"]]\r\n );\r\n const chatWidget = this.htmlCreator.createElementWithAttributes(\"div\", [\r\n [\"id\", \"telia-chat-widget\"],\r\n [\"lang\", \"nb\"],\r\n ]);\r\n const helpWindow = this.htmlCreator.createHelpWindow(\r\n this.onDownloadClick,\r\n () => {\r\n this.showDialog(\r\n \"Sletting av samtale\",\r\n \"Bare den opprinnelige samtalen med Otelia slettes. Dersom du har blitt satt \" +\r\n \"over til en kundekonsulent, har vi en ekstra kopi av samtalen med Otelia, i tillegg til \" +\r\n \"samtalen med kundekonsulenten. Hvis du vil ha dette fjernet, må du sende inn en forespørsel. \" +\r\n 'Du finner mer informasjon om dette på våre personvernsider.',\r\n true,\r\n this.onDeleteClick\r\n );\r\n },\r\n () => this.toggleWindow(headerItem.helpWindow)\r\n );\r\n this.downloadButton = helpWindow.querySelector(\r\n \"ul > li:nth-child(1) > button\"\r\n );\r\n this.deleteButton = helpWindow.querySelector(\r\n \"ul > li:nth-child(2) > div > button\"\r\n );\r\n this.closeButton = helpWindow.querySelector(\"button.back-button\");\r\n this.feedbackWindow = this.htmlCreator.createFeedbackWindow(\r\n () => this.resetWindow(),\r\n (id, value, text) => this.giveConversationFeedback(id, value, text),\r\n () => this.endChat()\r\n );\r\n\r\n this.confirmationWindow = this.htmlCreator.createConfirmationWindow(\r\n () => this.resetWindow(),\r\n () => this.endAceChat()\r\n );\r\n\r\n const tryAgainButton = this.htmlCreator.createElementWithAttributes(\r\n \"button\",\r\n [[\"class\", \"try-again-button hidden\"]]\r\n );\r\n tryAgainButton.innerHTML = \"Start ny chat\";\r\n tryAgainButton.onclick = () => {\r\n this.tryAgain();\r\n };\r\n this.tryAgainButton = tryAgainButton;\r\n\r\n this.surveyWindow = this.htmlCreator.createSurveyWindow();\r\n\r\n const { chatHeader, dragEl } = this.htmlCreator.createChatHeader(\r\n title,\r\n () => {\r\n this.minimize();\r\n },\r\n (e) => {\r\n this.handleCloseButton(e);\r\n },\r\n () => {\r\n this.toggleWindow(headerItem.helpWindow);\r\n }\r\n );\r\n this.dragHandle = dragEl;\r\n this.chatHeader = chatHeader;\r\n const chatBody = this.htmlCreator.createElementWithAttributes(\"div\", [\r\n [\"class\", \"telia-chat-body\"],\r\n ]);\r\n const chatInputField = this.createChatInputField();\r\n const messageWindow = this.htmlCreator.createMessageWindow();\r\n\r\n messageWindow.append(this.tryAgainButton);\r\n\r\n chatBody.appendChild(messageWindow);\r\n chatBody.appendChild(chatInputField);\r\n chatWidget.appendChild(chatHeader);\r\n chatWidget.appendChild(chatBody);\r\n chatWidget.appendChild(helpWindow);\r\n chatWidget.appendChild(this.feedbackWindow);\r\n chatWidget.appendChild(this.surveyWindow);\r\n chatWidget.appendChild(this.confirmationWindow);\r\n chatContainer.appendChild(chatWidget);\r\n const draggable = new Draggable(\r\n this.documentObject,\r\n this.dragHandle,\r\n chatWidget\r\n );\r\n return { messageWindow, chatContainer };\r\n }\r\n\r\n private createChatInputField(): HTMLElement {\r\n const chatInputField: HTMLElement = this.htmlCreator.createElementWithAttributes(\r\n \"div\",\r\n [[\"class\", \"telia-chat-text-wrap\"]]\r\n );\r\n\r\n const typingIndicator: HTMLElement = this.htmlCreator.createElementWithAttributes(\r\n \"div\",\r\n [[\"class\", \"typing-indicator telia-chat-hidden\"]]\r\n );\r\n\r\n const typingText: Text = this.documentObject.createTextNode(\r\n \"Skriver …\"\r\n );\r\n typingIndicator.appendChild(typingText);\r\n\r\n this.inputField = this.htmlCreator.createElementWithAttributes(\r\n \"textarea\",\r\n [\r\n [\"placeholder\", \"Still ditt spørsmål her\"],\r\n [\"id\", \"telia-chat-inputfield\"],\r\n [\"maxlength\", this.maxInputLength.toString()],\r\n ]\r\n ) as HTMLTextAreaElement;\r\n const {\r\n sendButtonWrapper,\r\n sendButton,\r\n } = this.htmlCreator.createSendButton();\r\n this.sendButtonWrapper = sendButtonWrapper;\r\n this.sendButton = sendButton;\r\n const sendContainer: HTMLElement = this.htmlCreator.createElementWithAttributes(\r\n \"div\",\r\n [[\"class\", \"send-button-container\"]]\r\n );\r\n const counter: HTMLElement = this.htmlCreator.createElementWithAttributes(\r\n \"div\",\r\n [[\"class\", \"telia-text-counter\"]]\r\n );\r\n counter.innerHTML = `0/${this.maxInputLength.toString()}`;\r\n this.inputField.addEventListener(\"keydown\", (e: KeyboardEvent) => {\r\n this.handleKeyEvent(e);\r\n });\r\n this.inputField.addEventListener(\"keyup\", (e: KeyboardEvent) => {\r\n this.updateCounter(e);\r\n });\r\n\r\n this.sendButtonWrapper.addEventListener(\"click\", (e: MouseEvent) => {\r\n this.clickSendButton(e);\r\n });\r\n\r\n sendContainer.appendChild(counter);\r\n sendContainer.appendChild(this.sendButtonWrapper);\r\n chatInputField.appendChild(typingIndicator);\r\n chatInputField.appendChild(this.inputField);\r\n chatInputField.appendChild(sendContainer);\r\n\r\n this.counterField = counter;\r\n this.typingIndicator = typingIndicator;\r\n return chatInputField;\r\n }\r\n\r\n private async submitInputField(): Promise {\r\n if (!this.userInputEnabled) {\r\n return;\r\n }\r\n try {\r\n const text = this.inputField.value;\r\n if (!text || text === \"\") {\r\n if (this.isUserIdentificationTriggered) {\r\n this.setCustomerInfo(\"Anonym\");\r\n }\r\n return;\r\n }\r\n this.clearInputField();\r\n await this.sendTextMessage(text);\r\n } catch (err) {\r\n const data = {\r\n userInputEnabled: this.userInputEnabled,\r\n inputfield: this.inputField,\r\n storage: this.storage,\r\n };\r\n Logger.Log(\r\n new ChatError(err, \"submitInputField\", \"chat-box.ts\", data)\r\n );\r\n }\r\n }\r\n private async clickSendButton(e: MouseEvent): Promise {\r\n try {\r\n await this.submitInputField();\r\n } catch (err) {\r\n const data = { storage: this.storage, e };\r\n Logger.Log(\r\n new ChatError(err, \"clickSendButton\", \"chat-box.ts\", data)\r\n );\r\n throw err;\r\n }\r\n }\r\n\r\n private async sendTextMessage(text: string): Promise {\r\n if (this.isUserIdentificationTriggered) {\r\n this.setCustomerInfo(text);\r\n return;\r\n }\r\n\r\n try {\r\n await this.chatClient.sendMessage(text);\r\n } catch (err) {\r\n const data = {\r\n chatClient: this.chatClient,\r\n text,\r\n storage: this.storage,\r\n };\r\n Logger.Log(\r\n new ChatError(err, \"sendTextMessage\", \"chat-box.ts\", data)\r\n );\r\n throw err;\r\n }\r\n }\r\n\r\n private setCustomerInfo(text: string) {\r\n var message = new TextMessage(text, \"user\", getState(this.storage));\r\n\r\n if (text === \"Anonym\") {\r\n message = new TextMessage(\"\", \"user\", getState(this.storage));\r\n this.contactData.customerName = text;\r\n }\r\n\r\n if (!this.contactData.customerName) {\r\n this.contactData.customerName = text;\r\n this.appendMessage(message);\r\n setTimeout(() => {\r\n this.showTypingChatBubble(true);\r\n this.triggerUserIdentification();\r\n }, 1000);\r\n } else if (!this.contactData.cid) {\r\n this.contactData.cid = this.formatCid(text);\r\n this.appendMessage(message);\r\n this.showTypingChatBubble(false);\r\n this.isUserIdentificationTriggered = false;\r\n\r\n setTimeout(() => {\r\n if (this.isHandbackTriggered) {\r\n this.triggerHandover();\r\n } else {\r\n this.triggerActionLink(this.ActionLinkTrigger);\r\n }\r\n }, 500);\r\n }\r\n }\r\n\r\n private formatCid(cid: string) {\r\n var strippedCid = cid.replace(\"+47\", \"\");\r\n strippedCid = strippedCid.replace(\"0047\", \"\");\r\n\r\n var charArray = Array.from(strippedCid);\r\n var formattedCid = \"\";\r\n\r\n charArray.forEach((c) => {\r\n var number = parseInt(c);\r\n\r\n if (isNaN(number)) {\r\n return;\r\n }\r\n\r\n formattedCid += number;\r\n });\r\n\r\n return formattedCid;\r\n }\r\n\r\n private async handleKeyEvent(e: KeyboardEvent): Promise {\r\n if (\r\n ((e.key && e.key === \"Enter\") || e.keyCode === 13) &&\r\n !e.altKey &&\r\n !e.shiftKey &&\r\n !e.ctrlKey\r\n ) {\r\n e.preventDefault();\r\n\r\n try {\r\n await this.submitInputField();\r\n } catch (err) {\r\n const data = {\r\n e,\r\n storage: this.storage,\r\n };\r\n Logger.Log(\r\n new ChatError(err, \"handleKeyEvent\", \"chat-box.ts\", data)\r\n );\r\n }\r\n }\r\n }\r\n\r\n private updateCounter = (e?: KeyboardEvent): void => {\r\n if (\r\n !e ||\r\n (((e.key && !(e.key === \"Enter\")) || e.keyCode === 13) &&\r\n !e.altKey &&\r\n !e.shiftKey &&\r\n !e.ctrlKey)\r\n ) {\r\n this.characterCount = this.inputField.value.length;\r\n this.updateCounterField();\r\n }\r\n\r\n if (this.inputField.value.length !== 0) {\r\n if (!this.sendButtonVisible && this.userInputEnabled) {\r\n this.showSendButton();\r\n }\r\n } else if (this.sendButtonVisible) {\r\n this.hideSendButton();\r\n }\r\n };\r\n\r\n private unlockInputArea(): void {\r\n this.inputField.removeAttribute(\"disabled\");\r\n this.showSendButton();\r\n }\r\n\r\n private showSendButton(): void {\r\n if (!this.sendButtonVisible) {\r\n this.sendButtonWrapper.appendChild(this.sendButton);\r\n this.sendButtonVisible = true;\r\n }\r\n }\r\n\r\n private lockInputArea(): void {\r\n this.inputField.setAttribute(\"disabled\", \"true\");\r\n this.hideSendButton();\r\n }\r\n\r\n private hideSendButton(): void {\r\n if (this.sendButtonVisible) {\r\n this.sendButtonWrapper.removeChild(this.sendButton);\r\n this.sendButtonVisible = false;\r\n }\r\n }\r\n\r\n private tryAgain() {\r\n this.tryAgainButton.classList.add(\"hidden\");\r\n\r\n if (!this.contactData.customerName) {\r\n this.triggerUserIdentification();\r\n return;\r\n }\r\n this.chatEnded = false;\r\n this.handoverCallback(null, this.contactData);\r\n }\r\n\r\n private updateCounterField(): void {\r\n const remaining: number = this.maxInputLength - this.characterCount;\r\n\r\n if (remaining <= 20) {\r\n this.counterField.classList.add(\"warning\");\r\n } else {\r\n this.counterField.classList.remove(\"warning\");\r\n }\r\n\r\n if (remaining <= 0) {\r\n this.inputField.classList.add(\"error\");\r\n this.inputField.value = this.inputField.value.substring(\r\n 0,\r\n this.maxInputLength\r\n );\r\n } else {\r\n this.inputField.classList.remove(\"error\");\r\n }\r\n this.counterField.innerHTML = `${this.characterCount\r\n }/${this.maxInputLength.toString()}`;\r\n }\r\n\r\n private handleCloseButton = (\r\n event: Event,\r\n skipFeedback: boolean = false\r\n ): void => {\r\n skipFeedback =\r\n skipFeedback || this.getHistory().every((m) => m.author === \"bot\");\r\n\r\n if (\r\n this.isHandleCloseButtonTriggered ||\r\n skipFeedback ||\r\n this.chatEnded\r\n ) {\r\n this.resetWindow();\r\n this.endChat();\r\n return;\r\n }\r\n const chatType = getState(this.storage);\r\n\r\n if (chatType === chatState.BOOST) {\r\n this.toggleWindow(headerItem.feedBackWindow);\r\n }\r\n\r\n if (chatType === chatState.ACE) {\r\n this.toggleWindow(headerItem.confirmationWindow);\r\n return;\r\n }\r\n };\r\n\r\n private handback = (): void => {\r\n this.isHandbackTriggered = true;\r\n this.resetWindow();\r\n this.tryAgainButton.classList.remove(\"hidden\");\r\n };\r\n\r\n private endAceChat = (): void => {\r\n if (this.chatClient instanceof AceClient) {\r\n if (this.chatClient.aceChatState === \"queue\") {\r\n this.resetWindow();\r\n this.endChat();\r\n }\r\n }\r\n\r\n this.aceChatEndedByUser = true;\r\n this.chatClient.cleanup();\r\n };\r\n\r\n public resetWindow = (): void => {\r\n this.isHandleCloseButtonTriggered = false;\r\n\r\n this.toggleWindow(headerItem.reset);\r\n };\r\n\r\n public endChat(): void {\r\n this.minimize();\r\n this.disconnectClient();\r\n this.storage.removeItem(\"telia-chat-state\");\r\n this.chatInstance.dispatchEventType(\"chatPanelClosed\");\r\n const chatbox: HTMLElement = document.getElementById(\"chat-container\");\r\n\r\n if (chatbox) {\r\n document.body.removeChild(chatbox);\r\n }\r\n }\r\n\r\n private minimize(): void {\r\n this.chatInstance.dispatchEventType(\"chatPanelMinimized\");\r\n this.rootElement.setAttribute(\"hidden\", \"true\");\r\n }\r\n\r\n public toggleSurvey(url: string) {\r\n const headerItems = this.rootElement.getElementsByClassName(\r\n \"header-item\"\r\n );\r\n\r\n var headerItemsArray = Array.from(headerItems);\r\n\r\n var iframe = (\r\n headerItemsArray.find((m) => m.id === \"survey\")\r\n );\r\n\r\n iframe.src = url;\r\n\r\n if (this.aceChatEndedByUser || this.aceChatHappened()) {\r\n this.toggleWindow(headerItem.surveyWindow);\r\n } else {\r\n this.handback();\r\n }\r\n }\r\n\r\n public aceChatHappened() {\r\n const happened = this.getHistory().some(\r\n (m) => m.author === \"user\" && m.chatState === chatState.ACE\r\n );\r\n\r\n return happened;\r\n }\r\n\r\n private toggleWindow = (item: headerItem) => {\r\n // Toggle selected help window; make all other help windows invisible (so they don't cover this up)\r\n const headerItems = this.rootElement.getElementsByClassName(\r\n \"header-item\"\r\n );\r\n\r\n var headerElement: Element;\r\n for (let i = 0; i < headerItems.length; i++) {\r\n if (headerItems[i].id === item) {\r\n headerElement = headerItems[i];\r\n continue;\r\n }\r\n headerItems[i].setAttribute(\"class\", \"header-item hidden\");\r\n }\r\n\r\n if (item === headerItem.reset) {\r\n if (this.detachedChatBody) {\r\n this.attachChatBody();\r\n }\r\n return;\r\n }\r\n\r\n if (headerElement.className.indexOf(\"visible\") === -1) {\r\n headerElement.setAttribute(\"class\", \"header-item visible\");\r\n if (!this.aceChatEndedByUser) {\r\n this.detachChatBody();\r\n }\r\n this.isHandleCloseButtonTriggered = true;\r\n } else {\r\n headerElement.setAttribute(\"class\", \"header-item hidden\");\r\n this.isHandleCloseButtonTriggered = false;\r\n this.attachChatBody();\r\n }\r\n };\r\n\r\n private onDeleteClick = async () => {\r\n if (this.boostClient) {\r\n this.startDeleteWait();\r\n try {\r\n const result = await this.boostClient.deleteConversation();\r\n this.stopDeleteWait();\r\n this.disconnectClient();\r\n this.emptyChatHistory();\r\n this.toggleWindow(headerItem.helpWindow);\r\n this.handleCloseButton(null, true);\r\n this.showDialog(\"Utført\", \"Samtalen din er slettet.\");\r\n } catch (err) {\r\n const data = {\r\n boostclient: this.boostClient,\r\n storage: this.storage,\r\n };\r\n Logger.Log(\r\n new ChatError(err, \"onDeleteClick\", \"chat-box.ts\", data)\r\n );\r\n this.stopDeleteWait();\r\n this.toggleWindow(headerItem.helpWindow);\r\n this.handleCloseButton(null, true);\r\n this.showDialog(\r\n \"Feil\",\r\n \"En teknisk feil har oppstått, og vi kunne ikke slette samtalen din!\"\r\n );\r\n }\r\n }\r\n };\r\n private onDownloadClick = async () => {\r\n if (this.boostClient) {\r\n try {\r\n const data = await this.boostClient.downloadConversation();\r\n const blob = new Blob([data.data], {\r\n type: \"text/plain;charset=utf-8\",\r\n });\r\n // @ts-ignore\r\n saveAs(blob, \"conversation.txt\");\r\n } catch (err) {\r\n const data = {\r\n boostclient: this.boostClient,\r\n storage: this.storage,\r\n };\r\n Logger.Log(\r\n new ChatError(err, \"onDownloadClick\", \"chat-box.ts\", data)\r\n );\r\n }\r\n }\r\n };\r\n\r\n private giveConversationFeedback = (\r\n id: string,\r\n value: string,\r\n text?: string\r\n ): string => {\r\n const positive = value === \"positive\";\r\n if (this.boostClient) {\r\n try {\r\n (async () => {\r\n await this.boostClient.giveConversationFeedback(\r\n positive,\r\n text\r\n );\r\n })();\r\n } catch (err) {\r\n const data = {\r\n boostclient: this.boostClient,\r\n value,\r\n text,\r\n storage: this.storage,\r\n };\r\n Logger.Log(\r\n new ChatError(\r\n err,\r\n \"giveConversationFeedback\",\r\n \"chat-box.ts\",\r\n data\r\n )\r\n );\r\n }\r\n }\r\n this.toggleWindow(headerItem.feedBackWindow);\r\n this.handleCloseButton(null, true);\r\n return null;\r\n };\r\n\r\n private setTitle(s: string): void {\r\n this.chatHeader.firstChild.textContent = s;\r\n }\r\n\r\n private startDeleteWait(): void {\r\n const spinnerContainer = this.documentObject.querySelector(\r\n \"div.spinner-container\"\r\n );\r\n const helpWindow = this.documentObject.querySelector(\r\n \"#telia-chat-widget > div.header-item.visible\"\r\n );\r\n spinnerContainer.classList.remove(\"hidden\");\r\n helpWindow.classList.add(\"disabled\");\r\n this.chatHeader.classList.add(\"disabled\");\r\n for (const button of this.getButtonsVisibleOnHelpWindow()) {\r\n button.setAttribute(\"disabled\", \"true\");\r\n }\r\n }\r\n\r\n private stopDeleteWait(): void {\r\n const spinnerContainer = this.documentObject.querySelector(\r\n \"div.spinner-container\"\r\n );\r\n const helpWindow = this.documentObject.querySelector(\r\n \"#telia-chat-widget > div.header-item.visible\"\r\n );\r\n spinnerContainer.classList.add(\"hidden\");\r\n helpWindow.classList.remove(\"disabled\");\r\n this.chatHeader.classList.remove(\"disabled\");\r\n for (const button of this.getButtonsVisibleOnHelpWindow()) {\r\n button.removeAttribute(\"disabled\");\r\n }\r\n }\r\n\r\n private getButtonsVisibleOnHelpWindow(): Array {\r\n const helpButton: Element = this.documentObject.querySelector(\r\n \"button.icon-help-circled-alt\"\r\n );\r\n const minimizeButton: Element = this.documentObject.querySelector(\r\n \"button.icon-window-minimize\"\r\n );\r\n const cancelButton: Element = this.documentObject.querySelector(\r\n \"button.icon-cancel\"\r\n );\r\n return [\r\n this.downloadButton,\r\n this.deleteButton,\r\n this.closeButton,\r\n helpButton,\r\n minimizeButton,\r\n cancelButton,\r\n ];\r\n }\r\n\r\n private showDialog(\r\n header: string,\r\n text: string,\r\n hasConfirmation: boolean = false,\r\n onButtonClick: () => void = () => { }\r\n ): void {\r\n const dialog: HTMLElement = this.htmlCreator.createElementWithAttributes(\r\n \"div\",\r\n [\r\n [\r\n \"class\",\r\n \"modal-dialog modal-dialog__handover-chat container container--small\",\r\n ],\r\n [\"role\", \"dialog\"],\r\n [\"aria-labelledby\", \"handover-dialog-heading\"],\r\n [\"aria-describedby\", \"handover-dialog-description\"],\r\n ]\r\n );\r\n\r\n const overlay: HTMLElement = this.htmlCreator.createElementWithAttributes(\r\n \"div\",\r\n [\r\n [\r\n \"class\",\r\n \"modal-dialog-overlay modal-dialog-overlay__handover-chat\",\r\n ],\r\n [\"tabindex\", \"-1\"],\r\n ]\r\n );\r\n\r\n const h2: HTMLElement = this.htmlCreator.createElementWithAttributes(\r\n \"h2\",\r\n [\r\n [\"id\", \"handover-dialog-heading\"],\r\n [\"class\", \"modal-dialog__heading\"],\r\n ]\r\n );\r\n\r\n const h2Text: Text = this.documentObject.createTextNode(header);\r\n h2.appendChild(h2Text);\r\n dialog.appendChild(h2);\r\n\r\n const section = this.htmlCreator.createElementWithAttributes(\r\n \"section\",\r\n [[\"id\", \"handover-dialog-description\"]]\r\n );\r\n\r\n const p = this.htmlCreator.createElementWithAttributes(\"p\", []);\r\n p.innerHTML = text;\r\n section.appendChild(p);\r\n dialog.appendChild(section);\r\n\r\n const confirmButton = this.htmlCreator.createElementWithAttributes(\r\n \"button\",\r\n [[\"class\", \"button button--margin-top\"]]\r\n );\r\n\r\n confirmButton.addEventListener(\"click\", () => {\r\n this.removeModalDialog(dialog, overlay);\r\n onButtonClick();\r\n });\r\n\r\n const confirmButtonText: Text = this.documentObject.createTextNode(\r\n \"Ok\"\r\n );\r\n\r\n confirmButton.appendChild(confirmButtonText);\r\n dialog.appendChild(confirmButton);\r\n\r\n if (hasConfirmation) {\r\n const cancelButton = this.htmlCreator.createElementWithAttributes(\r\n \"button\",\r\n [[\"class\", \"button button--margin-top\"]]\r\n );\r\n\r\n cancelButton.addEventListener(\"click\", () => {\r\n this.removeModalDialog(dialog, overlay);\r\n });\r\n\r\n const cancelButtonText: Text = this.documentObject.createTextNode(\r\n \"Avbryt\"\r\n );\r\n cancelButton.appendChild(cancelButtonText);\r\n dialog.appendChild(cancelButton);\r\n }\r\n\r\n this.documentObject.body.appendChild(dialog);\r\n this.documentObject.body.appendChild(overlay);\r\n\r\n confirmButton.focus();\r\n\r\n this.documentObject.addEventListener(\"keydown\", (e) =>\r\n this.globalKeyDown(e, dialog, overlay)\r\n );\r\n this.documentObject.addEventListener(\"click\", (e) =>\r\n this.globalDocumentClick(e, dialog, overlay)\r\n );\r\n\r\n dialog.addEventListener(\"keydown\", (e) => {\r\n const KEY_TAB = 9;\r\n const focusableElementsSelector = `\r\n a[href],\r\n area[href],\r\n input:not([disabled]),\r\n select:not([disabled]),\r\n textarea:not([disabled]),\r\n button:not([disabled]),\r\n [tabindex=\"0\"]\r\n `;\r\n\r\n if (e.keyCode === KEY_TAB) {\r\n const focusableElements: HTMLElement[] = Array.from(\r\n dialog.querySelectorAll(focusableElementsSelector)\r\n );\r\n if (e.shiftKey) {\r\n if (\r\n this.documentObject.activeElement ===\r\n focusableElements[0]\r\n ) {\r\n e.preventDefault();\r\n focusableElements[focusableElements.length - 1].focus();\r\n }\r\n } else if (\r\n this.documentObject.activeElement ===\r\n focusableElements[focusableElements.length - 1]\r\n ) {\r\n e.preventDefault();\r\n focusableElements[0].focus();\r\n }\r\n }\r\n });\r\n }\r\n\r\n private globalKeyDown(\r\n e: any,\r\n dialog: HTMLElement,\r\n overlay: HTMLElement\r\n ): void {\r\n const KEY_ESC = 27;\r\n if (e.keyCode === KEY_ESC) {\r\n this.removeModalDialog(dialog, overlay);\r\n }\r\n }\r\n\r\n private globalDocumentClick(\r\n e: any,\r\n dialog: HTMLElement,\r\n overlay: HTMLElement\r\n ): void {\r\n if (e.target === overlay) {\r\n this.removeModalDialog(dialog, overlay);\r\n }\r\n }\r\n\r\n private removeModalDialog(dialog: HTMLElement, overlay: HTMLElement): void {\r\n const parent = dialog.parentElement;\r\n parent.removeChild(dialog);\r\n parent.removeChild(overlay);\r\n this.documentObject.removeEventListener(\"keydown\", (e) =>\r\n this.globalKeyDown(e, dialog, overlay)\r\n );\r\n this.documentObject.removeEventListener(\"click\", (e) =>\r\n this.globalDocumentClick(e, dialog, overlay)\r\n );\r\n }\r\n\r\n private detachChatBody(): void {\r\n // To make the chat panel invisible to sighted users, _and_ inaccessible to screen readers,\r\n // take it out of the DOM. Store a reference so it can be re-inserted.\r\n const chatBody = this.rootElement.querySelector(\".telia-chat-body\");\r\n const parent = chatBody.parentNode;\r\n this.detachedChatBody = parent.removeChild(chatBody);\r\n }\r\n\r\n public scrollDown() {\r\n const messages = this.messageWindow.getElementsByTagName(\"li\");\r\n\r\n const lastmessage = messages[messages.length - 1];\r\n lastmessage.scrollIntoView();\r\n }\r\n\r\n private attachChatBody(): void {\r\n const parent = this.rootElement.querySelector(\"#telia-chat-widget\");\r\n const lastElementAfterChatBody = this.rootElement.querySelector(\r\n \".header-item\"\r\n );\r\n parent.insertBefore(this.detachedChatBody, lastElementAfterChatBody);\r\n\r\n this.scrollDown();\r\n }\r\n\r\n private isHandoverTrigger(actionLink: Link): boolean {\r\n // Assumption: any action link from Boost that offers a human handover will have one of these text.\r\n if (!actionLink.text) return false;\r\n\r\n switch (actionLink.text) {\r\n case \"Snakk med menneske\":\r\n return true;\r\n case \"Talk to a human\":\r\n return true;\r\n case \"Talk to Sherlock\":\r\n return true;\r\n case \"Snakk med Sherlock\":\r\n return true;\r\n default:\r\n return;\r\n }\r\n }\r\n}\r\n","/* tslint:disable:max-line-length */\r\nexport const thumbUpNoFill =\r\n \"M496.656 285.683C506.583 272.809 512 256 512 235.468c-.001-37.674-32.073-72.571-72.727-72.571h-70.15c8.72-17.368 20.695-38.911 20.695-69.817C389.819 34.672 366.518 0 306.91 0c-29.995 0-41.126 37.918-46.829 67.228-3.407 17.511-6.626 34.052-16.525 43.951C219.986 134.75 184 192 162.382 203.625c-2.189.922-4.986 1.648-8.032 2.223C148.577 197.484 138.931 192 128 192H32c-17.673 0-32 14.327-32 32v256c0 17.673 14.327 32 32 32h96c17.673 0 32-14.327 32-32v-8.74c32.495 0 100.687 40.747 177.455 40.726 5.505.003 37.65.03 41.013 0 59.282.014 92.255-35.887 90.335-89.793 15.127-17.727 22.539-43.337 18.225-67.105 12.456-19.526 15.126-47.07 9.628-69.405zM32 480V224h96v256H32zm424.017-203.648C472 288 472 336 450.41 347.017c13.522 22.76 1.352 53.216-15.015 61.996 8.293 52.54-18.961 70.606-57.212 70.974-3.312.03-37.247 0-40.727 0-72.929 0-134.742-40.727-177.455-40.727V235.625c37.708 0 72.305-67.939 106.183-101.818 30.545-30.545 20.363-81.454 40.727-101.817 50.909 0 50.909 35.517 50.909 61.091 0 42.189-30.545 61.09-30.545 101.817h111.999c22.73 0 40.627 20.364 40.727 40.727.099 20.363-8.001 36.375-23.984 40.727zM104 432c0 13.255-10.745 24-24 24s-24-10.745-24-24 10.745-24 24-24 24 10.745 24 24z\";\r\n\r\nexport const thumbDownNoFill =\r\n \"M496.656 226.317c5.498-22.336 2.828-49.88-9.627-69.405 4.314-23.768-3.099-49.377-18.225-67.105C470.724 35.902 437.75 0 378.468.014c-3.363-.03-35.508-.003-41.013 0C260.593-.007 195.917 40 160 40h-10.845c-5.64-4.975-13.042-8-21.155-8H32C14.327 32 0 46.327 0 64v256c0 17.673 14.327 32 32 32h96c17.673 0 32-14.327 32-32v-12.481c.85.266 1.653.549 2.382.856C184 320 219.986 377.25 243.556 400.82c9.9 9.9 13.118 26.44 16.525 43.951C265.784 474.082 276.915 512 306.91 512c59.608 0 82.909-34.672 82.909-93.08 0-30.906-11.975-52.449-20.695-69.817h70.15c40.654 0 72.726-34.896 72.727-72.571-.001-20.532-5.418-37.341-15.345-50.215zM128 320H32V64h96v256zm311.273-2.898H327.274c0 40.727 30.545 59.628 30.545 101.817 0 25.574 0 61.091-50.909 61.091-20.363-20.364-10.182-71.272-40.727-101.817-28.607-28.607-71.272-101.818-101.818-101.818H160V72.74h4.365c34.701 0 101.818-40.727 173.09-40.727 3.48 0 37.415-.03 40.727 0 38.251.368 65.505 18.434 57.212 70.974 16.367 8.78 28.538 39.235 15.015 61.996C472 176 472 224 456.017 235.648 472 240 480.1 256.012 480 276.375c-.1 20.364-17.997 40.727-40.727 40.727zM104 272c0 13.255-10.745 24-24 24s-24-10.745-24-24 10.745-24 24-24 24 10.745 24 24z\";\r\n\r\nexport const thumbDownFilled =\r\n \"M0 56v240c0 13.255 10.745 24 24 24h80c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56zm40 200c0-13.255 10.745-24 24-24s24 10.745 24 24-10.745 24-24 24-24-10.745-24-24zm272 256c-20.183 0-29.485-39.293-33.931-57.795-5.206-21.666-10.589-44.07-25.393-58.902-32.469-32.524-49.503-73.967-89.117-113.111a11.98 11.98 0 0 1-3.558-8.521V59.901c0-6.541 5.243-11.878 11.783-11.998 15.831-.29 36.694-9.079 52.651-16.178C256.189 17.598 295.709.017 343.995 0h2.844c42.777 0 93.363.413 113.774 29.737 8.392 12.057 10.446 27.034 6.148 44.632 16.312 17.053 25.063 48.863 16.382 74.757 17.544 23.432 19.143 56.132 9.308 79.469l.11.11c11.893 11.949 19.523 31.259 19.439 49.197-.156 30.352-26.157 58.098-59.553 58.098H350.723C358.03 364.34 384 388.132 384 430.548 384 504 336 512 312 512z\";\r\n\r\nexport const thumbUpFilled =\r\n \"M104 224H24c-13.255 0-24 10.745-24 24v240c0 13.255 10.745 24 24 24h80c13.255 0 24-10.745 24-24V248c0-13.255-10.745-24-24-24zM64 472c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zM384 81.452c0 42.416-25.97 66.208-33.277 94.548h101.723c33.397 0 59.397 27.746 59.553 58.098.084 17.938-7.546 37.249-19.439 49.197l-.11.11c9.836 23.337 8.237 56.037-9.308 79.469 8.681 25.895-.069 57.704-16.382 74.757 4.298 17.598 2.244 32.575-6.148 44.632C440.202 511.587 389.616 512 346.839 512l-2.845-.001c-48.287-.017-87.806-17.598-119.56-31.725-15.957-7.099-36.821-15.887-52.651-16.178-6.54-.12-11.783-5.457-11.783-11.998v-213.77c0-3.2 1.282-6.271 3.558-8.521 39.614-39.144 56.648-80.587 89.117-113.111 14.804-14.832 20.188-37.236 25.393-58.902C282.515 39.293 291.817 0 312 0c24 0 72 8 72 81.452z\";\r\n\r\nexport const feedBackSendButtonPath =\r\n \"M8 256c0 137 111 248 248 248s248-111 248-248S393 8 256 8 8 119 8 256zM256 40c118.7 0 216 96.1 216 216 0 118.7-96.1 216-216 216-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216zm86.6 224.5l-115.1 115c-4.7 4.7-12.3 4.7-17 0l-7.1-7.1c-4.7-4.7-4.7-12.3 0-17L303 256l-99.5-99.5c-4.7-4.7-4.7-12.3 0-17l7.1-7.1c4.7-4.7 12.3-4.7 17 0l115.1 115c4.6 4.8 4.6 12.4-.1 17.1z\";\r\n\r\nexport const helpIconPath =\r\n \"M256 340c-15.464 0-28 12.536-28 28s12.536 28 28 28 28-12.536 28-28-12.536-28-28-28zm7.67-24h-16c-6.627 0-12-5.373-12-12v-.381c0-70.343 77.44-63.619 77.44-107.408 0-20.016-17.761-40.211-57.44-40.211-29.144 0-44.265 9.649-59.211 28.692-3.908 4.98-11.054 5.995-16.248 2.376l-13.134-9.15c-5.625-3.919-6.86-11.771-2.645-17.177C185.658 133.514 210.842 116 255.67 116c52.32 0 97.44 29.751 97.44 80.211 0 67.414-77.44 63.849-77.44 107.408V304c0 6.627-5.373 12-12 12zM256 40c118.621 0 216 96.075 216 216 0 119.291-96.61 216-216 216-119.244 0-216-96.562-216-216 0-119.203 96.602-216 216-216m0-32C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8z\";\r\n\r\nexport const minimizeIconPath =\r\n \"M496 480H16c-8.8 0-16-7.2-16-16s7.2-16 16-16h480c8.8 0 16 7.2 16 16s-7.2 16-16 16z\";\r\n\r\nexport const closeIconPath =\r\n \"M217.5 256l137.2-137.2c4.7-4.7 4.7-12.3 0-17l-8.5-8.5c-4.7-4.7-12.3-4.7-17 0L192 230.5 54.8 93.4c-4.7-4.7-12.3-4.7-17 0l-8.5 8.5c-4.7 4.7-4.7 12.3 0 17L166.5 256 29.4 393.2c-4.7 4.7-4.7 12.3 0 17l8.5 8.5c4.7 4.7 12.3 4.7 17 0L192 281.5l137.2 137.2c4.7 4.7 12.3 4.7 17 0l8.5-8.5c4.7-4.7 4.7-12.3 0-17L217.5 256z\";\r\n\r\nexport const linkArrowPath =\r\n \"M44.903 32.853L20.74 52.447a2 2 0 0 0 2.52 3.106l26-21.083a2 2 0 0 0 .062-3.054l-26-22.916a2 2 0 1 0-2.644 3l24.225 21.353z\";\r\n\r\nexport const openIcon =\r\n \"M48.3,56H15.63A7.64,7.64,0,0,1,8,48.41V15.66A7.63,7.63,0,0,1,15.63,8H28a2,2,0,0,1,0,4H15.63A3.63,3.63,0,0,0,12,15.66V48.41A3.64,3.64,0,0,0,15.63,52H48.3a3.64,3.64,0,0,0,3.63-3.63V36a2,2,0,0,1,4,0V48.41A7.64,7.64,0,0,1,48.3,56Z M59.92,7.63v14.8a2,2,0,0,1-4,0V10.69L34.79,31.83a2,2,0,0,1-1.42.58A2,2,0,0,1,32,31.83,2,2,0,0,1,32,29L53,8H41.48a2,2,0,0,1,0-4h14.8A3.65,3.65,0,0,1,59.92,7.63Z\";\r\n","export class Draggable {\r\n private readonly documentObject: Document;\r\n private readonly dragTarget: HTMLElement;\r\n private readonly dragHandle: HTMLElement;\r\n private active = false;\r\n private currentX: number;\r\n private currentY: number;\r\n private initialX: number;\r\n private initialY: number;\r\n private xOffset = 0;\r\n private yOffset = 0;\r\n\r\n constructor(\r\n documentObject: Document,\r\n dragHandle: HTMLElement,\r\n dragTarget: HTMLElement\r\n ) {\r\n this.documentObject = documentObject;\r\n this.dragHandle = dragHandle;\r\n this.dragTarget = dragTarget;\r\n this.dragHandle.addEventListener(\"mousedown\", (e: MouseEvent) => {\r\n this.dragStart(e);\r\n });\r\n this.documentObject.addEventListener(\"mouseup\", (e: MouseEvent) => {\r\n this.dragEnd(e);\r\n });\r\n this.documentObject.addEventListener(\"mousemove\", (e: MouseEvent) => {\r\n this.drag(e);\r\n });\r\n }\r\n\r\n private dragStart(e: MouseEvent): void {\r\n e.preventDefault();\r\n this.active = true;\r\n this.initialX = e.clientX - this.xOffset;\r\n this.initialY = e.clientY - this.yOffset;\r\n }\r\n\r\n private dragEnd(e: MouseEvent): void {\r\n this.active = false;\r\n this.initialX = this.currentX;\r\n this.initialY = this.currentY;\r\n }\r\n\r\n private drag(e: MouseEvent): void {\r\n if (this.active) {\r\n e.preventDefault();\r\n this.currentX = e.clientX - this.initialX;\r\n this.currentY = e.clientY - this.initialY;\r\n\r\n this.xOffset = this.currentX;\r\n this.yOffset = this.currentY;\r\n\r\n this.setTranslate(this.currentX, this.currentY, this.dragTarget);\r\n }\r\n }\r\n\r\n private setTranslate(xPos: number, yPos: number, el: HTMLElement): void {\r\n el.style.transform = `translate3d(${xPos}px, ${yPos}px, 0)`;\r\n }\r\n}\r\n","(function(a,b){if(\"function\"==typeof define&&define.amd)define([],b);else if(\"undefined\"!=typeof exports)b();else{b(),a.FileSaver={exports:{}}.exports}})(this,function(){\"use strict\";function b(a,b){return\"undefined\"==typeof b?b={autoBom:!1}:\"object\"!=typeof b&&(console.warn(\"Depricated: Expected third argument to be a object\"),b={autoBom:!b}),b.autoBom&&/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(a.type)?new Blob([\"\\uFEFF\",a],{type:a.type}):a}function c(b,c,d){var e=new XMLHttpRequest;e.open(\"GET\",b),e.responseType=\"blob\",e.onload=function(){a(e.response,c,d)},e.onerror=function(){console.error(\"could not download file\")},e.send()}function d(a){var b=new XMLHttpRequest;return b.open(\"HEAD\",a,!1),b.send(),200<=b.status&&299>=b.status}function e(a){try{a.dispatchEvent(new MouseEvent(\"click\"))}catch(c){var b=document.createEvent(\"MouseEvents\");b.initMouseEvent(\"click\",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),a.dispatchEvent(b)}}var f=\"object\"==typeof window&&window.window===window?window:\"object\"==typeof self&&self.self===self?self:\"object\"==typeof global&&global.global===global?global:void 0,a=f.saveAs||\"object\"!=typeof window||window!==f?function(){}:\"download\"in HTMLAnchorElement.prototype?function(b,g,h){var i=f.URL||f.webkitURL,j=document.createElement(\"a\");g=g||b.name||\"download\",j.download=g,j.rel=\"noopener\",\"string\"==typeof b?(j.href=b,j.origin===location.origin?e(j):d(j.href)?c(b,g,h):e(j,j.target=\"_blank\")):(j.href=i.createObjectURL(b),setTimeout(function(){i.revokeObjectURL(j.href)},4E4),setTimeout(function(){e(j)},0))}:\"msSaveOrOpenBlob\"in navigator?function(f,g,h){if(g=g||f.name||\"download\",\"string\"!=typeof f)navigator.msSaveOrOpenBlob(b(f,h),g);else if(d(f))c(f,g,h);else{var i=document.createElement(\"a\");i.href=f,i.target=\"_blank\",setTimeout(function(){e(i)})}}:function(a,b,d,e){if(e=e||open(\"\",\"_blank\"),e&&(e.document.title=e.document.body.innerText=\"downloading...\"),\"string\"==typeof a)return c(a,b,d);var g=\"application/octet-stream\"===a.type,h=/constructor/i.test(f.HTMLElement)||f.safari,i=/CriOS\\/[\\d]+/.test(navigator.userAgent);if((i||g&&h)&&\"object\"==typeof FileReader){var j=new FileReader;j.onloadend=function(){var a=j.result;a=i?a:a.replace(/^data:[^;]*;/,\"data:attachment/file;\"),e?e.location.href=a:location=a,e=null},j.readAsDataURL(a)}else{var k=f.URL||f.webkitURL,l=k.createObjectURL(a);e?e.location=l:location.href=l,e=null,setTimeout(function(){k.revokeObjectURL(l)},4E4)}};f.saveAs=a.saveAs=a,\"undefined\"!=typeof module&&(module.exports=a)});\n\n//# sourceMappingURL=FileSaver.min.js.map","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\r\n} catch (e) {\r\n\t// This works if the window reference is available\r\n\tif (typeof window === \"object\") g = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n","import { ChatMessage, TextMessage } from \"../messages/message\";\r\nimport { ChatClient } from \"./chat-client\";\r\n\r\nexport interface IUserInterface {\r\n readonly inputFieldSelector: string;\r\n userInputEnabled: boolean;\r\n chatEnded: boolean;\r\n appendMessage(message: ChatMessage): void;\r\n registerClient(chatClient: ChatClient): void;\r\n clearInputField(): void;\r\n emptyChatHistory(): void;\r\n setMaxInputLength(chatEntryMaxLength: number): void;\r\n setTypingStatus(name: string, typingStatus: boolean): void;\r\n getHistory(): TextMessage[];\r\n getTranscript(): string;\r\n appendMsgFeedback(message: ChatMessage): void;\r\n showTypingChatBubble?(show: boolean): void;\r\n setQueuePosition(queuePos: number): void;\r\n clearQueuePosition(): void;\r\n toggleSurvey(url: string): void;\r\n resetWindow(): void;\r\n}\r\n\r\nexport enum headerItem {\r\n feedBackWindow = \"feedback\",\r\n confirmationWindow = \"confirmation\",\r\n surveyWindow = \"survey\",\r\n helpWindow = \"help\",\r\n reset = \"reset\",\r\n}\r\n","export class CookieStorage implements Storage {\r\n public readonly length: number;\r\n private readonly domain: string;\r\n\r\n constructor(domain: string) {\r\n this.domain = domain;\r\n }\r\n\r\n public clear(): void {\r\n document.cookie = \"\";\r\n }\r\n\r\n public getItem(key: string): string | null {\r\n const name = key + \"=\";\r\n const ca = document.cookie.split(\";\");\r\n for (let c of ca) {\r\n c = c.trim();\r\n\r\n if (c.indexOf(name) === 0) {\r\n return c.substring(name.length, c.length);\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n public key(index: number): string | null {\r\n return null;\r\n }\r\n\r\n public removeItem(key: string): void {\r\n const date = new Date();\r\n date.setTime(date.getTime() - 1);\r\n\r\n const expires = \"expires=\" + date.toUTCString();\r\n const domainClause = this.domain ? `domain=${this.domain};` : \"\";\r\n document.cookie = `${key}=;${domainClause} ${expires}; path=/`;\r\n }\r\n\r\n public setItem(key: string, value: string): void {\r\n const date = new Date();\r\n date.setTime(date.getTime() + 24 * 60 * 60 * 1000);\r\n\r\n const expires = \"expires=\" + date.toUTCString();\r\n document.cookie = `${key}=${value};domain=${this.domain}; ${expires}; path=/`;\r\n }\r\n\r\n [name: string]: any;\r\n}\r\n"],"sourceRoot":""}