fmp-node-api 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/client.ts","../src/shared.ts","../src/utils/validation.ts","../src/endpoints/stock.ts","../src/endpoints/financial.ts","../src/endpoints/forex.ts","../src/endpoints/crypto.ts","../src/endpoints/etf.ts","../src/endpoints/mutual-fund.ts","../src/endpoints/bond.ts","../src/endpoints/economic.ts","../src/endpoints/market.ts","../src/fmp.ts","../src/types/common.ts","../src/utils/formatting.ts","../src/utils/constants.ts"],"names":["axios","config","Period","Exchange","validateApiKey"],"mappings":"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","file":"index.js","sourcesContent":["import axios, { AxiosInstance, AxiosRequestConfig } from 'axios';\nimport { FMPConfig, APIResponse } from './types';\n\nexport class FMPClient {\n private client: AxiosInstance;\n private apiKey: string;\n private baseURL: string;\n\n constructor(config: FMPConfig) {\n this.apiKey = config.apiKey;\n this.baseURL = config.baseURL || 'https://financialmodelingprep.com/api/v3';\n\n this.client = axios.create({\n baseURL: this.baseURL,\n timeout: config.timeout || 10000,\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n // Add API key to all requests\n this.client.interceptors.request.use(config => {\n config.params = {\n ...config.params,\n apikey: this.apiKey,\n };\n return config;\n });\n }\n\n /**\n * Make a GET request to the API\n */\n async get<T = any>(endpoint: string, params?: Record<string, any>): Promise<APIResponse<T>> {\n try {\n const response = await this.client.get(endpoint, { params });\n return {\n success: true,\n data: response.data,\n status: response.status,\n };\n } catch (error: any) {\n return {\n success: false,\n error: error.message || 'Unknown error occurred',\n status: error.response?.status || 500,\n };\n }\n }\n\n /**\n * Make a POST request to the API\n */\n async post<T = any>(\n endpoint: string,\n data?: any,\n config?: AxiosRequestConfig,\n ): Promise<APIResponse<T>> {\n try {\n const response = await this.client.post(endpoint, data, config);\n return {\n success: true,\n data: response.data,\n status: response.status,\n };\n } catch (error: any) {\n return {\n success: false,\n error: error.message || 'Unknown error occurred',\n status: error.response?.status || 500,\n };\n }\n }\n\n /**\n * Get the underlying axios instance for advanced usage\n */\n getAxiosInstance(): AxiosInstance {\n return this.client;\n }\n}\n","// Shared types and utilities for FMP API wrapper\n\n// Common error types\nexport class FMPError extends Error {\n constructor(\n message: string,\n public status?: number,\n public code?: string,\n ) {\n super(message);\n this.name = 'FMPError';\n }\n}\n\n// Common utility functions (for backward compatibility)\nexport function validateApiKey(apiKey: string): void {\n if (!apiKey || typeof apiKey !== 'string') {\n throw new FMPError('API key is required and must be a string');\n }\n}\n\nexport function validateSymbol(symbol: string): void {\n if (!symbol || typeof symbol !== 'string') {\n throw new FMPError('Symbol is required and must be a string');\n }\n}\n\n// Common constants (for backward compatibility)\nexport const FMP_BASE_URL = 'https://financialmodelingprep.com/api/v3';\nexport const FMP_BASE_URL_V4 = 'https://financialmodelingprep.com/api/v4';\n\n// Common enums (for backward compatibility)\nexport enum Period {\n ANNUAL = 'annual',\n QUARTER = 'quarter',\n}\n\nexport enum Exchange {\n NYSE = 'NYSE',\n NASDAQ = 'NASDAQ',\n AMEX = 'AMEX',\n TSX = 'TSX',\n LSE = 'LSE',\n}\n\n// Common API response wrapper\nexport interface BaseResponse<T = any> {\n success: boolean;\n data?: T;\n error?: string;\n status: number;\n}\n\n// Alias for backward compatibility\nexport interface APIResponse<T = any> extends BaseResponse<T> {}\n\n// Configuration interface for API clients\nexport interface APIConfig {\n apiKey: string;\n baseURL?: string;\n timeout?: number;\n}\n\n// Common pagination parameters\nexport interface PaginationParams {\n limit?: number;\n offset?: number;\n page?: number;\n}\n\n// Common date range parameters\nexport interface DateRangeParams {\n from?: string;\n to?: string;\n}\n\n// Common symbol parameters\nexport interface SymbolParams {\n symbol: string;\n}\n\n// Common financial data types\nexport interface StockQuote {\n symbol: string;\n price: number;\n change: number;\n changePercent: number;\n dayLow: number;\n dayHigh: number;\n yearLow: number;\n yearHigh: number;\n marketCap: number;\n priceAvg50: number;\n priceAvg200: number;\n volume: number;\n avgVolume: number;\n exchange: string;\n open: number;\n previousClose: number;\n eps: number;\n pe: number;\n earningsAnnouncement: string;\n sharesOutstanding: number;\n timestamp: number;\n}\n\nexport interface CompanyProfile {\n symbol: string;\n price: number;\n beta: number;\n volAvg: number;\n marketCap: number;\n lastDiv: number;\n range: string;\n changes: number;\n companyName: string;\n currency: string;\n cik: string;\n isin: string;\n cusip: string;\n exchange: string;\n exchangeShortName: string;\n industry: string;\n website: string;\n description: string;\n ceo: string;\n sector: string;\n country: string;\n fullTimeEmployees: string;\n phone: string;\n address: string;\n city: string;\n state: string;\n zip: string;\n dcfDiff: number;\n dcf: number;\n image: string;\n ipoDate: string;\n defaultImage: boolean;\n isEtf: boolean;\n isActivelyTrading: boolean;\n isAdr: boolean;\n isFund: boolean;\n}\n\nexport interface FinancialStatement {\n date: string;\n symbol: string;\n reportedCurrency: string;\n cik: string;\n fillingDate: string;\n acceptedDate: string;\n calendarYear: string;\n period: string;\n link: string;\n finalLink: string;\n [key: string]: any; // For dynamic financial metrics\n}\n","// Validation utilities for FMP API\n\nimport { FMPError } from '../shared';\n\n/**\n * Validate API key\n */\nexport function validateApiKey(apiKey: string): void {\n if (!apiKey || typeof apiKey !== 'string' || apiKey.trim().length === 0) {\n throw new FMPError('API key is required and must be a non-empty string');\n }\n}\n\n/**\n * Validate stock symbol\n */\nexport function validateSymbol(symbol: string): void {\n if (!symbol || typeof symbol !== 'string' || symbol.trim().length === 0) {\n throw new FMPError('Symbol is required and must be a non-empty string');\n }\n\n // Basic symbol validation (alphanumeric and common symbols)\n const symbolRegex = /^[A-Z0-9.-]+$/;\n if (!symbolRegex.test(symbol.toUpperCase())) {\n throw new FMPError(\n 'Invalid symbol format. Symbols should contain only letters, numbers, dots, and hyphens',\n );\n }\n}\n\n/**\n * Validate date format (YYYY-MM-DD)\n */\nexport function validateDate(date: string): void {\n if (!date || typeof date !== 'string') {\n throw new FMPError('Date is required and must be a string');\n }\n\n const dateRegex = /^\\d{4}-\\d{2}-\\d{2}$/;\n if (!dateRegex.test(date)) {\n throw new FMPError('Invalid date format. Use YYYY-MM-DD format');\n }\n\n const parsedDate = new Date(date);\n if (isNaN(parsedDate.getTime())) {\n throw new FMPError('Invalid date');\n }\n}\n\n/**\n * Validate period parameter\n */\nexport function validatePeriod(period: string): void {\n if (period && !['annual', 'quarter'].includes(period)) {\n throw new FMPError('Period must be either \"annual\" or \"quarter\"');\n }\n}\n\n/**\n * Validate limit parameter\n */\nexport function validateLimit(limit: number): void {\n if (limit !== undefined && (typeof limit !== 'number' || limit < 1 || limit > 1000)) {\n throw new FMPError('Limit must be a number between 1 and 1000');\n }\n}\n\n/**\n * Validate page parameter\n */\nexport function validatePage(page: number): void {\n if (page !== undefined && (typeof page !== 'number' || page < 0)) {\n throw new FMPError('Page must be a non-negative number');\n }\n}\n","import { FMPClient } from '../client';\nimport { APIResponse, StockQuote, CompanyProfile } from '../types';\nimport {\n StockHistoricalPriceResponse,\n EarningsCalendar,\n StockList,\n MarketCap,\n StockSplit,\n StockDividend,\n} from '../types/stock';\nimport { QueryParams } from '../types/common';\n\nexport class StockEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get real-time stock quote\n */\n async getQuote({ symbol }: { symbol: string }): Promise<APIResponse<StockQuote[]>> {\n return this.client.get(`/quote/${symbol}`);\n }\n\n /**\n * Get company profile\n */\n async getCompanyProfile({ symbol }: { symbol: string }): Promise<APIResponse<CompanyProfile[]>> {\n return this.client.get(`/profile/${symbol}`);\n }\n\n /**\n * Get historical stock prices\n */\n async getHistoricalPrice({\n symbol,\n from,\n to,\n }: {\n symbol: string;\n from?: string;\n to?: string;\n }): Promise<APIResponse<StockHistoricalPriceResponse>> {\n const params = new URLSearchParams();\n if (from) params.append('from', from);\n if (to) params.append('to', to);\n const queryString = params.toString();\n return this.client.get(\n `/historical-price-full/${symbol}${queryString ? `?${queryString}` : ''}`,\n );\n }\n\n /**\n * Get list of all stocks\n */\n async getStockList(): Promise<APIResponse<StockList[]>> {\n return this.client.get('/stock/list');\n }\n\n /**\n * Get market capitalization\n */\n async getMarketCap({ symbol }: { symbol: string }): Promise<APIResponse<MarketCap[]>> {\n return this.client.get(`/market-capitalization/${symbol}`);\n }\n\n /**\n * Get earnings calendar\n */\n async getEarningsCalendar(params: {\n from?: string;\n to?: string;\n }): Promise<APIResponse<EarningsCalendar[]>> {\n const queryParams: QueryParams = {};\n if (params.from) queryParams.from = params.from;\n if (params.to) queryParams.to = params.to;\n return this.client.get('/earning_calendar', queryParams);\n }\n\n /**\n * Get stock splits\n */\n async getStockSplits({ symbol }: { symbol: string }): Promise<APIResponse<StockSplit[]>> {\n return this.client.get(`/stock_split_calendar/${symbol}`);\n }\n\n /**\n * Get dividend history\n */\n async getDividendHistory({ symbol }: { symbol: string }): Promise<APIResponse<StockDividend[]>> {\n const response = await this.client.get(`/historical-price-full/stock_dividend/${symbol}`);\n // The API returns { symbol, historical: [...] }\n return {\n ...response,\n data:\n response.success && response.data && Array.isArray(response.data.historical)\n ? response.data.historical\n : [],\n };\n }\n}\n","import { FMPClient } from '../client';\nimport {\n APIResponse,\n FinancialStatement,\n FinancialStatementsParams,\n KeyMetrics,\n FinancialRatios,\n EnterpriseValue,\n KeyMetricsParams,\n FinancialRatiosParams,\n EnterpriseValueParams,\n} from '../types';\n\nexport class FinancialEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get income statement\n */\n async getIncomeStatement({\n symbol,\n period = 'annual',\n limit = 5,\n }: FinancialStatementsParams): Promise<APIResponse<FinancialStatement[]>> {\n return this.client.get(`/income-statement/${symbol}?period=${period}&limit=${limit}`);\n }\n\n /**\n * Get balance sheet\n */\n async getBalanceSheet({\n symbol,\n period = 'annual',\n limit = 5,\n }: FinancialStatementsParams): Promise<APIResponse<FinancialStatement[]>> {\n return this.client.get(`/balance-sheet-statement/${symbol}?period=${period}&limit=${limit}`);\n }\n\n /**\n * Get cash flow statement\n */\n async getCashFlowStatement({\n symbol,\n period = 'annual',\n limit = 5,\n }: FinancialStatementsParams): Promise<APIResponse<FinancialStatement[]>> {\n return this.client.get(`/cash-flow-statement/${symbol}?period=${period}&limit=${limit}`);\n }\n\n /**\n * Get key metrics\n */\n async getKeyMetrics({\n symbol,\n period = 'annual',\n limit = 5,\n }: KeyMetricsParams): Promise<APIResponse<KeyMetrics[]>> {\n return this.client.get(`/key-metrics/${symbol}?period=${period}&limit=${limit}`);\n }\n\n /**\n * Get financial ratios\n */\n async getFinancialRatios({\n symbol,\n period = 'annual',\n limit = 5,\n }: FinancialRatiosParams): Promise<APIResponse<FinancialRatios[]>> {\n return this.client.get(`/ratios/${symbol}?period=${period}&limit=${limit}`);\n }\n\n /**\n * Get enterprise value\n */\n async getEnterpriseValue({\n symbol,\n period = 'annual',\n limit = 5,\n }: EnterpriseValueParams): Promise<APIResponse<EnterpriseValue[]>> {\n return this.client.get(`/enterprise-value/${symbol}?period=${period}&limit=${limit}`);\n }\n}\n","// Forex endpoints for FMP API\n\nimport { FMPClient } from '../client';\nimport { APIResponse, HistoricalPriceResponse, QueryParams } from '../types/common';\nimport { ForexQuote, ForexPair, ForexQuoteParams, ForexHistoricalParams } from '../types/forex';\n\nexport class ForexEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get real-time forex quote\n */\n async getQuote(params: ForexQuoteParams): Promise<APIResponse<ForexQuote[]>> {\n return this.client.get(`/quote/${params.symbol}`);\n }\n\n /**\n * Get historical forex data\n */\n async getHistoricalPrice(\n params: ForexHistoricalParams,\n ): Promise<APIResponse<HistoricalPriceResponse>> {\n const queryParams: QueryParams = {};\n if (params.from) queryParams.from = params.from;\n if (params.to) queryParams.to = params.to;\n if (params.timeseries) queryParams.timeseries = params.timeseries;\n\n return this.client.get(`/historical-price-full/${params.symbol}`, queryParams);\n }\n\n /**\n * Get list of all forex pairs\n * Using the forex-specific endpoint\n */\n async getForexList(): Promise<APIResponse<ForexPair[]>> {\n try {\n // Try the forex list endpoint first\n const response = await this.client.get('/forex-list');\n\n // If that doesn't work, try the general forex endpoint\n if (!response.success || !response.data) {\n const fallbackResponse = await this.client.get('/forex');\n return {\n ...fallbackResponse,\n data: Array.isArray(fallbackResponse.data)\n ? fallbackResponse.data\n : Array.isArray(fallbackResponse.data?.forexList)\n ? fallbackResponse.data.forexList\n : [],\n };\n }\n\n return {\n ...response,\n data: Array.isArray(response.data)\n ? response.data\n : Array.isArray(response.data?.forexList)\n ? response.data.forexList\n : [],\n };\n } catch (error) {\n // If both endpoints fail, return empty array\n return {\n success: false,\n error: 'Failed to fetch forex pairs',\n status: 500,\n data: [],\n };\n }\n }\n\n /**\n * Get forex rates for a specific currency\n */\n async getForexRates(baseCurrency: string = 'USD'): Promise<APIResponse<Record<string, number>>> {\n return this.client.get(`/forex/${baseCurrency}`);\n }\n\n /**\n * Get forex rates for all currencies\n */\n async getAllForexRates(): Promise<APIResponse<Record<string, Record<string, number>>>> {\n return this.client.get('/forex');\n }\n}\n","// Cryptocurrency endpoints for FMP API\n\nimport { FMPClient } from '../client';\nimport { APIResponse, HistoricalPriceResponse, QueryParams } from '../types/common';\nimport {\n CryptoQuote,\n CryptoCurrency,\n CryptoQuoteParams,\n CryptoHistoricalParams,\n} from '../types/crypto';\n\nexport class CryptoEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get real-time crypto quote\n */\n async getQuote(params: CryptoQuoteParams): Promise<APIResponse<CryptoQuote[]>> {\n return this.client.get(`/quote/${params.symbol}`);\n }\n\n /**\n * Get historical crypto data\n */\n async getHistoricalPrice(\n params: CryptoHistoricalParams,\n ): Promise<APIResponse<HistoricalPriceResponse>> {\n const queryParams: QueryParams = {};\n if (params.from) queryParams.from = params.from;\n if (params.to) queryParams.to = params.to;\n if (params.timeseries) queryParams.timeseries = params.timeseries;\n\n return this.client.get(`/historical-price-full/${params.symbol}`, queryParams);\n }\n\n /**\n * Get list of all cryptocurrencies\n */\n async getCryptoList(): Promise<APIResponse<CryptoCurrency[]>> {\n return this.client.get('/cryptocurrency');\n }\n}\n","// ETF endpoints for FMP API\n\nimport { FMPClient } from '../client';\nimport { APIResponse, QueryParams } from '../types/common';\nimport {\n ETFQuote,\n ETFProfile,\n ETFHolding,\n ETFList,\n ETFQuoteParams,\n ETFProfileParams,\n ETFHoldersParams,\n} from '../types/etf';\n\nexport class ETFEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get real-time ETF quote\n */\n async getQuote(params: ETFQuoteParams): Promise<APIResponse<ETFQuote[]>> {\n return this.client.get(`/quote/${params.symbol}`);\n }\n\n /**\n * Get ETF profile\n */\n async getProfile(params: ETFProfileParams): Promise<APIResponse<ETFProfile[]>> {\n return this.client.get(`/profile/${params.symbol}`);\n }\n\n /**\n * Get ETF holdings\n */\n async getHoldings(params: ETFHoldersParams): Promise<APIResponse<ETFHolding[]>> {\n const queryParams: QueryParams = {};\n if (params.limit) queryParams.limit = params.limit;\n if (params.page) queryParams.page = params.page;\n\n return this.client.get(`/etf-holder/${params.symbol}`, queryParams);\n }\n\n /**\n * Get list of all ETFs\n */\n async getETFList(): Promise<APIResponse<ETFList[]>> {\n return this.client.get('/etf/list');\n }\n}\n","// Mutual fund endpoints for FMP API\n\nimport { FMPClient } from '../client';\nimport { APIResponse, QueryParams } from '../types/common';\nimport {\n MutualFundQuote,\n MutualFundProfile,\n MutualFundHolding,\n MutualFundList,\n MutualFundQuoteParams,\n MutualFundProfileParams,\n MutualFundHoldersParams,\n} from '../types/mutual-fund';\n\nexport class MutualFundEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get real-time mutual fund quote\n */\n async getQuote(params: MutualFundQuoteParams): Promise<APIResponse<MutualFundQuote[]>> {\n return this.client.get(`/quote/${params.symbol}`);\n }\n\n /**\n * Get mutual fund profile\n */\n async getProfile(params: MutualFundProfileParams): Promise<APIResponse<MutualFundProfile[]>> {\n return this.client.get(`/profile/${params.symbol}`);\n }\n\n /**\n * Get mutual fund holdings\n */\n async getHoldings(params: MutualFundHoldersParams): Promise<APIResponse<MutualFundHolding[]>> {\n const queryParams: QueryParams = {};\n if (params.limit) queryParams.limit = params.limit;\n if (params.page) queryParams.page = params.page;\n\n return this.client.get(`/mutual-fund-holder/${params.symbol}`, queryParams);\n }\n\n /**\n * Get list of all mutual funds\n */\n async getMutualFundList(): Promise<APIResponse<MutualFundList[]>> {\n return this.client.get('/mutual-fund/list');\n }\n}\n","// Bond endpoints for FMP API\n\nimport { FMPClient } from '../client';\nimport { APIResponse, HistoricalPriceResponse, QueryParams } from '../types/common';\nimport { BondQuote, BondList, BondQuoteParams, BondHistoricalParams } from '../types/bond';\n\nexport class BondEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get real-time bond quote\n */\n async getQuote(params: BondQuoteParams): Promise<APIResponse<BondQuote[]>> {\n return this.client.get(`/quote/${params.symbol}`);\n }\n\n /**\n * Get historical bond data\n */\n async getHistoricalPrice(\n params: BondHistoricalParams,\n ): Promise<APIResponse<HistoricalPriceResponse>> {\n const queryParams: QueryParams = {};\n if (params.from) queryParams.from = params.from;\n if (params.to) queryParams.to = params.to;\n if (params.timeseries) queryParams.timeseries = params.timeseries;\n\n return this.client.get(`/historical-price-full/${params.symbol}`, queryParams);\n }\n\n /**\n * Get list of all bonds\n */\n async getBondList(): Promise<APIResponse<BondList[]>> {\n return this.client.get('/bond/list');\n }\n}\n","// Economic endpoints for FMP API\n\nimport { FMPClient } from '../client';\nimport { APIResponse, QueryParams } from '../types/common';\nimport {\n TreasuryRate,\n FederalFundsRate,\n CPI,\n GDP,\n Unemployment,\n TreasuryRateParams,\n FederalFundsRateParams,\n CPIParams,\n GDPParams,\n UnemploymentParams,\n} from '../types/economic';\n\nexport class EconomicEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get treasury rates\n */\n async getTreasuryRates(params: TreasuryRateParams = {}): Promise<APIResponse<TreasuryRate[]>> {\n const queryParams: QueryParams = {};\n if (params.from) queryParams.from = params.from;\n if (params.to) queryParams.to = params.to;\n\n return this.client.get('/treasury-rates', queryParams);\n }\n\n /**\n * Get federal funds rate\n */\n async getFederalFundsRate(\n params: FederalFundsRateParams = {},\n ): Promise<APIResponse<FederalFundsRate[]>> {\n const queryParams: QueryParams = {};\n if (params.from) queryParams.from = params.from;\n if (params.to) queryParams.to = params.to;\n\n return this.client.get('/federal-funds-rate', queryParams);\n }\n\n /**\n * Get CPI data\n */\n async getCPI(params: CPIParams = {}): Promise<APIResponse<CPI[]>> {\n const queryParams: QueryParams = {};\n if (params.from) queryParams.from = params.from;\n if (params.to) queryParams.to = params.to;\n\n return this.client.get('/economic-indicator/cpi', queryParams);\n }\n\n /**\n * Get GDP data\n */\n async getGDP(params: GDPParams = {}): Promise<APIResponse<GDP[]>> {\n const queryParams: QueryParams = {};\n if (params.from) queryParams.from = params.from;\n if (params.to) queryParams.to = params.to;\n\n return this.client.get('/economic-indicator/gdp', queryParams);\n }\n\n /**\n * Get unemployment data\n */\n async getUnemployment(params: UnemploymentParams = {}): Promise<APIResponse<Unemployment[]>> {\n const queryParams: QueryParams = {};\n if (params.from) queryParams.from = params.from;\n if (params.to) queryParams.to = params.to;\n\n return this.client.get('/economic-indicator/unemployment', queryParams);\n }\n}\n","// Market endpoints for FMP API\n\nimport { FMPClient } from '../client';\nimport { APIResponse, QueryParams } from '../types/common';\nimport {\n MarketHours,\n MarketPerformance,\n MarketSectorPerformance,\n MarketIndex,\n MarketIndexParams,\n} from '../types/market';\n\nexport class MarketEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get market hours\n */\n async getMarketHours(): Promise<APIResponse<MarketHours>> {\n return this.client.get('/market-hours');\n }\n\n /**\n * Get market performance\n */\n async getMarketPerformance(): Promise<APIResponse<MarketPerformance[]>> {\n return this.client.get('/market-performance');\n }\n\n /**\n * Get market gainers\n */\n async getGainers(): Promise<APIResponse<MarketPerformance[]>> {\n return this.client.get('/gainers');\n }\n\n /**\n * Get market losers\n */\n async getLosers(): Promise<APIResponse<MarketPerformance[]>> {\n return this.client.get('/losers');\n }\n\n /**\n * Get most active stocks\n */\n async getMostActive(): Promise<APIResponse<MarketPerformance[]>> {\n return this.client.get('/most-active');\n }\n\n /**\n * Get sector performance\n */\n async getSectorPerformance(): Promise<APIResponse<MarketSectorPerformance[]>> {\n return this.client.get('/sector-performance');\n }\n\n /**\n * Get market index data\n */\n async getMarketIndex(params: MarketIndexParams = {}): Promise<APIResponse<MarketIndex[]>> {\n const queryParams: QueryParams = {};\n if (params.from) queryParams.from = params.from;\n if (params.to) queryParams.to = params.to;\n\n return this.client.get('/market-index', queryParams);\n }\n}\n","// Main FMP API client that combines all endpoints\n\nimport { FMPClient } from './client';\nimport { FMPConfig } from './types/common';\nimport { validateApiKey } from './utils/validation';\nimport { StockEndpoints } from './endpoints/stock';\nimport { FinancialEndpoints } from './endpoints/financial';\nimport { ForexEndpoints } from './endpoints/forex';\nimport { CryptoEndpoints } from './endpoints/crypto';\nimport { ETFEndpoints } from './endpoints/etf';\nimport { MutualFundEndpoints } from './endpoints/mutual-fund';\nimport { BondEndpoints } from './endpoints/bond';\nimport { EconomicEndpoints } from './endpoints/economic';\nimport { MarketEndpoints } from './endpoints/market';\n\n/**\n * Main FMP API client that provides access to all endpoints\n *\n * @example\n * ```typescript\n * import { FMP } from 'fmp-node-api';\n *\n * const fmp = new FMP({ apiKey: 'your-api-key' });\n *\n * // Get stock quote\n * const quote = await fmp.stock.getQuote({ symbol: 'AAPL' });\n *\n * // Get financial statements\n * const incomeStatement = await fmp.financial.getIncomeStatement({\n * symbol: 'AAPL',\n * period: 'annual'\n * });\n *\n * // Get forex data\n * const forexQuote = await fmp.forex.getQuote({ symbol: 'EURUSD' });\n * ```\n */\nexport class FMP {\n public readonly stock: StockEndpoints;\n public readonly financial: FinancialEndpoints;\n public readonly forex: ForexEndpoints;\n public readonly crypto: CryptoEndpoints;\n public readonly etf: ETFEndpoints;\n public readonly mutualFund: MutualFundEndpoints;\n public readonly bond: BondEndpoints;\n public readonly economic: EconomicEndpoints;\n public readonly market: MarketEndpoints;\n\n constructor(config: FMPConfig) {\n // Validate API key at construction time\n validateApiKey(config.apiKey);\n\n const client = new FMPClient(config);\n\n this.stock = new StockEndpoints(client);\n this.financial = new FinancialEndpoints(client);\n this.forex = new ForexEndpoints(client);\n this.crypto = new CryptoEndpoints(client);\n this.etf = new ETFEndpoints(client);\n this.mutualFund = new MutualFundEndpoints(client);\n this.bond = new BondEndpoints(client);\n this.economic = new EconomicEndpoints(client);\n this.market = new MarketEndpoints(client);\n }\n\n /**\n * Get the underlying client instance for advanced usage\n */\n getClient(): FMPClient {\n return this.stock['client'];\n }\n}\n","// Common types used across all FMP API endpoints\n\n// Base API response wrapper - more type-safe without any default\nexport interface APIResponse<T = unknown> {\n success: boolean;\n data?: T;\n error?: string;\n status?: number;\n}\n\n// More specific response types for better type safety\nexport interface SuccessResponse<T> extends APIResponse<T> {\n success: true;\n data: T;\n status: number;\n}\n\nexport interface ErrorResponse extends APIResponse<never> {\n success: false;\n error: string;\n status: number;\n}\n\n// FMP API configuration\nexport interface FMPConfig {\n apiKey: string;\n baseURL?: string;\n timeout?: number;\n}\n\n// Common parameter interfaces\nexport interface SymbolParams {\n symbol: string;\n}\n\nexport interface DateRangeParams {\n from?: string;\n to?: string;\n}\n\nexport interface PaginationParams {\n limit?: number;\n page?: number;\n}\n\nexport interface PeriodParams {\n period?: 'annual' | 'quarter';\n}\n\n// Common historical price data structure\nexport interface HistoricalPriceData {\n date: string;\n open: number;\n high: number;\n low: number;\n close: number;\n adjClose: number;\n volume: number;\n unadjustedVolume: number;\n change: number;\n changePercent: number;\n vwap: number;\n label: string;\n changeOverTime: number;\n}\n\n// Historical price response wrapper\nexport interface HistoricalPriceResponse {\n symbol: string;\n historical: HistoricalPriceData[];\n}\n\n// Type-safe query parameters\nexport interface QueryParams {\n [key: string]: string | number | boolean | undefined;\n}\n\n// Common financial data types\nexport interface Quote {\n symbol: string;\n price: number;\n change: number;\n changePercent: number;\n dayLow: number;\n dayHigh: number;\n yearLow: number;\n yearHigh: number;\n marketCap: number;\n priceAvg50: number;\n priceAvg200: number;\n volume: number;\n avgVolume: number;\n exchange: string;\n open: number;\n previousClose: number;\n eps: number;\n pe: number;\n earningsAnnouncement: string;\n sharesOutstanding: number;\n timestamp: number;\n}\n\nexport interface CompanyProfile {\n symbol: string;\n price: number;\n beta: number;\n volAvg: number;\n marketCap: number;\n lastDiv: number;\n range: string;\n changes: number;\n companyName: string;\n currency: string;\n cik: string;\n isin: string;\n cusip: string;\n exchange: string;\n exchangeShortName: string;\n industry: string;\n website: string;\n description: string;\n ceo: string;\n sector: string;\n country: string;\n fullTimeEmployees: string;\n phone: string;\n address: string;\n city: string;\n state: string;\n zip: string;\n dcfDiff: number;\n dcf: number;\n image: string;\n ipoDate: string;\n defaultImage: boolean;\n isEtf: boolean;\n isActivelyTrading: boolean;\n isAdr: boolean;\n isFund: boolean;\n}\n\n// Common enums\nexport enum Period {\n ANNUAL = 'annual',\n QUARTER = 'quarter',\n}\n\nexport enum Exchange {\n NYSE = 'NYSE',\n NASDAQ = 'NASDAQ',\n AMEX = 'AMEX',\n TSX = 'TSX',\n LSE = 'LSE',\n ASX = 'ASX',\n NSE = 'NSE',\n BSE = 'BSE',\n}\n\n// API constants\nexport const FMP_BASE_URL = 'https://financialmodelingprep.com/api/v3';\nexport const FMP_BASE_URL_V4 = 'https://financialmodelingprep.com/api/v4';\nexport const FMP_STABLE_URL = 'https://financialmodelingprep.com/stable';\n","// Formatting utilities for FMP API\n\n/**\n * Format currency value\n */\nexport function formatCurrency(value: number, currency: string = 'USD'): string {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: currency,\n }).format(value);\n}\n\n/**\n * Format percentage value\n */\nexport function formatPercentage(value: number, decimals: number = 2): string {\n return `${value.toFixed(decimals)}%`;\n}\n\n/**\n * Format large numbers with K, M, B suffixes\n */\nexport function formatLargeNumber(value: number): string {\n if (value >= 1e12) {\n return `${(value / 1e12).toFixed(2)}T`;\n } else if (value >= 1e9) {\n return `${(value / 1e9).toFixed(2)}B`;\n } else if (value >= 1e6) {\n return `${(value / 1e6).toFixed(2)}M`;\n } else if (value >= 1e3) {\n return `${(value / 1e3).toFixed(2)}K`;\n }\n return value.toString();\n}\n\n/**\n * Format date to YYYY-MM-DD\n */\nexport function formatDate(date: Date | string): string {\n const d = typeof date === 'string' ? new Date(date) : date;\n return d.toISOString().split('T')[0];\n}\n\n/**\n * Format date to readable format\n */\nexport function formatReadableDate(date: Date | string): string {\n const d = typeof date === 'string' ? new Date(date) : date;\n return d.toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n}\n\n/**\n * Format timestamp to readable format\n */\nexport function formatTimestamp(timestamp: number): string {\n const date = new Date(timestamp * 1000);\n return date.toLocaleString('en-US');\n}\n\n/**\n * Format number with specified decimal places\n */\nexport function formatNumber(value: number, decimals: number = 2): string {\n return value.toFixed(decimals);\n}\n\n/**\n * Format volume with appropriate units\n */\nexport function formatVolume(volume: number): string {\n if (volume >= 1e9) {\n return `${(volume / 1e9).toFixed(2)}B`;\n } else if (volume >= 1e6) {\n return `${(volume / 1e6).toFixed(2)}M`;\n } else if (volume >= 1e3) {\n return `${(volume / 1e3).toFixed(2)}K`;\n }\n return volume.toString();\n}\n","// Constants for FMP API\n\n// API Base URLs\nexport const FMP_BASE_URL = 'https://financialmodelingprep.com/api/v3';\nexport const FMP_BASE_URL_V4 = 'https://financialmodelingprep.com/api/v4';\n\n// Default configuration\nexport const DEFAULT_TIMEOUT = 10000;\nexport const DEFAULT_LIMIT = 100;\nexport const MAX_LIMIT = 1000;\n\n// Common periods\nexport const PERIODS = {\n ANNUAL: 'annual',\n QUARTER: 'quarter',\n} as const;\n\n// Common exchanges\nexport const EXCHANGES = {\n NYSE: 'NYSE',\n NASDAQ: 'NASDAQ',\n AMEX: 'AMEX',\n TSX: 'TSX',\n LSE: 'LSE',\n ASX: 'ASX',\n NSE: 'NSE',\n BSE: 'BSE',\n} as const;\n\n// Common sectors\nexport const SECTORS = {\n TECHNOLOGY: 'Technology',\n HEALTHCARE: 'Healthcare',\n FINANCIAL: 'Financial',\n CONSUMER_DISCRETIONARY: 'Consumer Discretionary',\n CONSUMER_STAPLES: 'Consumer Staples',\n INDUSTRIALS: 'Industrials',\n ENERGY: 'Energy',\n MATERIALS: 'Materials',\n UTILITIES: 'Utilities',\n REAL_ESTATE: 'Real Estate',\n COMMUNICATION_SERVICES: 'Communication Services',\n} as const;\n\n// Common countries\nexport const COUNTRIES = {\n US: 'US',\n CA: 'CA',\n GB: 'GB',\n AU: 'AU',\n IN: 'IN',\n DE: 'DE',\n FR: 'FR',\n JP: 'JP',\n CN: 'CN',\n BR: 'BR',\n} as const;\n\n// Error messages\nexport const ERROR_MESSAGES = {\n API_KEY_REQUIRED: 'API key is required',\n SYMBOL_REQUIRED: 'Symbol is required',\n INVALID_SYMBOL: 'Invalid symbol format',\n INVALID_DATE: 'Invalid date format. Use YYYY-MM-DD',\n INVALID_PERIOD: 'Period must be either \"annual\" or \"quarter\"',\n INVALID_LIMIT: 'Limit must be between 1 and 1000',\n INVALID_PAGE: 'Page must be a non-negative number',\n REQUEST_FAILED: 'Request failed',\n RATE_LIMIT_EXCEEDED: 'Rate limit exceeded',\n UNAUTHORIZED: 'Unauthorized - Invalid API key',\n NOT_FOUND: 'Resource not found',\n} as const;\n\n// HTTP status codes\nexport const HTTP_STATUS = {\n OK: 200,\n CREATED: 201,\n BAD_REQUEST: 400,\n UNAUTHORIZED: 401,\n FORBIDDEN: 403,\n NOT_FOUND: 404,\n TOO_MANY_REQUESTS: 429,\n INTERNAL_SERVER_ERROR: 500,\n} as const;\n"]}
1
+ {"version":3,"sources":["../src/client.ts","../src/shared.ts","../src/utils/validation.ts","../src/endpoints/stock.ts","../src/endpoints/financial.ts","../src/endpoints/forex.ts","../src/endpoints/crypto.ts","../src/endpoints/etf.ts","../src/endpoints/mutual-fund.ts","../src/endpoints/bond.ts","../src/endpoints/economic.ts","../src/endpoints/market.ts","../src/endpoints/list.ts","../src/endpoints/calendar.ts","../src/endpoints/company.ts","../src/fmp.ts","../src/types/common.ts","../src/utils/formatting.ts","../src/utils/constants.ts"],"names":["axios","Period","Exchange"],"mappings":"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","file":"index.js","sourcesContent":["import axios, { AxiosInstance } from 'axios';\nimport { FMPConfig, UnwrappedAPIResponse } from './types';\n\n/**\n * Utility function to unwrap single objects from arrays\n * If the response is an array with only one item, return just that item\n * Otherwise, return the original response\n */\nfunction unwrapSingleObject<T>(data: T): T {\n if (Array.isArray(data) && data.length === 1) {\n return data[0];\n }\n return data;\n}\n\nexport class FMPClient {\n private v3Client: AxiosInstance;\n private v4Client: AxiosInstance;\n private stableClient: AxiosInstance;\n private apiKey: string;\n\n constructor(config: FMPConfig) {\n this.apiKey = config.apiKey;\n\n // Create separate clients for each version\n this.v3Client = this.createClient('https://financialmodelingprep.com/api/v3', config.timeout);\n this.v4Client = this.createClient('https://financialmodelingprep.com/api/v4', config.timeout);\n this.stableClient = this.createClient(\n 'https://financialmodelingprep.com/api/stable',\n config.timeout,\n );\n }\n\n private createClient(baseURL: string, timeout?: number): AxiosInstance {\n const client = axios.create({\n baseURL,\n timeout: timeout || 10000,\n headers: { 'Content-Type': 'application/json' },\n });\n\n client.interceptors.request.use(config => {\n config.params = { ...config.params, apikey: this.apiKey };\n return config;\n });\n\n return client;\n }\n\n // Smart routing method\n async get<T>(\n endpoint: string,\n version: 'v3' | 'v4' | 'stable' = 'v3',\n params?: Record<string, any>,\n ): Promise<UnwrappedAPIResponse<T>> {\n const client = this.getClientForVersion(version);\n\n try {\n const response = await client.get(endpoint, { params });\n return {\n success: true,\n data: unwrapSingleObject(response.data),\n status: response.status,\n };\n } catch (error: any) {\n return {\n success: false,\n error: error.message || 'Unknown error occurred',\n status: error.response?.status || 500,\n };\n }\n }\n\n private getClientForVersion(version: 'v3' | 'v4' | 'stable'): AxiosInstance {\n switch (version) {\n case 'v3':\n return this.v3Client;\n case 'v4':\n return this.v4Client;\n case 'stable':\n return this.stableClient;\n default:\n return this.v3Client; // Default to v3\n }\n }\n}\n","// Shared types and utilities for FMP API wrapper\n\n// Common error types\nexport class FMPError extends Error {\n constructor(\n message: string,\n public status?: number,\n public code?: string,\n ) {\n super(message);\n this.name = 'FMPError';\n }\n}\n","// Validation utilities for FMP API\n\nimport { FMPError } from '../shared';\n\n/**\n * Validate API key\n */\nexport function validateApiKey(apiKey: string): void {\n if (!apiKey || typeof apiKey !== 'string' || apiKey.trim().length === 0) {\n throw new FMPError('API key is required and must be a non-empty string');\n }\n}\n\n/**\n * Validate stock symbol\n */\nexport function validateSymbol(symbol: string): void {\n if (!symbol || typeof symbol !== 'string' || symbol.trim().length === 0) {\n throw new FMPError('Symbol is required and must be a non-empty string');\n }\n\n // Basic symbol validation (alphanumeric and common symbols)\n const symbolRegex = /^[A-Z0-9.-]+$/;\n if (!symbolRegex.test(symbol.toUpperCase())) {\n throw new FMPError(\n 'Invalid symbol format. Symbols should contain only letters, numbers, dots, and hyphens',\n );\n }\n}\n\n/**\n * Validate date format (YYYY-MM-DD)\n */\nexport function validateDate(date: string): void {\n if (!date || typeof date !== 'string') {\n throw new FMPError('Date is required and must be a string');\n }\n\n const dateRegex = /^\\d{4}-\\d{2}-\\d{2}$/;\n if (!dateRegex.test(date)) {\n throw new FMPError('Invalid date format. Use YYYY-MM-DD format');\n }\n\n const parsedDate = new Date(date);\n if (isNaN(parsedDate.getTime())) {\n throw new FMPError('Invalid date');\n }\n}\n\n/**\n * Validate period parameter\n */\nexport function validatePeriod(period: string): void {\n if (period && !['annual', 'quarter'].includes(period)) {\n throw new FMPError('Period must be either \"annual\" or \"quarter\"');\n }\n}\n\n/**\n * Validate limit parameter\n */\nexport function validateLimit(limit: number): void {\n if (limit !== undefined && (typeof limit !== 'number' || limit < 1 || limit > 1000)) {\n throw new FMPError('Limit must be a number between 1 and 1000');\n }\n}\n\n/**\n * Validate page parameter\n */\nexport function validatePage(page: number): void {\n if (page !== undefined && (typeof page !== 'number' || page < 0)) {\n throw new FMPError('Page must be a non-negative number');\n }\n}\n","import { FMPClient } from '@/client';\nimport { UnwrappedAPIResponse, DateRangeParams } from '@/types';\nimport {\n StockHistoricalPriceResponse,\n MarketCap,\n StockSplit,\n StockDividend,\n StockQuote,\n} from '@/types/stock';\n\nexport class StockEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get real-time stock quote\n * https://site.financialmodelingprep.com/developer/docs#full-quote-quote\n * @param symbol - The stock symbol to get the quote for\n * @returns This endpoint gives you the latest bid and ask prices for a stock, as well as the volume and last trade price in real time.\n */\n async getQuote({ symbol }: { symbol: string }): Promise<UnwrappedAPIResponse<StockQuote | null>> {\n return this.client.get(`/quote/${symbol}`, 'v3');\n }\n\n /**\n * Get historical stock prices\n * https://site.financialmodelingprep.com/developer/docs#daily-chart-charts\n * @param symbol - The stock symbol to get the historical prices for\n * @param from - The start date to get the historical prices for\n * @param to - The end date to get the historical prices for\n * @returns The FMP Daily Chart endpoint provides daily stock data for a specified company, including opening, high, low, and closing prices, with a default limit of 5 years of historical data. To access data beyond this limit, use the from and to parameters for custom date ranges, each with a 5-year limit\n */\n async getHistoricalPrice({\n symbol,\n from,\n to,\n }: {\n symbol: string;\n from?: string;\n to?: string;\n }): Promise<UnwrappedAPIResponse<StockHistoricalPriceResponse>> {\n const params: DateRangeParams = {};\n if (from) params.from = from;\n if (to) params.to = to;\n\n return this.client.get(`/historical-price-full/${symbol}`, 'v3', params);\n }\n\n /**\n * Get market cap\n * https://site.financialmodelingprep.com/developer/docs#market-cap-company-information\n * @param symbol - The stock symbol to get the market cap for\n * @returns The FMP Market Cap endpoint provides the current market capitalization of a company. Market cap is a measure of the size and relative importance of a company in the stock market. It is calculated by multiplying the current share price by the number of outstanding shares.\n */\n async getMarketCap({\n symbol,\n }: {\n symbol: string;\n }): Promise<UnwrappedAPIResponse<MarketCap | null>> {\n return this.client.get(`/market-capitalization/${symbol}`, 'v3');\n }\n\n /**\n * Get stock splits\n * https://site.financialmodelingprep.com/developer/docs#splits-historical-splits\n * @param symbol - The stock symbol to get the splits for\n * @returns A list of historical stock splits for publicly traded companies, including the date of the stock split, the split ratio, and the type of stock split.\n */\n async getStockSplits({\n symbol,\n }: {\n symbol: string;\n }): Promise<UnwrappedAPIResponse<StockSplit[]>> {\n return this.client.get(`/stock-split-calendar/${symbol}`, 'v3');\n }\n\n /**\n * Get dividend history\n * https://site.financialmodelingprep.com/developer/docs#dividends-historical-dividends\n * @param symbol - The stock symbol to get the dividend history for\n * @returns A list of historical dividend payments for publicly traded companies, including the date of the dividend payment, the ex-dividend date, and the dividend per share.\n */\n async getDividendHistory({\n symbol,\n }: {\n symbol: string;\n }): Promise<UnwrappedAPIResponse<StockDividend[]>> {\n return this.client.get(`/historical-price-full/stock_dividend/${symbol}`, 'v3');\n }\n}\n","import { FMPClient } from '@/client';\nimport { UnwrappedAPIResponse } from '@/types';\nimport {\n FinancialStatementsParams,\n KeyMetrics,\n FinancialRatios,\n EnterpriseValue,\n CashflowGrowth,\n IncomeGrowth,\n BalanceSheetGrowth,\n FinancialGrowth,\n IncomeStatement,\n BalanceSheet,\n CashFlowStatement,\n} from '@/types/financial';\n\nexport class FinancialEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get income statement\n * https://site.financialmodelingprep.com/developer/docs#income-statements-financial-statements\n * @param symbol - The stock symbol to get the income statement for\n * @param period - The period to get the income statement for (annual or quarter)\n * @param limit - The number of periods to get\n * @returns FMP's Income Statement API provides access to real-time income statement data for a wide range of companies, including public companies, private companies, and ETFs. This data can be used to track a company's profitability over time, to compare a company to its competitors, and to identify trends in a company's business.\n */\n async getIncomeStatement({\n symbol,\n period = 'annual',\n limit = 5,\n }: FinancialStatementsParams): Promise<UnwrappedAPIResponse<IncomeStatement[]>> {\n return this.client.get(`/income-statement/${symbol}?period=${period}&limit=${limit}`, 'v3');\n }\n\n /**\n * Get balance sheet\n * https://site.financialmodelingprep.com/developer/docs#balance-sheet-statements-financial-statements\n * @param symbol - The stock symbol to get the balance sheet for\n * @param period - The period to get the balance sheet for (annual or quarter)\n * @param limit - The number of periods to get\n * @returns The balance sheet is a financial statement that displays a company’s total assets, liabilities, and shareholder equity over a specific timeframe (quarterly or yearly). Investors can use this statement to determine if the company can fund its operations, meet its debt obligations, and pay a dividend.\n */\n async getBalanceSheet({\n symbol,\n period = 'annual',\n limit = 5,\n }: FinancialStatementsParams): Promise<UnwrappedAPIResponse<BalanceSheet[]>> {\n return this.client.get(\n `/balance-sheet-statement/${symbol}?period=${period}&limit=${limit}`,\n 'v3',\n );\n }\n\n /**\n * Get cash flow statement\n * https://site.financialmodelingprep.com/developer/docs#cashflow-statements-financial-statements\n * @param symbol - The stock symbol to get the cash flow statement for\n * @param period - The period to get the cash flow statement for (annual or quarter)\n * @param limit - The number of periods to get\n * @returns The cash flow statement is a financial statement that highlights how cash moves through the company, including both cash inflows and outflows. This statement shows the cash flows in 3 main categories “Operating Cash Flows”, “Investing Cash Flows”, and “Financing Cash Flows”, which help investors to understand if the company is making money or losing money by conducting business.\n */\n async getCashFlowStatement({\n symbol,\n period = 'annual',\n limit = 5,\n }: FinancialStatementsParams): Promise<UnwrappedAPIResponse<CashFlowStatement[]>> {\n return this.client.get(`/cash-flow-statement/${symbol}?period=${period}&limit=${limit}`, 'v3');\n }\n\n /**\n * Get key metrics\n * https://site.financialmodelingprep.com/developer/docs#key-metrics-statement-analysis\n * @param symbol - The stock symbol to get the key metrics for\n * @param period - The period to get the key metrics for (annual or quarter)\n * @param limit - The number of periods to get\n * @returns Get key financial metrics for a company, including revenue, net income, and price-to-earnings ratio (P/E ratio). Assess a company's financial performance and compare it to its competitors.\n */\n async getKeyMetrics({\n symbol,\n period = 'annual',\n limit = 5,\n }: FinancialStatementsParams): Promise<UnwrappedAPIResponse<KeyMetrics[]>> {\n return this.client.get(`/key-metrics/${symbol}?period=${period}&limit=${limit}`, 'v3');\n }\n\n /**\n * Get financial ratios\n * https://site.financialmodelingprep.com/developer/docs#ratios-statement-analysis\n * @param symbol - The stock symbol to get the financial ratios for\n * @param period - The period to get the financial ratios for (annual or quarter)\n * @param limit - The number of periods to get\n * @returns Get financial ratios for a company, such as the P/B ratio and the ROE. Assess a company's financial health and compare it to its competitors.\n */\n async getFinancialRatios({\n symbol,\n period = 'annual',\n limit = 5,\n }: FinancialStatementsParams): Promise<UnwrappedAPIResponse<FinancialRatios[]>> {\n return this.client.get(`/ratios/${symbol}?period=${period}&limit=${limit}`, 'v3');\n }\n\n /**\n * Get enterprise value\n * https://site.financialmodelingprep.com/developer/docs#enterprise-values-statement-analysis\n * @param symbol - The stock symbol to get the enterprise value for\n * @param period - The period to get the enterprise value for (annual or quarter)\n * @param limit - The number of periods to get\n * @returns Get the enterprise value of a company, which is the total value of a company, including its equity and debt. Assess a company's overall value and compare it to its peers.\n */\n async getEnterpriseValue({\n symbol,\n period = 'annual',\n limit = 5,\n }: FinancialStatementsParams): Promise<UnwrappedAPIResponse<EnterpriseValue[]>> {\n return this.client.get(`/enterprise-value/${symbol}?period=${period}&limit=${limit}`, 'v3');\n }\n\n /**\n * Get cashflow growth\n * https://site.financialmodelingprep.com/developer/docs#cashflow-growth-statement-analysis\n * @param symbol - The stock symbol to get the cashflow growth for\n * @param period - The period to get the cashflow growth for (annual or quarter)\n * @param limit - The number of periods to get\n * @returns Get the cash flow growth rate for a company. Measure how quickly a company's cash flow is growing.\n */\n async getCashflowGrowth({\n symbol,\n period = 'annual',\n limit = 5,\n }: FinancialStatementsParams): Promise<UnwrappedAPIResponse<CashflowGrowth[]>> {\n return this.client.get(\n `/cash-flow-statement-growth/${symbol}?period=${period}&limit=${limit}`,\n 'v3',\n );\n }\n\n /**\n * Get income growth\n * https://site.financialmodelingprep.com/developer/docs#income-growth-statement-analysis\n * @param symbol - The stock symbol to get the income growth for\n * @param period - The period to get the income growth for (annual or quarter)\n * @param limit - The number of periods to get\n * @returns Get the income growth rate for a company. Measure how quickly a company's income is growing.\n */\n async getIncomeGrowth({\n symbol,\n period = 'annual',\n limit = 5,\n }: FinancialStatementsParams): Promise<UnwrappedAPIResponse<IncomeGrowth[]>> {\n return this.client.get(\n `/income-statement-growth/${symbol}?period=${period}&limit=${limit}`,\n 'v3',\n );\n }\n\n /**\n * Get balance sheet growth\n * https://site.financialmodelingprep.com/developer/docs#balance-sheet-growth-statement-analysis\n * @param symbol - The stock symbol to get the balance sheet growth for\n * @param period - The period to get the balance sheet growth for (annual or quarter)\n * @param limit - The number of periods to get\n * @returns Get the balance sheet growth rate for a company. Measure how quickly a company's assets and liabilities are growing.\n */\n async getBalanceSheetGrowth({\n symbol,\n period = 'annual',\n limit = 5,\n }: FinancialStatementsParams): Promise<UnwrappedAPIResponse<BalanceSheetGrowth[]>> {\n return this.client.get(\n `/balance-sheet-statement-growth/${symbol}?period=${period}&limit=${limit}`,\n 'v3',\n );\n }\n\n /**\n * Get financial growth\n * https://site.financialmodelingprep.com/developer/docs#financial-growth-statement-analysis\n * @param symbol - The stock symbol to get the financial growth for\n * @param period - The period to get the financial growth for (annual or quarter)\n * @param limit - The number of periods to get\n * @returns Financial Growth Get the financial growth rate for a company. Measure how quickly a company's overall financial performance is improving.\n */\n async getFinancialGrowth({\n symbol,\n period = 'annual',\n limit = 5,\n }: FinancialStatementsParams): Promise<UnwrappedAPIResponse<FinancialGrowth[]>> {\n return this.client.get(`/financial-growth/${symbol}?period=${period}&limit=${limit}`, 'v3');\n }\n}\n","// Forex endpoints for FMP API\n\nimport { FMPClient } from '@/client';\nimport { UnwrappedAPIResponse, HistoricalPriceResponse, QueryParams } from '../types/common';\nimport { ForexQuote, ForexQuoteParams } from '../types/forex';\n\nexport class ForexEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get forex quote\n */\n async getQuote(params: ForexQuoteParams): Promise<UnwrappedAPIResponse<ForexQuote[]>> {\n return this.client.get('/quote', 'v3', params);\n }\n\n /**\n * Get historical forex prices\n */\n async getHistoricalPrice({\n symbol,\n from,\n to,\n }: {\n symbol: string;\n from?: string;\n to?: string;\n }): Promise<UnwrappedAPIResponse<HistoricalPriceResponse>> {\n const params: QueryParams = {};\n if (from) params.from = from;\n if (to) params.to = to;\n\n return this.client.get(`/historical-price-full/${symbol}`, 'v3', params);\n }\n\n /**\n * Get forex rates for a specific base currency\n */\n async getForexRates(\n baseCurrency: string = 'USD',\n ): Promise<UnwrappedAPIResponse<Record<string, number>>> {\n return this.client.get(`/forex/${baseCurrency}`, 'v3');\n }\n\n /**\n * Get all forex rates\n */\n async getAllForexRates(): Promise<UnwrappedAPIResponse<Record<string, Record<string, number>>>> {\n return this.client.get('/forex', 'v3');\n }\n}\n","// Cryptocurrency endpoints for FMP API\n\nimport { FMPClient } from '@/client';\nimport { UnwrappedAPIResponse, HistoricalPriceResponse } from '../types/common';\nimport { CryptoQuote, CryptoQuoteParams } from '../types/crypto';\n\nexport class CryptoEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get crypto quote\n */\n async getQuote(params: CryptoQuoteParams): Promise<UnwrappedAPIResponse<CryptoQuote[]>> {\n return this.client.get('/quote', 'v3', params);\n }\n\n /**\n * Get historical crypto prices\n */\n async getHistoricalPrice({\n symbol,\n from,\n to,\n }: {\n symbol: string;\n from?: string;\n to?: string;\n }): Promise<UnwrappedAPIResponse<HistoricalPriceResponse>> {\n const params: Record<string, any> = {};\n if (from) params.from = from;\n if (to) params.to = to;\n\n return this.client.get(`/historical-price-full/${symbol}`, 'v3', params);\n }\n}\n","// ETF endpoints for FMP API\n\nimport { FMPClient } from '@/client';\nimport { UnwrappedAPIResponse } from '../types/common';\nimport {\n ETFQuote,\n ETFProfile,\n ETFHolding,\n ETFQuoteParams,\n ETFProfileParams,\n ETFHoldersParams,\n} from '../types/etf';\n\nexport class ETFEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get ETF quote\n */\n async getQuote(params: ETFQuoteParams): Promise<UnwrappedAPIResponse<ETFQuote[]>> {\n return this.client.get('/quote', 'v3', params);\n }\n\n /**\n * Get ETF profile\n */\n async getProfile(params: ETFProfileParams): Promise<UnwrappedAPIResponse<ETFProfile[]>> {\n return this.client.get('/profile', 'v3', params);\n }\n\n /**\n * Get ETF holdings\n */\n async getHoldings(params: ETFHoldersParams): Promise<UnwrappedAPIResponse<ETFHolding[]>> {\n return this.client.get('/holdings', 'v3', params);\n }\n}\n","// Mutual fund endpoints for FMP API\n\nimport { FMPClient } from '@/client';\nimport { UnwrappedAPIResponse } from '../types/common';\nimport {\n MutualFundQuote,\n MutualFundProfile,\n MutualFundHolding,\n MutualFundQuoteParams,\n MutualFundProfileParams,\n MutualFundHoldersParams,\n} from '../types/mutual-fund';\n\nexport class MutualFundEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get mutual fund quote\n */\n async getQuote(params: MutualFundQuoteParams): Promise<UnwrappedAPIResponse<MutualFundQuote[]>> {\n return this.client.get('/quote', 'v3', params);\n }\n\n /**\n * Get mutual fund profile\n */\n async getProfile(\n params: MutualFundProfileParams,\n ): Promise<UnwrappedAPIResponse<MutualFundProfile[]>> {\n return this.client.get('/profile', 'v3', params);\n }\n\n /**\n * Get mutual fund holdings\n */\n async getHoldings(\n params: MutualFundHoldersParams,\n ): Promise<UnwrappedAPIResponse<MutualFundHolding[]>> {\n return this.client.get('/holdings', 'v3', params);\n }\n}\n","// Bond endpoints for FMP API\n\nimport { FMPClient } from '@/client';\nimport { UnwrappedAPIResponse, HistoricalPriceResponse } from '../types/common';\nimport { BondQuote, BondQuoteParams } from '../types/bond';\n\nexport class BondEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get bond quote\n */\n async getQuote(params: BondQuoteParams): Promise<UnwrappedAPIResponse<BondQuote[]>> {\n return this.client.get('/quote', 'v3', params);\n }\n\n /**\n * Get historical bond prices\n */\n async getHistoricalPrice({\n symbol,\n from,\n to,\n }: {\n symbol: string;\n from?: string;\n to?: string;\n }): Promise<UnwrappedAPIResponse<HistoricalPriceResponse>> {\n const params: Record<string, any> = {};\n if (from) params.from = from;\n if (to) params.to = to;\n\n return this.client.get(`/historical-price-full/${symbol}`, 'v3', params);\n }\n}\n","// Economic endpoints for FMP API\n\nimport { FMPClient } from '@/client';\nimport { UnwrappedAPIResponse } from '../types/common';\nimport {\n TreasuryRate,\n TreasuryRateParams,\n FederalFundsRate,\n FederalFundsRateParams,\n CPI,\n CPIParams,\n GDP,\n GDPParams,\n Unemployment,\n UnemploymentParams,\n} from '../types/economic';\n\nexport class EconomicEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get treasury rates\n */\n async getTreasuryRates(\n params: TreasuryRateParams = {},\n ): Promise<UnwrappedAPIResponse<TreasuryRate[]>> {\n return this.client.get('/treasury-rates', 'v3', params);\n }\n\n /**\n * Get federal funds rate\n */\n async getFederalFundsRate(\n params: FederalFundsRateParams = {},\n ): Promise<UnwrappedAPIResponse<FederalFundsRate[]>> {\n return this.client.get('/federal-funds-rate', 'v3', params);\n }\n\n /**\n * Get CPI data\n */\n async getCPI(params: CPIParams = {}): Promise<UnwrappedAPIResponse<CPI[]>> {\n return this.client.get('/economic/cpi', 'v3', params);\n }\n\n /**\n * Get GDP data\n */\n async getGDP(params: GDPParams = {}): Promise<UnwrappedAPIResponse<GDP[]>> {\n return this.client.get('/economic/gdp', 'v3', params);\n }\n\n /**\n * Get unemployment data\n */\n async getUnemployment(\n params: UnemploymentParams = {},\n ): Promise<UnwrappedAPIResponse<Unemployment[]>> {\n return this.client.get('/economic/unemployment', 'v3', params);\n }\n}\n","// Market endpoints for FMP API\n\nimport { FMPClient } from '@/client';\nimport { UnwrappedAPIResponse } from '../types/common';\nimport {\n MarketHours,\n MarketPerformance,\n MarketSectorPerformance,\n MarketIndex,\n MarketIndexParams,\n} from '../types/market';\n\nexport class MarketEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get market hours\n */\n async getMarketHours(): Promise<UnwrappedAPIResponse<MarketHours>> {\n return this.client.get('/market-hours', 'v3');\n }\n\n /**\n * Get market performance\n */\n async getMarketPerformance(): Promise<UnwrappedAPIResponse<MarketPerformance[]>> {\n return this.client.get('/market-performance', 'v3');\n }\n\n /**\n * Get top gainers\n */\n async getGainers(): Promise<UnwrappedAPIResponse<MarketPerformance[]>> {\n return this.client.get('/gainers', 'v3');\n }\n\n /**\n * Get top losers\n */\n async getLosers(): Promise<UnwrappedAPIResponse<MarketPerformance[]>> {\n return this.client.get('/losers', 'v3');\n }\n\n /**\n * Get most active stocks\n */\n async getMostActive(): Promise<UnwrappedAPIResponse<MarketPerformance[]>> {\n return this.client.get('/most-active', 'v3');\n }\n\n /**\n * Get sector performance\n */\n async getSectorPerformance(): Promise<UnwrappedAPIResponse<MarketSectorPerformance[]>> {\n return this.client.get('/sector-performance', 'v3');\n }\n\n /**\n * Get market indices\n */\n async getMarketIndex(\n params: MarketIndexParams = {},\n ): Promise<UnwrappedAPIResponse<MarketIndex[]>> {\n return this.client.get('/market-index', 'v3', params);\n }\n}\n","import { FMPClient } from '@/client';\nimport { UnwrappedAPIResponse } from '@/types';\nimport { StockList, ETFList, CryptoList, ForexList, AvailableIndexesList } from '@/types/list';\n\nexport class ListEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get stock list\n * https://site.financialmodelingprep.com/developer/docs#symbol-list-stock-list\n * @returns The stock list\n */\n async getStockList(): Promise<UnwrappedAPIResponse<StockList[]>> {\n return this.client.get('/stock/list');\n }\n\n /**\n * Get ETF list\n * https://site.financialmodelingprep.com/developer/docs#exchange-traded-fund-search-stock-list\n * @returns The ETF list\n */\n async getETFList(): Promise<UnwrappedAPIResponse<ETFList[]>> {\n return this.client.get('/etf/list');\n }\n\n /**\n * Get crypto list\n * https://site.financialmodelingprep.com/developer/docs#cryptocurrencies-list-crypto\n * @returns The crypto list\n */\n async getCryptoList(): Promise<UnwrappedAPIResponse<CryptoList[]>> {\n return this.client.get('/symbol/available-cryptocurrencies');\n }\n\n /**\n * Get forex list\n * https://site.financialmodelingprep.com/developer/docs#forex-list-forex\n * @returns The forex list\n */\n async getForexList(): Promise<UnwrappedAPIResponse<ForexList[]>> {\n return this.client.get('/symbol/available-forex-currency-pairs');\n }\n\n /**\n * Get available indexes list\n * https://site.financialmodelingprep.com/developer/docs#available-indexes\n * @returns The available indexes list\n */\n async getAvailableIndexes(): Promise<UnwrappedAPIResponse<AvailableIndexesList[]>> {\n return this.client.get('/symbol/available-indexes');\n }\n}\n","import { FMPClient } from '@/client';\nimport { UnwrappedAPIResponse, DateRangeParams } from '@/types';\nimport {\n EarningsCalendar,\n DividendsCalendar,\n EconomicsCalendar,\n IPOCalendar,\n SplitsCalendar,\n} from '@/types/calendar';\n\nexport class CalendarEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get earnings calendar\n * https://site.financialmodelingprep.com/developer/docs#earnings-calendar-earnings\n * @param from - The start date to get the earnings calendar for\n * @param to - The end date to get the earnings calendar for\n * @returns The earnings calendar\n */\n async getEarningsCalendar({ from, to }: DateRangeParams = {}): Promise<\n UnwrappedAPIResponse<EarningsCalendar[]>\n > {\n const params: DateRangeParams = {};\n if (from) params.from = from;\n if (to) params.to = to;\n\n return this.client.get('/earning_calendar', 'v3', params);\n }\n\n /**\n * Get dividends calendar\n * https://site.financialmodelingprep.com/developer/docs#dividends-calendar-dividends\n * @param from - The start date to get the dividends calendar for\n * @param to - The end date to get the dividends calendar for\n * @returns The dividends calendar\n */\n async getDividendsCalendar({ from, to }: DateRangeParams = {}): Promise<\n UnwrappedAPIResponse<DividendsCalendar[]>\n > {\n const params: DateRangeParams = {};\n if (from) params.from = from;\n if (to) params.to = to;\n\n return this.client.get('/stock_dividend_calendar', 'v3', params);\n }\n\n /**\n * Get economics calendar\n * https://site.financialmodelingprep.com/developer/docs#economics-calendar-economics-data\n * @param from - The start date to get the economics calendar for\n * @param to - The end date to get the economics calendar for\n * @returns The economics calendar\n */\n async getEconomicsCalendar({ from, to }: DateRangeParams = {}): Promise<\n UnwrappedAPIResponse<EconomicsCalendar[]>\n > {\n const params: DateRangeParams = {};\n if (from) params.from = from;\n if (to) params.to = to;\n\n return this.client.get('/economic_calendar', 'v3', params);\n }\n\n /**\n * Get IPO calendar\n * https://site.financialmodelingprep.com/developer/docs#ipo-calender-by-ipo-calendar\n * @param from - The start date to get the IPO calendar for\n * @param to - The end date to get the IPO calendar for\n * @returns The IPO calendar\n */\n async getIPOCalendar({ from, to }: DateRangeParams = {}): Promise<\n UnwrappedAPIResponse<IPOCalendar[]>\n > {\n const params: DateRangeParams = {};\n if (from) params.from = from;\n if (to) params.to = to;\n\n return this.client.get('/ipo_calendar', 'v3', params);\n }\n\n /**\n * Get stock splits calendar\n * https://site.financialmodelingprep.com/developer/docs#splits-calendar-splits\n * @param from - The start date to get the stock splits calendar for\n * @param to - The end date to get the stock splits calendar for\n * @returns The stock splits calendar\n */\n async getSplitsCalendar({ from, to }: DateRangeParams = {}): Promise<\n UnwrappedAPIResponse<SplitsCalendar[]>\n > {\n const params: DateRangeParams = {};\n if (from) params.from = from;\n if (to) params.to = to;\n\n return this.client.get('/stock_split_calendar', 'v3', params);\n }\n}\n","import { FMPClient } from '@/client';\nimport { UnwrappedAPIResponse } from '@/types';\nimport {\n CompanyNotes,\n CompanyProfile,\n EarningsCallTranscript,\n ExecutiveCompensation,\n HistoricalEmployeeCount,\n HistoricalSharesFloat,\n SharesFloat,\n} from '@/types/company';\n\nexport class CompanyEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get company profile\n * https://site.financialmodelingprep.com/developer/docs#company-profile-company-information\n * @param symbol - The stock symbol to get the profile for\n * @returns Get a comprehensive overview of a company with our Company Profile endpoint. This endpoint provides key information such as price, beta, market capitalization, description, headquarters, and more.\n */\n async getCompanyProfile({\n symbol,\n }: {\n symbol: string;\n }): Promise<UnwrappedAPIResponse<CompanyProfile | null>> {\n return this.client.get(`/profile/${symbol}`, 'v3');\n }\n\n /**\n * Get executive compensation\n * https://site.financialmodelingprep.com/developer/docs#executive-compensation-company-information\n * @param symbol - The stock symbol to get the executive compensation for\n * @returns Understand how a company compensates its executives with our Executive Compensation endpoint. This endpoint provides information such as salary, bonus, and stock options for each executive.\n */\n async getExecutiveCompensation({\n symbol,\n }: {\n symbol: string;\n }): Promise<UnwrappedAPIResponse<ExecutiveCompensation[] | null>> {\n const params: { symbol: string } = { symbol };\n\n return this.client.get(`/governance/executive_compensation`, 'v4', params);\n }\n\n /**\n * Get company notes\n * https://site.financialmodelingprep.com/developer/docs#company-notes-company-information\n * @param symbol - The stock symbol to get the notes for\n * @returns Stay up-to-date on a company's financial condition, operations, and risks with our Company Notes endpoint. This endpoint provides information about notes reported by a company in their financial statements.\n */\n async getCompanyNotes({\n symbol,\n }: {\n symbol: string;\n }): Promise<UnwrappedAPIResponse<CompanyNotes[] | null>> {\n const params: { symbol: string } = { symbol };\n\n return this.client.get(`/company-notes`, 'v4', params);\n }\n\n /**\n * Get historical employee count\n * https://site.financialmodelingprep.com/developer/docs#historical-employee-company-information\n * @param symbol - The stock symbol to get the historical employee count for\n * @returns Track a company's employee count over time with our Historical Employee Count endpoint. This endpoint provides information about the number of employees a company has had each year.\n */\n async getHistoricalEmployeeCount({\n symbol,\n }: {\n symbol: string;\n }): Promise<UnwrappedAPIResponse<HistoricalEmployeeCount[] | null>> {\n const params: { symbol: string } = { symbol };\n\n return this.client.get(`/historical/employee_count`, 'v4', params);\n }\n\n /**\n * Get shares float\n * https://site.financialmodelingprep.com/developer/docs#company-share-float-share-float\n * @param symbol - The stock symbol to get the shares float for\n * @returns The FMP Company Share Float endpoint provides the total number of shares that are publicly traded for a given company. This is also known as the company's float. The float is calculated by subtracting the number of restricted shares from the total number of outstanding shares.\n */\n async getSharesFloat({\n symbol,\n }: {\n symbol: string;\n }): Promise<UnwrappedAPIResponse<SharesFloat | null>> {\n const params: { symbol: string } = { symbol };\n\n return this.client.get(`/shares_float`, 'v4', params);\n }\n\n /**\n * Get historical shares float\n * https://site.financialmodelingprep.com/developer/docs#company-historical-share-float\n * @param symbol - The stock symbol to get the historical shares float for\n * @returns The FMP Historical Share Float endpoint provides historical data on the number of shares that are publicly traded for a given company. This is also known as the company's float. The float is calculated by subtracting the number of restricted shares from the total number of outstanding shares.\n */\n async getHistoricalSharesFloat({\n symbol,\n }: {\n symbol: string;\n }): Promise<UnwrappedAPIResponse<HistoricalSharesFloat[] | null>> {\n const params: { symbol: string } = { symbol };\n\n return this.client.get(`/historical/shares_float`, 'v4', params);\n }\n\n /**\n * Get earnings call transcript\n * https://site.financialmodelingprep.com/developer/docs#earnings-transcript-earnings-transcripts\n * @param symbol - The stock symbol to get the earnings call transcript for\n * @param year - The year of the earnings call\n * @param quarter - The quarter of the earnings call\n * @returns The FMP Earnings Call Transcript endpoint provides the transcript of a company's earnings call.\n */\n async getEarningsCallTranscript({\n symbol,\n year,\n quarter,\n }: {\n symbol: string;\n year: number;\n quarter: number;\n }): Promise<UnwrappedAPIResponse<EarningsCallTranscript[] | null>> {\n const params: { year: number; quarter: number } = { year, quarter };\n return this.client.get(`/earning_call_transcript/${symbol}`, 'v3', params);\n }\n}\n","// Main FMP API client that combines all endpoints\n\nimport { FMPClient } from './client';\nimport { FMPConfig } from './types/common';\nimport { validateApiKey } from './utils/validation';\nimport { StockEndpoints } from './endpoints/stock';\nimport { FinancialEndpoints } from './endpoints/financial';\nimport { ForexEndpoints } from './endpoints/forex';\nimport { CryptoEndpoints } from './endpoints/crypto';\nimport { ETFEndpoints } from './endpoints/etf';\nimport { MutualFundEndpoints } from './endpoints/mutual-fund';\nimport { BondEndpoints } from './endpoints/bond';\nimport { EconomicEndpoints } from './endpoints/economic';\nimport { MarketEndpoints } from './endpoints/market';\nimport { ListEndpoints } from './endpoints/list';\nimport { CalendarEndpoints } from './endpoints/calendar';\nimport { CompanyEndpoints } from './endpoints/company';\n\n/**\n * Main FMP API client that provides access to all endpoints\n *\n * @example\n * ```typescript\n * import { FMP } from 'fmp-node-api';\n *\n * const fmp = new FMP({ apiKey: 'your-api-key' });\n *\n * // Get stock quote\n * const quote = await fmp.stock.getQuote({ symbol: 'AAPL' });\n *\n * // Get financial statements\n * const incomeStatement = await fmp.financial.getIncomeStatement({\n * symbol: 'AAPL',\n * period: 'annual'\n * });\n *\n * // Get forex data\n * const forexQuote = await fmp.forex.getQuote({ symbol: 'EURUSD' });\n * ```\n */\nexport class FMP {\n public readonly stock: StockEndpoints;\n public readonly financial: FinancialEndpoints;\n public readonly forex: ForexEndpoints;\n public readonly crypto: CryptoEndpoints;\n public readonly etf: ETFEndpoints;\n public readonly mutualFund: MutualFundEndpoints;\n public readonly bond: BondEndpoints;\n public readonly economic: EconomicEndpoints;\n public readonly market: MarketEndpoints;\n public readonly list: ListEndpoints;\n public readonly calendar: CalendarEndpoints;\n public readonly company: CompanyEndpoints;\n\n constructor(config: FMPConfig) {\n // Validate API key at construction time\n validateApiKey(config.apiKey);\n\n const client = new FMPClient(config);\n\n this.stock = new StockEndpoints(client);\n this.financial = new FinancialEndpoints(client);\n this.forex = new ForexEndpoints(client);\n this.crypto = new CryptoEndpoints(client);\n this.etf = new ETFEndpoints(client);\n this.mutualFund = new MutualFundEndpoints(client);\n this.bond = new BondEndpoints(client);\n this.economic = new EconomicEndpoints(client);\n this.market = new MarketEndpoints(client);\n this.list = new ListEndpoints(client);\n this.calendar = new CalendarEndpoints(client);\n this.company = new CompanyEndpoints(client);\n }\n\n /**\n * Get the underlying client instance for advanced usage\n */\n getClient(): FMPClient {\n return this.stock['client'];\n }\n}\n","// Common types used across all FMP API endpoints\n\n// Base API response wrapper - more type-safe without any default\nexport interface APIResponse<T = unknown> {\n success: boolean;\n data?: T;\n error?: string;\n status?: number;\n}\n\n// More specific response types for better type safety\nexport interface SuccessResponse<T> extends APIResponse<T> {\n success: true;\n data: T;\n status: number;\n}\n\nexport interface ErrorResponse extends APIResponse<never> {\n success: false;\n error: string;\n status: number;\n}\n\n// Type utility to unwrap single objects from arrays\n// If T is an array type, unwrap it to the element type\n// Otherwise, keep T as is\nexport type UnwrapSingle<T> = T extends [infer U] ? U : T extends (infer U)[] ? U | U[] : T;\n\n// API response with automatic unwrapping of single objects\nexport interface UnwrappedAPIResponse<T = unknown> {\n success: boolean;\n data?: UnwrapSingle<T>;\n error?: string;\n status?: number;\n}\n\n// FMP API configuration\nexport interface FMPConfig {\n apiKey: string;\n baseURL?: string;\n timeout?: number;\n}\n\n// Common parameter interfaces\nexport interface SymbolParams {\n symbol: string;\n}\n\nexport interface DateRangeParams {\n from?: string;\n to?: string;\n}\n\nexport interface PaginationParams {\n limit?: number;\n page?: number;\n}\n\nexport interface PeriodParams {\n period?: 'annual' | 'quarter';\n}\n\n// Common historical price data structure\nexport interface HistoricalPriceData {\n date: string;\n open: number;\n high: number;\n low: number;\n close: number;\n adjClose: number;\n volume: number;\n unadjustedVolume: number;\n change: number;\n changePercent: number;\n vwap: number;\n label: string;\n changeOverTime: number;\n}\n\n// Historical price response wrapper\nexport interface HistoricalPriceResponse {\n symbol: string;\n historical: HistoricalPriceData[];\n}\n\n// Type-safe query parameters\nexport interface QueryParams {\n [key: string]: string | number | boolean | undefined;\n}\n\n// Common financial data types\nexport interface Quote {\n symbol: string;\n price: number;\n change: number;\n changePercent: number;\n dayLow: number;\n dayHigh: number;\n yearLow: number;\n yearHigh: number;\n marketCap: number;\n priceAvg50: number;\n priceAvg200: number;\n volume: number;\n avgVolume: number;\n exchange: string;\n open: number;\n previousClose: number;\n eps: number;\n pe: number;\n earningsAnnouncement: string;\n sharesOutstanding: number;\n timestamp: number;\n}\n\n// Common enums\nexport enum Period {\n ANNUAL = 'annual',\n QUARTER = 'quarter',\n}\n\nexport enum Exchange {\n NYSE = 'NYSE',\n NASDAQ = 'NASDAQ',\n AMEX = 'AMEX',\n TSX = 'TSX',\n LSE = 'LSE',\n ASX = 'ASX',\n NSE = 'NSE',\n BSE = 'BSE',\n}\n","// Formatting utilities for FMP API\n\n/**\n * Format currency value\n */\nexport function formatCurrency(value: number, currency: string = 'USD'): string {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: currency,\n }).format(value);\n}\n\n/**\n * Format percentage value\n */\nexport function formatPercentage(value: number, decimals: number = 2): string {\n return `${value.toFixed(decimals)}%`;\n}\n\n/**\n * Format large numbers with K, M, B suffixes\n */\nexport function formatLargeNumber(value: number): string {\n if (value >= 1e12) {\n return `${(value / 1e12).toFixed(2)}T`;\n } else if (value >= 1e9) {\n return `${(value / 1e9).toFixed(2)}B`;\n } else if (value >= 1e6) {\n return `${(value / 1e6).toFixed(2)}M`;\n } else if (value >= 1e3) {\n return `${(value / 1e3).toFixed(2)}K`;\n }\n return value.toString();\n}\n\n/**\n * Format date to YYYY-MM-DD\n */\nexport function formatDate(date: Date | string): string {\n const d = typeof date === 'string' ? new Date(date) : date;\n return d.toISOString().split('T')[0];\n}\n\n/**\n * Format date to readable format\n */\nexport function formatReadableDate(date: Date | string): string {\n const d = typeof date === 'string' ? new Date(date) : date;\n return d.toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n}\n\n/**\n * Format timestamp to readable format\n */\nexport function formatTimestamp(timestamp: number): string {\n const date = new Date(timestamp * 1000);\n return date.toLocaleString('en-US');\n}\n\n/**\n * Format number with specified decimal places\n */\nexport function formatNumber(value: number, decimals: number = 2): string {\n return value.toFixed(decimals);\n}\n\n/**\n * Format volume with appropriate units\n */\nexport function formatVolume(volume: number): string {\n if (volume >= 1e9) {\n return `${(volume / 1e9).toFixed(2)}B`;\n } else if (volume >= 1e6) {\n return `${(volume / 1e6).toFixed(2)}M`;\n } else if (volume >= 1e3) {\n return `${(volume / 1e3).toFixed(2)}K`;\n }\n return volume.toString();\n}\n","// Constants for FMP API\n\n// Default configuration\nexport const DEFAULT_TIMEOUT = 10000;\nexport const DEFAULT_LIMIT = 100;\nexport const MAX_LIMIT = 1000;\n\n// Common periods\nexport const PERIODS = {\n ANNUAL: 'annual',\n QUARTER: 'quarter',\n} as const;\n\n// Common exchanges\nexport const EXCHANGES = {\n NYSE: 'NYSE',\n NASDAQ: 'NASDAQ',\n AMEX: 'AMEX',\n TSX: 'TSX',\n LSE: 'LSE',\n ASX: 'ASX',\n NSE: 'NSE',\n BSE: 'BSE',\n} as const;\n\n// Common sectors\nexport const SECTORS = {\n TECHNOLOGY: 'Technology',\n HEALTHCARE: 'Healthcare',\n FINANCIAL: 'Financial',\n CONSUMER_DISCRETIONARY: 'Consumer Discretionary',\n CONSUMER_STAPLES: 'Consumer Staples',\n INDUSTRIALS: 'Industrials',\n ENERGY: 'Energy',\n MATERIALS: 'Materials',\n UTILITIES: 'Utilities',\n REAL_ESTATE: 'Real Estate',\n COMMUNICATION_SERVICES: 'Communication Services',\n} as const;\n\n// Common countries\nexport const COUNTRIES = {\n US: 'US',\n CA: 'CA',\n GB: 'GB',\n AU: 'AU',\n IN: 'IN',\n DE: 'DE',\n FR: 'FR',\n JP: 'JP',\n CN: 'CN',\n BR: 'BR',\n} as const;\n\n// Error messages\nexport const ERROR_MESSAGES = {\n API_KEY_REQUIRED: 'API key is required',\n SYMBOL_REQUIRED: 'Symbol is required',\n INVALID_SYMBOL: 'Invalid symbol format',\n INVALID_DATE: 'Invalid date format. Use YYYY-MM-DD',\n INVALID_PERIOD: 'Period must be either \"annual\" or \"quarter\"',\n INVALID_LIMIT: 'Limit must be between 1 and 1000',\n INVALID_PAGE: 'Page must be a non-negative number',\n REQUEST_FAILED: 'Request failed',\n RATE_LIMIT_EXCEEDED: 'Rate limit exceeded',\n UNAUTHORIZED: 'Unauthorized - Invalid API key',\n NOT_FOUND: 'Resource not found',\n} as const;\n\n// HTTP status codes\nexport const HTTP_STATUS = {\n OK: 200,\n CREATED: 201,\n BAD_REQUEST: 400,\n UNAUTHORIZED: 401,\n FORBIDDEN: 403,\n NOT_FOUND: 404,\n TOO_MANY_REQUESTS: 429,\n INTERNAL_SERVER_ERROR: 500,\n} as const;\n"]}