UNPKG

@fin.cx/opendata

Version:

A comprehensive TypeScript library for accessing business data and real-time financial information. Features include German company data management with MongoDB integration, JSONL bulk processing, automated Handelsregister interactions, and real-time stoc

130 lines (129 loc) 3.21 kB
/** * Base provider entry for tracking provider state */ export interface IBaseProviderEntry<TProvider> { provider: TProvider; config: IBaseProviderConfig; lastError?: Error; lastErrorTime?: Date; successCount: number; errorCount: number; } /** * Base provider configuration */ export interface IBaseProviderConfig { enabled: boolean; priority: number; timeout?: number; retryAttempts?: number; retryDelay?: number; cacheTTL?: number; } /** * Base provider interface */ export interface IBaseProvider { name: string; priority: number; isAvailable(): Promise<boolean>; readonly requiresAuth: boolean; readonly rateLimit?: { requestsPerMinute: number; requestsPerDay?: number; }; } /** * Cache entry for any data type */ export interface IBaseCacheEntry<TData> { data: TData; timestamp: Date; ttl: number; } /** * Base service for managing data providers with caching * Shared logic extracted from StockPriceService and FundamentalsService */ export declare abstract class BaseProviderService<TProvider extends IBaseProvider, TData> { protected providers: Map<string, IBaseProviderEntry<TProvider>>; protected cache: Map<string, IBaseCacheEntry<TData>>; protected logger: Console; protected cacheConfig: { ttl: number; maxEntries: number; }; constructor(cacheConfig?: { ttl?: number; maxEntries?: number; }); /** * Register a provider */ register(provider: TProvider, config?: Partial<IBaseProviderConfig>): void; /** * Unregister a provider */ unregister(providerName: string): void; /** * Get a specific provider by name */ getProvider(name: string): TProvider | undefined; /** * Get all registered providers */ getAllProviders(): TProvider[]; /** * Get enabled providers sorted by priority */ getEnabledProviders(): TProvider[]; /** * Check health of all providers */ checkProvidersHealth(): Promise<Map<string, boolean>>; /** * Get provider statistics */ getProviderStats(): Map<string, { successCount: number; errorCount: number; lastError?: string; lastErrorTime?: Date; }>; /** * Clear all cached data */ clearCache(): void; /** * Set cache TTL */ setCacheTTL(ttl: number): void; /** * Get cache statistics */ getCacheStats(): { size: number; maxEntries: number; ttl: number; }; /** * Fetch with retry logic */ protected fetchWithRetry<T>(fetchFn: () => Promise<T>, config: IBaseProviderConfig): Promise<T>; /** * Get from cache if not expired */ protected getFromCache(key: string): TData | null; /** * Add to cache with TTL */ protected addToCache(key: string, data: TData, ttl?: number): void; /** * Track successful fetch for provider */ protected trackSuccess(providerName: string): void; /** * Track failed fetch for provider */ protected trackError(providerName: string, error: Error): void; }