ordify-chat-widget 1.0.30 → 1.0.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"useOrdifyChat.d.ts","sourceRoot":"","sources":["../../src/hooks/useOrdifyChat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,YAAY,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAKpE,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,mBAAmB,CA4NvE"}
1
+ {"version":3,"file":"useOrdifyChat.d.ts","sourceRoot":"","sources":["../../src/hooks/useOrdifyChat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,YAAY,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAKpE,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,mBAAmB,CAqOvE"}
package/dist/index.cjs.js CHANGED
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * This source code is licensed under the MIT license found in the
8
8
  * LICENSE file in the root directory of this source tree.
9
- */var bn=k,xn=Symbol.for("react.element"),kn=Symbol.for("react.fragment"),vn=Object.prototype.hasOwnProperty,wn=bn.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,Sn={key:!0,ref:!0,__self:!0,__source:!0};function Tr(e,t,r){var n,a={},l=null,d=null;r!==void 0&&(l=""+r),t.key!==void 0&&(l=""+t.key),t.ref!==void 0&&(d=t.ref);for(n in t)vn.call(t,n)&&!Sn.hasOwnProperty(n)&&(a[n]=t[n]);if(e&&e.defaultProps)for(n in t=e.defaultProps,t)a[n]===void 0&&(a[n]=t[n]);return{$$typeof:xn,type:e,key:l,ref:d,props:a,_owner:wn.current}}qe.Fragment=kn;qe.jsx=Tr;qe.jsxs=Tr;Cr.exports=qe;var g=Cr.exports;function Oe(){return Math.random().toString(36).substr(2,9)}function Ve(e){return new Intl.DateTimeFormat("en-US",{hour:"2-digit",minute:"2-digit",hour12:!0}).format(e)}function $n(e,t){let r;return(...n)=>{clearTimeout(r),r=setTimeout(()=>e(...n),t)}}function Cn(e,t){let r;return(...n)=>{r||(e(...n),r=!0,setTimeout(()=>r=!1,t))}}class Er{constructor(t){Kt(this,"config");this.config=t}async sendMessage(t,r,n){const a=`${this.config.apiBaseUrl}/chat/agents/${this.config.agentId}`,l={message:t,sessionId:r,context:n},d=await fetch(a,{method:"POST",headers:{"Content-Type":"application/json","api-key":this.config.apiKey,accept:"application/json"},body:JSON.stringify(l)});if(!d.ok){const u=await d.json();throw new Error(`API Error: ${u.detail}`)}if(!d.body)throw new Error("No response body");return d.body}async createSession(){const t=`${this.config.apiBaseUrl}/sessions`,r=await fetch(t,{method:"POST",headers:{"Content-Type":"application/json","api-key":this.config.apiKey,accept:"application/json"},body:JSON.stringify({name:"Chat Session",agentConfig:{type:"chat",settings:null}})});if(!r.ok){const n=await r.json();throw new Error(`API Error: ${n.detail}`)}return r.json()}async getAgents(){const t=`${this.config.apiBaseUrl}/chat/agents`,r=await fetch(t,{method:"GET",headers:{"api-key":this.config.apiKey,accept:"application/json"}});if(!r.ok){const a=await r.json();throw new Error(`API Error: ${a.detail}`)}return(await r.json()).agents||[]}async getSessions(){const t=`${this.config.apiBaseUrl}/sessions`,r=await fetch(t,{method:"GET",headers:{"api-key":this.config.apiKey,accept:"application/json"}});if(!r.ok){const n=await r.json();throw new Error(`API Error: ${n.detail}`)}return r.json()}async getSessionWithMessages(t){const r=`${this.config.apiBaseUrl}/sessions/${t}/with-messages`,n=await fetch(r,{method:"GET",headers:{"api-key":this.config.apiKey,accept:"application/json"}});if(!n.ok){const a=await n.json();throw new Error(`API Error: ${a.detail}`)}return n.json()}}function jr(e){try{if(e.startsWith("data: ")){const t=e.slice(6);return t==="[DONE]"?{text:"",sessionId:"",type:"done"}:JSON.parse(t)}}catch(t){console.warn("Failed to parse streaming response:",t)}return null}function Ir(e){const[t,r]=k.useState([]),[n,a]=k.useState(!1),[l,d]=k.useState(null),[u,h]=k.useState(e.sessionId||null),[b,x]=k.useState(!1),[c,S]=k.useState(!1),[$,E]=k.useState(!1),[v,C]=k.useState(!1),o=k.useRef(null),s=k.useRef(!1),i=k.useRef(!1);o.current||(o.current=new Er({apiKey:e.apiKey,apiBaseUrl:e.apiBaseUrl||"https://api.ordify.ai",agentId:e.agentId})),k.useEffect(()=>{e.sessionId&&e.sessionId!==u&&(h(e.sessionId),i.current=!1,E(!1),r([]))},[e.sessionId]),k.useEffect(()=>{(async()=>{const m=u||e.sessionId;if(!(!m||i.current)){C(!0);try{const w=await o.current.getSessionWithMessages(m);if(w.messages&&w.messages.length>0){const T=w.messages.map(R=>({id:R.id||Oe(),content:R.content||"",role:R.role==="assistant"?"assistant":"user",timestamp:R.timestamp?new Date(R.timestamp):new Date,sessionId:m}));r(T),E(!0)}else E(!1)}catch(w){console.warn("Failed to load session history:",w),E(!1)}finally{C(!1),i.current=!0}}})()},[u,e.sessionId]);const f=k.useCallback(()=>{d(null)},[]),p=k.useCallback(async(y,m)=>{if(!(!y.trim()||n)){a(!0),d(null);try{const w={id:Oe(),content:y.trim(),role:"user",timestamp:new Date,sessionId:u||void 0};r(F=>[...F,w]);let T=u||e.sessionId||null;T?T!==u&&h(T):(T=(await o.current.createSession()).id,h(T),e.onSessionCreated&&e.onSessionCreated(T));const I=(await o.current.sendMessage(y.trim(),T,m)).getReader(),N=new TextDecoder;let M={id:Oe(),content:"",role:"assistant",timestamp:new Date,sessionId:T};for(r(F=>[...F,M]);;){const{done:F,value:q}=await I.read();if(F)break;const H=N.decode(q,{stream:!0}).split(`
9
+ */var bn=k,xn=Symbol.for("react.element"),kn=Symbol.for("react.fragment"),vn=Object.prototype.hasOwnProperty,wn=bn.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,Sn={key:!0,ref:!0,__self:!0,__source:!0};function Tr(e,t,r){var n,a={},l=null,d=null;r!==void 0&&(l=""+r),t.key!==void 0&&(l=""+t.key),t.ref!==void 0&&(d=t.ref);for(n in t)vn.call(t,n)&&!Sn.hasOwnProperty(n)&&(a[n]=t[n]);if(e&&e.defaultProps)for(n in t=e.defaultProps,t)a[n]===void 0&&(a[n]=t[n]);return{$$typeof:xn,type:e,key:l,ref:d,props:a,_owner:wn.current}}qe.Fragment=kn;qe.jsx=Tr;qe.jsxs=Tr;Cr.exports=qe;var g=Cr.exports;function Oe(){return Math.random().toString(36).substr(2,9)}function Ve(e){return new Intl.DateTimeFormat("en-US",{hour:"2-digit",minute:"2-digit",hour12:!0}).format(e)}function $n(e,t){let r;return(...n)=>{clearTimeout(r),r=setTimeout(()=>e(...n),t)}}function Cn(e,t){let r;return(...n)=>{r||(e(...n),r=!0,setTimeout(()=>r=!1,t))}}class Er{constructor(t){Kt(this,"config");this.config=t}async sendMessage(t,r,n){const a=`${this.config.apiBaseUrl}/chat/agents/${this.config.agentId}`,l={message:t,sessionId:r,context:n},d=await fetch(a,{method:"POST",headers:{"Content-Type":"application/json","api-key":this.config.apiKey,accept:"application/json"},body:JSON.stringify(l)});if(!d.ok){const u=await d.json();throw new Error(`API Error: ${u.detail}`)}if(!d.body)throw new Error("No response body");return d.body}async createSession(){const t=`${this.config.apiBaseUrl}/sessions`,r=await fetch(t,{method:"POST",headers:{"Content-Type":"application/json","api-key":this.config.apiKey,accept:"application/json"},body:JSON.stringify({name:"Chat Session",agentConfig:{type:"chat",settings:null}})});if(!r.ok){const n=await r.json();throw new Error(`API Error: ${n.detail}`)}return r.json()}async getAgents(){const t=`${this.config.apiBaseUrl}/chat/agents`,r=await fetch(t,{method:"GET",headers:{"api-key":this.config.apiKey,accept:"application/json"}});if(!r.ok){const a=await r.json();throw new Error(`API Error: ${a.detail}`)}return(await r.json()).agents||[]}async getSessions(){const t=`${this.config.apiBaseUrl}/sessions`,r=await fetch(t,{method:"GET",headers:{"api-key":this.config.apiKey,accept:"application/json"}});if(!r.ok){const n=await r.json();throw new Error(`API Error: ${n.detail}`)}return r.json()}async getSessionWithMessages(t){const r=`${this.config.apiBaseUrl}/sessions/${t}/with-messages`,n=await fetch(r,{method:"GET",headers:{"api-key":this.config.apiKey,accept:"application/json"}});if(!n.ok){const a=await n.json();throw new Error(`API Error: ${a.detail}`)}return n.json()}}function jr(e){try{if(e.startsWith("data: ")){const t=e.slice(6);return t==="[DONE]"?{text:"",sessionId:"",type:"done"}:JSON.parse(t)}}catch(t){console.warn("Failed to parse streaming response:",t)}return null}function Ir(e){const[t,r]=k.useState([]),[n,a]=k.useState(!1),[l,d]=k.useState(null),[u,h]=k.useState(e.sessionId||null),[b,x]=k.useState(!1),[c,S]=k.useState(!1),[$,E]=k.useState(!1),[v,C]=k.useState(!1),o=k.useRef(null),s=k.useRef(!1),i=k.useRef(!1);o.current||(o.current=new Er({apiKey:e.apiKey,apiBaseUrl:e.apiBaseUrl||"https://api.ordify.ai",agentId:e.agentId})),k.useEffect(()=>{e.sessionId&&e.sessionId!==u&&(h(e.sessionId),i.current=!1,E(!1),r([]))},[e.sessionId]),k.useEffect(()=>{(async()=>{const m=u||e.sessionId;if(!m){i.current=!0,E(!1);return}if(!i.current){C(!0);try{const w=await o.current.getSessionWithMessages(m);if(w.messages&&w.messages.length>0){const T=w.messages.map(R=>({id:R.id||Oe(),content:R.content||"",role:R.role==="assistant"?"assistant":"user",timestamp:R.timestamp?new Date(R.timestamp):new Date,sessionId:m}));r(T),E(!0)}else E(!1)}catch(w){console.warn("Failed to load session history:",w),E(!1)}finally{C(!1),i.current=!0}}})()},[u,e.sessionId]);const f=k.useCallback(()=>{d(null)},[]),p=k.useCallback(async(y,m)=>{if(!(!y.trim()||n)){a(!0),d(null);try{const w={id:Oe(),content:y.trim(),role:"user",timestamp:new Date,sessionId:u||void 0};r(F=>[...F,w]);let T=u||e.sessionId||null;T?T!==u&&h(T):(T=(await o.current.createSession()).id,h(T),e.onSessionCreated&&e.onSessionCreated(T));const I=(await o.current.sendMessage(y.trim(),T,m)).getReader(),N=new TextDecoder;let M={id:Oe(),content:"",role:"assistant",timestamp:new Date,sessionId:T};for(r(F=>[...F,M]);;){const{done:F,value:q}=await I.read();if(F)break;const H=N.decode(q,{stream:!0}).split(`
10
10
  `);for(const K of H){const O=jr(K);if(O){if(O.type==="stream"&&O.text)r(Z=>Z.map(L=>L.id===M.id?{...L,content:L.content+O.text}:L));else if(O.type==="done")break}}}e.onMessage&&e.onMessage(M)}catch(w){const T=w instanceof Error?w.message:"Failed to send message";d(T),e.onError&&e.onError(w instanceof Error?w:new Error(T))}finally{a(!1)}}},[e.onSessionCreated,e.onMessage,e.onError,n,u]);return k.useEffect(()=>{const m=!(u||e.sessionId)||!$;if((e.initialMessage||e.initialContext)&&m&&!c&&!n&&!v&&!s.current&&i.current){S(!0),s.current=!0;let w,T;if(e.initialMessage&&e.initialContext)w=e.initialMessage,T=e.initialContext;else if(e.initialMessage)w=e.initialMessage,T=void 0;else if(e.initialContext)w="Hi",T=e.initialContext;else return;setTimeout(()=>{p(w,T)},0)}},[e.initialMessage,e.initialContext,c,n,v,$,u,e.sessionId,p]),{messages:t,sendMessage:p,isLoading:n,error:l,clearError:f,sessionId:u,isOpen:b,setIsOpen:x}}function Ar(e){return k.useMemo(()=>{const t=e.agentId||process.env.ORDIFY_AGENT_ID,r=e.apiKey||process.env.ORDIFY_API_KEY,n=e.apiBaseUrl||process.env.ORDIFY_API_BASE_URL||"https://r.ordify.ai";if(!t)throw new Error("Ordify agent ID is required. Provide agentId prop or set ORDIFY_AGENT_ID environment variable.");if(!r)throw new Error("Ordify API key is required. Provide apiKey prop or set ORDIFY_API_KEY environment variable.");return{agentId:t,apiKey:r,apiBaseUrl:n,mode:e.mode||"floating",position:e.position||"bottom-right",theme:e.theme||"auto",placeholder:e.placeholder||"Type a message...",height:e.height||"500px",className:e.className||"",buttonStyle:e.buttonStyle||{},chatWindowStyle:e.chatWindowStyle||{},showHeader:e.showHeader!==!1,buttonText:e.buttonText,chatName:e.chatName,primaryColor:e.primaryColor,onMessage:e.onMessage,onError:e.onError,onClose:e.onClose,onSessionCreated:e.onSessionCreated,initialMessage:e.initialMessage,initialContext:e.initialContext,sessionId:e.sessionId}},[e])}function le(){return le=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},le.apply(this,arguments)}const Tn=["children","options"],Gt=["allowFullScreen","allowTransparency","autoComplete","autoFocus","autoPlay","cellPadding","cellSpacing","charSet","classId","colSpan","contentEditable","contextMenu","crossOrigin","encType","formAction","formEncType","formMethod","formNoValidate","formTarget","frameBorder","hrefLang","inputMode","keyParams","keyType","marginHeight","marginWidth","maxLength","mediaGroup","minLength","noValidate","radioGroup","readOnly","rowSpan","spellCheck","srcDoc","srcLang","srcSet","tabIndex","useMap"].reduce((e,t)=>(e[t.toLowerCase()]=t,e),{class:"className",for:"htmlFor"}),Yt={amp:"&",apos:"'",gt:">",lt:"<",nbsp:" ",quot:"“"},En=["style","script","pre"],jn=["src","href","data","formAction","srcDoc","action"],In=/([-A-Z0-9_:]+)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|(?:\{((?:\\.|{[^}]*?}|[^}])*)\})))?/gi,An=/mailto:/i,Rn=/\n{2,}$/,qt=/^(\s*>[\s\S]*?)(?=\n\n|$)/,_n=/^ *> ?/gm,Mn=/^(?:\[!([^\]]*)\]\n)?([\s\S]*)/,Nn=/^ {2,}\n/,On=/^(?:( *[-*_])){3,} *(?:\n *)+\n/,Vt=/^(?: {1,3})?(`{3,}|~{3,}) *(\S+)? *([^\n]*?)?\n([\s\S]*?)(?:\1\n?|$)/,Zt=/^(?: {4}[^\n]+\n*)+(?:\n *)+\n?/,Pn=/^(`+)((?:\\`|(?!\1)`|[^`])+)\1/,Dn=/^(?:\n *)*\n/,zn=/\r\n?/g,Bn=/^\[\^([^\]]+)](:(.*)((\n+ {4,}.*)|(\n(?!\[\^).+))*)/,Ln=/^\[\^([^\]]+)]/,Fn=/\f/g,Un=/^---[ \t]*\n(.|\n)*\n---[ \t]*\n/,Hn=/^\s*?\[(x|\s)\]/,Jt=/^ *(#{1,6}) *([^\n]+?)(?: +#*)?(?:\n *)*(?:\n|$)/,Qt=/^ *(#{1,6}) +([^\n]+?)(?: +#*)?(?:\n *)*(?:\n|$)/,Xt=/^([^\n]+)\n *(=|-){3,} *\n/,at=/^ *(?!<[a-z][^ >/]* ?\/>)<([a-z][^ >/]*) ?((?:[^>]*[^/])?)>\n?(\s*(?:<\1[^>]*?>[\s\S]*?<\/\1>|(?!<\1\b)[\s\S])*?)<\/\1>(?!<\/\1>)\n*/i,Wn=/&([a-z0-9]+|#[0-9]{1,6}|#x[0-9a-fA-F]{1,6});/gi,er=/^<!--[\s\S]*?(?:-->)/,Kn=/^(data|aria|x)-[a-z_][a-z\d_.-]*$/,ct=/^ *<([a-z][a-z0-9:]*)(?:\s+((?:<.*?>|[^>])*))?\/?>(?!<\/\1>)(\s*\n)?/i,Gn=/^\{.*\}$/,Yn=/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,qn=/^<([^ >]+@[^ >]+)>/,Vn=/^<([^ >]+:\/[^ >]+)>/,Zn=/-([a-z])?/gi,tr=/^(\|.*)\n(?: *(\|? *[-:]+ *\|[-| :]*)\n((?:.*\|.*\n)*))?\n?/,Jn=/^[^\n]+(?: \n|\n{2,})/,Qn=/^\[([^\]]*)\]:\s+<?([^\s>]+)>?\s*("([^"]*)")?/,Xn=/^!\[([^\]]*)\] ?\[([^\]]*)\]/,eo=/^\[([^\]]*)\] ?\[([^\]]*)\]/,to=/(\n|^[-*]\s|^#|^ {2,}|^-{2,}|^>\s)/,ro=/\t/g,no=/(^ *\||\| *$)/g,oo=/^ *:-+: *$/,so=/^ *:-+ *$/,io=/^ *-+: *$/,Ze=e=>`(?=[\\s\\S]+?\\1${e?"\\1":""})`,Je="((?:\\[.*?\\][([].*?[)\\]]|<.*?>(?:.*?<.*?>)?|`.*?`|\\\\\\1|[\\s\\S])+?)",ao=RegExp(`^([*_])\\1${Ze(1)}${Je}\\1\\1(?!\\1)`),co=RegExp(`^([*_])${Ze(0)}${Je}\\1(?!\\1)`),lo=RegExp(`^(==)${Ze(0)}${Je}\\1`),uo=RegExp(`^(~~)${Ze(0)}${Je}\\1`),fo=/^(:[a-zA-Z0-9-_]+:)/,po=/^\\([^0-9A-Za-z\s])/,ho=/\\([^0-9A-Za-z\s])/g,mo=/^[\s\S](?:(?! \n|[0-9]\.|http)[^=*_~\-\n:<`\\\[!])*/,go=/^\n+/,yo=/^([ \t]*)/,bo=/(?:^|\n)( *)$/,It="(?:\\d+\\.)",At="(?:[*+-])";function Rr(e){return"( *)("+(e===1?It:At)+") +"}const _r=Rr(1),Mr=Rr(2);function Nr(e){return RegExp("^"+(e===1?_r:Mr))}const xo=Nr(1),ko=Nr(2);function Or(e){return RegExp("^"+(e===1?_r:Mr)+"[^\\n]*(?:\\n(?!\\1"+(e===1?It:At)+" )[^\\n]*)*(\\n|$)","gm")}const vo=Or(1),wo=Or(2);function Pr(e){const t=e===1?It:At;return RegExp("^( *)("+t+") [\\s\\S]+?(?:\\n{2,}(?! )(?!\\1"+t+" (?!"+t+" ))\\n*|\\s*\\n*$)")}const Dr=Pr(1),zr=Pr(2);function rr(e,t){const r=t===1,n=r?Dr:zr,a=r?vo:wo,l=r?xo:ko;return{t:d=>l.test(d),o:ge(function(d,u){const h=bo.exec(u.prevCapture);return h&&(u.list||!u.inline&&!u.simple)?n.exec(d=h[1]+d):null}),i:1,u(d,u,h){const b=r?+d[2]:void 0,x=d[0].replace(Rn,`
11
11
  `).match(a);let c=!1;return{items:x.map(function(S,$){const E=l.exec(S)[0].length,v=RegExp("^ {1,"+E+"}","gm"),C=S.replace(v,"").replace(l,""),o=$===x.length-1,s=C.indexOf(`
12
12
 
package/dist/index.esm.js CHANGED
@@ -162,7 +162,11 @@ function Rn(e) {
162
162
  }, [e.sessionId]), ze(() => {
163
163
  (async () => {
164
164
  const m = u || e.sessionId;
165
- if (!(!m || i.current)) {
165
+ if (!m) {
166
+ i.current = !0, T(!1);
167
+ return;
168
+ }
169
+ if (!i.current) {
166
170
  $(!0);
167
171
  try {
168
172
  const k = await o.current.getSessionWithMessages(m);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ordify-chat-widget",
3
- "version": "1.0.30",
3
+ "version": "1.0.32",
4
4
  "description": "A professional React chat widget for integrating Ordify AI agents into applications with minimal setup.",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.esm.js",