UNPKG

sec-edgar-api

Version:

Fetch and parse SEC earnings reports and other filings. Useful for financial analysis.

105 lines (104 loc) 5.08 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; Object.defineProperty(exports, "__esModule", { value: true }); var https = require("https"); var Client = /** @class */ (function () { function Client(args) { if (args === void 0) { args = { httpClient: https, defaultHeaders: { // this can be any user agent, just not empty 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36 RuxitSynthetic/1.0 v1060014908909962014 t8797611264074608560 ath259cea6f altpriv cvcv=2 smf=0', }, }; } var httpClient = args.httpClient, defaultHeaders = args.defaultHeaders; this.httpClient = httpClient !== null && httpClient !== void 0 ? httpClient : https; this.defaultHeaders = defaultHeaders !== null && defaultHeaders !== void 0 ? defaultHeaders : {}; } Client.prototype.setDefaultHeaders = function (headers) { this.defaultHeaders = headers; }; Client.prototype.request = function (params) { var _this = this; var url = params.url, data = params.data, headers = params.headers, onChunk = params.onChunk, onResponse = params.onResponse, onError = params.onError, onSuccess = params.onSuccess, _a = params.resolveData, resolveData = _a === void 0 ? true : _a, _b = params.method, method = _b === void 0 ? 'GET' : _b, _c = params.timeout, timeout = _c === void 0 ? 86400000 : _c; var allHeaders = __assign(__assign({}, this.defaultHeaders), headers); return new Promise(function (resolve, reject) { var responseData = ''; var request = _this.httpClient.request(url, function (res) { var _a, _b, _c; var lengthTotal = parseInt((_a = res.headers['content-length']) !== null && _a !== void 0 ? _a : '0'); var lengthCurrent = 0; onResponse === null || onResponse === void 0 ? void 0 : onResponse(res); if (res.statusCode !== 200) { reject({ statusCode: (_b = res.statusCode) !== null && _b !== void 0 ? _b : 400, message: (_c = res.statusMessage) !== null && _c !== void 0 ? _c : 'Bad Request', data: null, }); } res.on('data', function (chunk) { lengthCurrent += chunk.length; if (resolveData) { responseData += chunk; } onChunk === null || onChunk === void 0 ? void 0 : onChunk({ percentComplete: lengthCurrent / lengthTotal, chunk: Buffer.from(chunk), }); }); res.on('error', function (err) { var _a, _b; onError === null || onError === void 0 ? void 0 : onError(err); reject({ statusCode: (_a = res.statusCode) !== null && _a !== void 0 ? _a : 400, message: (_b = res.statusMessage) !== null && _b !== void 0 ? _b : 'Bad Request', data: null, }); }); res.on('end', function () { var _a, _b; var buffer = Buffer.from(responseData); var clientResponse = { statusCode: (_a = res.statusCode) !== null && _a !== void 0 ? _a : 200, message: (_b = res.statusMessage) !== null && _b !== void 0 ? _b : 'OK', data: buffer, }; onSuccess === null || onSuccess === void 0 ? void 0 : onSuccess(clientResponse); resolve(clientResponse); }); }); request.on('timeout', function () { request.destroy(); reject({ statusCode: null, message: 'Connection Timeout', data: null, }); }); request.setTimeout(timeout, function () { return reject("timeout after ".concat(timeout, "ms")); }); for (var key in allHeaders) { request.setHeader(key, allHeaders[key]); } if (data) { if (typeof data === 'string') request.write(data); else request.write(JSON.stringify(data)); } request.method = method; request.end(); }); }; return Client; }()); exports.default = Client;