const express = require("express"); const axios = require("axios"); const cors = require("cors"); const app = express(); // Middleware app.use(cors()); // allow all origins app.use(express.json()); // parse JSON body app.post("/login", async (req, res) => { try { const { tgWebAppData } = req.body; if (!tgWebAppData) { return res.status(400).json({ error: "Missing tgWebAppData in body" }); } // Try decoding multiple times let decoded = tgWebAppData; let decodes = [decoded]; try { decoded = decodeURIComponent(decoded); decodes.push(decoded); decoded = decodeURIComponent(decoded); decodes.push(decoded); } catch (_) {} const params = new URLSearchParams(decoded); // Extract parameters const userRaw = params.get("user"); const auth_date = params.get("auth_date"); const chat_instance = params.get("chat_instance"); const chat_type = params.get("chat_type"); const signature = params.get("signature"); const hash = params.get("hash"); if (!userRaw || !hash) { return res.status(400).json({ error: "Missing required values", debug: { decodes, params: Object.fromEntries(params) }, }); } // Build initData block const block = `auth_date=${auth_date}\n` + `chat_instance=${chat_instance}\n` + `chat_type=${chat_type}\n` + `signature=${signature}\n` + `user=${userRaw}`; const initDataString = JSON.stringify([block, hash]); // Try calling AnimeKombat let response; try { response = await axios.post( "https://be.animekombat.com/api/auth/login", { initData: initDataString }, { headers: { Accept: "application/json, text/plain, */*", "Content-Type": "application/json", }, } ); } catch (err) { return res.status(err.response?.status || 500).json({ error: "AnimeKombat rejected request", reason: err.response?.data || err.message, debug: { initDataString, decodes, params: Object.fromEntries(params), }, }); } // Success res.json({ token: response.data.access_token, type: response.data.token_type, expires: response.data.expires_in, user: (() => { try { return JSON.parse(userRaw); } catch { return userRaw; } })(), debug: { initDataString, decodes }, }); } catch (err) { res.status(500).json({ error: err.message }); } }); app.listen(7860, () => console.log("Server running at http://localhost:3000") );