/** * Hook personalizado que garante autenticação no Convex * * Este hook substitui useConvexClient e garante que o token seja sempre passado * * NOTA: Este hook deve ser usado dentro de componentes Svelte com $effect */ import { useConvexClient } from "convex-svelte"; import { authStore } from "$lib/stores/auth.svelte"; interface ConvexClientWithAuth { setAuth?: (token: string) => void; clearAuth?: () => void; } /** * Hook que retorna cliente Convex com autenticação configurada automaticamente * * IMPORTANTE: Use $effect() no componente para chamar esta função: * ```svelte * $effect(() => { * useConvexWithAuth(); * }); * ``` */ export function useConvexWithAuth() { const client = useConvexClient(); const token = authStore.token; const clientWithAuth = client as ConvexClientWithAuth; // Configurar token se disponível if (clientWithAuth && token) { try { // Tentar setAuth se disponível if (typeof clientWithAuth.setAuth === "function") { clientWithAuth.setAuth(token); if (import.meta.env.DEV) { console.log("✅ [useConvexWithAuth] Token configurado via setAuth:", token.substring(0, 20) + "..."); } } else { // Se setAuth não estiver disponível, o token deve ser passado via createSvelteAuthClient if (import.meta.env.DEV) { console.log("ℹ️ [useConvexWithAuth] Token disponível, autenticação gerenciada por createSvelteAuthClient"); } } } catch (e) { console.warn("⚠️ [useConvexWithAuth] Erro ao configurar token:", e); } } else if (!token && import.meta.env.DEV) { console.warn("⚠️ [useConvexWithAuth] Token não disponível"); } return client; }