sec-edgar-api
Version:
Fetch and parse SEC earnings reports and other filings. Useful for financial analysis.
105 lines (104 loc) • 5.08 kB
JavaScript
;
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;