diff --git a/dist/katMovieFix/catalog.js b/dist/katMovieFix/catalog.js
new file mode 100644
index 0000000..c1b2593
--- /dev/null
+++ b/dist/katMovieFix/catalog.js
@@ -0,0 +1 @@
+"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.catalog=void 0,exports.catalog=[{title:"Netflix",filter:"/category/netflix/"},{title:"Anime",filter:"/category/anime/"}];
\ No newline at end of file
diff --git a/dist/katMovieFix/episodes.js b/dist/katMovieFix/episodes.js
new file mode 100644
index 0000000..1bffe12
--- /dev/null
+++ b/dist/katMovieFix/episodes.js
@@ -0,0 +1 @@
+"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator.throw(value))}catch(e){reject(e)}}function step(result){var value;result.done?resolve(result.value):(value=result.value,value instanceof P?value:new P(function(resolve){resolve(value)})).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())})};function getEpisodeLinks(_a){return __awaiter(this,arguments,void 0,function*({url:url,providerContext:providerContext}){try{const res=yield providerContext.axios.get(url),$=providerContext.cheerio.load(res.data||""),episodes=[];return $("a").each((i,el)=>{var _a;const $el=$(el),href=($el.attr("href")||"").trim(),text=$el.text().trim();if(href&&(text.includes("Episode")||/E\d+/i.test(text)||href.includes("vcloud.lol"))){let epNum=(null===(_a=text.match(/E\d+/i))||void 0===_a?void 0:_a[0])||text;/^\d+$/.test(epNum)&&(epNum=`Episode ${epNum}`),episodes.push({title:epNum,link:href})}}),episodes}catch(err){return[]}})}function getEpisodes(_a){return __awaiter(this,arguments,void 0,function*({url:url,providerContext:providerContext}){return yield getEpisodeLinks({url:url,providerContext:providerContext})})}Object.defineProperty(exports,"__esModule",{value:!0}),exports.getEpisodeLinks=getEpisodeLinks,exports.getEpisodes=getEpisodes;
\ No newline at end of file
diff --git a/dist/katMovieFix/meta.js b/dist/katMovieFix/meta.js
new file mode 100644
index 0000000..19b63c6
--- /dev/null
+++ b/dist/katMovieFix/meta.js
@@ -0,0 +1 @@
+"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.scrapeEpisodePage=exports.getMeta=void 0;const headers={Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8","Cache-Control":"no-store","Accept-Language":"en-US,en;q=0.9",DNT:"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"},getMeta=function({link:link,providerContext:providerContext}){const{axios:axios,cheerio:cheerio}=providerContext;return axios.get(link,{headers:headers}).then(response=>{var _a;const $=cheerio.load(response.data),infoContainer=$(".entry-content,.post-inner"),title=$("h1.entry-title").text().trim()||$("h2.entry-title").text().trim()||"",imdbMatch=null===(_a=infoContainer.html())||void 0===_a?void 0:_a.match(/tt\d+/),imdbId=imdbMatch?imdbMatch[0]:"",synopsis=infoContainer.find("h3:contains('SYNOPSIS'), h3:contains('synopsis')").next("p").text().trim()||"";let image=infoContainer.find("img").first().attr("src")||"";image.startsWith("//")&&(image="https:"+image);const type=/Season \d+/i.test(infoContainer.text())?"series":"movie",linkList=[];return"series"===type?infoContainer.find("h2 a").each((_,el)=>{var _a;const el$=$(el),href=null===(_a=el$.attr("href"))||void 0===_a?void 0:_a.trim(),linkText=el$.text().trim();href&&linkText.includes("Single Episode")&&linkList.push({title:linkText,episodesLink:href,directLinks:[]})}):infoContainer.find("a[href]").each((_,aEl)=>{var _a;const el$=$(aEl),href=(null===(_a=el$.attr("href"))||void 0===_a?void 0:_a.trim())||"";if(!href)return;const btnText=el$.text().trim()||"Download";linkList.push({title:btnText,directLinks:[{title:btnText,link:href,type:"movie"}],episodesLink:""})}),{title:title,synopsis:synopsis,image:image,imdbId:imdbId,type:type,linkList:linkList}}).catch(err=>({title:"",synopsis:"",image:"",imdbId:"",type:"movie",linkList:[]}))};exports.getMeta=getMeta;const scrapeEpisodePage=function({link:link,providerContext:providerContext}){const{axios:axios,cheerio:cheerio}=providerContext,result=[];return axios.get(link,{headers:headers}).then(response=>{const $=cheerio.load(response.data);return $(".entry-content,.post-inner").find("h3 a").each((_,el)=>{var _a;const el$=$(el),href=null===(_a=el$.attr("href"))||void 0===_a?void 0:_a.trim(),btnText=el$.text().trim()||"Download";href&&result.push({title:btnText,link:href,type:"series"})}),result}).catch(err=>result)};exports.scrapeEpisodePage=scrapeEpisodePage;
\ No newline at end of file
diff --git a/dist/katMovieFix/posts.js b/dist/katMovieFix/posts.js
new file mode 100644
index 0000000..390acad
--- /dev/null
+++ b/dist/katMovieFix/posts.js
@@ -0,0 +1 @@
+"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator.throw(value))}catch(e){reject(e)}}function step(result){var value;result.done?resolve(result.value):(value=result.value,value instanceof P?value:new P(function(resolve){resolve(value)})).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())})};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getPosts=getPosts,exports.getSearchPosts=getSearchPosts;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"};function getPosts(_a){return __awaiter(this,arguments,void 0,function*({filter:filter,page:page=1,signal:signal,providerContext:providerContext}){return fetchPosts({filter:filter,page:page,query:"",signal:signal,providerContext:providerContext})})}function getSearchPosts(_a){return __awaiter(this,arguments,void 0,function*({searchQuery:searchQuery,page:page=1,signal:signal,providerContext:providerContext}){return fetchPosts({filter:"",page:page,query:searchQuery,signal:signal,providerContext:providerContext})})}function fetchPosts(_a){return __awaiter(this,arguments,void 0,function*({filter:filter,query:query,page:page=1,signal:signal,providerContext:providerContext}){try{const baseUrl=yield providerContext.getBaseUrl("katmoviefix");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=href=>(null==href?void 0:href.startsWith("http"))?href:`${baseUrl}${href.startsWith("/")?"":"/"}${href}`,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?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[]}})}
\ No newline at end of file
diff --git a/dist/katMovieFix/stream.js b/dist/katMovieFix/stream.js
new file mode 100644
index 0000000..24308ec
--- /dev/null
+++ b/dist/katMovieFix/stream.js
@@ -0,0 +1 @@
+"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator.throw(value))}catch(e){reject(e)}}function step(result){var value;result.done?resolve(result.value):(value=result.value,value instanceof P?value:new P(function(resolve){resolve(value)})).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())})};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getStream=getStream;const headers={Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","Cache-Control":"no-store","Accept-Language":"en-US,en;q=0.9",DNT:"1","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"};function getStream(_a){return __awaiter(this,arguments,void 0,function*({link:link,type:type,signal:signal,providerContext:providerContext}){const{axios:axios,cheerio:cheerio,extractors:extractors}=providerContext,{hubcloudExtracter:hubcloudExtracter}=extractors;try{const streamLinks=[],response=yield axios.get(link,{headers:headers}),$=cheerio.load(response.data);$("a[href*='pixeldrain.dev/api/file/']").each((_,el)=>{var _a;const href=null===(_a=$(el).attr("href"))||void 0===_a?void 0:_a.trim();href&&streamLinks.push({server:"pixeldrain",link:href,type:"mp4"})});const hubcloudStreams=yield hubcloudExtracter(link,signal);return streamLinks.push(...hubcloudStreams),streamLinks}catch(error){return[]}})}
\ No newline at end of file
diff --git a/dist/kmMovies/catalog.js b/dist/kmMovies/catalog.js
new file mode 100644
index 0000000..39aee15
--- /dev/null
+++ b/dist/kmMovies/catalog.js
@@ -0,0 +1 @@
+"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.catalog=void 0,exports.catalog=[{title:"Latest",filter:""},{title:"Bollywood",filter:"category/movies/"},{title:"Dual",filter:"category/dual-audio/"}];
\ No newline at end of file
diff --git a/dist/kmMovies/episodes.js b/dist/kmMovies/episodes.js
new file mode 100644
index 0000000..7dca7f2
--- /dev/null
+++ b/dist/kmMovies/episodes.js
@@ -0,0 +1 @@
+"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator.throw(value))}catch(e){reject(e)}}function step(result){var value;result.done?resolve(result.value):(value=result.value,value instanceof P?value:new P(function(resolve){resolve(value)})).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())})};function getEpisodeLinks(_a){return __awaiter(this,arguments,void 0,function*({url:url,providerContext:providerContext}){try{const res=yield providerContext.axios.get(url),$=providerContext.cheerio.load(res.data||""),episodes=[];return $("h4.fittexted_for_content_h4").each((_,h4El)=>{const epTitle=$(h4El).text().trim();epTitle&&$(h4El).nextUntil("h4, hr").find("a[href]").each((_,linkEl)=>{let href=($(linkEl).attr("href")||"").trim();if(!href)return;href.startsWith("http")||(href=new URL(href,url).href);const btnText=$(linkEl).text().trim()||"Watch Episode",lowerHref=href.toLowerCase();(lowerHref.includes("skydro")||lowerHref.includes("flexplayer.buzz"))&&episodes.push({title:`${epTitle} - ${btnText}`,link:href})})}),episodes.sort((a,b)=>{var _a,_b;return parseInt((null===(_a=a.title.match(/\d+/))||void 0===_a?void 0:_a[0])||"0")-parseInt((null===(_b=b.title.match(/\d+/))||void 0===_b?void 0:_b[0])||"0")}),episodes}catch(err){return[]}})}function getEpisodes(_a){return __awaiter(this,arguments,void 0,function*({url:url,providerContext:providerContext}){return yield getEpisodeLinks({url:url,providerContext:providerContext})})}Object.defineProperty(exports,"__esModule",{value:!0}),exports.getEpisodeLinks=getEpisodeLinks,exports.getEpisodes=getEpisodes;
\ No newline at end of file
diff --git a/dist/kmMovies/meta.js b/dist/kmMovies/meta.js
new file mode 100644
index 0000000..5950e40
--- /dev/null
+++ b/dist/kmMovies/meta.js
@@ -0,0 +1 @@
+"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator.throw(value))}catch(e){reject(e)}}function step(result){var value;result.done?resolve(result.value):(value=result.value,value instanceof P?value:new P(function(resolve){resolve(value)})).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())})};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getMeta=void 0;const kmmHeaders={Referer:"https://google.com","User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"},getMeta=function(_a){return __awaiter(this,arguments,void 0,function*({link:link,providerContext:providerContext}){var _b,_c;try{const{axios:axios,cheerio:cheerio}=providerContext;if(!link.startsWith("http")){link=`${yield providerContext.getBaseUrl("kmmovies")}${link.startsWith("/")?"":"/"}${link}`}const res=yield axios.get(link,{headers:kmmHeaders}),$=cheerio.load(res.data),title=$("h1, h2, .animated-text").first().text().trim()||(null===(_b=$("meta[property='og:title']").attr("content"))||void 0===_b?void 0:_b.trim())||$("title").text().trim()||"Unknown";let image=$("div.wp-slider-container img").first().attr("src")||$("meta[property='og:image']").attr("content")||$("meta[name='twitter:image']").attr("content")||"";image&&image.startsWith("http")||(image=new URL(image||"/placeholder.png",link).href);let synopsis="";$("p").each((_,el)=>{const text=$(el).text().trim();if(text&&text.length>40&&!text.toLowerCase().includes("download")&&!text.toLowerCase().includes("quality"))return synopsis=text,!1}),synopsis||(synopsis=$("meta[property='og:description']").attr("content")||$("meta[name='description']").attr("content")||"");const tags=[];res.data.toLowerCase().includes("action")&&tags.push("Action"),res.data.toLowerCase().includes("drama")&&tags.push("Drama"),res.data.toLowerCase().includes("romance")&&tags.push("Romance"),res.data.toLowerCase().includes("thriller")&&tags.push("Thriller");const cast=[];$("p").each((_,el)=>{const text=$(el).text().trim();/starring|cast/i.test(text)&&text.split(",").forEach(name=>cast.push(name.trim()))});let rating=(null===(_c=$("p").text().match(/IMDb Rating[:\s]*([0-9.]+)/i))||void 0===_c?void 0:_c[1])||"";rating&&!rating.includes("/")&&(rating+="/10");const imdbLink=$("p a[href*='imdb.com']").attr("href")||"",imdbId=imdbLink&&imdbLink.includes("/tt")?"tt"+imdbLink.split("/tt")[1].split("/")[0]:"",linkList=[],isSeries=$(".download-options-grid").length>0;return isSeries?$(".download-card").each((_,card)=>{const card$=$(card),quality=card$.find(".download-quality-text").text().trim(),size=card$.find(".download-size-info").text().trim()||"",href=card$.find("a.tabs-download-button").attr("href")||"";if(href){const titleText=`Download ${quality} ${size}`.trim();linkList.push({title:titleText,episodesLink:href,quality:quality||"AUTO",directLinks:[{link:href,title:titleText,type:"series"}]})}}):$("a.modern-download-button").each((_,a)=>{const quality=$(a).closest(".modern-option-card").find(".modern-badge").text().trim()||"AUTO",href=$(a).attr("href")||"",titleText=`Download ${quality}`;href&&linkList.push({title:titleText,episodesLink:href,quality:quality,directLinks:[{link:href,title:titleText,type:"movie"}]})}),{title:title,synopsis:synopsis,image:image,imdbId:imdbId,type:isSeries?"series":"movie",tags:tags,cast:cast,rating:rating,linkList:linkList}}catch(err){return{title:"",synopsis:"",image:"https://via.placeholder.com/300x450",imdbId:"",type:"movie",tags:[],cast:[],rating:"",linkList:[]}}})};exports.getMeta=getMeta;
\ No newline at end of file
diff --git a/dist/kmMovies/posts.js b/dist/kmMovies/posts.js
new file mode 100644
index 0000000..08f7b7b
--- /dev/null
+++ b/dist/kmMovies/posts.js
@@ -0,0 +1 @@
+"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator.throw(value))}catch(e){reject(e)}}function step(result){var value;result.done?resolve(result.value):(value=result.value,value instanceof P?value:new P(function(resolve){resolve(value)})).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())})};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getPosts=getPosts,exports.getSearchPosts=getSearchPosts;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"};function getPosts(_a){return __awaiter(this,arguments,void 0,function*({filter:filter,page:page=1,signal:signal,providerContext:providerContext}){return fetchPosts({filter:filter,page:page,query:"",signal:signal,providerContext:providerContext})})}function getSearchPosts(_a){return __awaiter(this,arguments,void 0,function*({searchQuery:searchQuery,page:page=1,signal:signal,providerContext:providerContext}){return fetchPosts({filter:"",page:page,query:searchQuery,signal:signal,providerContext:providerContext})})}function fetchPosts(_a){return __awaiter(this,arguments,void 0,function*({filter:filter,query:query,page:page=1,signal:signal,providerContext:providerContext}){try{const baseUrl=providerContext.getBaseUrl("kmmovies");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=href=>(null==href?void 0:href.startsWith("http"))?href:`${baseUrl}${href.startsWith("/")?"":"/"}${href}`,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?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[]}})}
\ No newline at end of file
diff --git a/dist/kmMovies/stream.js b/dist/kmMovies/stream.js
new file mode 100644
index 0000000..2bb6391
--- /dev/null
+++ b/dist/kmMovies/stream.js
@@ -0,0 +1 @@
+"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator.throw(value))}catch(e){reject(e)}}function step(result){var value;result.done?resolve(result.value):(value=result.value,value instanceof P?value:new P(function(resolve){resolve(value)})).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())})};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getStream=getStream;const headers={Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8","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","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(_a){return __awaiter(this,arguments,void 0,function*({link:link,type:type,signal:signal,providerContext:providerContext}){const{axios:axios,cheerio:cheerio}=providerContext;try{const streamLinks=[],res=yield axios.get(link,{headers:headers,signal:signal}),$=cheerio.load(res.data),ALLOWED_SERVERS=["ONE CLICK","ZIP-ZAP","ULTRA FAST","SKYDROP"];return $("a.download-button").each((_,el)=>{var _a;const btn=$(el),href=null===(_a=btn.attr("href"))||void 0===_a?void 0:_a.trim(),serverName=btn.text().trim()||"Unknown Server",isAllowed=ALLOWED_SERVERS.some(allowed=>serverName.toUpperCase().includes(allowed)||allowed.includes(serverName.toUpperCase()));href&&isAllowed&&streamLinks.push({server:serverName,link:href,type:"mkv"})}),streamLinks}catch(error){return[]}})}
\ No newline at end of file
diff --git a/dist/movies4u/catalog.js b/dist/movies4u/catalog.js
new file mode 100644
index 0000000..2ae3d49
--- /dev/null
+++ b/dist/movies4u/catalog.js
@@ -0,0 +1 @@
+"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.catalog=void 0,exports.catalog=[{title:"Trending",filter:""},{title:"Anime",filter:"/category/anime/"}];
\ No newline at end of file
diff --git a/dist/movies4u/episodes.js b/dist/movies4u/episodes.js
new file mode 100644
index 0000000..96a4628
--- /dev/null
+++ b/dist/movies4u/episodes.js
@@ -0,0 +1 @@
+"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator.throw(value))}catch(e){reject(e)}}function step(result){var value;result.done?resolve(result.value):(value=result.value,value instanceof P?value:new P(function(resolve){resolve(value)})).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())})};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getEpisodes=void 0;const getEpisodes=function(_a){return __awaiter(this,arguments,void 0,function*({url:url,providerContext:providerContext}){const{axios:axios,cheerio:cheerio,commonHeaders:headers}=providerContext;try{const res=yield axios.get(url,{headers:Object.assign(Object.assign({},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[]}})};exports.getEpisodes=getEpisodes;
\ No newline at end of file
diff --git a/dist/movies4u/meta.js b/dist/movies4u/meta.js
new file mode 100644
index 0000000..8fd4dbd
--- /dev/null
+++ b/dist/movies4u/meta.js
@@ -0,0 +1 @@
+"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator.throw(value))}catch(e){reject(e)}}function step(result){var value;result.done?resolve(result.value):(value=result.value,value instanceof P?value:new P(function(resolve){resolve(value)})).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())})};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getMeta=void 0;const headers={Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","Cache-Control":"no-store","Accept-Language":"en-US,en;q=0.9",DNT:"1","sec-ch-ua":'"Not_A Brand";v="8", "Chromium";v="120", "Microsoft Edge";v="120"',"sec-ch-ua-mobile":"?0","sec-ch-ua-platform":'"Windows"',"Sec-Fetch-Dest":"document","Sec-Fetch-Mode":"navigate","Sec-Fetch-Site":"none","Sec-Fetch-User":"?1",Cookie:"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=function(_a){return __awaiter(this,arguments,void 0,function*({link:link,providerContext:providerContext}){var _b,_c;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:Object.assign(Object.assign({},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===(_b=infoContainer.html())||void 0===_b?void 0:_b.match(/tt\d+/))||(null===(_c=$("a[href*='imdb.com/title/']").attr("href"))||void 0===_c?void 0:_c.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 _a;const el=$(element),titleText=el.text().trim(),qualityMatch=null===(_a=titleText.match(/\d+p\b/))||void 0===_a?void 0:_a[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),link=btnEl.attr("href");link&&directLinks.push({title:btnEl.text().trim()||"Download",link:link,type:"movie"})}),directLinks.length&&links.push({title:fullTitle,quality:qualityMatch,episodesLink:"",directLinks:directLinks})}}),result.linkList=links,result}catch(err){return emptyResult}})};exports.getMeta=getMeta;
\ No newline at end of file
diff --git a/dist/movies4u/posts.js b/dist/movies4u/posts.js
new file mode 100644
index 0000000..2321396
--- /dev/null
+++ b/dist/movies4u/posts.js
@@ -0,0 +1 @@
+"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator.throw(value))}catch(e){reject(e)}}function step(result){var value;result.done?resolve(result.value):(value=result.value,value instanceof P?value:new P(function(resolve){resolve(value)})).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())})};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getPosts=getPosts,exports.getSearchPosts=getSearchPosts;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"};function getPosts(_a){return __awaiter(this,arguments,void 0,function*({filter:filter,page:page=1,signal:signal,providerContext:providerContext}){return fetchPosts({filter:filter,page:page,query:"",signal:signal,providerContext:providerContext})})}function getSearchPosts(_a){return __awaiter(this,arguments,void 0,function*({searchQuery:searchQuery,page:page=1,signal:signal,providerContext:providerContext}){return fetchPosts({filter:"",page:page,query:searchQuery,signal:signal,providerContext:providerContext})})}function fetchPosts(_a){return __awaiter(this,arguments,void 0,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=href=>(null==href?void 0:href.startsWith("http"))?href:new URL(href,url).href,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?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[]}})}
\ No newline at end of file
diff --git a/dist/movies4u/stream.js b/dist/movies4u/stream.js
new file mode 100644
index 0000000..9e55d9e
--- /dev/null
+++ b/dist/movies4u/stream.js
@@ -0,0 +1 @@
+"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator.throw(value))}catch(e){reject(e)}}function step(result){var value;result.done?resolve(result.value):(value=result.value,value instanceof P?value:new P(function(resolve){resolve(value)})).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())})};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getStream=getStream;const headers={Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","Cache-Control":"no-store","Accept-Language":"en-US,en;q=0.9",DNT:"1","sec-ch-ua":'"Not_A Brand";v="8", "Chromium";v="120", "Microsoft Edge";v="120"',"sec-ch-ua-mobile":"?0","sec-ch-ua-platform":'"Windows"',"Sec-Fetch-Dest":"document","Sec-Fetch-Mode":"navigate","Sec-Fetch-Site":"none","Sec-Fetch-User":"?1",Cookie:"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(_a){return __awaiter(this,arguments,void 0,function*({link:link,type:type,signal:signal,providerContext:providerContext}){var _b,_c,_d,_e;const{axios:axios,cheerio:cheerio,extractors:extractors}=providerContext,{hubcloudExtracter:hubcloudExtracter}=extractors;try{const streamLinks=[];if("movie"===type){const dotlinkText=(yield axios(`${link}`,{headers:headers})).data;link=(dotlinkText.match(/{const el=$(element),title=el.text().replace(/-/g,"").replace(/:/g,""),link=el.next("p").find('.btn-outline[style="background:linear-gradient(135deg,#ed0b0b,#f2d152); color: white;"]').parent().attr("href");title&&link&&episodes.push({title:title,link:link})}),episodes}catch(err){return[]}})};exports.getEpisodes=getEpisodes;
\ No newline at end of file
diff --git a/dist/zeefliz/meta.js b/dist/zeefliz/meta.js
new file mode 100644
index 0000000..3b3ee5c
--- /dev/null
+++ b/dist/zeefliz/meta.js
@@ -0,0 +1 @@
+"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator.throw(value))}catch(e){reject(e)}}function step(result){var value;result.done?resolve(result.value):(value=result.value,value instanceof P?value:new P(function(resolve){resolve(value)})).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())})};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getMeta=void 0;const headers={Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","Cache-Control":"no-store","Accept-Language":"en-US,en;q=0.9",DNT:"1","sec-ch-ua":'"Not_A Brand";v="8", "Chromium";v="120", "Microsoft Edge";v="120"',"sec-ch-ua-mobile":"?0","sec-ch-ua-platform":'"Windows"',"Sec-Fetch-Dest":"document","Sec-Fetch-Mode":"navigate","Sec-Fetch-Site":"none","Sec-Fetch-User":"?1","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=function(_a){return __awaiter(this,arguments,void 0,function*({link:link,providerContext:providerContext}){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:Object.assign(Object.assign({},headers),{Referer:baseUrl})}),$=cheerio.load(response.data),content=$(".entry-content, .post-inner").length?$(".entry-content, .post-inner"):$("body"),result={title:"",synopsis:"",image:"",imdbId:"",type:"movie",linkList:[]};let rawTitle=content.find("h1, h2").first().text().trim();rawTitle=rawTitle.replace(/^Download\s*/i,""),result.title=rawTitle;const pageText=content.text();/Season\s*\d+/i.test(pageText)||/Episode\s*\d+/i.test(pageText)?result.type="series":result.type="movie";const imdbHref=content.find("a[href*='imdb.com/title/']").attr("href"),imdbMatch=null==imdbHref?void 0:imdbHref.match(/tt\d+/);result.imdbId=imdbMatch?imdbMatch[0]:"";let image=content.find("img").first().attr("data-src")||content.find("img").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=content.find("p").first().text().trim()||"";const links=[];return"series"===result.type?content.find("h3").each((_,h3)=>{var _a;const h3Text=$(h3).text().trim(),qualityMatch=(null===(_a=h3Text.match(/\d+p/))||void 0===_a?void 0:_a[0])||"",href=$(h3).next("p").find("a").filter((_,a)=>/v-cloud/i.test($(a).text())).first().attr("href");href&&links.push({title:h3Text,quality:qualityMatch,episodesLink:href,directLinks:[]})}):content.find("h5").each((_,h5)=>{var _a;const h5Text=$(h5).text().trim(),qualityMatch=(null===(_a=h5Text.match(/\d+p/))||void 0===_a?void 0:_a[0])||"",href=$(h5).next("p").find("a").attr("href");href&&links.push({title:h5Text,quality:qualityMatch,episodesLink:"",directLinks:[{title:"Movie",link:href,type:"movie"}]})}),result.linkList=links,result}catch(err){return emptyResult}})};exports.getMeta=getMeta;
\ No newline at end of file
diff --git a/dist/zeefliz/posts.js b/dist/zeefliz/posts.js
new file mode 100644
index 0000000..7492ef9
--- /dev/null
+++ b/dist/zeefliz/posts.js
@@ -0,0 +1 @@
+"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator.throw(value))}catch(e){reject(e)}}function step(result){var value;result.done?resolve(result.value):(value=result.value,value instanceof P?value:new P(function(resolve){resolve(value)})).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())})};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getPosts=getPosts,exports.getSearchPosts=getSearchPosts;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"};function getPosts(_a){return __awaiter(this,arguments,void 0,function*({filter:filter,page:page=1,signal:signal,providerContext:providerContext}){return fetchPosts({filter:filter,page:page,query:"",signal:signal,providerContext:providerContext})})}function getSearchPosts(_a){return __awaiter(this,arguments,void 0,function*({searchQuery:searchQuery,page:page=1,signal:signal,providerContext:providerContext}){return fetchPosts({filter:"",page:page,query:searchQuery,signal:signal,providerContext:providerContext})})}function fetchPosts(_a){return __awaiter(this,arguments,void 0,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=href=>(null==href?void 0:href.startsWith("http"))?href:new URL(href,baseUrl).href,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?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[]}})}
\ No newline at end of file
diff --git a/dist/zeefliz/stream.js b/dist/zeefliz/stream.js
new file mode 100644
index 0000000..1680f0f
--- /dev/null
+++ b/dist/zeefliz/stream.js
@@ -0,0 +1 @@
+"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator.throw(value))}catch(e){reject(e)}}function step(result){var value;result.done?resolve(result.value):(value=result.value,value instanceof P?value:new P(function(resolve){resolve(value)})).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())})};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getStream=getStream;const headers={Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","Cache-Control":"no-store","Accept-Language":"en-US,en;q=0.9",DNT:"1","sec-ch-ua":'"Not_A Brand";v="8", "Chromium";v="120", "Microsoft Edge";v="120"',"sec-ch-ua-mobile":"?0","sec-ch-ua-platform":'"Windows"',"Sec-Fetch-Dest":"document","Sec-Fetch-Mode":"navigate","Sec-Fetch-Site":"none","Sec-Fetch-User":"?1",Cookie:"ext_name=ojplmecpdpgccookcobabopnaifgidhf; cf_clearance=nJQQ9ncb6m2Nc7HoxzuphPhnQgLzI6nBmzl2D.9oY4E-1759137994-1.2.1.1-pe7DiQHVsfZjnbHWTnaNbMiTYEuk.VvpPGaMeTtHOh7p9TKG5auBIDGDDW93devKuNcOlkhe6mk4v5OcsM0H_q3Te02eCPoTNgZsW8terjwvnQUebbbe8QKjMaVsVKgnbiAxS2ESM9aB3fbiQ9diuNT6ziY.2U4mPaJ0Y4vCu3404o5qBEw5c2psIuabKUTZviA2NJvN.lx5jAFQnB.HXeXJnUuCcbQac7G1BYBfdso","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(_a){return __awaiter(this,arguments,void 0,function*({link:link,type:type,signal:signal,providerContext:providerContext}){var _b,_c,_d,_e;const{axios:axios,cheerio:cheerio,extractors:extractors}=providerContext,{hubcloudExtracter:hubcloudExtracter}=extractors;try{const streamLinks=[];if("movie"===type){const dotlinkText=(yield axios(`${link}`,{headers:headers})).data;link=(dotlinkText.match(/ {
+ try {
+ const res = await providerContext.axios.get(url);
+ const $ = providerContext.cheerio.load(res.data || "");
+ const episodes: EpisodeLink[] = [];
+
+ // Agar anchor tag me episode links diye hain
+ $("a").each((i, el) => {
+ const $el = $(el);
+ const href = ($el.attr("href") || "").trim();
+ const text = $el.text().trim();
+
+ if (href && (text.includes("Episode") || /E\d+/i.test(text) || href.includes("vcloud.lol"))) {
+ let epNum = text.match(/E\d+/i)?.[0] || text;
+ if (/^\d+$/.test(epNum)) epNum = `Episode ${epNum}`;
+ episodes.push({
+ title: epNum,
+ link: href,
+ });
+ }
+ });
+
+ return episodes;
+ } catch (err) {
+ console.error("getEpisodeLinks error:", err);
+ return [];
+ }
+}
+
+// ✅ Ye wrapper export karna zaroori hai
+export async function getEpisodes({
+ url,
+ providerContext,
+}: {
+ url: string;
+ providerContext: ProviderContext;
+}): Promise {
+ return await getEpisodeLinks({ url, providerContext });
+}
diff --git a/providers/katMovieFix/meta.ts b/providers/katMovieFix/meta.ts
new file mode 100644
index 0000000..1d8bf4f
--- /dev/null
+++ b/providers/katMovieFix/meta.ts
@@ -0,0 +1,113 @@
+import { Info, Link, ProviderContext } from "../types";
+
+const headers = {
+ Accept:
+ "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
+ "Cache-Control": "no-store",
+ "Accept-Language": "en-US,en;q=0.9",
+ DNT: "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",
+};
+
+// --- getMeta using Promise ---
+export const getMeta = function ({
+ link,
+ providerContext,
+}: {
+ link: string;
+ providerContext: ProviderContext;
+}): Promise {
+ const { axios, cheerio } = providerContext;
+
+ return axios
+ .get(link, { headers })
+ .then((response) => {
+ const $ = cheerio.load(response.data);
+ const infoContainer = $(".entry-content,.post-inner");
+
+ const title =
+ $("h1.entry-title").text().trim() ||
+ $("h2.entry-title").text().trim() ||
+ "";
+
+ const imdbMatch = infoContainer.html()?.match(/tt\d+/);
+ const imdbId = imdbMatch ? imdbMatch[0] : "";
+
+ const synopsis =
+ infoContainer
+ .find("h3:contains('SYNOPSIS'), h3:contains('synopsis')")
+ .next("p")
+ .text()
+ .trim() || "";
+
+ let image = infoContainer.find("img").first().attr("src") || "";
+ if (image.startsWith("//")) image = "https:" + image;
+
+ const type = /Season \d+/i.test(infoContainer.text()) ? "series" : "movie";
+ const linkList: Link[] = [];
+
+ if (type === "series") {
+ // Single Episode Links
+ infoContainer.find("h2 a").each((_, el) => {
+ const el$ = $(el);
+ const href = el$.attr("href")?.trim();
+ const linkText = el$.text().trim();
+ if (href && linkText.includes("Single Episode")) {
+ linkList.push({ title: linkText, episodesLink: href, directLinks: [] });
+ }
+ });
+ } else {
+ // Movies
+ infoContainer.find("a[href]").each((_, aEl) => {
+ const el$ = $(aEl);
+ const href = el$.attr("href")?.trim() || "";
+ if (!href) return;
+ const btnText = el$.text().trim() || "Download";
+ linkList.push({
+ title: btnText,
+ directLinks: [{ title: btnText, link: href, type: "movie" }],
+ episodesLink: "",
+ });
+ });
+ }
+
+ return { title, synopsis, image, imdbId, type, linkList };
+ })
+ .catch((err) => {
+ console.error("getMeta error:", err);
+ return { title: "", synopsis: "", image: "", imdbId: "", type: "movie", linkList: [] };
+ });
+};
+
+// --- scrapeEpisodePage using Promise ---
+export const scrapeEpisodePage = function ({
+ link,
+ providerContext,
+}: {
+ link: string;
+ providerContext: ProviderContext;
+}): Promise<{ title: string; link: string; type: "series" }[]> {
+ const { axios, cheerio } = providerContext;
+ const result: { title: string; link: string; type: "series" }[] = [];
+
+ return axios
+ .get(link, { headers })
+ .then((response) => {
+ const $ = cheerio.load(response.data);
+ $(".entry-content,.post-inner")
+ .find("h3 a")
+ .each((_, el) => {
+ const el$ = $(el);
+ const href = el$.attr("href")?.trim();
+ const btnText = el$.text().trim() || "Download";
+ if (href) result.push({ title: btnText, link: href, type: "series" });
+ });
+ return result;
+ })
+ .catch((err) => {
+ console.error("scrapeEpisodePage error:", err);
+ return result;
+ });
+};
diff --git a/providers/katMovieFix/posts.ts b/providers/katMovieFix/posts.ts
new file mode 100644
index 0000000..a1c3b88
--- /dev/null
+++ b/providers/katMovieFix/posts.ts
@@ -0,0 +1,145 @@
+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",
+};
+
+// --- Normal catalog posts ---
+export async function getPosts({
+ filter,
+ page = 1,
+ signal,
+ providerContext,
+}: {
+ filter?: string;
+ page?: number;
+ signal?: AbortSignal;
+ providerContext: ProviderContext;
+}): Promise {
+ return fetchPosts({ filter, page, query: "", signal, providerContext });
+}
+
+// --- Search posts ---
+export async function getSearchPosts({
+ searchQuery,
+ page = 1,
+ signal,
+ providerContext,
+}: {
+ searchQuery: string;
+ page?: number;
+ signal?: AbortSignal;
+ providerContext: ProviderContext;
+}): Promise {
+ return fetchPosts({
+ filter: "",
+ page,
+ query: searchQuery,
+ signal,
+ providerContext,
+ });
+}
+
+// --- Core function ---
+async function fetchPosts({
+ filter,
+ query,
+ page = 1,
+ signal,
+ providerContext,
+}: {
+ filter?: string;
+ query?: string;
+ page?: number;
+ signal?: AbortSignal;
+ providerContext: ProviderContext;
+}): Promise {
+ try {
+ const baseUrl = await providerContext.getBaseUrl("katmoviefix");
+ console.log("Base URL:", baseUrl);
+ let url: string;
+
+ // --- Build URL for category filter or search query
+ if (query && query.trim()) {
+ url = `${baseUrl}/?s=${encodeURIComponent(query)}${
+ page > 1 ? `&paged=${page}` : ""
+ }`;
+ } else if (filter) {
+ url = filter.startsWith("/")
+ ? `${baseUrl}${filter.replace(/\/$/, "")}${
+ page > 1 ? `/page/${page}` : ""
+ }`
+ : `${baseUrl}/${filter}${page > 1 ? `/page/${page}` : ""}`;
+ } else {
+ url = `${baseUrl}${page > 1 ? `/page/${page}` : ""}`;
+ }
+
+ const { axios, cheerio } = providerContext;
+ const res = await axios.get(url, { headers: defaultHeaders, signal });
+ const $ = cheerio.load(res.data || "");
+
+ const resolveUrl = (href: string) =>
+ href?.startsWith("http")
+ ? href
+ : `${baseUrl}${href.startsWith("/") ? "" : "/"}${href}`;
+
+ const seen = new Set();
+ const catalog: Post[] = [];
+
+ // --- HDMovie2 selectors
+ const POST_SELECTORS = [
+ ".pstr_box",
+ "article",
+ ".result-item",
+ ".post",
+ ".item",
+ ".thumbnail",
+ ".latest-movies",
+ ".movie-item",
+ ].join(",");
+
+ $(POST_SELECTORS).each((_, el) => {
+ const card = $(el);
+ let link = card.find("a[href]").first().attr("href") || "";
+ if (!link) return;
+ link = resolveUrl(link);
+ if (seen.has(link)) return;
+
+ let title =
+ card.find("h2").first().text().trim() ||
+ card.find("a[title]").first().attr("title")?.trim() ||
+ card.text().trim();
+ title = title
+ .replace(/\[.*?\]/g, "")
+ .replace(/\(.+?\)/g, "")
+ .replace(/\s{2,}/g, " ")
+ .trim();
+ if (!title) return;
+
+ const img =
+ card.find("img").first().attr("src") ||
+ card.find("img").first().attr("data-src") ||
+ card.find("img").first().attr("data-original") ||
+ "";
+ const image = img ? resolveUrl(img) : "";
+
+ seen.add(link);
+ catalog.push({ title, link, image });
+ });
+
+ return catalog.slice(0, 100);
+ } catch (err) {
+ console.error(
+ "HDMovie2 fetchPosts error:",
+ err instanceof Error ? err.message : String(err)
+ );
+ return [];
+ }
+}
diff --git a/providers/katMovieFix/stream.ts b/providers/katMovieFix/stream.ts
new file mode 100644
index 0000000..a0f8b21
--- /dev/null
+++ b/providers/katMovieFix/stream.ts
@@ -0,0 +1,54 @@
+import { ProviderContext, Stream } from "../types";
+
+const headers = {
+ Accept:
+ "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
+ "Cache-Control": "no-store",
+ "Accept-Language": "en-US,en;q=0.9",
+ DNT: "1",
+ "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",
+};
+
+export async function getStream({
+ link,
+ type,
+ signal,
+ providerContext,
+}: {
+ link: string;
+ type: string;
+ signal: AbortSignal;
+ providerContext: ProviderContext;
+}) {
+ const { axios, cheerio, extractors } = providerContext;
+ const { hubcloudExtracter } = extractors;
+
+ try {
+ const streamLinks: Stream[] = [];
+ const response = await axios.get(link, { headers });
+ const $ = cheerio.load(response.data);
+
+ // --- PixelDrain link scrape ---
+ $("a[href*='pixeldrain.dev/api/file/']").each((_, el) => {
+ const href = $(el).attr("href")?.trim();
+ if (href) {
+ streamLinks.push({
+ server: "pixeldrain",
+ link: href,
+ type: "mp4",
+ });
+ }
+ });
+
+ // --- hubcloud extraction ---
+ const hubcloudStreams = await hubcloudExtracter(link, signal);
+ streamLinks.push(...hubcloudStreams);
+
+ return streamLinks;
+ } catch (error: any) {
+ console.log("getStream error: ", error);
+ return [];
+ }
+}
diff --git a/providers/kmMovies/catalog.ts b/providers/kmMovies/catalog.ts
new file mode 100644
index 0000000..878c417
--- /dev/null
+++ b/providers/kmMovies/catalog.ts
@@ -0,0 +1,5 @@
+export const catalog = [
+ { title: "Latest", filter: "" },
+ { title: "Bollywood", filter: "category/movies/" },
+ { title: "Dual", filter: "category/dual-audio/" },
+];
\ No newline at end of file
diff --git a/providers/kmMovies/episodes.ts b/providers/kmMovies/episodes.ts
new file mode 100644
index 0000000..f7c5f8e
--- /dev/null
+++ b/providers/kmMovies/episodes.ts
@@ -0,0 +1,64 @@
+import { EpisodeLink, ProviderContext } from "../types";
+
+export async function getEpisodeLinks({
+ url,
+ providerContext,
+}: {
+ url: string;
+ providerContext: ProviderContext;
+}): Promise {
+ try {
+ const res = await providerContext.axios.get(url);
+ const $ = providerContext.cheerio.load(res.data || "");
+ const episodes: EpisodeLink[] = [];
+
+ $("h4.fittexted_for_content_h4").each((_, h4El) => {
+ const epTitle = $(h4El).text().trim();
+ if (!epTitle) return;
+
+ // Next until next