This commit is contained in:
himanshu8443
2025-06-16 22:26:38 +05:30
parent 3f3e12f5df
commit 2a4aa2a680
185 changed files with 4645 additions and 3952 deletions

View File

@@ -0,0 +1,20 @@
export const catalog = [
{
title: "Latest",
filter: "/movies",
},
{
title: "Netflix",
filter: "/platform/netflix",
},
{
title: "Disney +",
filter: "/platform/disney-hotstar",
},
{
title: "Amazon Prime",
filter: "/platform/amazon-prime-video",
},
];
export const genres = [];

View File

@@ -1,14 +0,0 @@
import {protonGenresList, protonCatalogList} from './protonCatalog';
import {protonGetPosts, protonGetPostsSearch} from './protonGetPosts';
import {protonGetInfo} from './protonGetMeta';
import {ProviderType} from '../types';
import {protonGetStream} from './protonGetStream';
export const protonMovies: ProviderType = {
catalog: protonCatalogList,
genres: protonGenresList,
GetMetaData: protonGetInfo,
GetHomePosts: protonGetPosts,
GetStream: protonGetStream,
GetSearchPosts: protonGetPostsSearch,
};

View File

@@ -0,0 +1,109 @@
import { EpisodeLink, Info, Link, ProviderContext } from "../types";
export const getMeta = async function ({
link,
providerContext,
}: {
link: string;
providerContext: ProviderContext;
}): Promise<Info> {
try {
const { axios, cheerio, getBaseUrl } = providerContext;
console.log("all", link);
const res = await axios.get(link);
const data = res.data;
function decodeHtml(encodedArray: string[]): string {
// Join array elements into a single string
const joined = encodedArray.join("");
// Replace escaped quotes
const unescaped = joined.replace(/\\"/g, '"').replace(/\\'/g, "'");
// Remove remaining escape characters
const cleaned = unescaped
.replace(/\\n/g, "\n")
.replace(/\\t/g, "\t")
.replace(/\\r/g, "\r");
// Convert literal string representations back to characters
const decoded = cleaned
.replace(/&quot;/g, '"')
.replace(/&lt;/g, "<")
.replace(/&gt;/g, ">")
.replace(/&amp;/g, "&");
return decoded;
}
const $$ = cheerio.load(data);
const htmlArray = $$('script:contains("decodeURIComponent")')
.text()
.split(" = ")?.[1]
?.split("protomovies")?.[0]
?.trim()
?.slice(0, -1); // remove the last character
// console.log('protonGetInfo', htmlArray);
const html = decodeHtml(JSON.parse(htmlArray));
// console.log('all', html);
const $ = cheerio.load(html);
const title = $(
".trending-text.fw-bold.texture-text.text-uppercase.my-0.fadeInLeft.animated.d-inline-block"
).text();
const image = $("#thumbnail").attr("src");
const type = link.includes("series") ? "series" : "movie";
const synopsis =
$(".col-12.iq-mb-30.animated.fadeIn").first().text() ||
$(".description-content").text();
const tags = $(".p-0.mt-2.list-inline.d-flex.flex-wrap.movie-tag")
.find("li")
.map((i, el) => $(el).text())
.slice(0, 3)
.get();
const baseUrl = await getBaseUrl("protonMovies");
const links: Link[] = [];
if (type === "movie") {
const directLinks: EpisodeLink[] = [];
directLinks.push({ title: "Movie", link: link });
links.push({ title: "Movie", directLinks: directLinks });
} else {
$("#episodes")
.children()
.map((i, element) => {
let directLinks: EpisodeLink[] = [];
$(element)
.find(".episode-block")
.map((j, ep) => {
const link = baseUrl + $(ep).find("a").attr("href") || "";
const title =
"Episode " + $(ep).find(".episode-number").text().split("E")[1];
directLinks.push({ title, link });
});
links.push({ title: "Season " + (i + 1), directLinks: directLinks });
});
}
return {
image: image || "",
imdbId: "",
linkList: links,
title: title || "",
synopsis: synopsis,
tags: tags,
type: type,
};
} catch (err) {
console.error("prton", err);
return {
title: "",
synopsis: "",
image: "",
imdbId: "",
type: "movie",
linkList: [],
};
}
};

View File

@@ -1,6 +1,6 @@
import {Post, ProviderContext} from '../types';
import { Post, ProviderContext } from "../types";
export const protonGetPosts = async function ({
export const getPosts = async function ({
filter,
page,
signal,
@@ -12,13 +12,13 @@ export const protonGetPosts = async function ({
signal: AbortSignal;
providerContext: ProviderContext;
}): Promise<Post[]> {
const {getBaseUrl, axios, cheerio} = providerContext;
const baseUrl = await getBaseUrl('protonMovies');
const { getBaseUrl, axios, cheerio } = providerContext;
const baseUrl = await getBaseUrl("protonMovies");
const url = `${baseUrl + filter}/page/${page}/`;
return posts({url, baseUrl, signal, axios, cheerio});
return posts({ url, baseUrl, signal, axios, cheerio });
};
export const protonGetPostsSearch = async function ({
export const getSearchPosts = async function ({
searchQuery,
page,
signal,
@@ -30,10 +30,10 @@ export const protonGetPostsSearch = async function ({
signal: AbortSignal;
providerContext: ProviderContext;
}): Promise<Post[]> {
const {getBaseUrl, axios, cheerio} = providerContext;
const baseUrl = await getBaseUrl('protonMovies');
const { getBaseUrl, axios, cheerio } = providerContext;
const baseUrl = await getBaseUrl("protonMovies");
const url = `${baseUrl}/search/${searchQuery}/page/${page}/`;
return posts({url, baseUrl, signal, axios, cheerio});
return posts({ url, baseUrl, signal, axios, cheerio });
};
async function posts({
@@ -46,28 +46,28 @@ async function posts({
url: string;
baseUrl: string;
signal: AbortSignal;
axios: ProviderContext['axios'];
cheerio: ProviderContext['cheerio'];
axios: ProviderContext["axios"];
cheerio: ProviderContext["cheerio"];
}): Promise<Post[]> {
function decodeHtml(encodedArray: string[]): string {
// Join array elements into a single string
const joined = encodedArray.join('');
const joined = encodedArray.join("");
// Replace escaped quotes
const unescaped = joined.replace(/\\"/g, '"').replace(/\\'/g, "'");
// Remove remaining escape characters
const cleaned = unescaped
.replace(/\\n/g, '\n')
.replace(/\\t/g, '\t')
.replace(/\\r/g, '\r');
.replace(/\\n/g, "\n")
.replace(/\\t/g, "\t")
.replace(/\\r/g, "\r");
// Convert literal string representations back to characters
const decoded = cleaned
.replace(/&quot;/g, '"')
.replace(/&lt;/g, '<')
.replace(/&gt;/g, '>')
.replace(/&amp;/g, '&');
.replace(/&lt;/g, "<")
.replace(/&gt;/g, ">")
.replace(/&amp;/g, "&");
return decoded;
}
@@ -84,13 +84,13 @@ async function posts({
const html = decodeHtml(JSON.parse(htmlArray[htmlArray.length - 1]));
const $ = cheerio.load(html);
const catalog: Post[] = [];
$('.col.mb-4').map((i, element) => {
const title = $(element).find('h5').text();
const link = $(element).find('h5').find('a').attr('href');
$(".col.mb-4").map((i, element) => {
const title = $(element).find("h5").text();
const link = $(element).find("h5").find("a").attr("href");
const image =
$(element).find('img').attr('data-src') ||
$(element).find('img').attr('src') ||
'';
$(element).find("img").attr("data-src") ||
$(element).find("img").attr("src") ||
"";
if (title && link && image) {
catalog.push({
title: title,
@@ -101,7 +101,7 @@ async function posts({
});
return catalog;
} catch (err) {
console.error('protonGetPosts error ', err);
console.error("protonGetPosts error ", err);
return [];
}
}

View File

@@ -1,20 +0,0 @@
export const protonCatalogList = [
{
title: 'Latest',
filter: '/movies',
},
{
title: 'Netflix',
filter: '/platform/netflix',
},
{
title: 'Disney +',
filter: '/platform/disney-hotstar',
},
{
title: 'Amazon Prime',
filter: '/platform/amazon-prime-video',
},
];
export const protonGenresList = [];

View File

@@ -1,109 +0,0 @@
import {EpisodeLink, Info, Link, ProviderContext} from '../types';
export const protonGetInfo = async function ({
link,
providerContext,
}: {
link: string;
providerContext: ProviderContext;
}): Promise<Info> {
try {
const {axios, cheerio, getBaseUrl} = providerContext;
console.log('all', link);
const res = await axios.get(link);
const data = res.data;
function decodeHtml(encodedArray: string[]): string {
// Join array elements into a single string
const joined = encodedArray.join('');
// Replace escaped quotes
const unescaped = joined.replace(/\\"/g, '"').replace(/\\'/g, "'");
// Remove remaining escape characters
const cleaned = unescaped
.replace(/\\n/g, '\n')
.replace(/\\t/g, '\t')
.replace(/\\r/g, '\r');
// Convert literal string representations back to characters
const decoded = cleaned
.replace(/&quot;/g, '"')
.replace(/&lt;/g, '<')
.replace(/&gt;/g, '>')
.replace(/&amp;/g, '&');
return decoded;
}
const $$ = cheerio.load(data);
const htmlArray = $$('script:contains("decodeURIComponent")')
.text()
.split(' = ')?.[1]
?.split('protomovies')?.[0]
?.trim()
?.slice(0, -1); // remove the last character
// console.log('protonGetInfo', htmlArray);
const html = decodeHtml(JSON.parse(htmlArray));
// console.log('all', html);
const $ = cheerio.load(html);
const title = $(
'.trending-text.fw-bold.texture-text.text-uppercase.my-0.fadeInLeft.animated.d-inline-block',
).text();
const image = $('#thumbnail').attr('src');
const type = link.includes('series') ? 'series' : 'movie';
const synopsis =
$('.col-12.iq-mb-30.animated.fadeIn').first().text() ||
$('.description-content').text();
const tags = $('.p-0.mt-2.list-inline.d-flex.flex-wrap.movie-tag')
.find('li')
.map((i, el) => $(el).text())
.slice(0, 3)
.get();
const baseUrl = await getBaseUrl('protonMovies');
const links: Link[] = [];
if (type === 'movie') {
const directLinks: EpisodeLink[] = [];
directLinks.push({title: 'Movie', link: link});
links.push({title: 'Movie', directLinks: directLinks});
} else {
$('#episodes')
.children()
.map((i, element) => {
let directLinks: EpisodeLink[] = [];
$(element)
.find('.episode-block')
.map((j, ep) => {
const link = baseUrl + $(ep).find('a').attr('href') || '';
const title =
'Episode ' + $(ep).find('.episode-number').text().split('E')[1];
directLinks.push({title, link});
});
links.push({title: 'Season ' + (i + 1), directLinks: directLinks});
});
}
return {
image: image || '',
imdbId: '',
linkList: links,
title: title || '',
synopsis: synopsis,
tags: tags,
type: type,
};
} catch (err) {
console.error('prton', err);
return {
title: '',
synopsis: '',
image: '',
imdbId: '',
type: 'movie',
linkList: [],
};
}
};

View File

@@ -1,4 +1,4 @@
import {Stream, ProviderContext} from '../types';
import { Stream, ProviderContext } from "../types";
function LALLJLutmoZpvvbikjaWM(str: string): ArrayBuffer {
var buf = new ArrayBuffer(str.length * 2);
@@ -11,60 +11,65 @@ function LALLJLutmoZpvvbikjaWM(str: string): ArrayBuffer {
function getOrCreateUID() {
const uid =
'uid_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);
"uid_" + Date.now() + "_" + Math.random().toString(36).substr(2, 9);
return uid;
}
export const protonGetStream = async function ({
export const getStream = async function ({
link,
providerContext,
}: {
link: string;
providerContext: ProviderContext;
}): Promise<Stream[]> {
const {axios, cheerio, commonHeaders: headers, extractors} = providerContext;
const {gofileExtracter} = extractors;
const {
axios,
cheerio,
commonHeaders: headers,
extractors,
} = providerContext;
const { gofileExtracter } = extractors;
function generateMessageToken(baseUrlL: string): string {
const hostname = baseUrlL?.replace(/https?:\/\//, '').split('/')[0];
console.log('generateMessageToken hostname', hostname);
const hostname = baseUrlL?.replace(/https?:\/\//, "").split("/")[0];
console.log("generateMessageToken hostname", hostname);
const NsmxUftCNibQ = `[hostname=${hostname}][agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36 Edg/137.0.0.0][tmz=India Standard Time][userTimezoneOffset=-330][{"url":"https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.4/jquery.min.js","type":"script","duration":253.30000000074506},{"url":"https://challenges.cloudflare.com/turnstile/v0/api.js?onload=onloadTurnstileCallback","type":"script","duration":397.19999999925494},{"url":"https://adoto.net/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js","type":"img","duration":225.90000000223517},{"url":"https://code.jquery.com/jquery-3.3.1.slim.min.js","type":"script","duration":65.30000000074506},{"url":"https://static.cloudflareinsights.com/beacon.min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015","type":"script","duration":225.89999999850988},{"url":"https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.4/jquery.min.js","type":"script","duration":253.30000000074506},{"url":"https://challenges.cloudflare.com/turnstile/v0/api.js?onload=onloadTurnstileCallback","type":"script","duration":397.19999999925494},{"url":"https://adoto.net/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js","type":"img","duration":225.90000000223517},{"url":"https://code.jquery.com/jquery-3.3.1.slim.min.js","type":"script","duration":65.30000000074506},{"url":"https://static.cloudflareinsights.com/beacon.min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015","type":"script","duration":225.89999999850988},{"url":"https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/b/turnstile/if/ov2/av0/rcv/b3dhg/0x4AAAAAAAQDru7r64xT2ifD/auto/fbE/new/normal/auto/","type":"iframe","duration":2050.300000000745},{"url":"https://new19.gdtot.dad/favicon.ico","type":"img","duration":1003.6999999992549},{"url":"https://vikingfile.com/assets/favicon-64375c377b5df8304acbdad4f4430694.ico","type":"img","duration":183.19999999925494},{"url":"https://gofile.io/dist/img/favicon32.png","type":"img","duration":19177.199999999255},{"url":"https://pub.clickadu.com/assets/scripts/supported-browsers.js","type":"fetch","duration":18.799999997019768},{"url":"https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/b/turnstile/if/ov2/av0/rcv/b3dhg/0x4AAAAAAAQDru7r64xT2ifD/auto/fbE/auto_expire/normal/auto/","type":"iframe","duration":1612.5999999977648},{"url":"https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/b/turnstile/if/ov2/av0/rcv/b3dhg/0x4AAAAAAAQDru7r64xT2ifD/auto/fbE/auto_expire/normal/auto/","type":"iframe","duration":1154.0999999977648},{"url":"https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.4/jquery.min.js","type":"script","duration":253.30000000074506},{"url":"https://challenges.cloudflare.com/turnstile/v0/api.js?onload=onloadTurnstileCallback","type":"script","duration":397.19999999925494},{"url":"https://adoto.net/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js","type":"img","duration":225.90000000223517},{"url":"https://code.jquery.com/jquery-3.3.1.slim.min.js","type":"script","duration":65.30000000074506},{"url":"https://static.cloudflareinsights.com/beacon.min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015","type":"script","duration":225.89999999850988},{"url":"https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/b/turnstile/if/ov2/av0/rcv/b3dhg/0x4AAAAAAAQDru7r64xT2ifD/auto/fbE/new/normal/auto/","type":"iframe","duration":2050.300000000745},{"url":"https://new19.gdtot.dad/favicon.ico","type":"img","duration":1003.6999999992549},{"url":"https://vikingfile.com/assets/favicon-64375c377b5df8304acbdad4f4430694.ico","type":"img","duration":183.19999999925494},{"url":"https://gofile.io/dist/img/favicon32.png","type":"img","duration":19177.199999999255},{"url":"https://pub.clickadu.com/assets/scripts/supported-browsers.js","type":"fetch","duration":18.799999997019768},{"url":"https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/b/turnstile/if/ov2/av0/rcv/b3dhg/0x4AAAAAAAQDru7r64xT2ifD/auto/fbE/auto_expire/normal/auto/","type":"iframe","duration":1612.5999999977648},{"url":"https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/b/turnstile/if/ov2/av0/rcv/b3dhg/0x4AAAAAAAQDru7r64xT2ifD/auto/fbE/auto_expire/normal/auto/","type":"iframe","duration":1154.0999999977648},{"url":"https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/b/turnstile/if/ov2/av0/rcv/b3dhg/0x4AAAAAAAQDru7r64xT2ifD/auto/fbE/auto_expire/normal/auto/","type":"iframe","duration":986}][{"elements":{"div":70,"span":68,"img":4,"iframe":0,"script":28,"link":20,"p":5,"a":213,"ul":28,"li":208,"button":9,"input":5},"hidden":{"div":13,"span":60,"img":1,"iframe":0,"script":28,"link":20,"p":0,"a":186,"ul":22,"li":184,"button":6,"input":2},"errors":{"network":0,"js":0},"eventListeners":0}]`;
var jRpeP = LALLJLutmoZpvvbikjaWM(NsmxUftCNibQ);
var jzKEwqEAcWFMNwHZnCCqJQ = new Uint8Array(jRpeP);
var kyMXQUxoFYuZIBlKvlHa = jzKEwqEAcWFMNwHZnCCqJQ.toString();
var kyMXQUxoFYuZIBlKvlHa = kyMXQUxoFYuZIBlKvlHa.replace(/2/g, '004');
var kyMXQUxoFYuZIBlKvlHa = kyMXQUxoFYuZIBlKvlHa.replace(/3/g, '005');
var kyMXQUxoFYuZIBlKvlHa = kyMXQUxoFYuZIBlKvlHa.replace(/7/g, '007');
var kyMXQUxoFYuZIBlKvlHa = kyMXQUxoFYuZIBlKvlHa.replace(/,0,0,0/g, '');
var kyMXQUxoFYuZIBlKvlHa = kyMXQUxoFYuZIBlKvlHa.replace(/2/g, "004");
var kyMXQUxoFYuZIBlKvlHa = kyMXQUxoFYuZIBlKvlHa.replace(/3/g, "005");
var kyMXQUxoFYuZIBlKvlHa = kyMXQUxoFYuZIBlKvlHa.replace(/7/g, "007");
var kyMXQUxoFYuZIBlKvlHa = kyMXQUxoFYuZIBlKvlHa.replace(/,0,0,0/g, "");
return kyMXQUxoFYuZIBlKvlHa;
}
function decodeHtml(encodedArray: string[]): string {
// Join array elements into a single string
const joined = encodedArray.join('');
const joined = encodedArray.join("");
// Replace escaped quotes
const unescaped = joined.replace(/\\"/g, '"').replace(/\\'/g, "'");
// Remove remaining escape characters
const cleaned = unescaped
.replace(/\\n/g, '\n')
.replace(/\\t/g, '\t')
.replace(/\\r/g, '\r');
.replace(/\\n/g, "\n")
.replace(/\\t/g, "\t")
.replace(/\\r/g, "\r");
// Convert literal string representations back to characters
const decoded = cleaned
.replace(/&quot;/g, '"')
.replace(/&lt;/g, '<')
.replace(/&gt;/g, '>')
.replace(/&amp;/g, '&');
.replace(/&lt;/g, "<")
.replace(/&gt;/g, ">")
.replace(/&amp;/g, "&");
return decoded;
}
try {
const streamLinks: Stream[] = [];
const res = await axios.get(link, {headers});
const res = await axios.get(link, { headers });
const data = res.data;
// const regex = /\[(?=.*?"<div class")(.*?)\]/g;
// const htmlArray = data?.match(regex);
@@ -73,8 +78,8 @@ export const protonGetStream = async function ({
const $$ = cheerio.load(data);
const htmlArray = $$('script:contains("decodeURIComponent")')
.text()
.split(' = ')?.[1]
?.split('protomovies')?.[0]
.split(" = ")?.[1]
?.split("protomovies")?.[0]
?.trim()
?.slice(0, -1); // remove the last character
// console.log('protonGetInfo', htmlArray);
@@ -88,40 +93,40 @@ export const protonGetStream = async function ({
const idList = [];
const id1080 = $('tr:contains("1080p")')
.find('button:contains("Info")')
.attr('id')
?.split('-')[1];
.attr("id")
?.split("-")[1];
if (id1080) {
idList.push({
id: id1080,
quality: '1080p',
quality: "1080p",
});
}
const id720 = $('tr:contains("720p")')
.find('button:contains("Info")')
.attr('id')
?.split('-')[1];
.attr("id")
?.split("-")[1];
if (id720) {
idList.push({
id: id720,
quality: '720p',
quality: "720p",
});
}
const id480 = $('tr:contains("480p")')
.find('button:contains("Info")')
.attr('id')
?.split('-')[1];
.attr("id")
?.split("-")[1];
if (id480) {
idList.push({
id: id480,
quality: '480p',
quality: "480p",
});
}
// console.log('idList', idList);
const baseUrl = link.split('/').slice(0, 3).join('/');
const baseUrl = link.split("/").slice(0, 3).join("/");
const secondIdList: {
quality: string;
@@ -129,72 +134,72 @@ export const protonGetStream = async function ({
}[] = [];
await Promise.all(
idList.slice(0, 2).map(async id => {
idList.slice(0, 2).map(async (id) => {
const formData = new URLSearchParams();
formData.append('downloadid', id.id);
formData.append('token', 'ok');
formData.append("downloadid", id.id);
formData.append("token", "ok");
const messageToken = generateMessageToken(baseUrl);
const uid = getOrCreateUID();
const idRes = await fetch(`${baseUrl}/ppd.php`, {
headers: {
accept: '*/*',
'accept-language': 'en-US,en;q=0.9,en-IN;q=0.8',
'cache-control': 'no-cache',
'content-type': 'application/x-www-form-urlencoded',
pragma: 'no-cache',
priority: 'u=1, i',
'sec-ch-ua':
accept: "*/*",
"accept-language": "en-US,en;q=0.9,en-IN;q=0.8",
"cache-control": "no-cache",
"content-type": "application/x-www-form-urlencoded",
pragma: "no-cache",
priority: "u=1, i",
"sec-ch-ua":
'"Chromium";v="136", "Microsoft Edge";v="136", "Not.A/Brand";v="99"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": '"Windows"',
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
cookie:
'ext_name=ojplmecpdpgccookcobabopnaifgidhf; tgInvite222=true; cf_clearance=3ynJv2B6lHMj3FCOqtfQaL7lTN4KC3xmPRMgcNtddAc-1748787867-1.2.1.1-SEIhLbWR3ehfib5Y3P5pjzj1Qu9wipc52Icv4AmNkztXn2pTXhjKgxXnvTuA2bNscgHuc1juXujAHteqY_vaMmy2C3djMWnJGzjje_XvXZXKht8rwHZt6sviq7KAYvrYZPTrATqENuopzmqmK6dDFS.CAnWHt0VDn8q06iLm5rYj1AXUo3qkV5p1Idx_25elWHYGG8yengBrQV1MYVM9LMdQqv44PXu69FZvNkgv.d6blCKyneJnoLkw4LHAccu.QRPbFwWqqTDyO9YTLRQW9w29bKghD3_JVxkz.qxpg5FbocJ3i6tJJy74SvROpYdpVUOn0fW1YgQ7RxYwhNoHpdTKy8pvmQJGRuSVW1GjO_k',
Referer: 'https://m3.protonmovies.top/download/',
'Referrer-Policy': 'strict-origin-when-cross-origin',
"ext_name=ojplmecpdpgccookcobabopnaifgidhf; tgInvite222=true; cf_clearance=3ynJv2B6lHMj3FCOqtfQaL7lTN4KC3xmPRMgcNtddAc-1748787867-1.2.1.1-SEIhLbWR3ehfib5Y3P5pjzj1Qu9wipc52Icv4AmNkztXn2pTXhjKgxXnvTuA2bNscgHuc1juXujAHteqY_vaMmy2C3djMWnJGzjje_XvXZXKht8rwHZt6sviq7KAYvrYZPTrATqENuopzmqmK6dDFS.CAnWHt0VDn8q06iLm5rYj1AXUo3qkV5p1Idx_25elWHYGG8yengBrQV1MYVM9LMdQqv44PXu69FZvNkgv.d6blCKyneJnoLkw4LHAccu.QRPbFwWqqTDyO9YTLRQW9w29bKghD3_JVxkz.qxpg5FbocJ3i6tJJy74SvROpYdpVUOn0fW1YgQ7RxYwhNoHpdTKy8pvmQJGRuSVW1GjO_k",
Referer: "https://m3.protonmovies.top/download/",
"Referrer-Policy": "strict-origin-when-cross-origin",
},
body: `downloadid=${id.id}&msg=${messageToken}&uid=${uid}&token=ok`,
method: 'POST',
method: "POST",
});
const idData = await idRes.text();
secondIdList.push({
quality: id.quality,
id: idData,
});
console.log('idData', idData);
}),
console.log("idData", idData);
})
);
await Promise.all(
secondIdList.map(async id => {
secondIdList.map(async (id) => {
const idRes = await axios.post(`${baseUrl}/tmp/${id.id}`);
if (idRes.data.ppd['gofile.io']) {
if (idRes.data.ppd["gofile.io"]) {
const goRes = await gofileExtracter(
idRes.data.ppd['gofile.io'].link.split('/').pop(),
idRes.data.ppd["gofile.io"].link.split("/").pop()
);
console.log('link', goRes.link);
console.log("link", goRes.link);
if (goRes.link) {
streamLinks.push({
link: goRes.link,
server: 'gofile ' + id.quality,
type: 'mkv',
server: "gofile " + id.quality,
type: "mkv",
headers: {
referer: 'https://gofile.io',
connection: 'keep-alive',
contentType: 'video/x-matroska',
cookie: 'accountToken=' + goRes.token,
referer: "https://gofile.io",
connection: "keep-alive",
contentType: "video/x-matroska",
cookie: "accountToken=" + goRes.token,
},
});
}
}
}),
})
);
return streamLinks;
} catch (e) {
console.log('proton get stream err', e);
console.log("proton get stream err", e);
return [];
}
};