From be7c19a54f5df15966a4214b63611eff4753788e Mon Sep 17 00:00:00 2001 From: WebStreamr <210764791+webstreamr@users.noreply.github.com> Date: Sun, 28 Sep 2025 19:49:37 +0000 Subject: [PATCH] chore: add referer explicitly to sources --- src/source/CineHDPlus.ts | 2 +- src/source/Cuevana.ts | 22 +++---- src/source/Einschalten.ts | 2 +- src/source/Eurostreaming.ts | 2 +- src/source/Frembed.ts | 2 +- src/source/FrenchCloud.ts | 2 +- src/source/HomeCine.ts | 13 ++--- src/source/KinoGer.ts | 2 +- src/source/MegaKino.ts | 2 +- src/source/MeineCloud.ts | 2 +- src/source/MostraGuarda.ts | 2 +- src/source/PrimeWire.ts | 5 +- src/source/StreamKiste.ts | 2 +- src/source/VerHdLink.ts | 2 +- .../__snapshots__/CineHDPlus.test.ts.snap | 4 ++ src/source/__snapshots__/Cuevana.test.ts.snap | 42 ++++++++++++++ .../__snapshots__/Einschalten.test.ts.snap | 1 + .../__snapshots__/Eurostreaming.test.ts.snap | 8 +++ src/source/__snapshots__/Frembed.test.ts.snap | 13 +++++ .../__snapshots__/FrenchCloud.test.ts.snap | 5 ++ .../__snapshots__/HomeCine.test.ts.snap | 7 +++ src/source/__snapshots__/KinoGer.test.ts.snap | 8 +++ .../__snapshots__/MegaKino.test.ts.snap | 2 + .../__snapshots__/MeineCloud.test.ts.snap | 4 ++ .../__snapshots__/MostraGuarda.test.ts.snap | 4 ++ .../__snapshots__/PrimeWire.test.ts.snap | 58 +++++++++++++++++++ .../__snapshots__/StreamKiste.test.ts.snap | 2 + .../__snapshots__/VerHdLink.test.ts.snap | 9 +++ src/utils/StreamResolver.ts | 2 +- 29 files changed, 201 insertions(+), 30 deletions(-) diff --git a/src/source/CineHDPlus.ts b/src/source/CineHDPlus.ts index da117d0..56e64d4 100644 --- a/src/source/CineHDPlus.ts +++ b/src/source/CineHDPlus.ts @@ -46,7 +46,7 @@ export class CineHDPlus extends Source { .map((_i, el) => new URL(($(el).attr('data-link') as string).replace(/^(https:)?\/\//, 'https://'))) .toArray() .filter(url => !url.host.match(/cinehdplus/)) - .map(url => ({ url, meta: { countryCodes, title } })), + .map(url => ({ url, meta: { countryCodes, referer: seriesPageUrl.href, title } })), ); }; diff --git a/src/source/Cuevana.ts b/src/source/Cuevana.ts index 6f7f8f4..eaeaf23 100644 --- a/src/source/Cuevana.ts +++ b/src/source/Cuevana.ts @@ -28,27 +28,23 @@ export class Cuevana extends Source { const [name] = await getTmdbNameAndYear(ctx, this.fetcher, tmdbId, 'es'); - const pageUrl = await this.fetchPageUrl(ctx, name); + let pageUrl = await this.fetchPageUrl(ctx, name); if (!pageUrl) { return []; } let title: string = name; - let html: string; if (tmdbId.season) { title += ` ${tmdbId.season}x${tmdbId.episode}`; - const episodeUrl = await this.fetchEpisodeUrl(ctx, pageUrl, tmdbId); - if (!episodeUrl) { + pageUrl = await this.fetchEpisodeUrl(ctx, pageUrl, tmdbId); + if (!pageUrl) { return []; } - - html = await this.fetcher.text(ctx, episodeUrl); - } else { - html = await this.fetcher.text(ctx, pageUrl); } + const html = await this.fetcher.text(ctx, pageUrl); const $ = cheerio.load(html); const urlResults = $('.open_submenu') @@ -60,12 +56,18 @@ export class Cuevana extends Source { if (elText.includes('Latino')) { return $('[data-tr], [data-video]', el) - .map((_i, el) => ({ url: new URL($(el).attr('data-tr') ?? $(el).attr('data-video') as string), meta: { countryCodes: [CountryCode.mx], title } })) + .map((_i, el) => ({ + url: new URL($(el).attr('data-tr') ?? $(el).attr('data-video') as string), + meta: { countryCodes: [CountryCode.mx], referer: pageUrl.href, title }, + })) .toArray(); } return $('[data-tr], [data-video]', el) - .map((_i, el) => ({ url: new URL($(el).attr('data-tr') ?? $(el).attr('data-video') as string), meta: { countryCodes: [CountryCode.es], title } })) + .map((_i, el) => ({ + url: new URL($(el).attr('data-tr') ?? $(el).attr('data-video') as string), + meta: { countryCodes: [CountryCode.es], referer: pageUrl.href, title }, + })) .toArray(); }) .toArray(); diff --git a/src/source/Einschalten.ts b/src/source/Einschalten.ts index 834e53d..f9d7ce8 100644 --- a/src/source/Einschalten.ts +++ b/src/source/Einschalten.ts @@ -32,6 +32,6 @@ export class Einschalten extends Source { const { releaseName: title, streamUrl } = await this.fetcher.json(ctx, new URL(`/api/movies/${tmdbId.id}/watch`, this.baseUrl)) as EinschaltenResponse; - return [{ url: new URL(streamUrl), meta: { countryCodes: [CountryCode.de], title } }]; + return [{ url: new URL(streamUrl), meta: { countryCodes: [CountryCode.de], referer: (new URL(`/movies/${tmdbId.id}`, this.baseUrl)).href, title } }]; }; } diff --git a/src/source/Eurostreaming.ts b/src/source/Eurostreaming.ts index b2f39dd..c70f3a5 100644 --- a/src/source/Eurostreaming.ts +++ b/src/source/Eurostreaming.ts @@ -45,7 +45,7 @@ export class Eurostreaming extends Source { .map((_i, el) => new URL($(el).attr('data-link') as string)) .toArray() .filter(url => !url.host.match(/eurostreaming/)) - .map(url => ({ url, meta: { countryCodes: [CountryCode.it], title } })), + .map(url => ({ url, meta: { countryCodes: [CountryCode.it], referer: seriesPageUrl.href, title } })), ); }; diff --git a/src/source/Frembed.ts b/src/source/Frembed.ts index 0faaef6..4a983e6 100644 --- a/src/source/Frembed.ts +++ b/src/source/Frembed.ts @@ -46,6 +46,6 @@ export class Frembed extends Source { ? `${json['title']} ${tmdbId.season}x${tmdbId.episode}` : json['title']; - return urls.map(url => ({ url, meta: { countryCodes: [CountryCode.fr], title } })); + return urls.map(url => ({ url, meta: { countryCodes: [CountryCode.fr], referer: this.baseUrl, title } })); }; } diff --git a/src/source/FrenchCloud.ts b/src/source/FrenchCloud.ts index 5e64236..1014bbe 100644 --- a/src/source/FrenchCloud.ts +++ b/src/source/FrenchCloud.ts @@ -36,7 +36,7 @@ export class FrenchCloud extends Source { .map((_i, el) => new URL(($(el).attr('data-link') as string).replace(/^(https:)?\/\//, 'https://'))) .toArray() .filter(url => !url.host.match(/frenchcloud/)) - .map(url => ({ url, meta: { countryCodes: [CountryCode.fr] } })), + .map(url => ({ url, meta: { countryCodes: [CountryCode.fr], referer: this.baseUrl } })), ); }; } diff --git a/src/source/HomeCine.ts b/src/source/HomeCine.ts index 1978978..acb5c34 100644 --- a/src/source/HomeCine.ts +++ b/src/source/HomeCine.ts @@ -33,21 +33,20 @@ export class HomeCine extends Source { return []; } - const pageHtml = await this.fetcher.text(ctx, pageUrl); + let pageHtml = await this.fetcher.text(ctx, pageUrl); - let linksHtml = pageHtml; if (tmdbId.season) { - const episodeUrl = await this.fetchEpisodeUrl(pageHtml, tmdbId); - if (!episodeUrl) { + const pageUrl = await this.fetchEpisodeUrl(pageHtml, tmdbId); + if (!pageUrl) { return []; } - linksHtml = await this.fetcher.text(ctx, episodeUrl); + pageHtml = await this.fetcher.text(ctx, pageUrl); } const title = tmdbId.season ? `${name} ${tmdbId.season}x${tmdbId.episode}` : `${name} (${year})`; - const $ = cheerio.load(linksHtml); + const $ = cheerio.load(pageHtml); return $('.les-content a') .map((_i, el) => { @@ -60,7 +59,7 @@ export class HomeCine extends Source { return []; } - return { url: new URL($('iframe', $(el).attr('href')).attr('src') as string), meta: { countryCodes, title } }; + return { url: new URL($('iframe', $(el).attr('href')).attr('src') as string), meta: { countryCodes, referer: pageUrl.href, title } }; }).toArray(); }; diff --git a/src/source/KinoGer.ts b/src/source/KinoGer.ts index d30789f..e155ea8 100644 --- a/src/source/KinoGer.ts +++ b/src/source/KinoGer.ts @@ -42,7 +42,7 @@ export class KinoGer extends Source { return Array.from(html.matchAll(/\.show\(.*/g)) .map(showJsMatch => this.findEpisodeUrlInShowJs(showJsMatch[0], seasonIndex, episodeIndex)) .filter((url): url is URL => url !== undefined && !['kinoger.be', 'kinoger.ru'].includes(url.host)) - .map(url => ({ url, meta: { countryCodes: [CountryCode.de], title } })); + .map(url => ({ url, meta: { countryCodes: [CountryCode.de], referer: pageUrl.href, title } })); }; private readonly findEpisodeUrlInShowJs = (showJs: string, seasonIndex: number, episodeIndex: number): URL | undefined => { diff --git a/src/source/MegaKino.ts b/src/source/MegaKino.ts index 87c4ae6..ede6e70 100644 --- a/src/source/MegaKino.ts +++ b/src/source/MegaKino.ts @@ -41,7 +41,7 @@ export class MegaKino extends Source { $(`.video-inside iframe`) .map((_i, el) => new URL(($(el).attr('data-src') ?? $(el).attr('src')) as string)) .toArray() - .map(url => ({ url, meta: { countryCodes: [CountryCode.de], title } })), + .map(url => ({ url, meta: { countryCodes: [CountryCode.de], referer: pageUrl.href, title } })), ); }; diff --git a/src/source/MeineCloud.ts b/src/source/MeineCloud.ts index 381cd75..b61049a 100644 --- a/src/source/MeineCloud.ts +++ b/src/source/MeineCloud.ts @@ -36,7 +36,7 @@ export class MeineCloud extends Source { .map((_i, el) => new URL(($(el).attr('data-link') as string).replace(/^(https:)?\/\//, 'https://'))) .toArray() .filter(url => !url.host.match(/meinecloud/)) - .map(url => ({ url, meta: { countryCodes: [CountryCode.de] } })), + .map(url => ({ url, meta: { countryCodes: [CountryCode.de], referer: this.baseUrl } })), ); }; } diff --git a/src/source/MostraGuarda.ts b/src/source/MostraGuarda.ts index 2bb502c..bc36c66 100644 --- a/src/source/MostraGuarda.ts +++ b/src/source/MostraGuarda.ts @@ -36,7 +36,7 @@ export class MostraGuarda extends Source { .map((_i, el) => new URL(($(el).attr('data-link') as string).replace(/^(https:)?\/\//, 'https://'))) .toArray() .filter(url => !url.host.match(/mostraguarda/)) - .map(url => ({ url, meta: { countryCodes: [CountryCode.it] } })), + .map(url => ({ url, meta: { countryCodes: [CountryCode.it], referer: this.baseUrl } })), ); }; } diff --git a/src/source/PrimeWire.ts b/src/source/PrimeWire.ts index 9635aee..5bab7cb 100644 --- a/src/source/PrimeWire.ts +++ b/src/source/PrimeWire.ts @@ -29,6 +29,8 @@ export class PrimeWire extends Source { public readonly baseUrl = 'https://www.primewire.tf'; + private readonly primeSrcBaseUrl = 'https://primesrc.me'; + private readonly fetcher: Fetcher; private readonly redirectUrlCache = new Cacheable({ @@ -58,7 +60,7 @@ export class PrimeWire extends Source { const pageIdMatch = pageUrl.pathname.match(/\/([0-9]{2,})/) as string[]; const pageId = pageIdMatch[1]; - const primeSrcUrl = new URL(`https://primesrc.me/api/v1/s?s_id=${pageId}&type=movie`); + const primeSrcUrl = new URL(`/api/v1/s?s_id=${pageId}&type=movie`, this.primeSrcBaseUrl); if (imdbId.season) { const episodeId = await this.fetchEpisodeId(ctx, pageUrl, imdbId); @@ -94,6 +96,7 @@ export class PrimeWire extends Source { url: new URL(targetUrlHref), meta: { countryCodes: [CountryCode.en], + referer: this.primeSrcBaseUrl, ...(file_name && { title: file_name }), ...(file_size && { bytes: bytes.parse(file_size) as number }), }, diff --git a/src/source/StreamKiste.ts b/src/source/StreamKiste.ts index 18c41c2..168e2e4 100644 --- a/src/source/StreamKiste.ts +++ b/src/source/StreamKiste.ts @@ -44,7 +44,7 @@ export class StreamKiste extends Source { .map((_i, el) => new URL(($(el).attr('data-link') as string).replace(/^(https:)?\/\//, 'https://'))) .toArray() .filter(url => !url.host.match(/streamkiste/)) - .map(url => ({ url, meta: { countryCodes: [CountryCode.de], title } })), + .map(url => ({ url, meta: { countryCodes: [CountryCode.de], referer: seriesPageUrl.href, title } })), ); }; diff --git a/src/source/VerHdLink.ts b/src/source/VerHdLink.ts index 4aa296f..d605d7d 100644 --- a/src/source/VerHdLink.ts +++ b/src/source/VerHdLink.ts @@ -46,7 +46,7 @@ export class VerHdLink extends Source { .map((_i, el) => new URL(($(el).attr('data-link') as string).replace(/^(https:)?\/\//, 'https://'))) .toArray() .filter(url => !url.host.match(/verhdlink/)) - .map(url => ({ url, meta: { countryCodes } })); + .map(url => ({ url, meta: { countryCodes, referer: this.baseUrl } })); }).toArray(); }; } diff --git a/src/source/__snapshots__/CineHDPlus.test.ts.snap b/src/source/__snapshots__/CineHDPlus.test.ts.snap index 3ae9b58..3599a98 100644 --- a/src/source/__snapshots__/CineHDPlus.test.ts.snap +++ b/src/source/__snapshots__/CineHDPlus.test.ts.snap @@ -7,6 +7,7 @@ exports[`CineHDPlus handle imdb babylon 5 s2e3 (es) 1`] = ` "countryCodes": [ "es", ], + "referer": "https://cinehdplus.cam/peliculas/19678-babylon-5-ver-online-hd.html", "title": "Babylon 5 2x3", }, "url": "https://supervideo.tv/embed-1p0m1fi9mok8.html", @@ -16,6 +17,7 @@ exports[`CineHDPlus handle imdb babylon 5 s2e3 (es) 1`] = ` "countryCodes": [ "es", ], + "referer": "https://cinehdplus.cam/peliculas/19678-babylon-5-ver-online-hd.html", "title": "Babylon 5 2x3", }, "url": "https://dropload.io/embed-957hny8mzrvh.html", @@ -30,6 +32,7 @@ exports[`CineHDPlus handle imdb black mirror s2e3 (mx) 1`] = ` "countryCodes": [ "mx", ], + "referer": "https://cinehdplus.cam/peliculas/9582-black-mirror-ver-online-hd.html", "title": "Black Mirror 2x3", }, "url": "https://supervideo.tv/embed-avmgppo37sx1.html", @@ -39,6 +42,7 @@ exports[`CineHDPlus handle imdb black mirror s2e3 (mx) 1`] = ` "countryCodes": [ "mx", ], + "referer": "https://cinehdplus.cam/peliculas/9582-black-mirror-ver-online-hd.html", "title": "Black Mirror 2x3", }, "url": "https://dropload.io/embed-t058ulwwkwn6.html", diff --git a/src/source/__snapshots__/Cuevana.test.ts.snap b/src/source/__snapshots__/Cuevana.test.ts.snap index 39739d0..e4ac474 100644 --- a/src/source/__snapshots__/Cuevana.test.ts.snap +++ b/src/source/__snapshots__/Cuevana.test.ts.snap @@ -7,6 +7,7 @@ exports[`Cuevana does not return es content for mx 1`] = ` "countryCodes": [ "mx", ], + "referer": "https://ww1.cuevana3.is/ver-pelicula/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad", }, "url": "https://streamwish.to/e/9icce2ca0yir", @@ -16,6 +17,7 @@ exports[`Cuevana does not return es content for mx 1`] = ` "countryCodes": [ "mx", ], + "referer": "https://ww1.cuevana3.is/ver-pelicula/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad", }, "url": "https://filemoon.sx/e/fgxxkidqq4jp", @@ -25,6 +27,7 @@ exports[`Cuevana does not return es content for mx 1`] = ` "countryCodes": [ "mx", ], + "referer": "https://ww1.cuevana3.is/ver-pelicula/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad", }, "url": "https://voe.sx/e/h87m8wyj5x8j", @@ -34,6 +37,7 @@ exports[`Cuevana does not return es content for mx 1`] = ` "countryCodes": [ "mx", ], + "referer": "https://ww1.cuevana3.is/ver-pelicula/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad", }, "url": "https://doodstream.com/e/ju53ufkqy9hc", @@ -43,6 +47,7 @@ exports[`Cuevana does not return es content for mx 1`] = ` "countryCodes": [ "mx", ], + "referer": "https://ww1.cuevana3.is/ver-pelicula/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad", }, "url": "https://streamtape.com/e/WgxgBAwOyGfbZxY", @@ -52,6 +57,7 @@ exports[`Cuevana does not return es content for mx 1`] = ` "countryCodes": [ "mx", ], + "referer": "https://ww1.cuevana3.is/ver-pelicula/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad", }, "url": "https://waaw.to/f/xtG7M9GL2MmV", @@ -61,6 +67,7 @@ exports[`Cuevana does not return es content for mx 1`] = ` "countryCodes": [ "mx", ], + "referer": "https://ww1.cuevana3.is/ver-pelicula/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad", }, "url": "https://filelions.to/v/tnehp8g7zght", @@ -70,6 +77,7 @@ exports[`Cuevana does not return es content for mx 1`] = ` "countryCodes": [ "mx", ], + "referer": "https://ww1.cuevana3.is/ver-pelicula/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad", }, "url": "https://plustream.com/embedb2/gHHRwqKdHgF5MYniuxGWnG8j_vIW77uC4a4vrO5iwLktMwS8ryr2i.bhH3SiGHw6PKNBoqxCHLDyc1Pw6EPhwg--", @@ -84,6 +92,7 @@ exports[`Cuevana does not return mx content for es 1`] = ` "countryCodes": [ "es", ], + "referer": "https://ww1.cuevana3.is/ver-pelicula/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad", }, "url": "https://streamwish.to/e/mtb09rms1njz", @@ -93,6 +102,7 @@ exports[`Cuevana does not return mx content for es 1`] = ` "countryCodes": [ "es", ], + "referer": "https://ww1.cuevana3.is/ver-pelicula/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad", }, "url": "https://filemoon.sx/e/r77fu9ez9nsv", @@ -102,6 +112,7 @@ exports[`Cuevana does not return mx content for es 1`] = ` "countryCodes": [ "es", ], + "referer": "https://ww1.cuevana3.is/ver-pelicula/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad", }, "url": "https://voe.sx/e/cepsnqy0qgyo", @@ -111,6 +122,7 @@ exports[`Cuevana does not return mx content for es 1`] = ` "countryCodes": [ "es", ], + "referer": "https://ww1.cuevana3.is/ver-pelicula/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad", }, "url": "https://doodstream.com/e/ny5qlz61x9xt", @@ -120,6 +132,7 @@ exports[`Cuevana does not return mx content for es 1`] = ` "countryCodes": [ "es", ], + "referer": "https://ww1.cuevana3.is/ver-pelicula/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad", }, "url": "https://waaw.to/f/hlHhgFkmWHom", @@ -129,6 +142,7 @@ exports[`Cuevana does not return mx content for es 1`] = ` "countryCodes": [ "es", ], + "referer": "https://ww1.cuevana3.is/ver-pelicula/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad", }, "url": "https://plustream.com/embedb2/DpAUEfJrAHkBAdb.6erU25OAypGXqMugDfQuWU2sTDBKHNQmIxzyq1b2Ma06kb7EgL6d4hdzw8quWDimAGnIvQ--", @@ -138,6 +152,7 @@ exports[`Cuevana does not return mx content for es 1`] = ` "countryCodes": [ "es", ], + "referer": "https://ww1.cuevana3.is/ver-pelicula/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad", }, "url": "https://vidhidepro.com/v/lhaueh479t2v", @@ -152,6 +167,7 @@ exports[`Cuevana handle el camino 1`] = ` "countryCodes": [ "mx", ], + "referer": "https://ww1.cuevana3.is/ver-pelicula/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad", }, "url": "https://streamwish.to/e/9icce2ca0yir", @@ -161,6 +177,7 @@ exports[`Cuevana handle el camino 1`] = ` "countryCodes": [ "mx", ], + "referer": "https://ww1.cuevana3.is/ver-pelicula/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad", }, "url": "https://filemoon.sx/e/fgxxkidqq4jp", @@ -170,6 +187,7 @@ exports[`Cuevana handle el camino 1`] = ` "countryCodes": [ "mx", ], + "referer": "https://ww1.cuevana3.is/ver-pelicula/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad", }, "url": "https://voe.sx/e/h87m8wyj5x8j", @@ -179,6 +197,7 @@ exports[`Cuevana handle el camino 1`] = ` "countryCodes": [ "mx", ], + "referer": "https://ww1.cuevana3.is/ver-pelicula/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad", }, "url": "https://doodstream.com/e/ju53ufkqy9hc", @@ -188,6 +207,7 @@ exports[`Cuevana handle el camino 1`] = ` "countryCodes": [ "mx", ], + "referer": "https://ww1.cuevana3.is/ver-pelicula/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad", }, "url": "https://streamtape.com/e/WgxgBAwOyGfbZxY", @@ -197,6 +217,7 @@ exports[`Cuevana handle el camino 1`] = ` "countryCodes": [ "mx", ], + "referer": "https://ww1.cuevana3.is/ver-pelicula/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad", }, "url": "https://waaw.to/f/xtG7M9GL2MmV", @@ -206,6 +227,7 @@ exports[`Cuevana handle el camino 1`] = ` "countryCodes": [ "mx", ], + "referer": "https://ww1.cuevana3.is/ver-pelicula/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad", }, "url": "https://filelions.to/v/tnehp8g7zght", @@ -215,6 +237,7 @@ exports[`Cuevana handle el camino 1`] = ` "countryCodes": [ "mx", ], + "referer": "https://ww1.cuevana3.is/ver-pelicula/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad", }, "url": "https://plustream.com/embedb2/gHHRwqKdHgF5MYniuxGWnG8j_vIW77uC4a4vrO5iwLktMwS8ryr2i.bhH3SiGHw6PKNBoqxCHLDyc1Pw6EPhwg--", @@ -224,6 +247,7 @@ exports[`Cuevana handle el camino 1`] = ` "countryCodes": [ "es", ], + "referer": "https://ww1.cuevana3.is/ver-pelicula/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad", }, "url": "https://streamwish.to/e/mtb09rms1njz", @@ -233,6 +257,7 @@ exports[`Cuevana handle el camino 1`] = ` "countryCodes": [ "es", ], + "referer": "https://ww1.cuevana3.is/ver-pelicula/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad", }, "url": "https://filemoon.sx/e/r77fu9ez9nsv", @@ -242,6 +267,7 @@ exports[`Cuevana handle el camino 1`] = ` "countryCodes": [ "es", ], + "referer": "https://ww1.cuevana3.is/ver-pelicula/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad", }, "url": "https://voe.sx/e/cepsnqy0qgyo", @@ -251,6 +277,7 @@ exports[`Cuevana handle el camino 1`] = ` "countryCodes": [ "es", ], + "referer": "https://ww1.cuevana3.is/ver-pelicula/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad", }, "url": "https://doodstream.com/e/ny5qlz61x9xt", @@ -260,6 +287,7 @@ exports[`Cuevana handle el camino 1`] = ` "countryCodes": [ "es", ], + "referer": "https://ww1.cuevana3.is/ver-pelicula/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad", }, "url": "https://waaw.to/f/hlHhgFkmWHom", @@ -269,6 +297,7 @@ exports[`Cuevana handle el camino 1`] = ` "countryCodes": [ "es", ], + "referer": "https://ww1.cuevana3.is/ver-pelicula/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad", }, "url": "https://plustream.com/embedb2/DpAUEfJrAHkBAdb.6erU25OAypGXqMugDfQuWU2sTDBKHNQmIxzyq1b2Ma06kb7EgL6d4hdzw8quWDimAGnIvQ--", @@ -278,6 +307,7 @@ exports[`Cuevana handle el camino 1`] = ` "countryCodes": [ "es", ], + "referer": "https://ww1.cuevana3.is/ver-pelicula/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad", }, "url": "https://vidhidepro.com/v/lhaueh479t2v", @@ -292,6 +322,7 @@ exports[`Cuevana handle la frontera s1e1 1`] = ` "countryCodes": [ "es", ], + "referer": "https://ww1.cuevana3.is/episodio/la-frontera-temporada-1-episodio-1", "title": "La frontera 1x1", }, "url": "https://streamwish.to/e/tpzbrzz7p41k", @@ -301,6 +332,7 @@ exports[`Cuevana handle la frontera s1e1 1`] = ` "countryCodes": [ "es", ], + "referer": "https://ww1.cuevana3.is/episodio/la-frontera-temporada-1-episodio-1", "title": "La frontera 1x1", }, "url": "https://filemoon.sx/e/nhbmj6o6zl0l", @@ -310,6 +342,7 @@ exports[`Cuevana handle la frontera s1e1 1`] = ` "countryCodes": [ "es", ], + "referer": "https://ww1.cuevana3.is/episodio/la-frontera-temporada-1-episodio-1", "title": "La frontera 1x1", }, "url": "https://vidhidepro.com/v/x5w6b0wys1fs", @@ -319,6 +352,7 @@ exports[`Cuevana handle la frontera s1e1 1`] = ` "countryCodes": [ "es", ], + "referer": "https://ww1.cuevana3.is/episodio/la-frontera-temporada-1-episodio-1", "title": "La frontera 1x1", }, "url": "https://voe.sx/e/nfal9zqu9yvy", @@ -328,6 +362,7 @@ exports[`Cuevana handle la frontera s1e1 1`] = ` "countryCodes": [ "es", ], + "referer": "https://ww1.cuevana3.is/episodio/la-frontera-temporada-1-episodio-1", "title": "La frontera 1x1", }, "url": "https://doodstream.com/e/dyvg7ofnnqgi", @@ -337,6 +372,7 @@ exports[`Cuevana handle la frontera s1e1 1`] = ` "countryCodes": [ "es", ], + "referer": "https://ww1.cuevana3.is/episodio/la-frontera-temporada-1-episodio-1", "title": "La frontera 1x1", }, "url": "https://waaw.to/f/goypdL0qGqks", @@ -351,6 +387,7 @@ exports[`Cuevana handle walking dead s1e1 1`] = ` "countryCodes": [ "mx", ], + "referer": "https://ww1.cuevana3.is/episodio/the-walking-dead-temporada-2-episodio-1", "title": "The Walking Dead 1x1", }, "url": "https://streamwish.to/e/gudk6hvc4qwl", @@ -360,6 +397,7 @@ exports[`Cuevana handle walking dead s1e1 1`] = ` "countryCodes": [ "mx", ], + "referer": "https://ww1.cuevana3.is/episodio/the-walking-dead-temporada-2-episodio-1", "title": "The Walking Dead 1x1", }, "url": "https://filemoon.sx/e/kp39yor1z0js", @@ -369,6 +407,7 @@ exports[`Cuevana handle walking dead s1e1 1`] = ` "countryCodes": [ "mx", ], + "referer": "https://ww1.cuevana3.is/episodio/the-walking-dead-temporada-2-episodio-1", "title": "The Walking Dead 1x1", }, "url": "https://voe.sx/e/4ahrkbnofnty", @@ -378,6 +417,7 @@ exports[`Cuevana handle walking dead s1e1 1`] = ` "countryCodes": [ "mx", ], + "referer": "https://ww1.cuevana3.is/episodio/the-walking-dead-temporada-2-episodio-1", "title": "The Walking Dead 1x1", }, "url": "https://doodstream.com/e/wvk23p39ikyd", @@ -387,6 +427,7 @@ exports[`Cuevana handle walking dead s1e1 1`] = ` "countryCodes": [ "mx", ], + "referer": "https://ww1.cuevana3.is/episodio/the-walking-dead-temporada-2-episodio-1", "title": "The Walking Dead 1x1", }, "url": "https://streamtape.com/e/qMjrKleBMpCLO0", @@ -396,6 +437,7 @@ exports[`Cuevana handle walking dead s1e1 1`] = ` "countryCodes": [ "mx", ], + "referer": "https://ww1.cuevana3.is/episodio/the-walking-dead-temporada-2-episodio-1", "title": "The Walking Dead 1x1", }, "url": "https://filelions.to/v/rvyogjvsejlh", diff --git a/src/source/__snapshots__/Einschalten.test.ts.snap b/src/source/__snapshots__/Einschalten.test.ts.snap index 5d4a513..351c631 100644 --- a/src/source/__snapshots__/Einschalten.test.ts.snap +++ b/src/source/__snapshots__/Einschalten.test.ts.snap @@ -7,6 +7,7 @@ exports[`Einschalten handle superman 1`] = ` "countryCodes": [ "de", ], + "referer": "https://einschalten.in/movies/1061474", "title": "Superman.2025.German.DL.720p.WEB.H264-ZeroTwo", }, "url": "https://vide0.net/e/qtvqjblhu74i", diff --git a/src/source/__snapshots__/Eurostreaming.test.ts.snap b/src/source/__snapshots__/Eurostreaming.test.ts.snap index 7711f9a..da29c55 100644 --- a/src/source/__snapshots__/Eurostreaming.test.ts.snap +++ b/src/source/__snapshots__/Eurostreaming.test.ts.snap @@ -7,6 +7,7 @@ exports[`Eurostreaming game of thrones s1e1 1`] = ` "countryCodes": [ "it", ], + "referer": "https://eurostreaming.luxe/stream/194-visualizza-game-of-thrones-il-trono-di-spade-5-streaming.html", "title": "Il Trono di Spade 1x1", }, "url": "https://supervideo.cc/e/05jfivnr5hiw", @@ -16,6 +17,7 @@ exports[`Eurostreaming game of thrones s1e1 1`] = ` "countryCodes": [ "it", ], + "referer": "https://eurostreaming.luxe/stream/194-visualizza-game-of-thrones-il-trono-di-spade-5-streaming.html", "title": "Il Trono di Spade 1x1", }, "url": "https://dropload.io/embed-dub8oh3k3yk5.html", @@ -30,6 +32,7 @@ exports[`Eurostreaming handle imdb black mirror s2e4 1`] = ` "countryCodes": [ "it", ], + "referer": "https://eurostreaming.luxe/stream/284-black-mirror-streaming-streaming.html", "title": "Black Mirror 2x4", }, "url": "https://supervideo.cc/e/anf0clp2vb6y", @@ -39,6 +42,7 @@ exports[`Eurostreaming handle imdb black mirror s2e4 1`] = ` "countryCodes": [ "it", ], + "referer": "https://eurostreaming.luxe/stream/284-black-mirror-streaming-streaming.html", "title": "Black Mirror 2x4", }, "url": "https://dropload.io/embed-978xyyxi3ldq.html", @@ -53,6 +57,7 @@ exports[`Eurostreaming handle lost s1e1 1`] = ` "countryCodes": [ "it", ], + "referer": "https://eurostreaming.luxe/stream/496-lost-streaming.html", "title": "Lost 1x1", }, "url": "https://supervideo.cc/e/lgslt2lst4jv", @@ -62,6 +67,7 @@ exports[`Eurostreaming handle lost s1e1 1`] = ` "countryCodes": [ "it", ], + "referer": "https://eurostreaming.luxe/stream/496-lost-streaming.html", "title": "Lost 1x1", }, "url": "https://dropload.io/embed-vabynwo8glxz.html", @@ -76,6 +82,7 @@ exports[`Eurostreaming last of us s1e1 1`] = ` "countryCodes": [ "it", ], + "referer": "https://eurostreaming.luxe/stream/2605-the-last-of-us-streamingcommunity-streaming.html", "title": "The Last of Us 1x1", }, "url": "https://supervideo.cc/e/ic1mmvrh5xv6", @@ -85,6 +92,7 @@ exports[`Eurostreaming last of us s1e1 1`] = ` "countryCodes": [ "it", ], + "referer": "https://eurostreaming.luxe/stream/2605-the-last-of-us-streamingcommunity-streaming.html", "title": "The Last of Us 1x1", }, "url": "https://dropload.io/embed-uyzfrh62n31l.html", diff --git a/src/source/__snapshots__/Frembed.test.ts.snap b/src/source/__snapshots__/Frembed.test.ts.snap index 6937eaf..e756b08 100644 --- a/src/source/__snapshots__/Frembed.test.ts.snap +++ b/src/source/__snapshots__/Frembed.test.ts.snap @@ -7,6 +7,7 @@ exports[`Frembed handle battle royal 1`] = ` "countryCodes": [ "fr", ], + "referer": "https://frembed.lat", "title": "Battle Royale", }, "url": "https://d-s.io/e/gtenfs0rffzq", @@ -16,6 +17,7 @@ exports[`Frembed handle battle royal 1`] = ` "countryCodes": [ "fr", ], + "referer": "https://frembed.lat", "title": "Battle Royale", }, "url": "https://netu.fanstream.live/e/p0QUHavRbQD0", @@ -25,6 +27,7 @@ exports[`Frembed handle battle royal 1`] = ` "countryCodes": [ "fr", ], + "referer": "https://frembed.lat", "title": "Battle Royale", }, "url": "https://jilliandescribecompany.com/e/lbeqm6ofmauq", @@ -34,6 +37,7 @@ exports[`Frembed handle battle royal 1`] = ` "countryCodes": [ "fr", ], + "referer": "https://frembed.lat", "title": "Battle Royale", }, "url": "https://video.streamtales.cc/player/frvod.php?url=https://streamtales.cc:8443/videos/3176.mp4", @@ -43,6 +47,7 @@ exports[`Frembed handle battle royal 1`] = ` "countryCodes": [ "fr", ], + "referer": "https://frembed.lat", "title": "Battle Royale", }, "url": "https://uqload.cx/embed-pnxmokgrigu9.html", @@ -57,6 +62,7 @@ exports[`Frembed handle imdb black mirror s4e2 1`] = ` "countryCodes": [ "fr", ], + "referer": "https://frembed.lat", "title": "Black Mirror 4x2", }, "url": "https://d-s.io/e/dfx8me4un4ul", @@ -66,6 +72,7 @@ exports[`Frembed handle imdb black mirror s4e2 1`] = ` "countryCodes": [ "fr", ], + "referer": "https://frembed.lat", "title": "Black Mirror 4x2", }, "url": "https://netu.fanstream.live/e/0DFgfkcXOsDP", @@ -75,6 +82,7 @@ exports[`Frembed handle imdb black mirror s4e2 1`] = ` "countryCodes": [ "fr", ], + "referer": "https://frembed.lat", "title": "Black Mirror 4x2", }, "url": "https://jilliandescribecompany.com/e/cqy9oue7sv0g", @@ -84,6 +92,7 @@ exports[`Frembed handle imdb black mirror s4e2 1`] = ` "countryCodes": [ "fr", ], + "referer": "https://frembed.lat", "title": "Black Mirror 4x2", }, "url": "https://ds2play.com/e/fzfvfq3ngig0", @@ -98,6 +107,7 @@ exports[`Frembed handle tmdb black mirror s4e2 1`] = ` "countryCodes": [ "fr", ], + "referer": "https://frembed.lat", "title": "Black Mirror 4x2", }, "url": "https://d-s.io/e/dfx8me4un4ul", @@ -107,6 +117,7 @@ exports[`Frembed handle tmdb black mirror s4e2 1`] = ` "countryCodes": [ "fr", ], + "referer": "https://frembed.lat", "title": "Black Mirror 4x2", }, "url": "https://netu.fanstream.live/e/0DFgfkcXOsDP", @@ -116,6 +127,7 @@ exports[`Frembed handle tmdb black mirror s4e2 1`] = ` "countryCodes": [ "fr", ], + "referer": "https://frembed.lat", "title": "Black Mirror 4x2", }, "url": "https://jilliandescribecompany.com/e/cqy9oue7sv0g", @@ -125,6 +137,7 @@ exports[`Frembed handle tmdb black mirror s4e2 1`] = ` "countryCodes": [ "fr", ], + "referer": "https://frembed.lat", "title": "Black Mirror 4x2", }, "url": "https://ds2play.com/e/fzfvfq3ngig0", diff --git a/src/source/__snapshots__/FrenchCloud.test.ts.snap b/src/source/__snapshots__/FrenchCloud.test.ts.snap index 679cc7a..54372a8 100644 --- a/src/source/__snapshots__/FrenchCloud.test.ts.snap +++ b/src/source/__snapshots__/FrenchCloud.test.ts.snap @@ -7,6 +7,7 @@ exports[`FrenchCloud handle imdb the devil's bath 1`] = ` "countryCodes": [ "fr", ], + "referer": "https://frenchcloud.cam", }, "url": "https://supervideo.cc/e/ttnqt211ebtg", }, @@ -15,6 +16,7 @@ exports[`FrenchCloud handle imdb the devil's bath 1`] = ` "countryCodes": [ "fr", ], + "referer": "https://frenchcloud.cam", }, "url": "https://dropload.io/embed-w4yit5wiia9y.html", }, @@ -23,6 +25,7 @@ exports[`FrenchCloud handle imdb the devil's bath 1`] = ` "countryCodes": [ "fr", ], + "referer": "https://frenchcloud.cam", }, "url": "https://mixdrop.ag/e/8l3634dmt68rnp", }, @@ -31,6 +34,7 @@ exports[`FrenchCloud handle imdb the devil's bath 1`] = ` "countryCodes": [ "fr", ], + "referer": "https://frenchcloud.cam", }, "url": "https://streamtape.com/e/gjA1OQ4klyHxgJ", }, @@ -39,6 +43,7 @@ exports[`FrenchCloud handle imdb the devil's bath 1`] = ` "countryCodes": [ "fr", ], + "referer": "https://frenchcloud.cam", }, "url": "https://dood.to/e/osbcylatzy6m", }, diff --git a/src/source/__snapshots__/HomeCine.test.ts.snap b/src/source/__snapshots__/HomeCine.test.ts.snap index 01e8e4e..95f6524 100644 --- a/src/source/__snapshots__/HomeCine.test.ts.snap +++ b/src/source/__snapshots__/HomeCine.test.ts.snap @@ -7,6 +7,7 @@ exports[`HomeCine does not return es content for mx 1`] = ` "countryCodes": [ "mx", ], + "referer": "https://www3.homecine.to/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad (2019)", }, "url": "https://fastream.to/embed-kc5dvcy34x8p.html", @@ -21,6 +22,7 @@ exports[`HomeCine does not return mx content for es 1`] = ` "countryCodes": [ "es", ], + "referer": "https://www3.homecine.to/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad (2019)", }, "url": "https://fastream.to/embed-c9tmfzsbfj0z.html", @@ -35,6 +37,7 @@ exports[`HomeCine handle el camino 1`] = ` "countryCodes": [ "mx", ], + "referer": "https://www3.homecine.to/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad (2019)", }, "url": "https://fastream.to/embed-kc5dvcy34x8p.html", @@ -44,6 +47,7 @@ exports[`HomeCine handle el camino 1`] = ` "countryCodes": [ "es", ], + "referer": "https://www3.homecine.to/el-camino-una-pelicula-de-breaking-bad", "title": "El Camino: Una película de Breaking Bad (2019)", }, "url": "https://fastream.to/embed-c9tmfzsbfj0z.html", @@ -58,6 +62,7 @@ exports[`HomeCine handle marvel - the punisher 1`] = ` "countryCodes": [ "es", ], + "referer": "https://www3.homecine.to/series/marvel-the-punisher", "title": "Marvel - The Punisher 1x1", }, "url": "https://fastream.to/embed-ujq9uojoftog.html", @@ -72,6 +77,7 @@ exports[`HomeCine handle walking dead s1e1 1`] = ` "countryCodes": [ "mx", ], + "referer": "https://www3.homecine.to/series/serie-the-walking-dead-cualquier-idioma", "title": "The Walking Dead 1x1", }, "url": "https://fastream.to/embed-nkztf1memuca.html", @@ -81,6 +87,7 @@ exports[`HomeCine handle walking dead s1e1 1`] = ` "countryCodes": [ "es", ], + "referer": "https://www3.homecine.to/series/serie-the-walking-dead-cualquier-idioma", "title": "The Walking Dead 1x1", }, "url": "https://fastream.to/embed-5bv96pdifz0b.html", diff --git a/src/source/__snapshots__/KinoGer.test.ts.snap b/src/source/__snapshots__/KinoGer.test.ts.snap index 87b15c9..ad34ac0 100644 --- a/src/source/__snapshots__/KinoGer.test.ts.snap +++ b/src/source/__snapshots__/KinoGer.test.ts.snap @@ -7,6 +7,7 @@ exports[`KinoGer handle imdb blood and sinners 1`] = ` "countryCodes": [ "de", ], + "referer": "https://kinoger.com/stream/18809-blood-sinners-stream.html", "title": "Blood & Sinners (2025)", }, "url": "https://fsst.online/embed/900576/", @@ -16,6 +17,7 @@ exports[`KinoGer handle imdb blood and sinners 1`] = ` "countryCodes": [ "de", ], + "referer": "https://kinoger.com/stream/18809-blood-sinners-stream.html", "title": "Blood & Sinners (2025)", }, "url": "https://kinoger.pw/e/6zeREaMlrqREZPa", @@ -25,6 +27,7 @@ exports[`KinoGer handle imdb blood and sinners 1`] = ` "countryCodes": [ "de", ], + "referer": "https://kinoger.com/stream/18809-blood-sinners-stream.html", "title": "Blood & Sinners (2025)", }, "url": "https://kinoger.re/#ge5fhb", @@ -39,6 +42,7 @@ exports[`KinoGer handle imdb dead city s2e5 1`] = ` "countryCodes": [ "de", ], + "referer": "https://kinoger.com/stream/12971-the-walking-dead-dead-city-stream.html", "title": "The Walking Dead: Dead City 2x5", }, "url": "https://supervideo.cc/e/bj6szat1pval", @@ -48,6 +52,7 @@ exports[`KinoGer handle imdb dead city s2e5 1`] = ` "countryCodes": [ "de", ], + "referer": "https://kinoger.com/stream/12971-the-walking-dead-dead-city-stream.html", "title": "The Walking Dead: Dead City 2x5", }, "url": "https://kinoger.re/#x6tsx9", @@ -62,6 +67,7 @@ exports[`KinoGer handle imdb dead city s2e6 1`] = ` "countryCodes": [ "de", ], + "referer": "https://kinoger.com/stream/12971-the-walking-dead-dead-city-stream.html", "title": "The Walking Dead: Dead City 2x6", }, "url": "https://fsst.online/embed/901994/", @@ -71,6 +77,7 @@ exports[`KinoGer handle imdb dead city s2e6 1`] = ` "countryCodes": [ "de", ], + "referer": "https://kinoger.com/stream/12971-the-walking-dead-dead-city-stream.html", "title": "The Walking Dead: Dead City 2x6", }, "url": "https://kinoger.re/#ep1tcf", @@ -87,6 +94,7 @@ exports[`KinoGer handle no fsst via brokeback mountain 1`] = ` "countryCodes": [ "de", ], + "referer": "https://kinoger.com/stream/14781-brokeback-mountain-stream.html", "title": "Brokeback Mountain (2005)", }, "url": "https://dooodster.com/e/1cfcevn6dg8shrfvht22odxw2lty18hr", diff --git a/src/source/__snapshots__/MegaKino.test.ts.snap b/src/source/__snapshots__/MegaKino.test.ts.snap index c873b4f..b950245 100644 --- a/src/source/__snapshots__/MegaKino.test.ts.snap +++ b/src/source/__snapshots__/MegaKino.test.ts.snap @@ -7,6 +7,7 @@ exports[`MegaKino handle imdb baymax 1`] = ` "countryCodes": [ "de", ], + "referer": "https://megakino.si/films/693-baymax-riesiges-robowabohu.html", "title": "Baymax - Riesiges Robowabohu", }, "url": "https://voe.sx/e/8doq7gwiwtig", @@ -16,6 +17,7 @@ exports[`MegaKino handle imdb baymax 1`] = ` "countryCodes": [ "de", ], + "referer": "https://megakino.si/films/693-baymax-riesiges-robowabohu.html", "title": "Baymax - Riesiges Robowabohu", }, "url": "https://watch.gxplayer.xyz/watch?v=MEKI92PU", diff --git a/src/source/__snapshots__/MeineCloud.test.ts.snap b/src/source/__snapshots__/MeineCloud.test.ts.snap index 5a5f60d..ee9de36 100644 --- a/src/source/__snapshots__/MeineCloud.test.ts.snap +++ b/src/source/__snapshots__/MeineCloud.test.ts.snap @@ -7,6 +7,7 @@ exports[`MeineCloud handle imdb the devil's bath 1`] = ` "countryCodes": [ "de", ], + "referer": "https://meinecloud.click", }, "url": "https://supervideo.cc/e/q7i0sw1oytw3", }, @@ -15,6 +16,7 @@ exports[`MeineCloud handle imdb the devil's bath 1`] = ` "countryCodes": [ "de", ], + "referer": "https://meinecloud.click", }, "url": "https://dropload.io/embed-lyo2h1snpe5c.html", }, @@ -23,6 +25,7 @@ exports[`MeineCloud handle imdb the devil's bath 1`] = ` "countryCodes": [ "de", ], + "referer": "https://meinecloud.click", }, "url": "https://mixdrop.ag/e/3nzwveprim63or6", }, @@ -31,6 +34,7 @@ exports[`MeineCloud handle imdb the devil's bath 1`] = ` "countryCodes": [ "de", ], + "referer": "https://meinecloud.click", }, "url": "https://dood.to/e/sk1m9eumzyjj", }, diff --git a/src/source/__snapshots__/MostraGuarda.test.ts.snap b/src/source/__snapshots__/MostraGuarda.test.ts.snap index d343c00..48de9ab 100644 --- a/src/source/__snapshots__/MostraGuarda.test.ts.snap +++ b/src/source/__snapshots__/MostraGuarda.test.ts.snap @@ -7,6 +7,7 @@ exports[`MostraGuarda handle imdb the devil's bath 1`] = ` "countryCodes": [ "it", ], + "referer": "https://mostraguarda.stream", }, "url": "https://supervideo.cc/e/6vri8jyhla3n", }, @@ -15,6 +16,7 @@ exports[`MostraGuarda handle imdb the devil's bath 1`] = ` "countryCodes": [ "it", ], + "referer": "https://mostraguarda.stream", }, "url": "https://dropload.io/embed-xsr90y2ltdyx.html", }, @@ -23,6 +25,7 @@ exports[`MostraGuarda handle imdb the devil's bath 1`] = ` "countryCodes": [ "it", ], + "referer": "https://mostraguarda.stream", }, "url": "https://mixdrop.ag/e/vk196d6xfzwwo1", }, @@ -31,6 +34,7 @@ exports[`MostraGuarda handle imdb the devil's bath 1`] = ` "countryCodes": [ "it", ], + "referer": "https://mostraguarda.stream", }, "url": "https://dood.to/e/37o04m33q3g5", }, diff --git a/src/source/__snapshots__/PrimeWire.test.ts.snap b/src/source/__snapshots__/PrimeWire.test.ts.snap index dc2c781..cbb9f9a 100644 --- a/src/source/__snapshots__/PrimeWire.test.ts.snap +++ b/src/source/__snapshots__/PrimeWire.test.ts.snap @@ -8,6 +8,7 @@ exports[`PrimeWire handle el camino 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", "title": "El.Camino.A.Breaking.Bad.Movie.2019.1080p.WEBRip.x264 YTS.LT.mp4", }, "url": "https://streamtape.com/v/qMVMPa49M1hz8BR/El.Camino.A.Breaking.Bad.Movie.2019.1080p.WEBRip.x264_YTS.LT.mp4", @@ -18,6 +19,7 @@ exports[`PrimeWire handle el camino 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", "title": "El.Camino.A.Breaking.Bad.Movie.2019.1080p.WEBRip.x264 YTS.LT.mp4", }, "url": "https://streamtape.com/v/6QLoLq0O8DtObX", @@ -27,6 +29,7 @@ exports[`PrimeWire handle el camino 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", }, "url": "https://filelions.to/f/bv4b7tl9u1ij", }, @@ -35,6 +38,7 @@ exports[`PrimeWire handle el camino 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", }, "url": "https://filelions.to/f/wayeo7l1cw7d", }, @@ -44,6 +48,7 @@ exports[`PrimeWire handle el camino 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", "title": "El.Camino.A.Breaking.Bad.Movie.2019.720p.BluRay.x264.AAC-[YTS.MX].mp4", }, "url": "https://voe.sx/paqi7qqku3zi", @@ -54,6 +59,7 @@ exports[`PrimeWire handle el camino 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", "title": "El Camino A Breaking Bad Movie 2019 720p BluRay x264 AAC-YTS MX.mp4", }, "url": "https://voe.sx/ysimllytd3zo", @@ -64,6 +70,7 @@ exports[`PrimeWire handle el camino 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", "title": "El Camino A Breaking Bad Movie 2019 720p BluRay x264 AAC-YTS MX.mp4", }, "url": "https://voe.sx/xwhvakkexuob", @@ -74,6 +81,7 @@ exports[`PrimeWire handle el camino 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", "title": "El.Camino.A.Breaking.Bad.Movie.2019.720p.BluRay.x264.AAC-[YTS.MX].mp4", }, "url": "https://mixdrop.ag/f/ql0qrxnjb89nx8", @@ -84,6 +92,7 @@ exports[`PrimeWire handle el camino 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", "title": "El Camino A Breaking Bad Movie 2019 HDRip AC3-EVO.mp4", }, "url": "https://mixdrop.ag/f/2bnmi", @@ -94,6 +103,7 @@ exports[`PrimeWire handle el camino 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", "title": "El Camino A Breaking Bad Movie 2019 720p BluRay x264 AAC-YTS MX.mp4", }, "url": "https://mixdrop.ag/f/4njk6691b1k60d", @@ -104,6 +114,7 @@ exports[`PrimeWire handle el camino 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", "title": "El Camino A Breaking Bad Movie 2019 1080p WEBRip YTS LT", }, "url": "https://dood.watch/d/05fm25orfeux", @@ -114,6 +125,7 @@ exports[`PrimeWire handle el camino 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", "title": "El Camino A Breaking Bad Movie 2019 720p BluRay AAC-YTS MX", }, "url": "https://dood.watch/d/j2pa25q11pdu", @@ -124,6 +136,7 @@ exports[`PrimeWire handle el camino 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", "title": "El Camino A Breaking Bad Movie 2019 720p BluRay AAC-[YTS MX]", }, "url": "https://dood.watch/d/9lw62yyosxc0", @@ -133,6 +146,7 @@ exports[`PrimeWire handle el camino 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", }, "url": "https://streamwish.to/09q73jf6t6jw", }, @@ -147,6 +161,7 @@ exports[`PrimeWire handle el camino 2`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", "title": "El.Camino.A.Breaking.Bad.Movie.2019.1080p.WEBRip.x264 YTS.LT.mp4", }, "url": "https://streamtape.com/v/qMVMPa49M1hz8BR/El.Camino.A.Breaking.Bad.Movie.2019.1080p.WEBRip.x264_YTS.LT.mp4", @@ -157,6 +172,7 @@ exports[`PrimeWire handle el camino 2`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", "title": "El.Camino.A.Breaking.Bad.Movie.2019.1080p.WEBRip.x264 YTS.LT.mp4", }, "url": "https://streamtape.com/v/6QLoLq0O8DtObX", @@ -166,6 +182,7 @@ exports[`PrimeWire handle el camino 2`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", }, "url": "https://filelions.to/f/bv4b7tl9u1ij", }, @@ -174,6 +191,7 @@ exports[`PrimeWire handle el camino 2`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", }, "url": "https://filelions.to/f/wayeo7l1cw7d", }, @@ -183,6 +201,7 @@ exports[`PrimeWire handle el camino 2`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", "title": "El.Camino.A.Breaking.Bad.Movie.2019.720p.BluRay.x264.AAC-[YTS.MX].mp4", }, "url": "https://voe.sx/paqi7qqku3zi", @@ -193,6 +212,7 @@ exports[`PrimeWire handle el camino 2`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", "title": "El Camino A Breaking Bad Movie 2019 720p BluRay x264 AAC-YTS MX.mp4", }, "url": "https://voe.sx/ysimllytd3zo", @@ -203,6 +223,7 @@ exports[`PrimeWire handle el camino 2`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", "title": "El Camino A Breaking Bad Movie 2019 720p BluRay x264 AAC-YTS MX.mp4", }, "url": "https://voe.sx/xwhvakkexuob", @@ -213,6 +234,7 @@ exports[`PrimeWire handle el camino 2`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", "title": "El.Camino.A.Breaking.Bad.Movie.2019.720p.BluRay.x264.AAC-[YTS.MX].mp4", }, "url": "https://mixdrop.ag/f/ql0qrxnjb89nx8", @@ -223,6 +245,7 @@ exports[`PrimeWire handle el camino 2`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", "title": "El Camino A Breaking Bad Movie 2019 HDRip AC3-EVO.mp4", }, "url": "https://mixdrop.ag/f/2bnmi", @@ -233,6 +256,7 @@ exports[`PrimeWire handle el camino 2`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", "title": "El Camino A Breaking Bad Movie 2019 720p BluRay x264 AAC-YTS MX.mp4", }, "url": "https://mixdrop.ag/f/4njk6691b1k60d", @@ -243,6 +267,7 @@ exports[`PrimeWire handle el camino 2`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", "title": "El Camino A Breaking Bad Movie 2019 1080p WEBRip YTS LT", }, "url": "https://dood.watch/d/05fm25orfeux", @@ -253,6 +278,7 @@ exports[`PrimeWire handle el camino 2`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", "title": "El Camino A Breaking Bad Movie 2019 720p BluRay AAC-YTS MX", }, "url": "https://dood.watch/d/j2pa25q11pdu", @@ -263,6 +289,7 @@ exports[`PrimeWire handle el camino 2`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", "title": "El Camino A Breaking Bad Movie 2019 720p BluRay AAC-[YTS MX]", }, "url": "https://dood.watch/d/9lw62yyosxc0", @@ -272,6 +299,7 @@ exports[`PrimeWire handle el camino 2`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", }, "url": "https://streamwish.to/09q73jf6t6jw", }, @@ -285,6 +313,7 @@ exports[`PrimeWire handle imdb dead city s2e5 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", }, "url": "https://bigwarp.cc/4tb37obzt6re", }, @@ -293,6 +322,7 @@ exports[`PrimeWire handle imdb dead city s2e5 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", }, "url": "https://bigwarp.cc/u66q6mybilfa", }, @@ -301,6 +331,7 @@ exports[`PrimeWire handle imdb dead city s2e5 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", }, "url": "https://bigwarp.cc/aazhpuex9ppj", }, @@ -309,6 +340,7 @@ exports[`PrimeWire handle imdb dead city s2e5 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", }, "url": "https://orca.streamcasthub.store/?a=4f560fbe52#rc6mf", }, @@ -317,6 +349,7 @@ exports[`PrimeWire handle imdb dead city s2e5 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", }, "url": "https://filelions.to/f/odssr9dyjx5n", }, @@ -325,6 +358,7 @@ exports[`PrimeWire handle imdb dead city s2e5 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", }, "url": "https://filelions.to/f/eqmzrkv5kf5s", }, @@ -333,6 +367,7 @@ exports[`PrimeWire handle imdb dead city s2e5 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", }, "url": "https://filelions.to/f/fpru8wthtsf4", }, @@ -341,6 +376,7 @@ exports[`PrimeWire handle imdb dead city s2e5 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", }, "url": "https://filelions.to/f/0i0j0qz5o478", }, @@ -350,6 +386,7 @@ exports[`PrimeWire handle imdb dead city s2e5 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", "title": "The.Walking.Dead.Dead.City.S02E05.The.Bird.Always.Knows.720p.AMZN.WEB-DL.DDP5.1.H.264-NTb.mkv", }, "url": "https://voe.sx/te40pmzra8du", @@ -360,6 +397,7 @@ exports[`PrimeWire handle imdb dead city s2e5 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", "title": "The.Walking.Dead.Dead.City.S02E05.The.Bird.Always.Knows.720p.AMZN.WEB-DL.DDP5.1.H.264-NTb.mkv", }, "url": "https://voe.sx/y8lrmf2t7jhp", @@ -370,6 +408,7 @@ exports[`PrimeWire handle imdb dead city s2e5 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", "title": "The.Walking.Dead.Dead.City.S02E05.The.Bird.Always.Knows.720p.AMZN.WEB-DL.DDP5.1.H.264-NTb.mp4", }, "url": "https://voe.sx/grsvpdbxvw3e", @@ -380,6 +419,7 @@ exports[`PrimeWire handle imdb dead city s2e5 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", "title": "The.Walking.Dead.Dead.City.S02E05.The.Bird.Always.Knows.720p.AMZN.WEB-DL.DDP5.1.H.264-NTb.mp4", }, "url": "https://mixdrop.ag/f/q1pz4k94uxxkgvo", @@ -390,6 +430,7 @@ exports[`PrimeWire handle imdb dead city s2e5 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", "title": "The.Walking.Dead.Dead.City.S02E05.The.Bird.Always.Knows.720p.AMZN.WEB-DL.DDP5.1.H.264-NTb.mp4", }, "url": "https://mixdrop.ag/f/nlpj3q3ran17rv", @@ -400,6 +441,7 @@ exports[`PrimeWire handle imdb dead city s2e5 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", "title": "The.Walking.Dead.Dead.City.S02E05.The.Bird.Always.Knows.720p.AMZN.WEB-DL.DDP5.1.H.264-NTb.mkv.mp4", }, "url": "https://mixdrop.ag/f/9wvz9gp3b3q1llk", @@ -409,6 +451,7 @@ exports[`PrimeWire handle imdb dead city s2e5 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", }, "url": "https://dood.watch/d/sn87i3ru7plx", }, @@ -417,6 +460,7 @@ exports[`PrimeWire handle imdb dead city s2e5 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", }, "url": "https://dood.watch/d/1qfuy5yiq4r6", }, @@ -425,6 +469,7 @@ exports[`PrimeWire handle imdb dead city s2e5 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", }, "url": "https://dood.watch/d/8odyvc9bre16", }, @@ -433,6 +478,7 @@ exports[`PrimeWire handle imdb dead city s2e5 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", }, "url": "https://dood.watch/d/reslxv9siz41", }, @@ -441,6 +487,7 @@ exports[`PrimeWire handle imdb dead city s2e5 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", }, "url": "https://streamwish.to/h9p9qqgpq2lw", }, @@ -449,6 +496,7 @@ exports[`PrimeWire handle imdb dead city s2e5 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", }, "url": "https://streamwish.to/s986lkdy8mb5", }, @@ -457,6 +505,7 @@ exports[`PrimeWire handle imdb dead city s2e5 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", }, "url": "https://streamwish.to/jult1lcvqjlt", }, @@ -465,6 +514,7 @@ exports[`PrimeWire handle imdb dead city s2e5 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", "title": "The Walking Dead Dead City S02E05 The Bird Always Knows 720p AMZN WEB-DL DDP5 1 H 264-NTb mkv", }, "url": "https://savefiles.com/i0bj9gazequy", @@ -474,6 +524,7 @@ exports[`PrimeWire handle imdb dead city s2e5 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", "title": "The Walking Dead Dead City S02E05 The Bird Always Knows 720p AMZN WEB-DL DDP5 1 H 264-NTb mkv", }, "url": "https://filemoon.sx/d/8wllnog0cyl7", @@ -483,6 +534,7 @@ exports[`PrimeWire handle imdb dead city s2e5 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", "title": "The Walking Dead Dead City S02E05 The Bird Always Knows 720p AMZN WEB-DL DDP5 1 H 264-NTb", }, "url": "https://filemoon.sx/d/ftowmfa7f0ge/The.Walking.Dead.Dead.City.S02E05.The.Bird.Always.Knows.720p.AMZN.WEB-DL.DDP5.1.H.264-NTb.mkv", @@ -492,6 +544,7 @@ exports[`PrimeWire handle imdb dead city s2e5 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", }, "url": "http://vidmoly.me/w/46bi0sec0966", }, @@ -500,6 +553,7 @@ exports[`PrimeWire handle imdb dead city s2e5 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", }, "url": "http://vidmoly.me/w/okcwblnaqw3t", }, @@ -508,6 +562,7 @@ exports[`PrimeWire handle imdb dead city s2e5 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", "title": "The Walking Dead Dead City S02E05 The Bird Always Knows 720p AMZN WEB-DL DDP5 1 H 264-NTb", }, "url": "https://luluvdoo.com/d/au00sj11vqku", @@ -517,6 +572,7 @@ exports[`PrimeWire handle imdb dead city s2e5 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", }, "url": "https://filegram.to/6q8gctbf79gc", }, @@ -525,6 +581,7 @@ exports[`PrimeWire handle imdb dead city s2e5 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", }, "url": "https://filegram.to/6yuyz0dgqu05", }, @@ -533,6 +590,7 @@ exports[`PrimeWire handle imdb dead city s2e5 1`] = ` "countryCodes": [ "en", ], + "referer": "https://primesrc.me", }, "url": "https://filegram.to/erapbfgcdguq", }, diff --git a/src/source/__snapshots__/StreamKiste.test.ts.snap b/src/source/__snapshots__/StreamKiste.test.ts.snap index fce22ac..e2de492 100644 --- a/src/source/__snapshots__/StreamKiste.test.ts.snap +++ b/src/source/__snapshots__/StreamKiste.test.ts.snap @@ -7,6 +7,7 @@ exports[`StreamKiste handle imdb black mirror s2e4 1`] = ` "countryCodes": [ "de", ], + "referer": "https://streamkiste.taxi/movie/29992-black-mirror-stream-kostenlos.html", "title": "Black Mirror 2x4", }, "url": "https://supervideo.cc/embed-22go50mon0ke.html", @@ -16,6 +17,7 @@ exports[`StreamKiste handle imdb black mirror s2e4 1`] = ` "countryCodes": [ "de", ], + "referer": "https://streamkiste.taxi/movie/29992-black-mirror-stream-kostenlos.html", "title": "Black Mirror 2x4", }, "url": "https://dropload.io/embed-jvjwrkpijr0f.html", diff --git a/src/source/__snapshots__/VerHdLink.test.ts.snap b/src/source/__snapshots__/VerHdLink.test.ts.snap index 900f275..e8af9ff 100644 --- a/src/source/__snapshots__/VerHdLink.test.ts.snap +++ b/src/source/__snapshots__/VerHdLink.test.ts.snap @@ -7,6 +7,7 @@ exports[`VerHdLink handle titanic 1`] = ` "countryCodes": [ "mx", ], + "referer": "https://verhdlink.cam", }, "url": "https://supervideo.cc/e/g6okbr0kd790", }, @@ -15,6 +16,7 @@ exports[`VerHdLink handle titanic 1`] = ` "countryCodes": [ "mx", ], + "referer": "https://verhdlink.cam", }, "url": "https://dropload.io/embed-jjjx9j5joiz8.html", }, @@ -23,6 +25,7 @@ exports[`VerHdLink handle titanic 1`] = ` "countryCodes": [ "mx", ], + "referer": "https://verhdlink.cam", }, "url": "https://mixdrop.ag/e/vn0wx308fq984q", }, @@ -31,6 +34,7 @@ exports[`VerHdLink handle titanic 1`] = ` "countryCodes": [ "mx", ], + "referer": "https://verhdlink.cam", }, "url": "https://streamtape.com/e/Bjp2vjrdBxsK82", }, @@ -39,6 +43,7 @@ exports[`VerHdLink handle titanic 1`] = ` "countryCodes": [ "mx", ], + "referer": "https://verhdlink.cam", }, "url": "https://dood.to/e/rw7rxdfrbg09", }, @@ -47,6 +52,7 @@ exports[`VerHdLink handle titanic 1`] = ` "countryCodes": [ "es", ], + "referer": "https://verhdlink.cam", }, "url": "https://supervideo.cc/e/qe1fviow8uwy", }, @@ -55,6 +61,7 @@ exports[`VerHdLink handle titanic 1`] = ` "countryCodes": [ "es", ], + "referer": "https://verhdlink.cam", }, "url": "https://dropload.io/embed-ick4ti66vt6s.html", }, @@ -63,6 +70,7 @@ exports[`VerHdLink handle titanic 1`] = ` "countryCodes": [ "es", ], + "referer": "https://verhdlink.cam", }, "url": "https://mixdrop.ag/e/xokzmv61hrwe8o", }, @@ -71,6 +79,7 @@ exports[`VerHdLink handle titanic 1`] = ` "countryCodes": [ "es", ], + "referer": "https://verhdlink.cam", }, "url": "https://dood.to/e/gy8l8mb2i311", }, diff --git a/src/utils/StreamResolver.ts b/src/utils/StreamResolver.ts index 9f096d3..1b5d27a 100644 --- a/src/utils/StreamResolver.ts +++ b/src/utils/StreamResolver.ts @@ -50,7 +50,7 @@ export class StreamResolver { const sourceResults = await source.handle(ctx, type, id); const sourceUrlResults = await Promise.all( - sourceResults.map(({ url, meta }) => this.extractorRegistry.handle(ctx, url, { ...meta, referer: meta.referer ?? source.baseUrl, sourceLabel: source.label })), + sourceResults.map(({ url, meta }) => this.extractorRegistry.handle(ctx, url, { ...meta, sourceLabel: source.label })), ); urlResults.push(...sourceUrlResults.flat());