import type { FeedItem, FeedSource } from './feed.types.js'; export interface StorageError { code: 'DB_ERROR' | 'CONSTRAINT_ERROR' | 'UNKNOWN'; message: string; } export interface IStorage { /** * Persist items to storage. Should handle duplicates gracefully (upsert). */ save(items: FeedItem[]): Promise; /** * Get most recent items across all sources. */ getRecent(limit: number): Promise; /** * Get recent items from a specific source feed. */ getBySource(source: string, limit: number): Promise; /** * Search items by title/content keywords. */ search(query: string): Promise; /** * Get all feed sources, optionally filtering by active status. */ getFeedSources(activeOnly?: boolean): Promise; /** * Get a single feed source by ID. */ getFeedSourceById(id: string): Promise; /** * Save or update a feed source (upsert). */ saveFeedSource(source: FeedSource): Promise; /** * Update feed source status fields (last fetched, success, failures, active). */ updateFeedSourceStatus( id: string, updates: { lastFetchedAt?: Date; lastSuccessAt?: Date; consecutiveFailures?: number; isActive?: boolean; } ): Promise; /** * Delete a feed source by ID. */ deleteFeedSource(id: string): Promise; }