{"version":3,"file":"static/js/ChatBot.c50b129f.chunk.js","mappings":"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","sources":["helpers/config.js","helpers/api.js","assets/twopi.svg","Loading.js","ChatBot.js"],"sourcesContent":["const {\n REACT_APP_API_URL\n} = process.env;\n\n/* eslint import/no-anonymous-default-export: [2, {\"allowObject\": true}] */\nexport default {\n apiUrl: REACT_APP_API_URL\n}\n","import 'whatwg-fetch'; \nimport config from './config';\n\nconst request = method => async (resource, options = {}) => {\n if (!resource || !config.apiUrl) {\n console.log('no apiurl?');\n return null;\n }\n return await fetch(`${config.apiUrl}/${resource}`, {\n method,\n headers: \n {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n },\n ...options\n })\n .then((result) => {\n return result;\n })\n .then((result) => {\n if (result.ok) {\n return result.json();\n } else {\n return result.text().then(bodyText => {\n if (bodyText === '' && result.statusText !== '') {\n return '{\"status\":\"NOK\",\"result\":{\"error\":\"' + result.statusText + '\"}}';\n }\n if (bodyText.substring(0,1) === '{') {\n return '{\"status\":\"NOK\",\"result\":{\"error\":' + bodyText + '}}';\n } else {\n return '{\"status\":\"NOK\",\"result\":{\"error\":\"' + bodyText + '\"}}';\n }\n });\n }\n })\n .catch((error) => {\n return '{\"status\":\"NOK\",\"result\":{\"error\":\"Unknown Error\"}}';\n });\n};\n\nconst API = {\n get: request('GET'),\n post: request('POST'),\n patch: request('PATCH'),\n put: request('PUT'),\n delete: request('DELETE')\n};\n\nexport default API;\n","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgTwopi(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 67,\n height: 67,\n viewBox: \"0 0 67 67\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n className: \"logo-dark\",\n id: \"logo-x1\",\n d: \"M17.1145 0H0V17.6849H17.1145V0Z\",\n fill: \"#16284F\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"logo-dark\",\n id: \"logo-x2\",\n d: \"M38.2221 0H20.5371V17.6849H38.2221V0Z\",\n fill: \"#16284F\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"logo-dark\",\n id: \"logo-x4\",\n d: \"M58.7592 0H41.0742V17.6849H58.7592V0Z\",\n fill: \"#16284F\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"logo-dark\",\n id: \"logo-x5\",\n d: \"M38.2221 20.5374H20.5371V37.6518H38.2221V20.5374Z\",\n fill: \"#16284F\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"logo-dark\",\n id: \"logo-x6\",\n d: \"M38.2221 41.0747H20.5371V58.1892H38.2221V41.0747Z\",\n fill: \"#16284F\"\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"logo-light\",\n id: \"logo-p1\",\n d: \"M17.1145 20.5374H0V37.6518H17.1145V20.5374Z\",\n fill: \"#B8C2E3\"\n })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"logo-light\",\n id: \"logo-p2\",\n d: \"M58.7601 20.5374H41.0752V37.6518H58.7601V20.5374Z\",\n fill: \"#B8C2E3\"\n })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"logo-light\",\n id: \"logo-p3\",\n d: \"M17.1145 41.0747H0V58.1892H17.1145V41.0747Z\",\n fill: \"#B8C2E3\"\n })), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"logo-light\",\n id: \"logo-p4\",\n d: \"M58.7601 41.0747H41.0752V58.1892H58.7601V41.0747Z\",\n fill: \"#B8C2E3\"\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgTwopi);\nexport default __webpack_public_path__ + \"static/media/twopi.241ab8cbbab71b579ab3157c1594e1db.svg\";\nexport { ForwardRef as ReactComponent };","import { ReactComponent as TwoPiLogo } from \"./assets/twopi.svg\";\n\nconst Loading = () => {\n return (\n
\n \n Let's make it happen…\n
\n );\n};\n\nexport default Loading;\n","// React\nimport React, { useEffect, useState } from \"react\";\n// Additional Modules\nimport ReactDOM from \"react-dom\";\nimport Markdown from \"react-markdown\";\n\n// Helpers\nimport api from \"helpers/api\";\nimport Loading from \"Loading\";\n\n// Assets\nimport { ReactComponent as TwoPiLogo } from \"./assets/twopi.svg\";\n\nconst ChatBot = (props) => {\n const [initialising, setInitialising] = useState(false);\n const [loading, setLoading] = useState(false);\n const [threadId, setThreadId] = useState(null);\n const [firstFetch, setFirstFetch] = useState(false);\n const [messageSending, setMessageSending] = useState(null);\n const [assistantLoading, setAssistantLoading] = useState(null);\n const [messages, setMessages] = useState([]);\n const [resetOpen, setResetOpen] = useState(false);\n const [conversationEndedDialogOpen, setConversationEndedDialogOpen] =\n useState(false);\n\n var assistantMessageId = null;\n var endConversationAtEndOfMessage = false;\n\n // Conditional Style Imporrs\n if (props.element === \"react-chatbot\") {\n import(\"styles/react-chatbot.css\" /* webpackChunkName: \"react-chatbot\" */);\n }\n\n useEffect(() => {\n let yesterday = new Date(new Date().getTime() - 24 * 60 * 60 * 1000);\n // Check for localStorage.tId (thread id) and localStorage.exp (expiry date)\n if (\n localStorage.getItem(\"tId\") !== null &&\n localStorage.getItem(\"tId\") !== \"undefined\" &&\n localStorage.getItem(\"exp\") !== null &&\n localStorage.getItem(\"exp\") !== \"undefined\" &&\n new Date(parseInt(localStorage.getItem(\"exp\"))) > yesterday\n ) {\n // Existing Chat, still current.\n setThreadId(localStorage.getItem(\"tId\"));\n // Set First Fetch = true, this will then fetch all previous Messages\n setFirstFetch(true);\n } else {\n setInitialising(true);\n }\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n if (initialising) {\n setMessages([]);\n // Start a New Thread and Store in localStorage.tId\n // Set an expiry date of now. Only valid for 24 hours from setting\n api.post(\"app-estimator/thread\").then((thread) => {\n localStorage.setItem(\"tId\", thread.threadId);\n localStorage.setItem(\"exp\", Date.now());\n setThreadId(thread.threadId);\n setMessages(thread.messages.data);\n setInitialising(false);\n });\n }\n !!document.getElementById(\"user-message\") &&\n document.getElementById(\"user-message\").focus();\n }, [initialising]); // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n if (firstFetch) {\n listMessages();\n }\n !!document.getElementById(\"user-message\") &&\n document.getElementById(\"user-message\").focus();\n }, [firstFetch]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const listMessages = (limit = 20, after = null, messageList = []) => {\n let path = \"open-ai/threads/\" + threadId + \"/messages?limit=\" + limit;\n if (after !== null) {\n path = path + \"&after=\" + after;\n }\n\n api.get(path).then((list) => {\n if (after === null) {\n messageList = list.data;\n } else {\n messageList = messageList.concat(list.data);\n }\n if (list.has_more) {\n listMessages(\n limit,\n list.last_id,\n messageList.length === 0 ? list.data : messageList\n );\n } else {\n setMessages(messageList);\n scrollToBottom(\"instant\", true);\n }\n });\n };\n\n const addMessage = async (message) => {\n if (message === null || message === \"\") {\n return;\n }\n\n setLoading(true);\n setAssistantLoading(true);\n setMessageSending(document.getElementById(\"user-message\").value);\n document.getElementById(\"user-message\").value = \"\";\n scrollToBottom(\"smooth\");\n try {\n // API Gateway doesn't support progressively streaming responses,\n // it will just return the entire response at once.\n // So we need to use the Lambda function URL instead.\n const response = await fetch(\n `https://dggawww4wolpq3y7znetuc2ouq0ilugv.lambda-url.ap-southeast-2.on.aws/`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n content: message,\n threadId: threadId,\n }),\n }\n );\n\n if (!response.body) {\n console.error(\"Response body missing.\");\n setLoading(false);\n return;\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let partialData = \"\";\n assistantMessageId = Date.now();\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n partialData += decoder.decode(value, { stream: true });\n const chunks = partialData.split(\"\\n\\n\");\n\n for (let i = 0; i < chunks.length - 1; i++) {\n const chunk = chunks[i];\n processChunk(chunk);\n }\n\n partialData = chunks[chunks.length - 1];\n }\n } catch (error) {\n console.error(\"Error streaming response: \", error);\n } finally {\n finishAddingMessage();\n }\n };\n\n const processChunk = (chunk) => {\n if (chunk.startsWith(\"event: message\")) {\n const jsonData = chunk.split(\"\\n\")[1].replace(\"data: \", \"\");\n const message = JSON.parse(jsonData);\n const isAssistant = message.role === \"assistant\";\n\n if (!isAssistant) {\n setMessageSending(null);\n setMessages((prevMessages) => [...prevMessages, message]);\n } else {\n setAssistantLoading(false);\n assistantMessageId = message.id;\n\n setMessages((prevMessages) => [...prevMessages, message]);\n setMessageSending(null);\n }\n } else if (chunk.startsWith(\"data: [stream completed]\")) {\n finishAddingMessage();\n } else if (chunk === \"data: [end_conversation]\") {\n endConversationAtEndOfMessage = true;\n } else if (chunk.startsWith(\"data: \")) {\n const messagePart = chunk.substring(6);\n updateAssistantMessage(assistantMessageId, messagePart);\n } else {\n chunk = chunk.trimStart();\n const messagePart = \"\\n\" + chunk.substring(6);\n updateAssistantMessage(assistantMessageId, messagePart);\n }\n };\n\n // Update assistant message content as the stream comes in\n const updateAssistantMessage = (assistantMessageId, messagePart) => {\n setMessages((prevMessages) =>\n prevMessages.map((msg) => {\n if (msg.id === assistantMessageId) {\n const existingText = msg.content?.[0]?.text?.value || \"\";\n return {\n ...msg,\n content: [{ text: { value: existingText + messagePart } }],\n };\n }\n return msg;\n })\n );\n scrollToBottom(\"smooth\");\n };\n\n const finishAddingMessage = () => {\n setMessageSending(null);\n scrollToBottom(\"smooth\");\n setLoading(false);\n setTimeout(() => {\n document.getElementById(\"user-message\").focus();\n }, 0);\n\n if (endConversationAtEndOfMessage) {\n // Show conversation ended message (with a delay to allow\n // user to read final message)\n setTimeout(() => {\n setConversationEndedDialogOpen(true);\n endConversationAtEndOfMessage = false;\n }, 10000);\n }\n };\n\n const scrollToBottom = (behavior, initial = false) => {\n setTimeout(() => {\n const parent = document.getElementById(\"chat-box\");\n const element = document.getElementById(\"chat-box-bottom\");\n if (element) {\n if (initial) {\n if (parent) {\n parent.scrollTop = parent.scrollHeight;\n }\n } else {\n element.scrollIntoView({ block: \"start\", behavior: behavior });\n }\n }\n }, 0);\n };\n\n let contentToRender =\n !messages.length || initialising ? (\n \n ) : (\n <>\n {messages.length > 1 && (\n {\n setResetOpen(true);\n }}\n >\n \n \n )}\n
\n
\n {messages.sort((a, b) => a.created_at - b.created_at).length > 0 &&\n messages.map((message, idx) => {\n if (typeof message.content[0] === \"undefined\") {\n return
;\n }\n\n return (\n \n \n {message.content[0].text.value}\n
\n {message.role === \"assistant\" && (\n \n )}\n
\n );\n })}\n {messageSending !== null && (\n <>\n
\n
\n {messageSending}\n
\n
\n \n )}\n {assistantLoading && (\n
\n
\n
\n \n \n \n
\n
\n
\n )}\n
\n \n
\n
\n {\n if (e.key === \"Enter\" && !e.ctrlKey && !e.shiftKey) {\n e.preventDefault();\n if (loading) {\n return;\n }\n addMessage(document.getElementById(\"user-message\").value);\n }\n }}\n />\n {\n addMessage(document.getElementById(\"user-message\").value);\n }}\n >\n {loading ? : <>Send}\n \n
\n
\n Estimates provided here are informational, may not be accurate and\n are not legally binding.\n
\n
\n \n {resetOpen && (\n \n

Need to reset? Got another idea?

\n {\n setResetOpen(false);\n }}\n >\n Cancel\n \n {\n localStorage.clear();\n setInitialising(true);\n setResetOpen(false);\n }}\n >\n Reset\n \n
\n )}\n {conversationEndedDialogOpen && (\n \n

The conversation has ended

\n {\n localStorage.clear();\n setInitialising(true);\n setConversationEndedDialogOpen(false);\n }}\n >\n Estimate a new app\n \n
\n )}\n \n );\n\n // If Embedding, look for the supplied Element and create a Portal\n if (props.embed) {\n if (document.getElementById(props.element) !== null) {\n return ReactDOM.createPortal(\n contentToRender,\n document.getElementById(props.element)\n );\n }\n return null;\n }\n\n // Otherwise, Render in place\n return contentToRender;\n};\n\nexport default ChatBot;\n"],"names":["REACT_APP_API_URL","process","request","method","async","resource","options","arguments","length","undefined","config","fetch","headers","then","result","ok","json","text","bodyText","statusText","substring","catch","error","console","log","get","post","patch","put","delete","_path","_path2","_path3","_path4","_path5","_path6","_path7","_path8","_path9","_extends","Object","assign","bind","n","e","t","r","hasOwnProperty","call","apply","SvgTwopi","_ref","svgRef","title","titleId","props","width","height","viewBox","fill","xmlns","ref","id","className","d","ForwardRef","Loading","_jsxs","children","_jsx","TwoPiLogo","initialising","setInitialising","useState","loading","setLoading","threadId","setThreadId","firstFetch","setFirstFetch","messageSending","setMessageSending","assistantLoading","setAssistantLoading","messages","setMessages","resetOpen","setResetOpen","conversationEndedDialogOpen","setConversationEndedDialogOpen","assistantMessageId","endConversationAtEndOfMessage","element","useEffect","yesterday","Date","getTime","localStorage","getItem","parseInt","api","thread","setItem","now","data","document","getElementById","focus","listMessages","limit","after","messageList","path","list","concat","has_more","last_id","scrollToBottom","addMessage","message","value","response","body","JSON","stringify","content","reader","getReader","decoder","TextDecoder","partialData","done","read","decode","stream","chunks","split","i","chunk","processChunk","finishAddingMessage","startsWith","jsonData","replace","parse","role","prevMessages","messagePart","updateAssistantMessage","trimStart","map","msg","_msg$content","_msg$content$","_msg$content$$text","existingText","setTimeout","behavior","initial","parent","scrollTop","scrollHeight","scrollIntoView","block","contentToRender","_Fragment","onClick","sort","a","b","created_at","idx","Math","random","Markdown","autoComplete","maxLength","rows","placeholder","onKeyDown","key","ctrlKey","shiftKey","preventDefault","disabled","open","clear","embed","ReactDOM"],"sourceRoot":""}