resotg / app.js
Reaperxxxx's picture
Update app.js
138aaea verified
Raw
History Blame Contribute Delete
2.67 kB
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")
);