Загрузка данных


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"
}