From d99a22d7348a64150b875649e633892e7fa03c70 Mon Sep 17 00:00:00 2001 From: teddyHV11 Date: Sun, 7 Apr 2024 10:53:09 +0300 Subject: [PATCH] Add insertunit --- src/providers/all.ts | 2 + src/providers/sources/insertunit.ts | 72 +++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 src/providers/sources/insertunit.ts diff --git a/src/providers/all.ts b/src/providers/all.ts index d20e14b..49521c3 100644 --- a/src/providers/all.ts +++ b/src/providers/all.ts @@ -11,6 +11,7 @@ import { upstreamScraper } from '@/providers/embeds/upstream'; import { vidsrcembedScraper } from '@/providers/embeds/vidsrc'; import { flixhqScraper } from '@/providers/sources/flixhq/index'; import { goMoviesScraper } from '@/providers/sources/gomovies/index'; +import { insertunitScraper } from '@/providers/sources/insertunit'; import { kissAsianScraper } from '@/providers/sources/kissasian/index'; import { lookmovieScraper } from '@/providers/sources/lookmovie'; import { remotestreamScraper } from '@/providers/sources/remotestream'; @@ -55,6 +56,7 @@ export function gatherAllSources(): Array { goojaraScraper, hdRezkaScraper, primewireScraper, + insertunitScraper, ]; } diff --git a/src/providers/sources/insertunit.ts b/src/providers/sources/insertunit.ts new file mode 100644 index 0000000..b9d5f07 --- /dev/null +++ b/src/providers/sources/insertunit.ts @@ -0,0 +1,72 @@ +import { flags } from '@/entrypoint/utils/targets'; +import { makeSourcerer } from '@/providers/base'; +import { NotFoundError } from '@/utils/errors'; + +const insertunitbase = 'https://api.insertunit.ws/'; + +export const insertunitScraper = makeSourcerer({ + id: 'insertunit', + name: 'Insert Unit', + disabled: false, + rank: 60, + flags: [flags.CORS_ALLOWED], + async scrapeShow(ctx) { + const playerData = await ctx.fetcher(`${insertunitbase}/embed/imdb/${ctx.media.imdbId}`); + ctx.progress(30); + + const seasonDataJSONregex = /seasons:(.*)/; + const seasonData = seasonDataJSONregex.exec(playerData); + + if (seasonData === null || seasonData[1] === null) { + throw new NotFoundError('No result found'); + } + ctx.progress(60); + + const seasonTable = JSON.parse(seasonData[1]); + for (const season of seasonTable) { + if (season.season === ctx.media.season.number) { + if (season.episodes[ctx.media.episode.number] && season.episodes[ctx.media.episode.number].hls) { + return { + embeds: [], + stream: [ + { + id: 'primary', + captions: [], + playlist: season.episodes[ctx.media.episode.number].hls, + type: 'hls', + flags: [flags.CORS_ALLOWED], + }, + ], + }; + } + } + } + + throw new NotFoundError('No result found'); + }, + async scrapeMovie(ctx) { + const playerData = await ctx.fetcher(`${insertunitbase}/embed/imdb/${ctx.media.imdbId}`); + ctx.progress(50); + + const streamRegex = /hls: "([^"]*)/; + const streamData = streamRegex.exec(playerData); + + if (streamData === null || streamData[1] === null) { + throw new NotFoundError('No result found'); + } + ctx.progress(90); + + return { + embeds: [], + stream: [ + { + id: 'primary', + type: 'hls', + playlist: streamData[1], + flags: [flags.CORS_ALLOWED], + captions: [], + }, + ], + }; + }, +});