1.7 KiB
1.7 KiB
OpenData Project Hints
Stocks Module
Overview
The stocks module provides real-time stock price data through various provider implementations. Currently supports Yahoo Finance with an extensible architecture for additional providers.
Architecture
- Provider Pattern: Each stock data source implements the
IStockProvider
interface - Service Registry:
StockPriceService
manages providers with priority-based selection - Caching: Built-in cache with configurable TTL to reduce API calls
- Fallback Logic: Automatic failover between providers if one fails
Yahoo Finance Provider Notes
- Uses public API endpoints (no authentication required)
- Two main endpoints:
/v8/finance/chart/{ticker}
- Single ticker with full data/v8/finance/spark?symbols={tickers}
- Multiple tickers with basic data
- Response data is in
response.body
when using smartrequest - Requires User-Agent header to avoid rate limiting
Usage Example
import { StockPriceService, YahooFinanceProvider } from '@fin.cx/opendata';
const stockService = new StockPriceService({ ttl: 60000 });
const yahooProvider = new YahooFinanceProvider();
stockService.register(yahooProvider);
const price = await stockService.getPrice({ ticker: 'AAPL' });
console.log(`${price.ticker}: $${price.price}`);
Testing
- Tests use real API calls (be mindful of rate limits)
- Mock invalid ticker 'INVALID_TICKER_XYZ' for error testing
- Clear cache between tests to ensure fresh data
- The spark endpoint may return fewer results than requested
Future Providers
To add a new provider:
- Create
ts/stocks/providers/provider.{name}.ts
- Implement the
IStockProvider
interface - Register with
StockPriceService
- No changes needed to existing code