PageSourceSearch

https://evital.com.tr/_next/static/chunks/9786-f181e92f6c029655.js

js evital.com.tr collected 2026-09-24 13:22:43 UTC 36,405 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9786],{1815:function(e,t,n){n.d(t,{AM:function(){return B},Rj:function(){return o},H4:function(){return T},$_:function(){return W},nP:function(){return P},Rc:function(){return M},Dq:function(){return O},AY:function(){return z},Yg:function(){return q},bG:function(){return U}});var s,a,i,r,o,l,c,u,g=n(57437),d=n(2265),h=n(83464);class f{async healthCheck(){return(await this.client.get("/api/health")).data}async listConversations(e,t){let n={};return void 0!==e&&(n.archived=String(e)),t&&(n.client_ids=t),(await this.client.get("/api/chat/conversations",{params:n})).data}async deleteConversation(e){return(await this.client.delete("/api/chat/conversations/".concat(e,"/delete"))).data}async archiveConversation(e){return(await this.client.post("/api/chat/conversations/".concat(e,"/archive"))).data}async unarchiveConversation(e){return(await this.client.post("/api/chat/conversations/".concat(e,"/unarchive"))).data}async getConversationDetails(e){return(await this.client.get("/api/chat/conversations/".concat(e,"/details"))).data}async getConversationWithReceiver(e){return(await this.client.get("/api/chat/conversations/with/".concat(e))).data}async searchConversation(e,t){return(await this.client.get("/api/chat/conversations/".concat(e,"/search"),{params:{term:t}})).data}async getMessages(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:20;return(await this.client.get("/api/messages/".concat(e,"/list"),{params:{page:t,page_size:n}})).data}async markMessageAsRead(e){return(await this.client.post("/api/messages/".concat(e,"/read"))).data}async sendMessage(e){let t={};e.isAppointment&&(t.headers={"x-disable-limit":!0});let{isAppointment:n,...s}=e;return(await this.client.post("/api/messages/send-message",s,t)).data}async markConversationAsRead(e){return(await this.client.post("/api/messages/conversation/".concat(e,"/read"))).data}async updateMessage(e,t){return(await this.client.put("/api/messages/".concat(e),t)).data}async deleteMessage(e){return(await this.client.delete("/api/messages/".concat(e))).data}async getRemainingLimit(e){return(await this.client.get("/api/messages/remaining-limit",{params:e})).data}async uploadFile(e){let t=new FormData;return t.append("file",e),(await this.client.post("/api/files/upload",t,{headers:{"Content-Type":"multipart/form-data"}})).data}async banClient(e){return(await this.client.post("/api/bans/client",e)).data}async unbanClient(e){return(await this.client.delete("/api/bans/client",{data:e})).data}async adminBanClient(e){return(await this.client.post("/api/bans/admin",e)).data}async adminUnbanClient(e){return(await this.client.delete("/api/bans/admin",{data:e})).data}async checkBanStatus(e){return(await this.client.get("/api/bans/status/".concat(e))).data}async getClientProfile(){return(await this.client.get("/api/clients/profile")).data}async getClientPreferences(){return(await this.client.get("/api/clients/preferences")).data}async updateClientPreferences(e){return(await this.client.put("/api/clients/preferences",e)).data}constructor(e){this.client=h.Z.create({baseURL:e.baseUrl,headers:{Authorization:"Bearer ".concat(e.token),"Content-Type":"application/json","x-requesting-client-id":e.client_id}})}}var m=n(68680);(s=o||(o={})).WebSocket="websocket",s.LongPolling="longpolling",(a=l||(l={})).Connected="connected",a.Connecting="connecting",a.Disconnected="disconnected",a.Error="error",(i=c||(c={})).MessageSent="message_sent",i.MessageEdited="message_edited",i.MessageDeleted="message_deleted",i.MessageReceived="message_received",i.MessageRead="message_read",i.ConversationRead="conversation_read",(r=u||(u={}))[r.DEBUG=0]="DEBUG",r[r.INFO=1]="INFO",r[r.WARN=2]="WARN",r[r.ERROR=3]="ERROR",r[r.NONE=4]="NONE";class p{shouldLog(e){return this.config.enabled&&e>=this.config.level}formatMessage(e,t){let n=[];return this.config.timestamp&&n.push("[".concat(new Date().toISOString(),"]")),this.config.prefix&&n.push(this.config.prefix),n.push("[".concat(e,"]")),n.push(t),n.join(" ")}formatData(e){if(this.config.includeData&&e)try{let t=JSON.parse(JSON.stringify(e));
1return this.maskSensitiveData(t),this.config.prettyPrint?t:JSON.stringify(t)}catch(n){var t;return"[Object: ".concat((null==e?void 0:null===(t=e.constructor)||void 0===t?void 0:t.name)||typeof e,"]")}}maskSensitiveData(e){if(!e||"object"!=typeof e)return;let t=["token","password","auth","authorization","api_key","apiKey","secret"];for(let n in e){let s=n.toLowerCase();t.some(e=>s.includes(e))?e[n]="***MASKED***":"object"==typeof e[n]&&this.maskSensitiveData(e[n])}}debug(e,t){if(!this.shouldLog(0))return;let n=this.formatMessage("DEBUG",e),s=this.formatData(t);void 0!==s?console.log(n,s):console.log(n)}info(e,t){if(!this.shouldLog(1))return;let n=this.formatMessage("INFO",e),s=this.formatData(t);void 0!==s?console.info(n,s):console.info(n)}warn(e,t){if(!this.shouldLog(2))return;let n=this.formatMessage("WARN",e),s=this.formatData(t);void 0!==s?console.warn(n,s):console.warn(n)}error(e,t){if(!this.shouldLog(3))return;let n=this.formatMessage("ERROR",e),s=this.formatData(t);void 0!==s?console.error(n,s):console.error(n)}group(e){this.config.enabled&&console.group(this.formatMessage("GROUP",e))}groupEnd(){this.config.enabled&&console.groupEnd()}time(e){this.config.enabled&&console.time("".concat(this.config.prefix," ").concat(e))}timeEnd(e){this.config.enabled&&console.timeEnd("".concat(this.config.prefix," ").concat(e))}updateConfig(e){this.config={...this.config,...e}}getConfig(){return{...this.config}}constructor(e={}){this.config={enabled:!1,level:1,prefix:"[ChatWS]",timestamp:!0,includeData:!0,prettyPrint:!0,...e}}}let v={type:o.WebSocket,autoReconnect:!0,reconnectAttempts:5,reconnectDelay:3e3,logging:{enabled:!1,level:u.INFO},onlyLongpolling:!1,degradeWsOnFailure:!0,wsFailureThreshold:3,wsDegradeTTLms:864e5,forceWebSocket:!1},y="chat_queue";class C{static getInstance(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return C.instance||(C.instance=new C(e,t,n)),C.instance}static resetInstance(){C.instance&&(C.instance.disconnect(),C.instance=null)}connect(){if(this.status===l.Connected||this.status===l.Connecting||this.connecting){this.logger.debug("Connect called but already connected/connecting",{status:this.status,connecting:this.connecting});return}this.logger.info("Initiating connection",{socketUrl:this.auth.socketBaseUrl}),this.connecting=!0,this.setStatus(l.Connecting),this.connectWS()}disconnect(){var e;this.logger.info("Disconnecting from websocket"),this.clearTimers(),null===(e=this.socket)||void 0===e||e.disconnect(),this.socket=null,this.connecting=!1,this.setStatus(l.Disconnected),this.logger.info("Disconnected successfully")}getStatus(){return this.status}queueMessage(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:3,n="undefined"!=typeof crypto&&crypto.randomUUID?crypto.randomUUID():(Date.now()+Math.random()).toString(36),s={id:n,message:e,attempts:0,maxAttempts:t,timestamp:Date.now()};return this.logger.debug("Queueing message",{messageId:n,receiver:e.receiver_client_id,hasContent:!!e.content,hasAttachments:!!(e.attachments&&e.attachments.length>0),maxAttempts:t}),this.queue.push(s),this.saveQueue(),this.processQueue(),n}on(e,t){this.add(this.eventListeners,e,t)}off(e,t){this.remove(this.eventListeners,e,t)}emit(e){for(var t=arguments.length,n=Array(t>1?t-1:0),s=1;s<t;s++)n[s-1]=arguments[s];this.logger.debug("Emitting event",{event:e,args:n.length>0?n:void 0}),this.socket.emit(e,...n)}onStatusChange(e){this.statusListeners.push(e)}offStatusChange(e){let t=this.statusListeners.indexOf(e);-1!==t&&this.statusListeners.splice(t,1)}onError(e){this.errorListeners.push(e)}offError(e){let t=this.errorListeners.indexOf(e);-1!==t&&this.errorListeners.splice(t,1)}updateLogging(e){this.logger.updateConfig(e),this.logger.info("Logging configuration updated",e)}getLoggingConfig(){return this.logger.getConfig()}connectWS(){try{this.logger.debug("Starting WebSocket connection",{url:this.auth.socketBaseUrl,hasExistingSocket:!!this.socket,degraded:this.isDegraded}),this.socket&&(this.logger.debug("Cleaning up existing socket connection"),this.socket.removeAllListeners(),this.socket.disconnect());let e=this.buildSocketOpts();this.logger.debug("Creating socket with options",e),this.socket=(0,m.io)(this.auth.socketBaseUrl,e);try{let e=this.socket.io,t=null==e?void 0:e.engine;t&&"function"==typeof t.on&&(t.on("upgrade",e=>{let t=(null==e?void 0:e.name)||e;this.logger.info("Engine.io upgrade success",{transport:t}),"websocket"===t&&(this.resetWsFailures(),this.isDegraded&&(this.logger.info("Exiting degraded mode after successful websocket upgrade"),this.clearDegradation(),this.isDegraded=!1))}),t.on("upgradeError",e=>{this.logger.warn("Engine.io upgrade error",{error:(null==e?void 0:e.message)||e}),this.onWsFailure()}))}catch(e){this.logger.debug("Unable to wire engine.io upgrade listeners",{error:(null==e?void 0:e.message)||e})}this.socket.on("connect",()=>{this.logger.info("WebSocket connected successfully",{socketId:this.socket.id,reconnectCount:this.reconnectCount}),this.connecting=!1,this.reconnectCount=0,this.setStatus(l.Connected),this.processQueue()}),this.socket.on("connect_error",e=>{this.logger.error("WebSocket connection error",{error:e.message,type:e.type||"unknown",re
1connectCount:this.reconnectCount}),this.connecting=!1,this.isDegraded||this.cfg.onlyLongpolling||this.cfg.forceWebSocket||this.onWsFailure(),this.handleConnError(e)}),this.socket.on("disconnect",e=>{this.logger.info("WebSocket disconnected",{reason:e,willReconnect:this.cfg.autoReconnect}),this.connecting=!1,this.setStatus(l.Disconnected),this.scheduleReconnect()}),this.logger.getConfig().level<=u.DEBUG&&(this.socket.on("ping",()=>{this.logger.debug("Socket.io ping sent")}),this.socket.on("pong",e=>{this.logger.debug("Socket.io pong received",{latency:e})})),Object.values(c).forEach(e=>{this.socket.on(e,t=>{this.logger.debug("Received realtime event",{event:e,data:t}),this.handleEvent({type:e,data:t})})}),this.logger.debug("WebSocket event listeners registered",{events:Object.values(c)})}catch(e){this.logger.error("WebSocket initialization failed",e),this.connecting=!1,this.handleConnError(e)}}buildSocketOpts(){this.cfg.headers,this.auth.token;let e=["websocket"],t=this.isDegraded&&!this.cfg.forceWebSocket;e=this.cfg.onlyLongpolling||t?["polling"]:this.cfg.type===o.LongPolling?["polling","websocket"]:["websocket","polling"];let n={reconnection:!1,rememberUpgrade:!this.cfg.onlyLongpolling&&!t,timeout:2e4,auth:{token:this.auth.token,...this.cfg.extraAuth||{}},transports:e,upgrade:!this.cfg.onlyLongpolling&&!t};if(this.cfg.type===o.LongPolling||this.cfg.onlyLongpolling){let e={};this.cfg.extraAuth&&Object.entries(this.cfg.extraAuth).forEach(t=>{let[n,s]=t;e[n]=String(s)}),n.query=e}return this.logger.debug("Socket options built",{isBrowser:!0,hasExtraAuth:!!this.cfg.extraAuth,hasHeaders:!!this.cfg.headers,timeout:n.timeout,transports:n.transports,onlyLongpolling:this.cfg.onlyLongpolling,degraded:t,rememberUpgrade:n.rememberUpgrade,upgrade:n.upgrade}),n}handleConnError(e){this.logger.error("Connection error occurred",{error:(null==e?void 0:e.message)||e,errorType:(null==e?void 0:e.type)||"unknown",willReconnect:this.cfg.autoReconnect&&this.reconnectCount<this.cfg.reconnectAttempts}),this.setStatus(l.Error),this.errorListeners.forEach(t=>{try{t(e)}catch(e){this.logger.warn("Error in error listener",e)}}),this.clearTimers(),this.scheduleReconnect()}async processQueue(){if(this.processingQueue||this.status!==l.Connected){this.logger.debug("Skipping queue processing",{processingQueue:this.processingQueue,status:this.status,queueLength:this.queue.length});return}if(0===this.queue.length){this.logger.debug("Queue is empty, nothing to process");return}for(this.logger.debug("Starting queue processing",{queueLength:this.queue.length}),this.processingQueue=!0;this.queue.length&&this.status===l.Connected;){let e=this.queue[0];e.attempts+=1,this.logger.debug("Processing queued message",{messageId:e.id,attempt:e.attempts,maxAttempts:e.maxAttempts,age:Date.now()-e.timestamp});try{await this.sendMessageHttp(e.message),this.logger.info("Queued message sent successfully",{messageId:e.id,attempts:e.attempts}),this.queue.shift(),this.saveQueue()}catch(t){this.logger.error("Failed to send queued message (attempt ".concat(e.attempts,"/").concat(e.maxAttempts,")"),{messageId:e.id,error:t}),e.attempts>=e.maxAttempts&&(this.logger.warn("Message exceeded max attempts, removing from queue",{messageId:e.id}),this.queue.shift()),this.saveQueue();break}}this.processingQueue=!1,this.queue.length&&(this.logger.debug("Queue still has messages, scheduling next processing",{remainingMessages:this.queue.length}),setTimeout(()=>this.processQueue(),100))}async sendMessageHttp(e){this.logger.debug("Sending message via HTTP",{receiver:e.receiver_client_id,hasContent:!!e.content,hasAttachments:!!(e.attachments&&e.attachments.length>0)}),this.logger.time("sendMessage");try{await this.api.sendMessage(e),this.logger.timeEnd("sendMessage"),this.logger.debug("Message sent successfully via HTTP")}catch(e){throw this.logger.timeEnd("sendMessage"),this.logger.error("Failed to send message via HTTP",e),e}}handleEvent(e){let t=this.eventListeners.get(e.type)||[];this.logger.debug("Handling event",{type:e.type,listenerCount:t.length,hasData:!!e.data}),t.forEach((t,n)=>{try{t(e)}catch(t){this.logger.error("Event listener error for ".concat(e.type),{listenerIndex:n,error:t})}})}setStatus(e){if(this.status===e){this.logger.debug("Status unchanged",{status:e});return}let t=this.status;this.status=e,this.logger.info("Connection status changed",{from:t,to:e,listenerCount:this.statusListeners.length}
1),this.statusListeners.forEach((t,n)=>{try{t(e)}catch(e){this.logger.error("Status listener error",{listenerIndex:n,error:e})}})}scheduleReconnect(){if(!this.cfg.autoReconnect){this.logger.debug("Auto-reconnect disabled, not scheduling reconnect");return}if(this.reconnectCount>=this.cfg.reconnectAttempts){this.logger.warn("Max reconnect attempts reached",{reconnectCount:this.reconnectCount,maxAttempts:this.cfg.reconnectAttempts});return}this.reconnectCount+=1,this.logger.info("Scheduling reconnect",{attempt:this.reconnectCount,maxAttempts:this.cfg.reconnectAttempts,delayMs:this.cfg.reconnectDelay}),setTimeout(()=>{this.logger.debug("Executing scheduled reconnect",{attempt:this.reconnectCount}),this.connect()},this.cfg.reconnectDelay)}clearTimers(){}saveQueue(){try{sessionStorage.setItem(y,JSON.stringify(this.queue)),this.logger.debug("Queue saved to session storage",{count:this.queue.length})}catch(e){this.logger.warn("Failed to save queue to session storage",e)}}add(e,t,n){e.has(t)||e.set(t,[]),e.get(t).push(n)}remove(e,t,n){let s=e.get(t);if(!s)return;let a=s.indexOf(n);-1!==a&&s.splice(a,1)}storageAvailable(){try{let e="__wsdeg__";return window.localStorage.setItem(e,"1"),window.localStorage.removeItem(e),!0}catch(e){return!1}}failKey(){return"WS_FAIL_COUNT::".concat(this.auth.socketBaseUrl)}untilKey(){return"WS_DEGRADE_UNTIL::".concat(this.auth.socketBaseUrl)}getFailCount(){if(!this.storageAvailable())return this.wsFailCount;let e=window.localStorage.getItem(this.failKey());return e&&parseInt(e,10)||0}setFailCount(e){if(this.wsFailCount=e,this.storageAvailable())try{window.localStorage.setItem(this.failKey(),String(e))}catch(e){}}resetWsFailures(){this.cfg.degradeWsOnFailure&&this.setFailCount(0)}getDegradeUntil(){if(!this.storageAvailable())return null;let e=window.localStorage.getItem(this.untilKey());return e&&parseInt(e,10)||null}setDegradeUntil(e){if(this.storageAvailable())try{window.localStorage.setItem(this.untilKey(),String(e))}catch(e){}}clearDegradation(){if(this.storageAvailable())try{window.localStorage.removeItem(this.untilKey()),window.localStorage.removeItem(this.failKey())}catch(e){}}onWsFailure(){if(!this.cfg.degradeWsOnFailure||this.cfg.forceWebSocket||this.isDegraded||this.cfg.onlyLongpolling)return;let e=this.getFailCount()+1;if(this.setFailCount(e),this.logger.warn("WebSocket failure counted",{count:e,threshold:this.cfg.wsFailureThreshold}),e>=(this.cfg.wsFailureThreshold||3)){let e=this.cfg.wsDegradeTTLms||864e5,t=Date.now()+e;this.isDegraded=!0,this.setDegradeUntil(t),this.setFailCount(0),this.logger.error("Entering degraded mode: polling-only",{until:t});try{this.disconnect()}finally{this.connect()}}}constructor(e,t,n={}){var s;this.socket=null,this.status=l.Disconnected,this.eventListeners=new Map,this.statusListeners=[],this.errorListeners=[],this.queue=[],this.processingQueue=!1,this.connecting=!1,this.reconnectCount=0,this.wsFailCount=0,this.isDegraded=!1,this.auth=e,this.api=t,this.cfg={...v,...n},this.logger=new p(this.cfg.logging||{}),this.logger.info("ConnectionManager initialized",{config:{type:this.cfg.type,autoReconnect:this.cfg.autoReconnect,reconnectAttempts:this.cfg.reconnectAttempts,reconnectDelay:this.cfg.reconnectDelay,loggingEnabled:null===(s=this.cfg.logging)||void 0===s?void 0:s.enabled}});{let e=sessionStorage.getItem(y);if(e)try{let t=JSON.parse(e);this.queue.push(...t),this.logger.debug("Loaded queued messages from session storage",{count:t.length})}catch(e){this.logger.warn("Failed to parse queued messages from session storage",e)}let t=this.getDegradeUntil();t&&Date.now()<t&&!this.cfg.forceWebSocket?(this.isDegraded=!0,this.logger.info("WebSocket degraded mode active from persisted state",{degradeUntil:t})):t&&Date.now()>=t&&this.clearDegradation(),this.wsFailCount=this.getFailCount()}}}C.instance=null;let b={connection:null,status:l.Disconnected,connect:()=>{},disconnect:()=>{},sendMessage:()=>null,on:()=>{},off:()=>{},onError:()=>{},offError:()=>{},updateLogging:()=>{},getLoggingConfig:()=>null},E=(0,d.createContext)(b),w=e=>{let{children:t,authConfig:n,api:s,connectionOptions:a,autoConnect:i=!0}=e,[r,o]=(0,d.useState)(null),[c,u]=(0,d.useState)(l.Disconnected);(0,d.useEffect)(()=>
1{if(!n||!s){r&&(r.disconnect(),o(null),u(l.Disconnected));return}let e=C.getInstance(n,s,a);return e.onStatusChange(u),o(e),i&&e.connect(),()=>{e.disconnect(),C.resetInstance()}},[n,a,i,s]);let h=(0,d.useCallback)(()=>{r&&r.connect()},[r]),f=(0,d.useCallback)(()=>{r&&r.disconnect()},[r]),m=(0,d.useCallback)(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:3;return r?r.queueMessage(e,t):null},[r]),p=(0,d.useCallback)((e,t)=>{r&&r.on(e,t)},[r]),v=(0,d.useCallback)((e,t)=>{r&&r.off(e,t)},[r]),y=(0,d.useCallback)(e=>{r&&r.onError(e)},[r]),b=(0,d.useCallback)(e=>{r&&r.offError(e)},[r]),w=(0,d.useCallback)(e=>{r&&r.updateLogging(e)},[r]),k=(0,d.useCallback)(()=>r?r.getLoggingConfig():null,[r]),S=(0,d.useMemo)(()=>({connection:r,status:c,connect:h,disconnect:f,sendMessage:m,on:p,off:v,onError:y,offError:b,updateLogging:w,getLoggingConfig:k}),[r,c,h,f,m,p,v,y,b,w,k]);return(0,g.jsx)(E.Provider,{value:S,children:t})},k=()=>(0,d.useContext)(E),S=(0,d.createContext)({api:null,isInitialized:!1,isAuthenticated:!1,initialize:()=>{},conversations:[],refreshConversations:async()=>Promise.resolve([]),setConversations:()=>{}}),D=e=>{let{children:t,config:n,connectionOptions:s}=e,[a,i]=(0,d.useState)(null),[r,o]=(0,d.useState)(!1),[l,c]=(0,d.useState)(!1),[u,h]=(0,d.useState)([]),m=(0,d.useCallback)(e=>{i(new f(e)),o(!0),c(!0)},[]),p=(0,d.useCallback)(async(e,t)=>{if(!a)return[];try{let n=await a.listConversations(e,t);return h(n),n}catch(e){console.error("Failed to fetch conversations:",e)}return[]},[a]);(0,d.useEffect)(()=>{n&&m(n)},[n]),(0,d.useEffect)(()=>{l&&p()},[l]);let v=(0,d.useMemo)(()=>({api:a,isInitialized:r,isAuthenticated:l,initialize:m,conversations:u,refreshConversations:p,setConversations:h}),[a,r,l,u,p]);return(0,g.jsx)(S.Provider,{value:v,children:(0,g.jsx)(w,{authConfig:n,api:a||void 0,connectionOptions:s,autoConnect:l,children:t})})},I=()=>(0,d.useContext)(S);function _(e){let{on:t,off:n}=k(),[s,a]=(0,d.useState)(null),i=(0,d.useCallback)(e=>{a(e)},[]);return(0,d.useEffect)(()=>(t(e,i),()=>{n(e,i)}),[e,t,n,i]),{event:s,clearEvent:(0,d.useCallback)(()=>{a(null)},[])}}function A(e){let{event:t,clearEvent:n}=_(c.MessageSent),{event:s,clearEvent:a}=_(c.MessageEdited),{event:i,clearEvent:r}=_(c.MessageDeleted),{event:o,clearEvent:l}=_(c.MessageRead),{event:u,clearEvent:g}=_(c.ConversationRead),h=(0,d.useCallback)(()=>{n(),a(),r(),l(),g()},[n,a,r,l,g]);return(0,d.useEffect)(()=>{t&&e&&e(c.MessageSent,t.data)},[t,e]),(0,d.useEffect)(()=>{s&&e&&e(c.MessageEdited,s.data)},[s,e]),(0,d.useEffect)(()=>{i&&e&&e(c.MessageDeleted,i.data)},[i,e]),(0,d.useEffect)(()=>{o&&e&&e(c.MessageRead,o.data)},[o,e]),(0,d.useEffect)(()=>{u&&e&&e(c.ConversationRead,u.data)},[u,e]),{messageSent:t,messageEdited:s,messageDeleted:i,messageRead:o,conversationRead:u,clearEvents:h}}let F=()=>{let{api:e,conversations:t,refreshConversations:n,setConversations:s}=I(),[a,i]=(0,d.useState)(!1),[r,o]=(0,d.useState)(null);A((0,d.useCallback)(()=>{console.log("Message event received"),n()},[]));let l=(0,d.useCallback)(async(t,s)=>{if(!e)return o(Error("API not initialized")),[];i(!0),o(null);try{return await n(t,s)}catch(e){return o(e instanceof Error?e:Error("Failed to get conversations")),[]}finally{i(!1)}},[n,e]),c=(0,d.useCallback)(async t=>{if(!e)return o(Error("API not initialized")),null;i(!0),o(null);try{let s=await e.deleteConversation(t);return await n(),s}catch(e){return o(e instanceof Error?e:Error("Failed to delete conversation")),null}finally{i(!1)}},[e,n]),u=(0,d.useCallback)(async t=>{if(!e)return o(Error("API not initialized")),null;i(!0),o(null);try{let s=await e.archiveConversation(t);return await n(),s}catch(e){return o(e instanceof Error?e:Error("Failed to archive conversation")),null}finally{i(!1)}},[e,n]);return{conversations:t,loading:a,error:r,getConversations:l,deleteConversation:c,archiveConversation:u,unarchiveConversation:(0,d.useCallback)(async t=>{if(!e)return o(Error("API not initialized")),null;i(!0),o(null);try{let s=await e.unarchiveConversation(t);return await n(),s}catch(e){return o(e instanceof Error?e:Error("Failed to unarchive conversation")),null}finally{i(!1)}}
1,[e,n]),getConversationDetails:(0,d.useCallback)(async t=>{if(!e)return o(Error("API not initialized")),null;i(!0),o(null);try{return await e.getConversationDetails(t)}catch(e){return o(e instanceof Error?e:Error("Failed to get conversation details")),null}finally{i(!1)}},[e]),searchConversation:(0,d.useCallback)(async(t,n)=>{if(!e)return o(Error("API not initialized")),null;i(!0),o(null);try{return await e.searchConversation(t,n)}catch(e){return o(e instanceof Error?e:Error("Failed to search conversation")),null}finally{i(!1)}},[e]),setConversations:s}},M=()=>{let{status:e,connect:t,disconnect:n,connection:s,sendMessage:a}=k(),i=(0,d.useCallback)(()=>{t()},[t]),r=(0,d.useCallback)(()=>{n()},[n]),o=(0,d.useCallback)(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:3;return a(e,t)},[a]),c=e===l.Connected,u=e===l.Connecting,g=e===l.Error;return{status:e,isConnected:c,isConnecting:u,hasError:g,connect:i,disconnect:r,sendMessage:o,connection:s}},L="message_queue",R=e=>{let[t,n]=(0,d.useState)([]),[s,a]=(0,d.useState)(!1);(0,d.useEffect)(()=>{try{let e=localStorage.getItem(L);if(e){let t=JSON.parse(e),s=Date.now(),a=t.filter(e=>s-e.timestamp<=6e4);n(a)}}catch(e){console.error("Failed to load message queue from localStorage:",e)}},[]),(0,d.useEffect)(()=>{try{localStorage.setItem(L,JSON.stringify(t))}catch(e){console.error("Failed to save message queue to localStorage:",e)}},[t]);let i=(0,d.useCallback)(e=>{let t="msg_".concat(Date.now(),"_").concat(Math.random().toString(36).substr(2,9)),s={id:t,message:e,attempts:0,maxAttempts:3,timestamp:Date.now()};return n(e=>[...e,s]),t},[]),r=(0,d.useCallback)(async()=>{if(!e||s||0===t.length)return;a(!0);let[i,...o]=t;if(Date.now()-i.timestamp>6e4){n(o),a(!1);return}try{await e.sendMessage(i.message),n(o)}catch(e){i.attempts<i.maxAttempts?n([...o,{...i,attempts:i.attempts+1}]):n(o)}finally{a(!1),o.length>0&&setTimeout(()=>r(),2e3)}},[e,s,t]);(0,d.useEffect)(()=>{t.length>0&&e&&!s&&r()},[t,e,s,r]);let o=(0,d.useCallback)(async t=>{if(!e)return i(t),null;try{return await e.sendMessage(t)}catch(e){return i(t),null}},[e,i]);return{enqueueMessage:i,sendMessageWithRetry:o,queueLength:t.length,isProcessing:s}},P=()=>{let{api:e}=I(),[t,n]=(0,d.useState)(!1),[s,a]=(0,d.useState)(null),[i,r]=(0,d.useState)(null),o=(0,d.useCallback)(async()=>{if(!e)return a(Error("API not initialized")),null;n(!0),a(null);try{let t=await e.getClientProfile();return r(t),t}catch(e){return a(e instanceof Error?e:Error("Failed to fetch client profile")),null}finally{n(!1)}},[e]);return(0,d.useEffect)(()=>{e&&o()},[e,o]),{loading:t,error:s,profile:i,fetchProfile:o}},x=e=>{let{api:t}=I(),{profile:n}=P(),[s,a]=(0,d.useState)(!1),[i,r]=(0,d.useState)(null),[o,l]=(0,d.useState)(null),[u,g]=(0,d.useState)(null),{isConnected:h,connection:f}=M(),{sendMessageWithRetry:m,queueLength:p}=R(t);(0,d.useEffect)(()=>{(async()=>{if(!t){r(Error("API not initialized"));return}try{let e=await t.getClientPreferences();g(e.preferences)}catch(e){r(e instanceof Error?e:Error("Failed to fetch preferences"))}})()},[t]);let v=(0,d.useCallback)(e=>{let t=new Map;return e.forEach(e=>{t.set(e.id,e)}),Array.from(t.values())},[]),y=(0,d.useCallback)(async function(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:e,s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:20;if(!t)return r(Error("API not initialized")),null;if(!n)return r(Error("Conversation ID is required")),null;a(!0),r(null);try{let e=await t.getMessages(n,s,i);return 1===s?l(e):l(t=>t?{...t,messages:v([...t.messages,...null==e?void 0:e.messages]),pagination:e.pagination}:null),e}catch(e){return r(e instanceof Error?e:Error("Failed to get messages")),null}finally{a(!1)}},[e]),C=(0,d.useCallback)(async function(n){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e;if(!t)return r(Error("API not initialized")),null;a(!0),r(null);try{return await t.getRemainingLimit({receiver_client_id:n,conversation_uid:s})}catch(e){return r(e instanceof Error?e:Error("Failed to get remaining limit")),null}finally{a(!1)}},[t,e]),b=(0,d.useCallback)(async e=>{if(!t)return r(Error("API not initialized")),null;a(!0),r(null);try{return await t.markMessageAsRead(e)}catch(e){return r(e instanceof Error?e:Error("Failed to mark message as read")),null}finally{a(!1)}},[]),E=(0,d.useCallback)(async n=>{if(!t)return r(Error("API not initialized")),null;let s={...n,conversation_uid:n.conversation_uid||e};a(!0),r(null);try{return await m(s)}catch(e){return r(e instanceof Error?e:Error("Failed to send message")),null}finally{a(!1)}},[e,m]),w=(0,d.useCallback)(async function(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:e;if(!t)return r(Error("API not initialized")),null;if(!n)return r(Error("Conversation ID is required")),null;a(!0),r(null);try{let e=await t.markConversationAsRead(n);return l(e=>{var t;return e?{...e,messages:null==e?void 0:null===(t=e.messages)||void 0===t?void 0:t.map(e=>({...e,is_read:!0}))}:null}),e}catch(e){return r(e instanceof Error?e:Error("Failed to mark conversation as read")),null}finally{a(!1)}},[t,e]),k=(0,d.useCallback)(async(e,n)=>{if(!t)return r(Error("API not initialized")),null;a(!0),r(null);try{let s=await t.updateMessage(e,n);return l(t=>t?{...t,messages:t.messages.map(t=>
1t.id===e?{...t,...s.message}:t)}:null),s}catch(e){return r(e instanceof Error?e:Error("Failed to update message")),null}finally{a(!1)}},[t,e]),S=(0,d.useCallback)(async e=>{if(!t)return r(Error("API not initialized")),null;a(!0),r(null);try{let n=await t.deleteMessage(e);return l(t=>t?{...t,messages:t.messages.filter(t=>t.id!==e)}:null),n}catch(e){return r(e instanceof Error?e:Error("Failed to delete message")),null}finally{a(!1)}},[t,e]),D=(0,d.useCallback)(async e=>{if(!t)return r(Error("API not initialized")),!1;r(null);try{let n=await t.updateClientPreferences({preferences:{enable_read:e}});return g(n.preferences),!0}catch(e){return r(e instanceof Error?e:Error("Failed to update preferences")),!1}},[t]);(0,d.useEffect)(()=>{e&&y()},[h,e]);let _=(0,d.useCallback)((t,n)=>{e&&(!n.conversation_uid||n.conversation_uid===e)&&l(e=>{if(!e)return e;switch(t){case c.MessageSent:if(e.messages.some(e=>e.id===n.id))return e;return console.log("arrived event",t),{...e,messages:[...e.messages,n].sort((e,t)=>new Date(t.sent_at).getTime()-new Date(e.sent_at).getTime())};case c.MessageEdited:return{...e,messages:e.messages.map(e=>e.id===n.msg_id?{...e,message:n.new_content,attachments:n.new_attachments||e.attachments}:e)};case c.MessageDeleted:return{...e,messages:e.messages.filter(e=>e.id!==n.msg_id)};case c.MessageRead:return{...e,messages:e.messages.map(e=>e.id===n.message_id?{...e,is_read:!0}:e)};case c.ConversationRead:return{...e,messages:e.messages.map(e=>n.message_ids.includes(e.id)?{...e,is_read:!0}:e)};default:return e}})},[e,n]),F=(0,d.useCallback)((e,t)=>{if(e===c.MessageSent){let e={type:c.MessageReceived,data:t};f.emit(e.type,e.data)}},[f]);return A((0,d.useCallback)((t,n)=>{w(e),_(t,n)},[_,e,F,u])),{messages:(null==o?void 0:o.messages)||[],pagination:null==o?void 0:o.pagination,loading:s,error:i,queueLength:p,getMessages:y,markMessageAsRead:b,sendMessage:E,markConversationAsRead:w,updateMessage:k,deleteMessage:S,setMessages:l,updatePreferences:D,preferences:u,getRemainingLimit:C}},q=()=>{let{api:e}=I(),[t,n]=(0,d.useState)(!1),[s,a]=(0,d.useState)(null),[i,r]=(0,d.useState)(0);return{loading:t,error:s,uploadProgress:i,uploadFile:(0,d.useCallback)(async t=>{if(!e)return a(Error("API not initialized")),null;n(!0),a(null),r(0);try{let n=(()=>{let e=0,t=setInterval(()=>{(e+=10)>90?clearInterval(t):r(e)},300);return()=>clearInterval(t)})(),s=await e.uploadFile(t);return n(),r(100),s}catch(e){return a(e instanceof Error?e:Error("Failed to upload file")),null}finally{n(!1)}},[e])}},O=()=>{let{api:e}=I(),[t,n]=(0,d.useState)(!1),[s,a]=(0,d.useState)(null),[i,r]=(0,d.useState)(null),[o,l]=(0,d.useState)(null);return{conversationDetails:i,receiverId:o,loading:t,error:s,getConversationWithReceiver:(0,d.useCallback)(async t=>{if(!e)return a(Error("API not initialized")),{details:null,receiverId:t};n(!0),a(null);try{let n=await e.getConversationWithReceiver(t);return r(n),l(t),{details:n,receiverId:t}}catch(e){return a(e instanceof Error?e:Error("Failed to get conversation details")),{details:null,receiverId:t}}finally{n(!1)}},[e])}};function z(){let[e,t]=(0,d.useState)(""),{conversations:n,loading:s,getConversations:a,deleteConversation:i,unarchiveConversation:r,archiveConversation:o,setConversations:l}=F(),c=(0,d.useMemo)(()=>n.find(t=>t.id===e),[n,e]);return(0,d.useEffect)(()=>{a()},[a]),{conversations:n,conversationsLoading:s,selectedConversationId:e,selectedConversation:c,deleteConversation:i,archiveConversation:o,unarchiveConversation:r,handleSelectConversation:(0,d.useCallback)(e=>{if(null===e){t("");return}t(e.id),l(t=>t.map(t=>t.id===e.id?{...e,unreadCount:0}:t))},[l]),getConversations:a}}let W=()=>{let{api:e}=I(),[t,n]=(0,d.useState)(!1),[s,a]=(0,d.useState)(null),[i,r]=(0,d.useState)(null),o=(0,d.useCallback)(async t=>{if(!e)return a(Error("API not initialized")),null;n(!0),a(null);try{return await e.banClient({client_id:t})}catch(e){return a(e instanceof Error?e:Error("Failed to ban client")),null}finally{n(!1)}},[e]),l=(0,d.useCallback)(async t=>{if(!e)return a(Error("API not initialized")),null;n(!0),a(null);try{return await e.unbanClient({client_id:t})}catch(e){return a(e instanceof Error?e:Error("Failed to unban client")),null}finally{n(!1)}},[e]);return{loading:t,error:s,banStatus:i,banClient:o,unbanClient:l,adminBanClient:(0,d.useCallback)(async(t,s,i)=>{if(!e)return a(Error("API not initialized")),null;n(!0),a(null);try{return await e.adminBanClient({client_id:t,reason:s,duration_days:i})}catch(e){return a(e instanceof Error?e:Error("Failed to admin ban client")),null}finally{n(!1)}},[e]),adminUnbanClient:(0,d.useCallback)(async t=>{if(!e)return a(Error("API not initialized")),null;n(!0),a(null);try{return await e.adminUnbanClient({client_id:t})}catch(e){return a(e instanceof Error?e:Error("Failed to admin unban client")),null}finally{n(!1)}},[e]),checkBanStatus:(0,d.useCallback)(async t=>{if(!e)return a(Error("API not initialized")),null;n(!0),a(null);try{let n=await e.checkBanStatus(t);return r(n),n}catch(e){return a(e instanceof Error?e:Error("Failed to check ban status")),null}finally{n(!1)}},[e])}};function U(e){let[t,n]=(0,d.useState)(1),[s,a]=(0,d.useState)(!0),{profile:i}=P(),{messages:r,loading:o,sendMessage:l,getMessages:c,markConversationAsRead:u,deleteMessage:g,updateMessage:f,setMessages:m,preferences:p,updatePreferences:v,getRemainingLimit:y}=x(e),{messageSent:C,messageEdited:b,messageDeleted:E,clearEvents:w}=T(),{uploadFile:k,loading:S,uploadProgress:D}=q();(0,d.useEffect)(()=>{n(1),a(!0)},[e]),(0,d.useEffect)(()=>
1{e&&u()},[e,u]),(0,d.useEffect)(()=>{(C||b||E)&&w()},[C,b,E,w]);let I=(0,d.useCallback)(async()=>{if(!o&&s)try{let s=t+1,i=await c(e,s);i&&0!==i.messages.length?n(s):a(!1)}catch(e){console.error("Failed to load more messages:",e),a(!1)}},[o,s,c,t,e]);return{messages:r,messagesLoading:o,fileLoading:S,uploadProgress:D,uploadFile:k,handleSendMessage:(0,d.useCallback)(async(t,n,s)=>{if(!t.trim()||!e||!i)return;let a="temp-".concat(Date.now()),r={attachments:[],conversation_uid:a,sent_at:new Date().toISOString().replace("Z","000"),message:t.trim(),messageType:0,sender:i,receiver:n,is_read:!1,status:"sending"};m(e=>{let t=(null==e?void 0:e.messages)||[];return{...e,messages:[r,...t]}});try{let i=await l({receiver_client_id:n.id,content:t,conversation_uid:e,isAppointment:s});if(!i)return m(e=>({...e,messages:((null==e?void 0:e.messages)||[]).map(e=>e.conversation_uid===a?{...e,status:"failed"}:e)})),i;return m(e=>({...e,messages:((null==e?void 0:e.messages)||[]).map(e=>e.conversation_uid===a?{...e,status:"sent",id:i.message.id,is_read:i.message.is_read}:e)})),i}catch(e){var o;return m(e=>({...e,messages:((null==e?void 0:e.messages)||[]).filter(e=>e.conversation_uid!==a)})),h.Z.isAxiosError(e)&&(null===(o=e.response)||void 0===o?void 0:o.data)?e.response.data:{message:"Unknown error"}}},[l,e,null==i?void 0:i.id,m]),handleSendFileMessage:(0,d.useCallback)(async(t,n,s,a,r,o)=>{if(!e)return;let c="temp-file-".concat(Date.now()),u={attachments:[{filename:a,url:r,id:n}],conversation_uid:c,sent_at:new Date().toISOString().replace("Z","000"),message:t,messageType:0,sender:i,receiver:s,is_read:!1,status:"sending"};m(e=>{let t=(null==e?void 0:e.messages)||[];return{...e,messages:[u,...t]}});try{let a=await l({receiver_client_id:s.id,content:t,attachments:[n],conversation_uid:e,isAppointment:o});if(a)return m(e=>({...e,messages:((null==e?void 0:e.messages)||[]).map(e=>e.conversation_uid===c?{...e,status:"sent",id:a.message.id,is_read:a.message.is_read}:e)})),!0;return m(e=>({...e,messages:((null==e?void 0:e.messages)||[]).map(e=>e.conversation_uid===c?{...e,status:"failed"}:e)})),!1}catch(e){return m(e=>({...e,messages:((null==e?void 0:e.messages)||[]).filter(e=>e.conversation_uid!==c)})),console.error("Failed to send file message:",e),!1}},[l,e,null==i?void 0:i.id,m]),deleteMessage:g,updateMessage:f,getMe
1ssages:c,loadMoreMessages:I,hasMore:s,setMessages:m,preferences:p,updatePreferences:v,getRemainingLimit:y}}let T=A,B=e=>{let{children:t,token:n,client_id:s,baseUrl:a="https://api.example.com",socketBaseUrl:i="wss://api.example.com",connectionOptions:r}=e,o=d.useMemo(()=>{if(n)return{token:n,baseUrl:a,client_id:s,socketBaseUrl:i}},[n,a,s]);return(0,g.jsx)(D,{config:o,connectionOptions:r,children:t})}},8363:function(e,t,n){var s=n(59625),a=n(89134);let i=(0,s.Ue)()((0,a.tJ)(e=>({profile:null,isLoggedIn:!1,userId:null,isInitialized:!1,setUserId:t=>e({userId:t}),setInitialized:t=>e({isInitialized:t}),setIsLoggedIn:t=>e({isLoggedIn:t}),setProfile:t=>e({profile:t}),clearProfile:()=>e({profile:null}),token:null,setToken:t=>{(null==t?void 0:t.accessToken)&&sessionStorage.setItem("token",null==t?void 0:t.accessToken),e({token:t})},isB2B:!1,setIsB2B:t=>e({isB2B:t})}),{name:"a-storage",storage:(0,a.FL)(()=>sessionStorage),onRehydrateStorage:()=>e=>(null==e||e.setInitialized(!0),e)}));t.Z=i}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.