-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbundle5.min.js
More file actions
19 lines (11 loc) · 8.07 KB
/
bundle5.min.js
File metadata and controls
19 lines (11 loc) · 8.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
(()=>{var Ue=Object.create;var ae=Object.defineProperty;var Ve=Object.getOwnPropertyDescriptor;var We=Object.getOwnPropertyNames;var Ye=Object.getPrototypeOf,Xe=Object.prototype.hasOwnProperty;var Qe=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Ze=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of We(e))!Xe.call(t,i)&&i!==n&&ae(t,i,{get:()=>e[i],enumerable:!(r=Ve(e,i))||r.enumerable});return t};var Je=(t,e,n)=>(n=t!=null?Ue(Ye(t)):{},Ze(e||!t||!t.__esModule?ae(n,"default",{value:t,enumerable:!0}):n,t));
// Include React and ReactDOM directly in the bundle
var React = {createElement:function(){var e=arguments[0],t=arguments[1],n=arguments.length,r=new Array(n>2?n-2:0);for(var o=2;o<n;o++)r[o-2]=arguments[o];return{$$typeof:"react.element",type:e,props:Object.assign({},t||{},{children:r.length<=1?r[0]:r}),ref:null}},useState:function(e){return[e,function(){}]},useEffect:function(){},useRef:function(e){return{current:e}}};
var ReactDOM = {render:function(e,t){t.innerHTML="";var n=function e(t){if(typeof t=="string"||typeof t=="number")return document.createTextNode(t);if(!t)return document.createTextNode("");if(Array.isArray(t))return t.map(e);var r;if(typeof t.type=="string")r=document.createElement(t.type);else if(typeof t.type=="function")return e(t.type(t.props));else return document.createTextNode("");Object.keys(t.props||{}).forEach(function(e){if(e==="children")return;if(e==="style"&&typeof t.props[e]==="object"){Object.assign(r.style,t.props[e]);return}if(e.startsWith("on")&&typeof t.props[e]==="function"){r.addEventListener(e.toLowerCase().slice(2),t.props[e]);return}r.setAttribute(e,t.props[e])});var o=t.props.children;if(o)if(Array.isArray(o))o.forEach(function(t){var n=e(t);n&&r.appendChild(n)});else{var i=e(o);i&&r.appendChild(i)}return r};t.appendChild(n(e))},unmountComponentAtNode:function(e){e.innerHTML=""}};
var $=(t=>(t.CONNECTING="CONNECTING",t.CONNECTED="CONNECTED",t.DISCONNECTED="DISCONNECTED",t))($||{});var z=class{constructor(){this.listeners=new Map}on(e,n){this.listeners.has(e)||this.listeners.set(e,[]),this.listeners.get(e).push(n)}off(e,n){if(!this.listeners.has(e))return;let r=this.listeners.get(e);r.length>1?this.listeners.set(e,r.filter(i=>i!==n)):this.listeners.delete(e)}emit(e,...n){if(!this.listeners.has(e))return;let r=this.listeners.get(e);for(let i of r)i(...n)}};var K=class extends z{constructor(e,n){super();this.baseURL=e;this.apiKey=n;this.status="DISCONNECTED";this.messageQueue=[];this.processingQueue=!1;this.currentController=null;this.retryCount=0;this.maxRetries=3;this.retryDelay=1e3}async connect(){if(this.status==="CONNECTING"||this.status==="CONNECTED")return;this.status="CONNECTING",this.emit("statusChange",this.status);try{await this.testConnection(),this.status="CONNECTED",this.emit("statusChange",this.status),this.processMessageQueue()}catch(e){console.error("Connection failed:",e),this.status="DISCONNECTED",this.emit("statusChange",this.status),this.retryConnection()}}async testConnection(){let e=new AbortController,n=new Headers;n.append("Content-Type","application/json"),n.append("apikey",this.apiKey);try{let r=await fetch(`${this.baseURL}/health`,{method:"GET",headers:n,signal:e.signal});if(!r.ok)throw new Error(`HTTP error! status: ${r.status}`);let i=await r.json();return console.log("Health check response:",i),i}catch(r){throw console.error("Health check failed:",r),r}finally{e.abort()}}async disconnect(){this.status="DISCONNECTED",this.emit("statusChange",this.status),this.currentController&&(this.currentController.abort(),this.currentController=null)}retryConnection(){this.retryCount<this.maxRetries?(this.retryCount++,setTimeout(()=>{this.connect()},this.retryDelay*this.retryCount)):(console.error("Max retry attempts reached"),this.emit("error",new Error("Failed to establish connection after maximum retry attempts")))}async sendMessage(e,n={}){if(this.status!=="CONNECTED"){this.messageQueue.push({message:e,options:n});return}this.messageQueue.push({message:e,options:n}),this.processMessageQueue()}async processMessageQueue(){if(this.processingQueue||this.messageQueue.length===0)return;this.processingQueue=!0;let e=this.messageQueue.shift();if(!e){this.processingQueue=!1;return}this.currentController=new AbortController;let n=new Headers;n.append("Content-Type","application/json"),n.append("apikey",this.apiKey);try{let r=await fetch(`${this.baseURL}/chat/completions`,{method:"POST",headers:n,body:JSON.stringify({messages:[{role:"user",content:e.message}]}),signal:this.currentController.signal});if(!r.ok)throw new Error(`HTTP error! status: ${r.status}`);let i=await r.json();this.emit("message",i)}catch(r){r.name==="AbortError"?console.log("Request was aborted"):this.emit("error",r)}finally{this.currentController=null,this.processingQueue=!1,this.processMessageQueue()}}};
var Q={chat:{backgroundColor:"#ffffff",borderRadius:"10px",boxShadow:"0 2px 4px rgba(0, 0, 0, 0.1)",fontFamily:"Arial, sans-serif",maxWidth:"400px",margin:"20px",padding:"20px"},header:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"20px"},title:{fontSize:"1.2em",fontWeight:"bold",margin:0},closeButton:{background:"none",border:"none",cursor:"pointer",fontSize:"1.2em",padding:"5px"},messageContainer:{height:"300px",overflowY:"auto",marginBottom:"20px",padding:"10px",border:"1px solid #e0e0e0",borderRadius:"5px"},message:{marginBottom:"10px",padding:"8px",borderRadius:"5px",maxWidth:"80%"},userMessage:{backgroundColor:"#007bff",color:"#ffffff",alignSelf:"flex-end",marginLeft:"auto"},botMessage:{backgroundColor:"#f0f0f0",color:"#000000"},inputContainer:{display:"flex",gap:"10px"},input:{flex:1,padding:"8px",borderRadius:"5px",border:"1px solid #e0e0e0"},sendButton:{padding:"8px 15px",backgroundColor:"#007bff",color:"#ffffff",border:"none",borderRadius:"5px",cursor:"pointer"},error:{color:"red",marginTop:"10px"},statusIndicator:{width:"10px",height:"10px",borderRadius:"50%",display:"inline-block",marginRight:"5px"},connected:{backgroundColor:"#28a745"},connecting:{backgroundColor:"#ffc107"},disconnected:{backgroundColor:"#dc3545"}};
var Z=({status:t})=>{let e={CONNECTED:"connected",CONNECTING:"connecting",DISCONNECTED:"disconnected"}[t]||"disconnected";return React.createElement("div",{style:{...Q.statusIndicator,...Q[e]}})};
var J=({messages:t,onClose:e,onSendMessage:n,status:r})=>{let[i,s]=React.useState(""),$=React.useRef(null),c=()=>{i.trim()&&(n(i),s(""))},a=d=>{d.key==="Enter"&&c()};return React.useEffect(()=>{var d;(d=$.current)==null||d.scrollTo(0,$.current.scrollHeight)},[t]),React.createElement("div",{style:Q.chat},React.createElement("div",{style:Q.header},React.createElement(Z,{status:r}),React.createElement("h2",{style:Q.title},"Chat"),React.createElement("button",{style:Q.closeButton,onClick:e},"×")),React.createElement("div",{style:Q.messageContainer,ref:$},t.map((d,u)=>React.createElement("div",{key:u,style:{...Q.message,...d.role==="user"?Q.userMessage:Q.botMessage}},d.content))),React.createElement("div",{style:Q.inputContainer},React.createElement("input",{type:"text",style:Q.input,value:i,onChange:d=>s(d.target.value),onKeyPress:a,placeholder:"Type your message..."}),React.createElement("button",{style:Q.sendButton,onClick:c},"Send")))};
var ee=class{constructor(e,n,r){this.containerId=e;this.client=new K(n,r);this.messages=[];this.container=null;this.initialize()}initialize(){if(this.container=document.getElementById(this.containerId),!this.container){console.error(`Container with id '${this.containerId}' not found`);return}this.client.on("message",e=>{this.messages.push({role:"assistant",content:e.choices[0].message.content}),this.render()}),this.client.on("error",e=>{console.error("Error:",e)}),this.client.connect(),this.render()}handleSendMessage(e){this.messages.push({role:"user",content:e}),this.client.sendMessage(e),this.render()}handleClose(){this.client.disconnect(),this.container&&(ReactDOM.unmountComponentAtNode(this.container),this.container.remove())}render(){this.container&&ReactDOM.render(React.createElement(J,{messages:this.messages,onClose:()=>this.handleClose(),onSendMessage:e=>this.handleSendMessage(e),status:this.client.status}),this.container)}};
window.ChatWidget=ee;
})();