import { websocketService, type WebSocketMessage } from "./websocket"; import { messageHandler } from "./message-handler"; import { chatController } from "../controllers/chat-controller"; import { authStore } from "./auth"; export class AgentService { private isInitialized = false; private unsubscribeHandlers: Array<() => void> = []; connect(): void { if (this.isInitialized) return; this.unsubscribeHandlers.push( websocketService.onConnection((connected) => { chatController.handleConnectionChange(connected); }), websocketService.onMessage(this.handleMessage.bind(this)), ); websocketService.connect(); this.isInitialized = true; } disconnect(): void { websocketService.disconnect(); this.unsubscribeHandlers.forEach((unsubscribe) => unsubscribe()); this.unsubscribeHandlers = []; this.isInitialized = false; } sendMessage(content: string): void { chatController.sendMessage(content); } stopConversation(): void { chatController.stopConversation(); } clearConversation(): void { chatController.clearConversation(); } sendRawMessage(message: unknown): void { if (websocketService.isConnected()) { websocketService.send(message as WebSocketMessage); } } reauthenticate(): void { if (websocketService.isConnected()) { const token = authStore.getToken(); if (token) { websocketService.send({ type: "auth", payload: { token }, timestamp: Date.now(), } as WebSocketMessage); } } else { this.connect(); } } private handleMessage(message: WebSocketMessage): void { messageHandler.handleMessage(message); } } export const agentService = new AgentService();