"use node"; import { action } from "../_generated/server"; import { v } from "convex/values"; export const testarConexao = action({ args: { servidor: v.string(), porta: v.number(), usuario: v.string(), senha: v.string(), usarSSL: v.boolean(), usarTLS: v.boolean(), }, returns: v.union( v.object({ sucesso: v.literal(true) }), v.object({ sucesso: v.literal(false), erro: v.string() }) ), handler: async (ctx, args) => { "use node"; const nodemailer = await import("nodemailer"); try { // Validações básicas if (!args.servidor || args.servidor.trim() === "") { return { sucesso: false as const, erro: "Servidor SMTP não pode estar vazio", }; } if (args.porta < 1 || args.porta > 65535) { return { sucesso: false as const, erro: "Porta inválida" }; } const transporter = nodemailer.createTransport({ host: args.servidor, port: args.porta, secure: args.usarSSL, auth: { user: args.usuario, pass: args.senha, }, tls: { rejectUnauthorized: !args.usarTLS ? false : false, }, }); // Verificar conexão await transporter.verify(); return { sucesso: true as const }; } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); return { sucesso: false as const, erro: errorMessage }; } }, });