fmp-node-api 0.0.6 → 0.0.8
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.d.mts +581 -28
- package/dist/index.d.ts +581 -28
- package/dist/index.js +463 -11
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +460 -12
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -2
package/dist/index.mjs.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/economic.ts","../src/endpoints/market.ts","../src/endpoints/list.ts","../src/endpoints/calendar.ts","../src/endpoints/company.ts","../src/endpoints/quote.ts","../src/endpoints/senate-house.ts","../src/fmp.ts","../src/types/common.ts","../src/utils/formatting.ts","../src/utils/constants.ts"],"names":["Period","Exchange"],"mappings":"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","file":"index.mjs","sourcesContent":["import axios, { AxiosInstance } from 'axios';\nimport { FMPConfig, APIResponse } from './types';\n\n/**\n * Utility function to unwrap single objects from arrays\n * Only unwraps if the response is an array with exactly one item\n * Otherwise, returns 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 // Standard get method - returns raw API response\n async get<T>(\n endpoint: string,\n version: 'v3' | 'v4' | 'stable' = 'v3',\n params?: Record<string, any>,\n ): Promise<APIResponse<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: 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 // Get method for single-object endpoints - unwraps single-item arrays\n async getSingle<T>(\n endpoint: string,\n version: 'v3' | 'v4' | 'stable' = 'v3',\n params?: Record<string, any>,\n ): Promise<APIResponse<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 { APIResponse, DateRangeParams } from '@/types/common';\nimport { HistoricalPriceResponse } from '@/types/quote';\nimport { MarketCap, StockSplitResponse, StockQuote, StockDividendResponse } from '@/types/stock';\n\nexport class StockEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get real-time stock quote\n * @deprecated Use `fmp.quote.getQuote()` instead. This method will be removed in version 0.1.0.\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<APIResponse<StockQuote | null>> {\n console.warn(\n '⚠️ StockEndpoints.getQuote() is deprecated. Use fmp.quote.getQuote() instead. This method will be removed in version 0.1.0.',\n );\n return this.client.getSingle(`/quote/${symbol}`, 'v3');\n }\n\n /**\n * Get historical stock prices\n * @deprecated Use `fmp.quote.getHistoricalPrice()` instead. This method will be removed in version 0.1.0.\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<APIResponse<HistoricalPriceResponse>> {\n console.warn(\n '⚠️ StockEndpoints.getHistoricalPrice() is deprecated. Use fmp.quote.getHistoricalPrice() instead. This method will be removed in version 0.1.0.',\n );\n const params: DateRangeParams = {};\n if (from) params.from = from;\n if (to) params.to = to;\n\n return this.client.getSingle(`/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({ symbol }: { symbol: string }): Promise<APIResponse<MarketCap | null>> {\n return this.client.getSingle(`/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({ symbol }: { symbol: string }): Promise<APIResponse<StockSplitResponse>> {\n return this.client.get(`/historical-price-full/stock_split/${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<APIResponse<StockDividendResponse>> {\n return this.client.getSingle(`/historical-price-full/stock_dividend/${symbol}`, 'v3');\n }\n}\n","import { APIResponse } from '@/types';\nimport { FMPClient } from '@/client';\nimport {\n FinancialStatementsParams,\n KeyMetrics,\n FinancialRatios,\n EnterpriseValue,\n CashflowGrowth,\n IncomeGrowth,\n BalanceSheetGrowth,\n FinancialGrowth,\n IncomeStatement,\n BalanceSheet,\n CashFlowStatement,\n EarningsSurprises,\n EarningsHistorical,\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<APIResponse<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<APIResponse<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<APIResponse<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<APIResponse<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<APIResponse<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<APIResponse<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<APIResponse<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<APIResponse<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<APIResponse<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<APIResponse<FinancialGrowth[]>> {\n return this.client.get(`/financial-growth/${symbol}?period=${period}&limit=${limit}`, 'v3');\n }\n\n /**\n * Get earnings historical\n * https://site.financialmodelingprep.com/developer/docs#earnings-historical-earnings\n * @param symbol - The stock symbol to get the earnings historical for\n * @param limit - The number of periods to get\n * @returns A list of historical & upcoming earnings announcements for a specific company, including the date, estimated EPS, and actual EPS.\n */\n async getEarningsHistorical({\n symbol,\n limit = 5,\n }: FinancialStatementsParams): Promise<APIResponse<EarningsHistorical[]>> {\n return this.client.get(`/historical/earning_calendar/${symbol}?limit=${limit}`, 'v3');\n }\n\n /**\n * Get earnings surprises\n * https://site.financialmodelingprep.com/developer/docs#earnings-surprises-earnings\n * @param symbol - The stock symbol to get the earnings surprises for\n * @param limit - The number of periods to get\n * @returns A list of earnings announcements for publicly traded companies that were either positive or negative surprises. This endpoint includes the date of the earnings announcement, the estimated EPS, the actual EPS, and the earnings surprise.\n */\n async getEarningsSurprises({\n symbol,\n }: FinancialStatementsParams): Promise<APIResponse<EarningsSurprises[]>> {\n return this.client.get(`/earnings-surprises/${symbol}`, 'v3');\n }\n}\n","// Forex endpoints for FMP API\n\nimport { FMPClient } from '@/client';\nimport { APIResponse, QueryParams, SymbolParams } from '@/types/common';\nimport { HistoricalPriceResponse } from '@/types/quote';\nimport { ForexQuote } from '@/types/forex';\n\nexport class ForexEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get forex quote\n * @deprecated Use `fmp.quote.getQuote()` instead. This method will be removed in version 0.1.0.\n * @param params - Parameters for the forex quote request\n * @returns Forex quote data\n */\n async getQuote(params: SymbolParams): Promise<APIResponse<ForexQuote[]>> {\n console.warn(\n '⚠️ ForexEndpoints.getQuote() is deprecated. Use fmp.quote.getQuote() instead. This method will be removed in version 0.1.0.',\n );\n return this.client.get('/quote', 'v3', params);\n }\n\n /**\n * Get historical forex prices\n * @deprecated Use `fmp.quote.getHistoricalPrice()` instead. This method will be removed in version 0.1.0.\n * @param symbol - The forex 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 Historical forex price data\n */\n async getHistoricalPrice({\n symbol,\n from,\n to,\n }: {\n symbol: string;\n from?: string;\n to?: string;\n }): Promise<APIResponse<HistoricalPriceResponse>> {\n console.warn(\n '⚠️ ForexEndpoints.getHistoricalPrice() is deprecated. Use fmp.quote.getHistoricalPrice() instead. This method will be removed in version 0.1.0.',\n );\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","// Cryptocurrency endpoints for FMP API\n\nimport { FMPClient } from '@/client';\nimport { APIResponse, DateRangeParams } from '@/types/common';\nimport { HistoricalPriceResponse } from '@/types/quote';\nimport { CryptoQuote } from '@/types/crypto';\n\nexport class CryptoEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get crypto quote\n * @deprecated Use `fmp.quote.getQuote()` instead. This method will be removed in version 0.1.0.\n * @param symbol - The crypto symbol to get the quote for\n * @returns Crypto quote data\n */\n async getQuote({ symbol }: { symbol: string }): Promise<APIResponse<CryptoQuote | null>> {\n console.warn(\n '⚠️ CryptoEndpoints.getQuote() is deprecated. Use fmp.quote.getQuote() instead. This method will be removed in version 0.1.0.',\n );\n return this.client.getSingle(`/quote/${symbol}`, 'v3');\n }\n\n /**\n * Get historical crypto prices\n * @deprecated Use `fmp.quote.getHistoricalPrice()` instead. This method will be removed in version 0.1.0.\n * @param symbol - The crypto 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 Provides daily price data for all cryptocurrencies that are traded on exchanges around the world.\n */\n async getHistoricalPrice({\n symbol,\n from,\n to,\n }: {\n symbol: string;\n from?: string;\n to?: string;\n }): Promise<APIResponse<HistoricalPriceResponse>> {\n console.warn(\n '⚠️ CryptoEndpoints.getHistoricalPrice() is deprecated. Use fmp.quote.getHistoricalPrice() instead. This method will be removed in version 0.1.0.',\n );\n const params: DateRangeParams = {};\n if (from) params.from = from;\n if (to) params.to = to;\n\n return this.client.getSingle(`/historical-price-full/${symbol}`, 'v3', params);\n }\n}\n","// ETF endpoints for FMP API\n\nimport { FMPClient } from '@/client';\nimport { APIResponse, SymbolParams } from '@/types/common';\nimport {\n ETFProfile,\n ETFHolding,\n ETFHoldingDates,\n ETFHolder,\n ETFStockExposure,\n ETFWeighting,\n ETFCountryWeighting,\n} from '@/types/etf';\n\nexport class ETFEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get ETF holding dates\n * https://site.financialmodelingprep.com/developer/docs#etf-holding-dates-etf-holdings\n * @param symbol - The symbol of the ETF to get the holding dates for\n * @returns The FMP ETF Holding Dates endpoint provides a list of the dates on which ETF holdings are updated. For example, an investor may want to know when an ETF's holdings are updated in order to make sure that they are still aligned with their investment goals.\n */\n async getHoldingDates({ symbol }: SymbolParams): Promise<APIResponse<ETFHoldingDates[]>> {\n const params: { symbol?: string } = {};\n if (symbol) params.symbol = symbol;\n return this.client.get('/etf-holdings/portfolio-date', 'v4', params);\n }\n\n /**\n * Get ETF holdings\n * https://site.financialmodelingprep.com/developer/docs#etf-holdings-etf-holdings\n * @param symbol - The symbol of the ETF to get the holdings for\n * @param date - The date to get the holdings for\n * @returns The FMP ETF Holdings endpoint provides a list of all the institutional investors that own shares of an ETF. For example, an investor may want to know which ETF has the highest exposure to a particular industry or sector.\n */\n async getHoldings({\n symbol,\n date,\n }: {\n symbol: string;\n date: string;\n }): Promise<APIResponse<ETFHolding[]>> {\n const params: { symbol?: string; date?: string } = {};\n if (symbol) params.symbol = symbol;\n if (date) params.date = date;\n return this.client.get('/etf-holdings', 'v4', params);\n }\n\n /**\n * Get ETF holder\n * https://site.financialmodelingprep.com/developer/docs#etf-holder-etf-holdings\n * @param symbol - The symbol of the ETF to get the holder for\n * @returns This endpoint returns all stocks held by a specific ETF. Assets, share number, and weight are among the fields returned. For example you can get components of SPY, VOO and more.\n */\n async getHolder({ symbol }: SymbolParams): Promise<APIResponse<ETFHolder[]>> {\n return this.client.get(`/etf-holder/${symbol}`, 'v3');\n }\n\n /**\n * Get ETF profile\n * https://site.financialmodelingprep.com/developer/docs#etf-information-etf-holdings\n * @param symbol - The symbol of the ETF to get the profile for\n * @returns The FMP ETF Information endpoint provides basic information about an ETF, such as its ticker symbol, name, expense ratio, and asset under management. For example, an investor may want to compare the expense ratios of different ETFs to find the one that is most cost-effective.\n */\n async getProfile({ symbol }: SymbolParams): Promise<APIResponse<ETFProfile | null>> {\n const params: { symbol?: string } = {};\n if (symbol) params.symbol = symbol;\n return this.client.getSingle('/etf-info', 'v4', params);\n }\n\n /**\n * Get ETF sector weighting\n * https://site.financialmodelingprep.com/developer/docs#etf-sector-weighting-etf-holdings\n * @param symbol - The symbol of the ETF to get the sector exposure for\n * @returns The FMP ETF Sector Weighting endpoint provides a breakdown of the percentage of an ETF's assets that are invested in each sector. For example, an investor may want to invest in an ETF that has a high exposure to the technology sector if they believe that the technology sector is poised for growth.\n */\n async getSectorWeighting({ symbol }: SymbolParams): Promise<APIResponse<ETFWeighting[]>> {\n return this.client.get(`/etf-sector-weightings/${symbol}`, 'v3');\n }\n\n /**\n * Get ETF country weighting\n * https://site.financialmodelingprep.com/developer/docs#etf-country-weighting-etf-holdings\n * @param symbol - The symbol of the ETF to get the country weighting for\n * @returns The FMP ETF Country Weighting endpoint provides a breakdown of the percentage of an ETF's assets that are invested in each country. For example, an investor may want to invest in an ETF that has a high exposure to China if they believe that the Chinese economy is poised for growth.\n */\n async getCountryWeighting({ symbol }: SymbolParams): Promise<APIResponse<ETFCountryWeighting[]>> {\n return this.client.get(`/etf-country-weightings/${symbol}`, 'v3');\n }\n\n /**\n * Get ETF Stock exposure\n * https://site.financialmodelingprep.com/developer/docs#etf-sector-exposure-etf-holdings\n * @param symbol - The symbol of the ETF to get the stock exposure for\n * @returns This endpoint returns asset exposure from all ETFs that have it in their holdings. It has properties like market value, share number or weight percentage. It can be useful for looking up stock you like to check what ETF has it on their portfolio.\n */\n async getStockExposure({ symbol }: SymbolParams): Promise<APIResponse<ETFStockExposure[]>> {\n return this.client.get(`/etf-stock-exposure/${symbol}`, 'v3');\n }\n}\n","// Mutual fund endpoints for FMP API\n\nimport { FMPClient } from '@/client';\nimport { APIResponse, SymbolParams } from '@/types/common';\nimport { MutualFundQuote, MutualFundHolding } from '@/types/mutual-fund';\n\nexport class MutualFundEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get mutual fund quote\n * @deprecated Use `fmp.quote.getQuote()` instead. This method will be removed in a future release.\n * @param params - Parameters for the mutual fund quote request\n * @returns Mutual fund quote data\n */\n async getQuote(params: SymbolParams): Promise<APIResponse<MutualFundQuote[]>> {\n return this.client.get('/quote', 'v3', params);\n }\n\n /**\n * Get mutual fund holders\n * https://site.financialmodelingprep.com/developer/docs#mutual-fund-holder-mutual-funds-holdings\n * @param symbol - The symbol of the mutual fund to get the holders for\n * @returns Mutual fund holders data\n */\n async getHolders({ symbol }: SymbolParams): Promise<APIResponse<MutualFundHolding[]>> {\n return this.client.get(`/mutual-fund-holder/${symbol}`, 'v3');\n }\n}\n","// Economic endpoints for FMP API\n\nimport { FMPClient } from '@/client';\nimport { APIResponse, DateRangeParams } from '@/types/common';\nimport { TreasuryRate, EconomicIndicator, EconomicIndicatorParams } from '@/types/economic';\n\nexport class EconomicEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get treasury rates\n * https://site.financialmodelingprep.com/developer/docs#treasury-rates-economics-data\n * @param from - The start date to get the treasury rates for\n * @param to - The end date to get the treasury rates for\n * @returns Treasury rates data\n */\n async getTreasuryRates(params: DateRangeParams): Promise<APIResponse<TreasuryRate[]>> {\n const { from, to } = params;\n\n const queryParams: DateRangeParams = {};\n if (from) queryParams.from = from;\n if (to) queryParams.to = to;\n return this.client.get('/treasury', 'v4', queryParams);\n }\n\n /**\n * Get economic indicators\n * https://site.financialmodelingprep.com/developer/docs#economic-indicators-economics-data\n * @param name - GDP, realGDP, nominalPotentialGDP, realGDPPerCapita, federalFunds, CPI, inflationRate, inflation, retailSales, consumerSentiment, durableGoods, unemploymentRate, totalNonfarmPayroll, initialClaims, industrialProductionTotalIndex, newPrivatelyOwnedHousingUnitsStartedTotalUnits, totalVehicleSales, retailMoneyFunds, smoothedUSRecessionProbabilities, 3MonthOr90DayRatesAndYieldsCertificatesOfDeposit, commercialBankInterestRateOnCreditCardPlansAllAccounts, 30YearFixedRateMortgageAverage, 15YearFixedRateMortgageAverage\n * @param from - The start date to get the economic indicators for\n * @param to - The end date to get the economic indicators for\n * @returns Provides real-time and historical economic data for a variety of economic indicators, such as GDP, unemployment, and inflation.\n */\n async getEconomicIndicators(\n params: EconomicIndicatorParams,\n ): Promise<APIResponse<EconomicIndicator[]>> {\n const { name, from, to } = params;\n\n const queryParams: EconomicIndicatorParams = { name };\n if (from) queryParams.from = from;\n if (to) queryParams.to = to;\n\n return this.client.get(`/economic`, 'v4', queryParams);\n }\n}\n","// Market endpoints for FMP API\n\nimport { FMPClient } from '@/client';\nimport { APIResponse } from '@/types/common';\nimport {\n MarketHours,\n MarketPerformance,\n MarketSectorPerformance,\n MarketIndex,\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', 'v3');\n }\n\n /**\n * Get market performance\n */\n async getMarketPerformance(): Promise<APIResponse<MarketPerformance[]>> {\n return this.client.get('/market-performance', 'v3');\n }\n\n /**\n * Get top gainers\n * https://site.financialmodelingprep.com/developer/docs#market-biggest-gainers-market-overview\n * @returns The FMP Market Biggest Gainers endpoint provides a list of the stocks that have gained the most value on a given day. This information can be used by investors to identify stocks that are momentum and to potential investment opportunities.\n */\n async getGainers(): Promise<APIResponse<MarketPerformance[]>> {\n return this.client.get('/stock_market/gainers', 'v3');\n }\n\n /**\n * Get top losers\n * https://site.financialmodelingprep.com/developer/docs#market-biggest-losers-market-overview\n * @returns The FMP Market Biggest Losers endpoint provides a list of the stocks that have lost the most value on a given day. This information can be used by investors to identify stocks that are underperforming and to potential trading opportunities.\n */\n async getLosers(): Promise<APIResponse<MarketPerformance[]>> {\n return this.client.get('/stock_market/losers', 'v3');\n }\n\n /**\n * Get most active stocks\n */\n async getMostActive(): Promise<APIResponse<MarketPerformance[]>> {\n return this.client.get('/stock_market/actives', 'v3');\n }\n\n /**\n * Get sector performance\n * https://site.financialmodelingprep.com/developer/docs#sector-performance-market-overview\n * @returns The FMP Sector Performance endpoint provides the performance of each sector of the stock market over a specified period of time. This information can be used by investors to identify sectors that are outperforming or underperforming the market.\n */\n async getSectorPerformance(): Promise<APIResponse<MarketSectorPerformance[]>> {\n return this.client.get('/sector-performance', 'v3');\n }\n\n /**\n * Get market indices\n * https://site.financialmodelingprep.com/developer/docs#market-index-market-overview\n * @returns The FMP Market Index endpoint provides a list of all the major stock market indices, such as the S&P 500, the Dow Jones Industrial Average, and the Nasdaq Composite Index. This information can be used by investors to track the performance of the overall stock market and to identify sectors and industries that are outperforming or underperforming the market.\n */\n async getMarketIndex(): Promise<APIResponse<MarketIndex[]>> {\n return this.client.get('/quotes/index', 'v3');\n }\n}\n","import { FMPClient } from '@/client';\nimport { APIResponse } 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<APIResponse<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<APIResponse<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<APIResponse<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<APIResponse<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<APIResponse<AvailableIndexesList[]>> {\n return this.client.get('/symbol/available-indexes');\n }\n}\n","import { APIResponse, DateRangeParams } from '@/types';\nimport { FMPClient } from '@/client';\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 APIResponse<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 APIResponse<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 APIResponse<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<APIResponse<IPOCalendar[]>> {\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 APIResponse<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 { APIResponse } from '@/types';\nimport { FMPClient } from '@/client';\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<APIResponse<CompanyProfile | null>> {\n return this.client.getSingle(`/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<APIResponse<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<APIResponse<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<APIResponse<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({ symbol }: { symbol: string }): Promise<APIResponse<SharesFloat | null>> {\n const params: { symbol: string } = { symbol };\n\n return this.client.getSingle(`/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<APIResponse<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<APIResponse<EarningsCallTranscript[] | null>> {\n const params: { year: number; quarter: number } = { year, quarter };\n return this.client.getSingle(`/earning_call_transcript/${symbol}`, 'v3', params);\n }\n}\n","// Unified quote endpoints for FMP API - handles stocks, crypto, forex, commodities, and ETFs\n\nimport { FMPClient } from '@/client';\nimport { APIResponse, DateRangeParams } from '@/types/common';\nimport {\n Quote,\n QuoteParams,\n HistoricalPriceParams,\n HistoricalPriceResponse,\n HistoricalPriceData,\n IntradayParams,\n} from '@/types/quote';\n\nexport class QuoteEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get quote for any asset type (stock, crypto, forex, commodity, ETF)\n * @param params - Parameters for the quote request\n * @returns Quote data for the specified asset\n */\n async getQuote(params: QuoteParams): Promise<APIResponse<Quote | null>> {\n const { symbol } = params;\n\n // All asset types use the same /quote/{symbol} endpoint\n return this.client.getSingle(`/quote/${symbol}`, 'v3');\n }\n\n /**\n * Get historical prices for any asset type\n * @param params - Parameters for the historical price request\n * @returns Historical price data for the specified asset\n */\n async getHistoricalPrice(\n params: HistoricalPriceParams,\n ): Promise<APIResponse<HistoricalPriceResponse>> {\n const { symbol, from, to } = params;\n\n const queryParams: DateRangeParams = {};\n if (from) queryParams.from = from;\n if (to) queryParams.to = to;\n\n return this.client.getSingle(`/historical-price-full/${symbol}`, 'v3', queryParams);\n }\n\n /**\n * Get multiple quotes for any asset type\n * @param symbols - Array of symbols to get quotes for\n * @returns Array of quote data\n */\n async getQuotes(symbols: string[]): Promise<APIResponse<Quote[]>> {\n const symbolsParam = symbols.join(',');\n return this.client.get(`/quote/${symbolsParam}`, 'v3');\n }\n\n /**\n * Get intraday data for any asset type\n * @param params - Parameters for the intraday request\n * @returns Intraday price data for the specified asset\n */\n async getIntraday(params: IntradayParams): Promise<APIResponse<HistoricalPriceData[]>> {\n const { symbol, interval, from, to } = params;\n\n const queryParams: DateRangeParams = {};\n if (from) queryParams.from = from;\n if (to) queryParams.to = to;\n\n return this.client.get(`/historical-chart/${interval}/${symbol}`, 'v3', queryParams);\n }\n}\n","// Senate and House trading endpoints for FMP API\n\nimport { FMPClient } from '@/client';\nimport { APIResponse } from '@/types/common';\nimport {\n HouseTradingResponse,\n SenateHouseTradingParams,\n SenateHouseTradingRSSFeedParams,\n SenateTradingResponse,\n} from '@/types/senate-house';\n\nexport class SenateHouseEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get senate trading data only\n * https://site.financialmodelingprep.com/developer/docs#senate-trading\n * @param symbol - The stock symbol to get the senate trading data for\n * @returns Senate trading data only\n */\n async getSenateTrading(\n params: SenateHouseTradingParams,\n ): Promise<APIResponse<SenateTradingResponse[]>> {\n const { symbol } = params;\n return this.client.get(`/senate-trading`, 'v4', { symbol });\n }\n\n /** Get senate trading RSS feed\n * https://site.financialmodelingprep.com/developer/docs#senate-trading-rss-feed-senate\n * @param page - The page number to get\n * @returns Senate trading RSS feed\n */\n async getSenateTradingRSSFeed(\n params: SenateHouseTradingRSSFeedParams,\n ): Promise<APIResponse<SenateTradingResponse[]>> {\n const { page } = params;\n return this.client.get('/senate-trading-rss-feed', 'v4', { page });\n }\n\n /**\n * Get house trading data only\n * https://site.financialmodelingprep.com/developer/docs#house-disclosure\n * @param symbol - The stock symbol to get the house trading data for\n * @returns House trading data only\n */\n async getHouseTrading(\n params: SenateHouseTradingParams,\n ): Promise<APIResponse<HouseTradingResponse[]>> {\n const { symbol } = params;\n\n return this.client.get('/senate-disclosure', 'v4', { symbol });\n }\n\n /** Get house trading RSS feed\n * https://site.financialmodelingprep.com/developer/docs#house-disclosure-rss-feed-senate\n * @param page - The page number to get\n * @returns House trading RSS feed\n */\n async getHouseTradingRSSFeed(\n params: SenateHouseTradingRSSFeedParams,\n ): Promise<APIResponse<SenateTradingResponse[]>> {\n const { page } = params;\n return this.client.get('/senate-disclosure-rss-feed', 'v4', { page });\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 { EconomicEndpoints } from './endpoints/economic';\nimport { MarketEndpoints } from './endpoints/market';\nimport { ListEndpoints } from './endpoints/list';\nimport { CalendarEndpoints } from './endpoints/calendar';\nimport { CompanyEndpoints } from './endpoints/company';\nimport { QuoteEndpoints } from './endpoints/quote';\nimport { SenateHouseEndpoints } from './endpoints/senate-house';\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 economic: EconomicEndpoints;\n public readonly market: MarketEndpoints;\n public readonly list: ListEndpoints;\n public readonly calendar: CalendarEndpoints;\n public readonly company: CompanyEndpoints;\n public readonly quote: QuoteEndpoints;\n public readonly senateHouse: SenateHouseEndpoints;\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.crypto = new CryptoEndpoints(client);\n this.etf = new ETFEndpoints(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 this.quote = new QuoteEndpoints(client);\n this.senateHouse = new SenateHouseEndpoints(client);\n\n this.forex = new ForexEndpoints(client);\n this.economic = new EconomicEndpoints(client);\n this.mutualFund = new MutualFundEndpoints(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// Type-safe query parameters\nexport interface QueryParams {\n [key: string]: string | number | boolean | undefined;\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"]}
|
|
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/economic.ts","../src/endpoints/market.ts","../src/endpoints/list.ts","../src/endpoints/calendar.ts","../src/endpoints/company.ts","../src/endpoints/quote.ts","../src/endpoints/senate-house.ts","../src/endpoints/institutional.ts","../src/endpoints/insider.ts","../src/endpoints/sec.ts","../src/fmp.ts","../src/types/common.ts","../src/types/insider.ts","../src/utils/formatting.ts","../src/utils/constants.ts"],"names":["filteredData","Period","Exchange","TransactionType"],"mappings":"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","file":"index.mjs","sourcesContent":["import axios, { AxiosInstance } from 'axios';\nimport { FMPConfig, APIResponse } from './types';\n\n/**\n * Utility function to unwrap single objects from arrays\n * Only unwraps if the response is an array with exactly one item\n * Otherwise, returns 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\n/**\n * Utility to normalize array responses: always returns an array (possibly empty)\n */\nfunction normalizeArrayResponse<T>(data: T | undefined | null): T {\n if (Array.isArray(data)) return data;\n if (data == null) return [] as unknown as T;\n return data;\n}\n\n/**\n * Utility to normalize object responses: always returns an object (possibly empty)\n */\nfunction normalizeObjectResponse<T>(data: T | undefined | null): T {\n if (data == null) return {} as unknown as T;\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/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 /**\n * Standard get method - returns raw API response\n *\n * For endpoints that return arrays, this will always return an array (possibly empty) for `data` when success is true.\n * For endpoints that return objects, data is returned as-is.\n */\n async get<T>(\n endpoint: string,\n version: 'v3' | 'v4' | 'stable' = 'v3',\n params?: Record<string, any>,\n ): Promise<APIResponse<T>> {\n const client = this.getClientForVersion(version);\n\n try {\n const response = await client.get(endpoint, { params });\n let data = response.data;\n // If T is an array type, always return an array (never undefined/null)\n if (Array.isArray(data) || data == null) {\n data = normalizeArrayResponse<T>(data);\n }\n return {\n success: true,\n data,\n error: null,\n status: response.status,\n };\n } catch (error: any) {\n return {\n success: false,\n data: null,\n error: error.message || 'Unknown error occurred',\n status: error.response?.status || 500,\n };\n }\n }\n\n /**\n * Get method for single-object endpoints - unwraps single-item arrays\n *\n * For endpoints that return single objects, this will always return an object (possibly empty) for `data` when success is true.\n */\n async getSingle<T>(\n endpoint: string,\n version: 'v3' | 'v4' | 'stable' = 'v3',\n params?: Record<string, any>,\n ): Promise<APIResponse<T>> {\n const client = this.getClientForVersion(version);\n\n try {\n const response = await client.get(endpoint, { params });\n const data = normalizeObjectResponse<T>(unwrapSingleObject(response.data));\n return {\n success: true,\n data,\n error: null,\n status: response.status,\n };\n } catch (error: any) {\n return {\n success: false,\n data: null,\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 { APIResponse, DateRangeParams } from '@/types/common';\nimport { HistoricalPriceResponse } from '@/types/quote';\nimport {\n MarketCap,\n StockSplitResponse,\n StockQuote,\n StockDividendResponse,\n StockRealTimePrice,\n StockRealTimePriceFull,\n StockListResponse,\n CompaniesPriceListResponse,\n} from '@/types/stock';\n\nexport class StockEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get real-time stock quote\n * @deprecated Use `fmp.quote.getQuote()` instead. This method will be removed in version 0.1.0.\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<APIResponse<StockQuote>> {\n console.warn(\n '⚠️ StockEndpoints.getQuote() is deprecated. Use fmp.quote.getQuote() instead. This method will be removed in version 0.1.0.',\n );\n return this.client.getSingle(`/quote/${symbol}`, 'v3');\n }\n\n /**\n * Get historical stock prices\n * @deprecated Use `fmp.quote.getHistoricalPrice()` instead. This method will be removed in version 0.1.0.\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<APIResponse<HistoricalPriceResponse>> {\n console.warn(\n '⚠️ StockEndpoints.getHistoricalPrice() is deprecated. Use fmp.quote.getHistoricalPrice() instead. This method will be removed in version 0.1.0.',\n );\n const params: DateRangeParams = {};\n if (from) params.from = from;\n if (to) params.to = to;\n\n return this.client.getSingle(`/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({ symbol }: { symbol: string }): Promise<APIResponse<MarketCap>> {\n return this.client.getSingle(`/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({ symbol }: { symbol: string }): Promise<APIResponse<StockSplitResponse>> {\n return this.client.get(`/historical-price-full/stock_split/${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<APIResponse<StockDividendResponse>> {\n return this.client.getSingle(`/historical-price-full/stock_dividend/${symbol}`, 'v3');\n }\n\n /**\n * Get stock real time price\n * @param symbol - The stock symbol to get the real time price for\n * @returns The real time price for the stock\n */\n async getRealTimePrice({\n symbols,\n }: {\n symbols: string[];\n }): Promise<APIResponse<StockRealTimePrice[]>> {\n const url = `stock/real-time-price/${symbols.join(',')}`;\n const result = await this.client.get(url, 'v3');\n if (result.success && result.data && !Array.isArray(result.data)) {\n const data = result.data as\n | StockListResponse<StockRealTimePrice>\n | CompaniesPriceListResponse<StockRealTimePrice>\n | StockRealTimePrice;\n\n // Check for companiesPriceList (when symbols are provided)\n if (\n typeof data === 'object' &&\n data !== null &&\n 'companiesPriceList' in data &&\n Array.isArray(data.companiesPriceList)\n ) {\n const filteredData = data.companiesPriceList.filter(item => item && item.symbol);\n if (filteredData.length > 0) {\n return { ...result, data: filteredData };\n }\n }\n\n // Check for stockList (when no symbols are provided - all stocks)\n if (\n typeof data === 'object' &&\n data !== null &&\n 'stockList' in data &&\n Array.isArray(data.stockList)\n ) {\n const filteredData = data.stockList.filter(item => item && item.symbol);\n if (filteredData.length > 0) {\n return { ...result, data: filteredData };\n }\n }\n\n // fallback: wrap single object in array if it has a symbol\n if ((data as StockRealTimePrice).symbol) {\n return { ...result, data: [data as StockRealTimePrice] };\n }\n\n if (symbols.length === 1) {\n console.warn(`No real-time price data found for symbol: ${symbols[0]}`);\n }\n return { ...result, data: [] };\n }\n const filteredData = (result.data as StockRealTimePrice[]).filter(item => item && item.symbol);\n return { ...result, data: filteredData };\n }\n\n /**\n * Get stock real time price full\n * https://site.financialmodelingprep.com/developer/docs#real-time-full-price-quote\n * @param symbols - The stock symbols to get the real time price for\n * @returns The real time price for the stocks\n */\n async getRealTimePriceForMultipleStocks({\n symbols,\n }: {\n symbols: string[];\n }): Promise<APIResponse<StockRealTimePriceFull[]>> {\n const url = `stock/full/real-time-price/${symbols.join(',')}`;\n const result = await this.client.get(url, 'v3');\n if (result.success && result.data && !Array.isArray(result.data)) {\n const data = result.data as\n | StockListResponse<StockRealTimePriceFull>\n | CompaniesPriceListResponse<StockRealTimePriceFull>\n | StockRealTimePriceFull;\n\n // Check for companiesPriceList (when symbols are provided)\n if (\n typeof data === 'object' &&\n data !== null &&\n 'companiesPriceList' in data &&\n Array.isArray(data.companiesPriceList)\n ) {\n const filteredData = data.companiesPriceList.filter(item => item && item.symbol);\n if (filteredData.length > 0) {\n return { ...result, data: filteredData };\n }\n }\n\n // Check for stockList (when no symbols are provided - all stocks)\n if (\n typeof data === 'object' &&\n data !== null &&\n 'stockList' in data &&\n Array.isArray(data.stockList)\n ) {\n const filteredData = data.stockList.filter(item => item && item.symbol);\n if (filteredData.length > 0) {\n return { ...result, data: filteredData };\n }\n }\n\n if ((data as StockRealTimePriceFull).symbol) {\n return { ...result, data: [data as StockRealTimePriceFull] };\n }\n\n if (symbols.length === 1) {\n console.warn(`No full real-time price data found for symbol: ${symbols[0]}`);\n }\n return { ...result, data: [] };\n }\n const filteredData = (result.data as StockRealTimePriceFull[]).filter(\n item => item && item.symbol,\n );\n return { ...result, data: filteredData };\n }\n}\n","import { APIResponse } from '@/types';\nimport { FMPClient } from '@/client';\nimport {\n FinancialStatementsParams,\n KeyMetrics,\n FinancialRatios,\n EnterpriseValue,\n CashflowGrowth,\n IncomeGrowth,\n BalanceSheetGrowth,\n FinancialGrowth,\n IncomeStatement,\n BalanceSheet,\n CashFlowStatement,\n EarningsSurprises,\n EarningsHistorical,\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<APIResponse<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<APIResponse<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<APIResponse<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<APIResponse<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<APIResponse<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<APIResponse<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<APIResponse<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<APIResponse<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<APIResponse<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<APIResponse<FinancialGrowth[]>> {\n return this.client.get(`/financial-growth/${symbol}?period=${period}&limit=${limit}`, 'v3');\n }\n\n /**\n * Get earnings historical\n * https://site.financialmodelingprep.com/developer/docs#earnings-historical-earnings\n * @param symbol - The stock symbol to get the earnings historical for\n * @param limit - The number of periods to get\n * @returns A list of historical & upcoming earnings announcements for a specific company, including the date, estimated EPS, and actual EPS.\n */\n async getEarningsHistorical({\n symbol,\n limit = 5,\n }: FinancialStatementsParams): Promise<APIResponse<EarningsHistorical[]>> {\n return this.client.get(`/historical/earning_calendar/${symbol}?limit=${limit}`, 'v3');\n }\n\n /**\n * Get earnings surprises\n * https://site.financialmodelingprep.com/developer/docs#earnings-surprises-earnings\n * @param symbol - The stock symbol to get the earnings surprises for\n * @param limit - The number of periods to get\n * @returns A list of earnings announcements for publicly traded companies that were either positive or negative surprises. This endpoint includes the date of the earnings announcement, the estimated EPS, the actual EPS, and the earnings surprise.\n */\n async getEarningsSurprises({\n symbol,\n }: FinancialStatementsParams): Promise<APIResponse<EarningsSurprises[]>> {\n return this.client.get(`/earnings-surprises/${symbol}`, 'v3');\n }\n}\n","// Forex endpoints for FMP API\n\nimport { FMPClient } from '@/client';\nimport { APIResponse, QueryParams, SymbolParams } from '@/types/common';\nimport { HistoricalPriceResponse } from '@/types/quote';\nimport { ForexQuote } from '@/types/forex';\n\nexport class ForexEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get forex quote\n * @deprecated Use `fmp.quote.getQuote()` instead. This method will be removed in version 0.1.0.\n * @param params - Parameters for the forex quote request\n * @returns Forex quote data\n */\n async getQuote(params: SymbolParams): Promise<APIResponse<ForexQuote[]>> {\n console.warn(\n '⚠️ ForexEndpoints.getQuote() is deprecated. Use fmp.quote.getQuote() instead. This method will be removed in version 0.1.0.',\n );\n return this.client.get('/quote', 'v3', params);\n }\n\n /**\n * Get historical forex prices\n * @deprecated Use `fmp.quote.getHistoricalPrice()` instead. This method will be removed in version 0.1.0.\n * @param symbol - The forex 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 Historical forex price data\n */\n async getHistoricalPrice({\n symbol,\n from,\n to,\n }: {\n symbol: string;\n from?: string;\n to?: string;\n }): Promise<APIResponse<HistoricalPriceResponse>> {\n console.warn(\n '⚠️ ForexEndpoints.getHistoricalPrice() is deprecated. Use fmp.quote.getHistoricalPrice() instead. This method will be removed in version 0.1.0.',\n );\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","// Cryptocurrency endpoints for FMP API\n\nimport { FMPClient } from '@/client';\nimport { APIResponse, DateRangeParams } from '@/types/common';\nimport { HistoricalPriceResponse } from '@/types/quote';\nimport { CryptoQuote } from '@/types/crypto';\n\nexport class CryptoEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get crypto quote\n * @deprecated Use `fmp.quote.getQuote()` instead. This method will be removed in version 0.1.0.\n * @param symbol - The crypto symbol to get the quote for\n * @returns Crypto quote data\n */\n async getQuote({ symbol }: { symbol: string }): Promise<APIResponse<CryptoQuote | null>> {\n console.warn(\n '⚠️ CryptoEndpoints.getQuote() is deprecated. Use fmp.quote.getQuote() instead. This method will be removed in version 0.1.0.',\n );\n return this.client.getSingle(`/quote/${symbol}`, 'v3');\n }\n\n /**\n * Get historical crypto prices\n * @deprecated Use `fmp.quote.getHistoricalPrice()` instead. This method will be removed in version 0.1.0.\n * @param symbol - The crypto 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 Provides daily price data for all cryptocurrencies that are traded on exchanges around the world.\n */\n async getHistoricalPrice({\n symbol,\n from,\n to,\n }: {\n symbol: string;\n from?: string;\n to?: string;\n }): Promise<APIResponse<HistoricalPriceResponse>> {\n console.warn(\n '⚠️ CryptoEndpoints.getHistoricalPrice() is deprecated. Use fmp.quote.getHistoricalPrice() instead. This method will be removed in version 0.1.0.',\n );\n const params: DateRangeParams = {};\n if (from) params.from = from;\n if (to) params.to = to;\n\n return this.client.getSingle(`/historical-price-full/${symbol}`, 'v3', params);\n }\n}\n","// ETF endpoints for FMP API\n\nimport { FMPClient } from '@/client';\nimport { APIResponse, SymbolParams } from '@/types/common';\nimport {\n ETFProfile,\n ETFHolding,\n ETFHoldingDates,\n ETFHolder,\n ETFStockExposure,\n ETFWeighting,\n ETFCountryWeighting,\n} from '@/types/etf';\n\nexport class ETFEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get ETF holding dates\n * https://site.financialmodelingprep.com/developer/docs#etf-holding-dates-etf-holdings\n * @param symbol - The symbol of the ETF to get the holding dates for\n * @returns The FMP ETF Holding Dates endpoint provides a list of the dates on which ETF holdings are updated. For example, an investor may want to know when an ETF's holdings are updated in order to make sure that they are still aligned with their investment goals.\n */\n async getHoldingDates({ symbol }: SymbolParams): Promise<APIResponse<ETFHoldingDates[]>> {\n const params: { symbol?: string } = {};\n if (symbol) params.symbol = symbol;\n return this.client.get('/etf-holdings/portfolio-date', 'v4', params);\n }\n\n /**\n * Get ETF holdings\n * https://site.financialmodelingprep.com/developer/docs#etf-holdings-etf-holdings\n * @param symbol - The symbol of the ETF to get the holdings for\n * @param date - The date to get the holdings for\n * @returns The FMP ETF Holdings endpoint provides a list of all the institutional investors that own shares of an ETF. For example, an investor may want to know which ETF has the highest exposure to a particular industry or sector.\n */\n async getHoldings({\n symbol,\n date,\n }: {\n symbol: string;\n date: string;\n }): Promise<APIResponse<ETFHolding[]>> {\n const params: { symbol?: string; date?: string } = {};\n if (symbol) params.symbol = symbol;\n if (date) params.date = date;\n return this.client.get('/etf-holdings', 'v4', params);\n }\n\n /**\n * Get ETF holder\n * https://site.financialmodelingprep.com/developer/docs#etf-holder-etf-holdings\n * @param symbol - The symbol of the ETF to get the holder for\n * @returns This endpoint returns all stocks held by a specific ETF. Assets, share number, and weight are among the fields returned. For example you can get components of SPY, VOO and more.\n */\n async getHolder({ symbol }: SymbolParams): Promise<APIResponse<ETFHolder[]>> {\n return this.client.get(`/etf-holder/${symbol}`, 'v3');\n }\n\n /**\n * Get ETF profile\n * https://site.financialmodelingprep.com/developer/docs#etf-information-etf-holdings\n * @param symbol - The symbol of the ETF to get the profile for\n * @returns The FMP ETF Information endpoint provides basic information about an ETF, such as its ticker symbol, name, expense ratio, and asset under management. For example, an investor may want to compare the expense ratios of different ETFs to find the one that is most cost-effective.\n */\n async getProfile({ symbol }: SymbolParams): Promise<APIResponse<ETFProfile>> {\n const params: { symbol?: string } = {};\n if (symbol) params.symbol = symbol;\n return this.client.getSingle('/etf-info', 'v4', params);\n }\n\n /**\n * Get ETF sector weighting\n * https://site.financialmodelingprep.com/developer/docs#etf-sector-weighting-etf-holdings\n * @param symbol - The symbol of the ETF to get the sector exposure for\n * @returns The FMP ETF Sector Weighting endpoint provides a breakdown of the percentage of an ETF's assets that are invested in each sector. For example, an investor may want to invest in an ETF that has a high exposure to the technology sector if they believe that the technology sector is poised for growth.\n */\n async getSectorWeighting({ symbol }: SymbolParams): Promise<APIResponse<ETFWeighting[]>> {\n return this.client.get(`/etf-sector-weightings/${symbol}`, 'v3');\n }\n\n /**\n * Get ETF country weighting\n * https://site.financialmodelingprep.com/developer/docs#etf-country-weighting-etf-holdings\n * @param symbol - The symbol of the ETF to get the country weighting for\n * @returns The FMP ETF Country Weighting endpoint provides a breakdown of the percentage of an ETF's assets that are invested in each country. For example, an investor may want to invest in an ETF that has a high exposure to China if they believe that the Chinese economy is poised for growth.\n */\n async getCountryWeighting({ symbol }: SymbolParams): Promise<APIResponse<ETFCountryWeighting[]>> {\n return this.client.get(`/etf-country-weightings/${symbol}`, 'v3');\n }\n\n /**\n * Get ETF Stock exposure\n * https://site.financialmodelingprep.com/developer/docs#etf-sector-exposure-etf-holdings\n * @param symbol - The symbol of the ETF to get the stock exposure for\n * @returns This endpoint returns asset exposure from all ETFs that have it in their holdings. It has properties like market value, share number or weight percentage. It can be useful for looking up stock you like to check what ETF has it on their portfolio.\n */\n async getStockExposure({ symbol }: SymbolParams): Promise<APIResponse<ETFStockExposure[]>> {\n return this.client.get(`/etf-stock-exposure/${symbol}`, 'v3');\n }\n}\n","// Mutual fund endpoints for FMP API\n\nimport { FMPClient } from '@/client';\nimport { APIResponse, SymbolParams } from '@/types/common';\nimport { MutualFundQuote, MutualFundHolding } from '@/types/mutual-fund';\n\nexport class MutualFundEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get mutual fund quote\n * @deprecated Use `fmp.quote.getQuote()` instead. This method will be removed in a future release.\n * @param params - Parameters for the mutual fund quote request\n * @returns Mutual fund quote data\n */\n async getQuote(params: SymbolParams): Promise<APIResponse<MutualFundQuote[]>> {\n return this.client.get('/quote', 'v3', params);\n }\n\n /**\n * Get mutual fund holders\n * https://site.financialmodelingprep.com/developer/docs#mutual-fund-holder-mutual-funds-holdings\n * @param symbol - The symbol of the mutual fund to get the holders for\n * @returns Mutual fund holders data\n */\n async getHolders({ symbol }: SymbolParams): Promise<APIResponse<MutualFundHolding[]>> {\n return this.client.get(`/mutual-fund-holder/${symbol}`, 'v3');\n }\n}\n","// Economic endpoints for FMP API\n\nimport { FMPClient } from '@/client';\nimport { APIResponse, DateRangeParams } from '@/types/common';\nimport { TreasuryRate, EconomicIndicator, EconomicIndicatorParams } from '@/types/economic';\n\nexport class EconomicEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get treasury rates\n * https://site.financialmodelingprep.com/developer/docs#treasury-rates-economics-data\n * @param from - The start date to get the treasury rates for\n * @param to - The end date to get the treasury rates for\n * @returns Treasury rates data\n */\n async getTreasuryRates(params: DateRangeParams): Promise<APIResponse<TreasuryRate[]>> {\n const { from, to } = params;\n\n const queryParams: DateRangeParams = {};\n if (from) queryParams.from = from;\n if (to) queryParams.to = to;\n return this.client.get('/treasury', 'v4', queryParams);\n }\n\n /**\n * Get economic indicators\n * https://site.financialmodelingprep.com/developer/docs#economic-indicators-economics-data\n * @param name - GDP, realGDP, nominalPotentialGDP, realGDPPerCapita, federalFunds, CPI, inflationRate, inflation, retailSales, consumerSentiment, durableGoods, unemploymentRate, totalNonfarmPayroll, initialClaims, industrialProductionTotalIndex, newPrivatelyOwnedHousingUnitsStartedTotalUnits, totalVehicleSales, retailMoneyFunds, smoothedUSRecessionProbabilities, 3MonthOr90DayRatesAndYieldsCertificatesOfDeposit, commercialBankInterestRateOnCreditCardPlansAllAccounts, 30YearFixedRateMortgageAverage, 15YearFixedRateMortgageAverage\n * @param from - The start date to get the economic indicators for\n * @param to - The end date to get the economic indicators for\n * @returns Provides real-time and historical economic data for a variety of economic indicators, such as GDP, unemployment, and inflation.\n */\n async getEconomicIndicators(\n params: EconomicIndicatorParams,\n ): Promise<APIResponse<EconomicIndicator[]>> {\n const { name, from, to } = params;\n\n const queryParams: EconomicIndicatorParams = { name };\n if (from) queryParams.from = from;\n if (to) queryParams.to = to;\n\n return this.client.get(`/economic`, 'v4', queryParams);\n }\n}\n","// Market endpoints for FMP API\n\nimport { FMPClient } from '@/client';\nimport { APIResponse } from '@/types/common';\nimport {\n MarketHours,\n MarketPerformance,\n MarketSectorPerformance,\n MarketIndex,\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', 'v3');\n }\n\n /**\n * Get market performance\n */\n async getMarketPerformance(): Promise<APIResponse<MarketPerformance[]>> {\n return this.client.get('/market-performance', 'v3');\n }\n\n /**\n * Get top gainers\n * https://site.financialmodelingprep.com/developer/docs#market-biggest-gainers-market-overview\n * @returns The FMP Market Biggest Gainers endpoint provides a list of the stocks that have gained the most value on a given day. This information can be used by investors to identify stocks that are momentum and to potential investment opportunities.\n */\n async getGainers(): Promise<APIResponse<MarketPerformance[]>> {\n return this.client.get('/stock_market/gainers', 'v3');\n }\n\n /**\n * Get top losers\n * https://site.financialmodelingprep.com/developer/docs#market-biggest-losers-market-overview\n * @returns The FMP Market Biggest Losers endpoint provides a list of the stocks that have lost the most value on a given day. This information can be used by investors to identify stocks that are underperforming and to potential trading opportunities.\n */\n async getLosers(): Promise<APIResponse<MarketPerformance[]>> {\n return this.client.get('/stock_market/losers', 'v3');\n }\n\n /**\n * Get most active stocks\n */\n async getMostActive(): Promise<APIResponse<MarketPerformance[]>> {\n return this.client.get('/stock_market/actives', 'v3');\n }\n\n /**\n * Get sector performance\n * https://site.financialmodelingprep.com/developer/docs#sector-performance-market-overview\n * @returns The FMP Sector Performance endpoint provides the performance of each sector of the stock market over a specified period of time. This information can be used by investors to identify sectors that are outperforming or underperforming the market.\n */\n async getSectorPerformance(): Promise<APIResponse<MarketSectorPerformance[]>> {\n return this.client.get('/sector-performance', 'v3');\n }\n\n /**\n * Get market indices\n * https://site.financialmodelingprep.com/developer/docs#market-index-market-overview\n * @returns The FMP Market Index endpoint provides a list of all the major stock market indices, such as the S&P 500, the Dow Jones Industrial Average, and the Nasdaq Composite Index. This information can be used by investors to track the performance of the overall stock market and to identify sectors and industries that are outperforming or underperforming the market.\n */\n async getMarketIndex(): Promise<APIResponse<MarketIndex[]>> {\n return this.client.get('/quotes/index', 'v3');\n }\n}\n","import { FMPClient } from '@/client';\nimport { APIResponse } 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<APIResponse<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<APIResponse<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<APIResponse<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<APIResponse<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<APIResponse<AvailableIndexesList[]>> {\n return this.client.get('/symbol/available-indexes');\n }\n}\n","import { APIResponse, DateRangeParams } from '@/types';\nimport { FMPClient } from '@/client';\nimport {\n EarningsCalendar,\n DividendsCalendar,\n EconomicsCalendar,\n IPOCalendar,\n SplitsCalendar,\n EarningsConfirmed,\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 APIResponse<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 earnings confirmed\n * https://site.financialmodelingprep.com/developer/docs#earnings-confirmed-earnings\n * @param from - The start date to get the earnings confirmed for\n * @param to - The end date to get the earnings confirmed for\n * @returns The earnings confirmed\n */\n async getEarningsConfirmed({ from, to }: DateRangeParams = {}): Promise<\n APIResponse<EarningsConfirmed[]>\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-confirmed', 'v4', 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 APIResponse<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 APIResponse<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<APIResponse<IPOCalendar[]>> {\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 APIResponse<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 { APIResponse } from '@/types';\nimport { FMPClient } from '@/client';\nimport {\n CompanyNotes,\n CompanyProfile,\n CompanyTranscriptData,\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({ symbol }: { symbol: string }): Promise<APIResponse<CompanyProfile>> {\n return this.client.getSingle(`/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<APIResponse<ExecutiveCompensation[]>> {\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({ symbol }: { symbol: string }): Promise<APIResponse<CompanyNotes[]>> {\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<APIResponse<HistoricalEmployeeCount[]>> {\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({ symbol }: { symbol: string }): Promise<APIResponse<SharesFloat>> {\n const params: { symbol: string } = { symbol };\n\n return this.client.getSingle(`/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<APIResponse<HistoricalSharesFloat[]>> {\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<APIResponse<EarningsCallTranscript[]>> {\n const params: { year: number; quarter: number } = { year, quarter };\n return this.client.getSingle(`/earning_call_transcript/${symbol}`, 'v3', params);\n }\n\n /**\n * Get company transcript dates\n * https://site.financialmodelingprep.com/developer/docs#transcript-dates-earnings-transcripts\n * @param symbol - The stock symbol to get the transcript data for\n * @returns The FMP Company Transcript Data endpoint provides the transcript data for a company's earnings call.\n */\n async getCompanyTranscriptData({\n symbol,\n }: {\n symbol: string;\n }): Promise<APIResponse<CompanyTranscriptData[]>> {\n const params: { symbol: string } = { symbol };\n return this.client.getSingle(`/earning_call_transcript`, 'v4', params);\n }\n}\n","// Unified quote endpoints for FMP API - handles stocks, crypto, forex, commodities, and ETFs\n\nimport { FMPClient } from '@/client';\nimport { APIResponse, DateRangeParams } from '@/types/common';\nimport {\n Quote,\n QuoteParams,\n HistoricalPriceParams,\n HistoricalPriceResponse,\n HistoricalPriceData,\n IntradayParams,\n} from '@/types/quote';\n\nexport class QuoteEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get quote for any asset type (stock, crypto, forex, commodity, ETF)\n * @param params - Parameters for the quote request\n * @returns Quote data for the specified asset\n */\n async getQuote(params: QuoteParams): Promise<APIResponse<Quote>> {\n const { symbol } = params;\n\n // All asset types use the same /quote/{symbol} endpoint\n return this.client.getSingle(`/quote/${symbol}`, 'v3');\n }\n\n /**\n * Get historical prices for any asset type\n * @param params - Parameters for the historical price request\n * @returns Historical price data for the specified asset\n */\n async getHistoricalPrice(\n params: HistoricalPriceParams,\n ): Promise<APIResponse<HistoricalPriceResponse>> {\n const { symbol, from, to } = params;\n\n const queryParams: DateRangeParams = {};\n if (from) queryParams.from = from;\n if (to) queryParams.to = to;\n\n return this.client.getSingle(`/historical-price-full/${symbol}`, 'v3', queryParams);\n }\n\n /**\n * Get multiple quotes for any asset type\n * @param symbols - Array of symbols to get quotes for\n * @returns Array of quote data\n */\n async getQuotes(symbols: string[]): Promise<APIResponse<Quote[]>> {\n const symbolsParam = symbols.join(',');\n return this.client.get(`/quote/${symbolsParam}`, 'v3');\n }\n\n /**\n * Get intraday data for any asset type\n * @param params - Parameters for the intraday request\n * @returns Intraday price data for the specified asset\n */\n async getIntraday(params: IntradayParams): Promise<APIResponse<HistoricalPriceData[]>> {\n const { symbol, interval, from, to } = params;\n\n const queryParams: DateRangeParams = {};\n if (from) queryParams.from = from;\n if (to) queryParams.to = to;\n\n return this.client.get(`/historical-chart/${interval}/${symbol}`, 'v3', queryParams);\n }\n}\n","// Senate and House trading endpoints for FMP API\n\nimport { FMPClient } from '@/client';\nimport { APIResponse } from '@/types/common';\nimport {\n HouseTradingResponse,\n SenateHouseTradingParams,\n SenateHouseTradingRSSFeedParams,\n SenateHouseTradingByNameParams,\n SenateTradingResponse,\n SenateHouseTradingByNameResponse,\n} from '@/types/senate-house';\n\nexport class SenateHouseEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get senate trading data only\n * https://site.financialmodelingprep.com/developer/docs#senate-trading\n * @param symbol - The stock symbol to get the senate trading data for\n * @returns Senate trading data only\n */\n async getSenateTrading(\n params: SenateHouseTradingParams,\n ): Promise<APIResponse<SenateTradingResponse[]>> {\n const { symbol } = params;\n return this.client.get(`/senate-trading`, 'v4', { symbol });\n }\n\n /** Get senate trading RSS feed\n * https://site.financialmodelingprep.com/developer/docs#senate-trading-rss-feed-senate\n * @param page - The page number to get\n * @returns Senate trading RSS feed\n */\n async getSenateTradingRSSFeed(\n params: SenateHouseTradingRSSFeedParams,\n ): Promise<APIResponse<SenateTradingResponse[]>> {\n const { page } = params;\n return this.client.get('/senate-trading-rss-feed', 'v4', { page });\n }\n\n /** Get Senate trades by name\n * https://site.financialmodelingprep.com/developer/docs/stable#senate-trading-by-name\n * @param name - The name of the senator to get the trades for\n * @returns Senate trades by name\n */\n async getSenateTradingByName(\n params: SenateHouseTradingByNameParams,\n ): Promise<APIResponse<SenateHouseTradingByNameResponse[]>> {\n const { name } = params;\n return this.client.get('/senate-trades-by-name', 'stable', { name });\n }\n\n /**\n * Get house trading data only\n * https://site.financialmodelingprep.com/developer/docs#house-disclosure\n * @param symbol - The stock symbol to get the house trading data for\n * @returns House trading data only\n */\n async getHouseTrading(\n params: SenateHouseTradingParams,\n ): Promise<APIResponse<HouseTradingResponse[]>> {\n const { symbol } = params;\n\n return this.client.get('/senate-disclosure', 'v4', { symbol });\n }\n\n /** Get house trading RSS feed\n * https://site.financialmodelingprep.com/developer/docs#house-disclosure-rss-feed-senate\n * @param page - The page number to get\n * @returns House trading RSS feed\n */\n async getHouseTradingRSSFeed(\n params: SenateHouseTradingRSSFeedParams,\n ): Promise<APIResponse<HouseTradingResponse[]>> {\n const { page } = params;\n return this.client.get('/senate-disclosure-rss-feed', 'v4', { page });\n }\n\n /** Get house trading by name\n * https://site.financialmodelingprep.com/developer/docs/stable#house-trading-by-name\n * @param name - The name of the representative to get the trades for\n * @returns House trading by name\n */\n async getHouseTradingByName(\n params: SenateHouseTradingByNameParams,\n ): Promise<APIResponse<SenateHouseTradingByNameResponse[]>> {\n const { name } = params;\n return this.client.get('/house-trades-by-name', 'stable', { name });\n }\n}\n","// Institutional trading endpoints for FMP API\n\nimport { FMPClient } from '@/client';\nimport { APIResponse } from '@/types/common';\nimport {\n Form13FParams,\n Form13FDatesParams,\n InstitutionalHolderParams,\n Form13FResponse,\n InstitutionalHolderResponse,\n} from '@/types/institutional';\n\nexport class InstitutionalEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get Form 13F institutional stock ownership data\n * https://site.financialmodelingprep.com/developer/docs#form-13f-13f---institutional-stock-ownership\n * @param symbol - The stock symbol to get the Form 13F data for\n * @param date - The date to get the Form 13F data for (optional)\n * @returns Form 13F institutional stock ownership data\n */\n async getForm13F(params: Form13FParams): Promise<APIResponse<Form13FResponse[]>> {\n const { cik, date } = params;\n const queryParams: Record<string, any> = {};\n\n if (date) queryParams.date = date;\n\n return this.client.get(`/form-thirteen/${cik}`, 'v3', queryParams);\n }\n\n /**\n * Get Form 13F dates for institutional stock ownership\n * https://site.financialmodelingprep.com/developer/docs#form-13f-dates-13f---institutional-stock-ownership\n * @param symbol - The stock symbol to get the Form 13F dates for\n * @returns Form 13F dates for institutional stock ownership\n */\n async getForm13FDates(params: Form13FDatesParams): Promise<APIResponse<string[]>> {\n const { cik } = params;\n return this.client.get(`/form-thirteen-date/${cik}`, 'v3');\n }\n\n /**\n * Get institutional holders data\n * https://site.financialmodelingprep.com/developer/docs#institutional-holder-13f---institutional-stock-ownership\n * @param symbol - The stock symbol to get the institutional holders for\n * @returns Institutional holders data\n */\n async getInstitutionalHolders(\n params: InstitutionalHolderParams,\n ): Promise<APIResponse<InstitutionalHolderResponse[]>> {\n const { symbol } = params;\n\n return this.client.get(`/institutional-holder/${symbol}`, 'v3');\n }\n}\n","import { FMPClient } from '@/client';\nimport { APIResponse } from '@/types/common';\nimport {\n InsiderTradingRSSResponse,\n InsiderTradingSearchResponse,\n TransactionTypesResponse,\n InsidersBySymbolResponse,\n InsiderTradeStatisticsResponse,\n CikMapperResponse,\n CikMapperBySymbolResponse,\n BeneficialOwnershipResponse,\n FailToDeliverResponse,\n InsiderTradingRSSParams,\n InsiderTradingSearchParams,\n InsidersBySymbolParams,\n InsiderTradeStatisticsParams,\n CikMapperParams,\n CikMapperByNameParams,\n CikMapperBySymbolParams,\n BeneficialOwnershipParams,\n FailToDeliverParams,\n TransactionType,\n} from '@/types/insider';\n\nexport class InsiderEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get insider trading RSS feed\n * https://site.financialmodelingprep.com/developer/docs#insider-trades-rss-insider-trading\n * @param params - Parameters for the RSS feed request\n * @returns An RSS feed of insider trades, updated in real time\n */\n async getInsiderTradingRSS({\n page,\n }: InsiderTradingRSSParams): Promise<APIResponse<InsiderTradingRSSResponse[]>> {\n return this.client.get(`/insider-trading-rss-feed`, 'v4', { page });\n }\n\n /**\n * Search for insider trades\n * https://site.financialmodelingprep.com/developer/docs#insider-trades-search-insider-trading\n * @param params - Parameters for the insider trading search\n * @returns A list of insider trades filtered by the provided parameters\n */\n async searchInsiderTrading({\n symbol,\n reportingCik,\n companyCik,\n transactionType,\n page,\n }: InsiderTradingSearchParams): Promise<APIResponse<InsiderTradingSearchResponse[]>> {\n const params: Record<string, string | number> = { page };\n\n if (symbol) params.symbol = symbol;\n if (reportingCik) params.reportingCik = reportingCik;\n if (companyCik) params.companyCik = companyCik;\n if (transactionType) params.transactionType = transactionType;\n\n return this.client.get(`/insider-trading`, 'v4', params);\n }\n\n /**\n * Get transaction types\n * https://site.financialmodelingprep.com/developer/docs#transaction-types-insider-trading\n * @returns A list of all insider transaction types\n */\n async getTransactionTypes(): Promise<APIResponse<TransactionTypesResponse>> {\n return this.client.get(`/insider-trading-transaction-type`, 'v4');\n }\n\n /**\n * Get insiders by symbol\n * https://site.financialmodelingprep.com/developer/docs#insiders-by-symbol-insider-trading\n * @param params - Parameters for the insiders request\n * @returns A list of insiders for a specific company\n */\n async getInsidersBySymbol({\n symbol,\n }: InsidersBySymbolParams): Promise<APIResponse<InsidersBySymbolResponse[]>> {\n return this.client.get(`/insider-roaster`, 'v4', { symbol });\n }\n\n /**\n * Get insider trade statistics\n * https://site.financialmodelingprep.com/developer/docs#insider-trade-statistics-insider-trading\n * @param params - Parameters for the statistics request\n * @returns Statistics on insider trading activity for a specific company\n */\n async getInsiderTradeStatistics({\n symbol,\n }: InsiderTradeStatisticsParams): Promise<APIResponse<InsiderTradeStatisticsResponse[]>> {\n return this.client.get(`/insider-roaster-statistic`, 'v4', { symbol });\n }\n\n /**\n * Get CIK mapper\n * https://site.financialmodelingprep.com/developer/docs#cik-mapper-insider-trading\n * @param params - Parameters for the CIK mapper request\n * @returns A list of CIK numbers and corresponding company names\n */\n async getCikMapper({ page }: CikMapperParams): Promise<APIResponse<CikMapperResponse[]>> {\n return this.client.get(`/mapper-cik-name`, 'v4', { page });\n }\n\n /**\n * Get CIK mapper by name\n * https://site.financialmodelingprep.com/developer/docs#cik-mapper-by-name-insider-trading\n * @param params - Parameters for the CIK mapper by name request\n * @returns A list of CIK numbers and corresponding names matching the search term\n */\n async getCikMapperByName({\n name,\n page = 0,\n }: CikMapperByNameParams): Promise<APIResponse<CikMapperResponse[]>> {\n return this.client.get(`/mapper-cik-name`, 'v4', { name, page });\n }\n\n /**\n * Get CIK mapper by symbol\n * https://site.financialmodelingprep.com/developer/docs#cik-mapper-company-insider-trading\n * @param params - Parameters for the CIK mapper by symbol request\n * @returns CIK number and corresponding company name for a specific symbol\n */\n async getCikMapperBySymbol({\n symbol,\n }: CikMapperBySymbolParams): Promise<APIResponse<CikMapperBySymbolResponse>> {\n return this.client.getSingle(`/mapper-cik-company/${symbol}`, 'v4');\n }\n\n /**\n * Get beneficial ownership acquisitions\n * https://site.financialmodelingprep.com/developer/docs#acquisition-of-beneficial-ownership\n * @param params - Parameters for the beneficial ownership request\n * @returns A list of acquisitions of beneficial ownership for a specific company\n */\n async getBeneficialOwnership({\n symbol,\n }: BeneficialOwnershipParams): Promise<APIResponse<BeneficialOwnershipResponse[]>> {\n return this.client.get(`/insider/ownership/acquisition_of_beneficial_ownership`, 'v4', {\n symbol,\n });\n }\n\n /**\n * Get fail to deliver data\n * https://site.financialmodelingprep.com/developer/docs#fail-to-deliver\n * @param params - Parameters for the fail to deliver request\n * @returns A list of fail to deliver data for a specific company\n */\n async getFailToDeliver({\n symbol,\n page = 0,\n }: FailToDeliverParams): Promise<APIResponse<FailToDeliverResponse[]>> {\n return this.client.get(`/fail_to_deliver`, 'v4', { symbol, page });\n }\n\n /**\n * Get all insider trades for a symbol (convenience method)\n * @param symbol - The stock symbol to get insider trades for\n * @param page - Page number for pagination (default: 0)\n * @returns A list of insider trades for the specified symbol\n */\n async getInsiderTradesBySymbol(\n symbol: string,\n page: number = 0,\n ): Promise<APIResponse<InsiderTradingSearchResponse[]>> {\n return this.searchInsiderTrading({ symbol, page });\n }\n\n /**\n * Get insider trades by transaction type (convenience method)\n * @param transactionType - The transaction type to filter by\n * @param page - Page number for pagination (default: 0)\n * @returns A list of insider trades filtered by transaction type\n */\n async getInsiderTradesByType(\n transactionType: TransactionType | string,\n page: number = 0,\n ): Promise<APIResponse<InsiderTradingSearchResponse[]>> {\n return this.searchInsiderTrading({ transactionType, page });\n }\n\n /**\n * Get insider trades by reporting CIK (convenience method)\n * @param reportingCik - The reporting CIK to filter by\n * @param page - Page number for pagination (default: 0)\n * @returns A list of insider trades filtered by reporting CIK\n */\n async getInsiderTradesByReportingCik(\n reportingCik: string,\n page: number = 0,\n ): Promise<APIResponse<InsiderTradingSearchResponse[]>> {\n return this.searchInsiderTrading({ reportingCik, page });\n }\n\n /**\n * Get insider trades by company CIK (convenience method)\n * @param companyCik - The company CIK to filter by\n * @param page - Page number for pagination (default: 0)\n * @returns A list of insider trades filtered by company CIK\n */\n async getInsiderTradesByCompanyCik(\n companyCik: string,\n page: number = 0,\n ): Promise<APIResponse<InsiderTradingSearchResponse[]>> {\n return this.searchInsiderTrading({ companyCik, page });\n }\n}\n","import { FMPClient } from '@/client';\nimport { APIResponse } from '@/types/common';\nimport {\n RSSFeedItem,\n RSSFeedV3Item,\n RSSFeed8KItem,\n SECFiling,\n IndustryClassification,\n IndustryClassificationCode,\n RSSFeedParams,\n RSSFeedV3Params,\n RSSFeed8KParams,\n SECFilingsParams,\n IndividualIndustryClassificationParams,\n IndustryClassificationCodesParams,\n RSSFeedAllItem,\n} from '@/types/sec';\n\nexport class SECEndpoints {\n constructor(private client: FMPClient) {}\n\n /**\n * Get RSS feed of SEC filings\n * https://site.financialmodelingprep.com/developer/docs#rss-feed-securities-and-exchange-commission-(s.e.c)\n * @param params - RSS feed parameters\n * @returns A real-time feed of SEC filings from publicly traded companies, including the filing type, link to SEC page, and direct link to the filing. This endpoint can be used to stay up-to-date on the latest SEC filings for all companies or for a specific set of companies.\n */\n async getRSSFeed(params?: RSSFeedParams): Promise<APIResponse<RSSFeedItem[]>> {\n return this.client.get('/rss_feed', 'v4', params);\n }\n\n /**\n * Get RSS feed of all SEC filings\n * https://site.financialmodelingprep.com/developer/docs#rss-feed-all-securities-and-exchange-commission-(s.e.c)\n * @param params - RSS feed all parameters\n * @returns A real-time feed of all SEC filings from publicly traded companies in the latest RSS feed format. This endpoint provides a comprehensive overview of all SEC filings, including the filing type, link to SEC page, and direct link to the filing.\n */\n async getRSSFeedAll(params?: RSSFeedV3Params): Promise<APIResponse<RSSFeedAllItem[]>> {\n return this.client.get('/rss_feed_all', 'v4', params);\n }\n\n /**\n * Get RSS feed V3 of SEC filings\n * https://site.financialmodelingprep.com/developer/docs#rss-feed-v3-securities-and-exchange-commission-(s.e.c)\n * @param params - RSS feed V3 parameters\n * @returns A real-time feed of SEC filings from publicly traded companies in the latest RSS feed format (V3)\n */\n async getRSSFeedV3(params?: RSSFeedV3Params): Promise<APIResponse<RSSFeedV3Item[]>> {\n return this.client.get('/rss_feed', 'v3', params);\n }\n\n /**\n * Get RSS feed of 8-K SEC filings\n * https://site.financialmodelingprep.com/developer/docs#rss-feed-8-k-securities-and-exchange-commission-(s.e.c)\n * @param params - RSS feed 8-K parameters\n * @returns A real-time feed of 8-K SEC filings from publicly traded companies\n */\n async getRSSFeed8K(params?: RSSFeed8KParams): Promise<APIResponse<RSSFeed8KItem[]>> {\n return this.client.get('/rss_feed_8k', 'v4', params);\n }\n\n /**\n * Get SEC filings for a specific company\n * https://site.financialmodelingprep.com/developer/docs#sec-filings-securities-and-exchange-commission-(s.e.c)\n * @param symbol - The stock symbol to get SEC filings for\n * @param params - SEC filings parameters\n * @returns Access direct links to SEC filings, including the filing type, link to the SEC page, and direct link to the specific filing\n */\n async getSECFilings({\n symbol,\n params,\n }: {\n symbol: string;\n params?: SECFilingsParams;\n }): Promise<APIResponse<SECFiling[]>> {\n return this.client.get(`/sec_filings/${symbol}`, 'v3', params);\n }\n\n /**\n * Get individual industry classification\n * https://site.financialmodelingprep.com/developer/docs#individual-industry-classification-standard-industrial-classification\n * @param params - Industry classification parameters\n * @returns Identify the industry in which a particular company operates, based on the Standard Industrial Classification (SIC) system\n */\n async getIndividualIndustryClassification(\n params: IndividualIndustryClassificationParams,\n ): Promise<APIResponse<IndustryClassification>> {\n return this.client.getSingle('/standard_industrial_classification', 'v4', params);\n }\n\n /**\n * Get all industry classifications\n * https://site.financialmodelingprep.com/developer/docs#all-industry-classification-standard-industrial-classification\n * @returns Get a comprehensive overview of all industries, classified according to the SIC system\n */\n async getAllIndustryClassifications(): Promise<APIResponse<IndustryClassification[]>> {\n return this.client.get('/standard_industrial_classification/all', 'v4');\n }\n\n /**\n * Get industry classification codes\n * https://site.financialmodelingprep.com/developer/docs#industry-classification-codes-standard-industrial-classification\n * @param params - Industry classification codes parameters\n * @returns Learn more about the SIC system and identify the SIC code for a particular industry\n */\n async getIndustryClassificationCodes(\n params: IndustryClassificationCodesParams,\n ): Promise<APIResponse<IndustryClassificationCode[]>> {\n return this.client.get('/standard_industrial_classification_list', 'v4', 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 { EconomicEndpoints } from './endpoints/economic';\nimport { MarketEndpoints } from './endpoints/market';\nimport { ListEndpoints } from './endpoints/list';\nimport { CalendarEndpoints } from './endpoints/calendar';\nimport { CompanyEndpoints } from './endpoints/company';\nimport { QuoteEndpoints } from './endpoints/quote';\nimport { SenateHouseEndpoints } from './endpoints/senate-house';\nimport { InstitutionalEndpoints } from './endpoints/institutional';\nimport { InsiderEndpoints } from './endpoints/insider';\nimport { SECEndpoints } from './endpoints/sec';\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 economic: EconomicEndpoints;\n public readonly market: MarketEndpoints;\n public readonly list: ListEndpoints;\n public readonly calendar: CalendarEndpoints;\n public readonly company: CompanyEndpoints;\n public readonly quote: QuoteEndpoints;\n public readonly senateHouse: SenateHouseEndpoints;\n public readonly institutional: InstitutionalEndpoints;\n public readonly insider: InsiderEndpoints;\n public readonly sec: SECEndpoints;\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.crypto = new CryptoEndpoints(client);\n this.etf = new ETFEndpoints(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 this.quote = new QuoteEndpoints(client);\n this.senateHouse = new SenateHouseEndpoints(client);\n this.institutional = new InstitutionalEndpoints(client);\n this.insider = new InsiderEndpoints(client);\n this.sec = new SECEndpoints(client);\n\n this.forex = new ForexEndpoints(client);\n this.economic = new EconomicEndpoints(client);\n this.mutualFund = new MutualFundEndpoints(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 - consistent structure with nullable fields\nexport interface APIResponse<T = unknown> {\n success: boolean;\n data: T | null;\n error: string | null;\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// Type-safe query parameters\nexport interface QueryParams {\n [key: string]: string | number | boolean | undefined;\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","// Insider Trading Types\n\n// RSS Feed Response\nexport interface InsiderTradingRSSResponse {\n title: string;\n fillingDate: string;\n symbol: string;\n link: string;\n reportingCik: string;\n issuerCik: string;\n}\n\n// Insider Trading Search Response\nexport interface InsiderTradingSearchResponse {\n symbol: string;\n filingDate: string;\n transactionDate: string;\n reportingCik: string;\n transactionType: string;\n securitiesOwned: number;\n securitiesTransacted: number;\n companyCik: string;\n reportingName: string;\n typeOfOwner: string;\n link: string;\n securityName: string;\n price: number;\n formType: string;\n acquistionOrDisposition: string;\n}\n\n// Transaction Types Response\nexport type TransactionTypesResponse = string[];\n\n// Insiders By Symbol Response\nexport interface InsidersBySymbolResponse {\n typeOfOwner: string;\n transactionDate: string;\n owner: string;\n}\n\n// Insider Trade Statistics Response\nexport interface InsiderTradeStatisticsResponse {\n symbol: string;\n cik: string;\n year: number;\n quarter: number;\n purchases: number;\n sales: number;\n buySellRatio: number;\n totalBought: number;\n totalSold: number;\n averageBought: number;\n averageSold: number;\n pPurchases: number;\n sSales: number;\n}\n\n// CIK Mapper Response\nexport interface CikMapperResponse {\n reportingCik: string;\n reportingName: string;\n}\n\n// CIK Mapper By Symbol Response\nexport interface CikMapperBySymbolResponse {\n symbol: string;\n companyCik: string;\n}\n\n// Beneficial Ownership Response\nexport interface BeneficialOwnershipResponse {\n cik: string;\n symbol: string;\n filingDate: string;\n acceptedDate: string;\n cusip: string;\n nameOfReportingPerson: string;\n citizenshipOrPlaceOfOrganization: string;\n soleVotingPower: string;\n sharedVotingPower: string;\n soleDispositivePower: string;\n sharedDispositivePower: string;\n amountBeneficiallyOwned: string;\n percentOfClass: string;\n typeOfReportingPerson: string;\n url: string;\n}\n\n// Fail to Deliver Response\nexport interface FailToDeliverResponse {\n symbol: string;\n date: string;\n price: number;\n quantity: number;\n cusip: string;\n name: string;\n}\n\n// Parameter interfaces\nexport interface InsiderTradingRSSParams {\n page: number;\n}\n\nexport interface InsiderTradingSearchParams {\n symbol?: string;\n reportingCik?: string;\n companyCik?: string;\n transactionType?: string;\n page: number;\n}\n\nexport interface InsidersBySymbolParams {\n symbol: string;\n}\n\nexport interface InsiderTradeStatisticsParams {\n symbol: string;\n}\n\nexport interface CikMapperParams {\n page: number;\n}\n\nexport interface CikMapperByNameParams {\n name: string;\n page?: number;\n}\n\nexport interface CikMapperBySymbolParams {\n symbol: string;\n}\n\nexport interface BeneficialOwnershipParams {\n symbol: string;\n}\n\nexport interface FailToDeliverParams {\n symbol: string;\n page?: number;\n}\n\n// Transaction type enum for better type safety\nexport enum TransactionType {\n AWARD = 'A-Award',\n CONVERSION = 'C-Conversion',\n RETURN = 'D-Return',\n EXPIRE_SHORT = 'E-ExpireShort',\n IN_KIND = 'F-InKind',\n GIFT = 'G-Gift',\n EXPIRE_LONG = 'H-ExpireLong',\n DISCRETIONARY = 'I-Discretionary',\n OTHER = 'J-Other',\n SMALL = 'L-Small',\n EXEMPT = 'M-Exempt',\n OUT_OF_THE_MONEY = 'O-OutOfTheMoney',\n PURCHASE = 'P-Purchase',\n SALE = 'S-Sale',\n TENDER = 'U-Tender',\n WILL = 'W-Will',\n IN_THE_MONEY = 'X-InTheMoney',\n TRUST = 'Z-Trust',\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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fmp-node-api",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.8",
|
|
4
4
|
"description": "A comprehensive Node.js wrapper for Financial Modeling Prep API",
|
|
5
5
|
"disclaimer": "This package is not affiliated with, endorsed by, or sponsored by Financial Modeling Prep (FMP). This is an independent, community-developed wrapper.",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -70,7 +70,9 @@
|
|
|
70
70
|
"test:etf": "jest --testPathPattern=\"src/__tests__/endpoints/etf\\.test\\.ts\"",
|
|
71
71
|
"test:mutual-fund": "jest --testPathPattern=\"src/__tests__/endpoints/mutual-fund\\.test\\.ts\"",
|
|
72
72
|
"test:senate-house": "jest --testPathPattern=\"src/__tests__/endpoints/senate-house\\.test\\.ts\"",
|
|
73
|
-
"test:
|
|
73
|
+
"test:institutional": "jest --testPathPattern=\"src/__tests__/endpoints/institutional\\.test\\.ts\"",
|
|
74
|
+
"test:insider": "jest --testPathPattern=\"src/__tests__/endpoints/insider\\.test\\.ts\"",
|
|
75
|
+
"test:sec": "jest --testPathPattern=\"src/__tests__/endpoints/sec\\.test\\.ts\"",
|
|
74
76
|
"test:endpoint": "tsx scripts/test-endpoint.ts",
|
|
75
77
|
"type-check": "tsc --noEmit",
|
|
76
78
|
"format": "prettier --write src/**/*.ts",
|