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