@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
TypeScript
/**
* 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;
}