kadad-ai-worker-code

// =============================================
// Cloudflare Worker - خروجی مستقیم تصویر
// =============================================

export default {
  async fetch(request, env) {
    if (request.method === 'OPTIONS') {
      return new Response(null, {
        headers: {
          'Access-Control-Allow-Origin': '*',
          'Access-Control-Allow-Methods': 'GET, OPTIONS',
        }
      });
    }

    try {
      const url = new URL(request.url);
      const image = url.searchParams.get('image');

      // تست
      if (url.searchParams.has('test')) {
        return new Response('✅ Worker فعال است!', {
          headers: {
            'Content-Type': 'text/plain',
            'Access-Control-Allow-Origin': '*'
          }
        });
      }

      if (!image) {
        return new Response('❌ از ?image=توضیحات استفاده کنید', {
          headers: {
            'Content-Type': 'text/plain',
            'Access-Control-Allow-Origin': '*'
          },
          status: 400
        });
      }

      if (!env.CF_API_TOKEN || !env.CF_ACCOUNT_ID) {
        return new Response('❌ متغیرهای محیطی تنظیم نشده‌اند', {
          headers: {
            'Content-Type': 'text/plain',
            'Access-Control-Allow-Origin': '*'
          },
          status: 500
        });
      }

      // ===== تولید تصویر =====
      const apiUrl = `https://api.cloudflare.com/client/v4/accounts/${env.CF_ACCOUNT_ID}/ai/run/@cf/stabilityai/stable-diffusion-xl-base-1.0`;

      const response = await fetch(apiUrl, {
        method: 'POST',
        headers: {
          'Authorization': `Bearer ${env.CF_API_TOKEN}`,
          'Content-Type': 'application/json',
        },
        body: JSON.stringify({
          prompt: image,
          width: 512,
          height: 512,
          num_steps: 20,
          guidance: 7.5,
        }),
      });

      if (!response.ok) {
        return new Response(`❌ خطا: ${response.status}`, {
          headers: {
            'Content-Type': 'text/plain',
            'Access-Control-Allow-Origin': '*'
          },
          status: response.status
        });
      }

      // ===== خروجی مستقیم تصویر =====
      const arrayBuffer = await response.arrayBuffer();

      return new Response(arrayBuffer, {
        headers: {
          'Content-Type': 'image/png',
          'Access-Control-Allow-Origin': '*',
          'Cache-Control': 'public, max-age=86400',
          'Content-Disposition': `inline; filename="kadad-${Date.now()}.png"`
        }
      });

    } catch (error) {
      return new Response(`❌ خطا: ${error.message}`, {
        headers: {
          'Content-Type': 'text/plain',
          'Access-Control-Allow-Origin': '*'
        },
        status: 500
      });
    }
  }
};