From d675530480c9e136609d79807b911305413ae2ed Mon Sep 17 00:00:00 2001 From: Nastya Date: Sun, 1 Jun 2025 14:14:27 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B2=D0=B5=D1=80=D0=BD=D1=83=D0=BB=D0=B0=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81=20100=20=D0=B2=D0=BE=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D1=81=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/api/quizRelase.ts | 52 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 49 insertions(+), 3 deletions(-) diff --git a/lib/api/quizRelase.ts b/lib/api/quizRelase.ts index f72ef9c..9c1caf8 100644 --- a/lib/api/quizRelase.ts +++ b/lib/api/quizRelase.ts @@ -76,7 +76,53 @@ export const publicationMakeRequest = ({ url, body }: PublicationMakeRequestPara let globalStatus: string | null = null; let isFirstRequest = true; -export async function getData({ quizId, page }: { quizId: string; page?: number }): Promise<{ +export async function getData({ quizId }: { quizId: string }): Promise<{ + data: GetQuizDataResponse | null; + isRecentlyCompleted: boolean; + error?: AxiosError; +}> { + try { + const { data, headers } = await axios( + domain + `/answer/v1.0.0/settings${window.location.search}`, + { + method: "POST", + headers: { + "X-Sessionkey": SESSIONS, + "Content-Type": "application/json", + DeviceType: DeviceType, + Device: Device, + OS: OSDevice, + Browser: userAgent, + }, + data: { + quiz_id: quizId, + limit: 100, + page: 0, + need_config: true, + }, + } + ); + const sessions = JSON.parse(localStorage.getItem("sessions") || "{}"); + + //Тут ещё проверка на антифрод без парса конфига. Нам не интересно время если не нужно запрещать проходить чаще чем в сутки + if (typeof sessions[quizId] === "number" && data.settings.cfg.includes('antifraud":true')) { + // unix время. Если меньше суток прошло - выводить ошибку, иначе пустить дальше + if (Date.now() - sessions[quizId] < 86400000) { + return { data, isRecentlyCompleted: true }; + } + } + + SESSIONS = headers["x-sessionkey"] ? headers["x-sessionkey"] : SESSIONS; + + return { data, isRecentlyCompleted: false }; + } catch (nativeError) { + const error = nativeError as AxiosError; + + return { data: null, isRecentlyCompleted: false, error: error }; + } +} + +export async function getDataSingle({ quizId, page }: { quizId: string; page?: number }): Promise<{ data: GetQuizDataResponse | null; isRecentlyCompleted: boolean; error?: AxiosError; @@ -231,7 +277,7 @@ export async function getQuizDataAI(quizId: string) { while (resultRetryCount < maxRetries) { try { console.log(`[getQuizDataAI] Attempt ${resultRetryCount + 1} for result questions, page: ${page}`); - const response = await getData({ quizId, page }); + const response = await getData({ quizId }); console.log("[getQuizDataAI] Response from getData:", response); if (response.error) { @@ -286,7 +332,7 @@ export async function getQuizDataAI(quizId: string) { try { console.log(`[getQuizDataAI] Empty items retry ${emptyRetryCount + 1}`); await new Promise((resolve) => setTimeout(resolve, 1000)); - const response = await getData({ quizId, page }); + const response = await getData({ quizId }); if (response.error) { console.error("[getQuizDataAI] Error in empty items check:", response.error);