diff --git a/src/providers/cloudflare.ts b/src/providers/cloudflare.ts index 287cb0f..5558fff 100644 --- a/src/providers/cloudflare.ts +++ b/src/providers/cloudflare.ts @@ -7,7 +7,10 @@ import log from "../services/log"; **/ const BAN_SELECTORS = ['.text-gray-600']; -const CHALLENGE_SELECTORS = ['#trk_jschal_js', '.ray_id', '.attack-box', '#cf-please-wait']; +const CHALLENGE_SELECTORS = [ + '#trk_jschal_js', '.ray_id', '.attack-box', '#cf-please-wait', // CloudFlare + '#link-ddg' // DDoS-GUARD +]; const CAPTCHA_SELECTORS = ['input[name="cf_captcha_kind"]']; export default async function resolveChallenge(url: string, page: Page, response: Response): Promise { diff --git a/src/tests/app.test.ts b/src/tests/app.test.ts index 5dab3a5..bd96fe0 100644 --- a/src/tests/app.test.ts +++ b/src/tests/app.test.ts @@ -15,6 +15,7 @@ const postUrl = "https://ptsv2.com/t/qv4j3-1634496523"; const cfUrl = "https://pirateiro.com/torrents/?search=harry"; const cfCaptchaUrl = "https://idope.se" const cfBlockedUrl = "https://www.torrentmafya.org/table.php" +const ddgUrl = "https://www.erai-raws.info/feed/?type=magnet"; beforeAll(async () => { // Init session @@ -168,6 +169,35 @@ describe("Test '/v1' path", () => { expect(apiResponse.solution.url).toContain(cfBlockedUrl) }); + test("Cmd 'request.get' should return OK with DDoS-GUARD JS", async () => { + const payload = { + "cmd": "request.get", + "url": ddgUrl + } + const response: Response = await request(app).post("/v1").send(payload); + expect(response.statusCode).toBe(200); + + const apiResponse: V1ResponseSolution = response.body; + expect(apiResponse.status).toBe("ok"); + expect(apiResponse.message).toBe(""); + expect(apiResponse.startTimestamp).toBeGreaterThan(1000); + expect(apiResponse.endTimestamp).toBeGreaterThan(apiResponse.startTimestamp); + expect(apiResponse.version).toBe(version); + + const solution = apiResponse.solution; + expect(solution.url).toContain(ddgUrl) + expect(solution.status).toBe(200); + expect(Object.keys(solution.headers).length).toBeGreaterThan(0) + expect(solution.response).toContain(" { const payload = { "cmd": "request.get",