// SGL · Cliente de e-mail (frontend) — FASE 0 · SPIKE // Chama a Edge Function `email-sync`, que conecta na caixa IMAP no servidor. // As credenciais IMAP NUNCA trafegam pelo navegador — ficam só nos Secrets do Supabase. async function callEmailSync(action, payload = {}) { if (!window.supa) { return { ok: false, error: 'Supabase não inicializado.' }; } const { data: { session } } = await window.supa.auth.getSession(); if (!session) { return { ok: false, error: 'Você precisa estar logado para usar este recurso.' }; } try { const { data, error } = await window.supa.functions.invoke('email-sync', { body: { action, ...payload }, }); if (error) { let serverMsg = null; try { if (error.context && typeof error.context.json === 'function') { const body = await error.context.json(); serverMsg = body && (body.error || body.detalhe); } } catch { /* corpo não-JSON */ } if (error.name === 'FunctionsFetchError') { return { ok: false, error: 'Não foi possível contatar o servidor. A função "email-sync" foi publicada?' }; } return { ok: false, error: serverMsg || error.message || 'Falha ao chamar email-sync.' }; } return data || { ok: false, error: 'Resposta vazia do servidor.' }; } catch (e) { return { ok: false, error: (e && e.message) || 'Erro inesperado ao contatar a caixa.' }; } } /** Testa a conexão IMAP e lista os últimos e-mails (assunto/remetente/data). */ async function testImap() { return callEmailSync('test'); } /** Sincroniza: captura e-mails novos da caixa, classifica por IA e grava. */ async function syncEmails() { return callEmailSync('sync'); } window.callEmailSync = callEmailSync; window.testImap = testImap; window.syncEmails = syncEmails;