wolfyflutter

ytdl temp

Sep 16th, 2026
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 2.35 KB | Source Code | 0 0
  1. const BASE_URL = "https://fancy-sea-5d3d.holy-breeze-fec5.workers.dev/?m=i";
  2.  
  3. const HEADERS = {
  4.     "accept": "*/*",
  5.     "accept-encoding": "gzip, deflate, br, zstd",
  6.     "accept-language": "en-GB,en-US;q=0.9,en;q=0.8",
  7.     "origin": "https://y2mate.gs",
  8.     "priority": "u=1, i",
  9.     "referer": "https://y2mate.gs/",
  10.     "sec-ch-ua": '"Not=A?Brand";v="99", "Google Chrome";v="151", "Chromium";v="151"',
  11.     "sec-ch-ua-mobile": "?0",
  12.     "sec-ch-ua-platform": '"Windows"',
  13.     "sec-fetch-dest": "empty",
  14.     "sec-fetch-mode": "cors",
  15.     "sec-fetch-site": "cross-site",
  16.     "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36",
  17. };
  18.  
  19. const LABELS = ["checking", "extracting", "converting", "completed"];
  20. const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
  21.  
  22. async function apiGet(url) {
  23.     const res = await fetch(url, { headers: HEADERS });
  24.     if (res.status === 429) throw new Error("Rate limit (429)");
  25.     if (!res.ok) throw new Error(`HTTP ${res.status}`);
  26.     const data = await res.json();
  27.     if (data.error > 0) throw new Error(`Error: ${data.error}`);
  28.     return data;
  29. }
  30.  
  31. async function pollProgress(progressURL, downloadURL, videoID, format, timeout = 60000) {
  32.     const start = Date.now();
  33.     let last = null;
  34.  
  35.     while (Date.now() - start < timeout) {
  36.         const data = await apiGet(`${progressURL}&_=${Date.now()}`);
  37.         if (data.progress !== last) {
  38.             last = data.progress;
  39.             console.log(`[${LABELS[data.progress]}]`);
  40.         }
  41.         if (data.progress >= 3) {
  42.             return { downloadURL, videoID, format, title: data.title };
  43.         }
  44.         await sleep(3000);
  45.     }
  46.  
  47.     throw new Error("Polling timeout");
  48. }
  49.  
  50. async function fetchConvert(videoID, format = 'mp3') {
  51.     const url = `${BASE_URL}&v=${videoID}&f=${format}&_=${Date.now()}`;
  52.     console.log(`Fetching: ${videoID} (${format})`);
  53.  
  54.     const data = await apiGet(url);
  55.  
  56.     if (data.status === "download") {
  57.         return { downloadURL: data.downloadURL, videoID, format, title: data.title };
  58.     }
  59.  
  60.     if (data.status === "progress") {
  61.         console.log("Polling...");
  62.         return pollProgress(data.progressURL, data.downloadURL, videoID, format);
  63.     }
  64.  
  65.     throw new Error(`Unknown status: ${data.status}`);
  66. }
  67.  
  68. export { fetchConvert }
Advertisement
Add Comment
Please, Sign In to add comment