diff --git a/dist/movies4u/catalog.js b/dist/movies4u/catalog.js index e7db777..eb7829a 100644 --- a/dist/movies4u/catalog.js +++ b/dist/movies4u/catalog.js @@ -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});var catalog=[{title:"Trending",filter:""},{title:"Anime",filter:"/category/anime/"}];exports.catalog=catalog; \ No newline at end of file +"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});var catalog=[{title:"Latest",filter:""},{title:"Web Series",filter:"/category/web-series/"}];exports.catalog=catalog; \ No newline at end of file diff --git a/dist/movies4u/episodes.js b/dist/movies4u/episodes.js index ceef61f..5a02002 100644 --- a/dist/movies4u/episodes.js +++ b/dist/movies4u/episodes.js @@ -1 +1 @@ -"use strict";var __defProp=Object.defineProperty,__defProps=Object.defineProperties,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropDescs=Object.getOwnPropertyDescriptors,__getOwnPropNames=Object.getOwnPropertyNames,__getOwnPropSymbols=Object.getOwnPropertySymbols,__hasOwnProp=Object.prototype.hasOwnProperty,__propIsEnum=Object.prototype.propertyIsEnumerable,__defNormalProp=(obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value,__spreadValues=(a,b)=>{for(var prop in b||(b={}))__hasOwnProp.call(b,prop)&&__defNormalProp(a,prop,b[prop]);if(__getOwnPropSymbols)for(var prop of __getOwnPropSymbols(b))__propIsEnum.call(b,prop)&&__defNormalProp(a,prop,b[prop]);return a},__spreadProps=(a,b)=>__defProps(a,__getOwnPropDescs(b)),__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())}),episodes_exports={};__export(episodes_exports,{getEpisodes:()=>getEpisodes});var getEpisodes=__name(function(_0){return __async(this,arguments,function*({url:url,providerContext:providerContext}){const{axios:axios,cheerio:cheerio,commonHeaders:headers}=providerContext;console.log("getEpisodeLinks",url);try{const res=yield axios.get(url,{headers:__spreadProps(__spreadValues({},headers),{cookie:"ext_name=ojplmecpdpgccookcobabopnaifgidhf; cf_clearance=Zl2yiOCN3pzGUd0Bgs.VyBXniJooDbG2Tk1g7DEoRnw-1756381111-1.2.1.1-RVPZoWGCAygGNAHavrVR0YaqASWZlJyYff8A.oQfPB5qbcPrAVud42BzsSwcDgiKAP0gw5D92V3o8XWwLwDRNhyg3DuL1P8wh2K4BCVKxWvcy.iCCxczKtJ8QSUAsAQqsIzRWXk29N6X.kjxuOTYlfB2jrlq12TRDld_zTbsskNcTxaA.XQekUcpGLseYqELuvlNOQU568NZD6LiLn3ICyFThMFAx6mIcgXkxVAvnxU; xla=s4t"})}),$=cheerio.load(res.data),container=$(".entry-content,.entry-inner, .download-links-div");$(".unili-content,.code-block-1").remove();const episodes=[];return container.find("h5").each((index,element)=>{const el=$(element),title=el.text().trim(),hubCloudLink=el.next(".downloads-btns-div").find('a[style*="background: linear-gradient(135deg,#e629d0,#007bff);"]').attr("href");if(title&&hubCloudLink){const cleanedTitle=title.replace(/[-:]/g,"").trim();episodes.push({title:cleanedTitle,link:hubCloudLink})}}),episodes}catch(err){return console.log("getEpisodeLinks error: "),[]}})},"getEpisodes");exports.getEpisodes=getEpisodes; \ No newline at end of file +"use strict";var __defProp=Object.defineProperty,__defProps=Object.defineProperties,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropDescs=Object.getOwnPropertyDescriptors,__getOwnPropNames=Object.getOwnPropertyNames,__getOwnPropSymbols=Object.getOwnPropertySymbols,__hasOwnProp=Object.prototype.hasOwnProperty,__propIsEnum=Object.prototype.propertyIsEnumerable,__defNormalProp=(obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value,__spreadValues=(a,b)=>{for(var prop in b||(b={}))__hasOwnProp.call(b,prop)&&__defNormalProp(a,prop,b[prop]);if(__getOwnPropSymbols)for(var prop of __getOwnPropSymbols(b))__propIsEnum.call(b,prop)&&__defNormalProp(a,prop,b[prop]);return a},__spreadProps=(a,b)=>__defProps(a,__getOwnPropDescs(b)),__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())}),episodes_exports={};__export(episodes_exports,{getEpisodes:()=>getEpisodes});var getEpisodes=__name(function(_0){return __async(this,arguments,function*({url:url,providerContext:providerContext}){const{axios:axios,cheerio:cheerio,commonHeaders:headers}=providerContext;console.log("getEpisodeLinks",url);try{let res=yield axios.get(url,{headers:__spreadProps(__spreadValues({},headers),{cookie:"ext_name=ojplmecpdpgccookcobabopnaifgidhf; cf_clearance=Zl2yiOCN3pzGUd0Bgs.VyBXniJooDbG2Tk1g7DEoRnw-1756381111-1.2.1.1-RVPZoWGCAygGNAHavrVR0YaqASWZlJyYff8A.oQfPB5qbcPrAVud42BzsSwcDgiKAP0gw5D92V3o8XWwLwDRNhyg3DuL1P8wh2K4BCVKxWvcy.iCCxczKtJ8QSUAsAQqsIzRWXk29N6X.kjxuOTYlfB2jrlq12TRDld_zTbsskNcTxaA.XQekUcpGLseYqELuvlNOQU568NZD6LiLn3ICyFThMFAx6mIcgXkxVAvnxU; xla=s4t"})});if(res.data&&res.data.includes("Please turn JavaScript on and reload the page.")){const b1Match=res.data.match(/var b1=atob\(['"]([^'"]+)['"]\)/),a2Match=res.data.match(/_0x2aa8=\[['"]([^'"]+)['"]\]/),c3Match=res.data.match(/c3=toNumbers\(['"]([^'"]+)['"]\)/);if(b1Match&&a2Match&&c3Match){const unescapeHexStr=__name(str=>str.replace(/\\x([0-9A-Fa-f]{2})/g,(_,hex)=>String.fromCharCode(parseInt(hex,16))),"unescapeHexStr"),baseUrl=url.split("/").slice(0,3).join("/"),minJsRes=yield axios.get(`${baseUrl}/min.js`,{headers:headers}),b1Hex=atob(unescapeHexStr(b1Match[1])),a2Hex=atob(unescapeHexStr(a2Match[1])),c3Hex=unescapeHexStr(c3Match[1]),newCookie=`Antiddos-systems-DH=${new Function("c3Hex","a1Hex","b2Hex",`\n ${minJsRes.data}\n function toNumbers(d){var e=[];d.replace(/(..)/g,function(d){e.push(parseInt(d,16))});return e}\n function toHex(){for(var d=[],d=1==arguments.length&&arguments[0].constructor==Array?arguments[0]:arguments,e='',f=0;fd[f]?'0':'')+d[f].toString(16);return e.toLowerCase()}\n return toHex(slowAES.decrypt(toNumbers(c3Hex), 2, toNumbers(a1Hex), toNumbers(b2Hex)));\n `)(c3Hex,a2Hex,b1Hex)}`;res=yield axios.get(url,{headers:__spreadProps(__spreadValues({},headers),{Cookie:newCookie})})}}const $=cheerio.load(res.data),container=$(".entry-content,.entry-inner, .download-links-div");$(".unili-content,.code-block-1").remove();const episodes=[];return container.find("h3, h4, h5, p").each((index,element)=>{const el=$(element),title=el.text().trim(),link=el.nextAll().find("a").first().attr("href");if(title&&link&&title.match(/Episode|Ep|E\d+/i)&&title.length<150){const cleanedTitle=title.replace(/[-:]/g,"").trim();episodes.some(e=>e.link===link)||episodes.push({title:cleanedTitle,link:link})}}),0===episodes.length&&$("a").each((i,el)=>{const href=$(el).attr("href");if(href&&(href.includes("mdrive")||href.includes("fastdl")||href.includes("filebee")||href.includes("gdflix"))){const title=$(el).parent().prev().text().trim()||$(el).text().trim()||`Episode ${i+1}`;episodes.some(e=>e.link===href)||episodes.push({title:title.replace(/[-:]/g,"").trim(),link:href})}}),episodes}catch(err){return console.log("getEpisodeLinks error: "),[]}})},"getEpisodes");exports.getEpisodes=getEpisodes; \ No newline at end of file diff --git a/dist/movies4u/meta.js b/dist/movies4u/meta.js index 3bd55f2..4f830e5 100644 --- a/dist/movies4u/meta.js +++ b/dist/movies4u/meta.js @@ -1 +1 @@ -"use strict";var __defProp=Object.defineProperty,__defProps=Object.defineProperties,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropDescs=Object.getOwnPropertyDescriptors,__getOwnPropNames=Object.getOwnPropertyNames,__getOwnPropSymbols=Object.getOwnPropertySymbols,__hasOwnProp=Object.prototype.hasOwnProperty,__propIsEnum=Object.prototype.propertyIsEnumerable,__defNormalProp=(obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value,__spreadValues=(a,b)=>{for(var prop in b||(b={}))__hasOwnProp.call(b,prop)&&__defNormalProp(a,prop,b[prop]);if(__getOwnPropSymbols)for(var prop of __getOwnPropSymbols(b))__propIsEnum.call(b,prop)&&__defNormalProp(a,prop,b[prop]);return a},__spreadProps=(a,b)=>__defProps(a,__getOwnPropDescs(b)),__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())}),meta_exports={};__export(meta_exports,{getMeta:()=>getMeta});var 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:"xla=s4t; _ga=GA1.1.1081149560.1756378968; _ga_BLZGKYN5PF=GS2.1.s1756378968$o1$g1$t1756378984$j44$l0$h0","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"},getMeta=__name(function(_0){return __async(this,arguments,function*({link:link,providerContext:providerContext}){var _a,_b;const{axios:axios,cheerio:cheerio}=providerContext,url=link,baseUrl=url.split("/").slice(0,3).join("/"),emptyResult={title:"",synopsis:"",image:"",imdbId:"",type:"movie",linkList:[]};try{const response=yield axios.get(url,{headers:__spreadProps(__spreadValues({},headers),{Referer:baseUrl})}),$=cheerio.load(response.data),infoContainer=$(".entry-content, .post-inner").length?$(".entry-content, .post-inner"):$("body"),result={title:"",synopsis:"",image:"",imdbId:"",type:"movie",linkList:[]},infoParagraph=$("h2.movie-title").next("p").text();infoParagraph.includes("Season:")||infoParagraph.includes("Episode:")||infoParagraph.includes("SHOW Name:")?result.type="series":result.type="movie";const rawTitle=$("h1").text().trim()||$("h2").text().trim();result.title=rawTitle.split(/\[| \d+p| x\d+/)[0].trim();const showNameMatch=infoParagraph.match(/SHOW Name: (.+)/)||infoParagraph.match(/Name: (.+)/);showNameMatch&&showNameMatch[1]&&(result.title=result.title||showNameMatch[1].trim());const imdbMatch=(null==(_a=infoContainer.html())?void 0:_a.match(/tt\d+/))||(null==(_b=$("a[href*='imdb.com/title/']").attr("href"))?void 0:_b.match(/tt\d+/));result.imdbId=imdbMatch?imdbMatch[0]:"";let image=infoContainer.find(".post-thumbnail img").attr("src")||infoContainer.find("img[src]").first().attr("src")||"";image.startsWith("//")?image="https:"+image:image.startsWith("/")&&(image=baseUrl+image),(image.includes("no-thumbnail")||image.includes("placeholder"))&&(image=""),result.image=image,result.synopsis=$("h3.movie-title").filter((i,el)=>$(el).text().includes("Storyline")).next("p").text().trim()||infoContainer.find("p").first().text().trim()||"";const links=[];return $(".download-links-div").find("> h4").each((index,element)=>{var _a2;const el=$(element),titleText=el.text().trim(),qualityMatch=null==(_a2=titleText.match(/\d+p\b/))?void 0:_a2[0],fullTitle=titleText,downloadButtons=el.next(".downloads-btns-div").find("a");if(downloadButtons.length&&qualityMatch)if("series"===result.type)links.push({title:fullTitle,quality:qualityMatch,episodesLink:downloadButtons.attr("href")||"",directLinks:[]});else{const directLinks=[];downloadButtons.each((i,btn)=>{const btnEl=$(btn),link2=btnEl.attr("href");link2&&directLinks.push({title:btnEl.text().trim()||"Download",link:link2,type:"movie"})}),directLinks.length&&links.push({title:fullTitle,quality:qualityMatch,episodesLink:"",directLinks:directLinks})}}),result.linkList=links,result}catch(err){return console.log("getMeta error:",err),emptyResult}})},"getMeta");exports.getMeta=getMeta; \ No newline at end of file +"use strict";var __defProp=Object.defineProperty,__defProps=Object.defineProperties,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropDescs=Object.getOwnPropertyDescriptors,__getOwnPropNames=Object.getOwnPropertyNames,__getOwnPropSymbols=Object.getOwnPropertySymbols,__hasOwnProp=Object.prototype.hasOwnProperty,__propIsEnum=Object.prototype.propertyIsEnumerable,__defNormalProp=(obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value,__spreadValues=(a,b)=>{for(var prop in b||(b={}))__hasOwnProp.call(b,prop)&&__defNormalProp(a,prop,b[prop]);if(__getOwnPropSymbols)for(var prop of __getOwnPropSymbols(b))__propIsEnum.call(b,prop)&&__defNormalProp(a,prop,b[prop]);return a},__spreadProps=(a,b)=>__defProps(a,__getOwnPropDescs(b)),__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())}),meta_exports={};__export(meta_exports,{getMeta:()=>getMeta});var 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:"xla=s4t; _ga=GA1.1.1081149560.1756378968; _ga_BLZGKYN5PF=GS2.1.s1756378968$o1$g1$t1756378984$j44$l0$h0","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"},getMeta=__name(function(_0){return __async(this,arguments,function*({link:link,providerContext:providerContext}){var _a,_b;const{axios:axios,cheerio:cheerio}=providerContext,url=link,baseUrl=url.split("/").slice(0,3).join("/"),emptyResult={title:"",synopsis:"",image:"",imdbId:"",type:"movie",linkList:[]};try{let response=yield axios.get(url,{headers:__spreadProps(__spreadValues({},headers),{Referer:baseUrl})});if(response.data&&response.data.includes("Please turn JavaScript on and reload the page.")){const b1Match=response.data.match(/var b1=atob\(['"]([^'"]+)['"]\)/),a2Match=response.data.match(/_0x2aa8=\[['"]([^'"]+)['"]\]/),c3Match=response.data.match(/c3=toNumbers\(['"]([^'"]+)['"]\)/);if(b1Match&&a2Match&&c3Match){const unescapeHexStr=__name(str=>str.replace(/\\x([0-9A-Fa-f]{2})/g,(_,hex)=>String.fromCharCode(parseInt(hex,16))),"unescapeHexStr"),minJsRes=yield axios.get(`${baseUrl}/min.js`,{headers:__spreadProps(__spreadValues({},headers),{Referer:baseUrl})}),b1Hex=atob(unescapeHexStr(b1Match[1])),a2Hex=atob(unescapeHexStr(a2Match[1])),c3Hex=unescapeHexStr(c3Match[1]),newCookie=`Antiddos-systems-DH=${new Function("c3Hex","a1Hex","b2Hex",`\n ${minJsRes.data}\n function toNumbers(d){var e=[];d.replace(/(..)/g,function(d){e.push(parseInt(d,16))});return e}\n function toHex(){for(var d=[],d=1==arguments.length&&arguments[0].constructor==Array?arguments[0]:arguments,e='',f=0;fd[f]?'0':'')+d[f].toString(16);return e.toLowerCase()}\n return toHex(slowAES.decrypt(toNumbers(c3Hex), 2, toNumbers(a1Hex), toNumbers(b2Hex)));\n `)(c3Hex,a2Hex,b1Hex)}`;response=yield axios.get(url,{headers:__spreadProps(__spreadValues({},headers),{Referer:baseUrl,Cookie:newCookie})})}}const $=cheerio.load(response.data),infoContainer=$(".entry-content, .post-inner").length?$(".entry-content, .post-inner"):$("body"),result={title:"",synopsis:"",image:"",imdbId:"",type:"movie",linkList:[]},infoParagraph=$("h2.movie-title").next("p").text();infoParagraph.includes("Season:")||infoParagraph.includes("Episode:")||infoParagraph.includes("SHOW Name:")?result.type="series":result.type="movie";const rawTitle=$("h1").text().trim()||$("h2").text().trim();result.title=rawTitle.split(/\[| \d+p| x\d+/)[0].trim();const showNameMatch=infoParagraph.match(/SHOW Name: (.+)/)||infoParagraph.match(/Name: (.+)/);showNameMatch&&showNameMatch[1]&&(result.title=result.title||showNameMatch[1].trim());const imdbMatch=(null==(_a=infoContainer.html())?void 0:_a.match(/tt\d+/))||(null==(_b=$("a[href*='imdb.com/title/']").attr("href"))?void 0:_b.match(/tt\d+/));result.imdbId=imdbMatch?imdbMatch[0]:"";let image=infoContainer.find(".post-thumbnail img").attr("src")||infoContainer.find("img[src]").first().attr("src")||"";image.startsWith("//")?image="https:"+image:image.startsWith("/")&&(image=baseUrl+image),(image.includes("no-thumbnail")||image.includes("placeholder"))&&(image=""),result.image=image;const links=[];infoContainer.find("h3, h4, p").each((index,element)=>{var _a2;const el=$(element),titleText=el.text().trim(),qualityMatch=null==(_a2=titleText.match(/\d+p\b/))?void 0:_a2[0],fullTitle=titleText,downloadButtons=el.nextAll().find("a").first();if(downloadButtons.length&&qualityMatch&&titleText.length<350)if("series"===result.type)links.push({title:fullTitle,quality:qualityMatch,episodesLink:downloadButtons.attr("href")||"",directLinks:[]});else{const directLinks=[],link2=downloadButtons.attr("href");link2&&directLinks.push({title:downloadButtons.text().trim()||"Download",link:link2,type:"movie"}),directLinks.length&&links.push({title:fullTitle,quality:qualityMatch,episodesLink:"",directLinks:directLinks})}});const uniqueLinks=new Map;return links.forEach(link2=>{var _a2,_b2;const href=link2.episodesLink||(null==(_b2=null==(_a2=link2.directLinks)?void 0:_a2[0])?void 0:_b2.link);href&&!uniqueLinks.has(href)&&uniqueLinks.set(href,link2)}),result.linkList=Array.from(uniqueLinks.values()),result}catch(err){return console.log("getMeta error:",err),emptyResult}})},"getMeta");exports.getMeta=getMeta; \ No newline at end of file diff --git a/dist/movies4u/posts.js b/dist/movies4u/posts.js index 714e29e..61e8e29 100644 --- a/dist/movies4u/posts.js +++ b/dist/movies4u/posts.js @@ -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("movies4u");let url;url=query&&query.trim()?`${baseUrl}/?s=${encodeURIComponent(query)}${page>1?`&paged=${page}`:""}`: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,url).href,"resolveUrl"),seen=new Set,catalog=[],POST_SELECTORS=[".pstr_box","article",".result-item",".post",".item",".thumbnail",".latest-movies",".movie-item"].join(",");return $(POST_SELECTORS).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("h2").first().text().trim()||(null==(_a=card.find("a[title]").first().attr("title"))?void 0:_a.trim())||card.text().trim();if(title=title.replace(/\[.*?\]/g,"").replace(/\(.+?\)/g,"").replace(/\s{2,}/g," ").trim(),!title)return;const img=card.find("img").first().attr("src")||card.find("img").first().attr("data-src")||card.find("img").first().attr("data-original")||"",image=img?resolveUrl(img):"";seen.add(link),catalog.push({title:title,link:link,image:image})}),catalog.slice(0,100)}catch(err){return console.error("HDMovie2 fetchPosts error:",err instanceof Error?err.message:String(err)),[]}})}__name(getPosts,"getPosts"),__name(getSearchPosts,"getSearchPosts"),__name(fetchPosts,"fetchPosts"),exports.getPosts=getPosts,exports.getSearchPosts=getSearchPosts; \ No newline at end of file +"use strict";var __defProp=Object.defineProperty,__defProps=Object.defineProperties,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropDescs=Object.getOwnPropertyDescriptors,__getOwnPropNames=Object.getOwnPropertyNames,__getOwnPropSymbols=Object.getOwnPropertySymbols,__hasOwnProp=Object.prototype.hasOwnProperty,__propIsEnum=Object.prototype.propertyIsEnumerable,__defNormalProp=(obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value,__spreadValues=(a,b)=>{for(var prop in b||(b={}))__hasOwnProp.call(b,prop)&&__defNormalProp(a,prop,b[prop]);if(__getOwnPropSymbols)for(var prop of __getOwnPropSymbols(b))__propIsEnum.call(b,prop)&&__defNormalProp(a,prop,b[prop]);return a},__spreadProps=(a,b)=>__defProps(a,__getOwnPropDescs(b)),__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={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","accept-language":"en-US,en;q=0.9","cache-control":"no-cache",pragma:"no-cache",priority:"u=0, i","sec-ch-ua":'"Microsoft Edge";v="147", "Not.A/Brand";v="8", "Chromium";v="147"',"sec-ch-ua-mobile":"?0","sec-ch-ua-platform":'"Windows"',"sec-fetch-dest":"document","sec-fetch-mode":"navigate","sec-fetch-site":"same-origin","sec-fetch-user":"?1","upgrade-insecure-requests":"1",cookie:"Antiddos-systems-DH=395a53ac840ad21dff778291a3ffae36",Referer:"https://movies4u.vg/category/web-series/"};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("movies4u");let url;url=query&&query.trim()?`${baseUrl}/?s=${encodeURIComponent(query)}${page>1?`&paged=${page}`:""}`: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;let res=yield axios.get(url,{headers:defaultHeaders,signal:signal,maxRedirects:5});if(res.data&&res.data.includes("Please turn JavaScript on and reload the page.")){const b1Match=res.data.match(/var b1=atob\(['"]([^'"]+)['"]\)/),a2Match=res.data.match(/_0x2aa8=\[['"]([^'"]+)['"]\]/),c3Match=res.data.match(/c3=toNumbers\(['"]([^'"]+)['"]\)/);if(b1Match&&a2Match&&c3Match){const unescapeHexStr=__name(str=>str.replace(/\\x([0-9A-Fa-f]{2})/g,(_,hex)=>String.fromCharCode(parseInt(hex,16))),"unescapeHexStr"),minJsRes=yield axios.get(`${baseUrl}/min.js`,{headers:defaultHeaders,signal:signal}),b1Hex=atob(unescapeHexStr(b1Match[1])),a2Hex=atob(unescapeHexStr(a2Match[1])),c3Hex=unescapeHexStr(c3Match[1]),newCookie=`Antiddos-systems-DH=${new Function("c3Hex","a1Hex","b2Hex",`\n ${minJsRes.data}\n function toNumbers(d){var e=[];d.replace(/(..)/g,function(d){e.push(parseInt(d,16))});return e}\n function toHex(){for(var d=[],d=1==arguments.length&&arguments[0].constructor==Array?arguments[0]:arguments,e='',f=0;fd[f]?'0':'')+d[f].toString(16);return e.toLowerCase()}\n return toHex(slowAES.decrypt(toNumbers(c3Hex), 2, toNumbers(a1Hex), toNumbers(b2Hex)));\n `)(c3Hex,a2Hex,b1Hex)}`;res=yield axios.get(url,{headers:__spreadProps(__spreadValues({},defaultHeaders),{Cookie:newCookie}),signal:signal,maxRedirects:5})}}const $=cheerio.load(res.data||""),resolveUrl=__name(href=>(null==href?void 0:href.startsWith("http"))?href:new URL(href,url).href,"resolveUrl"),seen=new Set,catalog=[],POST_SELECTORS=[".pstr_box","article",".result-item",".post",".item",".thumbnail",".latest-movies",".movie-item",".entry-card"].join(",");return console.log("Fetching posts from URL:",url),$(POST_SELECTORS).each((_,el)=>{var _a;const card=$(el);console.log("Processing card:",card.text().trim().slice(0,50));let link=card.find("a[href]").first().attr("href")||"";if(!link)return;if(link=resolveUrl(link),seen.has(link))return;let title=card.find("h2").first().text().trim()||(null==(_a=card.find("a[title]").first().attr("title"))?void 0:_a.trim())||card.text().trim();if(title=title.replace(/(?:480p|720p|1080p|4k|HDTC|HDRip|BluRay|LiNE|Full Movie).*$/i,"").replace(/\[.*?\]/g,"").replace(/\s{2,}/g," ").replace(/\s*[|\-]\s*$/,"").trim(),!title)return;const img=card.find("img").first().attr("src")||card.find("img").first().attr("data-src")||card.find("img").first().attr("data-original")||"",image=img?resolveUrl(img):"";seen.add(link),catalog.push({title:title,link:link,image:image})}),catalog.slice(0,100)}catch(err){return console.error("HDMovie2 fetchPosts error:",err instanceof Error?err.message:String(err)),[]}})}__name(getPosts,"getPosts"),__name(getSearchPosts,"getSearchPosts"),__name(fetchPosts,"fetchPosts"),exports.getPosts=getPosts,exports.getSearchPosts=getSearchPosts; \ No newline at end of file diff --git a/dist/movies4u/stream.js b/dist/movies4u/stream.js index 51ebc43..6c9ea93 100644 --- a/dist/movies4u/stream.js +++ b/dist/movies4u/stream.js @@ -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 hubcloudDecode=__name(function(value){return void 0===value?"":atob(value.toString())},"hubcloudDecode");function hubcloudExtractor(link,signal,axios,cheerio,headers2){return __async(this,null,function*(){var _a,_b,_c,_d,_e,_f;try{headers2.Cookie="ext_name=ojplmecpdpgccookcobabopnaifgidhf; xla=s4t; cf_clearance=woQrFGXtLfmEMBEiGUsVHrUBMT8s3cmguIzmMjmvpkg-1770053679-1.2.1.1-xBrQdciOJsweUF6F2T_OtH6jmyanN_TduQ0yslc_XqjU6RcHSxI7.YOKv6ry7oYo64868HYoULnVyww536H2eVI3R2e4wKzsky6abjPdfQPxqpUaXjxfJ02o6jl3_Vkwr4uiaU7Wy596Vdst3y78HXvVmKdIohhtPvp.vZ9_L7wvWdce0GRixjh_6JiqWmWMws46hwEt3hboaS1e1e4EoWCvj5b0M_jVwvSxBOAW5emFzvT3QrnRh4nyYmKDERnY",console.log("hubcloudExtractor",link),console.log("headers",headers2);const baseUrl=link.split("/").slice(0,3).join("/"),streamLinks=[],vLinkText=(yield axios(`${link}`,{headers:headers2,signal:signal})).data,$vLink=cheerio.load(vLinkText),vLinkRedirect=vLinkText.match(/var\s+url\s*=\s*'([^']+)';/)||[];let vcloudLink=hubcloudDecode(null==(_b=null==(_a=vLinkRedirect[1])?void 0:_a.split("r="))?void 0:_b[1])||vLinkRedirect[1]||$vLink(".fa-file-download.fa-lg").parent().attr("href")||link;console.log("vcloudLink",vcloudLink),(null==vcloudLink?void 0:vcloudLink.startsWith("/"))&&(vcloudLink=`${baseUrl}${vcloudLink}`,console.log("New vcloudLink",vcloudLink));const vcloudRes=yield fetch(vcloudLink,{headers:headers2,signal:signal,redirect:"follow"}),$=cheerio.load(yield vcloudRes.text()),linkClass=$(".btn-success.btn-lg.h6,.btn-danger,.btn-secondary");for(const element of linkClass){let link2=$(element).attr("href")||"";switch(!0){case null==link2?void 0:link2.includes("pixeld"):if(!(null==link2?void 0:link2.includes("api"))){const token=link2.split("/").pop(),baseUrl2=link2.split("/").slice(0,-2).join("/");link2=`${baseUrl2}/api/file/${token}`}streamLinks.push({server:"Pixeldrain",link:link2,type:"mkv"});break;case(null==link2?void 0:link2.includes(".dev"))&&!(null==link2?void 0:link2.includes("/?id=")):streamLinks.push({server:"Cf Worker",link:link2,type:"mkv"});break;case(null==link2?void 0:link2.includes("hubcloud"))||(null==link2?void 0:link2.includes("/?id=")):try{const newLinkRes=yield fetch(link2,{method:"HEAD",headers:headers2,signal:signal,redirect:"manual"});let newLink=link2;if(newLink=newLinkRes.status>=300&&newLinkRes.status<400?newLinkRes.headers.get("location")||link2:newLinkRes.url&&newLinkRes.url!==link2?newLinkRes.url:newLinkRes.headers.get("location")||link2,newLink.includes("googleusercontent"))newLink=newLink.split("?link=")[1];else{const newLinkRes2=yield fetch(newLink,{method:"HEAD",headers:headers2,signal:signal,redirect:"manual"});newLink=newLinkRes2.status>=300&&newLinkRes2.status<400?(null==(_c=newLinkRes2.headers.get("location"))?void 0:_c.split("?link=")[1])||newLink:newLinkRes2.url&&newLinkRes2.url!==newLink?newLinkRes2.url.split("?link=")[1]||newLinkRes2.url:(null==(_d=newLinkRes2.headers.get("location"))?void 0:_d.split("?link=")[1])||newLink}streamLinks.push({server:"hubcloud",link:newLink,type:"mkv"})}catch(error){console.log("hubcloudExtractor error in hubcloud link: ",error)}break;case null==link2?void 0:link2.includes("cloudflarestorage"):streamLinks.push({server:"CfStorage",link:link2,type:"mkv"});break;case(null==link2?void 0:link2.includes("fastdl"))||(null==link2?void 0:link2.includes("fsl.")):streamLinks.push({server:"FastDl",link:link2,type:"mkv"});break;case link2.includes("hubcdn")&&!link2.includes("/?id="):streamLinks.push({server:"HubCdn",link:link2,type:"mkv"});break;default:if((null==link2?void 0:link2.includes(".mkv"))||(null==link2?void 0:link2.includes("?token="))){const serverName=(null==(_f=null==(_e=link2.match(/^(?:https?:\/\/)?(?:www\.)?([^\/]+)/i))?void 0:_e[1])?void 0:_f.replace(/\./g," "))||"Unknown";streamLinks.push({server:serverName,link:link2,type:"mkv"})}}}return console.log("streamLinks",streamLinks),streamLinks}catch(error){return console.log("hubcloudExtractor error: ",(null==error?void 0:error.message)||error),[]}})}__name(hubcloudExtractor,"hubcloudExtractor");var 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:"xla=s4t; _ga=GA1.1.1081149560.1756378968; _ga_BLZGKYN5PF=GS2.1.s1756378968$o1$g1$t1756378984$j44$l0$h0","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"};function getStream(_0){return __async(this,arguments,function*({link:link,type:type,signal:signal,providerContext:providerContext}){var _a,_b,_c,_d;const{axios:axios,cheerio:cheerio,commonHeaders:commonHeaders}=providerContext;try{const streamLinks=[];if(console.log("dotlink",link),"movie"===type){const dotlinkText=(yield axios(`${link}`,{headers:headers})).data;link=(dotlinkText.match(/__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 hubcloudDecode=__name(function(value){return void 0===value?"":atob(value.toString())},"hubcloudDecode");function hubcloudExtractor(link,signal,axios,cheerio,headers2){return __async(this,null,function*(){var _a,_b,_c,_d,_e,_f;try{headers2.Cookie="ext_name=ojplmecpdpgccookcobabopnaifgidhf; xla=s4t; cf_clearance=woQrFGXtLfmEMBEiGUsVHrUBMT8s3cmguIzmMjmvpkg-1770053679-1.2.1.1-xBrQdciOJsweUF6F2T_OtH6jmyanN_TduQ0yslc_XqjU6RcHSxI7.YOKv6ry7oYo64868HYoULnVyww536H2eVI3R2e4wKzsky6abjPdfQPxqpUaXjxfJ02o6jl3_Vkwr4uiaU7Wy596Vdst3y78HXvVmKdIohhtPvp.vZ9_L7wvWdce0GRixjh_6JiqWmWMws46hwEt3hboaS1e1e4EoWCvj5b0M_jVwvSxBOAW5emFzvT3QrnRh4nyYmKDERnY",console.log("hubcloudExtractor",link),console.log("headers",headers2);const baseUrl=link.split("/").slice(0,3).join("/"),streamLinks=[],vLinkText=(yield axios(`${link}`,{headers:headers2,signal:signal})).data,$vLink=cheerio.load(vLinkText),vLinkRedirect=vLinkText.match(/var\s+url\s*=\s*'([^']+)';/)||[];let vcloudLink=hubcloudDecode(null==(_b=null==(_a=vLinkRedirect[1])?void 0:_a.split("r="))?void 0:_b[1])||vLinkRedirect[1]||$vLink(".fa-file-download.fa-lg").parent().attr("href")||link;console.log("vcloudLink",vcloudLink),(null==vcloudLink?void 0:vcloudLink.startsWith("/"))&&(vcloudLink=`${baseUrl}${vcloudLink}`,console.log("New vcloudLink",vcloudLink));const vcloudRes=yield fetch(vcloudLink,{headers:headers2,signal:signal,redirect:"follow"}),$=cheerio.load(yield vcloudRes.text()),linkClass=$(".btn-success.btn-lg.h6,.btn-danger,.btn-secondary");for(const element of linkClass){let link2=$(element).attr("href")||"";switch(!0){case null==link2?void 0:link2.includes("pixeld"):if(!(null==link2?void 0:link2.includes("api"))){const token=link2.split("/").pop(),baseUrl2=link2.split("/").slice(0,-2).join("/");link2=`${baseUrl2}/api/file/${token}`}streamLinks.push({server:"Pixeldrain",link:link2,type:"mkv"});break;case(null==link2?void 0:link2.includes(".dev"))&&!(null==link2?void 0:link2.includes("/?id=")):streamLinks.push({server:"Cf Worker",link:link2,type:"mkv"});break;case(null==link2?void 0:link2.includes("hubcloud"))||(null==link2?void 0:link2.includes("/?id=")):try{const newLinkRes=yield fetch(link2,{method:"HEAD",headers:headers2,signal:signal,redirect:"manual"});let newLink=link2;if(newLink=newLinkRes.status>=300&&newLinkRes.status<400?newLinkRes.headers.get("location")||link2:newLinkRes.url&&newLinkRes.url!==link2?newLinkRes.url:newLinkRes.headers.get("location")||link2,newLink.includes("googleusercontent"))newLink=newLink.split("?link=")[1];else{const newLinkRes2=yield fetch(newLink,{method:"HEAD",headers:headers2,signal:signal,redirect:"manual"});newLink=newLinkRes2.status>=300&&newLinkRes2.status<400?(null==(_c=newLinkRes2.headers.get("location"))?void 0:_c.split("?link=")[1])||newLink:newLinkRes2.url&&newLinkRes2.url!==newLink?newLinkRes2.url.split("?link=")[1]||newLinkRes2.url:(null==(_d=newLinkRes2.headers.get("location"))?void 0:_d.split("?link=")[1])||newLink}streamLinks.push({server:"hubcloud",link:newLink,type:"mkv"})}catch(error){console.log("hubcloudExtractor error in hubcloud link: ",error)}break;case null==link2?void 0:link2.includes("cloudflarestorage"):streamLinks.push({server:"CfStorage",link:link2,type:"mkv"});break;case(null==link2?void 0:link2.includes("fastdl"))||(null==link2?void 0:link2.includes("fsl.")):streamLinks.push({server:"FastDl",link:link2,type:"mkv"});break;case link2.includes("hubcdn")&&!link2.includes("/?id="):streamLinks.push({server:"HubCdn",link:link2,type:"mkv"});break;default:if((null==link2?void 0:link2.includes(".mkv"))||(null==link2?void 0:link2.includes("?token="))){const serverName=(null==(_f=null==(_e=link2.match(/^(?:https?:\/\/)?(?:www\.)?([^\/]+)/i))?void 0:_e[1])?void 0:_f.replace(/\./g," "))||"Unknown";streamLinks.push({server:serverName,link:link2,type:"mkv"})}}}return console.log("streamLinks",streamLinks),streamLinks}catch(error){return console.log("hubcloudExtractor error: ",(null==error?void 0:error.message)||error),[]}})}__name(hubcloudExtractor,"hubcloudExtractor");var 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:"xla=s4t; _ga=GA1.1.1081149560.1756378968; _ga_BLZGKYN5PF=GS2.1.s1756378968$o1$g1$t1756378984$j44$l0$h0","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"};function getStream(_0){return __async(this,arguments,function*({link:link,type:type,signal:signal,providerContext:providerContext}){var _a,_b,_c,_d;const{axios:axios,cheerio:cheerio,commonHeaders:commonHeaders}=providerContext;try{const streamLinks=[];if(console.log("dotlink",link),"movie"===type){const dotlinkText=(yield axios(`${link}`,{headers:headers})).data,vlink=dotlinkText.match(/{const href=$(el).attr("href")||"";return href.includes("hubcloud")||href.includes("gdflix")||href.includes("filebee")||href.includes("fastdl")}).first().attr("href");directLink&&(link=directLink)}if(link.includes("fastdl.zip"))try{const reurlMatch=(yield axios.get(link,{headers:headers})).data.match(/var reurl = "([^"]+)";/);if(reurlMatch&&reurlMatch[1]){const actualLink=reurlMatch[1].replace("https://fastdl.zip/dl.php?link=","");return streamLinks.push({server:"fastdl",link:actualLink,type:"mkv"}),streamLinks}}catch(error){console.log("fastdl error: ",error)}try{const filepressLink=cheerio.load(dotlinkText)('.btn.btn-sm.btn-outline[style="background:linear-gradient(135deg,rgb(252,185,0) 0%,rgb(0,0,0)); color: #fdf8f2;"]').parent().attr("href"),filepressID=null==filepressLink?void 0:filepressLink.split("/").pop(),filepressBaseUrl=null==filepressLink?void 0:filepressLink.split("/").slice(0,-2).join("/"),filepressTokenRes=yield axios.post(filepressBaseUrl+"/api/file/downlaod/",{id:filepressID,method:"indexDownlaod",captchaValue:null},{headers:{"Content-Type":"application/json",Referer:filepressBaseUrl}});if(null==(_a=filepressTokenRes.data)?void 0:_a.status){const filepressToken=null==(_b=filepressTokenRes.data)?void 0:_b.data,filepressStreamLink=yield axios.post(filepressBaseUrl+"/api/file/downlaod2/",{id:filepressToken,method:"indexDownlaod",captchaValue:null},{headers:{"Content-Type":"application/json",Referer:filepressBaseUrl}});streamLinks.push({server:"filepress",link:null==(_d=null==(_c=filepressStreamLink.data)?void 0:_c.data)?void 0:_d[0],type:"mkv"})}}catch(error){console.log("filepress error: ")}}return yield hubcloudExtractor(link,signal,axios,cheerio,commonHeaders)}catch(error){return console.log("getStream error: ",error),error.message.includes("Aborted"),[]}})}__name(getStream,"getStream"),exports.getStream=getStream; \ No newline at end of file diff --git a/manifest.json b/manifest.json index 81f42bf..ca612b3 100644 --- a/manifest.json +++ b/manifest.json @@ -114,7 +114,7 @@ { "display_name": "Movies4U", "value": "movies4u", - "version": "1.3", + "version": "1.4", "icon": "", "type": "global", "disabled": false diff --git a/providers/movies4u/catalog.ts b/providers/movies4u/catalog.ts index a2c8ff7..4ed7db8 100644 --- a/providers/movies4u/catalog.ts +++ b/providers/movies4u/catalog.ts @@ -1,10 +1,10 @@ export const catalog = [ { - title: "Trending", + title: "Latest", filter: "", }, { - title: "Anime", - filter: "/category/anime/", + title: "Web Series", + filter: "/category/web-series/", }, -]; \ No newline at end of file +]; diff --git a/providers/movies4u/episodes.ts b/providers/movies4u/episodes.ts index efb1b9b..8180a79 100644 --- a/providers/movies4u/episodes.ts +++ b/providers/movies4u/episodes.ts @@ -1,6 +1,6 @@ import { EpisodeLink, ProviderContext } from "../types"; -// यहाँ `getEpisodes` फ़ंक्शन मान रहा है कि यह उस पेज को स्क्रैप कर रहा है +// यहाँ `getEpisodes` फ़ंक्शन मान रहा है कि यह उस पेज को स्क्रैप कर रहा है // जो 'Download Links' बटन से प्राप्त हुआ है (जैसे m4ulinks.com/number/42882) export const getEpisodes = async function ({ @@ -14,7 +14,7 @@ export const getEpisodes = async function ({ console.log("getEpisodeLinks", url); try { // Note: Cookies को URL के आधार पर अपडेट करने की आवश्यकता हो सकती है - const res = await axios.get(url, { + let res = await axios.get(url, { headers: { ...headers, // Cloudflare/Bot protection के लिए Hardcoded cookie यहाँ आवश्यक हो सकता है @@ -22,43 +22,115 @@ export const getEpisodes = async function ({ "ext_name=ojplmecpdpgccookcobabopnaifgidhf; cf_clearance=Zl2yiOCN3pzGUd0Bgs.VyBXniJooDbG2Tk1g7DEoRnw-1756381111-1.2.1.1-RVPZoWGCAygGNAHavrVR0YaqASWZlJyYff8A.oQfPB5qbcPrAVud42BzsSwcDgiKAP0gw5D92V3o8XWwLwDRNhyg3DuL1P8wh2K4BCVKxWvcy.iCCxczKtJ8QSUAsAQqsIzRWXk29N6X.kjxuOTYlfB2jrlq12TRDld_zTbsskNcTxaA.XQekUcpGLseYqELuvlNOQU568NZD6LiLn3ICyFThMFAx6mIcgXkxVAvnxU; xla=s4t", }, }); - const $ = cheerio.load(res.data); - const container = $(".entry-content,.entry-inner, .download-links-div"); - - // .unili-content,.code-block-1 जैसे अवांछित तत्वों को हटा दें - $(".unili-content,.code-block-1").remove(); - - const episodes: EpisodeLink[] = []; - // HubCloud Links को लक्षित करने के लिए: - // 1. Episode Title (h5) से शुरू करें - // 2. उसके बाद के downloads-btns-div में HubCloud बटन खोजें - - container.find("h5").each((index, element) => { - const el = $(element); - const title = el.text().trim(); // e.g., "-:Episodes: 1:- (Grand Premiere)" - - // HubCloud लिंक को विशिष्ट स्टाइल और टेक्स्ट से खोजें - // बटन सेलेक्टर: style="background: linear-gradient(135deg,#e629d0,#007bff);color: white;" - const hubCloudLink = el - .next(".downloads-btns-div") - .find( - 'a[style*="background: linear-gradient(135deg,#e629d0,#007bff);"]' - ) - .attr("href"); + if ( + res.data && + res.data.includes("Please turn JavaScript on and reload the page.") + ) { + const b1Match = res.data.match(/var b1=atob\(['"]([^'"]+)['"]\)/); + const a2Match = res.data.match(/_0x2aa8=\[['"]([^'"]+)['"]\]/); + const c3Match = res.data.match(/c3=toNumbers\(['"]([^'"]+)['"]\)/); - if (title && hubCloudLink) { - // टाइटल को साफ़ करें (e.g., सिर्फ़ Episode 1: Grand Premiere रखें) - const cleanedTitle = title.replace(/[-:]/g, "").trim(); - - episodes.push({ - title: cleanedTitle, - link: hubCloudLink, - // यदि यह HubCloud/Streaming लिंक है, तो आप 'type' को यहाँ 'stream' भी सेट कर सकते हैं + if (b1Match && a2Match && c3Match) { + const unescapeHexStr = (str: string) => + str.replace(/\\x([0-9A-Fa-f]{2})/g, (_, hex) => + String.fromCharCode(parseInt(hex, 16)), + ); + + const baseUrl = url.split("/").slice(0, 3).join("/"); + const minJsRes = await axios.get(`${baseUrl}/min.js`, { + headers, + }); + + const b1Hex = atob(unescapeHexStr(b1Match[1])); + const a2Hex = atob(unescapeHexStr(a2Match[1])); + const c3Hex = unescapeHexStr(c3Match[1]); + + const solver = new Function( + "c3Hex", + "a1Hex", + "b2Hex", + ` + ${minJsRes.data} + function toNumbers(d){var e=[];d.replace(/(..)/g,function(d){e.push(parseInt(d,16))});return e} + function toHex(){for(var d=[],d=1==arguments.length&&arguments[0].constructor==Array?arguments[0]:arguments,e='',f=0;fd[f]?'0':'')+d[f].toString(16);return e.toLowerCase()} + return toHex(slowAES.decrypt(toNumbers(c3Hex), 2, toNumbers(a1Hex), toNumbers(b2Hex))); + `, + ); + + const decrypted = solver(c3Hex, a2Hex, b1Hex); + const newCookie = `Antiddos-systems-DH=${decrypted}`; + + res = await axios.get(url, { + headers: { ...headers, Cookie: newCookie }, }); } + } + + const $ = cheerio.load(res.data); + const container = $(".entry-content,.entry-inner, .download-links-div"); + + // .unili-content,.code-block-1 जैसे अवांछित तत्वों को हटा दें + $(".unili-content,.code-block-1").remove(); + + const episodes: EpisodeLink[] = []; + + // The site changed its layout. Links are now inside

tags following

or

tags with quality info. + // We can also just look for the tags directly and find their preceding quality headers. + const hElements = container.find("h3, h4, h5, p"); + + hElements.each((index, element) => { + const el = $(element); + const title = el.text().trim(); + + // The download buttons are usually in the next

tag + const downloadButtons = el.nextAll().find("a").first(); + const link = downloadButtons.attr("href"); + + if ( + title && + link && + title.match(/Episode|Ep|E\d+/i) && + title.length < 150 + ) { + // Clean up the title + const cleanedTitle = title.replace(/[-:]/g, "").trim(); + + // Deduplicate + if (!episodes.some((e) => e.link === link)) { + episodes.push({ + title: cleanedTitle, + link: link, + }); + } + } }); + // Fallback: if no episodes found by heading, just grab all mdrive/fastdl links + if (episodes.length === 0) { + $("a").each((i, el) => { + const href = $(el).attr("href"); + if ( + href && + (href.includes("mdrive") || + href.includes("fastdl") || + href.includes("filebee") || + href.includes("gdflix")) + ) { + const title = + $(el).parent().prev().text().trim() || + $(el).text().trim() || + `Episode ${i + 1}`; + if (!episodes.some((e) => e.link === href)) { + episodes.push({ + title: title.replace(/[-:]/g, "").trim(), + link: href, + }); + } + } + }); + } + // console.log(episodes); return episodes; } catch (err) { @@ -66,4 +138,4 @@ export const getEpisodes = async function ({ // console.error(err); return []; } -}; \ No newline at end of file +}; diff --git a/providers/movies4u/meta.ts b/providers/movies4u/meta.ts index fd70929..b8ccbfc 100644 --- a/providers/movies4u/meta.ts +++ b/providers/movies4u/meta.ts @@ -43,10 +43,53 @@ export const getMeta = async function ({ }; try { - const response = await axios.get(url, { + let response = await axios.get(url, { headers: { ...headers, Referer: baseUrl }, }); + if ( + response.data && + response.data.includes("Please turn JavaScript on and reload the page.") + ) { + const b1Match = response.data.match(/var b1=atob\(['"]([^'"]+)['"]\)/); + const a2Match = response.data.match(/_0x2aa8=\[['"]([^'"]+)['"]\]/); + const c3Match = response.data.match(/c3=toNumbers\(['"]([^'"]+)['"]\)/); + + if (b1Match && a2Match && c3Match) { + const unescapeHexStr = (str: string) => + str.replace(/\\x([0-9A-Fa-f]{2})/g, (_, hex) => + String.fromCharCode(parseInt(hex, 16)), + ); + + const minJsRes = await axios.get(`${baseUrl}/min.js`, { + headers: { ...headers, Referer: baseUrl }, + }); + + const b1Hex = atob(unescapeHexStr(b1Match[1])); + const a2Hex = atob(unescapeHexStr(a2Match[1])); + const c3Hex = unescapeHexStr(c3Match[1]); + + const solver = new Function( + "c3Hex", + "a1Hex", + "b2Hex", + ` + ${minJsRes.data} + function toNumbers(d){var e=[];d.replace(/(..)/g,function(d){e.push(parseInt(d,16))});return e} + function toHex(){for(var d=[],d=1==arguments.length&&arguments[0].constructor==Array?arguments[0]:arguments,e='',f=0;fd[f]?'0':'')+d[f].toString(16);return e.toLowerCase()} + return toHex(slowAES.decrypt(toNumbers(c3Hex), 2, toNumbers(a1Hex), toNumbers(b2Hex))); + `, + ); + + const decrypted = solver(c3Hex, a2Hex, b1Hex); + const newCookie = `Antiddos-systems-DH=${decrypted}`; + + response = await axios.get(url, { + headers: { ...headers, Referer: baseUrl, Cookie: newCookie }, + }); + } + } + const $ = cheerio.load(response.data); const infoContainer = $(".entry-content, .post-inner").length ? $(".entry-content, .post-inner") @@ -100,29 +143,23 @@ export const getMeta = async function ({ image = ""; result.image = image; - // --- Synopsis --- - result.synopsis = - $("h3.movie-title") - .filter((i, el) => $(el).text().includes("Storyline")) - .next("p") - .text() - .trim() || - infoContainer.find("p").first().text().trim() || - ""; - // --- LinkList extraction --- const links: Link[] = []; - const h4Elements = $(".download-links-div").find("> h4"); - h4Elements.each((index, element) => { + // The site changed its layout. Links are now inside

tags following

or

tags with quality info. + // We can also just look for the tags directly and find their preceding quality headers. + const hElements = infoContainer.find("h3, h4, p"); + + hElements.each((index, element) => { const el = $(element); const titleText = el.text().trim(); const qualityMatch = titleText.match(/\d+p\b/)?.[0]; const fullTitle = titleText; - const downloadButtons = el.next(".downloads-btns-div").find("a"); + // The download buttons are usually in the next

tag + const downloadButtons = el.nextAll().find("a").first(); - if (downloadButtons.length && qualityMatch) { + if (downloadButtons.length && qualityMatch && titleText.length < 350) { if (result.type === "series") { links.push({ title: fullTitle, @@ -134,17 +171,14 @@ export const getMeta = async function ({ // Movie: collect all direct download buttons const directLinks: Link["directLinks"] = []; - downloadButtons.each((i, btn) => { - const btnEl = $(btn); - const link = btnEl.attr("href"); - if (link) { - directLinks.push({ - title: btnEl.text().trim() || "Download", - link, - type: "movie", // literal type - }); - } - }); + const link = downloadButtons.attr("href"); + if (link) { + directLinks.push({ + title: downloadButtons.text().trim() || "Download", + link, + type: "movie", // literal type + }); + } if (directLinks.length) { links.push({ @@ -158,7 +192,15 @@ export const getMeta = async function ({ } }); - result.linkList = links; + // Deduplicate links by href + const uniqueLinks = new Map(); + links.forEach((link) => { + const href = link.episodesLink || link.directLinks?.[0]?.link; + if (href && !uniqueLinks.has(href)) { + uniqueLinks.set(href, link); + } + }); + result.linkList = Array.from(uniqueLinks.values()); return result; } catch (err) { console.log("getMeta error:", err); diff --git a/providers/movies4u/posts.ts b/providers/movies4u/posts.ts index 9654fac..6aec258 100644 --- a/providers/movies4u/posts.ts +++ b/providers/movies4u/posts.ts @@ -1,14 +1,23 @@ import { Post, ProviderContext } from "../types"; const 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", + 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", + "accept-language": "en-US,en;q=0.9", + "cache-control": "no-cache", + pragma: "no-cache", + priority: "u=0, i", + "sec-ch-ua": + '"Microsoft Edge";v="147", "Not.A/Brand";v="8", "Chromium";v="147"', + "sec-ch-ua-mobile": "?0", + "sec-ch-ua-platform": '"Windows"', + "sec-fetch-dest": "document", + "sec-fetch-mode": "navigate", + "sec-fetch-site": "same-origin", + "sec-fetch-user": "?1", + "upgrade-insecure-requests": "1", + cookie: "Antiddos-systems-DH=395a53ac840ad21dff778291a3ffae36", + Referer: "https://movies4u.vg/category/web-series/", }; // --- Normal catalog posts --- @@ -81,7 +90,60 @@ async function fetchPosts({ } const { axios, cheerio } = providerContext; - const res = await axios.get(url, { headers: defaultHeaders, signal }); + let res = await axios.get(url, { + headers: defaultHeaders, + signal, + maxRedirects: 5, + }); + + // Anti-DDoS-Guard check + if ( + res.data && + res.data.includes("Please turn JavaScript on and reload the page.") + ) { + const b1Match = res.data.match(/var b1=atob\(['"]([^'"]+)['"]\)/); + const a2Match = res.data.match(/_0x2aa8=\[['"]([^'"]+)['"]\]/); + const c3Match = res.data.match(/c3=toNumbers\(['"]([^'"]+)['"]\)/); + + if (b1Match && a2Match && c3Match) { + const unescapeHexStr = (str: string) => + str.replace(/\\x([0-9A-Fa-f]{2})/g, (_, hex) => + String.fromCharCode(parseInt(hex, 16)), + ); + + // Fetch the min.js payload from the provider to safely execute slowAES + const minJsRes = await axios.get(`${baseUrl}/min.js`, { + headers: defaultHeaders, + signal, + }); + + const b1Hex = atob(unescapeHexStr(b1Match[1])); + const a2Hex = atob(unescapeHexStr(a2Match[1])); + const c3Hex = unescapeHexStr(c3Match[1]); + + // Evaluate the decryption without needing crypto or buffers + const solver = new Function( + "c3Hex", + "a1Hex", + "b2Hex", + ` + ${minJsRes.data} + function toNumbers(d){var e=[];d.replace(/(..)/g,function(d){e.push(parseInt(d,16))});return e} + function toHex(){for(var d=[],d=1==arguments.length&&arguments[0].constructor==Array?arguments[0]:arguments,e='',f=0;fd[f]?'0':'')+d[f].toString(16);return e.toLowerCase()} + return toHex(slowAES.decrypt(toNumbers(c3Hex), 2, toNumbers(a1Hex), toNumbers(b2Hex))); + `, + ); + + const decrypted = solver(c3Hex, a2Hex, b1Hex); + const newCookie = `Antiddos-systems-DH=${decrypted}`; + res = await axios.get(url, { + headers: { ...defaultHeaders, Cookie: newCookie }, + signal, + maxRedirects: 5, + }); + } + } + const $ = cheerio.load(res.data || ""); const resolveUrl = (href: string) => @@ -100,10 +162,13 @@ async function fetchPosts({ ".thumbnail", ".latest-movies", ".movie-item", + ".entry-card", ].join(","); + console.log("Fetching posts from URL:", url); // Debug log $(POST_SELECTORS).each((_, el) => { const card = $(el); + console.log("Processing card:", card.text().trim().slice(0, 50)); // Debug log let link = card.find("a[href]").first().attr("href") || ""; if (!link) return; link = resolveUrl(link); @@ -114,9 +179,13 @@ async function fetchPosts({ card.find("a[title]").first().attr("title")?.trim() || card.text().trim(); title = title + .replace( + /(?:480p|720p|1080p|4k|HDTC|HDRip|BluRay|LiNE|Full Movie).*$/i, + "", + ) .replace(/\[.*?\]/g, "") - .replace(/\(.+?\)/g, "") .replace(/\s{2,}/g, " ") + .replace(/\s*[|\-]\s*$/, "") .trim(); if (!title) return; @@ -135,7 +204,7 @@ async function fetchPosts({ } catch (err) { console.error( "HDMovie2 fetchPosts error:", - err instanceof Error ? err.message : String(err) + err instanceof Error ? err.message : String(err), ); return []; } diff --git a/providers/movies4u/stream.ts b/providers/movies4u/stream.ts index 33547d5..6c2f776 100644 --- a/providers/movies4u/stream.ts +++ b/providers/movies4u/stream.ts @@ -44,7 +44,50 @@ export async function getStream({ // console.log('dotlinkText', dotlinkText); const vlink = dotlinkText.match(/ { + const href = $(el).attr("href") || ""; + return ( + href.includes("hubcloud") || + href.includes("gdflix") || + href.includes("filebee") || + href.includes("fastdl") + ); + }) + .first() + .attr("href"); + + if (directLink) { + link = directLink; + } + } + + // If it's a fastdl link, extract the redirect URL + if (link.includes("fastdl.zip")) { + try { + const fastdlRes = await axios.get(link, { headers }); + const reurlMatch = fastdlRes.data.match(/var reurl = "([^"]+)";/); + if (reurlMatch && reurlMatch[1]) { + const actualLink = reurlMatch[1].replace( + "https://fastdl.zip/dl.php?link=", + "", + ); + streamLinks.push({ + server: "fastdl", + link: actualLink, + type: "mkv", + }); + return streamLinks; + } + } catch (error) { + console.log("fastdl error: ", error); + } + } // filepress link try {