import { create } from "zustand"; import { WebRTCClient } from "~/lib/websocket/voice/client"; import { ConnectionState } from "~/lib/websocket/voice/types"; import { useVoiceStateStore } from "./voice-state-store"; const VOICE_GATEWAY_URL = "ws://localhost:12345/voice/ws"; interface WebRTCState { client: WebRTCClient | null; status: ConnectionState; remoteStream: MediaStream | null; error: string | null; connect: (token: string) => Promise; disconnect: () => void; createOffer: (localStream: MediaStream) => Promise; } export const useWebRTCStore = create()((set, get) => { const client = new WebRTCClient( VOICE_GATEWAY_URL, (state) => set({ status: state }), (error) => { set({ status: ConnectionState.ERROR, error: error.message, }); useVoiceStateStore.getState().setError(error.message); }, (stream) => set({ remoteStream: stream }), ); return { client, status: ConnectionState.DISCONNECTED, remoteStream: null, error: null, connect: async (token) => { await client.connect(token); }, disconnect: () => { client.disconnect(); set({ status: ConnectionState.DISCONNECTED, remoteStream: null, }); }, createOffer: async (localStream) => { await client.createOffer(localStream); }, }; });