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.
157 lines • 11.7 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.setApiKey = setApiKey;
exports.getApiKey = getApiKey;
exports.apiKeyParam = apiKeyParam;
exports.isDemoAccount = isDemoAccount;
exports.handleErrorStatusCodes = handleErrorStatusCodes;
exports.doGet = doGet;
exports.getEvents = getEvents;
exports.getTranscript = getTranscript;
exports.getSymbolsV2 = getSymbolsV2;
exports.getSp500CompaniesTxtFile = getSp500CompaniesTxtFile;
exports.downloadAudioFile = downloadAudioFile;
const fs_1 = __importDefault(require("fs"));
const version_1 = require("./version");
const errors_1 = require("./errors");
const os_1 = __importDefault(require("os"));
const DOMAIN = 'earningscall.biz';
const API_BASE = `https://v2.api.${DOMAIN}`;
let _apiKey;
function setApiKey(apiKey) {
_apiKey = apiKey;
}
function getApiKey() {
if (_apiKey !== undefined) {
return _apiKey;
}
return (process.env.ECALL_API_KEY || process.env.EARNINGSCALL_API_KEY || 'demo');
}
function apiKeyParam() {
return { apikey: getApiKey() };
}
function isDemoAccount() {
return getApiKey() === 'demo';
}
function getUserAgent() {
const osType = os_1.default.type();
const osRelease = os_1.default.release();
const platform = os_1.default.platform();
const arch = os_1.default.arch();
const nodeVersion = process.version;
const earningsCallVersion = version_1.LIB_VERSION;
return `EarningsCallJavaScript/${earningsCallVersion} (${platform} ${osType}/${osRelease}; ${arch}) Node.js/${nodeVersion.slice(1)}`;
}
function getHeaders() {
return {
'User-Agent': getUserAgent(),
'X-EarningsCall-Version': version_1.LIB_VERSION,
};
}
function handleErrorStatusCodes(response) {
if (response.status === 401) {
throw new errors_1.UnauthorizedError(response);
}
if (response.status === 404) {
throw new errors_1.NotFoundError(response);
}
if (response.status === 403) {
throw new errors_1.InsufficientApiAccessError('Insufficient API access rights', response);
}
if (response.status === 429) {
throw new errors_1.TooManyRequestsError(response);
}
if (response.status === 400) {
throw new errors_1.BadRequestError(response);
}
if (response.status === 500) {
throw new errors_1.InternalServerError(response);
}
if (response.status !== 200) {
throw new errors_1.UnexpectedError(`HTTP error status: ${response.status}`, response);
}
}
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;
}
async function getEvents(exchange, symbol) {
const params = {
exchange,
symbol,
};
const response = await doGet('events', params);
return response.json();
}
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();
}
async function getSymbolsV2() {
const response = await doGet('symbols-v2.txt', {});
return response;
}
async function getSp500CompaniesTxtFile() {
const response = await doGet('symbols/sp500.txt', {});
return response.text();
}
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_1.default.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFtQkEsOEJBRUM7QUFFRCw4QkFPQztBQUVELGtDQUVDO0FBRUQsc0NBRUM7QUFtQkQsd0RBNEJDO0FBRUQsc0JBa0JDO0FBRUQsOEJBVUM7QUFFRCxzQ0FpQkM7QUFFRCxvQ0FHQztBQUVELDREQUdDO0FBRUQsOENBNkNDO0FBak1ELDRDQUFvQjtBQUNwQix1Q0FBd0M7QUFDeEMscUNBUWtCO0FBRWxCLDRDQUFvQjtBQUVwQixNQUFNLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQztBQUNsQyxNQUFNLFFBQVEsR0FBRyxrQkFBa0IsTUFBTSxFQUFFLENBQUM7QUFFNUMsSUFBSSxPQUEyQixDQUFDO0FBRWhDLFNBQWdCLFNBQVMsQ0FBQyxNQUEwQjtJQUNsRCxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ25CLENBQUM7QUFFRCxTQUFnQixTQUFTO0lBQ3ZCLElBQUksT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxPQUFPLENBQ0wsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsSUFBSSxNQUFNLENBQ3hFLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0IsV0FBVztJQUN6QixPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUM7QUFDakMsQ0FBQztBQUVELFNBQWdCLGFBQWE7SUFDM0IsT0FBTyxTQUFTLEVBQUUsS0FBSyxNQUFNLENBQUM7QUFDaEMsQ0FBQztBQUVELFNBQVMsWUFBWTtJQUNuQixNQUFNLE1BQU0sR0FBRyxZQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsTUFBTSxTQUFTLEdBQUcsWUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQy9CLE1BQU0sUUFBUSxH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