Almost working

This commit is contained in:
James Ketr 2025-09-03 14:04:25 -07:00
parent d940c2cbef
commit 39666eddbe
3 changed files with 29 additions and 64 deletions

View File

@ -11,6 +11,7 @@ import { Box, Button, Tooltip } from "@mui/material";
import { BrowserRouter as Router, Route, Routes, useParams } from "react-router-dom"; import { BrowserRouter as Router, Route, Routes, useParams } from "react-router-dom";
import useWebSocket, { ReadyState } from "react-use-websocket"; import useWebSocket, { ReadyState } from "react-use-websocket";
import ConnectionStatus from "./ConnectionStatus"; import ConnectionStatus from "./ConnectionStatus";
import { sessionsApi, LobbyCreateRequest } from "./api-client";
console.log(`AI Voice Chat Build: ${process.env.REACT_APP_AI_VOICECHAT_BUILD}`); console.log(`AI Voice Chat Build: ${process.env.REACT_APP_AI_VOICECHAT_BUILD}`);
@ -125,41 +126,22 @@ const LobbyView: React.FC<LobbyProps> = (props: LobbyProps) => {
const getLobby = async (lobbyName: string, session: Session) => { const getLobby = async (lobbyName: string, session: Session) => {
try { try {
const res = await fetch(`${base}/api/lobby/${session.id}`, { const lobbyRequest: LobbyCreateRequest = {
method: "POST",
cache: "no-cache",
credentials: "same-origin",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
type: "lobby_create", type: "lobby_create",
data: { data: {
name: lobbyName, name: lobbyName,
private: false, private: false,
}, },
}), };
});
if (res.status >= 400) { const response = await sessionsApi.createLobby(session.id, lobbyRequest);
const error = `Unable to connect to AI Voice Chat server! Try refreshing your browser in a few seconds.`;
console.error(error);
setError(error);
return;
}
const data = await res.json(); if (response.type !== "lobby_created") {
if (data.error) { console.error(`Lobby - Unexpected response type: ${response.type}`);
console.error(`Lobby - Server error: ${data.error}`);
setError(data.error);
return;
}
if (data.type !== "lobby_created") {
console.error(`Lobby - Unexpected response type: ${data.type}`);
setError(`Unexpected response from server`); setError(`Unexpected response from server`);
return; return;
} }
const lobby: Lobby = data.data; const lobby: Lobby = response.data;
console.log(`Lobby - Joined lobby`, lobby); console.log(`Lobby - Joined lobby`, lobby);
setLobby(lobby); setLobby(lobby);
} catch (err) { } catch (err) {
@ -300,33 +282,16 @@ const App = () => {
const getSession = useCallback(async () => { const getSession = useCallback(async () => {
try { try {
const res = await fetch(`${base}/api/session`, { const session = await sessionsApi.getCurrent();
method: "GET", setSession(session);
cache: "no-cache",
credentials: "same-origin",
headers: {
"Content-Type": "application/json",
},
});
if (res.status >= 400) {
throw new Error(`HTTP ${res.status}: Unable to connect to AI Voice Chat server`);
}
const data = await res.json();
if (data.error) {
throw new Error(`Server error: ${data.error}`);
}
setSession(data);
setSessionRetryAttempt(0); setSessionRetryAttempt(0);
} catch (err) { } catch (err) {
const errorMessage = err instanceof Error ? err.message : 'Unknown error occurred'; const errorMessage = err instanceof Error ? err.message : "Unknown error occurred";
console.error('Failed to get session:', errorMessage); console.error("Failed to get session:", errorMessage);
setError(errorMessage); setError(errorMessage);
// Schedule retry after 5 seconds // Schedule retry after 5 seconds
setSessionRetryAttempt(prev => prev + 1); setSessionRetryAttempt((prev) => prev + 1);
setTimeout(() => { setTimeout(() => {
getSession(); // Retry getSession(); // Retry
}, 5000); }, 5000);

View File

@ -1,13 +1,9 @@
type Lobby = { import { LobbyModel, SessionResponse } from "./api-client";
id: string;
name: string;
private: boolean;
};
type Session = { // Re-export types from api-client for backwards compatibility
id: string; export type Lobby = LobbyModel;
// Extended Session type that allows name to be null initially (before user sets it)
export type Session = Omit<SessionResponse, "name"> & {
name: string | null; name: string | null;
lobbies: Lobby[];
}; };
export type { Session, Lobby };

View File

@ -69,7 +69,11 @@ export class ApiClient {
private defaultHeaders: Record<string, string>; private defaultHeaders: Record<string, string>;
constructor(baseURL?: string) { constructor(baseURL?: string) {
this.baseURL = baseURL || process.env.REACT_APP_API_URL || "http://localhost:8001"; // Use the current window location instead of localhost, just like WebSocket connections
const defaultBaseURL =
typeof window !== "undefined" ? `${window.location.protocol}//${window.location.host}` : "http://localhost:8001";
this.baseURL = baseURL || process.env.REACT_APP_API_URL || defaultBaseURL;
this.defaultHeaders = {}; this.defaultHeaders = {};
} }