import type { ScrapePluginManager } from "../controllers/manager.ts"; import type { RawScrapeRequester } from "../types/input/Requester.ts"; import type { MediaSource, SubtitleSource } from "../types/output/MediaSources.ts"; import type { ScrapeType } from "../types/hooks/useSources.ts"; import type { SourcesError } from "../types/hooks/useSources.ts"; export interface UseScraperOptions { manager: ScrapePluginManager | null; type: ScrapeType; continuous: boolean; } /** * Internal hook that encapsulates the scraping logic. * * - Normal mode: `scrape(requester)` fetches all results then sets state. * - Continuous mode: `scrape(requester)` ignores `successQuorum` and streams * each provider's results into state as they arrive. * - Calling `scrape()` again (or `stopContinuousScraping()`) cancels any * in-flight operations and, for a new scrape, clears previous sources. */ export declare function useScraper(options: UseScraperOptions): { readonly mediaSources: MediaSource[]; readonly subtitleSources: SubtitleSource[]; readonly isLoading: boolean; readonly isContinuousScraping: boolean; readonly error: SourcesError | null; readonly scrape: (requester: RawScrapeRequester) => Promise; readonly stopContinuousScraping: () => void; readonly clearSources: () => void; };