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.

141 lines 11.2 kB
import fs from 'fs'; import { LIB_VERSION } from './version'; import { BadRequestError, InsufficientApiAccessError, InternalServerError, NotFoundError, TooManyRequestsError, UnauthorizedError, UnexpectedError, } from './errors'; import os from 'os'; const DOMAIN = 'earningscall.biz'; const API_BASE = `https://v2.api.${DOMAIN}`; let _apiKey; export function setApiKey(apiKey) { _apiKey = apiKey; } export function getApiKey() { if (_apiKey !== undefined) { return _apiKey; } return (process.env.ECALL_API_KEY || process.env.EARNINGSCALL_API_KEY || 'demo'); } export function apiKeyParam() { return { apikey: getApiKey() }; } export function isDemoAccount() { return getApiKey() === 'demo'; } function getUserAgent() { const osType = os.type(); const osRelease = os.release(); const platform = os.platform(); const arch = os.arch(); const nodeVersion = process.version; const earningsCallVersion = LIB_VERSION; return `EarningsCallJavaScript/${earningsCallVersion} (${platform} ${osType}/${osRelease}; ${arch}) Node.js/${nodeVersion.slice(1)}`; } function getHeaders() { return { 'User-Agent': getUserAgent(), 'X-EarningsCall-Version': LIB_VERSION, }; } export function handleErrorStatusCodes(response) { if (response.status === 401) { throw new UnauthorizedError(response); } if (response.status === 404) { throw new NotFoundError(response); } if (response.status === 403) { throw new InsufficientApiAccessError('Insufficient API access rights', response); } if (response.status === 429) { throw new TooManyRequestsError(response); } if (response.status === 400) { throw new BadRequestError(response); } if (response.status === 500) { throw new InternalServerError(response); } if (response.status !== 200) { throw new UnexpectedError(`HTTP error status: ${response.status}`, response); } } export async function doGet(path, params) { const finalParams = { ...apiKeyParam(), ...params, }; const url = new URL(`${API_BASE}/${path}`); Object.entries(finalParams).forEach(([key, value]) => { url.searchParams.set(key, value); }); const response = await fetch(url, { method: 'GET', headers: getHeaders(), }); handleErrorStatusCodes(response); return response; } export async function getEvents(exchange, symbol) { const params = { exchange, symbol, }; const response = await doGet('events', params); return response.json(); } export async function getTranscript(exchange, symbol, year, quarter, level) { const params = { ...apiKeyParam(), exchange, symbol, year: year.toString(), quarter: quarter.toString(), level: (level || 1).toString(), }; const response = await doGet('transcript', params); return response.json(); } export async function getSymbolsV2() { const response = await doGet('symbols-v2.txt', {}); return response; } export async function getSp500CompaniesTxtFile() { const response = await doGet('symbols/sp500.txt', {}); return response.text(); } export async function downloadAudioFile(exchange, symbol, year, quarter, outputFilePath) { const params = { ...apiKeyParam(), exchange, symbol, year: year.toString(), quarter: quarter.toString(), }; const localFilename = outputFilePath || `${exchange}_${symbol}_${year}_${quarter}.mp3`; const url = new URL(`${API_BASE}/audio`); Object.entries(params).forEach(([key, value]) => { url.searchParams.set(key, value); }); const response = await fetch(url, { headers: getHeaders(), }); handleErrorStatusCodes(response); const responseHeaders = response.headers; const contentLength = Number(responseHeaders.get('Content-Length')); const contentType = responseHeaders.get('Content-Type'); const lastModified = new Date(responseHeaders.get('Last-Modified') || ''); const writer = fs.createWriteStream(localFilename); const buffer = await response.arrayBuffer(); const uint8Array = new Uint8Array(buffer); writer.write(uint8Array); const result = { outputFilePath: localFilename, contentLength, contentType: contentType || undefined, lastModified, }; return new Promise((resolve, reject) => { writer.end(() => resolve(result)); writer.on('error', reject); }); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3BCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDeEMsT0FBTyxFQUNMLGVBQWUsRUFDZiwwQkFBMEIsRUFDMUIsbUJBQW1CLEVBQ25CLGFBQWEsRUFDYixvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLGVBQWUsR0FDaEIsTUFBTSxVQUFVLENBQUM7QUFFbEIsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRXBCLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFDO0FBQ2xDLE1BQU0sUUFBUSxHQUFHLGtCQUFrQixNQUFNLEVBQUUsQ0FBQztBQUU1QyxJQUFJLE9BQTJCLENBQUM7QUFFaEMsTUFBTSxVQUFVLFNBQVMsQ0FBQyxNQUEwQjtJQUNsRCxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ25CLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUztJQUN2QixJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUMxQixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBQ0QsT0FBTyxDQUNMLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLElBQUksTUFBTSxDQUN4RSxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXO0lBQ3pCLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQztBQUNqQyxDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWE7SUFDM0IsT0FBTyxTQUFTLEVBQUUsS0FBSyxNQUFNLENBQUM7QUFDaEMsQ0FBQztBQUVELFNBQVMsWUFBWTtJQUNuQixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsTUFBTSxTQUFT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