mirror of
https://github.com/vega-org/vega-providers.git
synced 2026-04-17 15:41:45 +00:00
build
This commit is contained in:
22
dist/autoEmbed/catalog.js
vendored
Normal file
22
dist/autoEmbed/catalog.js
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.genres = exports.catalog = void 0;
|
||||||
|
exports.catalog = [
|
||||||
|
{
|
||||||
|
title: "Popular Movies",
|
||||||
|
filter: "/top/catalog/movie/top.json",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Popular TV Shows",
|
||||||
|
filter: "/top/catalog/series/top.json",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Featured Movies",
|
||||||
|
filter: "/imdbRating/catalog/movie/imdbRating.json",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Featured TV Shows",
|
||||||
|
filter: "/imdbRating/catalog/series/imdbRating.json",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
exports.genres = [];
|
||||||
89
dist/autoEmbed/meta.js
vendored
Normal file
89
dist/autoEmbed/meta.js
vendored
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getMeta = void 0;
|
||||||
|
const getMeta = async function ({ link, providerContext, }) {
|
||||||
|
const axios = providerContext.axios;
|
||||||
|
try {
|
||||||
|
console.log("all", link);
|
||||||
|
const res = await axios.get(link);
|
||||||
|
const data = res.data;
|
||||||
|
const meta = {
|
||||||
|
title: "",
|
||||||
|
synopsis: "",
|
||||||
|
image: "",
|
||||||
|
imdbId: data?.meta?.imdb_id || "",
|
||||||
|
type: data?.meta?.type || "movie",
|
||||||
|
};
|
||||||
|
const links = [];
|
||||||
|
let directLinks = [];
|
||||||
|
let season = new Map();
|
||||||
|
if (meta.type === "series") {
|
||||||
|
data?.meta?.videos?.map((video) => {
|
||||||
|
if (video?.season <= 0)
|
||||||
|
return;
|
||||||
|
if (!season.has(video?.season)) {
|
||||||
|
season.set(video?.season, []);
|
||||||
|
}
|
||||||
|
season.get(video?.season).push({
|
||||||
|
title: "Episode " + video?.episode,
|
||||||
|
type: "series",
|
||||||
|
link: JSON.stringify({
|
||||||
|
title: data?.meta?.name,
|
||||||
|
imdbId: data?.meta?.imdb_id,
|
||||||
|
season: video?.id?.split(":")[1],
|
||||||
|
episode: video?.id?.split(":")[2],
|
||||||
|
type: data?.meta?.type,
|
||||||
|
tmdbId: data?.meta?.moviedb_id?.toString() || "",
|
||||||
|
year: data?.meta?.year,
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
});
|
||||||
|
const keys = Array.from(season.keys());
|
||||||
|
keys.sort();
|
||||||
|
keys.map((key) => {
|
||||||
|
directLinks = season.get(key);
|
||||||
|
links.push({
|
||||||
|
title: `Season ${key}`,
|
||||||
|
directLinks: directLinks,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
console.log("all meta Mv🔥🔥", meta);
|
||||||
|
links.push({
|
||||||
|
title: data?.meta?.name,
|
||||||
|
directLinks: [
|
||||||
|
{
|
||||||
|
title: "Movie",
|
||||||
|
type: "movie",
|
||||||
|
link: JSON.stringify({
|
||||||
|
title: data?.meta?.name,
|
||||||
|
imdbId: data?.meta?.imdb_id,
|
||||||
|
season: "",
|
||||||
|
episode: "",
|
||||||
|
type: data?.meta?.type,
|
||||||
|
tmdbId: data?.meta?.moviedb_id?.toString() || "",
|
||||||
|
year: data?.meta?.year,
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
...meta,
|
||||||
|
linkList: links,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return {
|
||||||
|
title: "",
|
||||||
|
synopsis: "",
|
||||||
|
image: "",
|
||||||
|
imdbId: "",
|
||||||
|
type: "movie",
|
||||||
|
linkList: [],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getMeta = getMeta;
|
||||||
89
dist/autoEmbed/posts.js
vendored
Normal file
89
dist/autoEmbed/posts.js
vendored
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getSearchPosts = exports.getPosts = void 0;
|
||||||
|
const getPosts = async function ({ filter, signal, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const catalog = [];
|
||||||
|
const url = "https://cinemeta-catalogs.strem.io" + filter;
|
||||||
|
console.log("allGetPostUrl", url);
|
||||||
|
const res = await providerContext.axios.get(url, {
|
||||||
|
headers: providerContext.commonHeaders,
|
||||||
|
signal,
|
||||||
|
});
|
||||||
|
const data = res.data;
|
||||||
|
data?.metas.map((result) => {
|
||||||
|
const title = result?.name;
|
||||||
|
const id = result?.imdb_id || result?.id;
|
||||||
|
const type = result?.type;
|
||||||
|
const image = result?.poster;
|
||||||
|
if (id) {
|
||||||
|
catalog.push({
|
||||||
|
title: title,
|
||||||
|
link: `https://v3-cinemeta.strem.io/meta/${type}/${id}.json`,
|
||||||
|
image: image,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
console.log("catalog", catalog.length);
|
||||||
|
return catalog;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("AutoEmbed error ", err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getPosts = getPosts;
|
||||||
|
const getSearchPosts = async function ({ searchQuery, page,
|
||||||
|
// providerValue,
|
||||||
|
signal, providerContext, }) {
|
||||||
|
try {
|
||||||
|
if (page > 1) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
const catalog = [];
|
||||||
|
const url1 = `https://v3-cinemeta.strem.io/catalog/series/top/search=${encodeURI(searchQuery)}.json`;
|
||||||
|
const url2 = `https://v3-cinemeta.strem.io/catalog/movie/top/search=${encodeURI(searchQuery)}.json`;
|
||||||
|
const res = await providerContext.axios.get(url1, {
|
||||||
|
headers: providerContext.commonHeaders,
|
||||||
|
signal,
|
||||||
|
});
|
||||||
|
const data = res.data;
|
||||||
|
data?.metas.map((result) => {
|
||||||
|
const title = result.name || "";
|
||||||
|
const id = result?.imdb_id || result?.id;
|
||||||
|
const image = result?.poster;
|
||||||
|
const type = result?.type;
|
||||||
|
if (id) {
|
||||||
|
catalog.push({
|
||||||
|
title: title,
|
||||||
|
link: `https://v3-cinemeta.strem.io/meta/${type}/${id}.json`,
|
||||||
|
image: image,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const res2 = await providerContext.axios.get(url2, {
|
||||||
|
headers: providerContext.commonHeaders,
|
||||||
|
signal,
|
||||||
|
});
|
||||||
|
const data2 = res2.data;
|
||||||
|
data2?.metas.map((result) => {
|
||||||
|
const title = result?.name || "";
|
||||||
|
const id = result?.imdb_id || result?.id;
|
||||||
|
const image = result?.poster;
|
||||||
|
const type = result?.type;
|
||||||
|
if (id) {
|
||||||
|
catalog.push({
|
||||||
|
title: title,
|
||||||
|
link: `https://v3-cinemeta.strem.io/meta/${type}/${id}.json`,
|
||||||
|
image: image,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return catalog;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("AutoEmbed error ", err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getSearchPosts = getSearchPosts;
|
||||||
222
dist/autoEmbed/stream.js
vendored
Normal file
222
dist/autoEmbed/stream.js
vendored
Normal file
@@ -0,0 +1,222 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getStream = void 0;
|
||||||
|
exports.getRiveStream = getRiveStream;
|
||||||
|
const types_1 = require("../types");
|
||||||
|
const getStream = async ({ link: id, type, providerContext, }) => {
|
||||||
|
try {
|
||||||
|
const streams = [];
|
||||||
|
const { imdbId, season, episode, title, tmdbId, year } = JSON.parse(id);
|
||||||
|
await getRiveStream(tmdbId, episode, season, type, streams, providerContext);
|
||||||
|
return streams;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getStream = getStream;
|
||||||
|
async function getRiveStream(tmdId, episode, season, type, Streams, providerContext) {
|
||||||
|
const secret = generateSecretKey(Number(tmdId));
|
||||||
|
const servers = [
|
||||||
|
"flowcast",
|
||||||
|
"shadow",
|
||||||
|
"asiacloud",
|
||||||
|
"hindicast",
|
||||||
|
"anime",
|
||||||
|
"animez",
|
||||||
|
"guard",
|
||||||
|
"curve",
|
||||||
|
"hq",
|
||||||
|
"ninja",
|
||||||
|
"alpha",
|
||||||
|
"kaze",
|
||||||
|
"zenesis",
|
||||||
|
"genesis",
|
||||||
|
"zenith",
|
||||||
|
"ghost",
|
||||||
|
"halo",
|
||||||
|
"kinoecho",
|
||||||
|
"ee3",
|
||||||
|
"volt",
|
||||||
|
"putafilme",
|
||||||
|
"ophim",
|
||||||
|
"kage",
|
||||||
|
];
|
||||||
|
const baseUrl = await providerContext.getBaseUrl("rive");
|
||||||
|
const cors = process.env.CORS_PRXY ? process.env.CORS_PRXY + "?url=" : "";
|
||||||
|
console.log("CORS: " + cors);
|
||||||
|
const route = type === "series"
|
||||||
|
? `/api/backendfetch?requestID=tvVideoProvider&id=${tmdId}&season=${season}&episode=${episode}&secretKey=${secret}&service=`
|
||||||
|
: `/api/backendfetch?requestID=movieVideoProvider&id=${tmdId}&secretKey=${secret}&service=`;
|
||||||
|
const url = cors
|
||||||
|
? cors + encodeURIComponent(baseUrl + route)
|
||||||
|
: baseUrl + route;
|
||||||
|
await Promise.all(servers.map(async (server) => {
|
||||||
|
console.log("Rive: " + url + server);
|
||||||
|
try {
|
||||||
|
const res = await providerContext.axios.get(url + server, {
|
||||||
|
timeout: 4000,
|
||||||
|
headers: providerContext.commonHeaders,
|
||||||
|
});
|
||||||
|
const subtitles = [];
|
||||||
|
if (res.data?.data?.captions) {
|
||||||
|
res.data?.data?.captions.forEach((sub) => {
|
||||||
|
subtitles.push({
|
||||||
|
language: sub?.label?.slice(0, 2) || "Und",
|
||||||
|
uri: sub?.file,
|
||||||
|
title: sub?.label || "Undefined",
|
||||||
|
type: sub?.file?.endsWith(".vtt")
|
||||||
|
? types_1.TextTrackType.VTT
|
||||||
|
: types_1.TextTrackType.SUBRIP,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
res.data?.data?.sources.forEach((source) => {
|
||||||
|
Streams.push({
|
||||||
|
server: source?.source + "-" + source?.quality,
|
||||||
|
link: source?.url,
|
||||||
|
type: source?.format === "hls" ? "m3u8" : "mp4",
|
||||||
|
quality: source?.quality,
|
||||||
|
subtitles: subtitles,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
console.log(e);
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
function generateSecretKey(id) {
|
||||||
|
// Array of secret key fragments - updated array from the new implementation
|
||||||
|
const c = [
|
||||||
|
"Yhv40uKAZa",
|
||||||
|
"nn8YU4yBA",
|
||||||
|
"uNeH",
|
||||||
|
"ehK",
|
||||||
|
"jT0",
|
||||||
|
"n5G",
|
||||||
|
"99R",
|
||||||
|
"MvB1M",
|
||||||
|
"DQtPCh",
|
||||||
|
"GBRjk4k4I",
|
||||||
|
"CzIOoa95UT",
|
||||||
|
"BLE8s",
|
||||||
|
"GDZlc7",
|
||||||
|
"Fz45T",
|
||||||
|
"JW6lWn",
|
||||||
|
"DE3g4uw0i",
|
||||||
|
"18KxmYizv",
|
||||||
|
"8ji",
|
||||||
|
"JUDdNMnZ",
|
||||||
|
"oGpBippPgm",
|
||||||
|
"7De8Pg",
|
||||||
|
"Zv6",
|
||||||
|
"VHT9TVN",
|
||||||
|
"bYH6m",
|
||||||
|
"aK1",
|
||||||
|
"WcWH6jU",
|
||||||
|
"Q47YEMi4k",
|
||||||
|
"vRD3A",
|
||||||
|
"CGOsfJO",
|
||||||
|
"BLn8",
|
||||||
|
"RgK0drv7l",
|
||||||
|
"oPTfGCn3a",
|
||||||
|
"MkpMDkttW9",
|
||||||
|
"VNI1fPM",
|
||||||
|
"XNFi6",
|
||||||
|
"6cq",
|
||||||
|
"4LvTksXoEI",
|
||||||
|
"1rRa2KOZB0",
|
||||||
|
"zoOGRb8HT2",
|
||||||
|
"mhcXDtvz",
|
||||||
|
"NUmexFY2Ur",
|
||||||
|
"6BIMdvSZ",
|
||||||
|
"Tr0zU2vjRd",
|
||||||
|
"QPR",
|
||||||
|
"fhOqJR",
|
||||||
|
"R9VnFY",
|
||||||
|
"xkZ99D6S",
|
||||||
|
"umY7E",
|
||||||
|
"5Ds8qyDq",
|
||||||
|
"Cc6jy09y3",
|
||||||
|
"yvU3iR",
|
||||||
|
"Bg07zY",
|
||||||
|
"GccECglg",
|
||||||
|
"VYd",
|
||||||
|
"6vOiXqz",
|
||||||
|
"7xX",
|
||||||
|
"UdRrbEzF",
|
||||||
|
"fE6wc",
|
||||||
|
"BUd25Rb",
|
||||||
|
"lxq5Zum89o",
|
||||||
|
];
|
||||||
|
// Handle undefined input
|
||||||
|
if (id === undefined) {
|
||||||
|
return "rive";
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
let fragment, insertPos;
|
||||||
|
// Convert input to string
|
||||||
|
const idStr = String(id);
|
||||||
|
// Updated string hash function to match the new implementation
|
||||||
|
/* eslint-disable no-bitwise */
|
||||||
|
const generateStringHash = function (input) {
|
||||||
|
input = String(input);
|
||||||
|
let hash = 0;
|
||||||
|
for (let i = 0; i < input.length; i++) {
|
||||||
|
const char = input.charCodeAt(i);
|
||||||
|
hash =
|
||||||
|
((char + (hash << 6) + (hash << 16) - hash) ^ (char << i % 5)) >>> 0;
|
||||||
|
}
|
||||||
|
hash ^= hash >>> 13;
|
||||||
|
hash = (1540483477 * hash) >>> 0;
|
||||||
|
return (hash ^= hash >>> 15).toString(16).padStart(8, "0");
|
||||||
|
};
|
||||||
|
// Updated MurmurHash-like function to match the new implementation
|
||||||
|
const applyMurmurHash = function (input) {
|
||||||
|
const str = String(input);
|
||||||
|
let hash = 3735928559 ^ str.length;
|
||||||
|
for (let i = 0; i < str.length; i++) {
|
||||||
|
let char = str.charCodeAt(i);
|
||||||
|
char ^= ((i + 31) * 131) & 255;
|
||||||
|
hash =
|
||||||
|
(668265261 *
|
||||||
|
(hash = (((hash << 7) | (hash >>> 25)) >>> 0) ^ char)) >>>
|
||||||
|
0;
|
||||||
|
}
|
||||||
|
hash ^= hash >>> 16;
|
||||||
|
hash = (2246822507 * hash) >>> 0;
|
||||||
|
hash ^= hash >>> 13;
|
||||||
|
hash = (3266489909 * hash) >>> 0;
|
||||||
|
return (hash ^= hash >>> 16).toString(16).padStart(8, "0");
|
||||||
|
};
|
||||||
|
/* eslint-enable no-bitwise */
|
||||||
|
// Generate the encoded hash using the new implementation
|
||||||
|
const encodedHash = btoa(applyMurmurHash(generateStringHash(idStr)));
|
||||||
|
// Different handling for non-numeric vs numeric inputs
|
||||||
|
if (isNaN(Number(id))) {
|
||||||
|
// For non-numeric inputs, sum the character codes
|
||||||
|
const charSum = idStr
|
||||||
|
.split("")
|
||||||
|
.reduce((sum, char) => sum + char.charCodeAt(0), 0);
|
||||||
|
// Select array element or fallback to base64 encoded input
|
||||||
|
fragment = c[charSum % c.length] || btoa(idStr);
|
||||||
|
// Calculate insertion position
|
||||||
|
insertPos = Math.floor((charSum % encodedHash.length) / 2);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// For numeric inputs, use the number directly
|
||||||
|
const numId = Number(id);
|
||||||
|
fragment = c[numId % c.length] || btoa(idStr);
|
||||||
|
// Calculate insertion position
|
||||||
|
insertPos = Math.floor((numId % encodedHash.length) / 2);
|
||||||
|
}
|
||||||
|
// Construct the final key by inserting the selected value into the base64 string
|
||||||
|
return (encodedHash.slice(0, insertPos) + fragment + encodedHash.slice(insertPos));
|
||||||
|
}
|
||||||
|
catch (error) {
|
||||||
|
// Return fallback value if any errors occur
|
||||||
|
return "topSecret";
|
||||||
|
}
|
||||||
|
}
|
||||||
22
dist/cinemaLuxe/catalog.js
vendored
Normal file
22
dist/cinemaLuxe/catalog.js
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.genres = exports.catalog = void 0;
|
||||||
|
exports.catalog = [
|
||||||
|
{
|
||||||
|
title: "Trending",
|
||||||
|
filter: "/genre/latest-trending-releases/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Netflix",
|
||||||
|
filter: "/network/netflix/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Amazon Prime",
|
||||||
|
filter: "/network/prime-video/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Animation",
|
||||||
|
filter: "/genre/anime/",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
exports.genres = [];
|
||||||
64
dist/cinemaLuxe/episodes.js
vendored
Normal file
64
dist/cinemaLuxe/episodes.js
vendored
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getEpisodes = void 0;
|
||||||
|
const getEpisodes = async function ({ url, providerContext, }) {
|
||||||
|
try {
|
||||||
|
if (!url.includes("luxelinks") || url.includes("luxecinema")) {
|
||||||
|
const res = await providerContext.axios.get(url, {
|
||||||
|
headers: providerContext.commonHeaders,
|
||||||
|
});
|
||||||
|
const data = res.data;
|
||||||
|
const encodedLink = data.match(/"link":"([^"]+)"/)?.[1];
|
||||||
|
if (encodedLink) {
|
||||||
|
url = encodedLink ? atob(encodedLink) : url;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
const redirectUrlRes = await fetch("https://ext.8man.me/api/cinemaluxe", {
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
body: JSON.stringify({ url }),
|
||||||
|
});
|
||||||
|
const redirectUrl = await redirectUrlRes.json();
|
||||||
|
url = redirectUrl?.redirectUrl || url;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const res = await providerContext.axios.get(url, {
|
||||||
|
headers: providerContext.commonHeaders,
|
||||||
|
});
|
||||||
|
const html = res.data;
|
||||||
|
let $ = providerContext.cheerio.load(html);
|
||||||
|
const episodeLinks = [];
|
||||||
|
if (url.includes("luxedrive")) {
|
||||||
|
episodeLinks.push({
|
||||||
|
title: "Movie",
|
||||||
|
link: url,
|
||||||
|
});
|
||||||
|
return episodeLinks;
|
||||||
|
}
|
||||||
|
$("a.maxbutton-4,a.maxbutton,.maxbutton-hubcloud,.ep-simple-button").map((i, element) => {
|
||||||
|
const title = $(element).text()?.trim();
|
||||||
|
const link = $(element).attr("href");
|
||||||
|
if (title &&
|
||||||
|
link &&
|
||||||
|
!title.includes("Batch") &&
|
||||||
|
!title.toLowerCase().includes("zip")) {
|
||||||
|
episodeLinks.push({
|
||||||
|
title: title
|
||||||
|
.replace(/\(\d{4}\)/, "")
|
||||||
|
.replace("Download", "Movie")
|
||||||
|
.replace("⚡", "")
|
||||||
|
.trim(),
|
||||||
|
link,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return episodeLinks;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("cl episode links", err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getEpisodes = getEpisodes;
|
||||||
64
dist/cinemaLuxe/meta.js
vendored
Normal file
64
dist/cinemaLuxe/meta.js
vendored
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getMeta = void 0;
|
||||||
|
const getMeta = async function ({ link, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const url = link;
|
||||||
|
const res = await providerContext.axios.get(url, {
|
||||||
|
headers: providerContext.commonHeaders,
|
||||||
|
});
|
||||||
|
const data = res.data;
|
||||||
|
const $ = providerContext.cheerio.load(data);
|
||||||
|
const type = url.includes("tvshows") ? "series" : "movie";
|
||||||
|
const imdbId = "";
|
||||||
|
const title = url.split("/")[4].replace(/-/g, " ");
|
||||||
|
const image = $(".g-item").find("a").attr("href") || "";
|
||||||
|
const synopsis = $(".wp-content").text().trim();
|
||||||
|
const tags = $(".sgeneros")
|
||||||
|
.children()
|
||||||
|
.map((i, element) => $(element).text())
|
||||||
|
.get()
|
||||||
|
.slice(3);
|
||||||
|
const rating = Number($("#repimdb").find("strong").text())
|
||||||
|
.toFixed(1)
|
||||||
|
.toString();
|
||||||
|
const links = [];
|
||||||
|
$(".mb-center.maxbutton-5-center,.ep-button-container").map((i, element) => {
|
||||||
|
const title = $(element)
|
||||||
|
.text()
|
||||||
|
.replace("\u2b07Download", "")
|
||||||
|
.replace("\u2b07 Download", "")
|
||||||
|
.trim();
|
||||||
|
const link = $(element).find("a").attr("href");
|
||||||
|
if (title && link) {
|
||||||
|
links.push({
|
||||||
|
title,
|
||||||
|
episodesLink: link,
|
||||||
|
quality: title?.match(/\d+P\b/)?.[0].replace("P", "p") || "",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return {
|
||||||
|
title,
|
||||||
|
tags,
|
||||||
|
rating,
|
||||||
|
synopsis,
|
||||||
|
image,
|
||||||
|
imdbId,
|
||||||
|
type,
|
||||||
|
linkList: links,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return {
|
||||||
|
title: "",
|
||||||
|
synopsis: "",
|
||||||
|
image: "",
|
||||||
|
imdbId: "",
|
||||||
|
type: "movie",
|
||||||
|
linkList: [],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getMeta = getMeta;
|
||||||
55
dist/cinemaLuxe/posts.js
vendored
Normal file
55
dist/cinemaLuxe/posts.js
vendored
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getSearchPosts = exports.getPosts = void 0;
|
||||||
|
const getPosts = async function ({ filter, page, signal, providerContext, }) {
|
||||||
|
const baseUrl = await providerContext.getBaseUrl("cinemaLuxe");
|
||||||
|
const url = `${baseUrl + filter}page/${page}/`;
|
||||||
|
return posts({ url, signal, providerContext });
|
||||||
|
};
|
||||||
|
exports.getPosts = getPosts;
|
||||||
|
const getSearchPosts = async function ({ searchQuery, page, signal, providerContext, }) {
|
||||||
|
const baseUrl = await providerContext.getBaseUrl("cinemaLuxe");
|
||||||
|
const url = `${baseUrl}/page/${page}/?s=${searchQuery}`;
|
||||||
|
return posts({ url, signal, providerContext });
|
||||||
|
};
|
||||||
|
exports.getSearchPosts = getSearchPosts;
|
||||||
|
async function posts({ url, signal, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const res = await fetch(url, {
|
||||||
|
headers: providerContext.commonHeaders,
|
||||||
|
signal,
|
||||||
|
});
|
||||||
|
const data = await res.text();
|
||||||
|
const $ = providerContext.cheerio.load(data);
|
||||||
|
const catalog = [];
|
||||||
|
$(".item.tvshows,.item.movies").map((i, element) => {
|
||||||
|
const title = $(element).find(".poster").find("img").attr("alt");
|
||||||
|
const link = $(element).find(".poster").find("a").attr("href");
|
||||||
|
const image = $(element).find(".poster").find("img").attr("data-src");
|
||||||
|
if (title && link && image) {
|
||||||
|
catalog.push({
|
||||||
|
title: title,
|
||||||
|
link: link,
|
||||||
|
image: image,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$(".result-item").map((i, element) => {
|
||||||
|
const title = $(element).find(".thumbnail").find("img").attr("alt");
|
||||||
|
const link = $(element).find(".thumbnail").find("a").attr("href");
|
||||||
|
const image = $(element).find(".thumbnail").find("img").attr("data-src");
|
||||||
|
if (title && link && image) {
|
||||||
|
catalog.push({
|
||||||
|
title: title,
|
||||||
|
link: link,
|
||||||
|
image: image,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return catalog;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("cinemaluxe error ", err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
36
dist/cinemaLuxe/stream.js
vendored
Normal file
36
dist/cinemaLuxe/stream.js
vendored
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getStream = void 0;
|
||||||
|
const getStream = async ({ link, signal, providerContext, }) => {
|
||||||
|
try {
|
||||||
|
let newLink = link;
|
||||||
|
if (link.includes("luxedrive")) {
|
||||||
|
const res = await providerContext.axios.get(link);
|
||||||
|
const $ = providerContext.cheerio.load(res.data);
|
||||||
|
const hubcloudLink = $("a.btn.hubcloud").attr("href");
|
||||||
|
if (hubcloudLink) {
|
||||||
|
newLink = hubcloudLink;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
const gdFlixLink = $("a.btn.gdflix").attr("href");
|
||||||
|
if (gdFlixLink) {
|
||||||
|
newLink = gdFlixLink;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (newLink.includes("gdflix")) {
|
||||||
|
const sreams = await providerContext.extractors.gdFlixExtracter(newLink, signal);
|
||||||
|
return sreams;
|
||||||
|
}
|
||||||
|
const res2 = await providerContext.axios.get(newLink, { signal });
|
||||||
|
const data2 = res2.data;
|
||||||
|
const hcLink = data2.match(/location\.replace\('([^']+)'/)?.[1] || newLink;
|
||||||
|
const hubCloudLinks = await providerContext.extractors.hubcloudExtracter(hcLink.includes("https://hubcloud") ? hcLink : newLink, signal);
|
||||||
|
return hubCloudLinks;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getStream = getStream;
|
||||||
14
dist/dooflix/catalog.js
vendored
Normal file
14
dist/dooflix/catalog.js
vendored
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.genres = exports.catalog = void 0;
|
||||||
|
exports.catalog = [
|
||||||
|
{
|
||||||
|
title: "Series",
|
||||||
|
filter: "/rest-api//v130/tvseries",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Movies",
|
||||||
|
filter: "/rest-api//v130/movies",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
exports.genres = [];
|
||||||
79
dist/dooflix/meta.js
vendored
Normal file
79
dist/dooflix/meta.js
vendored
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getMeta = void 0;
|
||||||
|
const headers = {
|
||||||
|
"Accept-Encoding": "gzip",
|
||||||
|
"API-KEY": "2pm95lc6prpdbk0ppji9rsqo",
|
||||||
|
Connection: "Keep-Alive",
|
||||||
|
"If-Modified-Since": "Wed, 14 Aug 2024 13:00:04 GMT",
|
||||||
|
"User-Agent": "okhttp/3.14.9",
|
||||||
|
};
|
||||||
|
const getMeta = async function ({ link, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const { axios } = providerContext;
|
||||||
|
const res = await axios.get(link, { headers });
|
||||||
|
const resData = res.data;
|
||||||
|
const jsonStart = resData?.indexOf("{");
|
||||||
|
const jsonEnd = resData?.lastIndexOf("}") + 1;
|
||||||
|
const data = JSON?.parse(resData?.substring(jsonStart, jsonEnd))?.title
|
||||||
|
? JSON?.parse(resData?.substring(jsonStart, jsonEnd))
|
||||||
|
: resData;
|
||||||
|
const title = data?.title || "";
|
||||||
|
const synopsis = data?.description || "";
|
||||||
|
const image = data?.poster_url || "";
|
||||||
|
const cast = data?.cast || [];
|
||||||
|
const rating = data?.imdb_rating || "";
|
||||||
|
const type = Number(data?.is_tvseries) ? "series" : "movie";
|
||||||
|
const tags = data?.genre?.map((genre) => genre?.name) || [];
|
||||||
|
const links = [];
|
||||||
|
if (type === "series") {
|
||||||
|
data?.season?.map((season) => {
|
||||||
|
const title = season?.seasons_name || "";
|
||||||
|
const directLinks = season?.episodes?.map((episode) => ({
|
||||||
|
title: episode?.episodes_name,
|
||||||
|
link: episode?.file_url,
|
||||||
|
})) || [];
|
||||||
|
links.push({
|
||||||
|
title: title,
|
||||||
|
directLinks: directLinks,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
data?.videos?.map((video) => {
|
||||||
|
links.push({
|
||||||
|
title: title + " " + video?.label,
|
||||||
|
directLinks: [
|
||||||
|
{
|
||||||
|
title: "Play",
|
||||||
|
link: video?.file_url,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
image: image?.includes("https") ? image : image?.replace("http", "https"),
|
||||||
|
synopsis: synopsis,
|
||||||
|
title: title,
|
||||||
|
rating: rating,
|
||||||
|
imdbId: "",
|
||||||
|
cast: cast,
|
||||||
|
tags: tags,
|
||||||
|
type: type,
|
||||||
|
linkList: links,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return {
|
||||||
|
title: "",
|
||||||
|
synopsis: "",
|
||||||
|
image: "",
|
||||||
|
imdbId: "",
|
||||||
|
type: "movie",
|
||||||
|
linkList: [],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getMeta = getMeta;
|
||||||
140
dist/dooflix/posts.js
vendored
Normal file
140
dist/dooflix/posts.js
vendored
Normal file
@@ -0,0 +1,140 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getSearchPosts = exports.getPosts = void 0;
|
||||||
|
const headers = {
|
||||||
|
"Accept-Encoding": "gzip",
|
||||||
|
"API-KEY": "2pm95lc6prpdbk0ppji9rsqo",
|
||||||
|
Connection: "Keep-Alive",
|
||||||
|
"If-Modified-Since": "Wed, 14 Aug 2024 13:00:04 GMT",
|
||||||
|
"User-Agent": "okhttp/3.14.9",
|
||||||
|
};
|
||||||
|
const getPosts = async function ({ filter, page, signal, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const { axios, getBaseUrl } = providerContext;
|
||||||
|
const baseUrl = await getBaseUrl("dooflix");
|
||||||
|
const catalog = [];
|
||||||
|
const url = `${baseUrl + filter + `?page=${page}`}`;
|
||||||
|
const res = await axios.get(url, { headers, signal });
|
||||||
|
const resData = res.data;
|
||||||
|
if (!resData || typeof resData !== "string") {
|
||||||
|
console.warn("Unexpected response format from dooflix API");
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
let data;
|
||||||
|
try {
|
||||||
|
const jsonStart = resData.indexOf("[");
|
||||||
|
const jsonEnd = resData.lastIndexOf("]") + 1;
|
||||||
|
if (jsonStart === -1 || jsonEnd <= jsonStart) {
|
||||||
|
// If we can't find valid JSON array markers, try parsing the entire response
|
||||||
|
data = JSON.parse(resData);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
const jsonSubstring = resData.substring(jsonStart, jsonEnd);
|
||||||
|
const parsedArray = JSON.parse(jsonSubstring);
|
||||||
|
data = parsedArray.length > 0 ? parsedArray : resData;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (parseError) {
|
||||||
|
console.error("Error parsing dooflix response:", parseError);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
if (!Array.isArray(data)) {
|
||||||
|
console.warn("Unexpected data format from dooflix API");
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
data.forEach((result) => {
|
||||||
|
const id = result?.videos_id;
|
||||||
|
if (!id)
|
||||||
|
return;
|
||||||
|
const type = !result?.is_tvseries ? "tvseries" : "movie";
|
||||||
|
const link = `${baseUrl}/rest-api//v130/single_details?type=${type}&id=${id}`;
|
||||||
|
const thumbnailUrl = result?.thumbnail_url;
|
||||||
|
const image = thumbnailUrl?.includes("https")
|
||||||
|
? thumbnailUrl
|
||||||
|
: thumbnailUrl?.replace("http", "https");
|
||||||
|
catalog.push({
|
||||||
|
title: result?.title || "",
|
||||||
|
link,
|
||||||
|
image,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return catalog;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("dooflix error:", err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getPosts = getPosts;
|
||||||
|
const getSearchPosts = async function ({ searchQuery, page, providerContext, signal, }) {
|
||||||
|
try {
|
||||||
|
if (page > 1) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
const { axios, getBaseUrl } = providerContext;
|
||||||
|
const catalog = [];
|
||||||
|
const baseUrl = await getBaseUrl("dooflix");
|
||||||
|
const url = `${baseUrl}/rest-api//v130/search?q=${searchQuery}&type=movietvserieslive&range_to=0&range_from=0&tv_category_id=0&genre_id=0&country_id=0`;
|
||||||
|
const res = await axios.get(url, { headers, signal });
|
||||||
|
const resData = res.data;
|
||||||
|
if (!resData || typeof resData !== "string") {
|
||||||
|
console.warn("Unexpected search response format from dooflix API");
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
let data;
|
||||||
|
try {
|
||||||
|
const jsonStart = resData.indexOf("{");
|
||||||
|
const jsonEnd = resData.lastIndexOf("}") + 1;
|
||||||
|
if (jsonStart === -1 || jsonEnd <= jsonStart) {
|
||||||
|
data = resData;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
const jsonSubstring = resData.substring(jsonStart, jsonEnd);
|
||||||
|
const parsedData = JSON.parse(jsonSubstring);
|
||||||
|
data = parsedData?.movie ? parsedData : resData;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (parseError) {
|
||||||
|
console.error("Error parsing dooflix search response:", parseError);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
// Process movies
|
||||||
|
data?.movie?.forEach((result) => {
|
||||||
|
const id = result?.videos_id;
|
||||||
|
if (!id)
|
||||||
|
return;
|
||||||
|
const link = `${baseUrl}/rest-api//v130/single_details?type=movie&id=${id}`;
|
||||||
|
const thumbnailUrl = result?.thumbnail_url;
|
||||||
|
const image = thumbnailUrl?.includes("https")
|
||||||
|
? thumbnailUrl
|
||||||
|
: thumbnailUrl?.replace("http", "https");
|
||||||
|
catalog.push({
|
||||||
|
title: result?.title || "",
|
||||||
|
link,
|
||||||
|
image,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
// Process TV series
|
||||||
|
data?.tvseries?.forEach((result) => {
|
||||||
|
const id = result?.videos_id;
|
||||||
|
if (!id)
|
||||||
|
return;
|
||||||
|
const link = `${baseUrl}/rest-api//v130/single_details?type=tvseries&id=${id}`;
|
||||||
|
const thumbnailUrl = result?.thumbnail_url;
|
||||||
|
const image = thumbnailUrl?.includes("https")
|
||||||
|
? thumbnailUrl
|
||||||
|
: thumbnailUrl?.replace("http", "https");
|
||||||
|
catalog.push({
|
||||||
|
title: result?.title || "",
|
||||||
|
link,
|
||||||
|
image,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return catalog;
|
||||||
|
}
|
||||||
|
catch (error) {
|
||||||
|
console.error("dooflix search error:", error);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getSearchPosts = getSearchPosts;
|
||||||
26
dist/dooflix/stream.js
vendored
Normal file
26
dist/dooflix/stream.js
vendored
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getStream = void 0;
|
||||||
|
const getStream = async function ({ link, }) {
|
||||||
|
try {
|
||||||
|
const streams = [];
|
||||||
|
streams.push({
|
||||||
|
server: "Dooflix",
|
||||||
|
link: link,
|
||||||
|
type: "m3u8",
|
||||||
|
headers: {
|
||||||
|
Connection: "Keep-Alive",
|
||||||
|
"User-Agent": "Mozilla/5.0 (WindowsNT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.37",
|
||||||
|
Referer: "https://molop.art/",
|
||||||
|
Cookie: "cf_clearance=M2_2Hy4lKRy_ruRX3dzOgm3iho1FHe2DUC1lq28BUtI-1737377622-1.2.1.1-6R8RaH94._H2BuNuotsjTZ3fAF6cLwPII0guemu9A5Xa46lpCJPuELycojdREwoonYS2kRTYcZ9_1c4h4epi2LtDvMM9jIoOZKE9pIdWa30peM1hRMpvffTjGUCraHsJNCJez8S_QZ6XkkdP7GeQ5iwiYaI6Grp6qSJWoq0Hj8lS7EITZ1LzyrALI6iLlYjgLmgLGa1VuhORWJBN8ZxrJIZ_ba_pqbrR9fjnyToqxZ0XQaZfk1d3rZyNWoZUjI98GoAxVjnKtcBQQG6b2jYPJuMbbYraGoa54N7E7BR__7o",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
console.log("doo streams", streams);
|
||||||
|
return streams;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getStream = getStream;
|
||||||
62
dist/drive/catalog.js
vendored
62
dist/drive/catalog.js
vendored
@@ -1,63 +1,63 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.driveGenresList = exports.driveCatalog = void 0;
|
exports.genres = exports.catalog = void 0;
|
||||||
exports.driveCatalog = [
|
exports.catalog = [
|
||||||
{
|
{
|
||||||
title: 'Latest',
|
title: "Latest",
|
||||||
filter: '',
|
filter: "",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Anime',
|
title: "Anime",
|
||||||
filter: 'category/anime/',
|
filter: "category/anime/",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Netflix',
|
title: "Netflix",
|
||||||
filter: 'category/netflix/',
|
filter: "category/netflix/",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '4K',
|
title: "4K",
|
||||||
filter: 'category/2160p-4k/',
|
filter: "category/2160p-4k/",
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
exports.driveGenresList = [
|
exports.genres = [
|
||||||
{
|
{
|
||||||
title: 'Action',
|
title: "Action",
|
||||||
filter: '/category/action',
|
filter: "/category/action",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Crime',
|
title: "Crime",
|
||||||
filter: '/category/crime',
|
filter: "/category/crime",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Comedy',
|
title: "Comedy",
|
||||||
filter: '/category/comedy',
|
filter: "/category/comedy",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Drama',
|
title: "Drama",
|
||||||
filter: '/category/drama',
|
filter: "/category/drama",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Horror',
|
title: "Horror",
|
||||||
filter: '/category/horror',
|
filter: "/category/horror",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Family',
|
title: "Family",
|
||||||
filter: '/category/family',
|
filter: "/category/family",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Sci-Fi',
|
title: "Sci-Fi",
|
||||||
filter: '/category/sifi',
|
filter: "/category/sifi",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Thriller',
|
title: "Thriller",
|
||||||
filter: '/category/triller',
|
filter: "/category/triller",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Romance',
|
title: "Romance",
|
||||||
filter: '/category/romance',
|
filter: "/category/romance",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Fight',
|
title: "Fight",
|
||||||
filter: '/category/fight',
|
filter: "/category/fight",
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|||||||
34
dist/drive/episodes.js
vendored
Normal file
34
dist/drive/episodes.js
vendored
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getEpisodes = void 0;
|
||||||
|
const getEpisodes = async function ({ url, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const { axios, cheerio } = providerContext;
|
||||||
|
const res = await axios.get(url);
|
||||||
|
const html = res.data;
|
||||||
|
let $ = cheerio.load(html);
|
||||||
|
const episodeLinks = [];
|
||||||
|
$('a:contains("HubCloud")').map((i, element) => {
|
||||||
|
const title = $(element).parent().prev().text();
|
||||||
|
const link = $(element).attr("href");
|
||||||
|
if (link && (title.includes("Ep") || title.includes("Download"))) {
|
||||||
|
episodeLinks.push({
|
||||||
|
title: title.includes("Download") ? "Play" : title,
|
||||||
|
link,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// console.log(episodeLinks);
|
||||||
|
return episodeLinks;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
title: "Server 1",
|
||||||
|
link: url,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getEpisodes = getEpisodes;
|
||||||
72
dist/drive/meta.js
vendored
Normal file
72
dist/drive/meta.js
vendored
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getMeta = void 0;
|
||||||
|
const getMeta = async function ({ link, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const { axios, cheerio } = providerContext;
|
||||||
|
const url = link;
|
||||||
|
const res = await axios.get(url);
|
||||||
|
const data = res.data;
|
||||||
|
const $ = cheerio.load(data);
|
||||||
|
const type = $(".left-wrapper")
|
||||||
|
.text()
|
||||||
|
.toLocaleLowerCase()
|
||||||
|
.includes("movie name")
|
||||||
|
? "movie"
|
||||||
|
: "series";
|
||||||
|
const imdbId = $('a:contains("IMDb")').attr("href")?.split("/")[4] || "";
|
||||||
|
const title = $(".left-wrapper").find('strong:contains("Name")').next().text() ||
|
||||||
|
$(".left-wrapper")
|
||||||
|
.find('strong:contains("Name"),h5:contains("Name")')
|
||||||
|
.find("span:first")
|
||||||
|
.text();
|
||||||
|
const synopsis = $(".left-wrapper")
|
||||||
|
.find('h2:contains("Storyline"),h3:contains("Storyline"),h5:contains("Storyline"),h4:contains("Storyline"),h4:contains("STORYLINE")')
|
||||||
|
.next()
|
||||||
|
.text() ||
|
||||||
|
$(".ipc-html-content-inner-div").text() ||
|
||||||
|
"";
|
||||||
|
const image = $("img.entered.lazyloaded,img.entered,img.litespeed-loaded").attr("src") ||
|
||||||
|
$("img.aligncenter").attr("src") ||
|
||||||
|
"";
|
||||||
|
// Links
|
||||||
|
const links = [];
|
||||||
|
$('a:contains("1080")a:not(:contains("Zip")),a:contains("720")a:not(:contains("Zip")),a:contains("480")a:not(:contains("Zip")),a:contains("2160")a:not(:contains("Zip")),a:contains("4k")a:not(:contains("Zip"))').map((i, element) => {
|
||||||
|
const title = $(element).parent("h5").prev().text();
|
||||||
|
const episodesLink = $(element).attr("href");
|
||||||
|
const quality = title.match(/\b(480p|720p|1080p|2160p)\b/i)?.[0] || "";
|
||||||
|
if (episodesLink && title) {
|
||||||
|
links.push({
|
||||||
|
title,
|
||||||
|
episodesLink: type === "series" ? episodesLink : "",
|
||||||
|
directLinks: type === "movie"
|
||||||
|
? [{ title: "Movie", link: episodesLink, type: "movie" }]
|
||||||
|
: [],
|
||||||
|
quality: quality,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// console.log('drive meta', title, synopsis, image, imdbId, type, links);
|
||||||
|
console.log("drive meta", links, type);
|
||||||
|
return {
|
||||||
|
title,
|
||||||
|
synopsis,
|
||||||
|
image,
|
||||||
|
imdbId,
|
||||||
|
type,
|
||||||
|
linkList: links,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return {
|
||||||
|
title: "",
|
||||||
|
synopsis: "",
|
||||||
|
image: "",
|
||||||
|
imdbId: "",
|
||||||
|
type: "movie",
|
||||||
|
linkList: [],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getMeta = getMeta;
|
||||||
45
dist/drive/posts.js
vendored
Normal file
45
dist/drive/posts.js
vendored
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getSearchPosts = exports.getPosts = void 0;
|
||||||
|
const getPosts = async function ({ filter, page, signal, providerContext, }) {
|
||||||
|
const { getBaseUrl } = providerContext;
|
||||||
|
const baseUrl = await getBaseUrl("drive");
|
||||||
|
const url = `${baseUrl + filter}/page/${page}/`;
|
||||||
|
return posts({ url, signal, providerContext });
|
||||||
|
};
|
||||||
|
exports.getPosts = getPosts;
|
||||||
|
const getSearchPosts = async function ({ searchQuery, page, signal, providerContext, }) {
|
||||||
|
const { getBaseUrl } = providerContext;
|
||||||
|
const baseUrl = await getBaseUrl("drive");
|
||||||
|
const url = `${baseUrl}page/${page}/?s=${searchQuery}`;
|
||||||
|
return posts({ url, signal, providerContext });
|
||||||
|
};
|
||||||
|
exports.getSearchPosts = getSearchPosts;
|
||||||
|
async function posts({ url, signal, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const { cheerio } = providerContext;
|
||||||
|
const res = await fetch(url, { signal });
|
||||||
|
const data = await res.text();
|
||||||
|
const $ = cheerio.load(data);
|
||||||
|
const catalog = [];
|
||||||
|
$(".recent-movies")
|
||||||
|
.children()
|
||||||
|
.map((i, element) => {
|
||||||
|
const title = $(element).find("figure").find("img").attr("alt");
|
||||||
|
const link = $(element).find("a").attr("href");
|
||||||
|
const image = $(element).find("figure").find("img").attr("src");
|
||||||
|
if (title && link && image) {
|
||||||
|
catalog.push({
|
||||||
|
title: title.replace("Download", "").trim(),
|
||||||
|
link: link,
|
||||||
|
image: image,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return catalog;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("drive error ", err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
33
dist/drive/stream.js
vendored
Normal file
33
dist/drive/stream.js
vendored
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getStream = void 0;
|
||||||
|
const getStream = async function ({ link: url, type, signal, providerContext, }) {
|
||||||
|
const headers = providerContext.commonHeaders;
|
||||||
|
try {
|
||||||
|
if (type === "movie") {
|
||||||
|
const res = await providerContext.axios.get(url, { headers });
|
||||||
|
const html = res.data;
|
||||||
|
const $ = providerContext.cheerio.load(html);
|
||||||
|
const link = $('a:contains("HubCloud")').attr("href");
|
||||||
|
url = link || url;
|
||||||
|
}
|
||||||
|
const res = await providerContext.axios.get(url, { headers });
|
||||||
|
let redirectUrl = res.data.match(/<meta\s+http-equiv="refresh"\s+content="[^"]*?;\s*url=([^"]+)"\s*\/?>/i)?.[1];
|
||||||
|
if (url.includes("/archives/")) {
|
||||||
|
redirectUrl = res.data.match(/<a\s+[^>]*href="(https:\/\/hubcloud\.[^\/]+\/[^"]+)"/i)?.[1];
|
||||||
|
}
|
||||||
|
if (!redirectUrl) {
|
||||||
|
return await providerContext.extractors.hubcloudExtracter(url, signal);
|
||||||
|
}
|
||||||
|
const res2 = await providerContext.axios.get(redirectUrl, { headers });
|
||||||
|
const data = res2.data;
|
||||||
|
const $ = providerContext.cheerio.load(data);
|
||||||
|
const hubcloudLink = $(".fa-file-download").parent().attr("href");
|
||||||
|
return await providerContext.extractors.hubcloudExtracter(hubcloudLink?.includes("https://hubcloud") ? hubcloudLink : redirectUrl, signal);
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("Movies Drive err", err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getStream = getStream;
|
||||||
18
dist/filmyfly/catalog.js
vendored
Normal file
18
dist/filmyfly/catalog.js
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.genres = exports.catalog = void 0;
|
||||||
|
exports.catalog = [
|
||||||
|
{
|
||||||
|
title: "Home",
|
||||||
|
filter: "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Web Series",
|
||||||
|
filter: "/page-cat/42/Web-Series.html",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Hollywood",
|
||||||
|
filter: "/page-cat/9/New-Hollywood-Hindi-Dubbed-Movie-2016-2025.html",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
exports.genres = [];
|
||||||
33
dist/filmyfly/episodes.js
vendored
Normal file
33
dist/filmyfly/episodes.js
vendored
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getEpisodes = void 0;
|
||||||
|
const getEpisodes = async function ({ url, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const headers = providerContext.commonHeaders;
|
||||||
|
const { axios, cheerio } = providerContext;
|
||||||
|
const res = await axios.get(url, { headers });
|
||||||
|
const data = res.data;
|
||||||
|
const $ = cheerio.load(data);
|
||||||
|
const episodeLinks = [];
|
||||||
|
$(".dlink.dl").map((i, element) => {
|
||||||
|
const title = $(element)
|
||||||
|
.find("a")
|
||||||
|
.text()
|
||||||
|
?.replace("Download", "")
|
||||||
|
?.trim();
|
||||||
|
const link = $(element).find("a").attr("href");
|
||||||
|
if (title && link) {
|
||||||
|
episodeLinks.push({
|
||||||
|
title,
|
||||||
|
link,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return episodeLinks;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("cl episode links", err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getEpisodes = getEpisodes;
|
||||||
52
dist/filmyfly/meta.js
vendored
Normal file
52
dist/filmyfly/meta.js
vendored
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getMeta = void 0;
|
||||||
|
const getMeta = async function ({ link, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const { axios, cheerio, commonHeaders: headers } = providerContext;
|
||||||
|
const url = link;
|
||||||
|
const res = await axios.get(url, { headers });
|
||||||
|
const data = res.data;
|
||||||
|
const $ = cheerio.load(data);
|
||||||
|
const type = url.includes("tvshows") ? "series" : "movie";
|
||||||
|
const imdbId = "";
|
||||||
|
const title = $('.fname:contains("Name")').find(".colora").text().trim();
|
||||||
|
const image = $(".ss").find("img").attr("src") || "";
|
||||||
|
const synopsis = $('.fname:contains("Description")')
|
||||||
|
.find(".colorg")
|
||||||
|
.text()
|
||||||
|
.trim();
|
||||||
|
const tags = $('.fname:contains("Genre")').find(".colorb").text().split(",") || [];
|
||||||
|
const rating = "";
|
||||||
|
const links = [];
|
||||||
|
const downloadLink = $(".dlbtn").find("a").attr("href");
|
||||||
|
if (downloadLink) {
|
||||||
|
links.push({
|
||||||
|
title: title,
|
||||||
|
episodesLink: downloadLink,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
title,
|
||||||
|
tags,
|
||||||
|
rating,
|
||||||
|
synopsis,
|
||||||
|
image,
|
||||||
|
imdbId,
|
||||||
|
type,
|
||||||
|
linkList: links,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return {
|
||||||
|
title: "",
|
||||||
|
synopsis: "",
|
||||||
|
image: "",
|
||||||
|
imdbId: "",
|
||||||
|
type: "movie",
|
||||||
|
linkList: [],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getMeta = getMeta;
|
||||||
46
dist/filmyfly/posts.js
vendored
Normal file
46
dist/filmyfly/posts.js
vendored
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getSearchPosts = exports.getPosts = void 0;
|
||||||
|
const getPosts = async function ({ filter, page, signal, providerContext, }) {
|
||||||
|
const { getBaseUrl } = providerContext;
|
||||||
|
const baseUrl = await getBaseUrl("filmyfly");
|
||||||
|
const url = `${baseUrl + filter}/${page}`;
|
||||||
|
return posts({ url, signal, baseUrl, providerContext });
|
||||||
|
};
|
||||||
|
exports.getPosts = getPosts;
|
||||||
|
const getSearchPosts = async function ({ searchQuery, page, signal, providerContext, }) {
|
||||||
|
const { getBaseUrl } = providerContext;
|
||||||
|
const baseUrl = await getBaseUrl("filmyfly");
|
||||||
|
const url = `${baseUrl}/site-1.html?to-search=${searchQuery}`;
|
||||||
|
if (page > 1) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
return posts({ url, signal, baseUrl, providerContext });
|
||||||
|
};
|
||||||
|
exports.getSearchPosts = getSearchPosts;
|
||||||
|
async function posts({ url, signal, baseUrl, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const { cheerio, commonHeaders: headers } = providerContext;
|
||||||
|
const res = await fetch(url, { headers, signal });
|
||||||
|
const data = await res.text();
|
||||||
|
const $ = cheerio.load(data);
|
||||||
|
const catalog = [];
|
||||||
|
$(".A2,.A10,.fl").map((i, element) => {
|
||||||
|
const title = $(element).find("a").eq(1).text() || $(element).find("b").text();
|
||||||
|
const link = $(element).find("a").attr("href");
|
||||||
|
const image = $(element).find("img").attr("src");
|
||||||
|
if (title && link && image) {
|
||||||
|
catalog.push({
|
||||||
|
title: title,
|
||||||
|
link: baseUrl + link,
|
||||||
|
image: image,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return catalog;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("ff error ", err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
40
dist/filmyfly/stream.js
vendored
Normal file
40
dist/filmyfly/stream.js
vendored
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getStream = void 0;
|
||||||
|
const getStream = async function ({ link, signal, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const res = await providerContext.axios.get(link, { signal });
|
||||||
|
const data = res.data;
|
||||||
|
const $ = providerContext.cheerio.load(data);
|
||||||
|
const streams = [];
|
||||||
|
const elements = $(".button2,.button1,.button3,.button4,.button").toArray();
|
||||||
|
const promises = elements.map(async (element) => {
|
||||||
|
const title = $(element).text();
|
||||||
|
let link = $(element).attr("href");
|
||||||
|
if (title.includes("GDFLIX") && link) {
|
||||||
|
const gdLinks = await providerContext.extractors.gdFlixExtracter(link, signal);
|
||||||
|
streams.push(...gdLinks);
|
||||||
|
}
|
||||||
|
const alreadyAdded = streams.find((s) => s.link === link);
|
||||||
|
if (title &&
|
||||||
|
link &&
|
||||||
|
!title.includes("Watch") &&
|
||||||
|
!title.includes("Login") &&
|
||||||
|
!title.includes("GoFile") &&
|
||||||
|
!alreadyAdded) {
|
||||||
|
streams.push({
|
||||||
|
server: title,
|
||||||
|
link: link,
|
||||||
|
type: "mkv",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
await Promise.all(promises);
|
||||||
|
return streams;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getStream = getStream;
|
||||||
18
dist/flixhq/catalog.js
vendored
Normal file
18
dist/flixhq/catalog.js
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.genres = exports.catalog = void 0;
|
||||||
|
exports.catalog = [
|
||||||
|
{
|
||||||
|
title: "Trending",
|
||||||
|
filter: "/trending",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Movies",
|
||||||
|
filter: "/recent-movies",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "TV Shows",
|
||||||
|
filter: "/recent-shows",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
exports.genres = [];
|
||||||
56
dist/flixhq/meta.js
vendored
Normal file
56
dist/flixhq/meta.js
vendored
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getMeta = void 0;
|
||||||
|
const getMeta = async function ({ link: id, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const { axios, getBaseUrl } = providerContext;
|
||||||
|
const baseUrl = await getBaseUrl("consumet");
|
||||||
|
const url = `${baseUrl}/movies/flixhq/info?id=` + id;
|
||||||
|
const res = await axios.get(url);
|
||||||
|
const data = res.data;
|
||||||
|
const meta = {
|
||||||
|
title: data.title,
|
||||||
|
synopsis: data.description.replace(/<[^>]*>?/gm, "").trim(),
|
||||||
|
image: data.cover,
|
||||||
|
cast: data.casts,
|
||||||
|
rating: data.rating,
|
||||||
|
tags: [data?.type, data?.duration, data.releaseDate.split("-")[0]],
|
||||||
|
imdbId: "",
|
||||||
|
type: data.episodes.length > 1 ? "series" : "movie",
|
||||||
|
};
|
||||||
|
const links = [];
|
||||||
|
data.episodes.forEach((episode) => {
|
||||||
|
const title = episode?.number
|
||||||
|
? "Season-" + episode?.season + " Ep-" + episode.number
|
||||||
|
: episode.title;
|
||||||
|
const link = episode.id + "*" + data.id;
|
||||||
|
if (link && title) {
|
||||||
|
links.push({
|
||||||
|
title,
|
||||||
|
link,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return {
|
||||||
|
...meta,
|
||||||
|
linkList: [
|
||||||
|
{
|
||||||
|
title: meta.title,
|
||||||
|
directLinks: links,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return {
|
||||||
|
title: "",
|
||||||
|
synopsis: "",
|
||||||
|
image: "",
|
||||||
|
imdbId: "",
|
||||||
|
type: "movie",
|
||||||
|
linkList: [],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getMeta = getMeta;
|
||||||
44
dist/flixhq/posts.js
vendored
Normal file
44
dist/flixhq/posts.js
vendored
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getSearchPosts = exports.getPosts = void 0;
|
||||||
|
const getPosts = async function ({ filter, signal, providerContext, }) {
|
||||||
|
const { getBaseUrl } = providerContext;
|
||||||
|
const urlRes = await getBaseUrl("consumet");
|
||||||
|
const baseUrl = urlRes + "/movies/flixhq";
|
||||||
|
const url = `${baseUrl + filter}`;
|
||||||
|
return posts({ url, signal, providerContext });
|
||||||
|
};
|
||||||
|
exports.getPosts = getPosts;
|
||||||
|
const getSearchPosts = async function ({ searchQuery, page, signal, providerContext, }) {
|
||||||
|
const { getBaseUrl } = providerContext;
|
||||||
|
const urlRes = await getBaseUrl("consumet");
|
||||||
|
const baseUrl = urlRes + "/movies/flixhq";
|
||||||
|
const url = `${baseUrl}/${searchQuery}?page=${page}`;
|
||||||
|
return posts({ url, signal, providerContext });
|
||||||
|
};
|
||||||
|
exports.getSearchPosts = getSearchPosts;
|
||||||
|
async function posts({ url, signal, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const { axios } = providerContext;
|
||||||
|
const res = await axios.get(url, { signal });
|
||||||
|
const data = res.data?.results || res.data;
|
||||||
|
const catalog = [];
|
||||||
|
data?.map((element) => {
|
||||||
|
const title = element.title;
|
||||||
|
const link = element.id;
|
||||||
|
const image = element.image;
|
||||||
|
if (title && link && image) {
|
||||||
|
catalog.push({
|
||||||
|
title: title,
|
||||||
|
link: link,
|
||||||
|
image: image,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return catalog;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("flixhq error ", err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
55
dist/flixhq/stream.js
vendored
Normal file
55
dist/flixhq/stream.js
vendored
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getStream = void 0;
|
||||||
|
const types_1 = require("../types");
|
||||||
|
const getStream = async function ({ link: id, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const { getBaseUrl } = providerContext;
|
||||||
|
const episodeId = id.split("*")[0];
|
||||||
|
const mediaId = id.split("*")[1];
|
||||||
|
const baseUrl = await getBaseUrl("consumet");
|
||||||
|
const serverUrl = `${baseUrl}/movies/flixhq/servers?episodeId=${episodeId}&mediaId=${mediaId}`;
|
||||||
|
const res = await fetch(serverUrl);
|
||||||
|
const servers = await res.json();
|
||||||
|
const streamLinks = [];
|
||||||
|
for (const server of servers) {
|
||||||
|
const streamUrl = `${baseUrl}/movies/flixhq/watch?server=` +
|
||||||
|
server.name +
|
||||||
|
"&episodeId=" +
|
||||||
|
episodeId +
|
||||||
|
"&mediaId=" +
|
||||||
|
mediaId;
|
||||||
|
const streamRes = await fetch(streamUrl);
|
||||||
|
const streamData = await streamRes.json();
|
||||||
|
const subtitles = [];
|
||||||
|
if (streamData?.sources?.length > 0) {
|
||||||
|
if (streamData.subtitles) {
|
||||||
|
streamData.subtitles.forEach((sub) => {
|
||||||
|
subtitles.push({
|
||||||
|
language: sub?.lang?.slice(0, 2),
|
||||||
|
uri: sub?.url,
|
||||||
|
type: types_1.TextTrackType.VTT,
|
||||||
|
title: sub?.lang,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
streamData.sources.forEach((source) => {
|
||||||
|
streamLinks.push({
|
||||||
|
server: server?.name +
|
||||||
|
"-" +
|
||||||
|
source?.quality?.replace("auto", "MultiQuality"),
|
||||||
|
link: source.url,
|
||||||
|
type: source.isM3U8 ? "m3u8" : "mp4",
|
||||||
|
subtitles: subtitles,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return streamLinks;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getStream = getStream;
|
||||||
14
dist/guardahd/catalog.js
vendored
Normal file
14
dist/guardahd/catalog.js
vendored
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.genres = exports.catalog = void 0;
|
||||||
|
exports.catalog = [
|
||||||
|
{
|
||||||
|
title: "Popular Movies",
|
||||||
|
filter: "/top/catalog/movie/top.json",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Featured Movies",
|
||||||
|
filter: "/imdbRating/catalog/movie/imdbRating.json",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
exports.genres = [];
|
||||||
89
dist/guardahd/meta.js
vendored
Normal file
89
dist/guardahd/meta.js
vendored
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getMeta = void 0;
|
||||||
|
const getMeta = async function ({ link, providerContext, }) {
|
||||||
|
const axios = providerContext.axios;
|
||||||
|
try {
|
||||||
|
console.log("all", link);
|
||||||
|
const res = await axios.get(link);
|
||||||
|
const data = res.data;
|
||||||
|
const meta = {
|
||||||
|
title: "",
|
||||||
|
synopsis: "",
|
||||||
|
image: "",
|
||||||
|
imdbId: data?.meta?.imdb_id || "",
|
||||||
|
type: data?.meta?.type || "movie",
|
||||||
|
};
|
||||||
|
const links = [];
|
||||||
|
let directLinks = [];
|
||||||
|
let season = new Map();
|
||||||
|
if (meta.type === "series") {
|
||||||
|
data?.meta?.videos?.map((video) => {
|
||||||
|
if (video?.season <= 0)
|
||||||
|
return;
|
||||||
|
if (!season.has(video?.season)) {
|
||||||
|
season.set(video?.season, []);
|
||||||
|
}
|
||||||
|
season.get(video?.season).push({
|
||||||
|
title: "Episode " + video?.episode,
|
||||||
|
type: "series",
|
||||||
|
link: JSON.stringify({
|
||||||
|
title: data?.meta?.name,
|
||||||
|
imdbId: data?.meta?.imdb_id,
|
||||||
|
season: video?.id?.split(":")[1],
|
||||||
|
episode: video?.id?.split(":")[2],
|
||||||
|
type: data?.meta?.type,
|
||||||
|
tmdbId: data?.meta?.moviedb_id?.toString() || "",
|
||||||
|
year: data?.meta?.year,
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
});
|
||||||
|
const keys = Array.from(season.keys());
|
||||||
|
keys.sort();
|
||||||
|
keys.map((key) => {
|
||||||
|
directLinks = season.get(key);
|
||||||
|
links.push({
|
||||||
|
title: `Season ${key}`,
|
||||||
|
directLinks: directLinks,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
console.log("all meta Mv🔥🔥", meta);
|
||||||
|
links.push({
|
||||||
|
title: data?.meta?.name,
|
||||||
|
directLinks: [
|
||||||
|
{
|
||||||
|
title: "Movie",
|
||||||
|
type: "movie",
|
||||||
|
link: JSON.stringify({
|
||||||
|
title: data?.meta?.name,
|
||||||
|
imdbId: data?.meta?.imdb_id,
|
||||||
|
season: "",
|
||||||
|
episode: "",
|
||||||
|
type: data?.meta?.type,
|
||||||
|
tmdbId: data?.meta?.moviedb_id?.toString() || "",
|
||||||
|
year: data?.meta?.year,
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
...meta,
|
||||||
|
linkList: links,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return {
|
||||||
|
title: "",
|
||||||
|
synopsis: "",
|
||||||
|
image: "",
|
||||||
|
imdbId: "",
|
||||||
|
type: "movie",
|
||||||
|
linkList: [],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getMeta = getMeta;
|
||||||
66
dist/guardahd/posts.js
vendored
Normal file
66
dist/guardahd/posts.js
vendored
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getSearchPosts = exports.getPosts = void 0;
|
||||||
|
const getPosts = async function ({ filter, signal, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const catalog = [];
|
||||||
|
const url = "https://cinemeta-catalogs.strem.io" + filter;
|
||||||
|
console.log("allGetPostUrl", url);
|
||||||
|
const res = await providerContext.axios.get(url, {
|
||||||
|
headers: providerContext.commonHeaders,
|
||||||
|
signal,
|
||||||
|
});
|
||||||
|
const data = res.data;
|
||||||
|
data?.metas.map((result) => {
|
||||||
|
const title = result?.name;
|
||||||
|
const id = result?.imdb_id || result?.id;
|
||||||
|
const type = result?.type;
|
||||||
|
const image = result?.poster;
|
||||||
|
if (id) {
|
||||||
|
catalog.push({
|
||||||
|
title: title,
|
||||||
|
link: `https://v3-cinemeta.strem.io/meta/${type}/${id}.json`,
|
||||||
|
image: image,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
console.log("catalog", catalog.length);
|
||||||
|
return catalog;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("AutoEmbed error ", err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getPosts = getPosts;
|
||||||
|
const getSearchPosts = async function ({ searchQuery, page, signal, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const { axios, commonHeaders: headers } = providerContext;
|
||||||
|
if (page > 1) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
const catalog = [];
|
||||||
|
const url2 = `https://v3-cinemeta.strem.io/catalog/movie/top/search=${encodeURI(searchQuery)}.json`;
|
||||||
|
const res2 = await axios.get(url2, { headers, signal });
|
||||||
|
const data2 = res2.data;
|
||||||
|
data2?.metas.map((result) => {
|
||||||
|
const title = result?.name || "";
|
||||||
|
const id = result?.imdb_id || result?.id;
|
||||||
|
const image = result?.poster;
|
||||||
|
const type = result?.type;
|
||||||
|
if (id) {
|
||||||
|
catalog.push({
|
||||||
|
title: title,
|
||||||
|
link: `https://v3-cinemeta.strem.io/meta/${type}/${id}.json`,
|
||||||
|
image: image,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return catalog;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("AutoEmbed error ", err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getSearchPosts = getSearchPosts;
|
||||||
102
dist/guardahd/stream.js
vendored
Normal file
102
dist/guardahd/stream.js
vendored
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getStream = void 0;
|
||||||
|
const getStream = async function ({ link: id, type, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const { axios, cheerio, extractors } = providerContext;
|
||||||
|
const { superVideoExtractor } = extractors;
|
||||||
|
async function ExtractGuardahd({ imdb, // type, // season,
|
||||||
|
}) {
|
||||||
|
try {
|
||||||
|
const baseUrl = "https://guardahd.stream";
|
||||||
|
const path = "/set-movie-a/" + imdb;
|
||||||
|
const url = baseUrl + path;
|
||||||
|
console.log("url:", url);
|
||||||
|
const res = await axios.get(url, { timeout: 4000 });
|
||||||
|
const html = res.data;
|
||||||
|
const $ = cheerio.load(html);
|
||||||
|
const superVideoUrl = $('li:contains("supervideo")').attr("data-link");
|
||||||
|
console.log("superVideoUrl:", superVideoUrl);
|
||||||
|
if (!superVideoUrl) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
const controller2 = new AbortController();
|
||||||
|
const signal2 = controller2.signal;
|
||||||
|
setTimeout(() => controller2.abort(), 4000);
|
||||||
|
const res2 = await fetch("https:" + superVideoUrl, { signal: signal2 });
|
||||||
|
const data = await res2.text();
|
||||||
|
// console.log('mostraguarda data:', data);
|
||||||
|
const streamUrl = await superVideoExtractor(data);
|
||||||
|
return streamUrl;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("Error in GetMostraguardaStram:", err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
async function GetMostraguardaStream({ imdb, type, season, episode, }) {
|
||||||
|
try {
|
||||||
|
const baseUrl = "https://mostraguarda.stream";
|
||||||
|
const path = type === "tv"
|
||||||
|
? `/serie/${imdb}/${season}/${episode}`
|
||||||
|
: `/movie/${imdb}`;
|
||||||
|
const url = baseUrl + path;
|
||||||
|
console.log("url:", url);
|
||||||
|
const res = await axios(url, { timeout: 4000 });
|
||||||
|
const html = res.data;
|
||||||
|
const $ = cheerio.load(html);
|
||||||
|
const superVideoUrl = $('li:contains("supervideo")').attr("data-link");
|
||||||
|
console.log("superVideoUrl:", superVideoUrl);
|
||||||
|
if (!superVideoUrl) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
const controller2 = new AbortController();
|
||||||
|
const signal2 = controller2.signal;
|
||||||
|
setTimeout(() => controller2.abort(), 4000);
|
||||||
|
const res2 = await fetch("https:" + superVideoUrl, { signal: signal2 });
|
||||||
|
const data = await res2.text();
|
||||||
|
// console.log('mostraguarda data:', data);
|
||||||
|
const streamUrl = await superVideoExtractor(data);
|
||||||
|
return streamUrl;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("Error in GetMostraguardaStram:", err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log(id);
|
||||||
|
const streams = [];
|
||||||
|
const { imdbId, season, episode } = JSON.parse(id);
|
||||||
|
///// mostraguarda
|
||||||
|
const mostraguardaStream = await GetMostraguardaStream({
|
||||||
|
imdb: imdbId,
|
||||||
|
type: type,
|
||||||
|
season: season,
|
||||||
|
episode: episode,
|
||||||
|
});
|
||||||
|
if (mostraguardaStream) {
|
||||||
|
streams.push({
|
||||||
|
server: "Supervideo 1",
|
||||||
|
link: mostraguardaStream,
|
||||||
|
type: "m3u8",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const guardahdStream = await ExtractGuardahd({
|
||||||
|
imdb: imdbId,
|
||||||
|
type: type,
|
||||||
|
season: season,
|
||||||
|
episode: episode,
|
||||||
|
});
|
||||||
|
if (guardahdStream) {
|
||||||
|
streams.push({
|
||||||
|
server: "Supervideo 2",
|
||||||
|
link: guardahdStream,
|
||||||
|
type: "m3u8",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return streams;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getStream = getStream;
|
||||||
63
dist/hdhub4u/catalog.js
vendored
Normal file
63
dist/hdhub4u/catalog.js
vendored
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.genres = exports.catalog = void 0;
|
||||||
|
exports.catalog = [
|
||||||
|
{
|
||||||
|
title: "Latest",
|
||||||
|
filter: "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Web Series",
|
||||||
|
filter: "/category/web-series",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Hollywood ",
|
||||||
|
filter: "/category/hollywood-movies",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "South Movies",
|
||||||
|
filter: "/category/south-hindi-movies",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
exports.genres = [
|
||||||
|
{
|
||||||
|
title: "Action",
|
||||||
|
filter: "/category/action",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Crime",
|
||||||
|
filter: "/category/crime",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Comedy",
|
||||||
|
filter: "/category/comedy",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Drama",
|
||||||
|
filter: "/category/drama",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Horror",
|
||||||
|
filter: "/category/horror",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Family",
|
||||||
|
filter: "/category/family",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Sci-Fi",
|
||||||
|
filter: "/category/sifi",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Thriller",
|
||||||
|
filter: "/category/triller",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Romance",
|
||||||
|
filter: "/category/romance",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Fight",
|
||||||
|
filter: "/category/fight",
|
||||||
|
},
|
||||||
|
];
|
||||||
115
dist/hdhub4u/meta.js
vendored
Normal file
115
dist/hdhub4u/meta.js
vendored
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getMeta = void 0;
|
||||||
|
const hdbHeaders = {
|
||||||
|
Cookie: "xla=s4t",
|
||||||
|
Referer: "https://google.com",
|
||||||
|
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0",
|
||||||
|
};
|
||||||
|
const getMeta = async function ({ link, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const { axios, cheerio } = providerContext;
|
||||||
|
const url = link;
|
||||||
|
const res = await axios.get(url, { headers: hdbHeaders });
|
||||||
|
const data = res.data;
|
||||||
|
const $ = cheerio.load(data);
|
||||||
|
const container = $(".page-body");
|
||||||
|
const imdbId = container
|
||||||
|
.find('a[href*="imdb.com/title/tt"]:not([href*="imdb.com/title/tt/"])')
|
||||||
|
.attr("href")
|
||||||
|
?.split("/")[4] || "";
|
||||||
|
const title = container
|
||||||
|
.find('h2[data-ved="2ahUKEwjL0NrBk4vnAhWlH7cAHRCeAlwQ3B0oATAfegQIFBAM"],h2[data-ved="2ahUKEwiP0pGdlermAhUFYVAKHV8tAmgQ3B0oATAZegQIDhAM"]')
|
||||||
|
.text();
|
||||||
|
const type = title.toLocaleLowerCase().includes("season")
|
||||||
|
? "series"
|
||||||
|
: "movie";
|
||||||
|
const synopsis = container
|
||||||
|
.find('strong:contains("DESCRIPTION")')
|
||||||
|
.parent()
|
||||||
|
.text()
|
||||||
|
.replace("DESCRIPTION:", "");
|
||||||
|
const image = container.find('img[decoding="async"]').attr("src") || "";
|
||||||
|
// Links
|
||||||
|
const links = [];
|
||||||
|
const directLink = [];
|
||||||
|
// direct link type
|
||||||
|
$('strong:contains("EPiSODE")').map((i, element) => {
|
||||||
|
const epTitle = $(element).parent().parent().text();
|
||||||
|
const episodesLink = $(element)
|
||||||
|
.parent()
|
||||||
|
.parent()
|
||||||
|
.parent()
|
||||||
|
.next()
|
||||||
|
.next()
|
||||||
|
.find("a")
|
||||||
|
.attr("href") ||
|
||||||
|
$(element).parent().parent().parent().next().find("a").attr("href");
|
||||||
|
if (episodesLink && episodesLink) {
|
||||||
|
directLink.push({
|
||||||
|
title: epTitle,
|
||||||
|
link: episodesLink,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (directLink.length === 0) {
|
||||||
|
container.find('a:contains("EPiSODE")').map((i, element) => {
|
||||||
|
const epTitle = $(element).text();
|
||||||
|
const episodesLink = $(element).attr("href");
|
||||||
|
if (episodesLink) {
|
||||||
|
directLink.push({
|
||||||
|
title: epTitle.toLocaleUpperCase(),
|
||||||
|
link: episodesLink,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (directLink.length > 0) {
|
||||||
|
links.push({
|
||||||
|
title: title,
|
||||||
|
directLinks: directLink,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (directLink.length === 0) {
|
||||||
|
container
|
||||||
|
.find('a:contains("480"),a:contains("720"),a:contains("1080"),a:contains("2160"),a:contains("4K")')
|
||||||
|
.map((i, element) => {
|
||||||
|
const quality = $(element)
|
||||||
|
.text()
|
||||||
|
.match(/\b(480p|720p|1080p|2160p)\b/i)?.[0] || "";
|
||||||
|
const movieLinks = $(element).attr("href");
|
||||||
|
const title = $(element).text();
|
||||||
|
if (movieLinks) {
|
||||||
|
links.push({
|
||||||
|
directLinks: [
|
||||||
|
{ link: movieLinks, title: "Movie", type: "movie" },
|
||||||
|
],
|
||||||
|
quality: quality,
|
||||||
|
title: title,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// console.log('drive meta', title, synopsis, image, imdbId, type, links);
|
||||||
|
return {
|
||||||
|
title,
|
||||||
|
synopsis,
|
||||||
|
image,
|
||||||
|
imdbId,
|
||||||
|
type,
|
||||||
|
linkList: links,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return {
|
||||||
|
title: "",
|
||||||
|
synopsis: "",
|
||||||
|
image: "",
|
||||||
|
imdbId: "",
|
||||||
|
type: "movie",
|
||||||
|
linkList: [],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getMeta = getMeta;
|
||||||
53
dist/hdhub4u/posts.js
vendored
Normal file
53
dist/hdhub4u/posts.js
vendored
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getSearchPosts = exports.getPosts = void 0;
|
||||||
|
const hdbHeaders = {
|
||||||
|
Cookie: "xla=s4t",
|
||||||
|
Referer: "https://google.com",
|
||||||
|
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0",
|
||||||
|
};
|
||||||
|
const getPosts = async function ({ filter, page, signal, providerContext, }) {
|
||||||
|
const { getBaseUrl } = providerContext;
|
||||||
|
const baseUrl = await getBaseUrl("hdhub");
|
||||||
|
const url = `${baseUrl + filter}/page/${page}/`;
|
||||||
|
return posts({ url, signal, providerContext });
|
||||||
|
};
|
||||||
|
exports.getPosts = getPosts;
|
||||||
|
const getSearchPosts = async function ({ searchQuery, page, signal, providerContext, }) {
|
||||||
|
const { getBaseUrl } = providerContext;
|
||||||
|
const baseUrl = await getBaseUrl("hdhub");
|
||||||
|
const url = `${baseUrl}/page/${page}/?s=${searchQuery}`;
|
||||||
|
return posts({ url, signal, providerContext });
|
||||||
|
};
|
||||||
|
exports.getSearchPosts = getSearchPosts;
|
||||||
|
async function posts({ url, signal, providerContext, }) {
|
||||||
|
const { cheerio } = providerContext;
|
||||||
|
try {
|
||||||
|
const res = await fetch(url, {
|
||||||
|
headers: hdbHeaders,
|
||||||
|
signal,
|
||||||
|
});
|
||||||
|
const data = await res.text();
|
||||||
|
const $ = cheerio.load(data);
|
||||||
|
const catalog = [];
|
||||||
|
$(".recent-movies")
|
||||||
|
.children()
|
||||||
|
.map((i, element) => {
|
||||||
|
const title = $(element).find("figure").find("img").attr("alt");
|
||||||
|
const link = $(element).find("a").attr("href");
|
||||||
|
const image = $(element).find("figure").find("img").attr("src");
|
||||||
|
if (title && link && image) {
|
||||||
|
catalog.push({
|
||||||
|
title: title.replace("Download", "").trim(),
|
||||||
|
link: link,
|
||||||
|
image: image,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return catalog;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("hdhubGetPosts error ", err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
150
dist/hdhub4u/stream.js
vendored
Normal file
150
dist/hdhub4u/stream.js
vendored
Normal file
@@ -0,0 +1,150 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getStream = getStream;
|
||||||
|
exports.getRedirectLinks = getRedirectLinks;
|
||||||
|
exports.decodeString = decodeString;
|
||||||
|
async function getStream({ 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
22
dist/hiAnime/catalog.js
vendored
Normal file
22
dist/hiAnime/catalog.js
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.genres = exports.catalogs = void 0;
|
||||||
|
exports.catalogs = [
|
||||||
|
{
|
||||||
|
title: "Recent",
|
||||||
|
filter: "/anime/zoro/recent-episodes",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Top Airing",
|
||||||
|
filter: "/anime/zoro/top-airing",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Most Popular",
|
||||||
|
filter: "/anime/zoro/most-popular",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Most Favorited",
|
||||||
|
filter: "/anime/zoro/most-favorite",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
exports.genres = [];
|
||||||
78
dist/hiAnime/meta.js
vendored
Normal file
78
dist/hiAnime/meta.js
vendored
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getMeta = void 0;
|
||||||
|
const getMeta = async function ({ link, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const { getBaseUrl, axios } = providerContext;
|
||||||
|
const baseUrl = await getBaseUrl("consumet");
|
||||||
|
const url = `${baseUrl}/anime/zoro/info?id=` + link;
|
||||||
|
const res = await axios.get(url);
|
||||||
|
const data = res.data;
|
||||||
|
const meta = {
|
||||||
|
title: data.title,
|
||||||
|
synopsis: data.description,
|
||||||
|
image: data.image,
|
||||||
|
tags: [
|
||||||
|
data?.type,
|
||||||
|
data?.subOrDub === "both" ? "Sub And Dub" : data?.subOrDub,
|
||||||
|
],
|
||||||
|
imdbId: "",
|
||||||
|
type: data.episodes.length > 0 ? "series" : "movie",
|
||||||
|
};
|
||||||
|
const linkList = [];
|
||||||
|
const subLinks = [];
|
||||||
|
data.episodes.forEach((episode) => {
|
||||||
|
if (!episode?.isSubbed) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const title = "Episode " + episode.number + (episode?.isFiller ? " (Filler)" : "");
|
||||||
|
const link = episode.id + "$sub";
|
||||||
|
if (link && title) {
|
||||||
|
subLinks.push({
|
||||||
|
title,
|
||||||
|
link,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
linkList.push({
|
||||||
|
title: meta.title + " (Sub)",
|
||||||
|
directLinks: subLinks,
|
||||||
|
});
|
||||||
|
if (data?.subOrDub === "both") {
|
||||||
|
const dubLinks = [];
|
||||||
|
data.episodes.forEach((episode) => {
|
||||||
|
if (!episode?.isDubbed) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const title = "Episode " + episode.number + (episode?.isFiller ? " (Filler)" : "");
|
||||||
|
const link = episode.id + "$dub";
|
||||||
|
if (link && title) {
|
||||||
|
dubLinks.push({
|
||||||
|
title,
|
||||||
|
link,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
linkList.push({
|
||||||
|
title: meta.title + " (Dub)",
|
||||||
|
directLinks: dubLinks,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
...meta,
|
||||||
|
linkList: linkList,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return {
|
||||||
|
title: "",
|
||||||
|
synopsis: "",
|
||||||
|
image: "",
|
||||||
|
imdbId: "",
|
||||||
|
type: "movie",
|
||||||
|
linkList: [],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getMeta = getMeta;
|
||||||
41
dist/hiAnime/posts.js
vendored
Normal file
41
dist/hiAnime/posts.js
vendored
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getSearchPosts = exports.getPosts = void 0;
|
||||||
|
const getPosts = async function ({ filter, page, signal, providerContext, }) {
|
||||||
|
const { getBaseUrl, axios } = providerContext;
|
||||||
|
const baseUrl = await getBaseUrl("consumet");
|
||||||
|
const url = `${baseUrl + filter}?page=${page}`;
|
||||||
|
return posts({ url, signal, axios });
|
||||||
|
};
|
||||||
|
exports.getPosts = getPosts;
|
||||||
|
const getSearchPosts = async function ({ searchQuery, page, signal, providerContext, }) {
|
||||||
|
const { getBaseUrl, axios } = providerContext;
|
||||||
|
const baseUrl = await getBaseUrl("consumet");
|
||||||
|
const url = `${baseUrl}/anime/zoro/${searchQuery}?page=${page}`;
|
||||||
|
return posts({ url, signal, axios });
|
||||||
|
};
|
||||||
|
exports.getSearchPosts = getSearchPosts;
|
||||||
|
async function posts({ url, signal, axios, }) {
|
||||||
|
try {
|
||||||
|
const res = await axios.get(url, { signal });
|
||||||
|
const data = res.data?.results;
|
||||||
|
const catalog = [];
|
||||||
|
data?.map((element) => {
|
||||||
|
const title = element.title;
|
||||||
|
const link = element.id;
|
||||||
|
const image = element.image;
|
||||||
|
if (title && link && image) {
|
||||||
|
catalog.push({
|
||||||
|
title: title,
|
||||||
|
link: link,
|
||||||
|
image: image,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return catalog;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("zoro error ", err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
54
dist/hiAnime/stream.js
vendored
Normal file
54
dist/hiAnime/stream.js
vendored
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getStream = void 0;
|
||||||
|
const types_1 = require("../types");
|
||||||
|
const getStream = async function ({ link: id, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const { getBaseUrl, axios } = providerContext;
|
||||||
|
const baseUrl = await getBaseUrl("consumet");
|
||||||
|
const servers = ["vidcloud", "vidstreaming"];
|
||||||
|
const url = `${baseUrl}/anime/zoro/watch?episodeId=${id}&server=`;
|
||||||
|
const streamLinks = [];
|
||||||
|
await Promise.all(servers.map(async (server) => {
|
||||||
|
try {
|
||||||
|
const res = await axios.get(url + server);
|
||||||
|
if (res.data) {
|
||||||
|
const subtitles = [];
|
||||||
|
res.data?.subtitles.forEach((sub) => {
|
||||||
|
if (sub?.lang === "Thumbnails")
|
||||||
|
return;
|
||||||
|
subtitles.push({
|
||||||
|
language: sub?.lang?.slice(0, 2) || "Und",
|
||||||
|
uri: sub?.url,
|
||||||
|
title: sub?.lang || "Undefined",
|
||||||
|
type: sub?.url?.endsWith(".vtt")
|
||||||
|
? types_1.TextTrackType.VTT
|
||||||
|
: types_1.TextTrackType.SUBRIP,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
res.data?.sources.forEach((source) => {
|
||||||
|
streamLinks.push({
|
||||||
|
server: server,
|
||||||
|
link: source?.url,
|
||||||
|
type: source?.isM3U8 ? "m3u8" : "mp4",
|
||||||
|
headers: {
|
||||||
|
Referer: "https://megacloud.club/",
|
||||||
|
Origin: "https://megacloud.club",
|
||||||
|
},
|
||||||
|
subtitles: subtitles,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
console.log(e);
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
return streamLinks;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getStream = getStream;
|
||||||
63
dist/katmovies/catalog.js
vendored
Normal file
63
dist/katmovies/catalog.js
vendored
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.katGenresList = exports.katCatalog = void 0;
|
||||||
|
exports.katCatalog = [
|
||||||
|
{
|
||||||
|
title: 'Latest',
|
||||||
|
filter: '',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Netflix',
|
||||||
|
filter: '/category/netflix',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Animated',
|
||||||
|
filter: '/category/animated',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Amazon Prime',
|
||||||
|
filter: '/category/amazon-prime',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
exports.katGenresList = [
|
||||||
|
{
|
||||||
|
title: 'Action',
|
||||||
|
filter: '/category/action',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Crime',
|
||||||
|
filter: '/category/crime',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Comedy',
|
||||||
|
filter: '/category/comedy',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Drama',
|
||||||
|
filter: '/category/drama',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Horror',
|
||||||
|
filter: '/category/horror',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Family',
|
||||||
|
filter: '/category/family',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Sci-Fi',
|
||||||
|
filter: '/category/sifi',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Thriller',
|
||||||
|
filter: '/category/triller',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Romance',
|
||||||
|
filter: '/category/romance',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Fight',
|
||||||
|
filter: '/category/fight',
|
||||||
|
},
|
||||||
|
];
|
||||||
70
dist/katmovies/episodes.js
vendored
Normal file
70
dist/katmovies/episodes.js
vendored
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getEpisodes = void 0;
|
||||||
|
exports.extractKmhdLink = extractKmhdLink;
|
||||||
|
const getEpisodes = async function ({ url, providerContext, }) {
|
||||||
|
const { axios, cheerio } = providerContext;
|
||||||
|
const episodesLink = [];
|
||||||
|
try {
|
||||||
|
if (url.includes("gdflix")) {
|
||||||
|
const baseUrl = url.split("/pack")?.[0];
|
||||||
|
const res = await axios.get(url);
|
||||||
|
const data = res.data;
|
||||||
|
const $ = cheerio.load(data);
|
||||||
|
const links = $(".list-group-item");
|
||||||
|
links?.map((i, link) => {
|
||||||
|
episodesLink.push({
|
||||||
|
title: $(link).text() || "",
|
||||||
|
link: baseUrl + $(link).find("a").attr("href") || "",
|
||||||
|
});
|
||||||
|
});
|
||||||
|
if (episodesLink.length > 0) {
|
||||||
|
return episodesLink;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (url.includes("/pack")) {
|
||||||
|
const epIds = await extractKmhdEpisodes(url, providerContext);
|
||||||
|
epIds?.forEach((id, index) => {
|
||||||
|
episodesLink.push({
|
||||||
|
title: `Episode ${index + 1}`,
|
||||||
|
link: url.split("/pack")[0] + "/file/" + id,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const res = await axios.get(url, {
|
||||||
|
headers: {
|
||||||
|
Cookie: "_ga_GNR438JY8N=GS1.1.1722240350.5.0.1722240350.0.0.0; _ga=GA1.1.372196696.1722150754; unlocked=true",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const episodeData = res.data;
|
||||||
|
const $ = cheerio.load(episodeData);
|
||||||
|
const links = $(".autohyperlink");
|
||||||
|
links?.map((i, link) => {
|
||||||
|
episodesLink.push({
|
||||||
|
title: $(link).parent().children().remove().end().text() || "",
|
||||||
|
link: $(link).attr("href") || "",
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return episodesLink;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getEpisodes = getEpisodes;
|
||||||
|
async function extractKmhdLink(katlink, providerContext) {
|
||||||
|
const { axios } = providerContext;
|
||||||
|
const res = await axios.get(katlink);
|
||||||
|
const data = res.data;
|
||||||
|
const hubDriveRes = data.match(/hubdrive_res:\s*"([^"]+)"/)[1];
|
||||||
|
const hubDriveLink = data.match(/hubdrive_res\s*:\s*{[^}]*?link\s*:\s*"([^"]+)"/)[1];
|
||||||
|
return hubDriveLink + hubDriveRes;
|
||||||
|
}
|
||||||
|
async function extractKmhdEpisodes(katlink, providerContext) {
|
||||||
|
const { axios } = providerContext;
|
||||||
|
const res = await axios.get(katlink);
|
||||||
|
const data = res.data;
|
||||||
|
const ids = data.match(/[\w]+_[a-f0-9]{8}/g);
|
||||||
|
return ids;
|
||||||
|
}
|
||||||
115
dist/katmovies/meta.js
vendored
Normal file
115
dist/katmovies/meta.js
vendored
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getMeta = void 0;
|
||||||
|
const getMeta = async function ({ link, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const { axios, cheerio } = providerContext;
|
||||||
|
const url = link;
|
||||||
|
const res = await axios.get(url);
|
||||||
|
const data = res.data;
|
||||||
|
const $ = cheerio.load(data);
|
||||||
|
const container = $(".yQ8hqd.ksSzJd.LoQAYe").html()
|
||||||
|
? $(".yQ8hqd.ksSzJd.LoQAYe")
|
||||||
|
: $(".FxvUNb");
|
||||||
|
const imdbId = container
|
||||||
|
.find('a[href*="imdb.com/title/tt"]:not([href*="imdb.com/title/tt/"])')
|
||||||
|
.attr("href")
|
||||||
|
?.split("/")[4] || "";
|
||||||
|
const title = container
|
||||||
|
.find('li:contains("Name")')
|
||||||
|
.children()
|
||||||
|
.remove()
|
||||||
|
.end()
|
||||||
|
.text();
|
||||||
|
const type = $(".yQ8hqd.ksSzJd.LoQAYe").html() ? "series" : "movie";
|
||||||
|
const synopsis = container.find('li:contains("Stars")').text();
|
||||||
|
const image = $('h4:contains("SCREENSHOTS")').next().find("img").attr("src") || "";
|
||||||
|
console.log("katGetInfo", title, synopsis, image, imdbId, type);
|
||||||
|
// Links
|
||||||
|
const links = [];
|
||||||
|
const directLink = [];
|
||||||
|
// direct links
|
||||||
|
$(".entry-content")
|
||||||
|
.find('p:contains("Episode")')
|
||||||
|
.each((i, element) => {
|
||||||
|
const dlLink = $(element)
|
||||||
|
.nextAll("h3,h2")
|
||||||
|
.first()
|
||||||
|
.find('a:contains("1080"),a:contains("720"),a:contains("480")')
|
||||||
|
.attr("href") || "";
|
||||||
|
const dlTitle = $(element).find("span").text();
|
||||||
|
if (link.trim().length > 0 && dlTitle.includes("Episode ")) {
|
||||||
|
directLink.push({
|
||||||
|
title: dlTitle,
|
||||||
|
link: dlLink,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (directLink.length > 0) {
|
||||||
|
links.push({
|
||||||
|
quality: "",
|
||||||
|
title: title,
|
||||||
|
directLinks: directLink,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
$(".entry-content")
|
||||||
|
.find("pre")
|
||||||
|
.nextUntil("div")
|
||||||
|
.filter("h2")
|
||||||
|
.each((i, element) => {
|
||||||
|
const link = $(element).find("a").attr("href");
|
||||||
|
const quality = $(element)
|
||||||
|
.text()
|
||||||
|
.match(/\b(480p|720p|1080p|2160p)\b/i)?.[0] || "";
|
||||||
|
const title = $(element).text();
|
||||||
|
if (link && title.includes("")) {
|
||||||
|
links.push({
|
||||||
|
quality,
|
||||||
|
title,
|
||||||
|
episodesLink: link,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (links.length === 0 && type === "movie") {
|
||||||
|
$(".entry-content")
|
||||||
|
.find('h2:contains("DOWNLOAD"),h3:contains("DOWNLOAD")')
|
||||||
|
.nextUntil("pre,div")
|
||||||
|
.filter("h2")
|
||||||
|
.each((i, element) => {
|
||||||
|
const link = $(element).find("a").attr("href");
|
||||||
|
const quality = $(element)
|
||||||
|
.text()
|
||||||
|
.match(/\b(480p|720p|1080p|2160p)\b/i)?.[0] || "";
|
||||||
|
const title = $(element).text();
|
||||||
|
if (link && !title.includes("Online")) {
|
||||||
|
links.push({
|
||||||
|
quality,
|
||||||
|
title,
|
||||||
|
directLinks: [{ link, title, type: "movie" }],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// console.log('drive meta', title, synopsis, image, imdbId, type, links);
|
||||||
|
return {
|
||||||
|
title,
|
||||||
|
synopsis,
|
||||||
|
image,
|
||||||
|
imdbId,
|
||||||
|
type,
|
||||||
|
linkList: links,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return {
|
||||||
|
title: "",
|
||||||
|
synopsis: "",
|
||||||
|
image: "",
|
||||||
|
imdbId: "",
|
||||||
|
type: "movie",
|
||||||
|
linkList: [],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getMeta = getMeta;
|
||||||
44
dist/katmovies/posts.js
vendored
Normal file
44
dist/katmovies/posts.js
vendored
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getSearchPosts = exports.getPosts = void 0;
|
||||||
|
const getPosts = async function ({ filter, page, signal, providerContext, }) {
|
||||||
|
const { getBaseUrl, cheerio } = providerContext;
|
||||||
|
const baseUrl = await getBaseUrl("kat");
|
||||||
|
const url = `${baseUrl + filter}/page/${page}/`;
|
||||||
|
return posts({ url, signal, cheerio });
|
||||||
|
};
|
||||||
|
exports.getPosts = getPosts;
|
||||||
|
const getSearchPosts = async function ({ searchQuery, page, signal, providerContext, }) {
|
||||||
|
const { getBaseUrl, cheerio } = providerContext;
|
||||||
|
const baseUrl = await getBaseUrl("kat");
|
||||||
|
const url = `${baseUrl}/page/${page}/?s=${searchQuery}`;
|
||||||
|
return posts({ url, signal, cheerio });
|
||||||
|
};
|
||||||
|
exports.getSearchPosts = getSearchPosts;
|
||||||
|
async function posts({ url, signal, cheerio, }) {
|
||||||
|
try {
|
||||||
|
const res = await fetch(url, { signal });
|
||||||
|
const data = await res.text();
|
||||||
|
const $ = cheerio.load(data);
|
||||||
|
const catalog = [];
|
||||||
|
$(".recent-posts")
|
||||||
|
.children()
|
||||||
|
.map((i, element) => {
|
||||||
|
const title = $(element).find("img").attr("alt");
|
||||||
|
const link = $(element).find("a").attr("href");
|
||||||
|
const image = $(element).find("img").attr("src");
|
||||||
|
if (title && link && image) {
|
||||||
|
catalog.push({
|
||||||
|
title: title.replace("Download", "").trim(),
|
||||||
|
link: link,
|
||||||
|
image: image,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return catalog;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("katmovies error ", err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
91
dist/katmovies/stream.js
vendored
Normal file
91
dist/katmovies/stream.js
vendored
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getStream = void 0;
|
||||||
|
async function extractKmhdLink(katlink, providerContext) {
|
||||||
|
const { axios } = providerContext;
|
||||||
|
const res = await axios.get(katlink);
|
||||||
|
const data = res.data;
|
||||||
|
const hubDriveRes = data.match(/hubdrive_res:\s*"([^"]+)"/)[1];
|
||||||
|
const hubDriveLink = data.match(/hubdrive_res\s*:\s*{[^}]*?link\s*:\s*"([^"]+)"/)[1];
|
||||||
|
return hubDriveLink + hubDriveRes;
|
||||||
|
}
|
||||||
|
const getStream = async function ({ link, signal, providerContext, }) {
|
||||||
|
const { axios, cheerio, extractors } = providerContext;
|
||||||
|
const { hubcloudExtracter, gdFlixExtracter } = extractors;
|
||||||
|
const streamLinks = [];
|
||||||
|
console.log("katGetStream", link);
|
||||||
|
try {
|
||||||
|
if (link.includes("gdflix")) {
|
||||||
|
return await gdFlixExtracter(link, signal);
|
||||||
|
}
|
||||||
|
if (link.includes("kmhd")) {
|
||||||
|
const hubcloudLink = await extractKmhdLink(link, providerContext);
|
||||||
|
return await hubcloudExtracter(hubcloudLink, signal);
|
||||||
|
}
|
||||||
|
if (link.includes("gdflix")) {
|
||||||
|
// resume link
|
||||||
|
try {
|
||||||
|
const resumeDrive = link.replace("/file", "/zfile");
|
||||||
|
// console.log('resumeDrive', resumeDrive);
|
||||||
|
const resumeDriveRes = await axios.get(resumeDrive);
|
||||||
|
const resumeDriveHtml = resumeDriveRes.data;
|
||||||
|
const $resumeDrive = cheerio.load(resumeDriveHtml);
|
||||||
|
const resumeLink = $resumeDrive(".btn-success").attr("href");
|
||||||
|
console.log("resumeLink", resumeLink);
|
||||||
|
if (resumeLink) {
|
||||||
|
streamLinks.push({
|
||||||
|
server: "ResumeCloud",
|
||||||
|
link: resumeLink,
|
||||||
|
type: "mkv",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.log("Resume link not found");
|
||||||
|
}
|
||||||
|
//instant link
|
||||||
|
try {
|
||||||
|
const driveres = await axios.get(link, { timeout: 10000 });
|
||||||
|
const $drive = cheerio.load(driveres.data);
|
||||||
|
const seed = $drive(".btn-danger").attr("href") || "";
|
||||||
|
const instantToken = seed.split("=")[1];
|
||||||
|
// console.log('InstantToken', instantToken);
|
||||||
|
const InstantFromData = new FormData();
|
||||||
|
InstantFromData.append("keys", instantToken);
|
||||||
|
const videoSeedUrl = seed.split("/").slice(0, 3).join("/") + "/api";
|
||||||
|
// console.log('videoSeedUrl', videoSeedUrl);
|
||||||
|
const instantLinkRes = await fetch(videoSeedUrl, {
|
||||||
|
method: "POST",
|
||||||
|
body: InstantFromData,
|
||||||
|
headers: {
|
||||||
|
"x-token": videoSeedUrl,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const instantLinkData = await instantLinkRes.json();
|
||||||
|
console.log("instantLinkData", instantLinkData);
|
||||||
|
if (instantLinkData.error === false) {
|
||||||
|
const instantLink = instantLinkData.url;
|
||||||
|
streamLinks.push({
|
||||||
|
server: "Gdrive-Instant",
|
||||||
|
link: instantLink,
|
||||||
|
type: "mkv",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
console.log("Instant link not found", instantLinkData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.log("Instant link not found", err);
|
||||||
|
}
|
||||||
|
return streamLinks;
|
||||||
|
}
|
||||||
|
const stereams = await hubcloudExtracter(link, signal);
|
||||||
|
return stereams;
|
||||||
|
}
|
||||||
|
catch (error) {
|
||||||
|
console.log("katgetStream error: ", error);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getStream = getStream;
|
||||||
22
dist/kissKh/catalog.js
vendored
Normal file
22
dist/kissKh/catalog.js
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.genres = exports.catalog = void 0;
|
||||||
|
exports.catalog = [
|
||||||
|
{
|
||||||
|
title: "Latest",
|
||||||
|
filter: "/api/DramaList/List?type=0&sub=0&country=0&status=0&order=2",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Hollywood",
|
||||||
|
filter: "/api/DramaList/List?type=4&sub=0&country=0&status=0&order=2",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Anime",
|
||||||
|
filter: "/api/DramaList/List?type=3&sub=0&country=0&status=0&order=2",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "K Drama",
|
||||||
|
filter: "/api/DramaList/List?type=0&sub=0&country=0&status=0&order=2",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
exports.genres = [];
|
||||||
50
dist/kissKh/meta.js
vendored
Normal file
50
dist/kissKh/meta.js
vendored
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getMeta = void 0;
|
||||||
|
const getMeta = async function ({ link, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const { axios } = providerContext;
|
||||||
|
const res = await axios.get(link);
|
||||||
|
const data = res.data;
|
||||||
|
const meta = {
|
||||||
|
title: data.title,
|
||||||
|
synopsis: data.description,
|
||||||
|
image: data.thumbnail,
|
||||||
|
tags: [data?.releaseDate?.split("-")[0], data?.status, data?.type],
|
||||||
|
imdbId: "",
|
||||||
|
type: data.episodesCount > 1 ? "series" : "movie",
|
||||||
|
};
|
||||||
|
const linkList = [];
|
||||||
|
const subLinks = [];
|
||||||
|
data?.episodes?.reverse().map((episode) => {
|
||||||
|
const title = "Episode " + episode?.number;
|
||||||
|
const link = episode?.id?.toString();
|
||||||
|
if (link && title) {
|
||||||
|
subLinks.push({
|
||||||
|
title,
|
||||||
|
link,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
linkList.push({
|
||||||
|
title: meta.title,
|
||||||
|
directLinks: subLinks,
|
||||||
|
});
|
||||||
|
return {
|
||||||
|
...meta,
|
||||||
|
linkList: linkList,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return {
|
||||||
|
title: "",
|
||||||
|
synopsis: "",
|
||||||
|
image: "",
|
||||||
|
imdbId: "",
|
||||||
|
type: "movie",
|
||||||
|
linkList: [],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getMeta = getMeta;
|
||||||
59
dist/kissKh/posts.js
vendored
Normal file
59
dist/kissKh/posts.js
vendored
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getSearchPosts = exports.getPosts = void 0;
|
||||||
|
const getPosts = async function ({ filter, signal, providerContext, }) {
|
||||||
|
const { getBaseUrl, axios } = providerContext;
|
||||||
|
const baseUrl = await getBaseUrl("kissKh");
|
||||||
|
const url = `${baseUrl + filter}&type=0`;
|
||||||
|
try {
|
||||||
|
const res = await axios.get(url, { signal });
|
||||||
|
const data = res.data?.data;
|
||||||
|
const catalog = [];
|
||||||
|
data?.map((element) => {
|
||||||
|
const title = element.title;
|
||||||
|
const link = baseUrl + `/api/DramaList/Drama/${element?.id}?isq=false`;
|
||||||
|
const image = element.thumbnail;
|
||||||
|
if (title && link && image) {
|
||||||
|
catalog.push({
|
||||||
|
title: title,
|
||||||
|
link: link,
|
||||||
|
image: image,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return catalog;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("kiss error ", err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getPosts = getPosts;
|
||||||
|
const getSearchPosts = async function ({ searchQuery, signal, providerContext, }) {
|
||||||
|
const { getBaseUrl, axios } = providerContext;
|
||||||
|
const baseUrl = await getBaseUrl("kissKh");
|
||||||
|
const url = `${baseUrl}/api/DramaList/Search?q=${searchQuery}&type=0`;
|
||||||
|
try {
|
||||||
|
const res = await axios.get(url, { signal });
|
||||||
|
const data = res.data;
|
||||||
|
const catalog = [];
|
||||||
|
data?.map((element) => {
|
||||||
|
const title = element.title;
|
||||||
|
const link = baseUrl + `/api/DramaList/Drama/${element?.id}?isq=false`;
|
||||||
|
const image = element.thumbnail;
|
||||||
|
if (title && link && image) {
|
||||||
|
catalog.push({
|
||||||
|
title: title,
|
||||||
|
link: link,
|
||||||
|
image: image,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return catalog;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("kiss error ", err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getSearchPosts = getSearchPosts;
|
||||||
42
dist/kissKh/stream.js
vendored
Normal file
42
dist/kissKh/stream.js
vendored
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getStream = void 0;
|
||||||
|
const types_1 = require("../types");
|
||||||
|
const getStream = async function ({ link: id, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const { axios, getBaseUrl } = providerContext;
|
||||||
|
const streamLinks = [];
|
||||||
|
const subtitles = [];
|
||||||
|
const baseUrl = await getBaseUrl("kissKh");
|
||||||
|
const streamUrl = "https://adorable-salamander-ecbb21.netlify.app/api/kisskh/video?id=" +
|
||||||
|
id;
|
||||||
|
const res = await axios.get(streamUrl);
|
||||||
|
const stream = res.data?.source?.Video;
|
||||||
|
const subData = res.data?.subtitles;
|
||||||
|
subData?.map((sub) => {
|
||||||
|
subtitles.push({
|
||||||
|
title: sub?.label,
|
||||||
|
language: sub?.land,
|
||||||
|
type: sub?.src?.includes(".vtt")
|
||||||
|
? types_1.TextTrackType.VTT
|
||||||
|
: types_1.TextTrackType.SUBRIP,
|
||||||
|
uri: sub?.src,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
streamLinks.push({
|
||||||
|
server: "kissKh",
|
||||||
|
link: stream,
|
||||||
|
type: "m3u8",
|
||||||
|
subtitles,
|
||||||
|
headers: {
|
||||||
|
referer: baseUrl,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return streamLinks;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getStream = getStream;
|
||||||
103
dist/luxMovies/catalog.js
vendored
Normal file
103
dist/luxMovies/catalog.js
vendored
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.genres = exports.catalog = void 0;
|
||||||
|
exports.catalog = [
|
||||||
|
{
|
||||||
|
title: "New",
|
||||||
|
filter: "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Netflix",
|
||||||
|
filter: "category/web-series/netflix",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Amazon Prime",
|
||||||
|
filter: "category/web-series/amazon-prime-video",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "4K Movies",
|
||||||
|
filter: "category/movies-by-quality/2160p",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
exports.genres = [
|
||||||
|
{
|
||||||
|
title: "Action",
|
||||||
|
filter: "category/movies-by-genres/action/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Adventure",
|
||||||
|
filter: "category/movies-by-genres/adventure/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Animation",
|
||||||
|
filter: "category/movies-by-genres/animation/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Biography",
|
||||||
|
filter: "category/movies-by-genres/biography/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Comedy",
|
||||||
|
filter: "category/movies-by-genres/comedy/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Crime",
|
||||||
|
filter: "category/movies-by-genres/crime/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Documentary",
|
||||||
|
filter: "category/movies-by-genres/documentary/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Drama",
|
||||||
|
filter: "category/movies-by-genres/drama/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Family",
|
||||||
|
filter: "category/movies-by-genres/family/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Fantasy",
|
||||||
|
filter: "category/movies-by-genres/fantasy/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "History",
|
||||||
|
filter: "category/movies-by-genres/history/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Horror",
|
||||||
|
filter: "category/movies-by-genres/horror/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Music",
|
||||||
|
filter: "category/movies-by-genres/music/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Mystery",
|
||||||
|
filter: "category/movies-by-genres/mystery/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Romance",
|
||||||
|
filter: "category/movies-by-genres/romance/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Sci-Fi",
|
||||||
|
filter: "category/movies-by-genres/sci-fi/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Sport",
|
||||||
|
filter: "category/movies-by-genres/sport/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Thriller",
|
||||||
|
filter: "category/movies-by-genres/thriller/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "War",
|
||||||
|
filter: "category/movies-by-genres/war/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Western",
|
||||||
|
filter: "category/movies-by-genres/western/",
|
||||||
|
},
|
||||||
|
];
|
||||||
34
dist/luxMovies/episodes.js
vendored
Normal file
34
dist/luxMovies/episodes.js
vendored
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getEpisodes = void 0;
|
||||||
|
const getEpisodes = async function ({ url, providerContext, }) {
|
||||||
|
const { axios, cheerio, commonHeaders: headers } = providerContext;
|
||||||
|
console.log("getEpisodeLinks", url);
|
||||||
|
try {
|
||||||
|
const res = await axios.get(url, { headers });
|
||||||
|
const $ = cheerio.load(res.data);
|
||||||
|
const container = $(".entry-content,.entry-inner");
|
||||||
|
$(".unili-content,.code-block-1").remove();
|
||||||
|
const episodes = [];
|
||||||
|
container.find("h4").each((index, element) => {
|
||||||
|
const el = $(element);
|
||||||
|
const title = el.text().replaceAll("-", "").replaceAll(":", "");
|
||||||
|
const link = el
|
||||||
|
.next("p")
|
||||||
|
.find('.btn-outline[style="background:linear-gradient(135deg,#ed0b0b,#f2d152); color: white;"]')
|
||||||
|
.parent()
|
||||||
|
.attr("href");
|
||||||
|
if (title && link) {
|
||||||
|
episodes.push({ title, link });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// console.log(episodes);
|
||||||
|
return episodes;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.log("getEpisodeLinks error: ");
|
||||||
|
// console.error(err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getEpisodes = getEpisodes;
|
||||||
137
dist/luxMovies/meta.js
vendored
Normal file
137
dist/luxMovies/meta.js
vendored
Normal file
@@ -0,0 +1,137 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getMeta = void 0;
|
||||||
|
const headers = {
|
||||||
|
Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
|
||||||
|
"Cache-Control": "no-store",
|
||||||
|
"Accept-Language": "en-US,en;q=0.9",
|
||||||
|
DNT: "1",
|
||||||
|
"sec-ch-ua": '"Not_A Brand";v="8", "Chromium";v="120", "Microsoft Edge";v="120"',
|
||||||
|
"sec-ch-ua-mobile": "?0",
|
||||||
|
"sec-ch-ua-platform": '"Windows"',
|
||||||
|
"Sec-Fetch-Dest": "document",
|
||||||
|
"Sec-Fetch-Mode": "navigate",
|
||||||
|
"Sec-Fetch-Site": "none",
|
||||||
|
"Sec-Fetch-User": "?1",
|
||||||
|
Cookie: "_lscache_vary=62abf8b96599676eb8ec211cffaeb8ff; ext_name=ojplmecpdpgccookcobabopnaifgidhf; cf_clearance=n4Y1XTKZ5TfIMBNQuAXzerwKpx0U35KoOm3imfT0GpU-1732097818-1.2.1.1-ZeAnEu.8D9TSZHYDoj7vwo1A1rpdKl304ZpaBn_QbAQOr211JFAb7.JRQU3EL2eIy1Dfl8HhYvH7_259.22lUz8gbchHcQ8hvfuQXMtFMCbqDBLzjNUZa9stuk.39l28IcPhH9Z2szsf3SGtNI1sAfo66Djt7sOReLK3lHw9UkJp7BdGqt6a2X9qAc8EsAI3lE480Tmt0fkHv14Oc30LSbPB_WwFmiqAki2W.Gv9hV7TN_QBFESleTDlXd.6KGflfd4.KwWF7rpSRo_cgoc9ALLLIafpxHVbe7_g5r7zvpml_Pj8fEL75fw.1GBuy16bciHBuB8s_kahuJYUnhtQFFgfTQl8_Gn6KeovBWx.PJ7nFv5sklHUfAyBVq3t30xKe8ZDydsQ_G.yipfj_In5GmmWcXGb6E4.bioDOwW_sKLtxwdTQt7Nu.RkILX_mKvXNpyLqflIVj8G7X5E8I.unw",
|
||||||
|
"Upgrade-Insecure-Requests": "1",
|
||||||
|
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0",
|
||||||
|
};
|
||||||
|
const getMeta = async ({ link, providerContext, }) => {
|
||||||
|
try {
|
||||||
|
const { axios, cheerio } = providerContext;
|
||||||
|
const url = link;
|
||||||
|
console.log("url", url);
|
||||||
|
const baseUrl = url.split("/").slice(0, 3).join("/");
|
||||||
|
const response = await axios.get(url, {
|
||||||
|
headers: {
|
||||||
|
...headers,
|
||||||
|
Referer: baseUrl,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const $ = cheerio.load(response.data);
|
||||||
|
const infoContainer = $(".entry-content,.post-inner");
|
||||||
|
const heading = infoContainer?.find("h3");
|
||||||
|
const imdbId =
|
||||||
|
//@ts-ignore
|
||||||
|
heading?.next("p")?.find("a")?.[0]?.attribs?.href?.match(/tt\d+/g)?.[0] ||
|
||||||
|
infoContainer.text().match(/tt\d+/g)?.[0] ||
|
||||||
|
"";
|
||||||
|
// console.log(imdbId)
|
||||||
|
const type = heading?.next("p")?.text()?.includes("Series Name")
|
||||||
|
? "series"
|
||||||
|
: "movie";
|
||||||
|
// console.log(type);
|
||||||
|
// title
|
||||||
|
const titleRegex = /Name: (.+)/;
|
||||||
|
const title = heading?.next("p")?.text()?.match(titleRegex)?.[1] || "";
|
||||||
|
// console.log(title);
|
||||||
|
// synopsis
|
||||||
|
const synopsisNode = //@ts-ignore
|
||||||
|
infoContainer?.find("p")?.next("h3,h4")?.next("p")?.[0]?.children?.[0];
|
||||||
|
const synopsis = synopsisNode && "data" in synopsisNode ? synopsisNode.data : "";
|
||||||
|
// console.log(synopsis);
|
||||||
|
// image
|
||||||
|
let image = infoContainer?.find("img[data-lazy-src]")?.attr("data-lazy-src") || "";
|
||||||
|
if (image.startsWith("//")) {
|
||||||
|
image = "https:" + image;
|
||||||
|
}
|
||||||
|
// console.log(image);
|
||||||
|
// console.log({title, synopsis, image, imdbId, type});
|
||||||
|
/// Links
|
||||||
|
const hr = infoContainer?.first()?.find("hr");
|
||||||
|
const list = hr?.nextUntil("hr");
|
||||||
|
const links = [];
|
||||||
|
list.each((index, element) => {
|
||||||
|
element = $(element);
|
||||||
|
// title
|
||||||
|
const title = element?.text() || "";
|
||||||
|
const quality = element?.text().match(/\d+p\b/)?.[0] || "";
|
||||||
|
// console.log(title);
|
||||||
|
// movieLinks
|
||||||
|
const movieLinks = element
|
||||||
|
?.next()
|
||||||
|
.find(".dwd-button")
|
||||||
|
.text()
|
||||||
|
.toLowerCase()
|
||||||
|
.includes("download")
|
||||||
|
? element?.next().find(".dwd-button")?.parent()?.attr("href")
|
||||||
|
: "";
|
||||||
|
// episode links
|
||||||
|
const vcloudLinks = element
|
||||||
|
?.next()
|
||||||
|
.find(".btn-outline[style='background:linear-gradient(135deg,#ed0b0b,#f2d152); color: white;'],.btn-outline[style='background:linear-gradient(135deg,#ed0b0b,#f2d152); color: #fdf8f2;']")
|
||||||
|
?.parent()
|
||||||
|
?.attr("href");
|
||||||
|
console.log(title);
|
||||||
|
const episodesLink = (vcloudLinks
|
||||||
|
? vcloudLinks
|
||||||
|
: element
|
||||||
|
?.next()
|
||||||
|
.find(".dwd-button")
|
||||||
|
.text()
|
||||||
|
.toLowerCase()
|
||||||
|
.includes("episode")
|
||||||
|
? element?.next().find(".dwd-button")?.parent()?.attr("href")
|
||||||
|
: "") ||
|
||||||
|
element
|
||||||
|
?.next()
|
||||||
|
.find(".btn-outline[style='background:linear-gradient(135deg,#0ebac3,#09d261); color: white;']")
|
||||||
|
?.parent()
|
||||||
|
?.attr("href");
|
||||||
|
if (movieLinks || episodesLink) {
|
||||||
|
links.push({
|
||||||
|
title,
|
||||||
|
directLinks: movieLinks
|
||||||
|
? [{ title: "Movie", link: movieLinks, type: "movie" }]
|
||||||
|
: [],
|
||||||
|
episodesLink,
|
||||||
|
quality,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// console.log(links);
|
||||||
|
return {
|
||||||
|
title,
|
||||||
|
synopsis,
|
||||||
|
image,
|
||||||
|
imdbId,
|
||||||
|
type,
|
||||||
|
linkList: links,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (error) {
|
||||||
|
console.log("getInfo error");
|
||||||
|
console.error(error);
|
||||||
|
// ToastAndroid.show('No response', ToastAndroid.SHORT);
|
||||||
|
return {
|
||||||
|
title: "",
|
||||||
|
synopsis: "",
|
||||||
|
image: "",
|
||||||
|
imdbId: "",
|
||||||
|
type: "",
|
||||||
|
linkList: [],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getMeta = getMeta;
|
||||||
73
dist/luxMovies/posts.js
vendored
Normal file
73
dist/luxMovies/posts.js
vendored
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getSearchPosts = exports.getPosts = void 0;
|
||||||
|
const headers = {
|
||||||
|
Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
|
||||||
|
"Cache-Control": "no-store",
|
||||||
|
"Accept-Language": "en-US,en;q=0.9",
|
||||||
|
DNT: "1",
|
||||||
|
"sec-ch-ua": '"Not_A Brand";v="8", "Chromium";v="120", "Microsoft Edge";v="120"',
|
||||||
|
"sec-ch-ua-mobile": "?0",
|
||||||
|
"sec-ch-ua-platform": '"Windows"',
|
||||||
|
"Sec-Fetch-Dest": "document",
|
||||||
|
"Sec-Fetch-Mode": "navigate",
|
||||||
|
"Sec-Fetch-Site": "none",
|
||||||
|
"Sec-Fetch-User": "?1",
|
||||||
|
Cookie: "ext_name=ojplmecpdpgccookcobabopnaifgidhf; cf_clearance=gaIhTNzqSvp27JCVf7qiEUfYRfwyj0Jx9rcsn774BbE-1732694853-1.2.1.1-QKgYJvmrEz08gM9qbAp70diztE2.hseO2NNi.0imIUk_gkuWUcr7U8t5Zn_z4Ov30sIGPBES1PBgMUEa.s8e8QTkQoZjgziFmoC7YdX7s2Jnt.tYCxE_s5mMLQQBYbz_94A89IYe93Y6kyLQm_L.dvUKPPiGjn_sH3qRD0g4p9oOl0SPvH0T2W_EaD0r6mVBasbgro9dAROt_6CxshXOEGeMOnoWR.ID699FKldjMUhbXJbATAffdOY6kf2sD_iwrSl4bcetTlDHd4gusTVfxSS1pL5qNjyTU9wa38soPl1wZoqFHkEGOPWz6S7FD5ikHxX0bArFem9hiDeJXctYfWz5e_Lkc6lH7nW0Rm2XS3gxCadQSg21RkSReN6kDAEecqjgJSE4zUomkWAxFZ98TSShgGWC0ridPTpdQizPDZQ; _lscache_vary=c1d682536aea2d88fbb2574666e1f0aa",
|
||||||
|
"Upgrade-Insecure-Requests": "1",
|
||||||
|
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0",
|
||||||
|
};
|
||||||
|
const getPosts = async ({ filter, page, providerValue, signal, providerContext, }) => {
|
||||||
|
const { getBaseUrl } = providerContext;
|
||||||
|
const baseUrl = await getBaseUrl("lux");
|
||||||
|
console.log("vegaGetPosts baseUrl:", providerValue, baseUrl);
|
||||||
|
const url = `${baseUrl}/${filter}/page/${page}/`;
|
||||||
|
console.log("lux url:", url);
|
||||||
|
return posts(url, signal, providerContext);
|
||||||
|
};
|
||||||
|
exports.getPosts = getPosts;
|
||||||
|
const getSearchPosts = async ({ searchQuery, page, providerValue, signal, providerContext, }) => {
|
||||||
|
const { getBaseUrl } = providerContext;
|
||||||
|
const baseUrl = await getBaseUrl("lux");
|
||||||
|
console.log("vegaGetPosts baseUrl:", providerValue, baseUrl);
|
||||||
|
const url = `${baseUrl}/page/${page}/?s=${searchQuery}`;
|
||||||
|
console.log("lux url:", url);
|
||||||
|
return posts(url, signal, providerContext);
|
||||||
|
};
|
||||||
|
exports.getSearchPosts = getSearchPosts;
|
||||||
|
async function posts(url, signal, providerContext) {
|
||||||
|
try {
|
||||||
|
const { axios, cheerio } = providerContext;
|
||||||
|
const urlRes = await axios.get(url, { headers, signal });
|
||||||
|
const $ = cheerio.load(urlRes.data);
|
||||||
|
const posts = [];
|
||||||
|
$(".blog-items")
|
||||||
|
?.children("article")
|
||||||
|
?.each((index, element) => {
|
||||||
|
const post = {
|
||||||
|
title: $(element)
|
||||||
|
?.find("a")
|
||||||
|
?.attr("title")
|
||||||
|
?.replace("Download", "")
|
||||||
|
?.match(/^(.*?)\s*\((\d{4})\)|^(.*?)\s*\((Season \d+)\)/)?.[0] ||
|
||||||
|
$(element)?.find("a")?.attr("title")?.replace("Download", "") ||
|
||||||
|
"",
|
||||||
|
link: $(element)?.find("a")?.attr("href") || "",
|
||||||
|
image: $(element).find("a").find("img").attr("data-lazy-src") ||
|
||||||
|
$(element).find("a").find("img").attr("data-src") ||
|
||||||
|
$(element).find("a").find("img").attr("src") ||
|
||||||
|
"",
|
||||||
|
};
|
||||||
|
if (post.image.startsWith("//")) {
|
||||||
|
post.image = "https:" + post.image;
|
||||||
|
}
|
||||||
|
posts.push(post);
|
||||||
|
});
|
||||||
|
// console.log(posts);
|
||||||
|
return posts;
|
||||||
|
}
|
||||||
|
catch (error) {
|
||||||
|
console.error("vegaGetPosts error:", error);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
94
dist/luxMovies/stream.js
vendored
Normal file
94
dist/luxMovies/stream.js
vendored
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getStream = getStream;
|
||||||
|
const headers = {
|
||||||
|
Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
|
||||||
|
"Cache-Control": "no-store",
|
||||||
|
"Accept-Language": "en-US,en;q=0.9",
|
||||||
|
DNT: "1",
|
||||||
|
"sec-ch-ua": '"Not_A Brand";v="8", "Chromium";v="120", "Microsoft Edge";v="120"',
|
||||||
|
"sec-ch-ua-mobile": "?0",
|
||||||
|
"sec-ch-ua-platform": '"Windows"',
|
||||||
|
"Sec-Fetch-Dest": "document",
|
||||||
|
"Sec-Fetch-Mode": "navigate",
|
||||||
|
"Sec-Fetch-Site": "none",
|
||||||
|
"Sec-Fetch-User": "?1",
|
||||||
|
Cookie: "_lscache_vary=62abf8b96599676eb8ec211cffaeb8ff; ext_name=ojplmecpdpgccookcobabopnaifgidhf; cf_clearance=n4Y1XTKZ5TfIMBNQuAXzerwKpx0U35KoOm3imfT0GpU-1732097818-1.2.1.1-ZeAnEu.8D9TSZHYDoj7vwo1A1rpdKl304ZpaBn_QbAQOr211JFAb7.JRQU3EL2eIy1Dfl8HhYvH7_259.22lUz8gbchHcQ8hvfuQXMtFMCbqDBLzjNUZa9stuk.39l28IcPhH9Z2szsf3SGtNI1sAfo66Djt7sOReLK3lHw9UkJp7BdGqt6a2X9qAc8EsAI3lE480Tmt0fkHv14Oc30LSbPB_WwFmiqAki2W.Gv9hV7TN_QBFESleTDlXd.6KGflfd4.KwWF7rpSRo_cgoc9ALLLIafpxHVbe7_g5r7zvpml_Pj8fEL75fw.1GBuy16bciHBuB8s_kahuJYUnhtQFFgfTQl8_Gn6KeovBWx.PJ7nFv5sklHUfAyBVq3t30xKe8ZDydsQ_G.yipfj_In5GmmWcXGb6E4.bioDOwW_sKLtxwdTQt7Nu.RkILX_mKvXNpyLqflIVj8G7X5E8I.unw",
|
||||||
|
"Upgrade-Insecure-Requests": "1",
|
||||||
|
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0",
|
||||||
|
};
|
||||||
|
async function getStream({ link, type, signal, providerContext, }) {
|
||||||
|
const { axios, cheerio, extractors } = providerContext;
|
||||||
|
const { hubcloudExtracter } = extractors;
|
||||||
|
try {
|
||||||
|
const streamLinks = [];
|
||||||
|
console.log("dotlink", link);
|
||||||
|
if (type === "movie") {
|
||||||
|
// vlink
|
||||||
|
const dotlinkRes = await axios(`${link}`, { headers });
|
||||||
|
const dotlinkText = dotlinkRes.data;
|
||||||
|
// console.log('dotlinkText', dotlinkText);
|
||||||
|
const vlink = dotlinkText.match(/<a\s+href="([^"]*cloud\.[^"]*)"/i) || [];
|
||||||
|
// console.log('vLink', vlink[1]);
|
||||||
|
link = vlink[1];
|
||||||
|
// filepress link
|
||||||
|
try {
|
||||||
|
const $ = cheerio.load(dotlinkText);
|
||||||
|
const filepressLink = $('.btn.btn-sm.btn-outline[style="background:linear-gradient(135deg,rgb(252,185,0) 0%,rgb(0,0,0)); color: #fdf8f2;"]')
|
||||||
|
.parent()
|
||||||
|
.attr("href");
|
||||||
|
// console.log('filepressLink', filepressLink);
|
||||||
|
const filepressID = filepressLink?.split("/").pop();
|
||||||
|
const filepressBaseUrl = filepressLink
|
||||||
|
?.split("/")
|
||||||
|
.slice(0, -2)
|
||||||
|
.join("/");
|
||||||
|
// console.log('filepressID', filepressID);
|
||||||
|
// console.log('filepressBaseUrl', filepressBaseUrl);
|
||||||
|
const filepressTokenRes = await axios.post(filepressBaseUrl + "/api/file/downlaod/", {
|
||||||
|
id: filepressID,
|
||||||
|
method: "indexDownlaod",
|
||||||
|
captchaValue: null,
|
||||||
|
}, {
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
Referer: filepressBaseUrl,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
// console.log('filepressTokenRes', filepressTokenRes.data);
|
||||||
|
if (filepressTokenRes.data?.status) {
|
||||||
|
const filepressToken = filepressTokenRes.data?.data;
|
||||||
|
const filepressStreamLink = await axios.post(filepressBaseUrl + "/api/file/downlaod2/", {
|
||||||
|
id: filepressToken,
|
||||||
|
method: "indexDownlaod",
|
||||||
|
captchaValue: null,
|
||||||
|
}, {
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
Referer: filepressBaseUrl,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
// console.log('filepressStreamLink', filepressStreamLink.data);
|
||||||
|
streamLinks.push({
|
||||||
|
server: "filepress",
|
||||||
|
link: filepressStreamLink.data?.data?.[0],
|
||||||
|
type: "mkv",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (error) {
|
||||||
|
console.log("filepress error: ");
|
||||||
|
// console.error(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return await hubcloudExtracter(link, signal);
|
||||||
|
}
|
||||||
|
catch (error) {
|
||||||
|
console.log("getStream error: ", error);
|
||||||
|
if (error.message.includes("Aborted")) {
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
}
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
86
dist/mod/catalog.js
vendored
86
dist/mod/catalog.js
vendored
@@ -1,87 +1,87 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.modGenresList = exports.catalogList = void 0;
|
exports.genres = exports.catalog = void 0;
|
||||||
exports.catalogList = [
|
exports.catalog = [
|
||||||
{
|
{
|
||||||
title: 'Latest',
|
title: "Latest",
|
||||||
filter: '',
|
filter: "",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Netflix',
|
title: "Netflix",
|
||||||
filter: '/ott/netflix',
|
filter: "/ott/netflix",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'HBO Max',
|
title: "HBO Max",
|
||||||
filter: '/ott/hbo-max',
|
filter: "/ott/hbo-max",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Amazon Prime',
|
title: "Amazon Prime",
|
||||||
filter: '/ott/amazon-prime-video',
|
filter: "/ott/amazon-prime-video",
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
exports.modGenresList = [
|
exports.genres = [
|
||||||
{
|
{
|
||||||
title: 'Apple TV+',
|
title: "Apple TV+",
|
||||||
filter: '/ott/apple-tv',
|
filter: "/ott/apple-tv",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Disney+',
|
title: "Disney+",
|
||||||
filter: '/ott/disney-plus',
|
filter: "/ott/disney-plus",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Hulu',
|
title: "Hulu",
|
||||||
filter: '/ott/hulu',
|
filter: "/ott/hulu",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Crunchyroll',
|
title: "Crunchyroll",
|
||||||
filter: '/ott/crunchyroll',
|
filter: "/ott/crunchyroll",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Action',
|
title: "Action",
|
||||||
filter: '/movies-by-genre/action/',
|
filter: "/movies-by-genre/action/",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Adventure',
|
title: "Adventure",
|
||||||
filter: '/movies-by-genre/adventure/',
|
filter: "/movies-by-genre/adventure/",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Animation',
|
title: "Animation",
|
||||||
filter: '/movies-by-genre/animated/',
|
filter: "/movies-by-genre/animated/",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Comedy',
|
title: "Comedy",
|
||||||
filter: '/movies-by-genre/comedy/',
|
filter: "/movies-by-genre/comedy/",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Crime',
|
title: "Crime",
|
||||||
filter: '/movies-by-genre/crime/',
|
filter: "/movies-by-genre/crime/",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Documentary',
|
title: "Documentary",
|
||||||
filter: '/movies-by-genre/documentary/',
|
filter: "/movies-by-genre/documentary/",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Fantasy',
|
title: "Fantasy",
|
||||||
filter: '/movies-by-genre/fantasy/',
|
filter: "/movies-by-genre/fantasy/",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Horror',
|
title: "Horror",
|
||||||
filter: '/movies-by-genre/horror/',
|
filter: "/movies-by-genre/horror/",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Mystery',
|
title: "Mystery",
|
||||||
filter: '/movies-by-genre/mystery/',
|
filter: "/movies-by-genre/mystery/",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Romance',
|
title: "Romance",
|
||||||
filter: '/movies-by-genre/romance/',
|
filter: "/movies-by-genre/romance/",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Thriller',
|
title: "Thriller",
|
||||||
filter: '/movies-by-genre/thriller/',
|
filter: "/movies-by-genre/thriller/",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Sci-Fi',
|
title: "Sci-Fi",
|
||||||
filter: '/movies-by-genre/sci-fi/',
|
filter: "/movies-by-genre/sci-fi/",
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|||||||
49
dist/mod/episodes.js
vendored
Normal file
49
dist/mod/episodes.js
vendored
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getEpisodes = void 0;
|
||||||
|
const getEpisodes = async function ({ url, providerContext, }) {
|
||||||
|
const { axios, cheerio } = providerContext;
|
||||||
|
try {
|
||||||
|
if (url.includes("url=")) {
|
||||||
|
url = atob(url.split("url=")[1]);
|
||||||
|
}
|
||||||
|
const res = await axios.get(url);
|
||||||
|
const html = res.data;
|
||||||
|
let $ = cheerio.load(html);
|
||||||
|
if (url.includes("url=")) {
|
||||||
|
const newUrl = $("meta[http-equiv='refresh']")
|
||||||
|
.attr("content")
|
||||||
|
?.split("url=")[1];
|
||||||
|
const res2 = await axios.get(newUrl || url);
|
||||||
|
const html2 = res2.data;
|
||||||
|
$ = cheerio.load(html2);
|
||||||
|
}
|
||||||
|
const episodeLinks = [];
|
||||||
|
$("h3,h4").map((i, element) => {
|
||||||
|
const seriesTitle = $(element).text();
|
||||||
|
const episodesLink = $(element).find("a").attr("href");
|
||||||
|
if (episodesLink && episodesLink !== "#") {
|
||||||
|
episodeLinks.push({
|
||||||
|
title: seriesTitle.trim() || "No title found",
|
||||||
|
link: episodesLink || "",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$("a.maxbutton").map((i, element) => {
|
||||||
|
const seriesTitle = $(element).children("span").text();
|
||||||
|
const episodesLink = $(element).attr("href");
|
||||||
|
if (episodesLink && episodesLink !== "#") {
|
||||||
|
episodeLinks.push({
|
||||||
|
title: seriesTitle.trim() || "No title found",
|
||||||
|
link: episodesLink || "",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return episodeLinks;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getEpisodes = getEpisodes;
|
||||||
62
dist/mod/meta.js
vendored
Normal file
62
dist/mod/meta.js
vendored
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getMeta = void 0;
|
||||||
|
const getMeta = async function ({ link, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const { axios, cheerio } = providerContext;
|
||||||
|
const url = link;
|
||||||
|
const res = await axios.get(url);
|
||||||
|
const data = res.data;
|
||||||
|
const $ = cheerio.load(data);
|
||||||
|
const meta = {
|
||||||
|
title: $(".imdbwp__title").text(),
|
||||||
|
synopsis: $(".imdbwp__teaser").text(),
|
||||||
|
image: $(".imdbwp__thumb").find("img").attr("src") || "",
|
||||||
|
imdbId: $(".imdbwp__link").attr("href")?.split("/")[4] || "",
|
||||||
|
type: $(".thecontent").text().toLocaleLowerCase().includes("season")
|
||||||
|
? "series"
|
||||||
|
: "movie",
|
||||||
|
};
|
||||||
|
const links = [];
|
||||||
|
$("h3,h4").map((i, element) => {
|
||||||
|
const seriesTitle = $(element).text();
|
||||||
|
// const batchZipLink = $(element)
|
||||||
|
// .next("p")
|
||||||
|
// .find(".maxbutton-batch-zip,.maxbutton-zip-download")
|
||||||
|
// .attr("href");
|
||||||
|
const episodesLink = $(element)
|
||||||
|
.next("p")
|
||||||
|
.find(".maxbutton-episode-links,.maxbutton-g-drive,.maxbutton-af-download")
|
||||||
|
.attr("href");
|
||||||
|
const movieLink = $(element)
|
||||||
|
.next("p")
|
||||||
|
.find(".maxbutton-download-links")
|
||||||
|
.attr("href");
|
||||||
|
if (movieLink ||
|
||||||
|
(episodesLink && episodesLink !== "javascript:void(0);")) {
|
||||||
|
links.push({
|
||||||
|
title: seriesTitle.replace("Download ", "").trim() || "Download",
|
||||||
|
episodesLink: episodesLink || "",
|
||||||
|
directLinks: movieLink
|
||||||
|
? [{ link: movieLink, title: "Movie", type: "movie" }]
|
||||||
|
: [],
|
||||||
|
quality: seriesTitle?.match(/\d+p\b/)?.[0] || "",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// console.log('mod meta', links);
|
||||||
|
return { ...meta, linkList: links };
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return {
|
||||||
|
title: "",
|
||||||
|
synopsis: "",
|
||||||
|
image: "",
|
||||||
|
imdbId: "",
|
||||||
|
type: "movie",
|
||||||
|
linkList: [],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getMeta = getMeta;
|
||||||
44
dist/mod/posts.js
vendored
Normal file
44
dist/mod/posts.js
vendored
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getSearchPosts = exports.getPosts = void 0;
|
||||||
|
const getPosts = async function ({ filter, page, signal, providerContext, }) {
|
||||||
|
const { getBaseUrl, axios, cheerio } = providerContext;
|
||||||
|
const baseUrl = await getBaseUrl("Moviesmod");
|
||||||
|
const url = `${baseUrl + filter}/page/${page}/`;
|
||||||
|
return posts({ url, signal, axios, cheerio });
|
||||||
|
};
|
||||||
|
exports.getPosts = getPosts;
|
||||||
|
const getSearchPosts = async function ({ searchQuery, page, signal, providerContext, }) {
|
||||||
|
const { getBaseUrl, axios, cheerio } = providerContext;
|
||||||
|
const baseUrl = await getBaseUrl("Moviesmod");
|
||||||
|
const url = `${baseUrl}/search/${searchQuery}/page/${page}/`;
|
||||||
|
return posts({ url, signal, axios, cheerio });
|
||||||
|
};
|
||||||
|
exports.getSearchPosts = getSearchPosts;
|
||||||
|
async function posts({ url, signal, axios, cheerio, }) {
|
||||||
|
try {
|
||||||
|
const res = await axios.get(url, { signal });
|
||||||
|
const data = res.data;
|
||||||
|
const $ = cheerio.load(data);
|
||||||
|
const catalog = [];
|
||||||
|
$(".post-cards")
|
||||||
|
.find("article")
|
||||||
|
.map((i, element) => {
|
||||||
|
const title = $(element).find("a").attr("title");
|
||||||
|
const link = $(element).find("a").attr("href");
|
||||||
|
const image = $(element).find("img").attr("src");
|
||||||
|
if (title && link && image) {
|
||||||
|
catalog.push({
|
||||||
|
title: title,
|
||||||
|
link: link,
|
||||||
|
image: image,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return catalog;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("modGetPosts error ", err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
256
dist/mod/stream.js
vendored
Normal file
256
dist/mod/stream.js
vendored
Normal file
@@ -0,0 +1,256 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getStream = void 0;
|
||||||
|
const headers = {
|
||||||
|
Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
|
||||||
|
"Cache-Control": "no-store",
|
||||||
|
"Accept-Language": "en-US,en;q=0.9",
|
||||||
|
DNT: "1",
|
||||||
|
"sec-ch-ua": '"Not_A Brand";v="8", "Chromium";v="120", "Microsoft Edge";v="120"',
|
||||||
|
"sec-ch-ua-mobile": "?0",
|
||||||
|
"sec-ch-ua-platform": '"Windows"',
|
||||||
|
"Sec-Fetch-Dest": "document",
|
||||||
|
"Sec-Fetch-Mode": "navigate",
|
||||||
|
Cookie: "popads_user_id=6ba8fe60a481387a3249f05aa058822d",
|
||||||
|
"Sec-Fetch-Site": "none",
|
||||||
|
"Sec-Fetch-User": "?1",
|
||||||
|
"Upgrade-Insecure-Requests": "1",
|
||||||
|
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0",
|
||||||
|
};
|
||||||
|
const getStream = async function ({ link: url, type, providerContext, }) {
|
||||||
|
const { axios, cheerio } = providerContext;
|
||||||
|
try {
|
||||||
|
const modGetEpisodeLinks = async function ({ url, providerContext, }) {
|
||||||
|
const { axios, cheerio } = providerContext;
|
||||||
|
try {
|
||||||
|
if (url.includes("url=")) {
|
||||||
|
url = atob(url.split("url=")[1]);
|
||||||
|
}
|
||||||
|
const res = await axios.get(url);
|
||||||
|
const html = res.data;
|
||||||
|
let $ = cheerio.load(html);
|
||||||
|
if (url.includes("url=")) {
|
||||||
|
const newUrl = $("meta[http-equiv='refresh']")
|
||||||
|
.attr("content")
|
||||||
|
?.split("url=")[1];
|
||||||
|
const res2 = await axios.get(newUrl || url);
|
||||||
|
const html2 = res2.data;
|
||||||
|
$ = cheerio.load(html2);
|
||||||
|
}
|
||||||
|
const episodeLinks = [];
|
||||||
|
$("h3,h4").map((i, element) => {
|
||||||
|
const seriesTitle = $(element).text();
|
||||||
|
const episodesLink = $(element).find("a").attr("href");
|
||||||
|
if (episodesLink && episodesLink !== "#") {
|
||||||
|
episodeLinks.push({
|
||||||
|
title: seriesTitle.trim() || "No title found",
|
||||||
|
link: episodesLink || "",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$("a.maxbutton").map((i, element) => {
|
||||||
|
const seriesTitle = $(element).children("span").text();
|
||||||
|
const episodesLink = $(element).attr("href");
|
||||||
|
if (episodesLink && episodesLink !== "#") {
|
||||||
|
episodeLinks.push({
|
||||||
|
title: seriesTitle.trim() || "No title found",
|
||||||
|
link: episodesLink || "",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return episodeLinks;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
console.log("modGetStream", type, url);
|
||||||
|
if (type === "movie") {
|
||||||
|
const servers = await modGetEpisodeLinks({ url, providerContext });
|
||||||
|
url = servers[0].link || url;
|
||||||
|
}
|
||||||
|
let downloadLink = await modExtractor(url, providerContext);
|
||||||
|
// console.log(downloadLink.data);
|
||||||
|
const ddl = downloadLink?.data?.match(/content="0;url=(.*?)"/)?.[1] || url;
|
||||||
|
// console.log('ddl', url);
|
||||||
|
// console.log(ddl);
|
||||||
|
// console.log(ddl);
|
||||||
|
const servers = [];
|
||||||
|
const driveLink = await isDriveLink(ddl);
|
||||||
|
const driveRes = await axios.get(driveLink, { headers });
|
||||||
|
const driveHtml = driveRes.data;
|
||||||
|
const $drive = cheerio.load(driveHtml);
|
||||||
|
try {
|
||||||
|
const resumeBot = $drive(".btn.btn-light").attr("href") || "";
|
||||||
|
const resumeBotRes = await axios.get(resumeBot, { headers });
|
||||||
|
const resumeBotToken = resumeBotRes.data.match(/formData\.append\('token', '([a-f0-9]+)'\)/)[1];
|
||||||
|
const resumeBotBody = new FormData();
|
||||||
|
resumeBotBody.append("token", resumeBotToken);
|
||||||
|
const resumeBotPath = resumeBotRes.data.match(/fetch\('\/download\?id=([a-zA-Z0-9\/+]+)'/)[1];
|
||||||
|
const resumeBotBaseUrl = resumeBot.split("/download")[0];
|
||||||
|
// console.log(
|
||||||
|
// 'resumeBotPath',
|
||||||
|
// resumeBotBaseUrl + '/download?id=' + resumeBotPath,
|
||||||
|
// );
|
||||||
|
// console.log('resumeBotBody', resumeBotToken);
|
||||||
|
const resumeBotDownload = await fetch(resumeBotBaseUrl + "/download?id=" + resumeBotPath, {
|
||||||
|
method: "POST",
|
||||||
|
body: resumeBotBody,
|
||||||
|
headers: {
|
||||||
|
Referer: resumeBot,
|
||||||
|
Cookie: "PHPSESSID=7e9658ce7c805dab5bbcea9046f7f308",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const resumeBotDownloadData = await resumeBotDownload.json();
|
||||||
|
console.log("resumeBotDownloadData", resumeBotDownloadData.url);
|
||||||
|
servers.push({
|
||||||
|
server: "ResumeBot",
|
||||||
|
link: resumeBotDownloadData.url,
|
||||||
|
type: "mkv",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.log("ResumeBot link not found", err);
|
||||||
|
}
|
||||||
|
// CF workers type 1
|
||||||
|
try {
|
||||||
|
const cfWorkersLink = driveLink.replace("/file", "/wfile") + "?type=1";
|
||||||
|
const cfWorkersRes = await axios.get(cfWorkersLink, { headers });
|
||||||
|
const cfWorkersHtml = cfWorkersRes.data;
|
||||||
|
const $cfWorkers = cheerio.load(cfWorkersHtml);
|
||||||
|
const cfWorkersStream = $cfWorkers(".btn-success");
|
||||||
|
cfWorkersStream.each((i, el) => {
|
||||||
|
const link = el.attribs?.href;
|
||||||
|
if (link) {
|
||||||
|
servers.push({
|
||||||
|
server: "Cf Worker 1." + i,
|
||||||
|
link: link,
|
||||||
|
type: "mkv",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.log("CF workers link not found", err);
|
||||||
|
}
|
||||||
|
// CF workers type 2
|
||||||
|
try {
|
||||||
|
const cfWorkersLink = driveLink.replace("/file", "/wfile") + "?type=2";
|
||||||
|
const cfWorkersRes = await axios.get(cfWorkersLink, { headers });
|
||||||
|
const cfWorkersHtml = cfWorkersRes.data;
|
||||||
|
const $cfWorkers = cheerio.load(cfWorkersHtml);
|
||||||
|
const cfWorkersStream = $cfWorkers(".btn-success");
|
||||||
|
cfWorkersStream.each((i, el) => {
|
||||||
|
const link = el.attribs?.href;
|
||||||
|
if (link) {
|
||||||
|
servers.push({
|
||||||
|
server: "Cf Worker 2." + i,
|
||||||
|
link: link,
|
||||||
|
type: "mkv",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.log("CF workers link not found", err);
|
||||||
|
}
|
||||||
|
// gdrive
|
||||||
|
//instant link
|
||||||
|
try {
|
||||||
|
const seed = $drive(".btn-danger").attr("href") || "";
|
||||||
|
const instantToken = seed.split("=")[1];
|
||||||
|
// console.log('InstantToken', instantToken);
|
||||||
|
const InstantFromData = new FormData();
|
||||||
|
InstantFromData.append("keys", instantToken);
|
||||||
|
const videoSeedUrl = seed.split("/").slice(0, 3).join("/") + "/api";
|
||||||
|
// console.log('videoSeedUrl', videoSeedUrl);
|
||||||
|
const instantLinkRes = await fetch(videoSeedUrl, {
|
||||||
|
method: "POST",
|
||||||
|
body: InstantFromData,
|
||||||
|
headers: {
|
||||||
|
"x-token": videoSeedUrl,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const instantLinkData = await instantLinkRes.json();
|
||||||
|
// console.log('instantLinkData', instantLinkData);
|
||||||
|
if (instantLinkData.error === false) {
|
||||||
|
const instantLink = instantLinkData.url;
|
||||||
|
servers.push({
|
||||||
|
server: "Gdrive-Instant",
|
||||||
|
link: instantLink,
|
||||||
|
type: "mkv",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
console.log("Instant link not found", instantLinkData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.log("Instant link not found", err);
|
||||||
|
}
|
||||||
|
return servers;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.log("getStream error", err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getStream = getStream;
|
||||||
|
const isDriveLink = async (ddl) => {
|
||||||
|
if (ddl.includes("drive")) {
|
||||||
|
const driveLeach = await fetch(ddl);
|
||||||
|
const driveLeachData = await driveLeach.text();
|
||||||
|
const pathMatch = driveLeachData.match(/window\.location\.replace\("([^"]+)"\)/);
|
||||||
|
const path = pathMatch?.[1];
|
||||||
|
const mainUrl = ddl.split("/")[2];
|
||||||
|
console.log(`driveUrl = https://${mainUrl}${path}`);
|
||||||
|
return `https://${mainUrl}${path}`;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return ddl;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
async function modExtractor(url, providerContext) {
|
||||||
|
const { axios, cheerio } = providerContext;
|
||||||
|
try {
|
||||||
|
const wpHttp = url.split("sid=")[1];
|
||||||
|
var bodyFormData0 = new FormData();
|
||||||
|
bodyFormData0.append("_wp_http", wpHttp);
|
||||||
|
const res = await fetch(url.split("?")[0], {
|
||||||
|
method: "POST",
|
||||||
|
body: bodyFormData0,
|
||||||
|
});
|
||||||
|
const data = await res.text();
|
||||||
|
// console.log('', data);
|
||||||
|
const html = data;
|
||||||
|
const $ = cheerio.load(html);
|
||||||
|
// find input with name="_wp_http2"
|
||||||
|
const wpHttp2 = $("input").attr("name", "_wp_http2").val();
|
||||||
|
// console.log('wpHttp2', wpHttp2);
|
||||||
|
// form data
|
||||||
|
var bodyFormData = new FormData();
|
||||||
|
bodyFormData.append("_wp_http2", wpHttp2);
|
||||||
|
const formUrl1 = $("form").attr("action");
|
||||||
|
const formUrl = formUrl1 || url.split("?")[0];
|
||||||
|
const res2 = await fetch(formUrl, {
|
||||||
|
method: "POST",
|
||||||
|
body: bodyFormData,
|
||||||
|
});
|
||||||
|
const html2 = await res2.text();
|
||||||
|
const link = html2.match(/setAttribute\("href",\s*"(.*?)"/)[1];
|
||||||
|
console.log(link);
|
||||||
|
const cookie = link.split("=")[1];
|
||||||
|
console.log("cookie", cookie);
|
||||||
|
const downloadLink = await axios.get(link, {
|
||||||
|
headers: {
|
||||||
|
Referer: formUrl,
|
||||||
|
Cookie: `${cookie}=${wpHttp2}`,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return downloadLink;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.log("modGetStream error", err);
|
||||||
|
}
|
||||||
|
}
|
||||||
21
dist/moviesApi/index.js
vendored
21
dist/moviesApi/index.js
vendored
@@ -1,15 +1,16 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.moviesApi = void 0;
|
exports.moviesApi = void 0;
|
||||||
const allCatalog_1 = require("../autoEmbed/allCatalog");
|
const catalog_1 = require("../autoEmbed/catalog");
|
||||||
const allGetInfo_1 = require("../autoEmbed/allGetInfo");
|
const module_1 = require();
|
||||||
const allGetPost_1 = require("../autoEmbed/allGetPost");
|
";;
|
||||||
const mpGetStream_1 = require("./mpGetStream");
|
const posts_1 = require("../autoEmbed/posts");
|
||||||
|
const stream_1 = require("./stream");
|
||||||
exports.moviesApi = {
|
exports.moviesApi = {
|
||||||
catalog: allCatalog_1.allCatalog,
|
catalog: catalog_1.allCatalog,
|
||||||
genres: allCatalog_1.allGenresList,
|
genres: catalog_1.allGenresList,
|
||||||
GetMetaData: allGetInfo_1.allGetInfo,
|
GetMetaData: module_1.allGetInfo,
|
||||||
GetHomePosts: allGetPost_1.allGetPost,
|
GetHomePosts: posts_1.allGetPost,
|
||||||
GetStream: mpGetStream_1.mpGetStream,
|
GetStream: stream_1.mpGetStream,
|
||||||
GetSearchPosts: allGetPost_1.allGetSearchPosts,
|
GetSearchPosts: posts_1.allGetSearchPosts,
|
||||||
};
|
};
|
||||||
|
|||||||
85
dist/moviesApi/stream.js
vendored
Normal file
85
dist/moviesApi/stream.js
vendored
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.mpGetStream = void 0;
|
||||||
|
const types_1 = require("../types");
|
||||||
|
const mpGetStream = async function ({ link: id, type, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const { getBaseUrl, cheerio } = providerContext;
|
||||||
|
const streams = [];
|
||||||
|
const { season, episode, tmdbId } = JSON.parse(id);
|
||||||
|
const baseUrl = await getBaseUrl('moviesapi');
|
||||||
|
const link = type === 'movie'
|
||||||
|
? `${baseUrl}/movie/${tmdbId}`
|
||||||
|
: `${baseUrl}/tv/${tmdbId}-${season}-${episode}`;
|
||||||
|
const res = await fetch(link, {
|
||||||
|
headers: {
|
||||||
|
referer: baseUrl,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const baseData = await res.text();
|
||||||
|
const $ = cheerio.load(baseData);
|
||||||
|
const embededUrl = $('iframe').attr('src') || '';
|
||||||
|
const response = await fetch(embededUrl, {
|
||||||
|
credentials: 'omit',
|
||||||
|
headers: {
|
||||||
|
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0',
|
||||||
|
Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
|
||||||
|
'Accept-Language': 'en-US,en;q=0.5',
|
||||||
|
'Alt-Used': 'w1.moviesapi.club',
|
||||||
|
'Upgrade-Insecure-Requests': '1',
|
||||||
|
'Sec-Fetch-Dest': 'document',
|
||||||
|
'Sec-Fetch-Mode': 'navigate',
|
||||||
|
'Sec-Fetch-Site': 'none',
|
||||||
|
'Sec-Fetch-User': '?1',
|
||||||
|
Pragma: 'no-cache',
|
||||||
|
'Cache-Control': 'no-cache',
|
||||||
|
referer: baseUrl,
|
||||||
|
},
|
||||||
|
referrer: baseUrl,
|
||||||
|
method: 'GET',
|
||||||
|
mode: 'cors',
|
||||||
|
});
|
||||||
|
const data2 = await response.text();
|
||||||
|
// Extract the encrypted content
|
||||||
|
const contents = data2.match(/const\s+Encrypted\s*=\s*['"]({.*})['"]/)?.[1] || '';
|
||||||
|
if (embededUrl) {
|
||||||
|
const res2 = await fetch('https://ext.8man.me/api/decrypt?passphrase==JV[t}{trEV=Ilh5', {
|
||||||
|
method: 'POST',
|
||||||
|
body: contents,
|
||||||
|
});
|
||||||
|
const finalData = await res2.json();
|
||||||
|
const subtitle = finalData?.subtitles?.map((sub) => ({
|
||||||
|
title: sub?.label || 'Unknown',
|
||||||
|
language: sub?.label,
|
||||||
|
type: sub?.file?.includes('.vtt')
|
||||||
|
? types_1.TextTrackType.VTT
|
||||||
|
: types_1.TextTrackType.SUBRIP,
|
||||||
|
uri: sub?.file,
|
||||||
|
}));
|
||||||
|
streams.push({
|
||||||
|
server: 'vidstreaming ',
|
||||||
|
type: 'm3u8',
|
||||||
|
subtitles: subtitle,
|
||||||
|
link: finalData?.videoUrl,
|
||||||
|
headers: {
|
||||||
|
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0',
|
||||||
|
Referer: baseUrl,
|
||||||
|
Origin: baseUrl,
|
||||||
|
Accept: '*/*',
|
||||||
|
'Accept-Language': 'en-US,en;q=0.5',
|
||||||
|
'Sec-Fetch-Dest': 'empty',
|
||||||
|
'Sec-Fetch-Mode': 'cors',
|
||||||
|
'Sec-Fetch-Site': 'cross-site',
|
||||||
|
Pragma: 'no-cache',
|
||||||
|
'Cache-Control': 'no-cache',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return streams;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.mpGetStream = mpGetStream;
|
||||||
79
dist/multi/catalog.js
vendored
Normal file
79
dist/multi/catalog.js
vendored
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.genres = exports.catalog = void 0;
|
||||||
|
exports.catalog = [
|
||||||
|
{
|
||||||
|
title: "Trending",
|
||||||
|
filter: "/trending/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Netflix",
|
||||||
|
filter: "/genre/netflix/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Amazon Prime",
|
||||||
|
filter: "/genre/amazon-prime/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Disney Hotstar",
|
||||||
|
filter: "/genre/disney-hotstar/",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
exports.genres = [
|
||||||
|
{
|
||||||
|
title: "Action",
|
||||||
|
filter: "/genre/action/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Adventure",
|
||||||
|
filter: "/genre/adventure/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Animation",
|
||||||
|
filter: "/genre/animation/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Comedy",
|
||||||
|
filter: "/genre/comedy/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Crime",
|
||||||
|
filter: "/genre/crime/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Drama",
|
||||||
|
filter: "/genre/drama/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Family",
|
||||||
|
filter: "/genre/family/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Fantasy",
|
||||||
|
filter: "/genre/fantasy/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "History",
|
||||||
|
filter: "/genre/history/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Horror",
|
||||||
|
filter: "/genre/horror/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Mystery",
|
||||||
|
filter: "/genre/mystery/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Romance",
|
||||||
|
filter: "/genre/romance/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Science Fiction",
|
||||||
|
filter: "/genre/science-fiction/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Thriller",
|
||||||
|
filter: "/genre/thriller/",
|
||||||
|
},
|
||||||
|
];
|
||||||
76
dist/multi/meta.js
vendored
Normal file
76
dist/multi/meta.js
vendored
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getMeta = void 0;
|
||||||
|
const getMeta = async function ({ link, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const { axios, cheerio } = providerContext;
|
||||||
|
const url = link;
|
||||||
|
const res = await axios.get(url);
|
||||||
|
const data = res.data;
|
||||||
|
const $ = cheerio.load(data);
|
||||||
|
const type = url.includes("tvshows") ? "series" : "movie";
|
||||||
|
const imdbId = "";
|
||||||
|
const title = url.split("/")[4].replace(/-/g, " ");
|
||||||
|
const image = $(".g-item").find("a").attr("href") || "";
|
||||||
|
const synopsis = $(".wp-content").find("p").text() || "";
|
||||||
|
// Links
|
||||||
|
const links = [];
|
||||||
|
if (type === "series") {
|
||||||
|
$("#seasons")
|
||||||
|
.children()
|
||||||
|
.map((i, element) => {
|
||||||
|
const title = $(element)
|
||||||
|
.find(".title")
|
||||||
|
.children()
|
||||||
|
.remove()
|
||||||
|
.end()
|
||||||
|
.text();
|
||||||
|
let episodesList = [];
|
||||||
|
$(element)
|
||||||
|
.find(".episodios")
|
||||||
|
.children()
|
||||||
|
.map((i, element) => {
|
||||||
|
const title = "Episode" +
|
||||||
|
$(element).find(".numerando").text().trim().split("-")[1];
|
||||||
|
const link = $(element).find("a").attr("href");
|
||||||
|
if (title && link) {
|
||||||
|
episodesList.push({ title, link });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (title && episodesList.length > 0) {
|
||||||
|
links.push({
|
||||||
|
title,
|
||||||
|
directLinks: episodesList,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
links.push({
|
||||||
|
title: title,
|
||||||
|
directLinks: [{ title: title, link: url.slice(0, -1), type: "movie" }],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// console.log('multi meta', links);
|
||||||
|
return {
|
||||||
|
title,
|
||||||
|
synopsis,
|
||||||
|
image,
|
||||||
|
imdbId,
|
||||||
|
type,
|
||||||
|
linkList: links,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return {
|
||||||
|
title: "",
|
||||||
|
synopsis: "",
|
||||||
|
image: "",
|
||||||
|
imdbId: "",
|
||||||
|
type: "movie",
|
||||||
|
linkList: [],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getMeta = getMeta;
|
||||||
45
dist/multi/posts.js
vendored
Normal file
45
dist/multi/posts.js
vendored
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getSearchPosts = exports.getPosts = void 0;
|
||||||
|
const getPosts = async function ({ filter, page, signal, providerContext, }) {
|
||||||
|
const { getBaseUrl, cheerio } = providerContext;
|
||||||
|
const baseUrl = await getBaseUrl("multi");
|
||||||
|
const url = `${baseUrl + filter}page/${page}/`;
|
||||||
|
return posts({ url, signal, cheerio });
|
||||||
|
};
|
||||||
|
exports.getPosts = getPosts;
|
||||||
|
const getSearchPosts = async function ({ searchQuery, signal, providerContext, }) {
|
||||||
|
const { getBaseUrl, cheerio } = providerContext;
|
||||||
|
const baseUrl = await getBaseUrl("multi");
|
||||||
|
const url = `${baseUrl}/?s=${searchQuery}`;
|
||||||
|
return posts({ url, signal, cheerio });
|
||||||
|
};
|
||||||
|
exports.getSearchPosts = getSearchPosts;
|
||||||
|
async function posts({ url, signal, cheerio, }) {
|
||||||
|
try {
|
||||||
|
const res = await fetch(url, { signal });
|
||||||
|
const data = await res.text();
|
||||||
|
const $ = cheerio.load(data);
|
||||||
|
const catalog = [];
|
||||||
|
$(".items.full")
|
||||||
|
.children()
|
||||||
|
.map((i, element) => {
|
||||||
|
const title = $(element).find(".poster").find("img").attr("alt");
|
||||||
|
const link = $(element).find(".poster").find("a").attr("href");
|
||||||
|
const image = $(element).find(".poster").find("img").attr("data-src") ||
|
||||||
|
$(element).find(".poster").find("img").attr("src");
|
||||||
|
if (title && link && image) {
|
||||||
|
catalog.push({
|
||||||
|
title: title,
|
||||||
|
link: link,
|
||||||
|
image: image,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return catalog;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("multiGetPosts error ", err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
134
dist/multi/stream.js
vendored
Normal file
134
dist/multi/stream.js
vendored
Normal file
@@ -0,0 +1,134 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getStream = void 0;
|
||||||
|
const types_1 = require("../types");
|
||||||
|
const getStream = async function ({ link: url, providerContext, }) {
|
||||||
|
const { axios, cheerio } = providerContext;
|
||||||
|
const headers = {
|
||||||
|
"sec-ch-ua": '"Not_A Brand";v="8", "Chromium";v="120", "Microsoft Edge";v="120"',
|
||||||
|
"sec-ch-ua-mobile": "?0",
|
||||||
|
"sec-ch-ua-platform": '"Windows"',
|
||||||
|
Referer: "https://multimovies.online/",
|
||||||
|
"Sec-Fetch-User": "?1",
|
||||||
|
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0",
|
||||||
|
};
|
||||||
|
try {
|
||||||
|
const res = await axios.get(url, { headers });
|
||||||
|
const html = res.data;
|
||||||
|
const $ = cheerio.load(html);
|
||||||
|
const streamLinks = [];
|
||||||
|
const postId = $("#player-option-1").attr("data-post");
|
||||||
|
const nume = $("#player-option-1").attr("data-nume");
|
||||||
|
const typeValue = $("#player-option-1").attr("data-type");
|
||||||
|
const baseUrl = url.split("/").slice(0, 3).join("/");
|
||||||
|
console.log("baseUrl", baseUrl);
|
||||||
|
const formData = new FormData();
|
||||||
|
formData.append("action", "doo_player_ajax");
|
||||||
|
formData.append("post", postId || "");
|
||||||
|
formData.append("nume", nume || "");
|
||||||
|
formData.append("type", typeValue || "");
|
||||||
|
console.log("formData", formData);
|
||||||
|
const playerRes = await fetch(`${baseUrl}/wp-admin/admin-ajax.php`, {
|
||||||
|
headers: headers,
|
||||||
|
body: formData,
|
||||||
|
method: "POST",
|
||||||
|
});
|
||||||
|
const playerData = await playerRes.json();
|
||||||
|
console.log("playerData", playerData);
|
||||||
|
let ifameUrl = playerData?.embed_url?.match(/<iframe[^>]+src="([^"]+)"[^>]*>/i)?.[1] ||
|
||||||
|
playerData?.embed_url;
|
||||||
|
console.log("ifameUrl", ifameUrl);
|
||||||
|
if (!ifameUrl.includes("multimovies")) {
|
||||||
|
let playerBaseUrl = ifameUrl.split("/").slice(0, 3).join("/");
|
||||||
|
const newPlayerBaseUrl = await axios.head(playerBaseUrl, { headers });
|
||||||
|
if (newPlayerBaseUrl) {
|
||||||
|
playerBaseUrl = newPlayerBaseUrl.request?.responseURL
|
||||||
|
?.split("/")
|
||||||
|
.slice(0, 3)
|
||||||
|
.join("/");
|
||||||
|
}
|
||||||
|
const playerId = ifameUrl.split("/").pop();
|
||||||
|
const NewformData = new FormData();
|
||||||
|
NewformData.append("sid", playerId);
|
||||||
|
console.log("NewformData", playerBaseUrl + "/embedhelper.php", NewformData);
|
||||||
|
const playerRes = await fetch(`${playerBaseUrl}/embedhelper.php`, {
|
||||||
|
headers: headers,
|
||||||
|
body: NewformData,
|
||||||
|
method: "POST",
|
||||||
|
});
|
||||||
|
const playerData = await playerRes.json();
|
||||||
|
// console.log('playerData', playerData);
|
||||||
|
const siteUrl = playerData?.siteUrls?.smwh;
|
||||||
|
const siteId = JSON.parse(atob(playerData?.mresult))?.smwh ||
|
||||||
|
playerData?.mresult?.smwh;
|
||||||
|
const newIframeUrl = siteUrl + siteId;
|
||||||
|
console.log("newIframeUrl", newIframeUrl);
|
||||||
|
if (newIframeUrl) {
|
||||||
|
ifameUrl = newIframeUrl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const iframeRes = await axios.get(ifameUrl, {
|
||||||
|
headers: {
|
||||||
|
...headers,
|
||||||
|
Referer: url,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const iframeData = iframeRes.data;
|
||||||
|
// Step 1: Extract the function parameters and the encoded string
|
||||||
|
var functionRegex = /eval\(function\((.*?)\)\{.*?return p\}.*?\('(.*?)'\.split/;
|
||||||
|
var match = functionRegex.exec(iframeData);
|
||||||
|
let p = "";
|
||||||
|
if (match) {
|
||||||
|
// var params = match[1].split(',').map(param => param.trim());
|
||||||
|
var encodedString = match[2];
|
||||||
|
// console.log('Parameters:', params);
|
||||||
|
// console.log('Encoded String:', encodedString.split("',36,")[0], '🔥🔥');
|
||||||
|
p = encodedString.split("',36,")?.[0].trim();
|
||||||
|
let a = 36;
|
||||||
|
let c = encodedString.split("',36,")[1].slice(2).split("|").length;
|
||||||
|
let k = encodedString.split("',36,")[1].slice(2).split("|");
|
||||||
|
while (c--) {
|
||||||
|
if (k[c]) {
|
||||||
|
var regex = new RegExp("\\b" + c.toString(a) + "\\b", "g");
|
||||||
|
p = p.replace(regex, k[c]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// console.log('Decoded String:', p);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
console.log("No match found");
|
||||||
|
}
|
||||||
|
const streamUrl = p?.match(/https?:\/\/[^"]+?\.m3u8[^"]*/)?.[0];
|
||||||
|
const subtitles = [];
|
||||||
|
const subtitleMatch = p?.match(/https:\/\/[^\s"]+\.vtt/g);
|
||||||
|
// console.log('subtitleMatch', subtitleMatch);
|
||||||
|
// console.log('streamUrl', streamUrl);
|
||||||
|
if (subtitleMatch?.length) {
|
||||||
|
subtitleMatch.forEach((sub) => {
|
||||||
|
const lang = sub.match(/_([a-zA-Z]{3})\.vtt$/)[1];
|
||||||
|
subtitles.push({
|
||||||
|
language: lang,
|
||||||
|
uri: sub,
|
||||||
|
type: types_1.TextTrackType.VTT,
|
||||||
|
title: lang,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
console.log("streamUrl", streamUrl);
|
||||||
|
console.log("newUrl", streamUrl?.replace(/&i=\d+,'\.4&/, "&i=0.4&"));
|
||||||
|
if (streamUrl) {
|
||||||
|
streamLinks.push({
|
||||||
|
server: "Multi",
|
||||||
|
link: streamUrl.replace(/&i=\d+,'\.4&/, "&i=0.4&"),
|
||||||
|
type: "m3u8",
|
||||||
|
subtitles: subtitles,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return streamLinks;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getStream = getStream;
|
||||||
18
dist/netflixMirror/catalog.js
vendored
Normal file
18
dist/netflixMirror/catalog.js
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.genres = exports.catalog = void 0;
|
||||||
|
exports.catalog = [
|
||||||
|
{
|
||||||
|
title: "Home",
|
||||||
|
filter: "/mobile/home?app=1",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Series",
|
||||||
|
filter: "/mobile/series",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Movies",
|
||||||
|
filter: "/mobile/movies",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
exports.genres = [];
|
||||||
39
dist/netflixMirror/episodes.js
vendored
Normal file
39
dist/netflixMirror/episodes.js
vendored
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getEpisodes = void 0;
|
||||||
|
const getEpisodes = async function ({ url: link, providerContext, }) {
|
||||||
|
const { getBaseUrl, axios } = providerContext;
|
||||||
|
let providerValue = "netflixMirror";
|
||||||
|
try {
|
||||||
|
const baseUrl = await getBaseUrl("nfMirror");
|
||||||
|
const url = `${baseUrl}${providerValue === "netflixMirror"
|
||||||
|
? "/episodes.php?s="
|
||||||
|
: "/pv/episodes.php?s="}` +
|
||||||
|
link +
|
||||||
|
"&t=" +
|
||||||
|
Math.round(new Date().getTime() / 1000);
|
||||||
|
console.log("nfEpisodesUrl", url);
|
||||||
|
const res = await axios.get(url, {
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36",
|
||||||
|
"Accept-Language": "en-US,en;q=0.9",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const data = res.data;
|
||||||
|
console.log("nfEpisodes", data);
|
||||||
|
const episodeList = [];
|
||||||
|
data?.episodes?.map((episode) => {
|
||||||
|
episodeList.push({
|
||||||
|
title: "Episode " + episode?.ep.replace("E", ""),
|
||||||
|
link: episode?.id,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return episodeList;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("nfGetEpisodes error", err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getEpisodes = getEpisodes;
|
||||||
57
dist/netflixMirror/meta.js
vendored
Normal file
57
dist/netflixMirror/meta.js
vendored
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getMeta = void 0;
|
||||||
|
const getMeta = async function ({ link, }) {
|
||||||
|
let providerValue = "netflixMirror";
|
||||||
|
try {
|
||||||
|
const isPrime = providerValue === "primeMirror" ? "isPrime=true" : "isPrime=false";
|
||||||
|
const url = `https://netmirror.8man.me/api/net-proxy?${isPrime}&url=${encodeURIComponent(link)}`;
|
||||||
|
console.log("nfifo", url);
|
||||||
|
const res = await fetch(url, {
|
||||||
|
credentials: "omit",
|
||||||
|
});
|
||||||
|
const data = await res.json();
|
||||||
|
const id = link.split("id=")[1]?.split("&")[0];
|
||||||
|
const meta = {
|
||||||
|
title: data.title,
|
||||||
|
synopsis: data.desc,
|
||||||
|
image: `https://img.nfmirrorcdn.top/poster/h/${id}.jpg`,
|
||||||
|
cast: data?.short_cast?.split(","),
|
||||||
|
tags: [data?.year, data?.hdsd, ...data?.thismovieis?.split(",")],
|
||||||
|
imdbId: "",
|
||||||
|
type: "series",
|
||||||
|
};
|
||||||
|
console.log("nfinfo", meta);
|
||||||
|
const linkList = [];
|
||||||
|
if (data?.season?.length > 0) {
|
||||||
|
data.season.map((season) => {
|
||||||
|
linkList.push({
|
||||||
|
title: "Season " + season?.s,
|
||||||
|
episodesLink: season?.id,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
linkList.push({
|
||||||
|
title: meta.title,
|
||||||
|
directLinks: [{ link: id, title: "Movie", type: "movie" }],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
...meta,
|
||||||
|
linkList: linkList,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return {
|
||||||
|
title: "",
|
||||||
|
synopsis: "",
|
||||||
|
image: "",
|
||||||
|
imdbId: "",
|
||||||
|
type: "",
|
||||||
|
linkList: [],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getMeta = getMeta;
|
||||||
94
dist/netflixMirror/posts.js
vendored
Normal file
94
dist/netflixMirror/posts.js
vendored
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getSearchPosts = exports.getPosts = void 0;
|
||||||
|
const getPosts = async function ({ filter, page, providerValue, signal, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const { getBaseUrl, cheerio } = providerContext;
|
||||||
|
const baseUrl = await getBaseUrl("nfMirror");
|
||||||
|
const catalog = [];
|
||||||
|
if (page > 1) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
// console.log(filter);
|
||||||
|
const isPrime = providerValue === "primeMirror" ? "isPrime=true" : "isPrime=false";
|
||||||
|
const url = `https://netmirror.8man.me/api/net-proxy?${isPrime}&url=${baseUrl + filter}`;
|
||||||
|
const res = await fetch(url, {
|
||||||
|
signal: signal,
|
||||||
|
method: "GET",
|
||||||
|
credentials: "omit",
|
||||||
|
});
|
||||||
|
const data = await res.text();
|
||||||
|
// console.log('nfPost', data);
|
||||||
|
const $ = cheerio.load(data);
|
||||||
|
$("a.post-data").map((i, element) => {
|
||||||
|
const title = "";
|
||||||
|
const id = $(element).attr("data-post");
|
||||||
|
// console.log('id', id);
|
||||||
|
const image = $(element).find("img").attr("data-src") || "";
|
||||||
|
if (id) {
|
||||||
|
catalog.push({
|
||||||
|
title: title,
|
||||||
|
link: baseUrl +
|
||||||
|
`${providerValue === "netflixMirror"
|
||||||
|
? "/post.php?id="
|
||||||
|
: "/pv/post.php?id="}` +
|
||||||
|
id +
|
||||||
|
"&t=" +
|
||||||
|
Math.round(new Date().getTime() / 1000),
|
||||||
|
image: image,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// console.log(catalog);
|
||||||
|
return catalog;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("nf error ", err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getPosts = getPosts;
|
||||||
|
const getSearchPosts = async function ({ searchQuery, page, providerValue, signal, providerContext, }) {
|
||||||
|
const { getBaseUrl } = providerContext;
|
||||||
|
try {
|
||||||
|
if (page > 1) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
const catalog = [];
|
||||||
|
const baseUrl = await getBaseUrl("nfMirror");
|
||||||
|
const isPrime = providerValue === "primeMirror" ? "isPrime=true" : "isPrime=false";
|
||||||
|
const url = `https://netmirror.8man.me/api/net-proxy?${isPrime}&url=${baseUrl}${providerValue === "netflixMirror" ? "" : "/pv"}/search.php?s=${encodeURI(searchQuery)}`;
|
||||||
|
const res = await fetch(url, {
|
||||||
|
signal: signal,
|
||||||
|
method: "GET",
|
||||||
|
credentials: "omit",
|
||||||
|
});
|
||||||
|
const data = await res.json();
|
||||||
|
data?.searchResult?.forEach((result) => {
|
||||||
|
const title = result?.t || "";
|
||||||
|
const id = result?.id;
|
||||||
|
const image = providerValue === "netflixMirror"
|
||||||
|
? `https://imgcdn.media/poster/v/${id}.jpg`
|
||||||
|
: "";
|
||||||
|
if (id) {
|
||||||
|
catalog.push({
|
||||||
|
title: title,
|
||||||
|
link: baseUrl +
|
||||||
|
`${providerValue === "netflixMirror"
|
||||||
|
? "/mobile/post.php?id="
|
||||||
|
: "/mobile/pv/post.php?id="}` +
|
||||||
|
id +
|
||||||
|
"&t=" +
|
||||||
|
Math.round(new Date().getTime() / 1000),
|
||||||
|
image: image,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return catalog;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("Search error:", err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getSearchPosts = getSearchPosts;
|
||||||
39
dist/netflixMirror/stream.js
vendored
Normal file
39
dist/netflixMirror/stream.js
vendored
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getStream = void 0;
|
||||||
|
const getStream = async ({ link: id, providerContext, }) => {
|
||||||
|
const { getBaseUrl } = providerContext;
|
||||||
|
try {
|
||||||
|
let providerValue = "netflixMirror";
|
||||||
|
const baseUrl = await getBaseUrl("nfMirror");
|
||||||
|
const url = `https://netmirror.8man.me/api/net-proxy?url=${baseUrl}${providerValue === "netflixMirror"
|
||||||
|
? "/mobile/playlist.php?id="
|
||||||
|
: "/pv/playlist.php?id="}${id}&t=${Math.round(new Date().getTime() / 1000)}`;
|
||||||
|
console.log("nfGetStream, url:", url);
|
||||||
|
const res = await fetch(url, {
|
||||||
|
credentials: "omit",
|
||||||
|
});
|
||||||
|
const resJson = await res.json();
|
||||||
|
const data = resJson?.[0];
|
||||||
|
const streamLinks = [];
|
||||||
|
data?.sources.forEach((source) => {
|
||||||
|
streamLinks.push({
|
||||||
|
server: source.label,
|
||||||
|
link: (baseUrl + source.file)?.replace(":su", ":ni"),
|
||||||
|
type: "m3u8",
|
||||||
|
headers: {
|
||||||
|
Referer: baseUrl,
|
||||||
|
origin: baseUrl,
|
||||||
|
Cookie: "hd=on",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
console.log(streamLinks);
|
||||||
|
return streamLinks;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getStream = getStream;
|
||||||
18
dist/primeMirror/catalog.js
vendored
Normal file
18
dist/primeMirror/catalog.js
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.genres = exports.catalog = void 0;
|
||||||
|
exports.catalog = [
|
||||||
|
{
|
||||||
|
title: "Home",
|
||||||
|
filter: "/mobile/home?app=1",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Series",
|
||||||
|
filter: "/mobile/series",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Movies",
|
||||||
|
filter: "/mobile/movies",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
exports.genres = [];
|
||||||
39
dist/primeMirror/episodes.js
vendored
Normal file
39
dist/primeMirror/episodes.js
vendored
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getEpisodes = void 0;
|
||||||
|
const getEpisodes = async function ({ url: link, providerContext, }) {
|
||||||
|
const { getBaseUrl, axios } = providerContext;
|
||||||
|
let providerValue = "primeMirror";
|
||||||
|
try {
|
||||||
|
const baseUrl = await getBaseUrl("nfMirror");
|
||||||
|
const url = `${baseUrl}${providerValue === "netflixMirror"
|
||||||
|
? "/episodes.php?s="
|
||||||
|
: "/pv/episodes.php?s="}` +
|
||||||
|
link +
|
||||||
|
"&t=" +
|
||||||
|
Math.round(new Date().getTime() / 1000);
|
||||||
|
console.log("nfEpisodesUrl", url);
|
||||||
|
const res = await axios.get(url, {
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36",
|
||||||
|
"Accept-Language": "en-US,en;q=0.9",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const data = res.data;
|
||||||
|
console.log("nfEpisodes", data);
|
||||||
|
const episodeList = [];
|
||||||
|
data?.episodes?.map((episode) => {
|
||||||
|
episodeList.push({
|
||||||
|
title: "Episode " + episode?.ep.replace("E", ""),
|
||||||
|
link: episode?.id,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return episodeList;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("nfGetEpisodes error", err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getEpisodes = getEpisodes;
|
||||||
57
dist/primeMirror/meta.js
vendored
Normal file
57
dist/primeMirror/meta.js
vendored
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getMeta = void 0;
|
||||||
|
const getMeta = async function ({ link, }) {
|
||||||
|
let providerValue = "primeMirror";
|
||||||
|
try {
|
||||||
|
const isPrime = providerValue === "primeMirror" ? "isPrime=true" : "isPrime=false";
|
||||||
|
const url = `https://netmirror.8man.me/api/net-proxy?${isPrime}&url=${encodeURIComponent(link)}`;
|
||||||
|
console.log("nfifo", url);
|
||||||
|
const res = await fetch(url, {
|
||||||
|
credentials: "omit",
|
||||||
|
});
|
||||||
|
const data = await res.json();
|
||||||
|
const id = link.split("id=")[1]?.split("&")[0];
|
||||||
|
const meta = {
|
||||||
|
title: data.title,
|
||||||
|
synopsis: data.desc,
|
||||||
|
image: `https://img.nfmirrorcdn.top/poster/h/${id}.jpg`,
|
||||||
|
cast: data?.short_cast?.split(","),
|
||||||
|
tags: [data?.year, data?.hdsd, ...data?.thismovieis?.split(",")],
|
||||||
|
imdbId: "",
|
||||||
|
type: "series",
|
||||||
|
};
|
||||||
|
console.log("nfinfo", meta);
|
||||||
|
const linkList = [];
|
||||||
|
if (data?.season?.length > 0) {
|
||||||
|
data.season.map((season) => {
|
||||||
|
linkList.push({
|
||||||
|
title: "Season " + season?.s,
|
||||||
|
episodesLink: season?.id,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
linkList.push({
|
||||||
|
title: meta.title,
|
||||||
|
directLinks: [{ link: id, title: "Movie", type: "movie" }],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
...meta,
|
||||||
|
linkList: linkList,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return {
|
||||||
|
title: "",
|
||||||
|
synopsis: "",
|
||||||
|
image: "",
|
||||||
|
imdbId: "",
|
||||||
|
type: "",
|
||||||
|
linkList: [],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getMeta = getMeta;
|
||||||
94
dist/primeMirror/posts.js
vendored
Normal file
94
dist/primeMirror/posts.js
vendored
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getSearchPosts = exports.getPosts = void 0;
|
||||||
|
const getPosts = async function ({ filter, page, providerValue, signal, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const { getBaseUrl, cheerio } = providerContext;
|
||||||
|
const baseUrl = await getBaseUrl("nfMirror");
|
||||||
|
const catalog = [];
|
||||||
|
if (page > 1) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
// console.log(filter);
|
||||||
|
const isPrime = providerValue === "primeMirror" ? "isPrime=true" : "isPrime=false";
|
||||||
|
const url = `https://netmirror.8man.me/api/net-proxy?${isPrime}&url=${baseUrl + filter}`;
|
||||||
|
const res = await fetch(url, {
|
||||||
|
signal: signal,
|
||||||
|
method: "GET",
|
||||||
|
credentials: "omit",
|
||||||
|
});
|
||||||
|
const data = await res.text();
|
||||||
|
// console.log('nfPost', data);
|
||||||
|
const $ = cheerio.load(data);
|
||||||
|
$("a.post-data").map((i, element) => {
|
||||||
|
const title = "";
|
||||||
|
const id = $(element).attr("data-post");
|
||||||
|
// console.log('id', id);
|
||||||
|
const image = $(element).find("img").attr("data-src") || "";
|
||||||
|
if (id) {
|
||||||
|
catalog.push({
|
||||||
|
title: title,
|
||||||
|
link: baseUrl +
|
||||||
|
`${providerValue === "netflixMirror"
|
||||||
|
? "/post.php?id="
|
||||||
|
: "/pv/post.php?id="}` +
|
||||||
|
id +
|
||||||
|
"&t=" +
|
||||||
|
Math.round(new Date().getTime() / 1000),
|
||||||
|
image: image,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// console.log(catalog);
|
||||||
|
return catalog;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("nf error ", err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getPosts = getPosts;
|
||||||
|
const getSearchPosts = async function ({ searchQuery, page, providerValue, signal, providerContext, }) {
|
||||||
|
const { getBaseUrl } = providerContext;
|
||||||
|
try {
|
||||||
|
if (page > 1) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
const catalog = [];
|
||||||
|
const baseUrl = await getBaseUrl("nfMirror");
|
||||||
|
const isPrime = providerValue === "primeMirror" ? "isPrime=true" : "isPrime=false";
|
||||||
|
const url = `https://netmirror.8man.me/api/net-proxy?${isPrime}&url=${baseUrl}${providerValue === "netflixMirror" ? "" : "/pv"}/search.php?s=${encodeURI(searchQuery)}`;
|
||||||
|
const res = await fetch(url, {
|
||||||
|
signal: signal,
|
||||||
|
method: "GET",
|
||||||
|
credentials: "omit",
|
||||||
|
});
|
||||||
|
const data = await res.json();
|
||||||
|
data?.searchResult?.forEach((result) => {
|
||||||
|
const title = result?.t || "";
|
||||||
|
const id = result?.id;
|
||||||
|
const image = providerValue === "netflixMirror"
|
||||||
|
? `https://imgcdn.media/poster/v/${id}.jpg`
|
||||||
|
: "";
|
||||||
|
if (id) {
|
||||||
|
catalog.push({
|
||||||
|
title: title,
|
||||||
|
link: baseUrl +
|
||||||
|
`${providerValue === "netflixMirror"
|
||||||
|
? "/mobile/post.php?id="
|
||||||
|
: "/mobile/pv/post.php?id="}` +
|
||||||
|
id +
|
||||||
|
"&t=" +
|
||||||
|
Math.round(new Date().getTime() / 1000),
|
||||||
|
image: image,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return catalog;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("Search error:", err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getSearchPosts = getSearchPosts;
|
||||||
39
dist/primeMirror/stream.js
vendored
Normal file
39
dist/primeMirror/stream.js
vendored
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getStream = void 0;
|
||||||
|
const getStream = async ({ link: id, providerContext, }) => {
|
||||||
|
const { getBaseUrl } = providerContext;
|
||||||
|
try {
|
||||||
|
let providerValue = "primeMirror";
|
||||||
|
const baseUrl = await getBaseUrl("nfMirror");
|
||||||
|
const url = `https://netmirror.8man.me/api/net-proxy?url=${baseUrl}${providerValue === "netflixMirror"
|
||||||
|
? "/mobile/playlist.php?id="
|
||||||
|
: "/pv/playlist.php?id="}${id}&t=${Math.round(new Date().getTime() / 1000)}`;
|
||||||
|
console.log("nfGetStream, url:", url);
|
||||||
|
const res = await fetch(url, {
|
||||||
|
credentials: "omit",
|
||||||
|
});
|
||||||
|
const resJson = await res.json();
|
||||||
|
const data = resJson?.[0];
|
||||||
|
const streamLinks = [];
|
||||||
|
data?.sources.forEach((source) => {
|
||||||
|
streamLinks.push({
|
||||||
|
server: source.label,
|
||||||
|
link: (baseUrl + source.file)?.replace(":su", ":ni"),
|
||||||
|
type: "m3u8",
|
||||||
|
headers: {
|
||||||
|
Referer: baseUrl,
|
||||||
|
origin: baseUrl,
|
||||||
|
Cookie: "hd=on",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
console.log(streamLinks);
|
||||||
|
return streamLinks;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getStream = getStream;
|
||||||
18
dist/primewire/catalog.js
vendored
Normal file
18
dist/primewire/catalog.js
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.genres = exports.catalog = void 0;
|
||||||
|
exports.catalog = [
|
||||||
|
{
|
||||||
|
title: "Recently Added",
|
||||||
|
filter: "/filter?sort=Just+Added&free_links=true",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "TV Shows",
|
||||||
|
filter: "/filter?sort=Trending+Today&type=tv",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Movies",
|
||||||
|
filter: "/filter?sort=Trending+Today&type=movie",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
exports.genres = [];
|
||||||
78
dist/primewire/meta.js
vendored
Normal file
78
dist/primewire/meta.js
vendored
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getMeta = void 0;
|
||||||
|
const getMeta = async function ({ link, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const { axios, cheerio } = providerContext;
|
||||||
|
const url = link;
|
||||||
|
const baseUrl = link.split("/").slice(0, 3).join("/");
|
||||||
|
const res = await axios.get(url);
|
||||||
|
const html = await res.data;
|
||||||
|
const $ = cheerio.load(html);
|
||||||
|
const imdbId = $(".movie_info")
|
||||||
|
.find('a[href*="imdb.com/title/tt"]:not([href*="imdb.com/title/tt/"])')
|
||||||
|
.attr("href")
|
||||||
|
?.split("/")[4] || "";
|
||||||
|
const type = $(".show_season").html() ? "series" : "movie";
|
||||||
|
const linkList = [];
|
||||||
|
$(".show_season").each((i, element) => {
|
||||||
|
const seasonTitle = "Season " + $(element).attr("data-id");
|
||||||
|
const episodes = [];
|
||||||
|
$(element)
|
||||||
|
.children()
|
||||||
|
.each((i, element2) => {
|
||||||
|
const episodeTitle = $(element2)
|
||||||
|
.find("a")
|
||||||
|
.children()
|
||||||
|
.remove()
|
||||||
|
.end()
|
||||||
|
.text()
|
||||||
|
.trim()
|
||||||
|
.replace("E", "Epiosode ");
|
||||||
|
const episodeLink = baseUrl + $(element2).find("a").attr("href");
|
||||||
|
if (episodeTitle && episodeLink) {
|
||||||
|
episodes.push({
|
||||||
|
title: episodeTitle,
|
||||||
|
link: episodeLink,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
linkList.push({
|
||||||
|
title: seasonTitle,
|
||||||
|
directLinks: episodes,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
if (type === "movie") {
|
||||||
|
linkList.push({
|
||||||
|
title: "Movie",
|
||||||
|
directLinks: [
|
||||||
|
{
|
||||||
|
link: link,
|
||||||
|
title: "Movie",
|
||||||
|
type: "movie",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
title: "",
|
||||||
|
image: "",
|
||||||
|
imdbId: imdbId,
|
||||||
|
synopsis: "",
|
||||||
|
type: type,
|
||||||
|
linkList: linkList,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
return {
|
||||||
|
title: "",
|
||||||
|
image: "",
|
||||||
|
imdbId: "",
|
||||||
|
synopsis: "",
|
||||||
|
linkList: [],
|
||||||
|
type: "uhd",
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getMeta = getMeta;
|
||||||
46
dist/primewire/posts.js
vendored
Normal file
46
dist/primewire/posts.js
vendored
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getSearchPosts = exports.getPosts = void 0;
|
||||||
|
const getPosts = async function ({ filter, page, signal, providerContext, }) {
|
||||||
|
const { getBaseUrl, axios, cheerio } = providerContext;
|
||||||
|
const baseUrl = await getBaseUrl("primewire");
|
||||||
|
const url = `${baseUrl + filter}&page=${page}`;
|
||||||
|
return posts({ baseUrl, url, signal, axios, cheerio });
|
||||||
|
};
|
||||||
|
exports.getPosts = getPosts;
|
||||||
|
const getSearchPosts = async function ({ searchQuery, page, signal, providerContext, }) {
|
||||||
|
const { getBaseUrl, axios, cheerio, Aes } = providerContext;
|
||||||
|
const getSHA256ofJSON = async function (input) {
|
||||||
|
return await Aes.sha1(input);
|
||||||
|
};
|
||||||
|
const baseUrl = await getBaseUrl("primewire");
|
||||||
|
const hash = await getSHA256ofJSON(searchQuery + "JyjId97F9PVqUPuMO0");
|
||||||
|
const url = `${baseUrl}/filter?s=${searchQuery}&page=${page}&ds=${hash.slice(0, 10)}`;
|
||||||
|
return posts({ baseUrl, url, signal, axios, cheerio });
|
||||||
|
};
|
||||||
|
exports.getSearchPosts = getSearchPosts;
|
||||||
|
async function posts({ baseUrl, url, signal, axios, cheerio, }) {
|
||||||
|
try {
|
||||||
|
const res = await axios.get(url, { signal });
|
||||||
|
const data = res.data;
|
||||||
|
const $ = cheerio.load(data);
|
||||||
|
const catalog = [];
|
||||||
|
$(".index_item.index_item_ie").map((i, element) => {
|
||||||
|
const title = $(element).find("a").attr("title");
|
||||||
|
const link = $(element).find("a").attr("href");
|
||||||
|
const image = $(element).find("img").attr("src") || "";
|
||||||
|
if (title && link) {
|
||||||
|
catalog.push({
|
||||||
|
title: title,
|
||||||
|
link: baseUrl + link,
|
||||||
|
image: image,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return catalog;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("primewire error ", err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
125
dist/primewire/stream.js
vendored
Normal file
125
dist/primewire/stream.js
vendored
Normal file
@@ -0,0 +1,125 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getStream = void 0;
|
||||||
|
const getStream = async function ({ link: url, type, providerContext, }) {
|
||||||
|
const { axios, cheerio } = providerContext;
|
||||||
|
try {
|
||||||
|
console.log("pwGetStream", type, url);
|
||||||
|
const baseUrl = url.split("/").slice(0, 3).join("/");
|
||||||
|
const streamLinks = [];
|
||||||
|
const urls = [];
|
||||||
|
const res = await axios.get(url);
|
||||||
|
const data = res.data;
|
||||||
|
const $ = cheerio.load(data);
|
||||||
|
$('tr:contains("mixdrop")').map((i, element) => {
|
||||||
|
const id = $(element).find(".wp-menu-btn").attr("data-wp-menu");
|
||||||
|
const size = $(element).find(".wp-menu-btn").next().text();
|
||||||
|
if (id) {
|
||||||
|
urls.push({ id: baseUrl + "/links/go/" + id, size });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
console.log("urls", urls);
|
||||||
|
for (const url of urls) {
|
||||||
|
const res2 = await axios.head(url.id);
|
||||||
|
const location = res2.request?.responseURL.replace("/f/", "/e/");
|
||||||
|
const res3 = await fetch(location, {
|
||||||
|
credentials: "include",
|
||||||
|
headers: {
|
||||||
|
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0",
|
||||||
|
Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
|
||||||
|
"Accept-Language": "en-US,en;q=0.5",
|
||||||
|
"Upgrade-Insecure-Requests": "1",
|
||||||
|
"Sec-Fetch-Dest": "iframe",
|
||||||
|
"Sec-Fetch-Mode": "navigate",
|
||||||
|
"Sec-Fetch-Site": "same-origin",
|
||||||
|
Pragma: "no-cache",
|
||||||
|
"Cache-Control": "no-cache",
|
||||||
|
referer: res2.request?.responseURL,
|
||||||
|
},
|
||||||
|
referrer: res2.request?.responseURL,
|
||||||
|
method: "GET",
|
||||||
|
mode: "cors",
|
||||||
|
});
|
||||||
|
const data3 = await res3.text();
|
||||||
|
// let MDCore: any = {};
|
||||||
|
// Step 1: Extract the function parameters and the encoded string
|
||||||
|
var functionRegex = /eval\(function\((.*?)\)\{.*?return p\}.*?\('(.*?)'\.split/;
|
||||||
|
var match = functionRegex.exec(data3);
|
||||||
|
let p = "";
|
||||||
|
if (match) {
|
||||||
|
// var params = match[1].split(',').map(param => param.trim());
|
||||||
|
var encodedString = match[2];
|
||||||
|
console.log("Encoded String:", encodedString);
|
||||||
|
// console.log('Parameters:', params);
|
||||||
|
// console.log('Encoded String:', encodedString.split("',36,")[0], '🔥🔥');
|
||||||
|
const base = Number(encodedString.split(",'|MDCore|")[0].split(",")[encodedString.split(",'|MDCore|")[0].split(",").length - 1]);
|
||||||
|
console.log("Base:", base);
|
||||||
|
p = encodedString.split(`',${base},`)?.[0].trim();
|
||||||
|
let a = base;
|
||||||
|
let c = encodedString.split(`',${base},`)[1].slice(2).split("|").length;
|
||||||
|
let k = encodedString.split(`',${base},`)[1].slice(2).split("|");
|
||||||
|
// console.log('p:', p);
|
||||||
|
// console.log('a:', a);
|
||||||
|
// console.log('c:', c);
|
||||||
|
// console.log('k:', k);
|
||||||
|
const decode = function (p, a, c, k, e, d) {
|
||||||
|
e = function (c) {
|
||||||
|
return c.toString(36);
|
||||||
|
};
|
||||||
|
if (!"".replace(/^/, String)) {
|
||||||
|
while (c--) {
|
||||||
|
d[c.toString(a)] = k[c] || c.toString(a);
|
||||||
|
}
|
||||||
|
k = [
|
||||||
|
function (e) {
|
||||||
|
return d[e];
|
||||||
|
},
|
||||||
|
];
|
||||||
|
e = function () {
|
||||||
|
return "\\w+";
|
||||||
|
};
|
||||||
|
c = 1;
|
||||||
|
}
|
||||||
|
while (c--) {
|
||||||
|
if (k[c]) {
|
||||||
|
p = p.replace(new RegExp("\\b" + e(c) + "\\b", "g"), k[c]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return p;
|
||||||
|
};
|
||||||
|
const decoded = decode(p, a, c, k, 0, {});
|
||||||
|
// get MDCore.wurl=
|
||||||
|
const wurl = decoded.match(/MDCore\.wurl="([^"]+)"/)?.[1];
|
||||||
|
console.log("wurl:", wurl);
|
||||||
|
const streamUrl = "https:" + wurl;
|
||||||
|
console.log("streamUrl:", streamUrl);
|
||||||
|
streamLinks.push({
|
||||||
|
server: "Mixdrop " + url.size,
|
||||||
|
link: streamUrl,
|
||||||
|
type: "mp4",
|
||||||
|
headers: {
|
||||||
|
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0",
|
||||||
|
Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
|
||||||
|
"Accept-Language": "en-US,en;q=0.5",
|
||||||
|
"Upgrade-Insecure-Requests": "1",
|
||||||
|
"Sec-Fetch-Dest": "iframe",
|
||||||
|
"Sec-Fetch-Mode": "navigate",
|
||||||
|
"Sec-Fetch-Site": "same-origin",
|
||||||
|
Pragma: "no-cache",
|
||||||
|
"Cache-Control": "no-cache",
|
||||||
|
referer: res2.request?.responseURL,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
console.log("No match found");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return streamLinks;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getStream = getStream;
|
||||||
22
dist/protonMovies/catalog.js
vendored
Normal file
22
dist/protonMovies/catalog.js
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.genres = exports.catalog = void 0;
|
||||||
|
exports.catalog = [
|
||||||
|
{
|
||||||
|
title: "Latest",
|
||||||
|
filter: "/movies",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Netflix",
|
||||||
|
filter: "/platform/netflix",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Disney +",
|
||||||
|
filter: "/platform/disney-hotstar",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Amazon Prime",
|
||||||
|
filter: "/platform/amazon-prime-video",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
exports.genres = [];
|
||||||
93
dist/protonMovies/meta.js
vendored
Normal file
93
dist/protonMovies/meta.js
vendored
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getMeta = void 0;
|
||||||
|
const getMeta = async function ({ link, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const { axios, cheerio, getBaseUrl } = providerContext;
|
||||||
|
console.log("all", link);
|
||||||
|
const res = await axios.get(link);
|
||||||
|
const data = res.data;
|
||||||
|
function decodeHtml(encodedArray) {
|
||||||
|
// 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(/"/g, '"')
|
||||||
|
.replace(/</g, "<")
|
||||||
|
.replace(/>/g, ">")
|
||||||
|
.replace(/&/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 = [];
|
||||||
|
if (type === "movie") {
|
||||||
|
const directLinks = [];
|
||||||
|
directLinks.push({ title: "Movie", link: link });
|
||||||
|
links.push({ title: "Movie", directLinks: directLinks });
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$("#episodes")
|
||||||
|
.children()
|
||||||
|
.map((i, element) => {
|
||||||
|
let directLinks = [];
|
||||||
|
$(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: [],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getMeta = getMeta;
|
||||||
70
dist/protonMovies/posts.js
vendored
Normal file
70
dist/protonMovies/posts.js
vendored
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getSearchPosts = exports.getPosts = void 0;
|
||||||
|
const getPosts = async function ({ filter, page, signal, providerContext, }) {
|
||||||
|
const { getBaseUrl, axios, cheerio } = providerContext;
|
||||||
|
const baseUrl = await getBaseUrl("protonMovies");
|
||||||
|
const url = `${baseUrl + filter}/page/${page}/`;
|
||||||
|
return posts({ url, baseUrl, signal, axios, cheerio });
|
||||||
|
};
|
||||||
|
exports.getPosts = getPosts;
|
||||||
|
const getSearchPosts = async function ({ searchQuery, page, signal, providerContext, }) {
|
||||||
|
const { getBaseUrl, axios, cheerio } = providerContext;
|
||||||
|
const baseUrl = await getBaseUrl("protonMovies");
|
||||||
|
const url = `${baseUrl}/search/${searchQuery}/page/${page}/`;
|
||||||
|
return posts({ url, baseUrl, signal, axios, cheerio });
|
||||||
|
};
|
||||||
|
exports.getSearchPosts = getSearchPosts;
|
||||||
|
async function posts({ url, baseUrl, signal, axios, cheerio, }) {
|
||||||
|
function decodeHtml(encodedArray) {
|
||||||
|
// 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(/"/g, '"')
|
||||||
|
.replace(/</g, "<")
|
||||||
|
.replace(/>/g, ">")
|
||||||
|
.replace(/&/g, "&");
|
||||||
|
return decoded;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
const res = await axios.get(url, {
|
||||||
|
headers: {
|
||||||
|
referer: baseUrl,
|
||||||
|
},
|
||||||
|
signal,
|
||||||
|
});
|
||||||
|
const data = res.data;
|
||||||
|
const regex = /\[(?=.*?"<div class")(.*?)\]/g;
|
||||||
|
const htmlArray = data?.match(regex);
|
||||||
|
const html = decodeHtml(JSON.parse(htmlArray[htmlArray.length - 1]));
|
||||||
|
const $ = cheerio.load(html);
|
||||||
|
const catalog = [];
|
||||||
|
$(".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") ||
|
||||||
|
"";
|
||||||
|
if (title && link && image) {
|
||||||
|
catalog.push({
|
||||||
|
title: title,
|
||||||
|
link: link,
|
||||||
|
image: image,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return catalog;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("protonGetPosts error ", err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
165
dist/protonMovies/stream.js
vendored
Normal file
165
dist/protonMovies/stream.js
vendored
Normal file
@@ -0,0 +1,165 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getStream = void 0;
|
||||||
|
function LALLJLutmoZpvvbikjaWM(str) {
|
||||||
|
var buf = new ArrayBuffer(str.length * 2);
|
||||||
|
var bufView = new Uint8Array(buf);
|
||||||
|
for (var i = 0, strLen = str.length; i < strLen; i++) {
|
||||||
|
bufView[i] = str.charCodeAt(i);
|
||||||
|
}
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
function getOrCreateUID() {
|
||||||
|
const uid = "uid_" + Date.now() + "_" + Math.random().toString(36).substr(2, 9);
|
||||||
|
return uid;
|
||||||
|
}
|
||||||
|
const getStream = async function ({ link, providerContext, }) {
|
||||||
|
const { axios, cheerio, commonHeaders: headers, extractors, } = providerContext;
|
||||||
|
const { gofileExtracter } = extractors;
|
||||||
|
function generateMessageToken(baseUrlL) {
|
||||||
|
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, "");
|
||||||
|
return kyMXQUxoFYuZIBlKvlHa;
|
||||||
|
}
|
||||||
|
function decodeHtml(encodedArray) {
|
||||||
|
// 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(/"/g, '"')
|
||||||
|
.replace(/</g, "<")
|
||||||
|
.replace(/>/g, ">")
|
||||||
|
.replace(/&/g, "&");
|
||||||
|
return decoded;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
const streamLinks = [];
|
||||||
|
const res = await axios.get(link, { headers });
|
||||||
|
const data = res.data;
|
||||||
|
// const regex = /\[(?=.*?"<div class")(.*?)\]/g;
|
||||||
|
// const htmlArray = data?.match(regex);
|
||||||
|
// new code
|
||||||
|
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[htmlArray.length - 1]));
|
||||||
|
const html = decodeHtml(JSON.parse(htmlArray));
|
||||||
|
// console.log('protonGetInfo', htmlArray[htmlArray.length - 1]);
|
||||||
|
// console.log('all', html);
|
||||||
|
const $ = cheerio.load(html);
|
||||||
|
const idList = [];
|
||||||
|
const id1080 = $('tr:contains("1080p")')
|
||||||
|
.find('button:contains("Info")')
|
||||||
|
.attr("id")
|
||||||
|
?.split("-")[1];
|
||||||
|
if (id1080) {
|
||||||
|
idList.push({
|
||||||
|
id: id1080,
|
||||||
|
quality: "1080p",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const id720 = $('tr:contains("720p")')
|
||||||
|
.find('button:contains("Info")')
|
||||||
|
.attr("id")
|
||||||
|
?.split("-")[1];
|
||||||
|
if (id720) {
|
||||||
|
idList.push({
|
||||||
|
id: id720,
|
||||||
|
quality: "720p",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const id480 = $('tr:contains("480p")')
|
||||||
|
.find('button:contains("Info")')
|
||||||
|
.attr("id")
|
||||||
|
?.split("-")[1];
|
||||||
|
if (id480) {
|
||||||
|
idList.push({
|
||||||
|
id: id480,
|
||||||
|
quality: "480p",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// console.log('idList', idList);
|
||||||
|
const baseUrl = link.split("/").slice(0, 3).join("/");
|
||||||
|
const secondIdList = [];
|
||||||
|
await Promise.all(idList.slice(0, 2).map(async (id) => {
|
||||||
|
const formData = new URLSearchParams();
|
||||||
|
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": '"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",
|
||||||
|
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",
|
||||||
|
},
|
||||||
|
body: `downloadid=${id.id}&msg=${messageToken}&uid=${uid}&token=ok`,
|
||||||
|
method: "POST",
|
||||||
|
});
|
||||||
|
const idData = await idRes.text();
|
||||||
|
secondIdList.push({
|
||||||
|
quality: id.quality,
|
||||||
|
id: idData,
|
||||||
|
});
|
||||||
|
console.log("idData", idData);
|
||||||
|
}));
|
||||||
|
await Promise.all(secondIdList.map(async (id) => {
|
||||||
|
const idRes = await axios.post(`${baseUrl}/tmp/${id.id}`);
|
||||||
|
if (idRes.data.ppd["gofile.io"]) {
|
||||||
|
const goRes = await gofileExtracter(idRes.data.ppd["gofile.io"].link.split("/").pop());
|
||||||
|
console.log("link", goRes.link);
|
||||||
|
if (goRes.link) {
|
||||||
|
streamLinks.push({
|
||||||
|
link: goRes.link,
|
||||||
|
server: "gofile " + id.quality,
|
||||||
|
type: "mkv",
|
||||||
|
headers: {
|
||||||
|
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);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getStream = getStream;
|
||||||
14
dist/ridoMovies/catalog.js
vendored
Normal file
14
dist/ridoMovies/catalog.js
vendored
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.genres = exports.catalog = void 0;
|
||||||
|
exports.catalog = [
|
||||||
|
{
|
||||||
|
title: "Popular Movies",
|
||||||
|
filter: "/top/catalog/movie/top.json",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Featured Movies",
|
||||||
|
filter: "/imdbRating/catalog/movie/imdbRating.json",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
exports.genres = [];
|
||||||
85
dist/ridoMovies/meta.js
vendored
Normal file
85
dist/ridoMovies/meta.js
vendored
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getMeta = void 0;
|
||||||
|
const getMeta = async function ({ link, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const { getBaseUrl, axios } = providerContext;
|
||||||
|
const res = await axios.get(link);
|
||||||
|
const data = res.data;
|
||||||
|
const meta = {
|
||||||
|
title: "",
|
||||||
|
synopsis: "",
|
||||||
|
image: "",
|
||||||
|
imdbId: data?.meta?.imdb_id || "",
|
||||||
|
type: data?.meta?.type || "movie",
|
||||||
|
};
|
||||||
|
const baseUrl = await getBaseUrl("ridomovies");
|
||||||
|
let slug = "";
|
||||||
|
try {
|
||||||
|
const res2 = await axios.get(baseUrl + "/core/api/search?q=" + meta.imdbId);
|
||||||
|
const data2 = res2.data;
|
||||||
|
slug = data2?.data?.items[0]?.fullSlug;
|
||||||
|
if (!slug || meta?.type === "series") {
|
||||||
|
return {
|
||||||
|
title: "",
|
||||||
|
synopsis: "",
|
||||||
|
image: "",
|
||||||
|
imdbId: data?.meta?.imdb_id || "",
|
||||||
|
type: meta?.type || "movie",
|
||||||
|
linkList: [],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
return {
|
||||||
|
title: "",
|
||||||
|
synopsis: "",
|
||||||
|
image: "",
|
||||||
|
imdbId: meta?.imdbId || "",
|
||||||
|
type: meta?.type || "movie",
|
||||||
|
linkList: [],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
const links = [];
|
||||||
|
let directLinks = [];
|
||||||
|
let season = new Map();
|
||||||
|
if (meta.type === "series") {
|
||||||
|
data?.meta?.videos?.map((video) => {
|
||||||
|
if (video?.season <= 0)
|
||||||
|
return;
|
||||||
|
if (!season.has(video?.season)) {
|
||||||
|
season.set(video?.season, []);
|
||||||
|
}
|
||||||
|
season.get(video?.season).push({
|
||||||
|
title: "Episode " + video?.episode,
|
||||||
|
link: "",
|
||||||
|
});
|
||||||
|
});
|
||||||
|
for (const [seasonNum, episodes] of season.entries()) {
|
||||||
|
links.push({
|
||||||
|
title: "Season " + seasonNum,
|
||||||
|
directLinks: episodes,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
directLinks.push({ title: "Movie", link: link });
|
||||||
|
links.push({ title: "Movie", directLinks: directLinks });
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
...meta,
|
||||||
|
linkList: links,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
return {
|
||||||
|
title: "",
|
||||||
|
synopsis: "",
|
||||||
|
image: "",
|
||||||
|
imdbId: "",
|
||||||
|
type: "movie",
|
||||||
|
linkList: [],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getMeta = getMeta;
|
||||||
66
dist/ridoMovies/posts.js
vendored
Normal file
66
dist/ridoMovies/posts.js
vendored
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getSearchPosts = exports.getPosts = void 0;
|
||||||
|
const getPosts = async function ({ filter, signal, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const catalog = [];
|
||||||
|
const url = "https://cinemeta-catalogs.strem.io" + filter;
|
||||||
|
console.log("allGetPostUrl", url);
|
||||||
|
const res = await providerContext.axios.get(url, {
|
||||||
|
headers: providerContext.commonHeaders,
|
||||||
|
signal,
|
||||||
|
});
|
||||||
|
const data = res.data;
|
||||||
|
data?.metas.map((result) => {
|
||||||
|
const title = result?.name;
|
||||||
|
const id = result?.imdb_id || result?.id;
|
||||||
|
const type = result?.type;
|
||||||
|
const image = result?.poster;
|
||||||
|
if (id) {
|
||||||
|
catalog.push({
|
||||||
|
title: title,
|
||||||
|
link: `https://v3-cinemeta.strem.io/meta/${type}/${id}.json`,
|
||||||
|
image: image,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
console.log("catalog", catalog.length);
|
||||||
|
return catalog;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("AutoEmbed error ", err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getPosts = getPosts;
|
||||||
|
const getSearchPosts = async function ({ searchQuery, page, signal, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const { axios, commonHeaders: headers } = providerContext;
|
||||||
|
if (page > 1) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
const catalog = [];
|
||||||
|
const url2 = `https://v3-cinemeta.strem.io/catalog/movie/top/search=${encodeURI(searchQuery)}.json`;
|
||||||
|
const res2 = await axios.get(url2, { headers, signal });
|
||||||
|
const data2 = res2.data;
|
||||||
|
data2?.metas.map((result) => {
|
||||||
|
const title = result?.name || "";
|
||||||
|
const id = result?.imdb_id || result?.id;
|
||||||
|
const image = result?.poster;
|
||||||
|
const type = result?.type;
|
||||||
|
if (id) {
|
||||||
|
catalog.push({
|
||||||
|
title: title,
|
||||||
|
link: `https://v3-cinemeta.strem.io/meta/${type}/${id}.json`,
|
||||||
|
image: image,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return catalog;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("AutoEmbed error ", err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getSearchPosts = getSearchPosts;
|
||||||
64
dist/ridoMovies/stream.js
vendored
Normal file
64
dist/ridoMovies/stream.js
vendored
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getStream = void 0;
|
||||||
|
const getStream = async ({ link: data, providerContext, }) => {
|
||||||
|
try {
|
||||||
|
const { cheerio, commonHeaders: headers, axios } = providerContext;
|
||||||
|
const streamData = JSON.parse(data);
|
||||||
|
const streamLinks = [];
|
||||||
|
// const path =
|
||||||
|
// streamData?.type === 'movie'
|
||||||
|
// ? `/${streamData?.slug}`
|
||||||
|
// : `/${streamData?.slug}/season-${streamData?.season}/episode-${streamData?.episode}`;
|
||||||
|
// const url = streamData?.baseUrl + path;
|
||||||
|
// console.log('all', url);
|
||||||
|
// const res = await axios.get(url, {headers});
|
||||||
|
// const postId = res.data.split('\\"postid\\":\\"')[1].split('\\"')[0];
|
||||||
|
// console.log('rido post id', postId);
|
||||||
|
const url = streamData?.baseUrl + "/api/" + streamData?.slug;
|
||||||
|
console.log("rido url", url);
|
||||||
|
const res = await axios.get(url, { headers });
|
||||||
|
const iframe = res.data.data?.[0]?.url;
|
||||||
|
console.log("rido data", iframe);
|
||||||
|
const iframeUrl = iframe.split('src="')[1].split('"')[0];
|
||||||
|
console.log("rido iframeUrl", iframeUrl);
|
||||||
|
const iframeRes = await axios.get(iframeUrl, {
|
||||||
|
headers: {
|
||||||
|
...headers,
|
||||||
|
Referer: streamData?.baseUrl,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const $ = cheerio.load(iframeRes.data);
|
||||||
|
const script = $('script:contains("eval")').html();
|
||||||
|
if (!script) {
|
||||||
|
throw new Error("Unable to find script");
|
||||||
|
}
|
||||||
|
// console.log('rido script', script);
|
||||||
|
const srcUrl = unpackJavaScript(script.trim());
|
||||||
|
console.log("rido srcUrl", srcUrl);
|
||||||
|
streamLinks.push({
|
||||||
|
link: srcUrl,
|
||||||
|
server: "rido",
|
||||||
|
type: "m3u8",
|
||||||
|
headers: {
|
||||||
|
Referer: iframeUrl,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return streamLinks;
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
console.log("rido get stream err", e);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getStream = getStream;
|
||||||
|
function unpackJavaScript(packedCode) {
|
||||||
|
const encodedString = packedCode.split("|aHR")[1].split("|")[0];
|
||||||
|
const base64Url = "aHR" + encodedString;
|
||||||
|
function addPadding(base64) {
|
||||||
|
return base64 + "=".repeat((4 - (base64.length % 4)) % 4);
|
||||||
|
}
|
||||||
|
console.log("rido base64Url", base64Url);
|
||||||
|
const unpackedCode = atob(addPadding(base64Url));
|
||||||
|
return unpackedCode;
|
||||||
|
}
|
||||||
18
dist/ringz/catalog.js
vendored
Normal file
18
dist/ringz/catalog.js
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.genres = exports.catalog = void 0;
|
||||||
|
exports.catalog = [
|
||||||
|
{
|
||||||
|
title: "Movies",
|
||||||
|
filter: "MOVIES",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "TV Shows",
|
||||||
|
filter: "SERIES",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Anime",
|
||||||
|
filter: "ANIME",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
exports.genres = [];
|
||||||
85
dist/ringz/meta.js
vendored
Normal file
85
dist/ringz/meta.js
vendored
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getMeta = void 0;
|
||||||
|
const getMeta = async function ({ link: data, }) {
|
||||||
|
try {
|
||||||
|
const dataJson = JSON.parse(data);
|
||||||
|
const title = dataJson?.kn || dataJson?.mn;
|
||||||
|
const image = dataJson?.IH || dataJson?.IV;
|
||||||
|
const tags = dataJson?.gn
|
||||||
|
.split(",")
|
||||||
|
.slice(0, 3)
|
||||||
|
.map((tag) => tag.trim());
|
||||||
|
const type = dataJson?.cg === "webSeries" ? "series" : "movie";
|
||||||
|
const linkList = [];
|
||||||
|
if (dataJson?.cg === "webSeries") {
|
||||||
|
["1", "2", "3", "4"]?.forEach((item) => {
|
||||||
|
const directLinks = [];
|
||||||
|
if (typeof dataJson?.["eServer" + item] === "object" &&
|
||||||
|
Object?.keys(dataJson?.["eServer" + item])?.length > 0) {
|
||||||
|
Object.keys(dataJson?.["eServer" + item]).forEach((key) => {
|
||||||
|
directLinks.push({
|
||||||
|
title: "Episode " + key,
|
||||||
|
link: JSON.stringify({
|
||||||
|
url: dataJson?.["eServer" + item][key],
|
||||||
|
server: "Server " + item,
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
});
|
||||||
|
linkList.push({
|
||||||
|
title: dataJson?.pn + " (Server " + item + ")",
|
||||||
|
directLinks,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
const directLinks = [];
|
||||||
|
["1", "2", "3", "4"]?.forEach((item) => {
|
||||||
|
if (dataJson?.["s" + item]) {
|
||||||
|
directLinks.push({
|
||||||
|
title: "Server " + item + " (HD)",
|
||||||
|
link: JSON.stringify({
|
||||||
|
url: dataJson?.s1,
|
||||||
|
server: "Server " + item,
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (dataJson?.["4s" + item]) {
|
||||||
|
directLinks.push({
|
||||||
|
title: "Server " + item + " (480p)",
|
||||||
|
link: JSON.stringify({
|
||||||
|
url: dataJson?.["4s" + item],
|
||||||
|
server: "Server " + item,
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
linkList.push({
|
||||||
|
title: dataJson?.pn,
|
||||||
|
directLinks,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
title,
|
||||||
|
image,
|
||||||
|
imdbId: "",
|
||||||
|
synopsis: "",
|
||||||
|
type,
|
||||||
|
linkList,
|
||||||
|
tags,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
return {
|
||||||
|
title: "",
|
||||||
|
image: "",
|
||||||
|
imdbId: "",
|
||||||
|
synopsis: "",
|
||||||
|
type: "movie",
|
||||||
|
linkList: [],
|
||||||
|
tags: [],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getMeta = getMeta;
|
||||||
153
dist/ringz/posts.js
vendored
Normal file
153
dist/ringz/posts.js
vendored
Normal file
@@ -0,0 +1,153 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.ringzData = exports.headers = exports.getSearchPosts = exports.getPosts = void 0;
|
||||||
|
exports.getRingzMovies = getRingzMovies;
|
||||||
|
exports.getRingzShows = getRingzShows;
|
||||||
|
exports.getRingzAnime = getRingzAnime;
|
||||||
|
exports.getRingzAdult = getRingzAdult;
|
||||||
|
const getPosts = async function ({ filter, signal, providerContext, }) {
|
||||||
|
return posts({ filter, signal, providerContext });
|
||||||
|
};
|
||||||
|
exports.getPosts = getPosts;
|
||||||
|
const getSearchPosts = async function ({ searchQuery, page, // providerContext,
|
||||||
|
}) {
|
||||||
|
if (page > 1)
|
||||||
|
return [];
|
||||||
|
function searchData(data, query) {
|
||||||
|
// Convert query to lowercase for case-insensitive search
|
||||||
|
const searchQuery = query.toLowerCase();
|
||||||
|
// Filter movies based on movie name (mn)
|
||||||
|
return data.filter((movie) => {
|
||||||
|
// Convert movie name to lowercase and check if it includes the search query
|
||||||
|
const movieName = movie.mn.toLowerCase();
|
||||||
|
return movieName.includes(searchQuery);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
const catalog = [];
|
||||||
|
const promises = [getRingzMovies(), getRingzShows(), getRingzAnime()];
|
||||||
|
const responses = await Promise.all(promises);
|
||||||
|
responses.map((response) => {
|
||||||
|
const searchResults = searchData(response, searchQuery);
|
||||||
|
searchResults.map((element) => {
|
||||||
|
const title = element?.kn || element?.mn;
|
||||||
|
const link = JSON.stringify(element);
|
||||||
|
const image = element?.IV;
|
||||||
|
if (title && link) {
|
||||||
|
catalog.push({
|
||||||
|
title: title,
|
||||||
|
link: link,
|
||||||
|
image: image,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return catalog;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("ringz error ", err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getSearchPosts = getSearchPosts;
|
||||||
|
async function posts({ filter, // signal,
|
||||||
|
}) {
|
||||||
|
try {
|
||||||
|
let response;
|
||||||
|
if (filter === "MOVIES") {
|
||||||
|
response = getRingzMovies();
|
||||||
|
}
|
||||||
|
if (filter === "SERIES") {
|
||||||
|
response = getRingzShows();
|
||||||
|
}
|
||||||
|
if (filter === "ANIME") {
|
||||||
|
response = getRingzAnime();
|
||||||
|
}
|
||||||
|
const data = await response;
|
||||||
|
const catalog = [];
|
||||||
|
data.map((element) => {
|
||||||
|
const title = element?.kn || element?.mn;
|
||||||
|
const link = JSON.stringify(element);
|
||||||
|
const image = element?.IV;
|
||||||
|
if (title && link) {
|
||||||
|
catalog.push({
|
||||||
|
title: title,
|
||||||
|
link: link,
|
||||||
|
image: image,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return catalog;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error("ringz error ", err);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.headers = {
|
||||||
|
"cf-access-client-id": "833049b087acf6e787cedfd85d1ccdb8.access",
|
||||||
|
"cf-access-client-secret": "02db296a961d7513c3102d7785df4113eff036b2d57d060ffcc2ba3ba820c6aa",
|
||||||
|
};
|
||||||
|
const BASE_URL = "https://privatereporz.pages.dev";
|
||||||
|
async function getRingzMovies() {
|
||||||
|
try {
|
||||||
|
const response = await fetch(`${BASE_URL}/test.json`, {
|
||||||
|
headers: {
|
||||||
|
...exports.headers,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const data = await response.json();
|
||||||
|
return data.AllMovieDataList;
|
||||||
|
}
|
||||||
|
catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
async function getRingzShows() {
|
||||||
|
try {
|
||||||
|
const response = await fetch(`${BASE_URL}/srs.json`, {
|
||||||
|
headers: {
|
||||||
|
...exports.headers,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const data = await response.json();
|
||||||
|
return data.webSeriesDataList;
|
||||||
|
}
|
||||||
|
catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
async function getRingzAnime() {
|
||||||
|
try {
|
||||||
|
const response = await fetch(`${BASE_URL}/anime.json`, {
|
||||||
|
headers: {
|
||||||
|
...exports.headers,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const data = await response.json();
|
||||||
|
return data.webSeriesDataList;
|
||||||
|
}
|
||||||
|
catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
async function getRingzAdult() {
|
||||||
|
try {
|
||||||
|
const response = await fetch(`${BASE_URL}/desihub.json`, {
|
||||||
|
headers: {
|
||||||
|
...exports.headers,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const data = await response.json();
|
||||||
|
return data.webSeriesDataList;
|
||||||
|
}
|
||||||
|
catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.ringzData = {
|
||||||
|
getRingzMovies,
|
||||||
|
getRingzShows,
|
||||||
|
getRingzAnime,
|
||||||
|
getRingzAdult,
|
||||||
|
};
|
||||||
14
dist/ringz/stream.js
vendored
Normal file
14
dist/ringz/stream.js
vendored
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getStream = void 0;
|
||||||
|
const getStream = async function ({ link: data, }) {
|
||||||
|
const streamLinks = [];
|
||||||
|
const dataJson = JSON.parse(data);
|
||||||
|
streamLinks.push({
|
||||||
|
link: dataJson.url,
|
||||||
|
server: dataJson.server,
|
||||||
|
type: "mkv",
|
||||||
|
});
|
||||||
|
return streamLinks;
|
||||||
|
};
|
||||||
|
exports.getStream = getStream;
|
||||||
18
dist/showbox/catalog.js
vendored
Normal file
18
dist/showbox/catalog.js
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.genres = exports.catalog = void 0;
|
||||||
|
exports.catalog = [
|
||||||
|
{
|
||||||
|
title: "Home",
|
||||||
|
filter: "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Movies",
|
||||||
|
filter: "/movie",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "TV Shows",
|
||||||
|
filter: "/tv",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
exports.genres = [];
|
||||||
43
dist/showbox/episodes.js
vendored
Normal file
43
dist/showbox/episodes.js
vendored
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getEpisodes = void 0;
|
||||||
|
const getEpisodes = async function ({ url: id, providerContext, }) {
|
||||||
|
const { axios } = providerContext;
|
||||||
|
try {
|
||||||
|
const [fileId, febboxId] = id.split("&");
|
||||||
|
const febLink = febboxId
|
||||||
|
? `https://www.febbox.com/file/file_share_list?share_key=${fileId}&pwd=&parent_id=${febboxId}&is_html=0`
|
||||||
|
: `https://www.febbox.com/file/file_share_list?share_key=${fileId}&pwd=&is_html=0`;
|
||||||
|
const res = await axios.get(febLink);
|
||||||
|
const data = res.data;
|
||||||
|
const fileList = data.data.file_list;
|
||||||
|
const episodeLinks = [];
|
||||||
|
fileList?.map((file) => {
|
||||||
|
const fileName = formatEpisodeName(file.file_name);
|
||||||
|
const epId = file?.fid;
|
||||||
|
if (!file.is_dir && fileName && epId) {
|
||||||
|
episodeLinks.push({
|
||||||
|
title: fileName,
|
||||||
|
link: `${fileId}&${epId}`,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return episodeLinks;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getEpisodes = getEpisodes;
|
||||||
|
function formatEpisodeName(title) {
|
||||||
|
const regex = /[sS](\d+)\s*[eE](\d+)/;
|
||||||
|
const match = title.match(regex);
|
||||||
|
if (match) {
|
||||||
|
const season = match[1].padStart(2, "0");
|
||||||
|
const episode = match[2].padStart(2, "0");
|
||||||
|
return `Season${season} Episode${episode}`;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
}
|
||||||
65
dist/showbox/meata.js
vendored
Normal file
65
dist/showbox/meata.js
vendored
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getMeta = void 0;
|
||||||
|
const getMeta = async function ({ link, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const { axios, cheerio } = providerContext;
|
||||||
|
const url = link;
|
||||||
|
const res = await axios.get(url);
|
||||||
|
const data = res.data;
|
||||||
|
const $ = cheerio.load(data);
|
||||||
|
const type = url.includes("tv") ? "series" : "movie";
|
||||||
|
const imdbId = "";
|
||||||
|
const title = $(".heading-name").text();
|
||||||
|
const rating = $(".btn-imdb")
|
||||||
|
.text()
|
||||||
|
?.match(/\d+(\.\d+)?/g)?.[0] || "";
|
||||||
|
const image = $(".cover_follow").attr("style")?.split("url(")[1]?.split(")")[0] || "";
|
||||||
|
const synopsis = $(".description")
|
||||||
|
.text()
|
||||||
|
?.replace(/[\n\t]/g, "")
|
||||||
|
?.trim();
|
||||||
|
const febID = $(".heading-name").find("a").attr("href")?.split("/")?.pop();
|
||||||
|
const baseUrl = url.split("/").slice(0, 3).join("/");
|
||||||
|
const indexUrl = `${baseUrl}/index/share_link?id=${febID}&type=${type === "movie" ? "1" : "2"}`;
|
||||||
|
const indexRes = await axios.get(indexUrl);
|
||||||
|
const indexData = indexRes.data;
|
||||||
|
const febKey = indexData.data.link.split("/").pop();
|
||||||
|
const febLink = `https://www.febbox.com/file/file_share_list?share_key=${febKey}&is_html=0`;
|
||||||
|
const febRes = await axios.get(febLink);
|
||||||
|
const febData = febRes.data;
|
||||||
|
const fileList = febData?.data?.file_list;
|
||||||
|
const links = [];
|
||||||
|
if (fileList) {
|
||||||
|
fileList.map((file) => {
|
||||||
|
const fileName = `${file.file_name} (${file.file_size})`;
|
||||||
|
const fileId = file.fid;
|
||||||
|
links.push({
|
||||||
|
title: fileName,
|
||||||
|
episodesLink: file.is_dir ? `${febKey}&${fileId}` : `${febKey}&`,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
title,
|
||||||
|
rating,
|
||||||
|
synopsis,
|
||||||
|
image,
|
||||||
|
imdbId,
|
||||||
|
type,
|
||||||
|
linkList: links,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
return {
|
||||||
|
title: "",
|
||||||
|
rating: "",
|
||||||
|
synopsis: "",
|
||||||
|
image: "",
|
||||||
|
imdbId: "",
|
||||||
|
type: "",
|
||||||
|
linkList: [],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getMeta = getMeta;
|
||||||
47
dist/showbox/posts.js
vendored
Normal file
47
dist/showbox/posts.js
vendored
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getSearchPosts = exports.getPosts = void 0;
|
||||||
|
const getPosts = async function ({ filter, page,
|
||||||
|
// providerValue,
|
||||||
|
signal, providerContext, }) {
|
||||||
|
const { getBaseUrl, axios, cheerio } = providerContext;
|
||||||
|
const baseUrl = await getBaseUrl("showbox");
|
||||||
|
const url = `${baseUrl + filter}?page=${page}/`;
|
||||||
|
return posts({ url, signal, baseUrl, axios, cheerio });
|
||||||
|
};
|
||||||
|
exports.getPosts = getPosts;
|
||||||
|
const getSearchPosts = async function ({ searchQuery, page,
|
||||||
|
// providerValue,
|
||||||
|
signal, providerContext, }) {
|
||||||
|
const { getBaseUrl, axios, cheerio } = providerContext;
|
||||||
|
const baseUrl = await getBaseUrl("showbox");
|
||||||
|
const url = `${baseUrl}/search?keyword=${searchQuery}&page=${page}`;
|
||||||
|
return posts({ url, signal, baseUrl, axios, cheerio });
|
||||||
|
};
|
||||||
|
exports.getSearchPosts = getSearchPosts;
|
||||||
|
async function posts({ url, signal,
|
||||||
|
// baseUrl,
|
||||||
|
axios, cheerio, }) {
|
||||||
|
try {
|
||||||
|
const res = await axios.get(url, { signal });
|
||||||
|
const data = res.data;
|
||||||
|
const $ = cheerio.load(data);
|
||||||
|
const catalog = [];
|
||||||
|
$(".movie-item").map((i, element) => {
|
||||||
|
const title = $(element).find(".movie-title").text();
|
||||||
|
const link = $(element).find("a").attr("href");
|
||||||
|
const image = $(element).find("img").attr("src");
|
||||||
|
if (title && link && image) {
|
||||||
|
catalog.push({
|
||||||
|
title: title,
|
||||||
|
link: link,
|
||||||
|
image: image,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return catalog;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
70
dist/showbox/stream.js
vendored
Normal file
70
dist/showbox/stream.js
vendored
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
"use strict";
|
||||||
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||||
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||||
|
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||||
|
}
|
||||||
|
Object.defineProperty(o, k2, desc);
|
||||||
|
}) : (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
o[k2] = m[k];
|
||||||
|
}));
|
||||||
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||||
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||||
|
}) : function(o, v) {
|
||||||
|
o["default"] = v;
|
||||||
|
});
|
||||||
|
var __importStar = (this && this.__importStar) || (function () {
|
||||||
|
var ownKeys = function(o) {
|
||||||
|
ownKeys = Object.getOwnPropertyNames || function (o) {
|
||||||
|
var ar = [];
|
||||||
|
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
||||||
|
return ar;
|
||||||
|
};
|
||||||
|
return ownKeys(o);
|
||||||
|
};
|
||||||
|
return function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
||||||
|
__setModuleDefault(result, mod);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
})();
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getStream = void 0;
|
||||||
|
const cheerio = __importStar(require("cheerio"));
|
||||||
|
const getStream = async function ({ link: id,
|
||||||
|
// type,
|
||||||
|
signal, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const { axios } = providerContext;
|
||||||
|
const stream = [];
|
||||||
|
const [, epId] = id.split("&");
|
||||||
|
const url = `https://febbox.vercel.app/api/video-quality?fid=${epId}`;
|
||||||
|
const res = await axios.get(url, { signal });
|
||||||
|
const data = res.data;
|
||||||
|
const $ = cheerio.load(data.html);
|
||||||
|
$(".file_quality").each((i, el) => {
|
||||||
|
const server = $(el).find("p.name").text() +
|
||||||
|
" - " +
|
||||||
|
$(el).find("p.size").text() +
|
||||||
|
" - " +
|
||||||
|
$(el).find("p.speed").text();
|
||||||
|
const link = $(el).attr("data-url");
|
||||||
|
if (link) {
|
||||||
|
stream.push({
|
||||||
|
server: server,
|
||||||
|
type: "mkv",
|
||||||
|
link: link,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return stream;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getStream = getStream;
|
||||||
14
dist/tokyoInsider/catalog.js
vendored
14
dist/tokyoInsider/catalog.js
vendored
@@ -1,14 +1,14 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.tokyoGenresList = exports.tokyoCatalogList = void 0;
|
exports.genres = exports.catalog = void 0;
|
||||||
exports.tokyoCatalogList = [
|
exports.catalog = [
|
||||||
{
|
{
|
||||||
title: 'Top Anime',
|
title: "Top Anime",
|
||||||
filter: 'anime/search?r=5',
|
filter: "anime/search?r=5",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Popular Anime',
|
title: "Popular Anime",
|
||||||
filter: 'anime/',
|
filter: "anime/",
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
exports.tokyoGenresList = [];
|
exports.genres = [];
|
||||||
|
|||||||
60
dist/tokyoInsider/meta.js
vendored
Normal file
60
dist/tokyoInsider/meta.js
vendored
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getMeta = void 0;
|
||||||
|
const getMeta = async function ({ link, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const { cheerio } = providerContext;
|
||||||
|
const url = link;
|
||||||
|
const res = await fetch(url);
|
||||||
|
const data = await res.text();
|
||||||
|
const $ = cheerio.load(data);
|
||||||
|
const meta = {
|
||||||
|
title: $('.c_h2:contains("Title(s):")')
|
||||||
|
.text()
|
||||||
|
.replace("Title(s):", "")
|
||||||
|
.trim()
|
||||||
|
.split("\n")[0],
|
||||||
|
synopsis: $('.c_h2b:contains("Summary:"),.c_h2:contains("Summary:")')
|
||||||
|
.text()
|
||||||
|
.replace("Summary:", "")
|
||||||
|
.trim(),
|
||||||
|
image: $(".a_img").attr("src") || "",
|
||||||
|
imdbId: "",
|
||||||
|
type: "series",
|
||||||
|
};
|
||||||
|
const episodesList = [];
|
||||||
|
$(".episode").map((i, element) => {
|
||||||
|
const link = "https://www.tokyoinsider.com" + $(element).find("a").attr("href") ||
|
||||||
|
$(".download-link").attr("href");
|
||||||
|
let title = $(element).find("a").find("em").text() +
|
||||||
|
" " +
|
||||||
|
$(element).find("a").find("strong").text();
|
||||||
|
if (!title.trim()) {
|
||||||
|
title = $(".download-link").text();
|
||||||
|
}
|
||||||
|
if (link && title.trim()) {
|
||||||
|
episodesList.push({ title, link });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return {
|
||||||
|
...meta,
|
||||||
|
linkList: [
|
||||||
|
{
|
||||||
|
title: meta.title,
|
||||||
|
directLinks: episodesList,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
return {
|
||||||
|
title: "",
|
||||||
|
synopsis: "",
|
||||||
|
image: "",
|
||||||
|
imdbId: "",
|
||||||
|
type: "series",
|
||||||
|
linkList: [],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getMeta = getMeta;
|
||||||
50
dist/tokyoInsider/posts.js
vendored
Normal file
50
dist/tokyoInsider/posts.js
vendored
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getSearchPosts = exports.getPosts = void 0;
|
||||||
|
const getPosts = async function ({ filter, page,
|
||||||
|
// providerValue,
|
||||||
|
signal, providerContext, }) {
|
||||||
|
const { getBaseUrl, axios, cheerio } = providerContext;
|
||||||
|
const baseURL = await getBaseUrl("tokyoinsider");
|
||||||
|
const start = page < 2 ? 0 : (page - 1) * 20;
|
||||||
|
const url = `${baseURL}/${filter}&start=${start}`;
|
||||||
|
return posts({ baseURL, url, signal, axios, cheerio });
|
||||||
|
};
|
||||||
|
exports.getPosts = getPosts;
|
||||||
|
const getSearchPosts = async function ({ searchQuery, page,
|
||||||
|
// providerValue,
|
||||||
|
signal, providerContext, }) {
|
||||||
|
const { getBaseUrl, axios, cheerio } = providerContext;
|
||||||
|
const baseURL = await getBaseUrl("tokyoinsider");
|
||||||
|
const start = page < 2 ? 0 : (page - 1) * 20;
|
||||||
|
const url = `${baseURL}/anime/search?k=${searchQuery}&start=${start}`;
|
||||||
|
return posts({ baseURL, url, signal, axios, cheerio });
|
||||||
|
};
|
||||||
|
exports.getSearchPosts = getSearchPosts;
|
||||||
|
async function posts({ baseURL, url, signal, axios, cheerio, }) {
|
||||||
|
try {
|
||||||
|
const res = await axios.get(url, { signal });
|
||||||
|
const data = res.data;
|
||||||
|
const $ = cheerio.load(data);
|
||||||
|
const catalog = [];
|
||||||
|
$('td.c_h2[width="40"]').map((i, element) => {
|
||||||
|
const image = $(element)
|
||||||
|
.find(".a_img")
|
||||||
|
.attr("src")
|
||||||
|
?.replace("small", "default");
|
||||||
|
const title = $(element).find("a").attr("title");
|
||||||
|
const link = baseURL + $(element).find("a").attr("href");
|
||||||
|
if (title && link && image) {
|
||||||
|
catalog.push({
|
||||||
|
title: title,
|
||||||
|
link: link,
|
||||||
|
image: image,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return catalog;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
30
dist/tokyoInsider/stream.js
vendored
Normal file
30
dist/tokyoInsider/stream.js
vendored
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getStream = void 0;
|
||||||
|
const getStream = async function ({ link, providerContext, }) {
|
||||||
|
try {
|
||||||
|
const { cheerio } = providerContext;
|
||||||
|
const url = link;
|
||||||
|
const res = await fetch(url);
|
||||||
|
const data = await res.text();
|
||||||
|
const $ = cheerio.load(data);
|
||||||
|
const streamLinks = [];
|
||||||
|
$(".c_h1,.c_h2").map((i, element) => {
|
||||||
|
$(element).find("span").remove();
|
||||||
|
const title = $(element).find("a").text() || "";
|
||||||
|
const link = $(element).find("a").attr("href") || "";
|
||||||
|
if (title && link.includes("media")) {
|
||||||
|
streamLinks.push({
|
||||||
|
server: title,
|
||||||
|
link,
|
||||||
|
type: link.split(".").pop() || "mkv",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return streamLinks;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.getStream = getStream;
|
||||||
87
dist/topmovies/catalog.js
vendored
Normal file
87
dist/topmovies/catalog.js
vendored
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.genres = exports.catalog = void 0;
|
||||||
|
exports.catalog = [
|
||||||
|
{
|
||||||
|
title: "Latest",
|
||||||
|
filter: "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Netflix",
|
||||||
|
filter: "/web-series/tv-shows-by-network/netflix",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Hotstar",
|
||||||
|
filter: "/web-series/tv-shows-by-network/hotstar",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Amazon Prime",
|
||||||
|
filter: "/web-series/tv-shows-by-network/amazon-prime-video",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
exports.genres = [
|
||||||
|
{
|
||||||
|
title: "Apple TV+",
|
||||||
|
filter: "/ott/apple-tv",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Disney+",
|
||||||
|
filter: "/ott/disney-plus",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Hulu",
|
||||||
|
filter: "/ott/hulu",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Crunchyroll",
|
||||||
|
filter: "/ott/crunchyroll",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Action",
|
||||||
|
filter: "/movies-by-genre/action/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Adventure",
|
||||||
|
filter: "/movies-by-genre/adventure/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Animation",
|
||||||
|
filter: "/movies-by-genre/animated/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Comedy",
|
||||||
|
filter: "/movies-by-genre/comedy/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Crime",
|
||||||
|
filter: "/movies-by-genre/crime/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Documentary",
|
||||||
|
filter: "/movies-by-genre/documentary/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Fantasy",
|
||||||
|
filter: "/movies-by-genre/fantasy/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Horror",
|
||||||
|
filter: "/movies-by-genre/horror/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Mystery",
|
||||||
|
filter: "/movies-by-genre/mystery/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Romance",
|
||||||
|
filter: "/movies-by-genre/romance/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Thriller",
|
||||||
|
filter: "/movies-by-genre/thriller/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Sci-Fi",
|
||||||
|
filter: "/movies-by-genre/sci-fi/",
|
||||||
|
},
|
||||||
|
];
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user