From 708f2bf21138478be77b9097c44f57da740f58e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Gustavo?= <166467972+JoaoGustavo-dev@users.noreply.github.com> Date: Tue, 14 Oct 2025 21:41:39 -0300 Subject: [PATCH] fix-magic-link --- susconecta/lib/api.ts | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/susconecta/lib/api.ts b/susconecta/lib/api.ts index ead307d..f9bc9d9 100644 --- a/susconecta/lib/api.ts +++ b/susconecta/lib/api.ts @@ -1,6 +1,7 @@ // lib/api.ts import { ENV_CONFIG } from '@/lib/env-config'; +import { sendMagicLink } from './auth'; // Use ENV_CONFIG for SUPABASE URL and anon key in frontend export type ApiOk = { @@ -1191,6 +1192,8 @@ export type CreateUserInput = { full_name: string; phone?: string | null; role: UserRoleEnum; + // URL opcional para redirecionamento após o clique no magic link + redirect_url?: string | null; }; export type CreatedUser = { @@ -1228,7 +1231,38 @@ export async function criarUsuario(input: CreateUserInput): Promise(res); + const parsed = await parse(res); + + // Enviar magic link automaticamente para o email do usuário criado. + // Se redirect_url estiver presente, encaminhar na chamada do magic link + (async () => { + try { + // A API de magic link aceita geralmente { email, redirect_to } ou { email } + // Aqui usamos a função sendMagicLink existente que aceita apenas email. + // Para suportar redirect_url, fazemos um fetch direto caso redirect_url seja fornecido. + if (input.redirect_url) { + const otpUrl = (ENV_CONFIG.AUTH_ENDPOINTS && (ENV_CONFIG.AUTH_ENDPOINTS as any).OTP) || `${ENV_CONFIG.SUPABASE_URL}/auth/v1/otp`; + console.log('[API] Enviando magic link com redirect_url para:', input.email, input.redirect_url); + await fetch(otpUrl, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Accept': 'application/json', + 'apikey': ENV_CONFIG.SUPABASE_ANON_KEY, + }, + body: JSON.stringify({ email: input.email, redirect_to: input.redirect_url }), + }); + } else { + console.log('[API] Enviando magic link (sem redirect) para:', input.email); + await sendMagicLink(input.email); + } + console.log('[API] Magic link disparado com sucesso (assíncrono).'); + } catch (e) { + console.error('[API] Falha ao enviar magic link automaticamente:', e); + } + })(); + + return parsed; } // ===== ALTERNATIVA: Criar usuário diretamente via Supabase Auth =====