initialize project structure with core modules and configuration
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
const config = require('../config');
|
||||
const { fetchJson } = require('../http');
|
||||
|
||||
let tickerMap;
|
||||
|
||||
function getHeaders() {
|
||||
return {
|
||||
headers: {
|
||||
'User-Agent': config.sec.userAgent,
|
||||
Accept: 'application/json',
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
async function getTickerMap() {
|
||||
if (tickerMap) {
|
||||
return tickerMap;
|
||||
}
|
||||
|
||||
const data = await fetchJson('https://www.sec.gov/files/company_tickers.json', getHeaders());
|
||||
tickerMap = Object.values(data).reduce((acc, company) => {
|
||||
acc[String(company.ticker || '').toUpperCase()] = String(company.cik_str || '').padStart(10, '0');
|
||||
return acc;
|
||||
}, {});
|
||||
|
||||
return tickerMap;
|
||||
}
|
||||
|
||||
async function fetchEdgarArticles() {
|
||||
const tickers = config.sec?.tickers || [];
|
||||
if (tickers.length === 0) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const map = await getTickerMap();
|
||||
const articles = [];
|
||||
|
||||
for (const ticker of tickers) {
|
||||
const cik = map[String(ticker).toUpperCase()];
|
||||
if (!cik) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const data = await fetchJson(`https://data.sec.gov/submissions/CIK${cik}.json`, getHeaders());
|
||||
const recent = data.filings?.recent;
|
||||
if (!recent) {
|
||||
continue;
|
||||
}
|
||||
|
||||
for (let i = 0; i < recent.form.length; i += 1) {
|
||||
if (recent.form[i] !== '8-K') {
|
||||
continue;
|
||||
}
|
||||
|
||||
const accession = String(recent.accessionNumber[i] || '').replace(/-/g, '');
|
||||
const primaryDocument = String(recent.primaryDocument[i] || '').trim();
|
||||
const filingDate = recent.filingDate[i] || null;
|
||||
|
||||
if (!accession || !primaryDocument) {
|
||||
continue;
|
||||
}
|
||||
|
||||
articles.push({
|
||||
title: `${String(ticker).toUpperCase()} 8-K ${filingDate || accession}`,
|
||||
description: `${String(data.name || ticker).trim()} filed Form 8-K`,
|
||||
url: `https://www.sec.gov/Archives/edgar/data/${Number(cik)}/${accession}/${primaryDocument}`,
|
||||
source: 'edgar',
|
||||
pubDate: filingDate,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return articles;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
fetchEdgarArticles,
|
||||
};
|
||||
Reference in New Issue
Block a user