roicai 0.0.1 → 0.2.0
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/LICENSE +21 -0
- package/README.md +447 -3
- package/dist/generated/_/codec.d.ts +93 -0
- package/dist/generated/_/codec.js +299 -0
- package/dist/generated/_/codec.js.map +1 -0
- package/dist/generated/_/error.d.ts +27 -0
- package/dist/generated/_/error.js +69 -0
- package/dist/generated/_/error.js.map +1 -0
- package/dist/generated/_/hooks/envelope.d.ts +11 -0
- package/dist/generated/_/hooks/envelope.js +16 -0
- package/dist/generated/_/hooks/envelope.js.map +1 -0
- package/dist/generated/_/index.d.ts +3 -0
- package/dist/generated/_/index.js +6 -0
- package/dist/generated/_/index.js.map +1 -0
- package/dist/generated/_/transport.d.ts +146 -0
- package/dist/generated/_/transport.js +221 -0
- package/dist/generated/_/transport.js.map +1 -0
- package/dist/generated/calendar/client.d.ts +13 -0
- package/dist/generated/calendar/client.js +16 -0
- package/dist/generated/calendar/client.js.map +1 -0
- package/dist/generated/calendar/earnings/client.d.ts +64 -0
- package/dist/generated/calendar/earnings/client.js +21 -0
- package/dist/generated/calendar/earnings/client.js.map +1 -0
- package/dist/generated/calendar/earnings/index.d.ts +5 -0
- package/dist/generated/calendar/earnings/index.js +5 -0
- package/dist/generated/calendar/earnings/index.js.map +1 -0
- package/dist/generated/calendar/earnings/models.d.ts +28 -0
- package/dist/generated/calendar/earnings/models.js +9 -0
- package/dist/generated/calendar/earnings/models.js.map +1 -0
- package/dist/generated/calendar/index.d.ts +4 -0
- package/dist/generated/calendar/index.js +5 -0
- package/dist/generated/calendar/index.js.map +1 -0
- package/dist/generated/client.d.ts +43 -0
- package/dist/generated/client.js +91 -0
- package/dist/generated/client.js.map +1 -0
- package/dist/generated/companies/client.d.ts +17 -0
- package/dist/generated/companies/client.js +26 -0
- package/dist/generated/companies/client.js.map +1 -0
- package/dist/generated/companies/employees/client.d.ts +66 -0
- package/dist/generated/companies/employees/client.js +21 -0
- package/dist/generated/companies/employees/client.js.map +1 -0
- package/dist/generated/companies/employees/index.d.ts +5 -0
- package/dist/generated/companies/employees/index.js +5 -0
- package/dist/generated/companies/employees/index.js.map +1 -0
- package/dist/generated/companies/employees/models.d.ts +12 -0
- package/dist/generated/companies/employees/models.js +9 -0
- package/dist/generated/companies/employees/models.js.map +1 -0
- package/dist/generated/companies/index.d.ts +4 -0
- package/dist/generated/companies/index.js +5 -0
- package/dist/generated/companies/index.js.map +1 -0
- package/dist/generated/companies/logos/client.d.ts +11 -0
- package/dist/generated/companies/logos/client.js +10 -0
- package/dist/generated/companies/logos/client.js.map +1 -0
- package/dist/generated/companies/logos/index.d.ts +4 -0
- package/dist/generated/companies/logos/index.js +5 -0
- package/dist/generated/companies/logos/index.js.map +1 -0
- package/dist/generated/companies/profiles/client.d.ts +27 -0
- package/dist/generated/companies/profiles/client.js +20 -0
- package/dist/generated/companies/profiles/client.js.map +1 -0
- package/dist/generated/companies/profiles/index.d.ts +5 -0
- package/dist/generated/companies/profiles/index.js +5 -0
- package/dist/generated/companies/profiles/index.js.map +1 -0
- package/dist/generated/companies/profiles/models.d.ts +64 -0
- package/dist/generated/companies/profiles/models.js +18 -0
- package/dist/generated/companies/profiles/models.js.map +1 -0
- package/dist/generated/companyEvents/client.d.ts +50 -0
- package/dist/generated/companyEvents/client.js +21 -0
- package/dist/generated/companyEvents/client.js.map +1 -0
- package/dist/generated/companyEvents/index.d.ts +5 -0
- package/dist/generated/companyEvents/index.js +5 -0
- package/dist/generated/companyEvents/index.js.map +1 -0
- package/dist/generated/companyEvents/models.d.ts +44 -0
- package/dist/generated/companyEvents/models.js +9 -0
- package/dist/generated/companyEvents/models.js.map +1 -0
- package/dist/generated/countries/client.d.ts +27 -0
- package/dist/generated/countries/client.js +21 -0
- package/dist/generated/countries/client.js.map +1 -0
- package/dist/generated/countries/index.d.ts +5 -0
- package/dist/generated/countries/index.js +5 -0
- package/dist/generated/countries/index.js.map +1 -0
- package/dist/generated/countries/models.d.ts +12 -0
- package/dist/generated/countries/models.js +9 -0
- package/dist/generated/countries/models.js.map +1 -0
- package/dist/generated/documents/audio/client.d.ts +28 -0
- package/dist/generated/documents/audio/client.js +20 -0
- package/dist/generated/documents/audio/client.js.map +1 -0
- package/dist/generated/documents/audio/index.d.ts +5 -0
- package/dist/generated/documents/audio/index.js +5 -0
- package/dist/generated/documents/audio/index.js.map +1 -0
- package/dist/generated/documents/audio/models.d.ts +45 -0
- package/dist/generated/documents/audio/models.js +14 -0
- package/dist/generated/documents/audio/models.js.map +1 -0
- package/dist/generated/documents/client.d.ts +19 -0
- package/dist/generated/documents/client.js +31 -0
- package/dist/generated/documents/client.js.map +1 -0
- package/dist/generated/documents/filings/client.d.ts +28 -0
- package/dist/generated/documents/filings/client.js +20 -0
- package/dist/generated/documents/filings/client.js.map +1 -0
- package/dist/generated/documents/filings/index.d.ts +5 -0
- package/dist/generated/documents/filings/index.js +5 -0
- package/dist/generated/documents/filings/index.js.map +1 -0
- package/dist/generated/documents/filings/models.d.ts +40 -0
- package/dist/generated/documents/filings/models.js +14 -0
- package/dist/generated/documents/filings/models.js.map +1 -0
- package/dist/generated/documents/index.d.ts +4 -0
- package/dist/generated/documents/index.js +5 -0
- package/dist/generated/documents/index.js.map +1 -0
- package/dist/generated/documents/slides/client.d.ts +28 -0
- package/dist/generated/documents/slides/client.js +20 -0
- package/dist/generated/documents/slides/client.js.map +1 -0
- package/dist/generated/documents/slides/index.d.ts +5 -0
- package/dist/generated/documents/slides/index.js +5 -0
- package/dist/generated/documents/slides/index.js.map +1 -0
- package/dist/generated/documents/slides/models.d.ts +39 -0
- package/dist/generated/documents/slides/models.js +14 -0
- package/dist/generated/documents/slides/models.js.map +1 -0
- package/dist/generated/documents/transcripts/client.d.ts +15 -0
- package/dist/generated/documents/transcripts/client.js +21 -0
- package/dist/generated/documents/transcripts/client.js.map +1 -0
- package/dist/generated/documents/transcripts/edited/client.d.ts +32 -0
- package/dist/generated/documents/transcripts/edited/client.js +20 -0
- package/dist/generated/documents/transcripts/edited/client.js.map +1 -0
- package/dist/generated/documents/transcripts/edited/index.d.ts +5 -0
- package/dist/generated/documents/transcripts/edited/index.js +5 -0
- package/dist/generated/documents/transcripts/edited/index.js.map +1 -0
- package/dist/generated/documents/transcripts/edited/models.d.ts +32 -0
- package/dist/generated/documents/transcripts/edited/models.js +12 -0
- package/dist/generated/documents/transcripts/edited/models.js.map +1 -0
- package/dist/generated/documents/transcripts/index.d.ts +4 -0
- package/dist/generated/documents/transcripts/index.js +5 -0
- package/dist/generated/documents/transcripts/index.js.map +1 -0
- package/dist/generated/documents/transcripts/raw/client.d.ts +32 -0
- package/dist/generated/documents/transcripts/raw/client.js +20 -0
- package/dist/generated/documents/transcripts/raw/client.js.map +1 -0
- package/dist/generated/documents/transcripts/raw/index.d.ts +5 -0
- package/dist/generated/documents/transcripts/raw/index.js +5 -0
- package/dist/generated/documents/transcripts/raw/index.js.map +1 -0
- package/dist/generated/documents/transcripts/raw/models.d.ts +26 -0
- package/dist/generated/documents/transcripts/raw/models.js +11 -0
- package/dist/generated/documents/transcripts/raw/models.js.map +1 -0
- package/dist/generated/earningsCalls/bulk/client.d.ts +35 -0
- package/dist/generated/earningsCalls/bulk/client.js +20 -0
- package/dist/generated/earningsCalls/bulk/client.js.map +1 -0
- package/dist/generated/earningsCalls/bulk/index.d.ts +4 -0
- package/dist/generated/earningsCalls/bulk/index.js +5 -0
- package/dist/generated/earningsCalls/bulk/index.js.map +1 -0
- package/dist/generated/earningsCalls/client.d.ts +113 -0
- package/dist/generated/earningsCalls/client.js +34 -0
- package/dist/generated/earningsCalls/client.js.map +1 -0
- package/dist/generated/earningsCalls/index.d.ts +5 -0
- package/dist/generated/earningsCalls/index.js +5 -0
- package/dist/generated/earningsCalls/index.js.map +1 -0
- package/dist/generated/earningsCalls/models.d.ts +34 -0
- package/dist/generated/earningsCalls/models.js +10 -0
- package/dist/generated/earningsCalls/models.js.map +1 -0
- package/dist/generated/exchanges/client.d.ts +32 -0
- package/dist/generated/exchanges/client.js +31 -0
- package/dist/generated/exchanges/client.js.map +1 -0
- package/dist/generated/exchanges/holidays/client.d.ts +31 -0
- package/dist/generated/exchanges/holidays/client.js +20 -0
- package/dist/generated/exchanges/holidays/client.js.map +1 -0
- package/dist/generated/exchanges/holidays/index.d.ts +5 -0
- package/dist/generated/exchanges/holidays/index.js +5 -0
- package/dist/generated/exchanges/holidays/index.js.map +1 -0
- package/dist/generated/exchanges/holidays/models.d.ts +13 -0
- package/dist/generated/exchanges/holidays/models.js +4 -0
- package/dist/generated/exchanges/holidays/models.js.map +1 -0
- package/dist/generated/exchanges/index.d.ts +5 -0
- package/dist/generated/exchanges/index.js +5 -0
- package/dist/generated/exchanges/index.js.map +1 -0
- package/dist/generated/exchanges/models.d.ts +15 -0
- package/dist/generated/exchanges/models.js +9 -0
- package/dist/generated/exchanges/models.js.map +1 -0
- package/dist/generated/exchanges/tradingHours/client.d.ts +31 -0
- package/dist/generated/exchanges/tradingHours/client.js +21 -0
- package/dist/generated/exchanges/tradingHours/client.js.map +1 -0
- package/dist/generated/exchanges/tradingHours/index.d.ts +5 -0
- package/dist/generated/exchanges/tradingHours/index.js +5 -0
- package/dist/generated/exchanges/tradingHours/index.js.map +1 -0
- package/dist/generated/exchanges/tradingHours/models.d.ts +19 -0
- package/dist/generated/exchanges/tradingHours/models.js +7 -0
- package/dist/generated/exchanges/tradingHours/models.js.map +1 -0
- package/dist/generated/forexPairs/client.d.ts +55 -0
- package/dist/generated/forexPairs/client.js +21 -0
- package/dist/generated/forexPairs/client.js.map +1 -0
- package/dist/generated/forexPairs/index.d.ts +5 -0
- package/dist/generated/forexPairs/index.js +5 -0
- package/dist/generated/forexPairs/index.js.map +1 -0
- package/dist/generated/forexPairs/models.d.ts +23 -0
- package/dist/generated/forexPairs/models.js +9 -0
- package/dist/generated/forexPairs/models.js.map +1 -0
- package/dist/generated/forexPrices/client.d.ts +65 -0
- package/dist/generated/forexPrices/client.js +26 -0
- package/dist/generated/forexPrices/client.js.map +1 -0
- package/dist/generated/forexPrices/index.d.ts +5 -0
- package/dist/generated/forexPrices/index.js +5 -0
- package/dist/generated/forexPrices/index.js.map +1 -0
- package/dist/generated/forexPrices/latest/client.d.ts +67 -0
- package/dist/generated/forexPrices/latest/client.js +28 -0
- package/dist/generated/forexPrices/latest/client.js.map +1 -0
- package/dist/generated/forexPrices/latest/index.d.ts +5 -0
- package/dist/generated/forexPrices/latest/index.js +5 -0
- package/dist/generated/forexPrices/latest/index.js.map +1 -0
- package/dist/generated/forexPrices/latest/models.d.ts +36 -0
- package/dist/generated/forexPrices/latest/models.js +8 -0
- package/dist/generated/forexPrices/latest/models.js.map +1 -0
- package/dist/generated/forexPrices/models.d.ts +26 -0
- package/dist/generated/forexPrices/models.js +8 -0
- package/dist/generated/forexPrices/models.js.map +1 -0
- package/dist/generated/fundamentals/balanceSheets/client.d.ts +79 -0
- package/dist/generated/fundamentals/balanceSheets/client.js +21 -0
- package/dist/generated/fundamentals/balanceSheets/client.js.map +1 -0
- package/dist/generated/fundamentals/balanceSheets/index.d.ts +5 -0
- package/dist/generated/fundamentals/balanceSheets/index.js +5 -0
- package/dist/generated/fundamentals/balanceSheets/index.js.map +1 -0
- package/dist/generated/fundamentals/balanceSheets/models.d.ts +98 -0
- package/dist/generated/fundamentals/balanceSheets/models.js +9 -0
- package/dist/generated/fundamentals/balanceSheets/models.js.map +1 -0
- package/dist/generated/fundamentals/bulk/client.d.ts +35 -0
- package/dist/generated/fundamentals/bulk/client.js +20 -0
- package/dist/generated/fundamentals/bulk/client.js.map +1 -0
- package/dist/generated/fundamentals/bulk/index.d.ts +4 -0
- package/dist/generated/fundamentals/bulk/index.js +5 -0
- package/dist/generated/fundamentals/bulk/index.js.map +1 -0
- package/dist/generated/fundamentals/cashFlowStatements/client.d.ts +79 -0
- package/dist/generated/fundamentals/cashFlowStatements/client.js +21 -0
- package/dist/generated/fundamentals/cashFlowStatements/client.js.map +1 -0
- package/dist/generated/fundamentals/cashFlowStatements/index.d.ts +5 -0
- package/dist/generated/fundamentals/cashFlowStatements/index.js +5 -0
- package/dist/generated/fundamentals/cashFlowStatements/index.js.map +1 -0
- package/dist/generated/fundamentals/cashFlowStatements/models.d.ts +71 -0
- package/dist/generated/fundamentals/cashFlowStatements/models.js +9 -0
- package/dist/generated/fundamentals/cashFlowStatements/models.js.map +1 -0
- package/dist/generated/fundamentals/client.d.ts +27 -0
- package/dist/generated/fundamentals/client.js +51 -0
- package/dist/generated/fundamentals/client.js.map +1 -0
- package/dist/generated/fundamentals/enterpriseValues/client.d.ts +79 -0
- package/dist/generated/fundamentals/enterpriseValues/client.js +21 -0
- package/dist/generated/fundamentals/enterpriseValues/client.js.map +1 -0
- package/dist/generated/fundamentals/enterpriseValues/index.d.ts +5 -0
- package/dist/generated/fundamentals/enterpriseValues/index.js +5 -0
- package/dist/generated/fundamentals/enterpriseValues/index.js.map +1 -0
- package/dist/generated/fundamentals/enterpriseValues/models.d.ts +39 -0
- package/dist/generated/fundamentals/enterpriseValues/models.js +9 -0
- package/dist/generated/fundamentals/enterpriseValues/models.js.map +1 -0
- package/dist/generated/fundamentals/incomeStatements/client.d.ts +79 -0
- package/dist/generated/fundamentals/incomeStatements/client.js +21 -0
- package/dist/generated/fundamentals/incomeStatements/client.js.map +1 -0
- package/dist/generated/fundamentals/incomeStatements/index.d.ts +5 -0
- package/dist/generated/fundamentals/incomeStatements/index.js +5 -0
- package/dist/generated/fundamentals/incomeStatements/index.js.map +1 -0
- package/dist/generated/fundamentals/incomeStatements/models.d.ts +62 -0
- package/dist/generated/fundamentals/incomeStatements/models.js +9 -0
- package/dist/generated/fundamentals/incomeStatements/models.js.map +1 -0
- package/dist/generated/fundamentals/index.d.ts +4 -0
- package/dist/generated/fundamentals/index.js +5 -0
- package/dist/generated/fundamentals/index.js.map +1 -0
- package/dist/generated/fundamentals/multiples/client.d.ts +79 -0
- package/dist/generated/fundamentals/multiples/client.js +21 -0
- package/dist/generated/fundamentals/multiples/client.js.map +1 -0
- package/dist/generated/fundamentals/multiples/index.d.ts +5 -0
- package/dist/generated/fundamentals/multiples/index.js +5 -0
- package/dist/generated/fundamentals/multiples/index.js.map +1 -0
- package/dist/generated/fundamentals/multiples/models.d.ts +61 -0
- package/dist/generated/fundamentals/multiples/models.js +9 -0
- package/dist/generated/fundamentals/multiples/models.js.map +1 -0
- package/dist/generated/fundamentals/perShareMetrics/client.d.ts +79 -0
- package/dist/generated/fundamentals/perShareMetrics/client.js +21 -0
- package/dist/generated/fundamentals/perShareMetrics/client.js.map +1 -0
- package/dist/generated/fundamentals/perShareMetrics/index.d.ts +5 -0
- package/dist/generated/fundamentals/perShareMetrics/index.js +5 -0
- package/dist/generated/fundamentals/perShareMetrics/index.js.map +1 -0
- package/dist/generated/fundamentals/perShareMetrics/models.d.ts +33 -0
- package/dist/generated/fundamentals/perShareMetrics/models.js +9 -0
- package/dist/generated/fundamentals/perShareMetrics/models.js.map +1 -0
- package/dist/generated/fundamentals/ratios/client.d.ts +21 -0
- package/dist/generated/fundamentals/ratios/client.js +36 -0
- package/dist/generated/fundamentals/ratios/client.js.map +1 -0
- package/dist/generated/fundamentals/ratios/credit/client.d.ts +75 -0
- package/dist/generated/fundamentals/ratios/credit/client.js +21 -0
- package/dist/generated/fundamentals/ratios/credit/client.js.map +1 -0
- package/dist/generated/fundamentals/ratios/credit/index.d.ts +5 -0
- package/dist/generated/fundamentals/ratios/credit/index.js +5 -0
- package/dist/generated/fundamentals/ratios/credit/index.js.map +1 -0
- package/dist/generated/fundamentals/ratios/credit/models.d.ts +40 -0
- package/dist/generated/fundamentals/ratios/credit/models.js +9 -0
- package/dist/generated/fundamentals/ratios/credit/models.js.map +1 -0
- package/dist/generated/fundamentals/ratios/index.d.ts +4 -0
- package/dist/generated/fundamentals/ratios/index.js +5 -0
- package/dist/generated/fundamentals/ratios/index.js.map +1 -0
- package/dist/generated/fundamentals/ratios/liquidity/client.d.ts +79 -0
- package/dist/generated/fundamentals/ratios/liquidity/client.js +21 -0
- package/dist/generated/fundamentals/ratios/liquidity/client.js.map +1 -0
- package/dist/generated/fundamentals/ratios/liquidity/index.d.ts +5 -0
- package/dist/generated/fundamentals/ratios/liquidity/index.js +5 -0
- package/dist/generated/fundamentals/ratios/liquidity/index.js.map +1 -0
- package/dist/generated/fundamentals/ratios/liquidity/models.d.ts +31 -0
- package/dist/generated/fundamentals/ratios/liquidity/models.js +9 -0
- package/dist/generated/fundamentals/ratios/liquidity/models.js.map +1 -0
- package/dist/generated/fundamentals/ratios/profitability/client.d.ts +75 -0
- package/dist/generated/fundamentals/ratios/profitability/client.js +21 -0
- package/dist/generated/fundamentals/ratios/profitability/client.js.map +1 -0
- package/dist/generated/fundamentals/ratios/profitability/index.d.ts +5 -0
- package/dist/generated/fundamentals/ratios/profitability/index.js +5 -0
- package/dist/generated/fundamentals/ratios/profitability/index.js.map +1 -0
- package/dist/generated/fundamentals/ratios/profitability/models.d.ts +31 -0
- package/dist/generated/fundamentals/ratios/profitability/models.js +9 -0
- package/dist/generated/fundamentals/ratios/profitability/models.js.map +1 -0
- package/dist/generated/fundamentals/ratios/workingCapital/client.d.ts +79 -0
- package/dist/generated/fundamentals/ratios/workingCapital/client.js +21 -0
- package/dist/generated/fundamentals/ratios/workingCapital/client.js.map +1 -0
- package/dist/generated/fundamentals/ratios/workingCapital/index.d.ts +5 -0
- package/dist/generated/fundamentals/ratios/workingCapital/index.js +5 -0
- package/dist/generated/fundamentals/ratios/workingCapital/index.js.map +1 -0
- package/dist/generated/fundamentals/ratios/workingCapital/models.d.ts +30 -0
- package/dist/generated/fundamentals/ratios/workingCapital/models.js +9 -0
- package/dist/generated/fundamentals/ratios/workingCapital/models.js.map +1 -0
- package/dist/generated/fundamentals/ratios/yieldAnalysis/client.d.ts +79 -0
- package/dist/generated/fundamentals/ratios/yieldAnalysis/client.js +21 -0
- package/dist/generated/fundamentals/ratios/yieldAnalysis/client.js.map +1 -0
- package/dist/generated/fundamentals/ratios/yieldAnalysis/index.d.ts +5 -0
- package/dist/generated/fundamentals/ratios/yieldAnalysis/index.js +5 -0
- package/dist/generated/fundamentals/ratios/yieldAnalysis/index.js.map +1 -0
- package/dist/generated/fundamentals/ratios/yieldAnalysis/models.d.ts +36 -0
- package/dist/generated/fundamentals/ratios/yieldAnalysis/models.js +9 -0
- package/dist/generated/fundamentals/ratios/yieldAnalysis/models.js.map +1 -0
- package/dist/generated/index.d.ts +5 -0
- package/dist/generated/index.js +5 -0
- package/dist/generated/index.js.map +1 -0
- package/dist/generated/industries/client.d.ts +26 -0
- package/dist/generated/industries/client.js +21 -0
- package/dist/generated/industries/client.js.map +1 -0
- package/dist/generated/industries/index.d.ts +5 -0
- package/dist/generated/industries/index.js +5 -0
- package/dist/generated/industries/index.js.map +1 -0
- package/dist/generated/industries/models.d.ts +11 -0
- package/dist/generated/industries/models.js +9 -0
- package/dist/generated/industries/models.js.map +1 -0
- package/dist/generated/markets/client.d.ts +28 -0
- package/dist/generated/markets/client.js +21 -0
- package/dist/generated/markets/client.js.map +1 -0
- package/dist/generated/markets/index.d.ts +5 -0
- package/dist/generated/markets/index.js +5 -0
- package/dist/generated/markets/index.js.map +1 -0
- package/dist/generated/markets/models.d.ts +13 -0
- package/dist/generated/markets/models.js +9 -0
- package/dist/generated/markets/models.js.map +1 -0
- package/dist/generated/models.d.ts +29 -0
- package/dist/generated/models.js +12 -0
- package/dist/generated/models.js.map +1 -0
- package/dist/generated/sectors/client.d.ts +26 -0
- package/dist/generated/sectors/client.js +21 -0
- package/dist/generated/sectors/client.js.map +1 -0
- package/dist/generated/sectors/index.d.ts +5 -0
- package/dist/generated/sectors/index.js +5 -0
- package/dist/generated/sectors/index.js.map +1 -0
- package/dist/generated/sectors/models.d.ts +11 -0
- package/dist/generated/sectors/models.js +9 -0
- package/dist/generated/sectors/models.js.map +1 -0
- package/dist/generated/stockPrices/bulk/client.d.ts +35 -0
- package/dist/generated/stockPrices/bulk/client.js +20 -0
- package/dist/generated/stockPrices/bulk/client.js.map +1 -0
- package/dist/generated/stockPrices/bulk/index.d.ts +4 -0
- package/dist/generated/stockPrices/bulk/index.js +5 -0
- package/dist/generated/stockPrices/bulk/index.js.map +1 -0
- package/dist/generated/stockPrices/client.d.ts +68 -0
- package/dist/generated/stockPrices/client.js +31 -0
- package/dist/generated/stockPrices/client.js.map +1 -0
- package/dist/generated/stockPrices/index.d.ts +5 -0
- package/dist/generated/stockPrices/index.js +5 -0
- package/dist/generated/stockPrices/index.js.map +1 -0
- package/dist/generated/stockPrices/latest/client.d.ts +58 -0
- package/dist/generated/stockPrices/latest/client.js +28 -0
- package/dist/generated/stockPrices/latest/client.js.map +1 -0
- package/dist/generated/stockPrices/latest/index.d.ts +5 -0
- package/dist/generated/stockPrices/latest/index.js +5 -0
- package/dist/generated/stockPrices/latest/index.js.map +1 -0
- package/dist/generated/stockPrices/latest/models.d.ts +43 -0
- package/dist/generated/stockPrices/latest/models.js +8 -0
- package/dist/generated/stockPrices/latest/models.js.map +1 -0
- package/dist/generated/stockPrices/models.d.ts +33 -0
- package/dist/generated/stockPrices/models.js +8 -0
- package/dist/generated/stockPrices/models.js.map +1 -0
- package/dist/generated/stockSplits/client.d.ts +64 -0
- package/dist/generated/stockSplits/client.js +21 -0
- package/dist/generated/stockSplits/client.js.map +1 -0
- package/dist/generated/stockSplits/index.d.ts +5 -0
- package/dist/generated/stockSplits/index.js +5 -0
- package/dist/generated/stockSplits/index.js.map +1 -0
- package/dist/generated/stockSplits/models.d.ts +23 -0
- package/dist/generated/stockSplits/models.js +9 -0
- package/dist/generated/stockSplits/models.js.map +1 -0
- package/dist/generated/tickers/client.d.ts +94 -0
- package/dist/generated/tickers/client.js +36 -0
- package/dist/generated/tickers/client.js.map +1 -0
- package/dist/generated/tickers/index.d.ts +5 -0
- package/dist/generated/tickers/index.js +5 -0
- package/dist/generated/tickers/index.js.map +1 -0
- package/dist/generated/tickers/models.d.ts +55 -0
- package/dist/generated/tickers/models.js +19 -0
- package/dist/generated/tickers/models.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/pagination.d.ts +42 -0
- package/dist/pagination.js +92 -0
- package/dist/pagination.js.map +1 -0
- package/package.json +50 -6
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 ROIC.ai
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,5 +1,449 @@
|
|
|
1
|
-
#
|
|
1
|
+
# ROIC.ai Node.js Library
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://www.npmjs.com/package/roicai)
|
|
4
|
+
[](https://github.com/roicai/roicai-node/actions/workflows/ci.yml)
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
The ROIC.ai Node.js library is the official TypeScript and JavaScript client for the [ROIC.ai](https://roic.ai) financial data API and stock API. Use it to get fundamentals for public companies, such as income statements, balance sheets, cash flow statements, financial ratios and valuation multiples, and earnings call transcripts. It also covers historical and latest stock prices, SEC filings and other company documents, the earnings calendar, company profiles and forex rates.
|
|
7
|
+
|
|
8
|
+
## Documentation
|
|
9
|
+
|
|
10
|
+
See the [ROIC.ai API reference](https://api.roic.ai/v3.0.0/openapi) for every endpoint, parameter and field, and the [API guides](https://www.roic.ai/api) for authentication, plans and response formats.
|
|
11
|
+
|
|
12
|
+
## Requirements
|
|
13
|
+
|
|
14
|
+
Node.js 20 or later. The library also runs in Bun.
|
|
15
|
+
|
|
16
|
+
## Installation
|
|
17
|
+
|
|
18
|
+
Install the package with:
|
|
19
|
+
|
|
20
|
+
```sh
|
|
21
|
+
npm install roicai
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Usage
|
|
25
|
+
|
|
26
|
+
The library needs your ROIC.ai API key, which you can find on the [authentication page](https://www.roic.ai/api/docs/authentication) once you sign in. Create a client with it:
|
|
27
|
+
|
|
28
|
+
```ts
|
|
29
|
+
import { createClient } from 'roicai';
|
|
30
|
+
|
|
31
|
+
const roicai = createClient({ token: process.env.ROICAI_API_KEY! });
|
|
32
|
+
|
|
33
|
+
const ticker = await roicai.tickers.retrieve({ identifier: 'NASDAQ:AAPL' });
|
|
34
|
+
|
|
35
|
+
const statements = await roicai.fundamentals.incomeStatements.list({
|
|
36
|
+
identifier: 'NASDAQ:AAPL',
|
|
37
|
+
periodType: 'annual',
|
|
38
|
+
limit: 5,
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
const latest = await roicai.stockPrices.latest.retrieve({ identifier: 'NASDAQ:AAPL' });
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Or using CommonJS, on Node.js 20.19+ and 22.12+:
|
|
45
|
+
|
|
46
|
+
```js
|
|
47
|
+
const { createClient } = require('roicai');
|
|
48
|
+
|
|
49
|
+
const roicai = createClient({ token: process.env.ROICAI_API_KEY });
|
|
50
|
+
|
|
51
|
+
roicai.tickers
|
|
52
|
+
.retrieve({ identifier: 'NASDAQ:AAPL' })
|
|
53
|
+
.then((ticker) => console.log(ticker.name))
|
|
54
|
+
.catch((error) => console.error(error));
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
The package is ESM-only. On older Node.js versions, load it from CommonJS with `await import('roicai')`.
|
|
58
|
+
|
|
59
|
+
Methods are grouped the way the API's URLs are: `/v3.0.0/fundamental/ratios/credit/{identifier}` is `roicai.fundamentals.ratios.credit.list(...)`. Each group has `list`, `retrieve` or `search`.
|
|
60
|
+
|
|
61
|
+
Identify a company by its exchange and symbol separated by a colon (`NASDAQ:AAPL`), its ticker ID (`tkr_...`) or its FIGI.
|
|
62
|
+
|
|
63
|
+
### Usage with TypeScript
|
|
64
|
+
|
|
65
|
+
The package includes its types. Every request field and response field is typed, with enums as string literal unions:
|
|
66
|
+
|
|
67
|
+
```ts
|
|
68
|
+
import { createClient, type Client } from 'roicai';
|
|
69
|
+
|
|
70
|
+
type Ticker = Awaited<ReturnType<Client['tickers']['retrieve']>>;
|
|
71
|
+
|
|
72
|
+
const client: Client = createClient({ token: process.env.ROICAI_API_KEY! });
|
|
73
|
+
const msft: Ticker = await client.tickers.retrieve({ identifier: 'NASDAQ:MSFT' });
|
|
74
|
+
console.log(msft.status); // "listed" | "delisted" | null
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Fields and dates
|
|
78
|
+
|
|
79
|
+
Fields are camelCase (`periodEndDate`), where the API's JSON is snake_case (`period_end_date`). Dates and timestamps are ISO 8601 strings; pass them to `new Date()` when you need a `Date`.
|
|
80
|
+
|
|
81
|
+
## Configuration
|
|
82
|
+
|
|
83
|
+
### Initialize with config object
|
|
84
|
+
|
|
85
|
+
Pass options to `createClient`:
|
|
86
|
+
|
|
87
|
+
```ts
|
|
88
|
+
const configured = createClient({
|
|
89
|
+
token: process.env.ROICAI_API_KEY!,
|
|
90
|
+
headers: { 'user-agent': 'my-app/1.0' },
|
|
91
|
+
});
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
| Option | Default | Description |
|
|
95
|
+
|---|---|---|
|
|
96
|
+
| `token` | required | Your API key, sent as `Authorization: Bearer <token>`. |
|
|
97
|
+
| `baseUrl` | `https://api.roic.ai` | URL that requests are made to. |
|
|
98
|
+
| `fetch` | global `fetch` | [Function that sends requests.](#using-a-custom-fetch) |
|
|
99
|
+
| `headers` | | Headers sent with every request. |
|
|
100
|
+
| `query` | | A `URLSearchParams` sent with every request. |
|
|
101
|
+
|
|
102
|
+
### Request options
|
|
103
|
+
|
|
104
|
+
Every method takes `RequestOptions` as its last argument:
|
|
105
|
+
|
|
106
|
+
| Option | Description |
|
|
107
|
+
|---|---|
|
|
108
|
+
| `signal` | An `AbortSignal` that cancels the request. |
|
|
109
|
+
| `headers` | Headers for this request. They replace the client's headers of the same name. |
|
|
110
|
+
| `query` | Query parameters appended to this request. |
|
|
111
|
+
| `onResponse` | Called with the `Response` before its body is read. |
|
|
112
|
+
|
|
113
|
+
### Configuring timeouts
|
|
114
|
+
|
|
115
|
+
The library sets no timeout. Pass a signal to limit one request:
|
|
116
|
+
|
|
117
|
+
```ts
|
|
118
|
+
const ticker = await roicai.tickers.retrieve(
|
|
119
|
+
{ identifier: 'NASDAQ:AAPL' },
|
|
120
|
+
{ signal: AbortSignal.timeout(5_000) },
|
|
121
|
+
);
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
A request that times out rejects with the signal's reason, a `TimeoutError`. To set a timeout for every request, use a [custom `fetch`](#using-a-custom-fetch).
|
|
125
|
+
|
|
126
|
+
### Examining responses
|
|
127
|
+
|
|
128
|
+
Use `onResponse` to read the status and headers, such as the request ID to quote when you contact support:
|
|
129
|
+
|
|
130
|
+
```ts
|
|
131
|
+
await roicai.tickers.retrieve(
|
|
132
|
+
{ identifier: 'NASDAQ:AAPL' },
|
|
133
|
+
{ onResponse: (response) => console.log(response.status, response.headers.get('request-id')) },
|
|
134
|
+
);
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Using a custom fetch
|
|
138
|
+
|
|
139
|
+
Pass your own `fetch` to log, time out, retry or proxy requests. The library doesn't retry failed requests by itself:
|
|
140
|
+
|
|
141
|
+
```ts
|
|
142
|
+
const logged = createClient({
|
|
143
|
+
token: process.env.ROICAI_API_KEY!,
|
|
144
|
+
fetch: async (input, init) => {
|
|
145
|
+
const response = await fetch(input, { ...init, signal: init?.signal ?? AbortSignal.timeout(10_000) });
|
|
146
|
+
console.log(init?.method, String(input), response.status);
|
|
147
|
+
return response;
|
|
148
|
+
},
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
await logged.tickers.retrieve({ identifier: 'NASDAQ:MSFT' });
|
|
152
|
+
// GET https://api.roic.ai/v3.0.0/tickers/NASDAQ%3AMSFT 200
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Date and fiscal year ranges
|
|
156
|
+
|
|
157
|
+
Lists of dated rows take `dateGte`, `dateGt`, `dateLte` and `dateLt`, with dates as `YYYY-MM-DD`:
|
|
158
|
+
|
|
159
|
+
```ts
|
|
160
|
+
const january = await roicai.stockPrices.list({
|
|
161
|
+
identifier: 'NASDAQ:AAPL',
|
|
162
|
+
dateGte: '2025-01-01',
|
|
163
|
+
dateLte: '2025-01-31',
|
|
164
|
+
order: 'asc',
|
|
165
|
+
});
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
They work on stock prices, stock splits, forex prices, earnings calls, the earnings calendar and every fundamentals list. Fundamentals and employee counts also take `fiscalYearGte`, `fiscalYearGt`, `fiscalYearLte` and `fiscalYearLt`:
|
|
169
|
+
|
|
170
|
+
```ts
|
|
171
|
+
const since2020 = await roicai.fundamentals.incomeStatements.list({
|
|
172
|
+
identifier: 'NASDAQ:AAPL',
|
|
173
|
+
periodType: 'annual',
|
|
174
|
+
fiscalYearGte: 2020,
|
|
175
|
+
});
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Auto-pagination
|
|
179
|
+
|
|
180
|
+
List methods return one page of up to `limit` rows. You can also have the library fetch the next pages for you as you go. It sends the same request again with the page token from `nextPageUrl`, so every page uses your filters, and it stops after the last page. There are a few ways to do this.
|
|
181
|
+
|
|
182
|
+
#### Async iterators (`for await`)
|
|
183
|
+
|
|
184
|
+
```ts
|
|
185
|
+
for await (const call of roicai.earningsCalls.list({ identifier: 'NASDAQ:AAPL', limit: 100 })) {
|
|
186
|
+
console.log(call.fiscalYear, call.fiscalQuarter, call.date);
|
|
187
|
+
}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
Use `break` to stop early. The library doesn't request any page after the one you stopped in.
|
|
191
|
+
|
|
192
|
+
#### `autoPagingEach`
|
|
193
|
+
|
|
194
|
+
```ts
|
|
195
|
+
await roicai.stockPrices.list({ identifier: 'NASDAQ:AAPL', dateGte: '2020-01-01' }).autoPagingEach((price) => {
|
|
196
|
+
console.log(price.date, price.close);
|
|
197
|
+
});
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
The callback can return a promise, which the library waits for before the next item. Return `false` to stop.
|
|
201
|
+
|
|
202
|
+
#### `autoPagingToArray`
|
|
203
|
+
|
|
204
|
+
This collects the items into an array. It's meant for lists you expect to be small, so you must pass a `limit` of at most 10,000; for more, use one of the methods above:
|
|
205
|
+
|
|
206
|
+
```ts
|
|
207
|
+
const tickers = await roicai.tickers.list({ exchange: 'NASDAQ', limit: 500 }).autoPagingToArray({ limit: 2000 });
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
#### Fetching pages yourself
|
|
211
|
+
|
|
212
|
+
Awaiting a list gives its first page. To fetch the next page yourself, send the same request with the `page` token from `nextPageUrl`, which is `null` on the last page. A token only works with the filters and `limit` it was issued for.
|
|
213
|
+
|
|
214
|
+
## Handling errors
|
|
215
|
+
|
|
216
|
+
A request that fails throws an `ApiError` with the HTTP `status` and the API's error in `details`:
|
|
217
|
+
|
|
218
|
+
```ts
|
|
219
|
+
import { ApiError, type V3Error } from 'roicai';
|
|
220
|
+
|
|
221
|
+
try {
|
|
222
|
+
await roicai.tickers.retrieve({ identifier: 'NASDAQ:NOPE' });
|
|
223
|
+
} catch (err) {
|
|
224
|
+
if (err instanceof ApiError && err.status === 404) {
|
|
225
|
+
// no such ticker
|
|
226
|
+
const { error } = err.details as V3Error;
|
|
227
|
+
console.log(error.code, error.message, error.requestId); // resource_missing ...
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
The API returns `401` for a missing or invalid key, `402` when your plan doesn't include the data, `404` for an unknown identifier and `429` when you exceed your rate limit.
|
|
233
|
+
|
|
234
|
+
## Examples
|
|
235
|
+
|
|
236
|
+
The examples use the `roicai` client from [Usage](#usage).
|
|
237
|
+
|
|
238
|
+
### Tickers
|
|
239
|
+
|
|
240
|
+
Retrieve one ticker, search by symbol or company name, or list tickers with filters:
|
|
241
|
+
|
|
242
|
+
```ts
|
|
243
|
+
const apple = await roicai.tickers.retrieve({ identifier: 'NASDAQ:AAPL' });
|
|
244
|
+
console.log(apple.name, apple.isin, apple.figi);
|
|
245
|
+
|
|
246
|
+
const bySymbol = await roicai.tickers.search({ query: 'AAPL', limit: 5 });
|
|
247
|
+
const byName = await roicai.tickers.search({ query: 'apple', searchBy: 'name', limit: 5 });
|
|
248
|
+
const byIsin = await roicai.tickers.search({ query: 'US0378331005', searchBy: 'isin' });
|
|
249
|
+
console.log(byName.data.map((t) => t.symbol));
|
|
250
|
+
|
|
251
|
+
const nasdaq = await roicai.tickers.list({
|
|
252
|
+
exchange: 'NASDAQ',
|
|
253
|
+
type: 'stock',
|
|
254
|
+
status: 'listed',
|
|
255
|
+
limit: 100,
|
|
256
|
+
});
|
|
257
|
+
const japan = await roicai.tickers.list({ listingCountryCode: 'JP', isPrimary: true });
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
`searchBy` also matches `cik`, `cusip`, `figi` and the other ticker fields exactly.
|
|
261
|
+
|
|
262
|
+
### Company profile
|
|
263
|
+
|
|
264
|
+
```ts
|
|
265
|
+
const profile = await roicai.companies.profiles.retrieve({ identifier: 'NASDAQ:AAPL' });
|
|
266
|
+
console.log(profile.name, profile.sector, profile.industry, profile.ceo);
|
|
267
|
+
console.log(profile.earningsSchedule.nextReleaseDate);
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
### Stock prices
|
|
271
|
+
|
|
272
|
+
Historical daily prices come newest first. Prices are unadjusted unless you set `adjustment` to `splits` or `total_return`:
|
|
273
|
+
|
|
274
|
+
```ts
|
|
275
|
+
const prices = await roicai.stockPrices.list({ identifier: 'NASDAQ:AAPL', limit: 30 });
|
|
276
|
+
for (const day of prices.data) {
|
|
277
|
+
console.log(day.date, day.open, day.high, day.low, day.close, day.volume);
|
|
278
|
+
}
|
|
279
|
+
console.log(prices.currency); // "USD"
|
|
280
|
+
|
|
281
|
+
const splitAdjusted = await roicai.stockPrices.list({
|
|
282
|
+
identifier: 'NASDAQ:AAPL',
|
|
283
|
+
date: '2020-08-28',
|
|
284
|
+
adjustment: 'splits',
|
|
285
|
+
});
|
|
286
|
+
|
|
287
|
+
const latest = await roicai.stockPrices.latest.retrieve({ identifier: 'NASDAQ:AAPL' });
|
|
288
|
+
console.log(latest.date, latest.close);
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
For a date range, see [Date and fiscal year ranges](#date-and-fiscal-year-ranges).
|
|
292
|
+
|
|
293
|
+
### Financial statements
|
|
294
|
+
|
|
295
|
+
Income statements, balance sheets and cash flow statements take the same parameters. Set `periodType` to `annual`, `quarterly` or `ttm`, and `periodLabel` to one fiscal period (`FY`, `Q1` to `Q4`):
|
|
296
|
+
|
|
297
|
+
```ts
|
|
298
|
+
const annual = await roicai.fundamentals.incomeStatements.list({
|
|
299
|
+
identifier: 'NASDAQ:AAPL',
|
|
300
|
+
periodType: 'annual',
|
|
301
|
+
limit: 5,
|
|
302
|
+
});
|
|
303
|
+
for (const year of annual.data) {
|
|
304
|
+
console.log(year.fiscalYear, year.isSalesRevenueTurnover, year.isNetIncome, year.dilutedEps);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
const quarters = await roicai.fundamentals.balanceSheets.list({
|
|
308
|
+
identifier: 'NASDAQ:AAPL',
|
|
309
|
+
periodType: 'quarterly',
|
|
310
|
+
limit: 4,
|
|
311
|
+
});
|
|
312
|
+
console.log(quarters.data.map((q) => [q.fiscalYear, q.periodLabel, q.bsTotAsset, q.bsTotLiab]));
|
|
313
|
+
|
|
314
|
+
const fourthQuarters = await roicai.fundamentals.cashFlowStatements.list({
|
|
315
|
+
identifier: 'NASDAQ:AAPL',
|
|
316
|
+
periodType: 'quarterly',
|
|
317
|
+
periodLabel: 'Q4',
|
|
318
|
+
limit: 4,
|
|
319
|
+
});
|
|
320
|
+
console.log(fourthQuarters.data.map((q) => [q.fiscalYear, q.cfCashFromOper, q.cfFreeCashFlow]));
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
Rows come newest first. Amounts are in `currency`, and line items use short names: `isSalesRevenueTurnover` is revenue, `bsTotAsset` is total assets and `cfCapExpenditures` is capital expenditures. `roicai.fundamentals.perShareMetrics` and `roicai.fundamentals.enterpriseValues` work the same way.
|
|
324
|
+
|
|
325
|
+
### Ratios and multiples
|
|
326
|
+
|
|
327
|
+
Ratios are grouped into `profitability`, `credit`, `liquidity`, `workingCapital` and `yieldAnalysis`. Margins and returns are percentages (`46.9` is 46.9%):
|
|
328
|
+
|
|
329
|
+
```ts
|
|
330
|
+
const profitability = await roicai.fundamentals.ratios.profitability.list({
|
|
331
|
+
identifier: 'NASDAQ:AAPL',
|
|
332
|
+
periodType: 'annual',
|
|
333
|
+
limit: 5,
|
|
334
|
+
});
|
|
335
|
+
for (const year of profitability.data) {
|
|
336
|
+
console.log(year.fiscalYear, year.grossMargin, year.operMargin, year.returnOnInvCapital);
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
const credit = await roicai.fundamentals.ratios.credit.list({ identifier: 'NASDAQ:AAPL', limit: 1 });
|
|
340
|
+
console.log(credit.data[0]?.netDebtToEbitda);
|
|
341
|
+
|
|
342
|
+
const multiples = await roicai.fundamentals.multiples.list({
|
|
343
|
+
identifier: 'NASDAQ:AAPL',
|
|
344
|
+
periodType: 'quarterly',
|
|
345
|
+
limit: 1,
|
|
346
|
+
});
|
|
347
|
+
const [last] = multiples.data;
|
|
348
|
+
console.log(last?.peRatio, last?.evToTtmEbitda, last?.prToBookRatio, last?.prToFreeCashFlow);
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
### Earnings call transcripts
|
|
352
|
+
|
|
353
|
+
List a company's earnings calls, then retrieve a transcript by fiscal year and quarter. Free plans can access each company's latest two calls:
|
|
354
|
+
|
|
355
|
+
```ts
|
|
356
|
+
const calls = await roicai.earningsCalls.list({ identifier: 'NASDAQ:AAPL', limit: 8 });
|
|
357
|
+
console.log(calls.data.map((c) => [c.fiscalYear, c.fiscalQuarter, c.date]));
|
|
358
|
+
|
|
359
|
+
const call = await roicai.earningsCalls.retrieve({
|
|
360
|
+
identifier: 'NASDAQ:AAPL',
|
|
361
|
+
fiscalYear: 2026,
|
|
362
|
+
fiscalQuarter: 3,
|
|
363
|
+
});
|
|
364
|
+
if (Array.isArray(call.transcript)) {
|
|
365
|
+
for (const turn of call.transcript) {
|
|
366
|
+
console.log(`${turn.speaker}: ${turn.text}`);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
const text = await roicai.earningsCalls.retrieve({
|
|
371
|
+
identifier: 'NASDAQ:AAPL',
|
|
372
|
+
fiscalYear: 2026,
|
|
373
|
+
fiscalQuarter: 3,
|
|
374
|
+
format: 'text',
|
|
375
|
+
});
|
|
376
|
+
console.log(typeof text.transcript); // "string"
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
By default `transcript` is an array of `{ speaker, text }` turns. With `format: 'text'` it is one string.
|
|
380
|
+
|
|
381
|
+
Leave out `identifier` to list calls from every company, and filter by `date`, `fiscalYear` or `fiscalQuarter`:
|
|
382
|
+
|
|
383
|
+
```ts
|
|
384
|
+
const sameDay = await roicai.earningsCalls.list({ date: '2026-07-30' });
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
### Earnings calendar
|
|
388
|
+
|
|
389
|
+
Each event has the release date and session, and the EPS and revenue estimates and actuals:
|
|
390
|
+
|
|
391
|
+
```ts
|
|
392
|
+
const schedule = await roicai.calendar.earnings.list({ identifier: 'NASDAQ:AAPL', limit: 4 });
|
|
393
|
+
for (const event of schedule.data) {
|
|
394
|
+
console.log(event.fiscalPeriod, event.releaseDate, event.releaseSession, event.epsEstimate, event.epsActual);
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
const oneDay = await roicai.calendar.earnings.list({ date: '2026-10-28' });
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
### SEC filings and company documents
|
|
401
|
+
|
|
402
|
+
A company event is one reporting period, with the IDs of its transcripts, call audio, slides and filings, such as 10-Q and 8-K reports. Retrieve a document by ID to get a signed download URL, which needs no API key:
|
|
403
|
+
|
|
404
|
+
```ts
|
|
405
|
+
const events = await roicai.companyEvents.list({ identifier: 'NASDAQ:AAPL', limit: 4 });
|
|
406
|
+
const [event] = events.data;
|
|
407
|
+
console.log(event?.fiscalYear, event?.fiscalQuarter, event?.releaseDate);
|
|
408
|
+
|
|
409
|
+
const filing = event?.filings.find((f) => f.form === '10-Q');
|
|
410
|
+
if (filing) {
|
|
411
|
+
const download = await roicai.documents.filings.retrieve({ id: filing.id });
|
|
412
|
+
console.log(download.filename, download.url, download.expiresAt);
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
const withSlides = await roicai.companyEvents.list({ identifier: 'NASDAQ:AAPL', content: 'slides' });
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
`roicai.documents.slides`, `audio`, `transcripts.edited` and `transcripts.raw` retrieve the other kinds by ID.
|
|
419
|
+
|
|
420
|
+
### Forex
|
|
421
|
+
|
|
422
|
+
Identify a currency pair as `FX:` followed by the base and quote currencies:
|
|
423
|
+
|
|
424
|
+
```ts
|
|
425
|
+
const pairs = await roicai.forexPairs.list({ baseCurrency: 'EUR', quoteCurrency: 'USD' });
|
|
426
|
+
const yen = await roicai.forexPairs.list({ search: 'yen' });
|
|
427
|
+
|
|
428
|
+
const eurusd = await roicai.forexPrices.list({ identifier: 'FX:EURUSD', limit: 30 });
|
|
429
|
+
console.log(eurusd.data.map((day) => [day.date, day.close]));
|
|
430
|
+
|
|
431
|
+
const rate = await roicai.forexPrices.latest.retrieve({ identifier: 'FX:EURUSD' });
|
|
432
|
+
console.log(rate.date, rate.close);
|
|
433
|
+
|
|
434
|
+
const toUsd = await roicai.forexPrices.latest.list({ quoteCurrency: 'USD' });
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
## Support
|
|
438
|
+
|
|
439
|
+
Report bugs and request features in [GitHub issues](https://github.com/roicai/roicai-node/issues). For questions about your account, plan or the data, contact ROIC.ai through [roic.ai](https://roic.ai).
|
|
440
|
+
|
|
441
|
+
The library follows semver. While it is `0.x`, a minor version can include breaking changes, so pin the minor version you use.
|
|
442
|
+
|
|
443
|
+
## Contributing
|
|
444
|
+
|
|
445
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) to build and test the library, regenerate it from the API, and release it.
|
|
446
|
+
|
|
447
|
+
## License
|
|
448
|
+
|
|
449
|
+
[MIT](LICENSE)
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A codec converts a value between its wire form, as JSON has it, and its
|
|
3
|
+
* TypeScript form. A value whose shape does not match the codec is kept as
|
|
4
|
+
* it is.
|
|
5
|
+
*/
|
|
6
|
+
export interface Codec {
|
|
7
|
+
/**
|
|
8
|
+
* Converts a wire value. `source` is the source text of a number whose
|
|
9
|
+
* value JSON.parse could not hold exactly.
|
|
10
|
+
*/
|
|
11
|
+
decode(value: unknown, source?: string): unknown;
|
|
12
|
+
/**
|
|
13
|
+
* Converts a TypeScript value to its wire form.
|
|
14
|
+
*/
|
|
15
|
+
encode(value: unknown): unknown;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* A codec, or a function that returns one, so codecs can form cycles.
|
|
19
|
+
*/
|
|
20
|
+
export type CodecRef = Codec | (() => Codec);
|
|
21
|
+
/**
|
|
22
|
+
* An entry of an object codec: the wire name of a key, its field name when
|
|
23
|
+
* it is renamed, and the codec of its value when the value is converted.
|
|
24
|
+
*/
|
|
25
|
+
export type Entry = readonly [wire: string, field: string] | readonly [wire: string, field: string | null, codec: CodecRef];
|
|
26
|
+
type Record = {
|
|
27
|
+
[key: string]: unknown;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Reports whether value is a plain object, as JSON.parse creates them.
|
|
31
|
+
*/
|
|
32
|
+
export declare function isRecord(value: unknown): value is Record;
|
|
33
|
+
/**
|
|
34
|
+
* Sets a key of a new object, including one named `__proto__`.
|
|
35
|
+
*/
|
|
36
|
+
export declare function set(target: Record, key: string, value: unknown): void;
|
|
37
|
+
/**
|
|
38
|
+
* Parses JSON, and keeps the source text of integers too large for a number,
|
|
39
|
+
* so that `int64` decodes them exactly.
|
|
40
|
+
*/
|
|
41
|
+
export declare function parse(text: string): unknown;
|
|
42
|
+
/**
|
|
43
|
+
* Returns the codec of an object, with an entry for each key that is renamed
|
|
44
|
+
* or whose value is converted. Other keys are kept as they are.
|
|
45
|
+
*/
|
|
46
|
+
export declare function object(entries: readonly Entry[]): Codec;
|
|
47
|
+
/**
|
|
48
|
+
* Returns the codec of an array, which converts its items.
|
|
49
|
+
*/
|
|
50
|
+
export declare function array(items: CodecRef): Codec;
|
|
51
|
+
/**
|
|
52
|
+
* Returns the codec of a map, which converts its values and keeps its keys.
|
|
53
|
+
*/
|
|
54
|
+
export declare function map(values: CodecRef): Codec;
|
|
55
|
+
/**
|
|
56
|
+
* Returns the codec of a union. Each member's codec converts the parts of
|
|
57
|
+
* the value it knows, and keeps the rest.
|
|
58
|
+
*/
|
|
59
|
+
export declare function union(members: readonly CodecRef[]): Codec;
|
|
60
|
+
/**
|
|
61
|
+
* Returns the codec of an intersection, which converts the value with the
|
|
62
|
+
* codec of each member.
|
|
63
|
+
*/
|
|
64
|
+
export declare function intersection(members: readonly CodecRef[]): Codec;
|
|
65
|
+
/**
|
|
66
|
+
* Returns the codec of a union that a property discriminates: the codec of
|
|
67
|
+
* the member that the property's value names. `wire` and `field` are the
|
|
68
|
+
* property's names, with `field` null when it is not renamed.
|
|
69
|
+
*/
|
|
70
|
+
export declare function discriminated(wire: string, field: string | null, cases: {
|
|
71
|
+
readonly [value: string]: CodecRef;
|
|
72
|
+
}): Codec;
|
|
73
|
+
/**
|
|
74
|
+
* Converts a `date-time` string and a Temporal.Instant.
|
|
75
|
+
*/
|
|
76
|
+
export declare const instant: Codec;
|
|
77
|
+
/**
|
|
78
|
+
* Converts a `date` string and a Temporal.PlainDate.
|
|
79
|
+
*/
|
|
80
|
+
export declare const date: Codec;
|
|
81
|
+
/**
|
|
82
|
+
* Returns the base64 encoding of bytes.
|
|
83
|
+
*/
|
|
84
|
+
export declare function toBase64(bytes: Uint8Array): string;
|
|
85
|
+
/**
|
|
86
|
+
* Converts a `byte` string, in base64, and a Uint8Array.
|
|
87
|
+
*/
|
|
88
|
+
export declare const bytes: Codec;
|
|
89
|
+
/**
|
|
90
|
+
* Converts an `int64` number and a bigint, without losing digits.
|
|
91
|
+
*/
|
|
92
|
+
export declare const int64: Codec;
|
|
93
|
+
export {};
|