UNPKG

@aqul/akinator-api

Version:
74 lines (73 loc) 2.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.requestAki = exports.setupAki = void 0; const cheerio_1 = require("cheerio"); const undici_1 = require("undici"); const Config_1 = require("../constants/Config"); const defaultHeaders = { "content-type": "application/x-www-form-urlencoded", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36", "x-requested-with": "XMLHttpRequest" }; function getRequestConfig(customConfig) { const majorVersion = Number(process.version.slice(1).split(".")[0]); const config = { headersTimeout: 30000, bodyTimeout: 30000, ...customConfig }; if (majorVersion < 20) { config.throwOnError = false; } return config; } const setupAki = async (region, childMode, config = {}) => { try { const [lang, theme] = region.split("_"); const baseUrl = `https://${lang}.akinator.com`; const sid = Config_1.themes[theme] ?? 1; const body = new URLSearchParams(Object.entries({ cm: childMode === true, sid })).toString(); const { body: responseBody } = await (0, undici_1.request)(`${baseUrl}/game`, { method: "POST", headers: { ...defaultHeaders, ...config.headers }, body, ...getRequestConfig(config) }); const data = await responseBody.text(); const $ = (0, cheerio_1.load)(data); const session = $("#askSoundlike > #session").attr("value"); const signature = $("#askSoundlike > #signature").attr("value"); const question = $("#question-label").text(); return { session, signature, question, baseUrl, sid }; } catch (e) { console.log(e); throw e; } }; exports.setupAki = setupAki; const requestAki = async (url, body, config = {}) => { const { body: responseBody } = await (0, undici_1.request)(url, { method: "POST", headers: { ...defaultHeaders, ...config.headers }, body: new URLSearchParams(Object.entries(body)).toString(), ...getRequestConfig(config) }); const data = await responseBody.text(); try { return JSON.parse(data); } catch { return data; } }; exports.requestAki = requestAki;