dylanebert
refactor
bc7e9cd
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();