diff --git a/packages/ui/src/components/auth/LoginView.tsx b/packages/ui/src/components/auth/LoginView.tsx index 6a2662c..e4caeff 100644 --- a/packages/ui/src/components/auth/LoginView.tsx +++ b/packages/ui/src/components/auth/LoginView.tsx @@ -22,52 +22,35 @@ const LoginView: Component = (props) => { const [isLoadingUsers, setIsLoadingUsers] = createSignal(true) const getApi = () => { - const api = (window as any).electronAPI || (window as any).electron - console.log("[LoginView] getApi:", api ? "found" : "null") + const api = (window as any).electronAPI + console.log("[LoginView] getApi:", api ? Object.keys(api) : "null") return api } - const safeInvoke = async (method: string, ...args: any[]) => { - console.log(`[LoginView] safeInvoke(${method})...`) - const api = getApi() - if (!api) { - console.error("[LoginView] No API bridge!") - toast.error("System bridge unavailable") - return null - } - const invoke = api.invoke || api.ipcRenderer?.invoke || (window as any).ipcRenderer?.invoke - if (!invoke) { - console.error("[LoginView] No invoke method!") - toast.error("IPC method missing") - return null - } - const binder = api.invoke ? api : (api.ipcRenderer || (window as any).ipcRenderer) - try { - const result = await invoke.call(binder, method, ...args) - console.log(`[LoginView] safeInvoke(${method}) =>`, result) - return result - } catch (e) { - console.error(`[LoginView] safeInvoke(${method}) error:`, e) - toast.error(`IPC error: ${String(e)}`) - return null - } - } - onMount(async () => { + console.log("[LoginView] onMount, isElectronHost:", isElectronHost()) try { if (isElectronHost()) { - const userList = await safeInvoke("users:list") - if (userList && Array.isArray(userList)) { - setUsers(userList) - if (userList.length > 0) { - setUsername(userList[0].name) + const api = getApi() + if (api && api.listUsers) { + const userList = await api.listUsers() + console.log("[LoginView] listUsers result:", userList) + if (userList && Array.isArray(userList)) { + setUsers(userList) + if (userList.length > 0) { + setUsername(userList[0].name) + } } + } else { + console.error("[LoginView] listUsers method not found on API") + toast.error("API bridge incomplete") } } else { setUsername("web-explorer") } } catch (error) { console.error("Failed to fetch users:", error) + toast.error("Failed to load identities") } finally { setIsLoadingUsers(false) } @@ -86,8 +69,14 @@ const LoginView: Component = (props) => { try { console.log("[LoginView] isElectronHost:", isElectronHost()) if (isElectronHost()) { + const api = getApi() + if (!api || !api.listUsers || !api.loginUser) { + toast.error("API bridge not ready") + return + } + console.log("[LoginView] Fetching users...") - const userList = await safeInvoke("users:list") + const userList = await api.listUsers() if (!userList || !Array.isArray(userList)) { toast.error("Bridge failure: try restarting") return @@ -102,7 +91,7 @@ const LoginView: Component = (props) => { } console.log("[LoginView] Attempting login for:", user.id) - const result = await safeInvoke("users:login", { + const result = await api.loginUser({ id: user.id, password: password(), }) diff --git a/packages/ui/src/lib/user-context.ts b/packages/ui/src/lib/user-context.ts index e6b243f..f25257f 100644 --- a/packages/ui/src/lib/user-context.ts +++ b/packages/ui/src/lib/user-context.ts @@ -104,14 +104,11 @@ export async function initializeUserContext(): Promise { console.log(`[UserContext] Initializing... host=${isElectronHost()}`) try { if (isElectronHost()) { - const api = (window as any).electronAPI || (window as any).electron - if (api) { - console.log(`[UserContext] Requesting active user from host IPC...`) - const invoke = api.invoke || api.ipcRenderer?.invoke || (window as any).ipcRenderer?.invoke - if (!invoke) throw new Error("No IPC invoke method found") - - const binder = api.invoke ? api : (api.ipcRenderer || (window as any).ipcRenderer) - const activeUser = await invoke.call(binder, "users:active") + const api = (window as any).electronAPI + if (api && api.getActiveUser) { + console.log(`[UserContext] Requesting active user via api.getActiveUser()...`) + const activeUser = await api.getActiveUser() + console.log(`[UserContext] getActiveUser result:`, activeUser) if (activeUser?.id) { console.log(`[UserContext] Host has active session: ${activeUser.id}`) @@ -121,7 +118,7 @@ export async function initializeUserContext(): Promise { setActiveUserId(null) } } else { - console.warn(`[UserContext] Electron detected but no IPC bridge found. Falling back to web mode.`) + console.warn(`[UserContext] electronAPI.getActiveUser not found. Falling back to web mode.`) await handleWebInit() } } else {