@kelvdra/scraper
Version:
A simple scraper by kelvdra.
77 lines (68 loc) • 2.42 kB
JavaScript
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" };
}
}