Spaces:
Sleeping
Sleeping
| // 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': '*' | |
| } | |
| }); | |
| } | |
| } | |