UNPKG

earningscall

Version:

The EarningsCall JavaScript library provides convenient access to the EarningsCall API. It includes a pre-defined set of classes for API resources that initialize themselves dynamically from API responses.

111 lines 8.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Symbols = exports.EXCHANGES_IN_ORDER = void 0; exports.indexToExchange = indexToExchange; exports.loadSymbols = loadSymbols; exports.getSymbols = getSymbols; exports.clearSymbols = clearSymbols; const api_1 = require("./api"); const sectors_1 = require("./sectors"); // WARNING: Add new indexes to the *END* of this list exports.EXCHANGES_IN_ORDER = [ 'NYSE', 'NASDAQ', 'AMEX', 'TSX', 'TSXV', 'OTC', 'LSE', 'CBOE', 'STO', ]; function indexToExchange(index) { if (index < 0 || index >= exports.EXCHANGES_IN_ORDER.length) { return 'UNKNOWN'; } return exports.EXCHANGES_IN_ORDER[index]; } class Symbols { expiresDate = null; lastModified = null; cacheControlExpires = null; exchanges = new Set(); byName = new Map(); byExchangeAndSym = new Map(); add = (companyInfo) => { this.exchanges.add(companyInfo.exchange || ''); const exchangeSymbol = `${companyInfo.exchange}_${companyInfo.symbol}`; this.byExchangeAndSym.set(exchangeSymbol, companyInfo); this.byName.set(companyInfo.name || '', companyInfo); }; getExchangeSymbol = (exchangeSymbol) => { const symbol = this.byExchangeAndSym.get(exchangeSymbol.toUpperCase()); // if (!symbol) throw new Error(`Symbol not found: ${exchangeSymbol}`); return symbol; }; get = (exchange, symbol) => this.getExchangeSymbol(`${exchange}_${symbol}`); getAll = function* () { yield* this.byExchangeAndSym.values(); }; } exports.Symbols = Symbols; let symbols = null; /** * Loads the symbols from the API and returns a Symbols object. * * @returns {Promise<Symbols>} The Symbols object. */ async function loadSymbols() { const symbolsV2Response = await (0, api_1.getSymbolsV2)(); const responseHeaders = symbolsV2Response.headers; const lastModified = new Date(responseHeaders.get('Last-Modified') || ''); const cacheControl = responseHeaders.get('Cache-Control'); const cacheControlMaxAge = cacheControl?.match(/max-age=(\d+)/)?.[1]; const cacheControlExpires = cacheControl?.match(/expires=(\d+)/)?.[1]; // By default, we cache the symbols for 1 day // Otherwise, we use the Cache-Control header to determine the expiration date (max-age) const expiresDate = new Date(Date.now() + parseInt(cacheControlMaxAge || '86400') * 1000); const symbolsV2Text = await symbolsV2Response.text(); const symbols = new Symbols(); symbols.expiresDate = expiresDate; symbols.lastModified = lastModified; symbols.cacheControlExpires = cacheControlExpires || null; symbolsV2Text .split('\n') .filter((line) => line.trim()) .forEach((line) => { const [exchangeIndex, symbol, name, sectorIndex, industryIndex] = line.split('\t'); const companyInfo = { exchange: indexToExchange(parseInt(exchangeIndex)), symbol, name, sector: (0, sectors_1.indexToSector)(parseInt(sectorIndex)), industry: (0, sectors_1.indexToIndustry)(parseInt(industryIndex)), }; symbols.add(companyInfo); }); return symbols; } /** * Returns the symbols object. If the symbols object is not loaded, it will load it. * * @returns {Promise<Symbols>} The Symbols object. */ async function getSymbols() { if (!symbols) { symbols = await loadSymbols(); } if (symbols.expiresDate && symbols.expiresDate < new Date()) { symbols = await loadSymbols(); } return symbols; } /** * Clears the symbols object. * * Forces a reload of the symbols from the API next time getSymbols is called. */ function clearSymbols() { symbols = null; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ltYm9scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvc3ltYm9scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFpQkEsMENBS0M7QUF1Q0Qsa0NBaUNDO0FBT0QsZ0NBUUM7QUFPRCxvQ0FFQztBQXJIRCwrQkFBcUM7QUFDckMsdUNBQTJEO0FBRTNELHFEQUFxRDtBQUN4QyxRQUFBLGtCQUFrQixHQUFHO0lBQ2hDLE1BQU07SUFDTixRQUFRO0lBQ1IsTUFBTTtJQUNOLEtBQUs7SUFDTCxNQUFNO0lBQ04sS0FBSztJQUNMLEtBQUs7SUFDTCxNQUFNO0lBQ04sS0FBSztDQUNOLENBQUM7QUFFRixTQUFnQixlQUFlLENBQUMsS0FBYTtJQUMzQyxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLDBCQUFrQixDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxPQUFPLDBCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFFRCxNQUFhLE9BQU87SUFDbEIsV0FBVyxHQUFnQixJQUFJLENBQUM7SUFDaEMsWUFBWSxHQUFnQixJQUFJLENBQUM7SUFDakMsbUJBQW1CLEdBQWtCLElBQUksQ0FBQztJQUVsQyxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUM5QixNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7SUFDeEMsZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7SUFFMUQsR0FBRyxHQUFHLENBQUMsV0FBd0IsRUFBRSxFQUFFO1FBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7UUFDL0MsTUFBTSxjQUFjLEdBQUcsR0FBRyxXQUFXLENBQUMsUUFBUSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2RSxJQUFJ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