mirror of
https://github.com/vega-org/vega-providers.git
synced 2026-04-17 23:51:44 +00:00
Compare commits
18 Commits
with-bundl
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9c55d5a4c5 | ||
|
|
4256b05d2b | ||
|
|
93d8acec5e | ||
|
|
db6be6320d | ||
|
|
d1ddafea1c | ||
|
|
83ac1341de | ||
|
|
e097f212b0 | ||
|
|
f32228961b | ||
|
|
e5654b17bc | ||
|
|
617670cbaf | ||
|
|
5c7b986db8 | ||
|
|
bf74f32075 | ||
|
|
67167ec8d1 | ||
|
|
07d75bdf81 | ||
|
|
913239459c | ||
|
|
1dc01890c8 | ||
|
|
7eb53273c2 | ||
|
|
099b4aba4f |
@@ -150,6 +150,44 @@ async function buildProvider(providerName) {
|
|||||||
return { providerName, modules: results };
|
return { providerName, modules: results };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function buildUtilityFiles() {
|
||||||
|
const utilityFiles = ["getBaseUrl", "headers", "providerContext"];
|
||||||
|
|
||||||
|
for (const utilityName of utilityFiles) {
|
||||||
|
const utilityPath = path.join(providersDir, `${utilityName}.ts`);
|
||||||
|
|
||||||
|
if (!fs.existsSync(utilityPath)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const result = await esbuild.build({
|
||||||
|
entryPoints: [utilityPath],
|
||||||
|
bundle: true,
|
||||||
|
platform: "node",
|
||||||
|
format: "cjs",
|
||||||
|
target: "es2015",
|
||||||
|
write: false,
|
||||||
|
external: [],
|
||||||
|
minify: false,
|
||||||
|
keepNames: true,
|
||||||
|
treeShaking: true,
|
||||||
|
outfile: `${utilityName}.js`,
|
||||||
|
});
|
||||||
|
|
||||||
|
let code = result.outputFiles[0].text;
|
||||||
|
code = code.replace(/require\(['"]node:.*?['"]\)/g, "{}");
|
||||||
|
|
||||||
|
const outputPath = path.join(__dirname, "dist", `${utilityName}.js`);
|
||||||
|
fs.writeFileSync(outputPath, code);
|
||||||
|
|
||||||
|
console.log(`✓ ${utilityName}.js (${(code.length / 1024).toFixed(1)}kb)`);
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`✗ Error building ${utilityName}:`, error.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function buildAll() {
|
async function buildAll() {
|
||||||
const startTime = Date.now();
|
const startTime = Date.now();
|
||||||
console.log(
|
console.log(
|
||||||
@@ -163,6 +201,9 @@ async function buildAll() {
|
|||||||
}
|
}
|
||||||
fs.mkdirSync(distDir, { recursive: true });
|
fs.mkdirSync(distDir, { recursive: true });
|
||||||
|
|
||||||
|
// Build utility files first
|
||||||
|
await buildUtilityFiles();
|
||||||
|
|
||||||
// Build all providers
|
// Build all providers
|
||||||
const results = await Promise.all(providerDirs.map(buildProvider));
|
const results = await Promise.all(providerDirs.map(buildProvider));
|
||||||
|
|
||||||
|
|||||||
2
dist/1cinevood/stream.js
vendored
2
dist/1cinevood/stream.js
vendored
File diff suppressed because one or more lines are too long
2
dist/4khdhub/stream.js
vendored
2
dist/4khdhub/stream.js
vendored
File diff suppressed because one or more lines are too long
2
dist/Joya9tv/stream.js
vendored
2
dist/Joya9tv/stream.js
vendored
File diff suppressed because one or more lines are too long
2
dist/cinemaLuxe/stream.js
vendored
2
dist/cinemaLuxe/stream.js
vendored
File diff suppressed because one or more lines are too long
2
dist/drive/stream.js
vendored
2
dist/drive/stream.js
vendored
File diff suppressed because one or more lines are too long
67
dist/getBaseUrl.js
vendored
Normal file
67
dist/getBaseUrl.js
vendored
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
"use strict";
|
||||||
|
var __defProp = Object.defineProperty;
|
||||||
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||||
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||||
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||||
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||||
|
var __export = (target, all) => {
|
||||||
|
for (var name in all)
|
||||||
|
__defProp(target, name, { get: all[name], enumerable: true });
|
||||||
|
};
|
||||||
|
var __copyProps = (to, from, except, desc) => {
|
||||||
|
if (from && typeof from === "object" || typeof from === "function") {
|
||||||
|
for (let key of __getOwnPropNames(from))
|
||||||
|
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||||
|
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||||
|
}
|
||||||
|
return to;
|
||||||
|
};
|
||||||
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||||
|
var __async = (__this, __arguments, generator) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
var fulfilled = (value) => {
|
||||||
|
try {
|
||||||
|
step(generator.next(value));
|
||||||
|
} catch (e) {
|
||||||
|
reject(e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var rejected = (value) => {
|
||||||
|
try {
|
||||||
|
step(generator.throw(value));
|
||||||
|
} catch (e) {
|
||||||
|
reject(e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
||||||
|
step((generator = generator.apply(__this, __arguments)).next());
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// providers/getBaseUrl.ts
|
||||||
|
var getBaseUrl_exports = {};
|
||||||
|
__export(getBaseUrl_exports, {
|
||||||
|
getBaseUrl: () => getBaseUrl
|
||||||
|
});
|
||||||
|
module.exports = __toCommonJS(getBaseUrl_exports);
|
||||||
|
var expireTime = 60 * 60 * 1e3;
|
||||||
|
var getBaseUrl = /* @__PURE__ */ __name((providerValue) => __async(null, null, function* () {
|
||||||
|
try {
|
||||||
|
let baseUrl = "";
|
||||||
|
const cacheKey = "CacheBaseUrl" + providerValue;
|
||||||
|
const timeKey = "baseUrlTime" + providerValue;
|
||||||
|
const baseUrlRes = yield fetch(
|
||||||
|
"https://himanshu8443.github.io/providers/modflix.json"
|
||||||
|
);
|
||||||
|
const baseUrlData = yield baseUrlRes.json();
|
||||||
|
baseUrl = baseUrlData[providerValue].url;
|
||||||
|
return baseUrl;
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`Error fetching baseUrl: ${providerValue}`, error);
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}), "getBaseUrl");
|
||||||
|
// Annotate the CommonJS export names for ESM import in node:
|
||||||
|
0 && (module.exports = {
|
||||||
|
getBaseUrl
|
||||||
|
});
|
||||||
2
dist/hdhub4u/stream.js
vendored
2
dist/hdhub4u/stream.js
vendored
File diff suppressed because one or more lines are too long
37
dist/headers.js
vendored
Normal file
37
dist/headers.js
vendored
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
"use strict";
|
||||||
|
var __defProp = Object.defineProperty;
|
||||||
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||||
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||||
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||||
|
var __export = (target, all) => {
|
||||||
|
for (var name in all)
|
||||||
|
__defProp(target, name, { get: all[name], enumerable: true });
|
||||||
|
};
|
||||||
|
var __copyProps = (to, from, except, desc) => {
|
||||||
|
if (from && typeof from === "object" || typeof from === "function") {
|
||||||
|
for (let key of __getOwnPropNames(from))
|
||||||
|
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||||
|
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||||
|
}
|
||||||
|
return to;
|
||||||
|
};
|
||||||
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||||
|
|
||||||
|
// providers/headers.ts
|
||||||
|
var headers_exports = {};
|
||||||
|
__export(headers_exports, {
|
||||||
|
headers: () => headers
|
||||||
|
});
|
||||||
|
module.exports = __toCommonJS(headers_exports);
|
||||||
|
var 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"',
|
||||||
|
// 'Sec-Fetch-Site': 'none',
|
||||||
|
// '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"
|
||||||
|
};
|
||||||
|
// Annotate the CommonJS export names for ESM import in node:
|
||||||
|
0 && (module.exports = {
|
||||||
|
headers
|
||||||
|
});
|
||||||
2
dist/katMovieFix/stream.js
vendored
2
dist/katMovieFix/stream.js
vendored
File diff suppressed because one or more lines are too long
2
dist/katmovies/stream.js
vendored
2
dist/katmovies/stream.js
vendored
File diff suppressed because one or more lines are too long
2
dist/luxMovies/meta.js
vendored
2
dist/luxMovies/meta.js
vendored
File diff suppressed because one or more lines are too long
2
dist/luxMovies/posts.js
vendored
2
dist/luxMovies/posts.js
vendored
File diff suppressed because one or more lines are too long
2
dist/luxMovies/stream.js
vendored
2
dist/luxMovies/stream.js
vendored
File diff suppressed because one or more lines are too long
2
dist/movies4u/stream.js
vendored
2
dist/movies4u/stream.js
vendored
File diff suppressed because one or more lines are too long
57332
dist/providerContext.js
vendored
Normal file
57332
dist/providerContext.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2
dist/showbox/posts.js
vendored
2
dist/showbox/posts.js
vendored
@@ -1 +1 @@
|
|||||||
"use strict";var __defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__hasOwnProp=Object.prototype.hasOwnProperty,__name=(target,value)=>__defProp(target,"name",{value:value,configurable:!0}),__export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&"object"==typeof from||"function"==typeof from)for(let key of __getOwnPropNames(from))__hasOwnProp.call(to,key)||key===except||__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to},__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod),__async=(__this,__arguments,generator)=>new Promise((resolve,reject)=>{var fulfilled=value=>{try{step(generator.next(value))}catch(e){reject(e)}},rejected=value=>{try{step(generator.throw(value))}catch(e){reject(e)}},step=x=>x.done?resolve(x.value):Promise.resolve(x.value).then(fulfilled,rejected);step((generator=generator.apply(__this,__arguments)).next())}),posts_exports={};__export(posts_exports,{getPosts:()=>getPosts,getSearchPosts:()=>getSearchPosts});var getPosts=__name(function(_0){return __async(this,arguments,function*({filter:filter,page:page,signal:signal,providerContext:providerContext}){const{getBaseUrl:getBaseUrl,axios:axios,cheerio:cheerio}=providerContext,baseUrl=yield getBaseUrl("showbox");return posts({url:`${baseUrl+filter}?page=${page}/`,signal:signal,baseUrl:baseUrl,axios:axios,cheerio:cheerio})})},"getPosts"),getSearchPosts=__name(function(_0){return __async(this,arguments,function*({searchQuery:searchQuery,page:page,signal:signal,providerContext:providerContext}){const{getBaseUrl:getBaseUrl,axios:axios,cheerio:cheerio}=providerContext,baseUrl=yield getBaseUrl("showbox");return posts({url:`${baseUrl}/search?keyword=${searchQuery}&page=${page}`,signal:signal,baseUrl:baseUrl,axios:axios,cheerio:cheerio})})},"getSearchPosts");function posts(_0){return __async(this,arguments,function*({url:url,signal:signal,axios:axios,cheerio:cheerio}){try{const data=(yield axios.get(url,{signal:signal})).data,$=cheerio.load(data),catalog=[];return $(".movie-item,.flw-item").map((i,element)=>{const title=$(element).find(".film-name").text().trim(),link=$(element).find("a").attr("href"),image=$(element).find("img").attr("src");title&&link&&image&&catalog.push({title:title,link:link,image:image})}),catalog}catch(err){return[]}})}__name(posts,"posts"),exports.getPosts=getPosts,exports.getSearchPosts=getSearchPosts;
|
"use strict";var __defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__hasOwnProp=Object.prototype.hasOwnProperty,__name=(target,value)=>__defProp(target,"name",{value:value,configurable:!0}),__export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&"object"==typeof from||"function"==typeof from)for(let key of __getOwnPropNames(from))__hasOwnProp.call(to,key)||key===except||__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to},__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod),__async=(__this,__arguments,generator)=>new Promise((resolve,reject)=>{var fulfilled=value=>{try{step(generator.next(value))}catch(e){reject(e)}},rejected=value=>{try{step(generator.throw(value))}catch(e){reject(e)}},step=x=>x.done?resolve(x.value):Promise.resolve(x.value).then(fulfilled,rejected);step((generator=generator.apply(__this,__arguments)).next())}),posts_exports={};__export(posts_exports,{getPosts:()=>getPosts,getSearchPosts:()=>getSearchPosts});var getPosts=__name(function(_0){return __async(this,arguments,function*({filter:filter,page:page,signal:signal,providerContext:providerContext}){const{getBaseUrl:getBaseUrl,axios:axios,cheerio:cheerio}=providerContext,baseUrl=yield getBaseUrl("showbox");return posts({url:`${baseUrl+filter}?page=${page}/`,signal:signal,baseUrl:baseUrl,axios:axios,cheerio:cheerio})})},"getPosts"),getSearchPosts=__name(function(_0){return __async(this,arguments,function*({searchQuery:searchQuery,page:page,signal:signal,providerContext:providerContext}){const{getBaseUrl:getBaseUrl,axios:axios,cheerio:cheerio,commonHeaders:commonHeaders}=providerContext,baseUrl=yield getBaseUrl("showbox");return posts({url:`${baseUrl}/search?keyword=${searchQuery}&page=${page}`,signal:signal,baseUrl:baseUrl,axios:axios,cheerio:cheerio,headers:commonHeaders})})},"getSearchPosts");function posts(_0){return __async(this,arguments,function*({url:url,signal:signal,axios:axios,cheerio:cheerio,headers:headers}){let lastError;for(let attempt=1;attempt<=3;attempt++)try{const data=(yield axios.get(url,{signal:signal,headers:headers})).data;console.log(data);const $=cheerio.load(data),catalog=[];return $(".movie-item,.flw-item").map((i,element)=>{const title=$(element).find(".film-name").text().trim(),link=$(element).find("a").attr("href"),image=$(element).find("img").attr("src");console.log(title,link,image),title&&link&&image&&catalog.push({title:title,link:link,image:image})}),catalog}catch(err){if(lastError=err,signal.aborted||3===attempt)throw err}throw lastError})}__name(posts,"posts"),exports.getPosts=getPosts,exports.getSearchPosts=getSearchPosts;
|
||||||
2
dist/showbox/stream.js
vendored
2
dist/showbox/stream.js
vendored
@@ -1 +1 @@
|
|||||||
"use strict";var __defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__hasOwnProp=Object.prototype.hasOwnProperty,__name=(target,value)=>__defProp(target,"name",{value:value,configurable:!0}),__export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&"object"==typeof from||"function"==typeof from)for(let key of __getOwnPropNames(from))__hasOwnProp.call(to,key)||key===except||__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to},__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod),__async=(__this,__arguments,generator)=>new Promise((resolve,reject)=>{var fulfilled=value=>{try{step(generator.next(value))}catch(e){reject(e)}},rejected=value=>{try{step(generator.throw(value))}catch(e){reject(e)}},step=x=>x.done?resolve(x.value):Promise.resolve(x.value).then(fulfilled,rejected);step((generator=generator.apply(__this,__arguments)).next())}),stream_exports={};__export(stream_exports,{getStream:()=>getStream});var getStream=__name(function(_0){return __async(this,arguments,function*({link:id,signal:signal,providerContext:providerContext}){try{const{axios:axios,cheerio:cheerio}=providerContext,stream=[],[,epId]=id.split("&"),url=`https://febbox.vercel.app/api/video-quality?fid=${epId}`,data=(yield axios.get(url,{signal:signal})).data,$=cheerio.load(data.html);return $(".file_quality").each((i,el)=>{const server=$(el).find("p.name").text()+" - "+$(el).find("p.size").text()+" - "+$(el).find("p.speed").text(),link=$(el).attr("data-url");link&&stream.push({server:server,type:"mkv",link:link})}),stream}catch(err){return[]}})},"getStream");exports.getStream=getStream;
|
"use strict";var __defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__hasOwnProp=Object.prototype.hasOwnProperty,__name=(target,value)=>__defProp(target,"name",{value:value,configurable:!0}),__export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&"object"==typeof from||"function"==typeof from)for(let key of __getOwnPropNames(from))__hasOwnProp.call(to,key)||key===except||__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to},__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod),__async=(__this,__arguments,generator)=>new Promise((resolve,reject)=>{var fulfilled=value=>{try{step(generator.next(value))}catch(e){reject(e)}},rejected=value=>{try{step(generator.throw(value))}catch(e){reject(e)}},step=x=>x.done?resolve(x.value):Promise.resolve(x.value).then(fulfilled,rejected);step((generator=generator.apply(__this,__arguments)).next())}),stream_exports={};__export(stream_exports,{getStream:()=>getStream});var getStream=__name(function(_0){return __async(this,arguments,function*({link:id,signal:signal,providerContext:providerContext}){try{const{axios:axios,cheerio:cheerio}=providerContext,stream=[],[,epId]=id.split("&"),url=`https://feb.8man.workers.dev/?fid=${epId}`,data=(yield axios.get(url,{signal:signal})).data,$=cheerio.load(data.html);return $(".file_quality").each((i,el)=>{const server=$(el).find("p.name").text()+" - "+$(el).find("p.size").text()+" - "+$(el).find("p.speed").text(),link=$(el).attr("data-url");link&&stream.push({server:server,type:"mkv",link:link})}),console.log(stream),stream}catch(err){return[]}})},"getStream");exports.getStream=getStream;
|
||||||
2
dist/skyMovieHD/stream.js
vendored
2
dist/skyMovieHD/stream.js
vendored
File diff suppressed because one or more lines are too long
2
dist/vega/catalog.js
vendored
2
dist/vega/catalog.js
vendored
@@ -1 +1 @@
|
|||||||
"use strict";var __defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__hasOwnProp=Object.prototype.hasOwnProperty,__export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&"object"==typeof from||"function"==typeof from)for(let key of __getOwnPropNames(from))__hasOwnProp.call(to,key)||key===except||__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to},__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod),catalog_exports={};__export(catalog_exports,{catalog:()=>catalog,genres:()=>genres});var catalog=[{title:"New",filter:""},{title:"Netflix",filter:"web-series/netflix"},{title:"Amazon Prime",filter:"web-series/amazon-prime-video"},{title:"4K Movies",filter:"movies-by-quality/2160p"}],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"}];exports.catalog=catalog,exports.genres=genres;
|
"use strict";var __defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__hasOwnProp=Object.prototype.hasOwnProperty,__export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&"object"==typeof from||"function"==typeof from)for(let key of __getOwnPropNames(from))__hasOwnProp.call(to,key)||key===except||__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to},__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod),catalog_exports={};__export(catalog_exports,{catalog:()=>catalog,genres:()=>genres});var 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:"movies-by-quality/2160p"}],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"}];exports.catalog=catalog,exports.genres=genres;
|
||||||
2
dist/vega/meta.js
vendored
2
dist/vega/meta.js
vendored
File diff suppressed because one or more lines are too long
2
dist/vega/posts.js
vendored
2
dist/vega/posts.js
vendored
File diff suppressed because one or more lines are too long
2
dist/vega/stream.js
vendored
2
dist/vega/stream.js
vendored
File diff suppressed because one or more lines are too long
2
dist/zeefliz/posts.js
vendored
2
dist/zeefliz/posts.js
vendored
@@ -1 +1 @@
|
|||||||
"use strict";var __defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__hasOwnProp=Object.prototype.hasOwnProperty,__name=(target,value)=>__defProp(target,"name",{value:value,configurable:!0}),__export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&"object"==typeof from||"function"==typeof from)for(let key of __getOwnPropNames(from))__hasOwnProp.call(to,key)||key===except||__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to},__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod),__async=(__this,__arguments,generator)=>new Promise((resolve,reject)=>{var fulfilled=value=>{try{step(generator.next(value))}catch(e){reject(e)}},rejected=value=>{try{step(generator.throw(value))}catch(e){reject(e)}},step=x=>x.done?resolve(x.value):Promise.resolve(x.value).then(fulfilled,rejected);step((generator=generator.apply(__this,__arguments)).next())}),posts_exports={};__export(posts_exports,{getPosts:()=>getPosts,getSearchPosts:()=>getSearchPosts});var defaultHeaders={Referer:"https://www.google.com","User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36",Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","Accept-Language":"en-US,en;q=0.9",Pragma:"no-cache","Cache-Control":"no-cache"};function getPosts(_0){return __async(this,arguments,function*({filter:filter,page:page=1,signal:signal,providerContext:providerContext}){return fetchPosts({filter:filter,page:page,query:"",signal:signal,providerContext:providerContext})})}function getSearchPosts(_0){return __async(this,arguments,function*({searchQuery:searchQuery,page:page=1,signal:signal,providerContext:providerContext}){return fetchPosts({filter:"",page:page,query:searchQuery,signal:signal,providerContext:providerContext})})}function fetchPosts(_0){return __async(this,arguments,function*({filter:filter,query:query,page:page=1,signal:signal,providerContext:providerContext}){try{const baseUrl=yield providerContext.getBaseUrl("zeefliz");let url;if(query&&query.trim()){const params=new URLSearchParams;params.append("s",query.trim()),page>1&¶ms.append("paged",page.toString()),url=`${baseUrl}/?${params.toString()}`}else url=filter?filter.startsWith("/")?`${baseUrl}${filter.replace(/\/$/,"")}${page>1?`/page/${page}`:""}`:`${baseUrl}/${filter}${page>1?`/page/${page}`:""}`:`${baseUrl}${page>1?`/page/${page}`:""}`;const{axios:axios,cheerio:cheerio}=providerContext,res=yield axios.get(url,{headers:defaultHeaders,signal:signal}),$=cheerio.load(res.data||""),resolveUrl=__name(href=>(null==href?void 0:href.startsWith("http"))?href:new URL(href,baseUrl).href,"resolveUrl"),seen=new Set,catalog=[];return $("section.site-main article.post").each((_,el)=>{var _a;const card=$(el);let link=card.find("a[href]").first().attr("href")||"";if(!link)return;if(link=resolveUrl(link),seen.has(link))return;let title=card.find("h3.entry-title a").text().trim()||card.find("a[rel='bookmark']").text().trim()||(null==(_a=card.find("a[title]").attr("title"))?void 0:_a.trim())||"";if(title=title.replace(/^Download\s*/i,"").trim(),!title)return;let img=card.find("img").attr("bv-data-src")||card.find("img").attr("src")||card.find("img").attr("data-src")||card.find("img").attr("data-original")||"";const image=img?resolveUrl(img):"";seen.add(link),catalog.push({title:title,link:link,image:image})}),catalog.slice(0,100)}catch(err){return console.error("fetchPosts error:",err instanceof Error?err.message:String(err)),[]}})}__name(getPosts,"getPosts"),__name(getSearchPosts,"getSearchPosts"),__name(fetchPosts,"fetchPosts"),exports.getPosts=getPosts,exports.getSearchPosts=getSearchPosts;
|
"use strict";var __defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__hasOwnProp=Object.prototype.hasOwnProperty,__name=(target,value)=>__defProp(target,"name",{value:value,configurable:!0}),__export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&"object"==typeof from||"function"==typeof from)for(let key of __getOwnPropNames(from))__hasOwnProp.call(to,key)||key===except||__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to},__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod),__async=(__this,__arguments,generator)=>new Promise((resolve,reject)=>{var fulfilled=value=>{try{step(generator.next(value))}catch(e){reject(e)}},rejected=value=>{try{step(generator.throw(value))}catch(e){reject(e)}},step=x=>x.done?resolve(x.value):Promise.resolve(x.value).then(fulfilled,rejected);step((generator=generator.apply(__this,__arguments)).next())}),posts_exports={};__export(posts_exports,{getPosts:()=>getPosts,getSearchPosts:()=>getSearchPosts});var defaultHeaders={Referer:"https://www.google.com","User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36",Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","Accept-Language":"en-US,en;q=0.9",Pragma:"no-cache","Cache-Control":"no-cache"};function getPosts(_0){return __async(this,arguments,function*({filter:filter,page:page=1,signal:signal,providerContext:providerContext}){return fetchPosts({filter:filter,page:page,query:"",signal:signal,providerContext:providerContext})})}function getSearchPosts(_0){return __async(this,arguments,function*({searchQuery:searchQuery,page:page=1,signal:signal,providerContext:providerContext}){return fetchPosts({filter:"",page:page,query:searchQuery,signal:signal,providerContext:providerContext})})}function fetchPosts(_0){return __async(this,arguments,function*({filter:filter,query:query,page:page=1,signal:signal,providerContext:providerContext}){try{const baseUrl=yield providerContext.getBaseUrl("zeefliz");let url;if(query&&query.trim()){const params=new URLSearchParams;params.append("s",query.trim()),page>1&¶ms.append("paged",page.toString()),url=`${baseUrl}/?${params.toString()}`}else url=filter?filter.startsWith("/")?`${baseUrl}${filter.replace(/\/$/,"")}${page>1?`/page/${page}`:""}`:`${baseUrl}/${filter}${page>1?`/page/${page}`:""}`:`${baseUrl}${page>1?`/page/${page}`:""}`;const{axios:axios,cheerio:cheerio}=providerContext,res=yield axios.get(url,{headers:defaultHeaders,signal:signal}),$=cheerio.load(res.data||""),resolveUrl=__name(href=>(null==href?void 0:href.startsWith("http"))?href:new URL(href,baseUrl).href,"resolveUrl"),seen=new Set,catalog=[];return $("section.site-main article.post").each((_,el)=>{var _a;const card=$(el);let link=card.find("a[href]").first().attr("href")||"";if(!link)return;if(link=resolveUrl(link),seen.has(link))return;let title=card.find("h3.entry-title a").text().trim()||card.find("a[rel='bookmark']").text().trim()||(null==(_a=card.find("a[title]").attr("title"))?void 0:_a.trim())||"";if(title=title.replace(/^Download\s*/i,"").trim(),!title)return;let img=card.find("img").attr("data-src")||card.find("img").attr("bv-data-src")||card.find("img").attr("src")||card.find("img").attr("data-original")||"";const image=img?resolveUrl(img):"";seen.add(link),catalog.push({title:title,link:link,image:image})}),catalog.slice(0,100)}catch(err){return console.error("fetchPosts error:",err instanceof Error?err.message:String(err)),[]}})}__name(getPosts,"getPosts"),__name(getSearchPosts,"getSearchPosts"),__name(fetchPosts,"fetchPosts"),exports.getPosts=getPosts,exports.getSearchPosts=getSearchPosts;
|
||||||
2
dist/zeefliz/stream.js
vendored
2
dist/zeefliz/stream.js
vendored
File diff suppressed because one or more lines are too long
@@ -2,7 +2,7 @@
|
|||||||
{
|
{
|
||||||
"display_name": "VegaMovies",
|
"display_name": "VegaMovies",
|
||||||
"value": "vega",
|
"value": "vega",
|
||||||
"version": "1.16",
|
"version": "2.5",
|
||||||
"icon": "",
|
"icon": "",
|
||||||
"type": "global",
|
"type": "global",
|
||||||
"disabled": false
|
"disabled": false
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
{
|
{
|
||||||
"display_name": "MoviesDrive",
|
"display_name": "MoviesDrive",
|
||||||
"value": "drive",
|
"value": "drive",
|
||||||
"version": "1.7",
|
"version": "1.8",
|
||||||
"icon": "",
|
"icon": "",
|
||||||
"type": "global",
|
"type": "global",
|
||||||
"disabled": false
|
"disabled": false
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
{
|
{
|
||||||
"display_name": "4khdHub",
|
"display_name": "4khdHub",
|
||||||
"value": "4khdhub",
|
"value": "4khdhub",
|
||||||
"version": "1.9",
|
"version": "2.0",
|
||||||
"icon": "",
|
"icon": "",
|
||||||
"type": "global",
|
"type": "global",
|
||||||
"disabled": false
|
"disabled": false
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
{
|
{
|
||||||
"display_name": "Cinewood",
|
"display_name": "Cinewood",
|
||||||
"value": "1cinevood",
|
"value": "1cinevood",
|
||||||
"version": "1.2",
|
"version": "1.3",
|
||||||
"icon": "",
|
"icon": "",
|
||||||
"type": "global",
|
"type": "global",
|
||||||
"disabled": false
|
"disabled": false
|
||||||
@@ -58,7 +58,7 @@
|
|||||||
{
|
{
|
||||||
"display_name": "KatMoviesHd",
|
"display_name": "KatMoviesHd",
|
||||||
"value": "katmovies",
|
"value": "katmovies",
|
||||||
"version": "1.4",
|
"version": "1.5",
|
||||||
"icon": "",
|
"icon": "",
|
||||||
"type": "global",
|
"type": "global",
|
||||||
"disabled": false
|
"disabled": false
|
||||||
@@ -90,7 +90,7 @@
|
|||||||
{
|
{
|
||||||
"display_name": "CinemaLuxe",
|
"display_name": "CinemaLuxe",
|
||||||
"value": "cinemaLuxe",
|
"value": "cinemaLuxe",
|
||||||
"version": "1.5",
|
"version": "1.6",
|
||||||
"icon": "",
|
"icon": "",
|
||||||
"type": "global",
|
"type": "global",
|
||||||
"disabled": true
|
"disabled": true
|
||||||
@@ -114,7 +114,7 @@
|
|||||||
{
|
{
|
||||||
"display_name": "Movies4U",
|
"display_name": "Movies4U",
|
||||||
"value": "movies4u",
|
"value": "movies4u",
|
||||||
"version": "1.2",
|
"version": "1.3",
|
||||||
"icon": "",
|
"icon": "",
|
||||||
"type": "global",
|
"type": "global",
|
||||||
"disabled": false
|
"disabled": false
|
||||||
@@ -130,7 +130,7 @@
|
|||||||
{
|
{
|
||||||
"display_name": "Zeefliz",
|
"display_name": "Zeefliz",
|
||||||
"value": "zeefliz",
|
"value": "zeefliz",
|
||||||
"version": "1.2",
|
"version": "1.4",
|
||||||
"icon": "",
|
"icon": "",
|
||||||
"type": "global",
|
"type": "global",
|
||||||
"disabled": false
|
"disabled": false
|
||||||
@@ -138,7 +138,7 @@
|
|||||||
{
|
{
|
||||||
"display_name": "KatMovieFix",
|
"display_name": "KatMovieFix",
|
||||||
"value": "katMovieFix",
|
"value": "katMovieFix",
|
||||||
"version": "1.4",
|
"version": "1.5",
|
||||||
"icon": "",
|
"icon": "",
|
||||||
"type": "global",
|
"type": "global",
|
||||||
"disabled": true
|
"disabled": true
|
||||||
@@ -170,7 +170,7 @@
|
|||||||
{
|
{
|
||||||
"display_name": "HdHub4u",
|
"display_name": "HdHub4u",
|
||||||
"value": "hdhub4u",
|
"value": "hdhub4u",
|
||||||
"version": "1.4",
|
"version": "1.7",
|
||||||
"icon": "",
|
"icon": "",
|
||||||
"type": "global",
|
"type": "global",
|
||||||
"disabled": false
|
"disabled": false
|
||||||
@@ -218,7 +218,7 @@
|
|||||||
{
|
{
|
||||||
"display_name": "ShowBox",
|
"display_name": "ShowBox",
|
||||||
"value": "showbox",
|
"value": "showbox",
|
||||||
"version": "1.1",
|
"version": "1.2",
|
||||||
"icon": "",
|
"icon": "",
|
||||||
"type": "english",
|
"type": "english",
|
||||||
"disabled": false
|
"disabled": false
|
||||||
@@ -253,7 +253,7 @@
|
|||||||
"version": "1.1",
|
"version": "1.1",
|
||||||
"icon": "",
|
"icon": "",
|
||||||
"type": "english",
|
"type": "english",
|
||||||
"disabled": false
|
"disabled": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"display_name": "Animetsu",
|
"display_name": "Animetsu",
|
||||||
@@ -261,7 +261,7 @@
|
|||||||
"version": "1.1",
|
"version": "1.1",
|
||||||
"icon": "",
|
"icon": "",
|
||||||
"type": "english",
|
"type": "english",
|
||||||
"disabled": false
|
"disabled": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"display_name": "TokyoInsider",
|
"display_name": "TokyoInsider",
|
||||||
@@ -290,7 +290,7 @@
|
|||||||
{
|
{
|
||||||
"display_name": "RogMovies",
|
"display_name": "RogMovies",
|
||||||
"value": "luxMovies",
|
"value": "luxMovies",
|
||||||
"version": "1.9",
|
"version": "2.2",
|
||||||
"icon": "",
|
"icon": "",
|
||||||
"type": "india",
|
"type": "india",
|
||||||
"disabled": false
|
"disabled": false
|
||||||
@@ -314,7 +314,7 @@
|
|||||||
{
|
{
|
||||||
"display_name": "SkyMovieHD",
|
"display_name": "SkyMovieHD",
|
||||||
"value": "skyMovieHD",
|
"value": "skyMovieHD",
|
||||||
"version": "1.4",
|
"version": "1.5",
|
||||||
"icon": "",
|
"icon": "",
|
||||||
"type": "global",
|
"type": "global",
|
||||||
"disabled": true
|
"disabled": true
|
||||||
@@ -322,7 +322,7 @@
|
|||||||
{
|
{
|
||||||
"display_name": "Joya9tv",
|
"display_name": "Joya9tv",
|
||||||
"value": "Joya9tv",
|
"value": "Joya9tv",
|
||||||
"version": "1.3",
|
"version": "1.4",
|
||||||
"icon": "",
|
"icon": "",
|
||||||
"type": "india",
|
"type": "india",
|
||||||
"disabled": false
|
"disabled": false
|
||||||
|
|||||||
@@ -36,7 +36,6 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"axios": "^1.10.0",
|
"axios": "^1.10.0",
|
||||||
"cheerio": "^1.1.0",
|
"cheerio": "^1.1.0",
|
||||||
"react-native-aes-crypto": "^3.2.1",
|
|
||||||
"rimraf": "^6.0.1",
|
"rimraf": "^6.0.1",
|
||||||
"zod": "^4.0.2"
|
"zod": "^4.0.2"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ export async function hubcloudExtractor(
|
|||||||
if (!link?.includes("api")) {
|
if (!link?.includes("api")) {
|
||||||
const token = link.split("/").pop();
|
const token = link.split("/").pop();
|
||||||
const baseUrl = link.split("/").slice(0, -2).join("/");
|
const baseUrl = link.split("/").slice(0, -2).join("/");
|
||||||
link = `${baseUrl}/api/file/${token}?download`;
|
link = `${baseUrl}/api/file/${token}`;
|
||||||
}
|
}
|
||||||
streamLinks.push({ server: "Pixeldrain", link: link, type: "mkv" });
|
streamLinks.push({ server: "Pixeldrain", link: link, type: "mkv" });
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ export async function getStream({
|
|||||||
const hubdriveText = hubdriveRes.data;
|
const hubdriveText = hubdriveRes.data;
|
||||||
const $$ = cheerio.load(hubdriveText);
|
const $$ = cheerio.load(hubdriveText);
|
||||||
hubdriveLink =
|
hubdriveLink =
|
||||||
$$(".btn.btn-primary.btn-user").attr("href") || hubdriveLink;
|
$$(".btn.btn-primary.btn-user.btn-success1").attr("href") || "";
|
||||||
}
|
}
|
||||||
console.log("hubdriveLink2", hubdriveLink);
|
console.log("hubdriveLink2", hubdriveLink);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,42 +40,103 @@ export const getMeta = async ({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
const $ = cheerio.load(response.data);
|
const $ = cheerio.load(response.data);
|
||||||
const infoContainer = $(".entry-content,.post-inner");
|
const infoContainer = $(
|
||||||
const heading = infoContainer?.find("h3");
|
".entry-content, .post-inner, .post-content, .page-body",
|
||||||
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
|
// title
|
||||||
|
let title = $("h1.post-title").text().trim();
|
||||||
|
if (!title) {
|
||||||
|
const heading = infoContainer?.find("h3");
|
||||||
const titleRegex = /Name: (.+)/;
|
const titleRegex = /Name: (.+)/;
|
||||||
const title = heading?.next("p")?.text()?.match(titleRegex)?.[1] || "";
|
title = heading?.next("p")?.text()?.match(titleRegex)?.[1] || "";
|
||||||
|
}
|
||||||
// console.log(title);
|
// console.log(title);
|
||||||
|
|
||||||
|
// imdbId
|
||||||
|
let imdbId =
|
||||||
|
$('a[href*="imdb.com"]').attr("href")?.match(/tt\d+/)?.[0] || "";
|
||||||
|
if (!imdbId) {
|
||||||
|
const heading = infoContainer?.find("h3");
|
||||||
|
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)
|
||||||
|
|
||||||
|
// type
|
||||||
|
let type = "movie";
|
||||||
|
|
||||||
|
const heading = infoContainer?.find("h3");
|
||||||
|
if (heading?.next("p")?.text()?.includes("Series Name")) {
|
||||||
|
type = "series";
|
||||||
|
}
|
||||||
|
|
||||||
|
// console.log(type);
|
||||||
|
|
||||||
// synopsis
|
// synopsis
|
||||||
|
let synopsis = "";
|
||||||
|
const synopsisHeader = $("h3").filter(
|
||||||
|
(i, el) =>
|
||||||
|
$(el).text().includes("SYNOPSIS/PLOT") || $(el).text().includes("Plot"),
|
||||||
|
);
|
||||||
|
if (synopsisHeader.length > 0) {
|
||||||
|
synopsis = synopsisHeader.next("p").text().trim();
|
||||||
|
}
|
||||||
|
if (!synopsis) {
|
||||||
const synopsisNode = //@ts-ignore
|
const synopsisNode = //@ts-ignore
|
||||||
infoContainer?.find("p")?.next("h3,h4")?.next("p")?.[0]?.children?.[0];
|
infoContainer?.find("p")?.next("h3,h4")?.next("p")?.[0]?.children?.[0];
|
||||||
const synopsis =
|
synopsis =
|
||||||
synopsisNode && "data" in synopsisNode ? synopsisNode.data : "";
|
synopsisNode && "data" in synopsisNode ? synopsisNode.data : "";
|
||||||
|
}
|
||||||
// console.log(synopsis);
|
// console.log(synopsis);
|
||||||
|
|
||||||
// image
|
// image
|
||||||
let image =
|
let image =
|
||||||
infoContainer?.find("img[data-lazy-src]")?.attr("data-lazy-src") || "";
|
infoContainer?.find("img[data-lazy-src]")?.attr("data-lazy-src") ||
|
||||||
|
infoContainer
|
||||||
|
?.find("img")
|
||||||
|
?.filter((i, el) => {
|
||||||
|
const src = $(el).attr("src");
|
||||||
|
return (
|
||||||
|
!!src &&
|
||||||
|
!src.includes("logo") &&
|
||||||
|
!src.includes("svg") &&
|
||||||
|
!src.includes("placeholder") &&
|
||||||
|
!src.includes("icon")
|
||||||
|
);
|
||||||
|
})
|
||||||
|
?.first()
|
||||||
|
?.attr("src") ||
|
||||||
|
"";
|
||||||
|
|
||||||
if (image.startsWith("//")) {
|
if (image.startsWith("//")) {
|
||||||
image = "https:" + image;
|
image = "https:" + image;
|
||||||
}
|
}
|
||||||
// console.log(image);
|
// console.log(image);
|
||||||
|
|
||||||
// console.log({title, synopsis, image, imdbId, type});
|
console.log({ title, synopsis, image, imdbId, type });
|
||||||
/// Links
|
/// Links
|
||||||
const hr = infoContainer?.first()?.find("hr");
|
let hr = infoContainer?.first()?.find("hr");
|
||||||
|
|
||||||
|
// Try to find the HR before the download buttons if possible
|
||||||
|
const firstButton = $(".dwd-button").first();
|
||||||
|
if (firstButton.length > 0) {
|
||||||
|
const containerP = firstButton.closest("p");
|
||||||
|
let prev = containerP.prev();
|
||||||
|
while (prev.length && !prev.is("hr")) {
|
||||||
|
prev = prev.prev();
|
||||||
|
}
|
||||||
|
if (prev.is("hr")) {
|
||||||
|
hr = prev;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const list = hr?.nextUntil("hr");
|
const list = hr?.nextUntil("hr");
|
||||||
const links: Link[] = [];
|
const links: Link[] = [];
|
||||||
list.each((index, element: any) => {
|
list.each((index, element: any) => {
|
||||||
@@ -86,24 +147,26 @@ export const getMeta = async ({
|
|||||||
const quality = element?.text().match(/\d+p\b/)?.[0] || "";
|
const quality = element?.text().match(/\d+p\b/)?.[0] || "";
|
||||||
// console.log(title);
|
// console.log(title);
|
||||||
// movieLinks
|
// movieLinks
|
||||||
const movieLinks = element
|
const movieLinks =
|
||||||
|
element
|
||||||
?.next()
|
?.next()
|
||||||
.find(".dwd-button")
|
.find(".dwd-button")
|
||||||
.text()
|
.text()
|
||||||
.toLowerCase()
|
.toLowerCase()
|
||||||
.includes("download")
|
.includes("download") ||
|
||||||
? element?.next().find(".dwd-button")?.parent()?.attr("href")
|
element.next().find("a").text().toLowerCase().includes("download")
|
||||||
|
? element?.next().find(".dwd-button")?.parent()?.attr("href") ||
|
||||||
|
element?.next().find("a[href]")?.attr("href")
|
||||||
: "";
|
: "";
|
||||||
|
|
||||||
// episode links
|
// episode links
|
||||||
const vcloudLinks = element
|
const vcloudLinks = element
|
||||||
?.next()
|
?.next()
|
||||||
.find(
|
.find(
|
||||||
".btn-outline[style='background:linear-gradient(135deg,#ed0b0b,#f2d152); color: white;'],.btn-outline[style='background:linear-gradient(135deg,#ed0b0b,#f2d152); color: #fdf8f2;']"
|
".btn-outline[style='background:linear-gradient(135deg,#ed0b0b,#f2d152); color: white;'],.btn-outline[style='background:linear-gradient(135deg,#ed0b0b,#f2d152); color: #fdf8f2;'],.btn-outline[style='background:linear-gradient(135deg,#ed0b0b,#f2d152);color: white']",
|
||||||
)
|
)
|
||||||
?.parent()
|
?.parent()
|
||||||
?.attr("href");
|
?.attr("href");
|
||||||
console.log(title);
|
|
||||||
const episodesLink =
|
const episodesLink =
|
||||||
(vcloudLinks
|
(vcloudLinks
|
||||||
? vcloudLinks
|
? vcloudLinks
|
||||||
@@ -118,7 +181,7 @@ export const getMeta = async ({
|
|||||||
element
|
element
|
||||||
?.next()
|
?.next()
|
||||||
.find(
|
.find(
|
||||||
".btn-outline[style='background:linear-gradient(135deg,#0ebac3,#09d261); color: white;']"
|
".btn-outline[style='background:linear-gradient(135deg,#0ebac3,#09d261); color: white;']",
|
||||||
)
|
)
|
||||||
?.parent()
|
?.parent()
|
||||||
?.attr("href");
|
?.attr("href");
|
||||||
|
|||||||
@@ -34,13 +34,13 @@ export const getPosts = async ({
|
|||||||
signal: AbortSignal;
|
signal: AbortSignal;
|
||||||
providerContext: ProviderContext;
|
providerContext: ProviderContext;
|
||||||
}): Promise<Post[]> => {
|
}): Promise<Post[]> => {
|
||||||
const { getBaseUrl } = providerContext;
|
const { getBaseUrl, axios, cheerio } = providerContext;
|
||||||
const baseUrl = await getBaseUrl("lux");
|
const baseUrl = await getBaseUrl("lux");
|
||||||
|
|
||||||
console.log("vegaGetPosts baseUrl:", providerValue, baseUrl);
|
console.log("vegaGetPosts baseUrl:", providerValue, baseUrl);
|
||||||
const url = `${baseUrl}/${filter}/page/${page}/`;
|
const url = `${baseUrl}/${filter}/page/${page}/`;
|
||||||
console.log("lux url:", url);
|
console.log("vegaGetPosts url:", url);
|
||||||
return posts(url, signal, providerContext);
|
return posts(baseUrl, url, signal, headers, axios, cheerio);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getSearchPosts = async ({
|
export const getSearchPosts = async ({
|
||||||
@@ -56,58 +56,97 @@ export const getSearchPosts = async ({
|
|||||||
signal: AbortSignal;
|
signal: AbortSignal;
|
||||||
providerContext: ProviderContext;
|
providerContext: ProviderContext;
|
||||||
}): Promise<Post[]> => {
|
}): Promise<Post[]> => {
|
||||||
const { getBaseUrl } = providerContext;
|
const { getBaseUrl, axios, cheerio } = providerContext;
|
||||||
const baseUrl = await getBaseUrl("lux");
|
const baseUrl = await getBaseUrl("Vega");
|
||||||
|
|
||||||
console.log("vegaGetPosts baseUrl:", providerValue, baseUrl);
|
console.log("vegaGetPosts baseUrl:", providerValue, baseUrl);
|
||||||
const url =
|
const url = `${baseUrl}/search.php?q=${searchQuery}&page=${page}`;
|
||||||
page === 1
|
console.log("vegaGetPosts url:", url);
|
||||||
? `https://c.8man.workers.dev/?url=${baseUrl}/?s=${searchQuery}`
|
|
||||||
: `https://c.8man.workers.dev/?url=${baseUrl}/page/${page}/?s=${searchQuery}`;
|
|
||||||
console.log("lux url:", url);
|
|
||||||
|
|
||||||
return posts(url, signal, providerContext);
|
try {
|
||||||
|
const response = await axios.get(url, {
|
||||||
|
headers: {
|
||||||
|
...headers,
|
||||||
|
Referer: baseUrl,
|
||||||
|
},
|
||||||
|
signal,
|
||||||
|
});
|
||||||
|
|
||||||
|
const data = response.data;
|
||||||
|
const posts: Post[] = [];
|
||||||
|
|
||||||
|
if (data?.hits) {
|
||||||
|
data.hits.forEach((hit: any) => {
|
||||||
|
const doc = hit.document;
|
||||||
|
const post = {
|
||||||
|
title: doc.post_title.replace("Download", "").trim(),
|
||||||
|
link: doc.permalink.startsWith("http")
|
||||||
|
? doc.permalink
|
||||||
|
: `${baseUrl}${doc.permalink}`,
|
||||||
|
image: doc.post_thumbnail,
|
||||||
|
};
|
||||||
|
posts.push(post);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return posts;
|
||||||
|
} catch (error) {
|
||||||
|
console.error("vegaGetSearchPosts error:", error);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
async function posts(
|
async function posts(
|
||||||
|
baseUrl: string,
|
||||||
url: string,
|
url: string,
|
||||||
signal: AbortSignal,
|
signal: AbortSignal,
|
||||||
providerContext: ProviderContext
|
headers: Record<string, string> = {},
|
||||||
|
axios: ProviderContext["axios"],
|
||||||
|
cheerio: ProviderContext["cheerio"],
|
||||||
): Promise<Post[]> {
|
): Promise<Post[]> {
|
||||||
try {
|
try {
|
||||||
const { axios, cheerio } = providerContext;
|
|
||||||
const urlRes = await fetch(url, {
|
const urlRes = await fetch(url, {
|
||||||
headers: {
|
headers: {
|
||||||
...headers,
|
...headers,
|
||||||
Referer: url,
|
Referer: baseUrl,
|
||||||
},
|
},
|
||||||
signal,
|
signal,
|
||||||
});
|
});
|
||||||
const $ = cheerio.load(await urlRes.text());
|
const $ = cheerio.load(await urlRes.text());
|
||||||
const posts: Post[] = [];
|
const posts: Post[] = [];
|
||||||
$(".blog-items")
|
$(".blog-items,.post-list,#archive-container,.movies-grid")
|
||||||
?.children("article")
|
?.children("article,.entry-list-item,a")
|
||||||
?.each((index, element) => {
|
?.each((index, element) => {
|
||||||
const post = {
|
const post = {
|
||||||
title:
|
title: (
|
||||||
$(element)
|
$(element)
|
||||||
?.find("a")
|
?.find(".entry-title,.poster-title")
|
||||||
?.attr("title")
|
?.text()
|
||||||
?.replace("Download", "")
|
?.replace("Download", "")
|
||||||
?.match(/^(.*?)\s*\((\d{4})\)|^(.*?)\s*\((Season \d+)\)/)?.[0] ||
|
?.match(/^(.*?)\s*\((\d{4})\)|^(.*?)\s*\((Season \d+)\)/)?.[0] ||
|
||||||
$(element)?.find("a")?.attr("title")?.replace("Download", "") ||
|
$(element)?.find("a")?.attr("title")?.replace("Download", "") ||
|
||||||
"",
|
$(element)
|
||||||
|
?.find(".post-title,.poster-title")
|
||||||
|
.text()
|
||||||
|
?.replace("Download", "") ||
|
||||||
|
""
|
||||||
|
).trim(),
|
||||||
|
|
||||||
link: $(element)?.find("a")?.attr("href") || "",
|
link:
|
||||||
|
$(element)?.find("a")?.attr("href") ||
|
||||||
|
$(element)?.attr("href") ||
|
||||||
|
"",
|
||||||
image:
|
image:
|
||||||
$(element).find("a").find("img").attr("data-lazy-src") ||
|
$(element).find("a").find("img").attr("data-lazy-src") ||
|
||||||
$(element).find("a").find("img").attr("data-src") ||
|
$(element).find("a").find("img").attr("data-src") ||
|
||||||
$(element).find("a").find("img").attr("src") ||
|
$(element).find("a").find("img").attr("src") ||
|
||||||
|
$(element).find("img").attr("data-src") ||
|
||||||
|
$(element).find("img").attr("src") ||
|
||||||
"",
|
"",
|
||||||
};
|
};
|
||||||
if (post.image.startsWith("//")) {
|
if (post.image.startsWith("//")) {
|
||||||
post.image = "https:" + post.image;
|
post.image = "https:" + post.image;
|
||||||
}
|
}
|
||||||
|
console.log("vegaGetPosts post:", post);
|
||||||
posts.push(post);
|
posts.push(post);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -3,12 +3,11 @@ import { getBaseUrl } from "./getBaseUrl";
|
|||||||
import { headers } from "./headers";
|
import { headers } from "./headers";
|
||||||
import * as cheerio from "cheerio";
|
import * as cheerio from "cheerio";
|
||||||
import { ProviderContext } from "./types";
|
import { ProviderContext } from "./types";
|
||||||
import Aes from "react-native-aes-crypto";
|
|
||||||
|
|
||||||
export const providerContext: ProviderContext = {
|
export const providerContext: ProviderContext = {
|
||||||
axios,
|
axios,
|
||||||
getBaseUrl,
|
getBaseUrl,
|
||||||
|
Aes: null,
|
||||||
commonHeaders: headers,
|
commonHeaders: headers,
|
||||||
Aes,
|
|
||||||
cheerio,
|
cheerio,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -32,10 +32,17 @@ export const getSearchPosts = async function ({
|
|||||||
signal: AbortSignal;
|
signal: AbortSignal;
|
||||||
providerContext: ProviderContext;
|
providerContext: ProviderContext;
|
||||||
}): Promise<Post[]> {
|
}): Promise<Post[]> {
|
||||||
const { getBaseUrl, axios, cheerio } = providerContext;
|
const { getBaseUrl, axios, cheerio, commonHeaders } = providerContext;
|
||||||
const baseUrl = await getBaseUrl("showbox");
|
const baseUrl = await getBaseUrl("showbox");
|
||||||
const url = `${baseUrl}/search?keyword=${searchQuery}&page=${page}`;
|
const url = `${baseUrl}/search?keyword=${searchQuery}&page=${page}`;
|
||||||
return posts({ url, signal, baseUrl, axios, cheerio });
|
return posts({
|
||||||
|
url,
|
||||||
|
signal,
|
||||||
|
baseUrl,
|
||||||
|
axios,
|
||||||
|
cheerio,
|
||||||
|
headers: commonHeaders,
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
async function posts({
|
async function posts({
|
||||||
@@ -44,22 +51,30 @@ async function posts({
|
|||||||
// baseUrl,
|
// baseUrl,
|
||||||
axios,
|
axios,
|
||||||
cheerio,
|
cheerio,
|
||||||
|
headers,
|
||||||
}: {
|
}: {
|
||||||
url: string;
|
url: string;
|
||||||
signal: AbortSignal;
|
signal: AbortSignal;
|
||||||
baseUrl: string;
|
baseUrl: string;
|
||||||
axios: ProviderContext["axios"];
|
axios: ProviderContext["axios"];
|
||||||
cheerio: ProviderContext["cheerio"];
|
cheerio: ProviderContext["cheerio"];
|
||||||
|
headers?: Record<string, string>;
|
||||||
}): Promise<Post[]> {
|
}): Promise<Post[]> {
|
||||||
|
const maxRetries = 3;
|
||||||
|
let lastError: unknown;
|
||||||
|
|
||||||
|
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
||||||
try {
|
try {
|
||||||
const res = await axios.get(url, { signal });
|
const res = await axios.get(url, { signal, headers: headers });
|
||||||
const data = res.data;
|
const data = res.data;
|
||||||
|
console.log(data);
|
||||||
const $ = cheerio.load(data);
|
const $ = cheerio.load(data);
|
||||||
const catalog: Post[] = [];
|
const catalog: Post[] = [];
|
||||||
$(".movie-item,.flw-item").map((i, element) => {
|
$(".movie-item,.flw-item").map((i, element) => {
|
||||||
const title = $(element).find(".film-name").text().trim();
|
const title = $(element).find(".film-name").text().trim();
|
||||||
const link = $(element).find("a").attr("href");
|
const link = $(element).find("a").attr("href");
|
||||||
const image = $(element).find("img").attr("src");
|
const image = $(element).find("img").attr("src");
|
||||||
|
console.log(title, link, image);
|
||||||
if (title && link && image) {
|
if (title && link && image) {
|
||||||
catalog.push({
|
catalog.push({
|
||||||
title: title,
|
title: title,
|
||||||
@@ -70,6 +85,12 @@ async function posts({
|
|||||||
});
|
});
|
||||||
return catalog;
|
return catalog;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
return [];
|
lastError = err;
|
||||||
|
if (signal.aborted || attempt === maxRetries) {
|
||||||
|
throw err;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
throw lastError;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ export const getStream = async function ({
|
|||||||
const { axios, cheerio } = providerContext;
|
const { axios, cheerio } = providerContext;
|
||||||
const stream: Stream[] = [];
|
const stream: Stream[] = [];
|
||||||
const [, epId] = id.split("&");
|
const [, epId] = id.split("&");
|
||||||
const url = `https://febbox.vercel.app/api/video-quality?fid=${epId}`;
|
const url = `https://feb.8man.workers.dev/?fid=${epId}`;
|
||||||
const res = await axios.get(url, { signal });
|
const res = await axios.get(url, { signal });
|
||||||
const data = res.data;
|
const data = res.data;
|
||||||
const $ = cheerio.load(data.html);
|
const $ = cheerio.load(data.html);
|
||||||
@@ -35,6 +35,7 @@ export const getStream = async function ({
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
console.log(stream);
|
||||||
return stream;
|
return stream;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
return [];
|
return [];
|
||||||
|
|||||||
@@ -5,11 +5,11 @@ export const catalog = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Netflix",
|
title: "Netflix",
|
||||||
filter: "web-series/netflix",
|
filter: "category/web-series/netflix",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Amazon Prime",
|
title: "Amazon Prime",
|
||||||
filter: "web-series/amazon-prime-video",
|
filter: "category/web-series/amazon-prime-video",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "4K Movies",
|
title: "4K Movies",
|
||||||
|
|||||||
@@ -40,34 +40,81 @@ export const getMeta = async ({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
const $ = cheerio.load(response.data);
|
const $ = cheerio.load(response.data);
|
||||||
const infoContainer = $(".entry-content,.post-inner");
|
const infoContainer = $(
|
||||||
const heading = infoContainer?.find("h3");
|
".entry-content, .post-inner, .post-content, .page-body",
|
||||||
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
|
// title
|
||||||
|
let title = $("h1.post-title").text().trim();
|
||||||
|
if (!title) {
|
||||||
|
const heading = infoContainer?.find("h3");
|
||||||
const titleRegex = /Name: (.+)/;
|
const titleRegex = /Name: (.+)/;
|
||||||
const title = heading?.next("p")?.text()?.match(titleRegex)?.[1] || "";
|
title = heading?.next("p")?.text()?.match(titleRegex)?.[1] || "";
|
||||||
|
}
|
||||||
// console.log(title);
|
// console.log(title);
|
||||||
|
|
||||||
|
// imdbId
|
||||||
|
let imdbId =
|
||||||
|
$('a[href*="imdb.com"]').attr("href")?.match(/tt\d+/)?.[0] || "";
|
||||||
|
if (!imdbId) {
|
||||||
|
const heading = infoContainer?.find("h3");
|
||||||
|
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)
|
||||||
|
|
||||||
|
// type
|
||||||
|
let type = "movie";
|
||||||
|
|
||||||
|
const heading = infoContainer?.find("h3");
|
||||||
|
if (heading?.next("p")?.text()?.includes("Series Name")) {
|
||||||
|
type = "series";
|
||||||
|
}
|
||||||
|
|
||||||
|
// console.log(type);
|
||||||
|
|
||||||
// synopsis
|
// synopsis
|
||||||
|
let synopsis = "";
|
||||||
|
const synopsisHeader = $("h3").filter(
|
||||||
|
(i, el) =>
|
||||||
|
$(el).text().includes("SYNOPSIS/PLOT") || $(el).text().includes("Plot"),
|
||||||
|
);
|
||||||
|
if (synopsisHeader.length > 0) {
|
||||||
|
synopsis = synopsisHeader.next("p").text().trim();
|
||||||
|
}
|
||||||
|
if (!synopsis) {
|
||||||
const synopsisNode = //@ts-ignore
|
const synopsisNode = //@ts-ignore
|
||||||
infoContainer?.find("p")?.next("h3,h4")?.next("p")?.[0]?.children?.[0];
|
infoContainer?.find("p")?.next("h3,h4")?.next("p")?.[0]?.children?.[0];
|
||||||
const synopsis =
|
synopsis =
|
||||||
synopsisNode && "data" in synopsisNode ? synopsisNode.data : "";
|
synopsisNode && "data" in synopsisNode ? synopsisNode.data : "";
|
||||||
|
}
|
||||||
// console.log(synopsis);
|
// console.log(synopsis);
|
||||||
|
|
||||||
// image
|
// image
|
||||||
let image =
|
let image =
|
||||||
infoContainer?.find("img[data-lazy-src]")?.attr("data-lazy-src") || "";
|
infoContainer?.find("img[data-lazy-src]")?.attr("data-lazy-src") ||
|
||||||
|
infoContainer
|
||||||
|
?.find("img")
|
||||||
|
?.filter((i, el) => {
|
||||||
|
const src = $(el).attr("src");
|
||||||
|
return (
|
||||||
|
!!src &&
|
||||||
|
!src.includes("logo") &&
|
||||||
|
!src.includes("svg") &&
|
||||||
|
!src.includes("placeholder") &&
|
||||||
|
!src.includes("icon")
|
||||||
|
);
|
||||||
|
})
|
||||||
|
?.first()
|
||||||
|
?.attr("src") ||
|
||||||
|
"";
|
||||||
|
|
||||||
if (image.startsWith("//")) {
|
if (image.startsWith("//")) {
|
||||||
image = "https:" + image;
|
image = "https:" + image;
|
||||||
}
|
}
|
||||||
@@ -75,7 +122,21 @@ export const getMeta = async ({
|
|||||||
|
|
||||||
console.log({ title, synopsis, image, imdbId, type });
|
console.log({ title, synopsis, image, imdbId, type });
|
||||||
/// Links
|
/// Links
|
||||||
const hr = infoContainer?.first()?.find("hr");
|
let hr = infoContainer?.first()?.find("hr");
|
||||||
|
|
||||||
|
// Try to find the HR before the download buttons if possible
|
||||||
|
const firstButton = $(".dwd-button").first();
|
||||||
|
if (firstButton.length > 0) {
|
||||||
|
const containerP = firstButton.closest("p");
|
||||||
|
let prev = containerP.prev();
|
||||||
|
while (prev.length && !prev.is("hr")) {
|
||||||
|
prev = prev.prev();
|
||||||
|
}
|
||||||
|
if (prev.is("hr")) {
|
||||||
|
hr = prev;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const list = hr?.nextUntil("hr");
|
const list = hr?.nextUntil("hr");
|
||||||
const links: Link[] = [];
|
const links: Link[] = [];
|
||||||
list.each((index, element: any) => {
|
list.each((index, element: any) => {
|
||||||
@@ -86,20 +147,23 @@ export const getMeta = async ({
|
|||||||
const quality = element?.text().match(/\d+p\b/)?.[0] || "";
|
const quality = element?.text().match(/\d+p\b/)?.[0] || "";
|
||||||
// console.log(title);
|
// console.log(title);
|
||||||
// movieLinks
|
// movieLinks
|
||||||
const movieLinks = element
|
const movieLinks =
|
||||||
|
element
|
||||||
?.next()
|
?.next()
|
||||||
.find(".dwd-button")
|
.find(".dwd-button")
|
||||||
.text()
|
.text()
|
||||||
.toLowerCase()
|
.toLowerCase()
|
||||||
.includes("download")
|
.includes("download") ||
|
||||||
? element?.next().find(".dwd-button")?.parent()?.attr("href")
|
element.next().find("a").text().toLowerCase().includes("download")
|
||||||
|
? element?.next().find(".dwd-button")?.parent()?.attr("href") ||
|
||||||
|
element?.next().find("a[href]")?.attr("href")
|
||||||
: "";
|
: "";
|
||||||
|
|
||||||
// episode links
|
// episode links
|
||||||
const vcloudLinks = element
|
const vcloudLinks = element
|
||||||
?.next()
|
?.next()
|
||||||
.find(
|
.find(
|
||||||
".btn-outline[style='background:linear-gradient(135deg,#ed0b0b,#f2d152); color: white;'],.btn-outline[style='background:linear-gradient(135deg,#ed0b0b,#f2d152); color: #fdf8f2;'],.btn-outline[style='background:linear-gradient(135deg,#ed0b0b,#f2d152);color: white']"
|
".btn-outline[style='background:linear-gradient(135deg,#ed0b0b,#f2d152); color: white;'],.btn-outline[style='background:linear-gradient(135deg,#ed0b0b,#f2d152); color: #fdf8f2;'],.btn-outline[style='background:linear-gradient(135deg,#ed0b0b,#f2d152);color: white']",
|
||||||
)
|
)
|
||||||
?.parent()
|
?.parent()
|
||||||
?.attr("href");
|
?.attr("href");
|
||||||
@@ -117,7 +181,7 @@ export const getMeta = async ({
|
|||||||
element
|
element
|
||||||
?.next()
|
?.next()
|
||||||
.find(
|
.find(
|
||||||
".btn-outline[style='background:linear-gradient(135deg,#0ebac3,#09d261); color: white;']"
|
".btn-outline[style='background:linear-gradient(135deg,#0ebac3,#09d261); color: white;']",
|
||||||
)
|
)
|
||||||
?.parent()
|
?.parent()
|
||||||
?.attr("href");
|
?.attr("href");
|
||||||
|
|||||||
@@ -38,7 +38,9 @@ export const getPosts = async ({
|
|||||||
const baseUrl = await getBaseUrl("Vega");
|
const baseUrl = await getBaseUrl("Vega");
|
||||||
|
|
||||||
console.log("vegaGetPosts baseUrl:", providerValue, baseUrl);
|
console.log("vegaGetPosts baseUrl:", providerValue, baseUrl);
|
||||||
const url = `${baseUrl}/${filter}/page/${page}/`;
|
const url = filter
|
||||||
|
? `${baseUrl}/genre/${filter}/page/${page}/`
|
||||||
|
: `${baseUrl}/page/${page}/`;
|
||||||
console.log("vegaGetPosts url:", url);
|
console.log("vegaGetPosts url:", url);
|
||||||
return posts(baseUrl, url, signal, headers, axios, cheerio);
|
return posts(baseUrl, url, signal, headers, axios, cheerio);
|
||||||
};
|
};
|
||||||
@@ -60,10 +62,39 @@ export const getSearchPosts = async ({
|
|||||||
const baseUrl = await getBaseUrl("Vega");
|
const baseUrl = await getBaseUrl("Vega");
|
||||||
|
|
||||||
console.log("vegaGetPosts baseUrl:", providerValue, baseUrl);
|
console.log("vegaGetPosts baseUrl:", providerValue, baseUrl);
|
||||||
const url = `${baseUrl}/page/${page}/?s=${searchQuery}`;
|
const url = `${baseUrl}/search.php?q=${searchQuery}&page=${page}`;
|
||||||
console.log("vegaGetPosts url:", url);
|
console.log("vegaGetPosts url:", url);
|
||||||
|
|
||||||
return posts(baseUrl, url, signal, headers, axios, cheerio);
|
try {
|
||||||
|
const response = await axios.get(url, {
|
||||||
|
headers: {
|
||||||
|
...headers,
|
||||||
|
Referer: baseUrl,
|
||||||
|
},
|
||||||
|
signal,
|
||||||
|
});
|
||||||
|
|
||||||
|
const data = response.data;
|
||||||
|
const posts: Post[] = [];
|
||||||
|
|
||||||
|
if (data?.hits) {
|
||||||
|
data.hits.forEach((hit: any) => {
|
||||||
|
const doc = hit.document;
|
||||||
|
const post = {
|
||||||
|
title: doc.post_title.replace("Download", "").trim(),
|
||||||
|
link: doc.permalink.startsWith("http")
|
||||||
|
? doc.permalink
|
||||||
|
: `${baseUrl}${doc.permalink}`,
|
||||||
|
image: doc.post_thumbnail,
|
||||||
|
};
|
||||||
|
posts.push(post);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return posts;
|
||||||
|
} catch (error) {
|
||||||
|
console.error("vegaGetSearchPosts error:", error);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
async function posts(
|
async function posts(
|
||||||
@@ -72,7 +103,7 @@ async function posts(
|
|||||||
signal: AbortSignal,
|
signal: AbortSignal,
|
||||||
headers: Record<string, string> = {},
|
headers: Record<string, string> = {},
|
||||||
axios: ProviderContext["axios"],
|
axios: ProviderContext["axios"],
|
||||||
cheerio: ProviderContext["cheerio"]
|
cheerio: ProviderContext["cheerio"],
|
||||||
): Promise<Post[]> {
|
): Promise<Post[]> {
|
||||||
try {
|
try {
|
||||||
const urlRes = await fetch(url, {
|
const urlRes = await fetch(url, {
|
||||||
@@ -84,31 +115,40 @@ async function posts(
|
|||||||
});
|
});
|
||||||
const $ = cheerio.load(await urlRes.text());
|
const $ = cheerio.load(await urlRes.text());
|
||||||
const posts: Post[] = [];
|
const posts: Post[] = [];
|
||||||
$(".blog-items,.post-list,#archive-container")
|
$(".blog-items,.post-list,#archive-container,.movies-grid")
|
||||||
?.children("article,.entry-list-item")
|
?.children("article,.entry-list-item,a")
|
||||||
?.each((index, element) => {
|
?.each((index, element) => {
|
||||||
const post = {
|
const post = {
|
||||||
title: (
|
title: (
|
||||||
$(element)
|
$(element)
|
||||||
?.find(".entry-title")
|
?.find(".entry-title,.poster-title")
|
||||||
?.text()
|
?.text()
|
||||||
?.replace("Download", "")
|
?.replace("Download", "")
|
||||||
?.match(/^(.*?)\s*\((\d{4})\)|^(.*?)\s*\((Season \d+)\)/)?.[0] ||
|
?.match(/^(.*?)\s*\((\d{4})\)|^(.*?)\s*\((Season \d+)\)/)?.[0] ||
|
||||||
$(element)?.find("a")?.attr("title")?.replace("Download", "") ||
|
$(element)?.find("a")?.attr("title")?.replace("Download", "") ||
|
||||||
$(element)?.find(".post-title").text()?.replace("Download", "") ||
|
$(element)
|
||||||
|
?.find(".post-title,.poster-title")
|
||||||
|
.text()
|
||||||
|
?.replace("Download", "") ||
|
||||||
""
|
""
|
||||||
).trim(),
|
).trim(),
|
||||||
|
|
||||||
link: $(element)?.find("a")?.attr("href") || "",
|
link:
|
||||||
|
$(element)?.find("a")?.attr("href") ||
|
||||||
|
$(element)?.attr("href") ||
|
||||||
|
"",
|
||||||
image:
|
image:
|
||||||
$(element).find("a").find("img").attr("data-lazy-src") ||
|
$(element).find("a").find("img").attr("data-lazy-src") ||
|
||||||
$(element).find("a").find("img").attr("data-src") ||
|
$(element).find("a").find("img").attr("data-src") ||
|
||||||
$(element).find("a").find("img").attr("src") ||
|
$(element).find("a").find("img").attr("src") ||
|
||||||
|
$(element).find("img").attr("data-src") ||
|
||||||
|
$(element).find("img").attr("src") ||
|
||||||
"",
|
"",
|
||||||
};
|
};
|
||||||
if (post.image.startsWith("//")) {
|
if (post.image.startsWith("//")) {
|
||||||
post.image = "https:" + post.image;
|
post.image = "https:" + post.image;
|
||||||
}
|
}
|
||||||
|
console.log("vegaGetPosts post:", post);
|
||||||
posts.push(post);
|
posts.push(post);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -113,9 +113,9 @@ async function fetchPosts({
|
|||||||
|
|
||||||
// Image
|
// Image
|
||||||
let img =
|
let img =
|
||||||
|
card.find("img").attr("data-src") ||
|
||||||
card.find("img").attr("bv-data-src") ||
|
card.find("img").attr("bv-data-src") ||
|
||||||
card.find("img").attr("src") ||
|
card.find("img").attr("src") ||
|
||||||
card.find("img").attr("data-src") ||
|
|
||||||
card.find("img").attr("data-original") ||
|
card.find("img").attr("data-original") ||
|
||||||
"";
|
"";
|
||||||
const image = img ? resolveUrl(img) : "";
|
const image = img ? resolveUrl(img) : "";
|
||||||
@@ -128,7 +128,7 @@ async function fetchPosts({
|
|||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(
|
console.error(
|
||||||
"fetchPosts error:",
|
"fetchPosts error:",
|
||||||
err instanceof Error ? err.message : String(err)
|
err instanceof Error ? err.message : String(err),
|
||||||
);
|
);
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,10 +3,6 @@ const cheerio = require("cheerio");
|
|||||||
const axios = require("axios");
|
const axios = require("axios");
|
||||||
const { z } = require("zod");
|
const { z } = require("zod");
|
||||||
const { getBaseUrl } = require("./dist/getBaseUrl.js");
|
const { getBaseUrl } = require("./dist/getBaseUrl.js");
|
||||||
const { hubcloudExtracter } = require("./dist/hubcloudExtractor.js");
|
|
||||||
const { gofileExtracter } = require("./dist/gofileExtracter.js");
|
|
||||||
const { superVideoExtractor } = require("./dist/superVideoExtractor.js");
|
|
||||||
const { gdFlixExtracter } = require("./dist/gdFlixExtractor.js");
|
|
||||||
|
|
||||||
// Create readline interface
|
// Create readline interface
|
||||||
const rl = readline.createInterface({
|
const rl = readline.createInterface({
|
||||||
@@ -32,13 +28,7 @@ const providerContext = {
|
|||||||
"User-Agent":
|
"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",
|
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
|
||||||
},
|
},
|
||||||
extractors: {
|
Aes: {},
|
||||||
hubcloudExtracter: hubcloudExtracter,
|
|
||||||
gofileExtracter: gofileExtracter,
|
|
||||||
superVideoExtractor: superVideoExtractor,
|
|
||||||
gdFlixExtracter: gdFlixExtracter,
|
|
||||||
},
|
|
||||||
Crypto: {},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Function parameter definitions based on README and types
|
// Function parameter definitions based on README and types
|
||||||
@@ -159,7 +149,7 @@ async function getParameters(functionName, providerName) {
|
|||||||
const sampleValue = sampleValues[functionName]?.[paramName] || "";
|
const sampleValue = sampleValues[functionName]?.[paramName] || "";
|
||||||
|
|
||||||
let value = await prompt(
|
let value = await prompt(
|
||||||
`${promptText}${sampleValue ? `[sample: ${sampleValue}] ` : ""}`
|
`${promptText}${sampleValue ? `[sample: ${sampleValue}] ` : ""}`,
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!value && sampleValue) {
|
if (!value && sampleValue) {
|
||||||
@@ -207,7 +197,7 @@ async function testProvider(providerName, functionName) {
|
|||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log(
|
console.log(
|
||||||
`❌ Provider '${providerName}' not found or built. Make sure to run 'npm run build' first.`
|
`❌ Provider '${providerName}' not found or built. Make sure to run 'npm run build' first.`,
|
||||||
);
|
);
|
||||||
console.log(`Error: ${error.message}`);
|
console.log(`Error: ${error.message}`);
|
||||||
return;
|
return;
|
||||||
@@ -217,7 +207,7 @@ async function testProvider(providerName, functionName) {
|
|||||||
if (!module[functionName]) {
|
if (!module[functionName]) {
|
||||||
console.log(`❌ Function '${functionName}' not found in ${providerName}`);
|
console.log(`❌ Function '${functionName}' not found in ${providerName}`);
|
||||||
const availableFunctions = Object.keys(module).filter(
|
const availableFunctions = Object.keys(module).filter(
|
||||||
(key) => typeof module[key] === "function"
|
(key) => typeof module[key] === "function",
|
||||||
);
|
);
|
||||||
console.log(`Available functions: ${availableFunctions.join(", ")}`);
|
console.log(`Available functions: ${availableFunctions.join(", ")}`);
|
||||||
return;
|
return;
|
||||||
@@ -249,7 +239,7 @@ async function testProvider(providerName, functionName) {
|
|||||||
|
|
||||||
if (!validationResult.isValid) {
|
if (!validationResult.isValid) {
|
||||||
console.log(
|
console.log(
|
||||||
"\n💡 Tip: Check your provider implementation to ensure it returns the correct format."
|
"\n💡 Tip: Check your provider implementation to ensure it returns the correct format.",
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@@ -281,7 +271,7 @@ const StreamSchema = z.object({
|
|||||||
language: z.string(),
|
language: z.string(),
|
||||||
type: z.string(),
|
type: z.string(),
|
||||||
uri: z.string().url(),
|
uri: z.string().url(),
|
||||||
})
|
}),
|
||||||
)
|
)
|
||||||
.optional(),
|
.optional(),
|
||||||
headers: z.any().optional(),
|
headers: z.any().optional(),
|
||||||
@@ -297,7 +287,7 @@ const LinkSchema = z.object({
|
|||||||
title: z.string().min(1, "Direct link title cannot be empty"),
|
title: z.string().min(1, "Direct link title cannot be empty"),
|
||||||
link: z.string().url("Direct link must be a valid URL"),
|
link: z.string().url("Direct link must be a valid URL"),
|
||||||
type: z.enum(["movie", "series"]).optional(),
|
type: z.enum(["movie", "series"]).optional(),
|
||||||
})
|
}),
|
||||||
)
|
)
|
||||||
.optional(),
|
.optional(),
|
||||||
});
|
});
|
||||||
@@ -421,7 +411,7 @@ async function main() {
|
|||||||
console.log("\nFlags:");
|
console.log("\nFlags:");
|
||||||
console.log(" --rebuild Rebuild TypeScript files before testing");
|
console.log(" --rebuild Rebuild TypeScript files before testing");
|
||||||
console.log(
|
console.log(
|
||||||
"\nNote: Run with --rebuild flag if you've made changes to TypeScript files!"
|
"\nNote: Run with --rebuild flag if you've made changes to TypeScript files!",
|
||||||
);
|
);
|
||||||
rl.close();
|
rl.close();
|
||||||
return;
|
return;
|
||||||
@@ -430,16 +420,15 @@ async function main() {
|
|||||||
if (args.length < 2) {
|
if (args.length < 2) {
|
||||||
console.log("❌ Please provide both provider name and function name");
|
console.log("❌ Please provide both provider name and function name");
|
||||||
console.log(
|
console.log(
|
||||||
"Usage: node test-provider.js <provider> <function> [--rebuild]"
|
"Usage: node test-provider.js <provider> <function> [--rebuild]",
|
||||||
);
|
);
|
||||||
rl.close();
|
rl.close();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const providerName = args[0];
|
const providerName = args[0];
|
||||||
const functionName = args[1];
|
|
||||||
|
|
||||||
// Validate function name
|
// Validate function name (case-insensitive)
|
||||||
const validFunctions = [
|
const validFunctions = [
|
||||||
"getPosts",
|
"getPosts",
|
||||||
"getSearchPosts",
|
"getSearchPosts",
|
||||||
@@ -447,8 +436,11 @@ async function main() {
|
|||||||
"getEpisodes",
|
"getEpisodes",
|
||||||
"getStream",
|
"getStream",
|
||||||
];
|
];
|
||||||
|
const functionName =
|
||||||
|
validFunctions.find((f) => f.toLowerCase() === args[1].toLowerCase()) ??
|
||||||
|
args[1];
|
||||||
if (!validFunctions.includes(functionName)) {
|
if (!validFunctions.includes(functionName)) {
|
||||||
console.log(`❌ Invalid function name: ${functionName}`);
|
console.log(`❌ Invalid function name: ${args[1]}`);
|
||||||
console.log(`Valid functions: ${validFunctions.join(", ")}`);
|
console.log(`Valid functions: ${validFunctions.join(", ")}`);
|
||||||
rl.close();
|
rl.close();
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user