UNPKG

@kareemaly/researcher

Version:
125 lines (124 loc) 3.08 kB
export type SearchType = "web" | "news" | "academic"; export interface SearchOptions { type?: SearchType; location?: string; language?: string; limit?: number; } export interface SearchResult { id: string; timestamp: number; query: string; type: string; location?: string; language?: string; results: SearchResultItem[]; } export interface SearchResultItem { title: string; url: string; snippet?: string; language?: string; published?: string; } export interface ProcessedContent { url: string; title: string; text: string; html: string; markdown: string; metadata: { title?: string; description?: string; keywords?: string[]; author?: string; published?: string; }; } export interface StorageConfig { basePath: string; createDirectories?: boolean; } export interface StorageStats { totalSizeBytes: number; searchCount: number; contentCount: number; } export interface IStorage { initialize(): Promise<void>; saveSearch(search: SearchResult): Promise<string>; saveContent(searchId: string, content: ProcessedContent): Promise<void>; getSearch(id: string): Promise<SearchResult | null>; getContent(searchId: string, url: string): Promise<ProcessedContent | null>; listSearches(): Promise<SearchResult[]>; getStats(): Promise<StorageStats>; cleanOlderThan(date: Date): Promise<number>; cleanAll(): Promise<number>; } export interface RateLimitConfig { requestsPerPeriod: number; periodSeconds: number; } export interface IRateLimiter { initialize(): Promise<void>; acquire(): Promise<void>; release(): Promise<void>; } export interface IContentProcessor { process(url: string): Promise<ProcessedContent>; } export interface ISearchProvider { search(query: string, options?: SearchOptions): Promise<SearchResult>; } export interface BaseCommand { outputDir: string; verbose?: boolean; } export interface SearchCommand extends BaseCommand { query: string; type?: SearchType; location?: string; limit?: number; output?: string; } export interface ListCommand extends BaseCommand { limit?: number; format?: "table" | "json"; } export interface ShowCommand extends BaseCommand { searchId: string; format?: "table" | "json"; } export interface CleanCommand extends BaseCommand { olderThan: string; dryRun?: boolean; } export interface RateLimitLock { lastRequest: string; requestCount: number; } export interface SearchMetadata { id: string; timestamp: string; query: string; options: SearchOptions; resultCount: number; processingTimeMs: number; } export interface ContentMetadata { url: string; timestamp: string; title: string; formats: { html: string; markdown: string; text: string; }; processingTimeMs: number; } export interface SearchIndex { searches: { [id: string]: SearchMetadata; }; lastCleanup: string; }