File size: 2,305 Bytes
4bea261
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// src/pages/api/video/resolve.js
// Ultra-Premium SSL Guard Auto-Resolver
// Automatically upgrades untrusted SSL direct streams to use Cloudflare R2 Proxy

export const prerender = false;

export async function GET({ request }) {
  const urlObj = new URL(request.url);
  const base64Url = urlObj.searchParams.get('url');
  
  if (!base64Url) {
    return new Response(JSON.stringify({ success: false, error: 'Missing parameter: url' }), {
      status: 400,
      headers: { 
        'Content-Type': 'application/json',
        'Access-Control-Allow-Origin': '*'
      }
    });
  }
  
  try {
    // Decode base64 URL sent by txaplayer SSL Guard
    const decodedUrl = atob(decodeURIComponent(base64Url));
    console.log('[API Video Resolve] SSL Guard triggered for:', decodedUrl);

    const cloudflareProxy = import.meta.env.PUBLIC_CLOUDFLARE_PROXY_URL;
    let resolvedUrl = decodedUrl;

    // Check if the domain is known to geo-block or block Cloudflare Workers (e.g., phimmoi.net)
    const isCloudflareBlocked = decodedUrl.includes('phimmoi.net') ||
                                decodedUrl.includes('streamvda.top');

    if (isCloudflareBlocked) {
      resolvedUrl = `/api/proxy-media?url=${encodeURIComponent(decodedUrl)}`;
      console.log('[API Video Resolve] Upgrading to Vercel Fallback Proxy (Forced due to geo-blocking/Cloudflare restriction):', resolvedUrl);
    } else if (cloudflareProxy) {
      resolvedUrl = `${cloudflareProxy}/?url=${encodeURIComponent(decodedUrl)}`;
      console.log('[API Video Resolve] Upgrading to Cloudflare Proxy:', resolvedUrl);
    } else {
      resolvedUrl = `/api/proxy-media?url=${encodeURIComponent(decodedUrl)}`;
      console.log('[API Video Resolve] Upgrading to Vercel Fallback Proxy:', resolvedUrl);
    }
    
    return new Response(JSON.stringify({ success: true, url: resolvedUrl }), {
      status: 200,
      headers: { 
        'Content-Type': 'application/json',
        'Access-Control-Allow-Origin': '*'
      }
    });
  } catch (e) {
    console.error('[API Video Resolve] Error decoding URL:', e);
    return new Response(JSON.stringify({ success: false, error: e.message }), {
      status: 500,
      headers: { 
        'Content-Type': 'application/json',
        'Access-Control-Allow-Origin': '*'
      }
    });
  }
}