// utils/mailTmApi.ts import axios from 'axios'; const MAIL_TM_BASE = 'https://api.mail.tm'; export async function createTempEmail() { const timestamp = Date.now(); // Получаем доступный домен const domainRes = await axios.get(`${MAIL_TM_BASE}/domains`); const domain = domainRes.data['hydra:member'][0].domain; const email = `testuser${timestamp}@${domain}`; const password = 'QwEr!1234567'; // Регистрируем await axios.post(`${MAIL_TM_BASE}/accounts`, { address: email, password, }); // Авторизуемся const tokenRes = await axios.post(`${MAIL_TM_BASE}/token`, { address: email, password, }); const token = tokenRes.data.token; return { email, password, token }; } export async function waitForConfirmationCode(email: string, token: string, type: 'register' | 'recover', timeout = 60000) { console.log('📧 Ожидаем код для:', email); const start = Date.now(); while (Date.now() - start < timeout) { const res = await axios.get(`${MAIL_TM_BASE}/messages`, { headers: { Authorization: `Bearer ${token}` }, }); const messages = res.data['hydra:member']; if (messages.length === 0) { console.log('⏳ Письма пока не пришли...'); } else { console.log(`📬 Получено ${messages.length} писем:`); for (const m of messages) { console.log(`🧾 Письмо: id=${m.id}, тема="${m.subject}"`); } } for (const message of messages) { console.log('🔖 Тема письма:', message.subject); // 🔴 ФИЛЬТРАЦИЯ ЗДЕСЬ if ( type === 'register' && !message.subject.toLowerCase().includes('подтверж') ) { continue; } if ( type === 'recover' && !message.subject.toLowerCase().includes('сброс') ) { continue; } // ⬇️ ТОЛЬКО НУЖНОЕ ПИСЬМО ДОХОДИТ СЮДА const msg = await axios.get(`${MAIL_TM_BASE}/messages/${message.id}`, { headers: { Authorization: `Bearer ${token}` }, }); const body = msg.data.text || msg.data.html; const match = body.match(/\b\d{6}\b/); if (match) { console.log('✅ Код найден:', match[0]); return match[0]; } } await new Promise(res => setTimeout(res, 2000)); } throw new Error('Код подтверждения не получен'); }