import fetch from 'node-fetch';
export default async function handler(req, res) {
const chromecastUrls = 'https://githubusercontent.com';
try {
const randomSource = Math.floor(Math.random() * 2);
let finalImageUrl = '';
if (randomSource === 0) {
const response = await fetch(chromecastUrls);
const data = await response.json();
const randomImage = data[Math.floor(Math.random() * data.length)];
finalImageUrl = randomImage.url;
} else {
const randomEarthId = Math.floor(Math.random() * 5000) + 1000;
finalImageUrl = `https://withgoogle.com{randomEarthId}.jpg`;
}
// Скачиваем картинку через стрим
const imageResponse = await fetch(finalImageUrl);
if (!imageResponse.ok) throw new Error('Google fetch failed');
// Превращаем стрим в буфер, который Node.js на Vercel понимает идеально
const arrayBuffer = await imageResponse.arrayBuffer();
const buffer = Buffer.from(arrayBuffer);
// Настраиваем заголовки, чтобы файл скачивался как чистый JPEG
res.setHeader('Content-Type', 'image/jpeg');
res.setHeader('Cache-Control', 'no-store, max-age=0, must-revalidate');
// Отправляем готовую картинку напрямую в MacroDroid
return res.status(200).send(buffer);
} catch (error) {
// Если всё упало, отдаем одну железную рабочую картинку из репозитория crDroid
try {
const fallbackResponse = await fetch('https://githubusercontent.com');
const arrayBuffer = await fallbackResponse.arrayBuffer();
res.setHeader('Content-Type', 'image/png');
return res.status(200).send(Buffer.from(arrayBuffer));
} catch (e) {
return res.status(500).json({ error: 'Failsafe broken' });
}
}
}
{
"dependencies": {
"node-fetch": "^3.3.2"
},
"type": "module"
}