pstreams-providers/src/providers/embeds/dropload.ts
2024-04-03 23:26:54 +05:30

52 lines
1.4 KiB
TypeScript

import { unpack } from 'unpacker';
import { flags } from '@/entrypoint/utils/targets';
import { makeEmbed } from '../base';
const evalCodeRegex = /eval\((.*)\)/g;
const fileRegex = /file:"(.*?)"/g;
const tracksRegex = /\{file:"([^"]+)",kind:"thumbnails"\}/g;
export const droploadScraper = makeEmbed({
id: 'dropload',
name: 'Dropload',
rank: 120,
scrape: async (ctx) => {
const mainPageRes = await ctx.proxiedFetcher.full<string>(ctx.url, {
headers: {
referer: ctx.url,
},
});
const mainPageUrl = new URL(mainPageRes.finalUrl);
const mainPage = mainPageRes.body;
const evalCode = mainPage.match(evalCodeRegex);
if (!evalCode) throw new Error('Failed to find eval code');
const unpacked = unpack(evalCode[1]);
const file = fileRegex.exec(unpacked);
const thumbnailTrack = tracksRegex.exec(unpacked);
if (!file?.[1]) throw new Error('Failed to find file');
return {
stream: [
{
id: 'primary',
type: 'hls',
playlist: file[1],
flags: [flags.IP_LOCKED, flags.CORS_ALLOWED],
captions: [],
...(thumbnailTrack
? {
thumbnailTrack: {
type: 'vtt',
url: mainPageUrl.origin + thumbnailTrack[1],
},
}
: {}),
},
],
};
},
});