Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
sec-edgar-api
Advanced tools
Fetch and parse SEC earnings reports and other filings. Useful for financial analysis.
Fetch and parse earnings reports and other documents filed with the SEC using the EDGAR API. This package is focused on the earnings reports for stock analysis.
Some main data points available include:
npm install sec-edgar-api
Reports are all returned as a uniform interface:
interface ReportTranslated {
cik: number
url: string | null
dateReport: string
dateFiled: string
fiscalPeriod: FiscalPeriod
fiscalYear: number
splitDate: string | null
splitRatio: number | null
assetTotal: number | null
assetCurrent: number | null
assetCurrentCashEquivalents: number | null
assetCurrentInvestments: number | null
assetCurrentAccountsReceivable: number | null
assetCurrentInventory: number | null
assetNonCurrent: number | null
assetNonCurrentPPENet: number | null
assetNonCurrentPPEGross: number | null
assetNonCurrentInvestments: number | null
assetNonCurrentGoodwill: number | null
assetNonCurrentIntangibleLessGoodwill: number | null
liabilityTotal: number | null
liabilityCurrent: number | null
liabilityCurrentAccountsPayable: number | null
liabilityCurrentDebt: number | null
liabilityNonCurrent: number | null
liabilityNonCurrentDebt: number | null
equityTotal: number | null
equityRetainedEarnings: number | null
equityStockPreferred: number | null
sharesOutstanding: number | null
sharesOutstandingDiluted: number | null
eps: number | null
epsDiluted: number | null
ebit: number | null
ebitda: number | null
profitGross: number | null
revenueTotal: number | null
revenueCost: number | null
revenueOperating: number | null
expenseTotal: number | null
expenseOperating: number | null
expenseResearchDevelopment: number | null
expenseInterest: number | null
expenseDepreciation: number | null
expenseTax: number | null
expenseDepreciationAccumulated: number | null
expenseStockCompensation: number | null
expenseNonCashOther: number | null
incomeOperating: number | null
incomeNet: number | null
cashFlowFree: number | null
cashFlowDividendsPaid: number | null
cashFlowDividendsPaidPreferred: number | null
cashFlowCapex: number | null
cashFlowOperating: number | null
cashFlowDeferredTax: number | null
cashFlowWorkingCapitalNonCash: number | null
}
import package contents
import { secEdgarApi } from 'sec-edgar-api'
You can fetch reports individually directly from the SEC website, (throttled to 10 requests per second)
// returns array of ReportWrapper (which implements ReportTranslated)
const reports = await secEdgarApi.getReports({ symbol: 'AAPL' })
The main problem with the edgar API is that the property names and data provided are not uniform. You have to deal with companies omitting important data in some filings, or using different property keys for the same data point.
Resolvers attempt to get information from each report and output a uniform interface. The resolvers will calculate missing data if there is other data that can be used to derive from.
Resolver | Formula used to derive values |
---|---|
resolveAssetCurrent | assetTotal - assetNonCurrent = assetCurrent |
resolveAssetNonCurrentPpeGross | assetNonCurrentPPENet + expenseDepreciationAccumulated = assetNonCurrentPpeGross |
resolveCashFlowCapex | Q1 + Q2 + Q3 + Q4 = FY (if FY known, divides evenly between missing quarters) |
resolveCashFlowFree | cashFlowOperating - cashFlowCapex = cashFlowFree |
resolveCashFlowOperating | incomeNet + expenseDepreciation - changeInWorkingCapitalNonCash = cashFlowOperating |
resolveCashFlowWorkingCapitalNonCash | (assetCurrent - assetCurrentCashEquivalents) - (liabilityCurrent - liabilityCurrentDebt) = cashFlowWorkingCapitalNonCash |
resolveEbit | expenseDepreciation + ebitda = ebit |
resolveExpenseDepreciation | (expenseDepreciationFY / assetNonCurrentPpeGrossFY) x assetNonCurrentPpeGross = expenseDepreciation |
resolveExpenseOperating | revenueTotal - incomeOperating - revenueCost = expenseOperating |
resolveExpenseTotal | revenueTotal - incomeNet = expenseTotal |
resolveFiscalYearCumulativeProperties | Q1 + Q2 + Q3 + Q4 = FY (for quarterly properties that add to annual) |
resolveQ4FiscalYearMatchingProperties | Q4 = FY (for non-cumulative properties such as sharesOutstanding) |
resolveRevenueTotal | revenueCost + profitGross = revenueTotal |
Getting all the properties in a uniform interface accurately is proving to be very difficult due to the differences in all the reports. Please contribute if you know how to improve this.
Files for mapping & resolving properties:
src/util/key-translations.ts
src/services/ReportParser.ts
(add resolvers to the resolvers/
directory, import to /resolver/index.ts
, and add to ReportParser.resolveAll)FAQs
Fetch and parse SEC earnings reports and other filings. Useful for financial analysis.
The npm package sec-edgar-api receives a total of 13 weekly downloads. As such, sec-edgar-api popularity was classified as not popular.
We found that sec-edgar-api demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.