// Cloudflare Worker: index.js addEventListener('fetch', event => { event.respondWith(handleRequest(event.request)) }); async function handleRequest(request) { const corsHeaders = { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS', 'Access-Control-Allow-Headers': 'Content-Type, Authorization, X-Requested-With', }; // Immediate handling of browser preflight CORS demands if (request.method === 'OPTIONS') { return new Response(null, { headers: corsHeaders }); } try { // 1. Fetch fresh definitions directly with absolute server-side cache-busting const sourceResponse = await fetch(`https://jtvv.pages.dev/channels.json?cb=${Date.now()}`, { headers: { 'Cache-Control': 'no-cache, no-store, must-revalidate' } }); if (!sourceResponse.ok) { throw new Error(`Upstream source responded with status: ${sourceResponse.status}`); } const data = await sourceResponse.json(); // 2. Locate target dictionary block safely (handles wrapped or bare nodes) const channelNode = data.sidhu2 || (data.channels && data.channels.sidhu2); if (!channelNode) { return new Response(JSON.stringify({ error: "Channel 'sidhu2' target not found in live stream payload." }), { status: 404, headers: { ...corsHeaders, 'Content-Type': 'application/json' } }); } // 3. Destructure and sanitize variables const rawStreamUrl = channelNode.streamUrl || channelNode.url || ""; // Extract token parameter safely let extractedCookieToken = ""; const tokenMatch = rawStreamUrl.match(/[?&](__hdnea__=[^&]+)/); if (tokenMatch) { extractedCookieToken = tokenMatch[1]; } // Strip token from base URL to ensure clean manifest handling let baseStreamUrl = rawStreamUrl; if (rawStreamUrl.includes('?')) { const [base, query] = rawStreamUrl.split('?'); const filteredQuery = query.split('&').filter(param => !param.startsWith('__hdnea__=')).join('&'); baseStreamUrl = filteredQuery ? `${base}?${filteredQuery}` : base; } // 4. Construct flat production-ready schema payload mapping const structuredPayload = { status: "success", channel: { id: "sidhu2", name: channelNode.name || "Star Sports HD2 Hindi", manifestUrl: baseStreamUrl, token: extractedCookieToken, drm: { keyId: channelNode.clearKey?.keyId || channelNode.keyId || "", key: channelNode.clearKey?.key || channelNode.key || "" } } }; return new Response(JSON.stringify(structuredPayload), { status: 200, headers: { ...corsHeaders, 'Content-Type': 'application/json', 'Cache-Control': 'no-store, no-cache, must-revalidate, proxy-revalidate' } }); } catch (error) { return new Response(JSON.stringify({ status: "error", error: error.message }), { status: 500, headers: { ...corsHeaders, 'Content-Type': 'application/json' } }); } }