diff --git a/src/extractor/StreamWish.ts b/src/extractor/StreamWish.ts index 3669608..e5991bf 100644 --- a/src/extractor/StreamWish.ts +++ b/src/extractor/StreamWish.ts @@ -9,110 +9,36 @@ export class StreamWish extends Extractor { public override viaMediaFlowProxy = true; private readonly domains = [ - 'streamwish.com', - 'streamwish.to', - 'ajmidyad.sbs', - 'khadhnayad.sbs', - 'yadmalik.sbs', - 'hayaatieadhab.sbs', - 'kharabnahs.sbs', - 'atabkhha.sbs', - 'atabknha.sbs', - 'atabknhk.sbs', - 'atabknhs.sbs', - 'abkrzkr.sbs', - 'abkrzkz.sbs', - 'wishembed.pro', - 'mwish.pro', - 'strmwis.xyz', - 'awish.pro', - 'dwish.pro', - 'vidmoviesb.xyz', - 'embedwish.com', - 'cilootv.store', - 'uqloads.xyz', - 'tuktukcinema.store', - 'doodporn.xyz', - 'ankrzkz.sbs', - 'volvovideo.top', - 'streamwish.site', - 'wishfast.top', - 'ankrznm.sbs', - 'sfastwish.com', - 'eghjrutf.sbs', - 'eghzrutw.sbs', - 'guxhag.com', - 'playembed.online', - 'egsyxurh.sbs', - 'egtpgrvh.sbs', - 'flaswish.com', - 'obeywish.com', - 'cdnwish.com', - 'javsw.me', - 'cinemathek.online', - 'trgsfjll.sbs', - 'fsdcmo.sbs', - 'hailindihg.com', - 'anime4low.sbs', - 'mohahhda.site', - 'ma2d.store', - 'dancima.shop', - 'swhoi.com', - 'aiavh.com', - 'gsfqzmqu.sbs', - 'jodwish.com', - 'swdyu.com', - 'strwish.com', - 'asnwish.com', - 'kravaxxa.com', - 'wishonly.site', - 'playerwish.com', - 'katomen.store', - 'hlswish.com', - 'streamwish.fun', - 'swishsrv.com', - 'iplayerhls.com', - 'hlsflast.com', - '4yftwvrdz7.sbs', - 'ghbrisk.com', - 'hgbazooka.com', - 'eb8gfmjn71.sbs', - 'cybervynx.com', - 'edbrdl7pab.sbs', - 'stbhg.click', - 'dhcplay.com', - 'strwish.xyz', - 'gradehgplus.com', - 'tryzendm.com', - 'hglink.to', - 'dumbalag.com', - 'haxloppd.com', - 'davioad.com', - 'uasopt.com', + 'streamwish.com', 'streamwish.to', 'ajmidyad.sbs', 'khadhnayad.sbs', 'yadmalik.sbs', + 'hayaatieadhab.sbs', 'kharabnahs.sbs', 'atabkhha.sbs', 'atabknha.sbs', 'atabknhk.sbs', + 'atabknhs.sbs', 'abkrzkr.sbs', 'abkrzkz.sbs', 'wishembed.pro', 'mwish.pro', 'strmwis.xyz', + 'awish.pro', 'dwish.pro', 'vidmoviesb.xyz', 'embedwish.com', 'cilootv.store', 'uqloads.xyz', + 'tuktukcinema.store', 'doodporn.xyz', 'ankrzkz.sbs', 'volvovideo.top', 'streamwish.site', + 'wishfast.top', 'ankrznm.sbs', 'sfastwish.com', 'eghjrutf.sbs', 'eghzrutw.sbs', 'guxhag.com', + 'playembed.online', 'egsyxurh.sbs', 'egtpgrvh.sbs', 'flaswish.com', 'obeywish.com', + 'cdnwish.com', 'javsw.me', 'cinemathek.online', 'trgsfjll.sbs', 'fsdcmo.sbs', 'hailindihg.com', + 'anime4low.sbs', 'mohahhda.site', 'ma2d.store', 'dancima.shop', 'swhoi.com', 'aiavh.com', + 'gsfqzmqu.sbs', 'jodwish.com', 'swdyu.com', 'strwish.com', 'asnwish.com', 'kravaxxa.com', + 'wishonly.site', 'playerwish.com', 'katomen.store', 'hlswish.com', 'streamwish.fun', + 'swishsrv.com', 'iplayerhls.com', 'hlsflast.com', '4yftwvrdz7.sbs', 'ghbrisk.com', + 'hgbazooka.com', 'eb8gfmjn71.sbs', 'cybervynx.com', 'edbrdl7pab.sbs', 'stbhg.click', + 'dhcplay.com', 'strwish.xyz', 'gradehgplus.com', 'tryzendm.com', 'hglink.to', 'dumbalag.com', + 'haxloppd.com', 'davioad.com', 'uasopt.com' ]; private readonly dmcaHosts = [ - 'hgplaycdn.com', - 'habetar.com', - 'yuguaab.com', - 'guxhag.com', - 'auvexiug.com', - 'xenolyzb.com', + 'hgplaycdn.com', 'habetar.com', 'yuguaab.com', + 'guxhag.com', 'auvexiug.com', 'xenolyzb.com' ]; private readonly ruleHosts = [ - 'dhcplay.com', - 'hglink.to', - 'test.hglink.to', - 'wish-redirect.aiavh.com', + 'dhcplay.com', 'hglink.to', 'test.hglink.to', + 'wish-redirect.aiavh.com' ]; private readonly mainHosts = [ - 'kravaxxa.com', - 'davioad.com', - 'haxloppd.com', - 'tryzendm.com', - 'dumbalag.com', + 'kravaxxa.com', 'davioad.com', 'haxloppd.com', + 'tryzendm.com', 'dumbalag.com' ]; public supports(_ctx: Context, url: URL): boolean { @@ -120,16 +46,22 @@ export class StreamWish extends Extractor { } public override normalize(url: URL): URL { - return new URL( - url.href - .replace('/f/', '/e/') - .replace('/d/', '/e/'), - ); + return new URL(url.href.replace('/f/', '/e/').replace('/d/', '/e/')); } private rand(arr: T[]): T { + if (arr.length === 0) { + throw new Error('rand(): empty array'); + } + const index = Math.floor(Math.random() * arr.length); - return arr[index]; + const value = arr[index]; + + if (value === undefined) { + throw new Error('rand(): unexpected undefined'); + } + + return value; } private getMediaId(path: string): string { @@ -146,10 +78,9 @@ export class StreamWish extends Extractor { private rewrite(url: URL): URL { const mediaId = this.getMediaId(url.pathname); - const finalHost - = this.ruleHosts.includes(url.host) - ? this.rand(this.mainHosts) - : this.rand(this.dmcaHosts); + const finalHost = this.ruleHosts.includes(url.host) + ? this.rand(this.mainHosts) + : this.rand(this.dmcaHosts); return new URL(`https://${finalHost}/e/${mediaId}`); } @@ -158,13 +89,13 @@ export class StreamWish extends Extractor { ctx: Context, url: URL, meta: Meta, - originalUrl?: URL, + originalUrl?: URL ): Promise { const normalized = this.normalize(url); const rewritten = this.rewrite(normalized); const headers = { - Referer: meta.referer ?? originalUrl?.href ?? rewritten.href, + Referer: meta.referer ?? originalUrl?.href ?? rewritten.href }; const proxyUrl = await buildMediaFlowProxyExtractorStreamUrl( @@ -172,7 +103,7 @@ export class StreamWish extends Extractor { this.fetcher, this.id, rewritten, - headers, + headers ); return [ @@ -183,8 +114,8 @@ export class StreamWish extends Extractor { sourceId: this.id, ttl: this.ttl, requestHeaders: headers, - meta, - }, + meta + } ]; } }