From eb8e6bb14ab81033ea0d2e08e9ff67e913a33e48 Mon Sep 17 00:00:00 2001 From: GSTAR <44748406+GLlgGL@users.noreply.github.com> Date: Sun, 30 Nov 2025 17:10:01 +0100 Subject: [PATCH 1/5] Create StreamWish.ts The streamwish is using fake png headers on their ts segments so we need mediaflow for this extractor. I already pr my finding to the mediaflow author and he is now merging both the fake steip bytes and also streamwish support for this extractor. p.s this eztractor uses dynamic domin redirections so better leave the logic of domains intact if you dont want to spend your time lol. --- src/extractor/StreamWish.ts | 114 ++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 src/extractor/StreamWish.ts diff --git a/src/extractor/StreamWish.ts b/src/extractor/StreamWish.ts new file mode 100644 index 0000000..c6cd5a0 --- /dev/null +++ b/src/extractor/StreamWish.ts @@ -0,0 +1,114 @@ +import { Context, Format, Meta, UrlResult } from "../types"; +import { buildMediaFlowProxyExtractorStreamUrl } from "../utils"; +import { Extractor } from "./Extractor"; + +export class StreamWish extends Extractor { + public readonly id = "StreamWish"; + public readonly label = "StreamWish(MFP)"; + + 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' + ]; + + + private readonly dmcaHosts = [ + "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" + ]; + + private readonly mainHosts = [ + "kravaxxa.com", "davioad.com", "haxloppd.com", + "tryzendm.com", "dumbalag.com" + ]; + + public supports(_ctx: Context, url: URL): boolean { + return this.domains.some(d => url.host.includes(d)); + } + + public override normalize(url: URL): URL { + return new URL(url.href.replace("/f/", "/e/").replace("/d/", "/e/")); + } + + private rand(arr: T[]): T { + const index = Math.floor(Math.random() * arr.length); + return arr[index]!; +} + + + private getMediaId(path: string): string { + const m = path.match(/\/(?:e|f|d)\/([^/?#]+)/); + const id = m?.[1]; + + if (!id) { + throw new Error("StreamWish: Invalid media ID"); + } + + return id; +} + + + 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); + + return new URL(`https://${finalHost}/e/${mediaId}`); +} + + protected async extractInternal( + ctx: Context, + url: URL, + meta: Meta, + originalUrl?: URL + ): Promise { + + const normalized = this.normalize(url); + const rewritten = this.rewrite(normalized); + + const headers = { + Referer: meta.referer ?? originalUrl?.href ?? rewritten.href + }; + + const proxyUrl = await buildMediaFlowProxyExtractorStreamUrl( + ctx, + this.fetcher, + this.id, + rewritten, + headers + ); + + return [ + { + url: proxyUrl, + format: Format.hls, + label: this.label, + sourceId: this.id, + ttl: this.ttl, + meta + } + ]; + } +} From 4040fe935d6e53d0659270e8c41976f72cf005ae Mon Sep 17 00:00:00 2001 From: GSTAR <44748406+GLlgGL@users.noreply.github.com> Date: Mon, 1 Dec 2025 00:33:06 +0100 Subject: [PATCH 2/5] Update StreamWish.ts Lints fix. --- src/extractor/StreamWish.ts | 250 +++++++++++++++++++++++------------- 1 file changed, 163 insertions(+), 87 deletions(-) diff --git a/src/extractor/StreamWish.ts b/src/extractor/StreamWish.ts index c6cd5a0..3669608 100644 --- a/src/extractor/StreamWish.ts +++ b/src/extractor/StreamWish.ts @@ -1,114 +1,190 @@ -import { Context, Format, Meta, UrlResult } from "../types"; -import { buildMediaFlowProxyExtractorStreamUrl } from "../utils"; -import { Extractor } from "./Extractor"; +import { Context, Format, Meta, UrlResult } from '../types'; +import { buildMediaFlowProxyExtractorStreamUrl } from '../utils'; +import { Extractor } from './Extractor'; export class StreamWish extends Extractor { - public readonly id = "StreamWish"; - public readonly label = "StreamWish(MFP)"; + public readonly id = 'StreamWish'; + public readonly label = 'StreamWish(MFP)'; - public override viaMediaFlowProxy = true; + 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' - ]; + 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', + ]; - - private readonly dmcaHosts = [ - "hgplaycdn.com", "habetar.com", "yuguaab.com", - "guxhag.com", "auvexiug.com", "xenolyzb.com" - ]; + private readonly dmcaHosts = [ + '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" - ]; + private readonly ruleHosts = [ + 'dhcplay.com', + 'hglink.to', + 'test.hglink.to', + 'wish-redirect.aiavh.com', + ]; - private readonly mainHosts = [ - "kravaxxa.com", "davioad.com", "haxloppd.com", - "tryzendm.com", "dumbalag.com" - ]; + private readonly mainHosts = [ + 'kravaxxa.com', + 'davioad.com', + 'haxloppd.com', + 'tryzendm.com', + 'dumbalag.com', + ]; - public supports(_ctx: Context, url: URL): boolean { - return this.domains.some(d => url.host.includes(d)); - } + public supports(_ctx: Context, url: URL): boolean { + return this.domains.some(d => url.host.includes(d)); + } - public override normalize(url: URL): URL { - return new URL(url.href.replace("/f/", "/e/").replace("/d/", "/e/")); - } + public override normalize(url: URL): URL { + return new URL( + url.href + .replace('/f/', '/e/') + .replace('/d/', '/e/'), + ); + } - private rand(arr: T[]): T { + private rand(arr: T[]): T { const index = Math.floor(Math.random() * arr.length); - return arr[index]!; -} + return arr[index]; + } - - private getMediaId(path: string): string { + private getMediaId(path: string): string { const m = path.match(/\/(?:e|f|d)\/([^/?#]+)/); const id = m?.[1]; if (!id) { - throw new Error("StreamWish: Invalid media ID"); + throw new Error('StreamWish: Invalid media ID'); } return id; -} + } - - private rewrite(url: URL): URL { + private rewrite(url: URL): URL { const mediaId = this.getMediaId(url.pathname); - const finalHost = this.ruleHosts.includes(url.host) + const finalHost + = this.ruleHosts.includes(url.host) ? this.rand(this.mainHosts) : this.rand(this.dmcaHosts); return new URL(`https://${finalHost}/e/${mediaId}`); -} - - protected async extractInternal( - ctx: Context, - url: URL, - meta: Meta, - originalUrl?: URL - ): Promise { - - const normalized = this.normalize(url); - const rewritten = this.rewrite(normalized); - - const headers = { - Referer: meta.referer ?? originalUrl?.href ?? rewritten.href - }; - - const proxyUrl = await buildMediaFlowProxyExtractorStreamUrl( - ctx, - this.fetcher, - this.id, - rewritten, - headers - ); - - return [ - { - url: proxyUrl, - format: Format.hls, - label: this.label, - sourceId: this.id, - ttl: this.ttl, - meta - } - ]; - } + } + + protected async extractInternal( + ctx: Context, + url: URL, + meta: Meta, + originalUrl?: URL, + ): Promise { + const normalized = this.normalize(url); + const rewritten = this.rewrite(normalized); + + const headers = { + Referer: meta.referer ?? originalUrl?.href ?? rewritten.href, + }; + + const proxyUrl = await buildMediaFlowProxyExtractorStreamUrl( + ctx, + this.fetcher, + this.id, + rewritten, + headers, + ); + + return [ + { + url: proxyUrl, + format: Format.hls, + label: this.label, + sourceId: this.id, + ttl: this.ttl, + requestHeaders: headers, + meta, + }, + ]; + } } From 341bd639b97c8dd1d37c154dcf66d0e48a2085fe Mon Sep 17 00:00:00 2001 From: GSTAR <44748406+GLlgGL@users.noreply.github.com> Date: Mon, 1 Dec 2025 00:36:23 +0100 Subject: [PATCH 3/5] Update StreamWish.ts --- src/extractor/StreamWish.ts | 151 ++++++++++-------------------------- 1 file changed, 41 insertions(+), 110 deletions(-) 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 + } ]; } } From 2872eef85f96464c6c78ca79f942ea0c25bf86e6 Mon Sep 17 00:00:00 2001 From: GSTAR <44748406+GLlgGL@users.noreply.github.com> Date: Mon, 1 Dec 2025 00:38:45 +0100 Subject: [PATCH 4/5] Update StreamWish.ts Lints fix 2 --- src/extractor/StreamWish.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/extractor/StreamWish.ts b/src/extractor/StreamWish.ts index e5991bf..960a95d 100644 --- a/src/extractor/StreamWish.ts +++ b/src/extractor/StreamWish.ts @@ -23,22 +23,22 @@ export class StreamWish extends Extractor { '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' + 'haxloppd.com', 'davioad.com', 'uasopt.com', ]; private readonly dmcaHosts = [ 'hgplaycdn.com', 'habetar.com', 'yuguaab.com', - 'guxhag.com', 'auvexiug.com', 'xenolyzb.com' + 'guxhag.com', 'auvexiug.com', 'xenolyzb.com', ]; private readonly ruleHosts = [ 'dhcplay.com', 'hglink.to', 'test.hglink.to', - 'wish-redirect.aiavh.com' + 'wish-redirect.aiavh.com', ]; private readonly mainHosts = [ 'kravaxxa.com', 'davioad.com', 'haxloppd.com', - 'tryzendm.com', 'dumbalag.com' + 'tryzendm.com', 'dumbalag.com', ]; public supports(_ctx: Context, url: URL): boolean { @@ -89,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( @@ -103,7 +103,7 @@ export class StreamWish extends Extractor { this.fetcher, this.id, rewritten, - headers + headers, ); return [ @@ -114,8 +114,8 @@ export class StreamWish extends Extractor { sourceId: this.id, ttl: this.ttl, requestHeaders: headers, - meta - } + meta, + }, ]; } } From a90f452f0de3d87002d4a5f71de62f47cff94139 Mon Sep 17 00:00:00 2001 From: GSTAR <44748406+GLlgGL@users.noreply.github.com> Date: Mon, 1 Dec 2025 09:41:40 +0100 Subject: [PATCH 5/5] Update StreamWish.ts Give to Caesar what belongs to Caesar. --- src/extractor/StreamWish.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/extractor/StreamWish.ts b/src/extractor/StreamWish.ts index 960a95d..b660e61 100644 --- a/src/extractor/StreamWish.ts +++ b/src/extractor/StreamWish.ts @@ -2,6 +2,7 @@ import { Context, Format, Meta, UrlResult } from '../types'; import { buildMediaFlowProxyExtractorStreamUrl } from '../utils'; import { Extractor } from './Extractor'; +/** @see https://github.com/Gujal00/ResolveURL/blob/master/script.module.resolveurl/lib/resolveurl/plugins/streamwish.py */ export class StreamWish extends Extractor { public readonly id = 'StreamWish'; public readonly label = 'StreamWish(MFP)';