diff --git a/dist/4khdhub/meta.js b/dist/4khdhub/meta.js index 8bf9eab..5d0ed04 100644 --- a/dist/4khdhub/meta.js +++ b/dist/4khdhub/meta.js @@ -1 +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 getMeta=function(_a){return __awaiter(this,arguments,void 0,function*({link:link,providerContext:providerContext}){try{const{axios:axios,cheerio:cheerio,getBaseUrl:getBaseUrl}=providerContext,url=`${yield getBaseUrl("4khdhub")}${link}`,data=(yield axios.get(url)).data,$=cheerio.load(data),type=$(".season-content").length>0?"series":"movie",imdbId="",title=$(".page-title").text()||"",image=$(".poster-image").find("img").attr("src")||"",synopsis=$(".content-section").find("p").first().text().trim()||"",links=[];return"series"===type?$(".season-item").map((i,element)=>{const title=$(element).find(".episode-title").text();let directLinks=[];$(element).find(".episode-download-item").map((i,element)=>{const title=$(element).find(".episode-file-info").text().trim().replace("\n"," "),link=$(element).find(".episode-links").find("a:contains('HubDrive')").attr("href");title&&link&&directLinks.push({title:title,link:link})}),title&&directLinks.length>0&&links.push({title:title,directLinks:directLinks})}):$(".download-item").map((i,element)=>{const title=$(element).find(".flex-1.text-left.font-semibold").text().trim(),link=$(element).find(".grid.grid-cols-2.gap-2").find("a:contains('HubDrive')").attr("href");title&&link&&links.push({title:title,directLinks:[{title:title,link:link}]})}),{title:title,synopsis:synopsis,image:image,imdbId:imdbId,type:type,linkList:links}}catch(err){return{title:"",synopsis:"",image:"",imdbId:"",type:"movie",linkList:[]}}})};exports.getMeta=getMeta; \ No newline at end of file +"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 getMeta=function(_a){return __awaiter(this,arguments,void 0,function*({link:link,providerContext:providerContext}){try{const{axios:axios,cheerio:cheerio,getBaseUrl:getBaseUrl}=providerContext,url=`${yield getBaseUrl("4khdhub")}${link}`,data=(yield axios.get(url)).data,$=cheerio.load(data),type=$(".season-content").length>0?"series":"movie",imdbId="",title=$(".page-title").text()||"",image=$(".poster-image").find("img").attr("src")||"",synopsis=$(".content-section").find("p").first().text().trim()||"",links=[];return"series"===type?$(".season-item").map((i,element)=>{const title=$(element).find(".episode-title").text();let directLinks=[];$(element).find(".episode-download-item").map((i,element)=>{const title=$(element).find(".episode-file-info").text().trim().replace("\n"," "),link=$(element).find(".episode-links").find("a:contains('HubCloud')").attr("href");title&&link&&directLinks.push({title:title,link:link})}),title&&directLinks.length>0&&links.push({title:title,directLinks:directLinks})}):$(".download-item").map((i,element)=>{const title=$(element).find(".flex-1.text-left.font-semibold").text().trim(),link=$(element).find(".grid.grid-cols-2.gap-2").find("a:contains('HubCloud')").attr("href");title&&link&&links.push({title:title,directLinks:[{title:title,link:link}]})}),{title:title,synopsis:synopsis,image:image,imdbId:imdbId,type:type,linkList:links}}catch(err){return{title:"",synopsis:"",image:"",imdbId:"",type:"movie",linkList:[]}}})};exports.getMeta=getMeta; \ No newline at end of file diff --git a/dist/4khdhub/stream.js b/dist/4khdhub/stream.js index e246f96..ad02611 100644 --- a/dist/4khdhub/stream.js +++ b/dist/4khdhub/stream.js @@ -1 +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 getStream(_a){return __awaiter(this,arguments,void 0,function*({link:link,signal:signal,providerContext:providerContext}){var _b,_c,_d,_e;const{axios:axios,cheerio:cheerio,extractors:extractors,commonHeaders:headers}=providerContext,{hubcloudExtracter:hubcloudExtracter}=extractors;let hubdriveLink="";if(link.includes("hubdrive")){const hubdriveText=(yield axios.get(link,{headers:headers,signal:signal})).data;hubdriveLink=cheerio.load(hubdriveText)(".btn.btn-primary.btn-user.btn-success1.m-1").attr("href")||link}else{const decodedString=decodeString(null===(_d=null===(_c=null===(_b=(yield axios.get(link,{headers:headers,signal:signal})).data.split("s('o','"))||void 0===_b?void 0:_b[1])||void 0===_c?void 0:_c.split("',180"))||void 0===_d?void 0:_d[0]);link=atob(null==decodedString?void 0:decodedString.o);const redirectLink=yield getRedirectLinks(link,signal,headers),redirectLinkText=(yield axios.get(redirectLink,{headers:headers,signal:signal})).data;if(hubdriveLink=cheerio.load(redirectLinkText)('h3:contains("1080p")').find("a").attr("href")||redirectLinkText.match(/href="(https:\/\/hubcloud\.[^\/]+\/drive\/[^"]+)"/)[1],hubdriveLink.includes("hubdrive")){const hubdriveText=(yield axios.get(hubdriveLink,{headers:headers,signal:signal})).data;hubdriveLink=cheerio.load(hubdriveText)(".btn.btn-primary.btn-user.btn-success1.m-1").attr("href")||hubdriveLink}}const hubcloudLink=(null===(_e=(yield axios.get(hubdriveLink,{headers:headers,signal:signal})).data.match(//i))||void 0===_e?void 0:_e[1])||hubdriveLink;try{return yield hubcloudExtracter(hubcloudLink,signal)}catch(error){return[]}})}Object.defineProperty(exports,"__esModule",{value:!0}),exports.getStream=getStream,exports.getRedirectLinks=getRedirectLinks,exports.decodeString=decodeString;const encode=function(value){return btoa(value.toString())},decode=function(value){return void 0===value?"":atob(value.toString())},pen=function(value){return value.replace(/[a-zA-Z]/g,function(_0x1a470e){return String.fromCharCode((_0x1a470e<="Z"?90:122)>=(_0x1a470e=_0x1a470e.charCodeAt(0)+13)?_0x1a470e:_0x1a470e-26)})},abortableTimeout=(ms,{signal:signal}={})=>new Promise((resolve,reject)=>{if(signal&&signal.aborted)return reject(new Error("Aborted"));const timer=setTimeout(resolve,ms);signal&&signal.addEventListener("abort",()=>{clearTimeout(timer),reject(new Error("Aborted"))})});function getRedirectLinks(link,signal,headers){return __awaiter(this,void 0,void 0,function*(){try{const res=yield fetch(link,{headers:headers,signal:signal}),resText=yield res.text();for(var match,regex=/ck\('_wp_http_\d+','([^']+)'/g,combinedString="";null!==(match=regex.exec(resText));)combinedString+=match[1];const decodedString=decode(pen(decode(decode(combinedString)))),data=JSON.parse(decodedString),token=encode(null==data?void 0:data.data),blogLink=(null==data?void 0:data.wp_http1)+"?re="+token;let wait=abortableTimeout(1e3*(Number(null==data?void 0:data.total_time)+3),{signal:signal});yield wait;let vcloudLink="Invalid Request";for(;vcloudLink.includes("Invalid Request");){const blogRes=yield fetch(blogLink,{headers:headers,signal:signal}),blogResText=yield blogRes.text();if(!blogResText.includes("Invalid Request")){vcloudLink=blogResText.match(/var reurl = "([^"]+)"/)||"";break}}return blogLink||link}catch(err){return link}})}function rot13(str){return str.replace(/[a-zA-Z]/g,function(char){const charCode=char.charCodeAt(0),baseCharCode=char<="Z"?65:97;return String.fromCharCode((charCode-baseCharCode+13)%26+baseCharCode)})}function decodeString(encryptedString){try{let decoded=atob(encryptedString);return decoded=atob(decoded),decoded=rot13(decoded),decoded=atob(decoded),JSON.parse(decoded)}catch(error){return null}} \ No newline at end of file +"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 getStream(_a){return __awaiter(this,arguments,void 0,function*({link:link,signal:signal,providerContext:providerContext}){var _b,_c,_d,_e;const{axios:axios,cheerio:cheerio,extractors:extractors,commonHeaders:headers}=providerContext,{hubcloudExtracter:hubcloudExtracter}=extractors;let hubdriveLink="";if(link.includes("hubdrive")){const hubdriveText=(yield axios.get(link,{headers:headers,signal:signal})).data;hubdriveLink=cheerio.load(hubdriveText)(".btn.btn-primary.btn-user.btn-success1.m-1").attr("href")||link}else{const decodedString=decodeString(null===(_d=null===(_c=null===(_b=(yield axios.get(link,{headers:headers,signal:signal})).data.split("s('o','"))||void 0===_b?void 0:_b[1])||void 0===_c?void 0:_c.split("',180"))||void 0===_d?void 0:_d[0]);link=atob(null==decodedString?void 0:decodedString.o);const redirectLink=yield getRedirectLinks(link,signal,headers);if(redirectLink.includes("hubcloud")||redirectLink.includes("/drive/"))return yield hubcloudExtracter(redirectLink,signal);const redirectLinkText=(yield axios.get(redirectLink,{headers:headers,signal:signal})).data;if(hubdriveLink=cheerio.load(redirectLinkText)('h3:contains("1080p")').find("a").attr("href")||redirectLinkText.match(/href="(https:\/\/hubcloud\.[^\/]+\/drive\/[^"]+)"/)[1],hubdriveLink.includes("hubdrive")){const hubdriveText=(yield axios.get(hubdriveLink,{headers:headers,signal:signal})).data;hubdriveLink=cheerio.load(hubdriveText)(".btn.btn-primary.btn-user.btn-success1.m-1").attr("href")||hubdriveLink}}const hubcloudLink=(null===(_e=(yield axios.get(hubdriveLink,{headers:headers,signal:signal})).data.match(//i))||void 0===_e?void 0:_e[1])||hubdriveLink;try{return yield hubcloudExtracter(hubcloudLink,signal)}catch(error){return[]}})}Object.defineProperty(exports,"__esModule",{value:!0}),exports.getStream=getStream,exports.getRedirectLinks=getRedirectLinks,exports.decodeString=decodeString;const encode=function(value){return btoa(value.toString())},decode=function(value){return void 0===value?"":atob(value.toString())},pen=function(value){return value.replace(/[a-zA-Z]/g,function(_0x1a470e){return String.fromCharCode((_0x1a470e<="Z"?90:122)>=(_0x1a470e=_0x1a470e.charCodeAt(0)+13)?_0x1a470e:_0x1a470e-26)})},abortableTimeout=(ms,{signal:signal}={})=>new Promise((resolve,reject)=>{if(signal&&signal.aborted)return reject(new Error("Aborted"));const timer=setTimeout(resolve,ms);signal&&signal.addEventListener("abort",()=>{clearTimeout(timer),reject(new Error("Aborted"))})});function getRedirectLinks(link,signal,headers){return __awaiter(this,void 0,void 0,function*(){try{const res=yield fetch(link,{headers:headers,signal:signal}),resText=yield res.text();for(var match,regex=/ck\('_wp_http_\d+','([^']+)'/g,combinedString="";null!==(match=regex.exec(resText));)combinedString+=match[1];const decodedString=decode(pen(decode(decode(combinedString)))),data=JSON.parse(decodedString),token=encode(null==data?void 0:data.data),blogLink=(null==data?void 0:data.wp_http1)+"?re="+token;let wait=abortableTimeout(1e3*(Number(null==data?void 0:data.total_time)+3),{signal:signal});yield wait;let vcloudLink="Invalid Request";for(;vcloudLink.includes("Invalid Request");){const blogRes=yield fetch(blogLink,{headers:headers,signal:signal}),blogResText=yield blogRes.text();if(!blogResText.includes("Invalid Request")){vcloudLink=blogResText.match(/var reurl = "([^"]+)"/)||"";break}}return blogLink||link}catch(err){return link}})}function rot13(str){return str.replace(/[a-zA-Z]/g,function(char){const charCode=char.charCodeAt(0),baseCharCode=char<="Z"?65:97;return String.fromCharCode((charCode-baseCharCode+13)%26+baseCharCode)})}function decodeString(encryptedString){try{let decoded=atob(encryptedString);return decoded=atob(decoded),decoded=rot13(decoded),decoded=atob(decoded),JSON.parse(decoded)}catch(error){return null}} \ No newline at end of file diff --git a/manifest.json b/manifest.json index 1ef2a04..25da4aa 100644 --- a/manifest.json +++ b/manifest.json @@ -34,7 +34,7 @@ { "display_name": "4khdHub", "value": "4khdhub", - "version": "1.6", + "version": "1.7", "icon": "", "type": "global", "disabled": false diff --git a/providers/4khdhub/meta.ts b/providers/4khdhub/meta.ts index fa8e57b..9a608b1 100644 --- a/providers/4khdhub/meta.ts +++ b/providers/4khdhub/meta.ts @@ -38,9 +38,9 @@ export const getMeta = async function ({ .replace("\n", " "); const link = $(element) .find(".episode-links") - .find("a:contains('HubDrive')") + .find("a:contains('HubCloud')") .attr("href"); - console.log("title⭐", title, "link", link); + // console.log("title⭐", title, "link", link); if (title && link) { directLinks.push({ title, link }); } @@ -60,7 +60,7 @@ export const getMeta = async function ({ .trim(); const link = $(element) .find(".grid.grid-cols-2.gap-2") - .find("a:contains('HubDrive')") + .find("a:contains('HubCloud')") .attr("href"); // console.log("title⭐", title, "link", link); if (title && link) { diff --git a/providers/4khdhub/stream.ts b/providers/4khdhub/stream.ts index 62f2503..e29785d 100644 --- a/providers/4khdhub/stream.ts +++ b/providers/4khdhub/stream.ts @@ -31,13 +31,17 @@ export async function getStream({ const decodedString: any = decodeString(encryptedString); link = atob(decodedString?.o); const redirectLink = await getRedirectLinks(link, signal, headers); + console.log("redirectLink", redirectLink); + if (redirectLink.includes("hubcloud") || redirectLink.includes("/drive/")) { + return await hubcloudExtracter(redirectLink, signal); + } const redirectLinkRes = await axios.get(redirectLink, { headers, signal }); const redirectLinkText = redirectLinkRes.data; const $ = cheerio.load(redirectLinkText); hubdriveLink = $('h3:contains("1080p")').find("a").attr("href") || redirectLinkText.match( - /href="(https:\/\/hubcloud\.[^\/]+\/drive\/[^"]+)"/ + /href="(https:\/\/hubcloud\.[^\/]+\/drive\/[^"]+)"/, )[1]; if (hubdriveLink.includes("hubdrive")) { const hubdriveRes = await axios.get(hubdriveLink, { headers, signal }); @@ -52,7 +56,7 @@ export async function getStream({ const hubcloudText = hubdriveLinkRes.data; const hubcloudLink = hubcloudText.match( - //i + //i, )?.[1] || hubdriveLink; try { return await hubcloudExtracter(hubcloudLink, signal); @@ -77,14 +81,14 @@ const pen = function (value: string) { (_0x1a470e <= "Z" ? 90 : 122) >= (_0x1a470e = _0x1a470e.charCodeAt(0) + 13) ? _0x1a470e - : _0x1a470e - 26 + : _0x1a470e - 26, ); }); }; const abortableTimeout = ( ms: number, - { signal }: { signal?: AbortSignal } = {} + { signal }: { signal?: AbortSignal } = {}, ) => { return new Promise((resolve, reject) => { if (signal && signal.aborted) { @@ -105,7 +109,7 @@ const abortableTimeout = ( export async function getRedirectLinks( link: string, signal: AbortSignal, - headers: any + headers: any, ) { try { const res = await fetch(link, { headers, signal }); @@ -160,7 +164,7 @@ function rot13(str: string) { const isUpperCase = char <= "Z"; const baseCharCode = isUpperCase ? 65 : 97; return String.fromCharCode( - ((charCode - baseCharCode + 13) % 26) + baseCharCode + ((charCode - baseCharCode + 13) % 26) + baseCharCode, ); }); }