{"version":3,"file":"webchattinit.js","mappings":";;;;;AAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wC","sources":["webpack://widgetfront/./Scripts/webchattinit.js"],"sourcesContent":["\"use strict\";\nfunction getLocalStorage(token) {\n const localConfig = localStorage.getItem(\"widgetConf_\" + token);\n if (localConfig) {\n try {\n return JSON.parse(atob(localConfig));\n }\n catch (e) {\n console.error(e);\n }\n }\n}\nasync function getConfig(config) {\n var dateNow = Date.now();\n try {\n const localConfig = localStorage.getItem(\"widgetConf_\" + config.token);\n if (localConfig) {\n try {\n var localConf = JSON.parse(atob(localConfig));\n var validUtc = Date.parse(localConf['valid-utc']);\n if (dateNow < validUtc) {\n return localConf;\n }\n else {\n return localConf;\n }\n }\n catch (e) {\n console.error(e);\n }\n }\n else {\n console.debug(\"No local config found\");\n }\n }\n catch (e) {\n console.debug(\"Could not fetch local config. Request new config\");\n }\n var url = new URL(config.apiUrl);\n if (!url.pathname.includes(\"/api/webchat\")) {\n url.pathname = \"/api/webchat\";\n }\n const apiUrl = url + \"/\" + config.token + \"/init?branding=true&history=false\";\n try {\n const response = await fetch(apiUrl, {\n method: \"GET\",\n headers: {\n \"Accept\": \"application/json\",\n },\n });\n const configResponse = await response.json();\n if (configResponse != null && configResponse.status != null && configResponse.status === \"error\") {\n let reason = configResponse[\"reason-text\"] ? configResponse[\"reason-text\"] : \"\";\n console.error(\"Server response from API sent status error [\" + reason + \"]\");\n throw new Error(\"Server response from API sent status error [\" + reason + \"]\");\n }\n localStorage.setItem(\"lastCheck\", dateNow.toString());\n if (configResponse.status === 'closed') {\n console.debug(\"Chat is closed\");\n return configResponse;\n }\n localStorage.setItem(\"widgetConf_\" + config.token, btoa(JSON.stringify(configResponse)));\n return configResponse;\n }\n catch (e) {\n console.error(e);\n }\n}\nfunction webChatFrameDisplay(token) {\n let chatEl = document.getElementById(\"webChatFrame\");\n if (chatEl) {\n localStorage.setItem(\"webChatFrameShow\", \"true\");\n ActivateChat(token);\n if (chatEl.classList.contains(\"hideWebChatFrameLoad\")) {\n chatEl.classList.remove(\"hideWebChatFrameLoad\");\n }\n chatEl.classList.add(\"displayWebChatFrame\");\n chatEl.classList.remove(\"hideWebChatFrame\");\n }\n else {\n console.warn(\"could not find webChatFrame\");\n }\n let btnEl = document.getElementById(\"chatButton\");\n if (btnEl) {\n btnEl.classList.add(\"chatButtonOpen\");\n btnEl.classList.remove(\"chatButtonClose\");\n }\n else {\n console.warn(\"could not find chatButton\");\n }\n}\nfunction webChatFrameHide(token) {\n let chatEl = document.getElementById(\"webChatFrame\");\n if (chatEl) {\n localStorage.setItem(\"webChatFrameShow\", \"false\");\n if (chatEl.classList.contains(\"displayWebChatFrameLoad\")) {\n chatEl.classList.remove(\"displayWebChatFrameLoad\");\n }\n chatEl.classList.remove(\"displayWebChatFrame\");\n chatEl.classList.add(\"hideWebChatFrame\");\n }\n else {\n console.warn(\"could not find webChatFrame\");\n }\n let btnEl = document.getElementById(\"chatButton\");\n if (btnEl) {\n btnEl.classList.add(\"chatButtonClose\");\n btnEl.classList.remove(\"chatButtonOpen\");\n console.log(btnEl);\n }\n else {\n console.warn(\"could not find chatButton\");\n }\n}\nfunction getWebChatFrameScriptElement() {\n const doc = document.getElementById(\"webchatframe\");\n if (!doc) {\n console.error(\"Cannot find webchatframe id, please check if Webchat script tag has Id [webchatframe], its required\");\n return;\n }\n return doc;\n}\nfunction getDocumentSourceUrl(doc) {\n const hostUri = new URL(doc.src);\n try {\n }\n catch (error) {\n console.error(error);\n return;\n }\n return hostUri;\n}\nfunction extractConfigFromQuery(doc) {\n const configRaw = doc.src.split(\"config=\")[1];\n const configDecoded = atob(configRaw);\n return JSON.parse(configDecoded);\n}\nfunction ActivateChat(token) {\n let st = getLocalStorage(token);\n if (!st) {\n return;\n }\n if (st['is-new']) {\n st['is-new'] = false;\n }\n else {\n return;\n }\n const doc = getWebChatFrameScriptElement();\n const hostUri = getDocumentSourceUrl(doc);\n const config = extractConfigFromQuery(doc);\n var showFrame = localStorage.getItem(\"webChatFrameShow\");\n config.isOpen = showFrame === \"true\";\n config.wsUrl = st.url;\n config.branding = st.branding;\n config[\"session-id\"] = st[\"session-id\"];\n config[\"api-version\"] = st[\"api-version\"];\n config[\"is-new\"] = st[\"is-new\"];\n config[\"valid-utc\"] = st[\"valid-utc\"];\n let c = JSON.stringify(config);\n st.baseEncoded = btoa(encodeURIComponent(c));\n let base = btoa(JSON.stringify(st));\n localStorage.setItem(\"widgetConf_\" + token, base);\n let iframe = document.getElementById('webChatFrame');\n iframe.src = hostUri.origin + \"/index.html?config=\" + st.baseEncoded;\n}\nasync function clearChatConfig(sessionId) {\n try {\n localStorage.removeItem(\"widgetConf_\" + sessionId);\n localStorage.removeItem(\"webChatFrameShow\");\n }\n catch (e) {\n console.warn(e);\n }\n}\nasync function webChatFrameClose(sessionId) {\n await clearChatConfig(sessionId);\n let chatEl = document.getElementById(\"webChatFrame\");\n chatEl.style.display = \"none\";\n}\nfunction splitColor(brandColor) {\n const splitted = brandColor.split(\"!\");\n let r = {};\n r.color = splitted[0].trim();\n if (splitted.length > 1) {\n r.important = true;\n }\n return r;\n}\nfunction createLinkElementToCss(configModel, clientUrl) {\n let widgetBootCssEl = document.createElement(\"link\");\n widgetBootCssEl.rel = \"stylesheet\";\n if (configModel.branding) {\n if (configModel.branding.customCssUrl) {\n widgetBootCssEl.href = configModel.branding.customCssUrl;\n }\n else {\n widgetBootCssEl.href = clientUrl + \"/css/WidgetInit.css\";\n }\n }\n else {\n widgetBootCssEl.href = clientUrl + \"/css/WidgetInit.css\";\n }\n return widgetBootCssEl;\n}\nfunction setPendingMessageCounter(counter) {\n const messageBadgeEl = document.getElementById(\"pendingMessageBadge\");\n if (messageBadgeEl) {\n messageBadgeEl.innerText = counter.toString();\n if (counter > 0) {\n if (messageBadgeEl.classList.contains(\"pendingMessageBadgeHide\")) {\n messageBadgeEl.classList.remove(\"pendingMessageBadgeHide\");\n }\n }\n else {\n if (!messageBadgeEl.classList.contains(\"pendingMessageBadgeHide\")) {\n messageBadgeEl.classList.add(\"pendingMessageBadgeHide\");\n }\n }\n }\n}\nfunction childMessage(obj) {\n switch (obj.message) {\n case \"pendingMessage\":\n setPendingMessageCounter(parseInt(obj.value));\n break;\n }\n}\nfunction sendMessageToChild(message, origin) {\n const iframe = document.getElementById(\"webChatFrame\");\n if (iframe) {\n iframe.contentWindow.postMessage(message, origin);\n }\n}\nasync function sendCurrentViewStatus(url) {\n var message = { \"message\": \"webChatStatus\" };\n let sf = localStorage.getItem(\"webChatFrameShow\");\n message.value = sf === \"true\" ? \"display\" : \"hide\";\n sendMessageToChild(message, url);\n}\nasync function startChatServices() {\n console.debug(\"Start startChatServices\");\n inited = true;\n let clientUrl = \"\";\n let doc = getWebChatFrameScriptElement();\n try {\n let hostUri = getDocumentSourceUrl(doc);\n clientUrl = hostUri.origin;\n }\n catch (error) {\n console.error(error);\n return;\n }\n let config = extractConfigFromQuery(doc);\n let configModel = await getConfig(config);\n if (configModel == null || configModel.status !== 'open') {\n try {\n localStorage.removeItem(\"widgetConf_\" + config.token);\n localStorage.removeItem(\"webChatFrameShow\");\n let reason = configModel[\"reason-text\"] ? configModel[\"reason-text\"] : \"\";\n console.log(\"Chat is not open status[\" + configModel.status + \"] reason[\" + reason + \"]\");\n }\n catch (e) {\n console.error(e);\n }\n return;\n }\n config.wsUrl = configModel.url;\n config.branding = configModel.branding;\n config[\"session-id\"] = configModel[\"session-id\"];\n config[\"api-version\"] = configModel[\"api-version\"];\n config[\"is-new\"] = configModel[\"is-new\"];\n config[\"valid-utc\"] = configModel[\"valid-utc\"];\n if (configModel) {\n let c = JSON.stringify(config);\n configModel.clientUrl = clientUrl;\n configModel.baseEncoded = btoa(encodeURIComponent(c));\n }\n else {\n console.warn(\"Cannot fetch configuration data from Webchat server. Cannot create widget\");\n return;\n }\n if (document.body) {\n doc.parentElement.append(createLinkElementToCss(configModel, clientUrl));\n const container = document.createElement(\"div\");\n container.classList.add(\"webChatContainer\");\n const iframe = document.createElement(\"iframe\");\n iframe.title = \"Webchat\";\n iframe.style.border = \"0\";\n iframe.classList.add(\"webChatFrameStyle\");\n if (!configModel.branding) {\n console.debug(\"No branding found, use default\");\n }\n if (configModel.branding.AppName) {\n iframe.name = \"Webchatt\";\n }\n iframe.id = \"webChatFrame\";\n iframe.src = configModel.clientUrl + \"/index.html?config=\" + configModel.baseEncoded;\n container.appendChild(iframe);\n var chatIcon = document.createElement(\"img\");\n chatIcon.classList.add(\"webChatButtonIcon\");\n chatIcon.src = clientUrl + \"/css/icons/chat-dots.svg\";\n chatIcon.width = 40;\n chatIcon.title = \"Webchat\";\n chatIcon.alt = \"Webchat logo\";\n const badge = document.createElement(\"div\");\n badge.classList.add(\"pendingMessageBadge\");\n badge.classList.add(\"pendingMessageBadgeHide\");\n badge.id = \"pendingMessageBadge\";\n const mainBg = splitColor(configModel.branding.mainBgColor);\n const chatButton = document.createElement(\"div\");\n chatButton.classList.add(\"chatButton\");\n chatButton.id = \"chatButton\";\n chatButton.style.backgroundColor = mainBg.color;\n chatButton.append(chatIcon);\n chatButton.addEventListener(\"click\", async () => {\n var showFrame = localStorage.getItem(\"webChatFrameShow\");\n console.debug(showFrame);\n if (showFrame === \"true\") {\n console.debug(\"webChatFrameHide\");\n webChatFrameHide(config.token);\n }\n else {\n console.debug(\"webChatFrameDisplay\");\n webChatFrameDisplay(config.token);\n }\n await sendCurrentViewStatus(configModel.clientUrl);\n });\n chatButton.appendChild(badge);\n container.appendChild(chatButton);\n document.body.prepend(container);\n var showFrame = localStorage.getItem(\"webChatFrameShow\");\n let chatEl = document.getElementById(\"webChatFrame\");\n if (chatEl) {\n if (showFrame === \"true\") {\n chatEl.classList.add(\"displayWebChatFrameLoad\");\n let btnEl = document.getElementById(\"chatButton\");\n if (btnEl) {\n btnEl.classList.add(\"chatButtonOpen\");\n btnEl.classList.remove(\"chatButtonClose\");\n }\n else {\n console.warn(\"could not find chatButton\");\n }\n }\n else {\n chatEl.classList.add(\"hideWebChatFrameLoad\");\n }\n }\n chatStarted = true;\n }\n else {\n console.warn(\"Could not find body tag\");\n }\n window.addEventListener(\"message\", event => {\n const sessionId = config.token;\n try {\n let obj = event.data;\n childMessage(obj);\n }\n catch (e) {\n }\n switch (event.data) {\n case \"HideChat\":\n webChatFrameHide(sessionId);\n break;\n case \"DisplayChat\":\n webChatFrameDisplay(sessionId);\n break;\n case \"CloseChat\":\n webChatFrameClose(sessionId);\n break;\n case \"ClearChatSessionData\":\n clearChatConfig(sessionId);\n break;\n case \"NewMessage\":\n console.warn(event.data + \" not implemented yet..\");\n break;\n case \"ChatDisabled\":\n console.warn(event.data + \" not implemented yet..\");\n break;\n case \"FrameLoaded\":\n sendCurrentViewStatus(configModel.clientUrl);\n break;\n default:\n }\n });\n}\nvar chatStarted = false;\nvar inited = false;\ndocument.addEventListener(\"DOMContentLoaded\", async () => {\n if (!chatStarted && !inited) {\n await startChatServices();\n }\n});\nwindow.onload = () => {\n if (!chatStarted && !inited) {\n startChatServices();\n }\n};\nconst listener = () => {\n const MIN_KEYBOARD_HEIGHT = 300;\n const isMobile = window.innerWidth < 768;\n const isKeyboardOpen = isMobile\n && window.screen.height - MIN_KEYBOARD_HEIGHT > window.visualViewport.height;\n let chatEl = document.getElementById(\"webChatFrame\");\n if (isKeyboardOpen) {\n if (chatEl) {\n if (!chatEl.classList.contains(\"keyboardActive\")) {\n chatEl.classList.add(\"keyboardActive\");\n }\n }\n else {\n if (chatEl.classList.contains(\"keyboardActive\")) {\n chatEl.classList.remove(\"keyboardActive\");\n }\n }\n }\n else {\n if (chatEl) {\n if (chatEl.classList.contains(\"keyboardActive\")) {\n chatEl.classList.remove(\"keyboardActive\");\n }\n }\n }\n};\nwindow.visualViewport.addEventListener('resize', listener);\n//# sourceMappingURL=webchattinit.js.map"],"names":[],"sourceRoot":""}