/** * MonolithHUB - Cloudflare Worker * Générateur automatique de clés Jnkie (Bypass le firewall AwardSpace) */ export default { async fetch(request, env, ctx) { // 1. Headers CORS pour autoriser l'espace client sur getmonolith.ru const corsHeaders = { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "GET, POST, OPTIONS", "Access-Control-Allow-Headers": "Content-Type, Authorization", }; // Gestion de la requête préliminaire (preflight OPTIONS) if (request.method === "OPTIONS") { return new Response(null, { headers: corsHeaders }); } if (request.method !== "POST") { return new Response(JSON.stringify({ error: "Méthode non autorisée. Utilisez POST." }), { status: 405, headers: { ...corsHeaders, "Content-Type": "application/json" } }); } try { let body = {}; try { body = await request.json(); } catch (e) { body = {}; } const username = body.username || "Client"; // 2. Appel direct et illimité à l'API Jnkie (sans aucun blocage réseau) const jnkieResponse = await fetch("https://api.jnkie.com/api/v2/keys", { method: "POST", headers: { "Authorization": "Bearer 36406533-27be-468d-bfa4-6a37af4dfa02", "Content-Type": "application/json", "Accept": "application/json", "User-Agent": "MonolithHub-CFWorker/1.0" }, body: JSON.stringify({ provider_id: 13538, service_id: 32082, key_name: `Monolith - ${username}`, validity_minutes: 0 // 0 = Licence Lifetime (à vie) }) }); const data = await jnkieResponse.json(); // 3. Retour de la clé générée au client if (jnkieResponse.ok && data.key && data.key.key_value) { return new Response(JSON.stringify({ success: true, key: data.key.key_value, username: username }), { status: 200, headers: { ...corsHeaders, "Content-Type": "application/json" } }); } else { const errorMsg = data.error ? (data.error.message || JSON.stringify(data.error)) : "Erreur Jnkie"; return new Response(JSON.stringify({ success: false, error: errorMsg, raw: data }), { status: jnkieResponse.status || 400, headers: { ...corsHeaders, "Content-Type": "application/json" } }); } } catch (err) { return new Response(JSON.stringify({ success: false, error: err.message }), { status: 500, headers: { ...corsHeaders, "Content-Type": "application/json" } }); } } };