Files
vega-providers/dist/hdhub4u/hdhub4uGetSteam.js
himanshu8443 3f3e12f5df init
2025-06-15 21:29:40 +05:30

151 lines
5.5 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.hdhub4uGetStream = hdhub4uGetStream;
exports.getRedirectLinks = getRedirectLinks;
exports.decodeString = decodeString;
async function hdhub4uGetStream({ link, signal, providerContext, }) {
const { axios, cheerio, extractors, commonHeaders: headers } = providerContext;
const { hubcloudExtracter } = extractors;
let hubdriveLink = '';
if (link.includes('hubdrive')) {
const hubdriveRes = await axios.get(link, { headers, signal });
const hubdriveText = hubdriveRes.data;
const $ = cheerio.load(hubdriveText);
hubdriveLink =
$('.btn.btn-primary.btn-user.btn-success1.m-1').attr('href') || link;
}
else {
const res = await axios.get(link, { headers, signal });
const text = res.data;
const encryptedString = text.split("s('o','")?.[1]?.split("',180")?.[0];
const decodedString = decodeString(encryptedString);
link = atob(decodedString?.o);
const redirectLink = await getRedirectLinks(link, signal, headers);
const redirectLinkRes = await axios.get(redirectLink, { headers, signal });
const redirectLinkText = redirectLinkRes.data;
const $ = cheerio.load(redirectLinkText);
hubdriveLink =
$('h3:contains("1080p")').find('a').attr('href') ||
redirectLinkText.match(/href="(https:\/\/hubcloud\.[^\/]+\/drive\/[^"]+)"/)[1];
if (hubdriveLink.includes('hubdrive')) {
const hubdriveRes = await axios.get(hubdriveLink, { headers, signal });
const hubdriveText = hubdriveRes.data;
const $$ = cheerio.load(hubdriveText);
hubdriveLink =
$$('.btn.btn-primary.btn-user.btn-success1.m-1').attr('href') ||
hubdriveLink;
}
}
const hubdriveLinkRes = await axios.get(hubdriveLink, { headers, signal });
const hubcloudText = hubdriveLinkRes.data;
const hubcloudLink = hubcloudText.match(/<META HTTP-EQUIV="refresh" content="0; url=([^"]+)">/i)?.[1] || hubdriveLink;
try {
return await hubcloudExtracter(hubcloudLink, signal);
}
catch (error) {
console.log('hd hub 4 getStream error: ', error);
return [];
}
}
const encode = function (value) {
return btoa(value.toString());
};
const decode = function (value) {
if (value === undefined) {
return '';
}
return atob(value.toString());
};
const pen = function (value) {
return value.replace(/[a-zA-Z]/g, function (_0x1a470e) {
return String.fromCharCode((_0x1a470e <= 'Z' ? 90 : 122) >=
(_0x1a470e = _0x1a470e.charCodeAt(0) + 13)
? _0x1a470e
: _0x1a470e - 26);
});
};
const abortableTimeout = (ms, { signal } = {}) => {
return new Promise((resolve, reject) => {
if (signal && signal.aborted) {
return reject(new Error('Aborted'));
}
const timer = setTimeout(resolve, ms);
if (signal) {
signal.addEventListener('abort', () => {
clearTimeout(timer);
reject(new Error('Aborted'));
});
}
});
};
async function getRedirectLinks(link, signal, headers) {
try {
const res = await fetch(link, { headers, signal });
const resText = await res.text();
var regex = /ck\('_wp_http_\d+','([^']+)'/g;
var combinedString = '';
var match;
while ((match = regex.exec(resText)) !== null) {
// console.log(match[1]);
combinedString += match[1];
}
// console.log(decode(combinedString));
const decodedString = decode(pen(decode(decode(combinedString))));
// console.log(decodedString);
const data = JSON.parse(decodedString);
console.log(data);
const token = encode(data?.data);
const blogLink = data?.wp_http1 + '?re=' + token;
// abort timeout on signal
let wait = abortableTimeout((Number(data?.total_time) + 3) * 1000, {
signal,
});
await wait;
console.log('blogLink', blogLink);
let vcloudLink = 'Invalid Request';
while (vcloudLink.includes('Invalid Request')) {
const blogRes = await fetch(blogLink, { headers, signal });
const blogResText = (await blogRes.text());
if (blogResText.includes('Invalid Request')) {
console.log(blogResText);
}
else {
vcloudLink = blogResText.match(/var reurl = "([^"]+)"/) || '';
break;
}
}
// console.log('vcloudLink', vcloudLink?.[1]);
return blogLink || link;
}
catch (err) {
console.log('Error in getRedirectLinks', err);
return link;
}
}
function rot13(str) {
return str.replace(/[a-zA-Z]/g, function (char) {
const charCode = char.charCodeAt(0);
const isUpperCase = char <= 'Z';
const baseCharCode = isUpperCase ? 65 : 97;
return String.fromCharCode(((charCode - baseCharCode + 13) % 26) + baseCharCode);
});
}
function decodeString(encryptedString) {
try {
// First base64 decode
let decoded = atob(encryptedString);
// Second base64 decode
decoded = atob(decoded);
// ROT13 decode
decoded = rot13(decoded);
// Third base64 decode
decoded = atob(decoded);
// Parse JSON
return JSON.parse(decoded);
}
catch (error) {
console.error('Error decoding string:', error);
return null;
}
}