UNPKG

@kelvdra/scraper

Version:

A simple scraper by kelvdra.

77 lines (68 loc) 2.42 kB
import axios from 'axios' import qs from 'qs' import crypto from 'crypto' import {URLSearchParams} from 'url' const API = { base: "https://fastdl.app", base_wh: "https://api-wh.fastdl.app", msec: "/msec", convert: "/api/convert" }; const CONSTANT = { timestamp: 1763455936795, key: "bbe749c46624c168b1215f159f9712a2a1bdf44ccfba63203b4ccd9955186ebe" }; const HEADERS = { accept: "application/json, text/plain, */*", "accept-language": "id-ID", "content-type": "application/x-www-form-urlencoded;charset=UTF-8", origin: "https://fastdl.app", referer: "https://fastdl.app/", priority: "u=1, i", "sec-ch-ua": '"Chromium";v="127", "Not)A;Brand";v="99", "Microsoft Edge Simulate";v="127", "Lemur";v="127"', "sec-ch-ua-mobile": "?1", "sec-ch-ua-platform": '"Android"', "user-agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Mobile Safari/537.36" }; async function getTimestamp() { try { const getHeaders = { "user-agent": HEADERS["user-agent"], accept: HEADERS["accept"], "accept-language": HEADERS["accept-language"], origin: HEADERS["origin"], referer: HEADERS["referer"] }; const { data } = await axios.get(`${API.base}${API.msec}`, { headers: getHeaders }); return Math.floor(data.msec * 1000); } catch (error) { console.error("Error fetching timestamp:", error.message); return 0; } } export async function igdl(url) { const time = await getTimestamp(); const time_diff = time ? Date.now() - time : 0; const ts_value = time || Date.now(); const hashString = `${url}${ts_value}${CONSTANT.key}`; const signatureBuffer = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(hashString)); const signature = Array.from(new Uint8Array(signatureBuffer)) .map(b => b.toString(16).padStart(2, "0")) .join(""); const postData = { sf_url: url, ts: ts_value.toString(), _ts: CONSTANT.timestamp.toString(), _tsc: time_diff.toString(), _s: signature }; const formBody = new URLSearchParams(postData).toString(); const convertUrl = `${API.base_wh}${API.convert}`; try { const { data } = await axios.post(convertUrl, formBody, { headers: HEADERS }); return data; } catch (error) { console.error("Error downloading:", error.message); return { error: true, message: error.message || "Gagal download" }; } }