diff --git a/src/main/services/hosters/datanodes.ts b/src/main/services/hosters/datanodes.ts index 29708322..4cfb5242 100644 --- a/src/main/services/hosters/datanodes.ts +++ b/src/main/services/hosters/datanodes.ts @@ -1,6 +1,7 @@ import axios, { AxiosResponse } from "axios"; import { wrapper } from "axios-cookiejar-support"; import { CookieJar } from "tough-cookie"; +import { logger } from "@main/services"; export class DatanodesApi { private static readonly jar = new CookieJar(); @@ -20,51 +21,42 @@ export class DatanodesApi { await this.jar.setCookie("lang=english;", "https://datanodes.to"); - const payload = new URLSearchParams({ - op: "download2", - id: fileCode, - method_free: "Free Download >>", - dl: "1", - }); + const formData = new FormData(); + formData.append("op", "download2"); + formData.append("id", fileCode); + formData.append("rand", ""); + formData.append("referer", "https://datanodes.to/download"); + formData.append("method_free", "Free Download >>"); + formData.append("method_premium", ""); + formData.append("__dl", "1"); const response: AxiosResponse = await this.session.post( "https://datanodes.to/download", - payload, + formData, { headers: { - "User-Agent": - "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:135.0) Gecko/20100101 Firefox/135.0", + accept: "*/*", + "accept-language": "en-US,en;q=0.9", + priority: "u=1, i", + "sec-ch-ua": + '"Google Chrome";v="141", "Not?A_Brand";v="8", "Chromium";v="141"', + "sec-ch-ua-mobile": "?0", + "sec-ch-ua-platform": '"Windows"', + "sec-fetch-dest": "empty", + "sec-fetch-mode": "cors", + "sec-fetch-site": "same-origin", Referer: "https://datanodes.to/download", - Origin: "https://datanodes.to", - "Content-Type": "application/x-www-form-urlencoded", }, - maxRedirects: 0, - validateStatus: (status: number) => status === 302 || status < 400, } ); - if (response.status === 302) { - return response.headers["location"]; - } - if (typeof response.data === "object" && response.data.url) { return decodeURIComponent(response.data.url); } - const htmlContent = String(response.data); - if (!htmlContent) { - throw new Error("Empty response received"); - } - - const downloadLinkRegex = /href=["'](https:\/\/[^"']+)["']/; - const downloadLinkMatch = downloadLinkRegex.exec(htmlContent); - if (downloadLinkMatch) { - return downloadLinkMatch[1]; - } - throw new Error("Failed to get the download link"); } catch (error) { - console.error("Error fetching download URL:", error); + logger.error("Error fetching download URL:", error); throw error; } }