import { AxiosStatic } from "axios"; import * as cheerio from "cheerio"; // Content type for providers (replaces zustand import) export interface Content { provider: string; [key: string]: any; } // getPosts export interface Post { title: string; link: string; image: string; provider?: string; } export type TextTracks = { title: string; language: string; type: "application/x-subrip" | "application/ttml+xml" | "text/vtt"; uri: string; }[]; // getStream export interface Stream { server: string; link: string; type: string; quality?: "360" | "480" | "720" | "1080" | "2160"; subtitles?: TextTracks; headers?: any; } // getInfo export interface Info { title: string; image: string; synopsis: string; imdbId: string; type: string; tags?: string[]; cast?: string[]; rating?: string; linkList: Link[]; } // getEpisodeLinks export interface EpisodeLink { title: string; link: string; } export interface Link { title: string; quality?: string; episodesLink?: string; directLinks?: { title: string; link: string; type?: "movie" | "series"; }[]; } // catalog export interface Catalog { title: string; filter: string; } export interface ProviderType { searchFilter?: string; catalog: Catalog[]; genres: Catalog[]; blurImage?: boolean; nonStreamableServer?: string[]; nonDownloadableServer?: string[]; GetStream: ({ link, type, signal, providerContext, }: { link: string; type: string; signal: AbortSignal; providerContext: ProviderContext; }) => Promise; GetHomePosts: ({ filter, page, providerValue, signal, providerContext, }: { filter: string; page: number; providerValue: string; signal: AbortSignal; providerContext: ProviderContext; }) => Promise; GetEpisodeLinks?: ({ url, providerContext, }: { url: string; providerContext: ProviderContext; }) => Promise; GetMetaData: ({ link, provider, providerContext, }: { link: string; provider: Content["provider"]; providerContext: ProviderContext; }) => Promise; GetSearchPosts: ({ searchQuery, page, providerValue, signal, providerContext, }: { searchQuery: string; page: number; providerValue: string; signal: AbortSignal; providerContext: ProviderContext; }) => Promise; } // Options to customize the WAF-solving WebView dialog. // Options to customize the WAF-solving WebView dialog. export interface OpenWebViewOptions { // Title shown in the dialog header. title?: string; // Helper text shown under the title. description?: string; headers?: Record; waitForCookie?: string; force?: boolean; // If set, the dialog auto-cancels (rejects) after this many milliseconds. timeoutMs?: number; } // Result returned to the provider after the user solves the challenge. export interface OpenWebViewResult { // The page response after the challenge is solved: the rendered HTML of the // document (document.documentElement.outerHTML). data: string; // Cookie header value, e.g. "cf_clearance=abc; other=def". cookies: string; // Cookies as a name -> value map. cookieMap: Record; // The User-Agent used by the WebView. userAgent: string; // The URL that was opened. url: string; } export type ProviderContext = { axios: AxiosStatic; Aes: any; // AES encryption utility, if used getBaseUrl: (providerValue: string) => Promise; commonHeaders: Record; cheerio: typeof cheerio; openWebView: ( url: string, options?: OpenWebViewOptions, ) => Promise; };