pstreams-providers/src/providers/sources/insertunit.ts
2024-04-07 11:48:04 +03:00

72 lines
2 KiB
TypeScript

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: 'Insertunit',
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: [],
},
],
};
},
});