import type { IntentProfile, RadarDoc, RadarProfile } from '../domain/radar.js'; /** * Browser-like UA: many feed hosts (floristsreview.com, etc.) 403 requests * from bot signatures like "quillby-mcp/0.8 (editorial research agent)" while * serving the same feed to a browser UA. A realistic UA is required for * keyless harvesting to work at all. */ export declare const BROWSER_USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"; export interface FetchResult { source: string; items: RadarDoc[]; error?: string; elapsedMs?: number; } export declare function fetchRSS(url: string): Promise; /** * Google News RSS supports the `after:YYYY-MM-DD` operator (day precision) * to bound a search window at query time. The client's freshnessDays is the * bound — a 30-day window must not harvest months-old wire items that only * the post-hoc freshness decay would (weakly) penalize. Local calendar days, * matching the rest of the app. Returns '' when the value is not a positive * number (a profile edit race must not produce a malformed query). */ export declare function googleNewsDateBound(freshnessDays: number, now?: Date): string; export declare function fetchGoogleNews(profile: IntentProfile): Promise; export declare function searchExa(profile: IntentProfile, env: NodeJS.ProcessEnv): Promise; export declare function searchTavily(profile: IntentProfile, env: NodeJS.ProcessEnv, freshnessDays?: number): Promise; export declare function scrapeDirectUrls(urls: string[], env: NodeJS.ProcessEnv): Promise; export declare function collectAll(profile: IntentProfile, radar: RadarProfile, sources: Array<{ url: string; type: string; }>, env?: NodeJS.ProcessEnv, onProgress?: (label: string, done: number, total: number) => void, /** When set, fetch only these providers (feed URLs or provider names) — * used to re-attempt the stale/failed providers of a cached run. */ only?: string[]): Promise; //# sourceMappingURL=harvest.d.ts.map