UNPKG

@alpacahq/alpaca-trade-api

Version:

Javascript library for the Alpaca Trade API

859 lines (858 loc) 39.3 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var g = generator.apply(thisArg, _arguments || []), i, q = []; return i = {}, verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i; function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; } function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var m = o[Symbol.asyncIterator], i; return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getCorporateActions = exports.getOptionChain = exports.getOptionSnapshots = exports.getLatestOptionQuotes = exports.getLatestOptionTrades = exports.getMultiOptionTradesAsync = exports.getMultiOptionTrades = exports.getMultiOptionBarsAsync = exports.getMultiOptionBars = exports.getNews = exports.Sort = exports.getLatestCryptoOrderbooks = exports.getCryptoSnapshots = exports.getLatestCryptoQuotes = exports.getLatestCryptoTrades = exports.getLatestCryptoBars = exports.getCryptoBars = exports.getCryptoQuotes = exports.getCryptoTrades = exports.getSnapshots = exports.getSnapshot = exports.getLatestBars = exports.getLatestBar = exports.getLatestQuotes = exports.getLatestQuote = exports.getLatestTrades = exports.getLatestTrade = exports.getMultiBarsAsync = exports.getMultiBars = exports.getBars = exports.getMultiQuotesAsync = exports.getMultiQuotes = exports.getQuotes = exports.getMultiTradesAsync = exports.getMultiTrades = exports.getTrades = exports.getMultiDataV2 = exports.getDataV2 = exports.dataV2HttpRequest = exports.TYPE = exports.Adjustment = void 0; const axios_1 = __importDefault(require("axios")); const entityv2_1 = require("./entityv2"); // Number of data points to return. const V2_MAX_LIMIT = 10000; const V2_NEWS_MAX_LIMIT = 50; const V1_BETA1_MAX_LIMIT = 1000; var Adjustment; (function (Adjustment) { Adjustment["RAW"] = "raw"; Adjustment["DIVIDEND"] = "dividend"; Adjustment["SPLIT"] = "split"; Adjustment["ALL"] = "all"; })(Adjustment || (exports.Adjustment = Adjustment = {})); var TYPE; (function (TYPE) { TYPE["TRADES"] = "trades"; TYPE["QUOTES"] = "quotes"; TYPE["BARS"] = "bars"; TYPE["SNAPSHOTS"] = "snapshots"; })(TYPE || (exports.TYPE = TYPE = {})); function dataV2HttpRequest(url, queryParams, config) { const { dataBaseUrl, keyId, secretKey, oauth } = config; const headers = { "Content-Type": "application/json", "Accept-Encoding": "gzip", }; if (oauth == "") { headers["APCA-API-KEY-ID"] = keyId; headers["APCA-API-SECRET-KEY"] = secretKey; } else { headers["Authorization"] = "Bearer " + oauth; } return axios_1.default .get(`${dataBaseUrl}${url}`, { params: queryParams, headers: headers, }) .catch((err) => { var _a, _b; throw new Error(`code: ${((_a = err.response) === null || _a === void 0 ? void 0 : _a.status) || err.statusCode}, message: ${(_b = err.response) === null || _b === void 0 ? void 0 : _b.data.message}`); }); } exports.dataV2HttpRequest = dataV2HttpRequest; function getQueryLimit(totalLimit, pageLimit, received) { let limit = 0; if (pageLimit !== 0) { limit = pageLimit; } if (totalLimit !== 0) { const remaining = totalLimit - received; if (remaining <= 0) { // this should never happen return -1; } if (limit == 0 || limit > remaining) { limit = remaining; } } return limit; } function getDataV2(endpoint, path, options, config) { return __asyncGenerator(this, arguments, function* getDataV2_1() { var _a; let pageToken = null; let received = 0; const pageLimit = options.pageLimit ? Math.min(options.pageLimit, V2_MAX_LIMIT) : V2_MAX_LIMIT; delete options.pageLimit; options.limit = (_a = options.limit) !== null && _a !== void 0 ? _a : 0; while (options.limit > received || options.limit === 0) { let limit; if (options.limit !== 0) { limit = getQueryLimit(options.limit, pageLimit, received); if (limit == -1) { break; } } else { limit = null; } const resp = yield __await(dataV2HttpRequest(path, Object.assign(Object.assign({}, options), { limit, page_token: pageToken }), config)); const items = resp.data[endpoint] || []; for (const item of items) { yield yield __await(item); } received += items.length; pageToken = resp.data.next_page_token; if (!pageToken) { break; } } }); } exports.getDataV2 = getDataV2; function getMultiDataV2(symbols, url, endpoint, options, config) { return __asyncGenerator(this, arguments, function* getMultiDataV2_1() { var _a; let pageToken = null; let received = 0; const pageLimit = options.pageLimit ? Math.min(options.pageLimit, V2_MAX_LIMIT) : V2_MAX_LIMIT; delete options.pageLimit; options.limit = (_a = options.limit) !== null && _a !== void 0 ? _a : 0; while (options.limit > received || options.limit === 0) { const limit = getQueryLimit(options.limit, pageLimit, received); if (limit == -1) { break; } const params = Object.assign(Object.assign({}, options), { symbols: symbols.join(","), limit: limit, page_token: pageToken }); const resp = yield __await(dataV2HttpRequest(`${url}${endpoint}`, params, config)); const items = resp.data[endpoint]; for (const symbol in items) { for (const data of items[symbol]) { received++; yield yield __await({ symbol: symbol, data: data }); } } pageToken = resp.data.next_page_token; if (!pageToken) { break; } } }); } exports.getMultiDataV2 = getMultiDataV2; function getTrades(symbol, options, config) { return __asyncGenerator(this, arguments, function* getTrades_1() { var _a, e_1, _b, _c; const trades = getDataV2(TYPE.TRADES, `/v2/stocks/${symbol}/${TYPE.TRADES}`, options, config); try { for (var _d = true, trades_1 = __asyncValues(trades), trades_1_1; trades_1_1 = yield __await(trades_1.next()), _a = trades_1_1.done, !_a; _d = true) { _c = trades_1_1.value; _d = false; const trade = _c; yield yield __await((0, entityv2_1.AlpacaTradeV2)(trade)); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (!_d && !_a && (_b = trades_1.return)) yield __await(_b.call(trades_1)); } finally { if (e_1) throw e_1.error; } } }); } exports.getTrades = getTrades; function getMultiTrades(symbols, options, config) { return __awaiter(this, void 0, void 0, function* () { var _a, e_2, _b, _c; const multiTrades = getMultiTradesAsync(symbols, options, config); const trades = new Map(); try { for (var _d = true, multiTrades_1 = __asyncValues(multiTrades), multiTrades_1_1; multiTrades_1_1 = yield multiTrades_1.next(), _a = multiTrades_1_1.done, !_a; _d = true) { _c = multiTrades_1_1.value; _d = false; const t = _c; const items = trades.get(t.Symbol) || new Array(); trades.set(t.Symbol, [...items, t]); } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (!_d && !_a && (_b = multiTrades_1.return)) yield _b.call(multiTrades_1); } finally { if (e_2) throw e_2.error; } } return trades; }); } exports.getMultiTrades = getMultiTrades; function getMultiTradesAsync(symbols, options, config) { return __asyncGenerator(this, arguments, function* getMultiTradesAsync_1() { var _a, e_3, _b, _c; const multiTrades = getMultiDataV2(symbols, "/v2/stocks/", TYPE.TRADES, options, config); try { for (var _d = true, multiTrades_2 = __asyncValues(multiTrades), multiTrades_2_1; multiTrades_2_1 = yield __await(multiTrades_2.next()), _a = multiTrades_2_1.done, !_a; _d = true) { _c = multiTrades_2_1.value; _d = false; const t = _c; t.data = Object.assign(Object.assign({}, t.data), { S: t.symbol }); yield yield __await((0, entityv2_1.AlpacaTradeV2)(t.data)); } } catch (e_3_1) { e_3 = { error: e_3_1 }; } finally { try { if (!_d && !_a && (_b = multiTrades_2.return)) yield __await(_b.call(multiTrades_2)); } finally { if (e_3) throw e_3.error; } } }); } exports.getMultiTradesAsync = getMultiTradesAsync; function getQuotes(symbol, options, config) { return __asyncGenerator(this, arguments, function* getQuotes_1() { var _a, e_4, _b, _c; const quotes = getDataV2(TYPE.QUOTES, `/v2/stocks/${symbol}/${TYPE.QUOTES}`, options, config); try { for (var _d = true, quotes_1 = __asyncValues(quotes), quotes_1_1; quotes_1_1 = yield __await(quotes_1.next()), _a = quotes_1_1.done, !_a; _d = true) { _c = quotes_1_1.value; _d = false; const quote = _c; yield yield __await((0, entityv2_1.AlpacaQuoteV2)(quote)); } } catch (e_4_1) { e_4 = { error: e_4_1 }; } finally { try { if (!_d && !_a && (_b = quotes_1.return)) yield __await(_b.call(quotes_1)); } finally { if (e_4) throw e_4.error; } } }); } exports.getQuotes = getQuotes; function getMultiQuotes(symbols, options, config) { return __awaiter(this, void 0, void 0, function* () { var _a, e_5, _b, _c; const multiQuotes = getMultiQuotesAsync(symbols, options, config); const quotes = new Map(); try { for (var _d = true, multiQuotes_1 = __asyncValues(multiQuotes), multiQuotes_1_1; multiQuotes_1_1 = yield multiQuotes_1.next(), _a = multiQuotes_1_1.done, !_a; _d = true) { _c = multiQuotes_1_1.value; _d = false; const q = _c; const items = quotes.get(q.Symbol) || new Array(); quotes.set(q.Symbol, [...items, q]); } } catch (e_5_1) { e_5 = { error: e_5_1 }; } finally { try { if (!_d && !_a && (_b = multiQuotes_1.return)) yield _b.call(multiQuotes_1); } finally { if (e_5) throw e_5.error; } } return quotes; }); } exports.getMultiQuotes = getMultiQuotes; function getMultiQuotesAsync(symbols, options, config) { return __asyncGenerator(this, arguments, function* getMultiQuotesAsync_1() { var _a, e_6, _b, _c; const multiQuotes = getMultiDataV2(symbols, "/v2/stocks/", TYPE.QUOTES, options, config); try { for (var _d = true, multiQuotes_2 = __asyncValues(multiQuotes), multiQuotes_2_1; multiQuotes_2_1 = yield __await(multiQuotes_2.next()), _a = multiQuotes_2_1.done, !_a; _d = true) { _c = multiQuotes_2_1.value; _d = false; const q = _c; q.data = Object.assign(Object.assign({}, q.data), { S: q.symbol }); yield yield __await((0, entityv2_1.AlpacaQuoteV2)(q.data)); } } catch (e_6_1) { e_6 = { error: e_6_1 }; } finally { try { if (!_d && !_a && (_b = multiQuotes_2.return)) yield __await(_b.call(multiQuotes_2)); } finally { if (e_6) throw e_6.error; } } }); } exports.getMultiQuotesAsync = getMultiQuotesAsync; function getBars(symbol, options, config) { return __asyncGenerator(this, arguments, function* getBars_1() { var _a, e_7, _b, _c; const bars = getDataV2(TYPE.BARS, `/v2/stocks/${symbol}/${TYPE.BARS}`, options, config); try { for (var _d = true, _e = __asyncValues(bars || []), _f; _f = yield __await(_e.next()), _a = _f.done, !_a; _d = true) { _c = _f.value; _d = false; const bar = _c; yield yield __await((0, entityv2_1.AlpacaBarV2)(bar)); } } catch (e_7_1) { e_7 = { error: e_7_1 }; } finally { try { if (!_d && !_a && (_b = _e.return)) yield __await(_b.call(_e)); } finally { if (e_7) throw e_7.error; } } }); } exports.getBars = getBars; function getMultiBars(symbols, options, config) { return __awaiter(this, void 0, void 0, function* () { var _a, e_8, _b, _c; const multiBars = getMultiBarsAsync(symbols, options, config); const bars = new Map(); try { for (var _d = true, multiBars_1 = __asyncValues(multiBars), multiBars_1_1; multiBars_1_1 = yield multiBars_1.next(), _a = multiBars_1_1.done, !_a; _d = true) { _c = multiBars_1_1.value; _d = false; const b = _c; const items = bars.get(b.Symbol) || new Array(); bars.set(b.Symbol, [...items, b]); } } catch (e_8_1) { e_8 = { error: e_8_1 }; } finally { try { if (!_d && !_a && (_b = multiBars_1.return)) yield _b.call(multiBars_1); } finally { if (e_8) throw e_8.error; } } return bars; }); } exports.getMultiBars = getMultiBars; function getMultiBarsAsync(symbols, options, config) { return __asyncGenerator(this, arguments, function* getMultiBarsAsync_1() { var _a, e_9, _b, _c; const multiBars = getMultiDataV2(symbols, "/v2/stocks/", TYPE.BARS, options, config); try { for (var _d = true, multiBars_2 = __asyncValues(multiBars), multiBars_2_1; multiBars_2_1 = yield __await(multiBars_2.next()), _a = multiBars_2_1.done, !_a; _d = true) { _c = multiBars_2_1.value; _d = false; const b = _c; b.data = Object.assign(Object.assign({}, b.data), { S: b.symbol }); yield yield __await((0, entityv2_1.AlpacaBarV2)(b.data)); } } catch (e_9_1) { e_9 = { error: e_9_1 }; } finally { try { if (!_d && !_a && (_b = multiBars_2.return)) yield __await(_b.call(multiBars_2)); } finally { if (e_9) throw e_9.error; } } }); } exports.getMultiBarsAsync = getMultiBarsAsync; function getLatestTrade(symbol, config) { return __awaiter(this, void 0, void 0, function* () { const resp = yield dataV2HttpRequest(`/v2/stocks/${symbol}/trades/latest`, {}, config); return (0, entityv2_1.AlpacaTradeV2)(resp.data.trade); }); } exports.getLatestTrade = getLatestTrade; function getLatestTrades(symbols, config) { return __awaiter(this, void 0, void 0, function* () { const resp = yield dataV2HttpRequest(`/v2/stocks/${TYPE.TRADES}/latest`, { symbols: symbols.join(",") }, config); const multiLatestTrades = resp.data.trades; const multiLatestTradesResp = new Map(); for (const symbol in multiLatestTrades) { multiLatestTradesResp.set(symbol, (0, entityv2_1.AlpacaTradeV2)(Object.assign({ S: symbol }, multiLatestTrades[symbol]))); } return multiLatestTradesResp; }); } exports.getLatestTrades = getLatestTrades; function getLatestQuote(symbol, config) { return __awaiter(this, void 0, void 0, function* () { const resp = yield dataV2HttpRequest(`/v2/stocks/${symbol}/quotes/latest`, {}, config); return (0, entityv2_1.AlpacaQuoteV2)(resp.data.quote); }); } exports.getLatestQuote = getLatestQuote; function getLatestQuotes(symbols, config) { return __awaiter(this, void 0, void 0, function* () { const resp = yield dataV2HttpRequest(`/v2/stocks/${TYPE.QUOTES}/latest`, { symbols: symbols.join(",") }, config); const multiLatestQuotes = resp.data.quotes; const multiLatestQuotesResp = new Map(); for (const symbol in multiLatestQuotes) { multiLatestQuotesResp.set(symbol, (0, entityv2_1.AlpacaQuoteV2)(Object.assign({ S: symbol }, multiLatestQuotes[symbol]))); } return multiLatestQuotesResp; }); } exports.getLatestQuotes = getLatestQuotes; function getLatestBar(symbol, config) { return __awaiter(this, void 0, void 0, function* () { const resp = yield dataV2HttpRequest(`/v2/stocks/${symbol}/bars/latest`, {}, config); return (0, entityv2_1.AlpacaBarV2)(resp.data.bar); }); } exports.getLatestBar = getLatestBar; function getLatestBars(symbols, config) { return __awaiter(this, void 0, void 0, function* () { const resp = yield dataV2HttpRequest(`/v2/stocks/${TYPE.BARS}/latest`, { symbols: symbols.join(",") }, config); const multiLatestBars = resp.data.bars; const multiLatestBarsResp = new Map(); for (const symbol in multiLatestBars) { multiLatestBarsResp.set(symbol, (0, entityv2_1.AlpacaBarV2)(Object.assign({ S: symbol }, multiLatestBars[symbol]))); } return multiLatestBarsResp; }); } exports.getLatestBars = getLatestBars; function getSnapshot(symbol, config) { return __awaiter(this, void 0, void 0, function* () { const resp = yield dataV2HttpRequest(`/v2/stocks/${symbol}/snapshot`, {}, config); return (0, entityv2_1.AlpacaSnapshotV2)(resp.data); }); } exports.getSnapshot = getSnapshot; function getSnapshots(symbols, config) { return __awaiter(this, void 0, void 0, function* () { const resp = yield dataV2HttpRequest(`/v2/stocks/snapshots?symbols=${symbols.join(",")}`, {}, config); const result = Object.entries(resp.data).map(([key, val]) => { return (0, entityv2_1.AlpacaSnapshotV2)(Object.assign({ symbol: key }, val)); }); return result; }); } exports.getSnapshots = getSnapshots; function getCryptoTrades(symbols, options, config) { return __awaiter(this, void 0, void 0, function* () { var _a, e_10, _b, _c; const cryptoTrades = getMultiDataV2(symbols, "/v1beta3/crypto/us/", TYPE.TRADES, options, config); const trades = new Map(); try { for (var _d = true, cryptoTrades_1 = __asyncValues(cryptoTrades), cryptoTrades_1_1; cryptoTrades_1_1 = yield cryptoTrades_1.next(), _a = cryptoTrades_1_1.done, !_a; _d = true) { _c = cryptoTrades_1_1.value; _d = false; const t = _c; const items = trades.get(t.symbol) || new Array(); trades.set(t.symbol, [...items, (0, entityv2_1.AlpacaCryptoTrade)(t.data)]); } } catch (e_10_1) { e_10 = { error: e_10_1 }; } finally { try { if (!_d && !_a && (_b = cryptoTrades_1.return)) yield _b.call(cryptoTrades_1); } finally { if (e_10) throw e_10.error; } } return trades; }); } exports.getCryptoTrades = getCryptoTrades; function getCryptoQuotes(symbols, options, config) { return __awaiter(this, void 0, void 0, function* () { var _a, e_11, _b, _c; const cryptoQuotes = getMultiDataV2(symbols, "/v1beta3/crypto/us/", TYPE.QUOTES, options, config); const quotes = new Map(); try { for (var _d = true, cryptoQuotes_1 = __asyncValues(cryptoQuotes), cryptoQuotes_1_1; cryptoQuotes_1_1 = yield cryptoQuotes_1.next(), _a = cryptoQuotes_1_1.done, !_a; _d = true) { _c = cryptoQuotes_1_1.value; _d = false; const t = _c; const items = quotes.get(t.symbol) || new Array(); quotes.set(t.symbol, [...items, (0, entityv2_1.AlpacaCryptoQuote)(t.data)]); } } catch (e_11_1) { e_11 = { error: e_11_1 }; } finally { try { if (!_d && !_a && (_b = cryptoQuotes_1.return)) yield _b.call(cryptoQuotes_1); } finally { if (e_11) throw e_11.error; } } return quotes; }); } exports.getCryptoQuotes = getCryptoQuotes; function getCryptoBars(symbols, options, config) { return __awaiter(this, void 0, void 0, function* () { var _a, e_12, _b, _c; const cryptoBars = getMultiDataV2(symbols, "/v1beta3/crypto/us/", TYPE.BARS, options, config); const bars = new Map(); try { for (var _d = true, cryptoBars_1 = __asyncValues(cryptoBars), cryptoBars_1_1; cryptoBars_1_1 = yield cryptoBars_1.next(), _a = cryptoBars_1_1.done, !_a; _d = true) { _c = cryptoBars_1_1.value; _d = false; const t = _c; const items = bars.get(t.symbol) || new Array(); bars.set(t.symbol, [...items, (0, entityv2_1.AlpacaCryptoBar)(t.data)]); } } catch (e_12_1) { e_12 = { error: e_12_1 }; } finally { try { if (!_d && !_a && (_b = cryptoBars_1.return)) yield _b.call(cryptoBars_1); } finally { if (e_12) throw e_12.error; } } return bars; }); } exports.getCryptoBars = getCryptoBars; function getLatestCryptoBars(symbols, config) { return __awaiter(this, void 0, void 0, function* () { const params = { symbols: symbols.join(",") }; const resp = yield dataV2HttpRequest(`/v1beta3/crypto/us/latest/bars`, params, config); const multiLatestCryptoBars = resp.data.bars; const result = new Map(); for (const symbol in multiLatestCryptoBars) { const bar = multiLatestCryptoBars[symbol]; result.set(symbol, (0, entityv2_1.AlpacaCryptoBar)(bar)); } return result; }); } exports.getLatestCryptoBars = getLatestCryptoBars; function getLatestCryptoTrades(symbols, config) { return __awaiter(this, void 0, void 0, function* () { const params = { symbols: symbols.join(",") }; const resp = yield dataV2HttpRequest(`/v1beta3/crypto/us/latest/trades`, params, config); const multiLatestCryptoTrades = resp.data.trades; const result = new Map(); for (const symbol in multiLatestCryptoTrades) { const trade = multiLatestCryptoTrades[symbol]; result.set(symbol, (0, entityv2_1.AlpacaCryptoTrade)(trade)); } return result; }); } exports.getLatestCryptoTrades = getLatestCryptoTrades; function getLatestCryptoQuotes(symbols, config) { return __awaiter(this, void 0, void 0, function* () { const params = { symbols: symbols.join(",") }; const resp = yield dataV2HttpRequest(`/v1beta3/crypto/us/latest/quotes`, params, config); const multiLatestCryptoQuotes = resp.data.quotes; const result = new Map(); for (const symbol in multiLatestCryptoQuotes) { const quote = multiLatestCryptoQuotes[symbol]; result.set(symbol, (0, entityv2_1.AlpacaCryptoQuote)(quote)); } return result; }); } exports.getLatestCryptoQuotes = getLatestCryptoQuotes; function getCryptoSnapshots(symbols, config) { return __awaiter(this, void 0, void 0, function* () { const params = { symbols: symbols.join(",") }; const resp = yield dataV2HttpRequest(`/v1beta3/crypto/us/snapshots`, params, config); const snapshots = resp.data.snapshots; const result = new Map(); for (const symbol in snapshots) { const snapshot = snapshots[symbol]; result.set(symbol, (0, entityv2_1.AlpacaCryptoSnapshot)(snapshot)); } return result; }); } exports.getCryptoSnapshots = getCryptoSnapshots; function getLatestCryptoOrderbooks(symbols, config) { return __awaiter(this, void 0, void 0, function* () { const params = { symbols: symbols.join(",") }; const resp = yield dataV2HttpRequest(`/v1beta3/crypto/us/latest/orderbooks`, params, config); const orderbooks = resp.data.orderbooks; const result = new Map(); for (const symbol in orderbooks) { const orderbook = orderbooks[symbol]; result.set(symbol, (0, entityv2_1.AlpacaCryptoOrderbook)(orderbook)); } return result; }); } exports.getLatestCryptoOrderbooks = getLatestCryptoOrderbooks; var Sort; (function (Sort) { Sort["ASC"] = "asc"; Sort["DESC"] = "desc"; })(Sort || (exports.Sort = Sort = {})); function getNewsParams(options) { var _a; const query = {}; query.symbols = ((_a = options.symbols) === null || _a === void 0 ? void 0 : _a.length) > 0 ? options.symbols.join(",") : null; query.start = options.start; query.end = options.end; query.sort = options.sort; query.include_content = options.includeContent; query.exclude_contentless = options.excludeContentless; return query; } function getNews(options, config) { return __awaiter(this, void 0, void 0, function* () { var _a; if (options.totalLimit && options.totalLimit < 0) { throw new Error("negative total limit"); } if (options.pageLimit && options.pageLimit < 0) { throw new Error("negative page limit"); } let pageToken = null; let received = 0; const pageLimit = (options === null || options === void 0 ? void 0 : options.pageLimit) ? Math.min(options.pageLimit, V2_NEWS_MAX_LIMIT) : V2_NEWS_MAX_LIMIT; options === null || options === void 0 ? true : delete options.pageLimit; const totalLimit = (_a = options.totalLimit) !== null && _a !== void 0 ? _a : 10; const result = []; const params = getNewsParams(options); let limit; for (;;) { limit = getQueryLimit(totalLimit, pageLimit, received); if (limit < 1) { break; } const resp = yield dataV2HttpRequest("/v1beta1/news", Object.assign(Object.assign({}, params), { limit: limit, page_token: pageToken }), config); resp.data.news.forEach((n) => result.push((0, entityv2_1.AlpacaNews)(n))); received += resp.data.news.length; pageToken = resp.data.next_page_token; if (!pageToken) { break; } } return result; }); } exports.getNews = getNews; function getMultiOptionBars(symbols, options, config) { return __awaiter(this, void 0, void 0, function* () { var _a, e_13, _b, _c; const multiBars = getMultiOptionBarsAsync(symbols, options, config); const bars = new Map(); try { for (var _d = true, multiBars_3 = __asyncValues(multiBars), multiBars_3_1; multiBars_3_1 = yield multiBars_3.next(), _a = multiBars_3_1.done, !_a; _d = true) { _c = multiBars_3_1.value; _d = false; const b = _c; // symbol will always have a value let symbol = b.Symbol ? b.Symbol : ""; delete b.Symbol; const items = bars.get(symbol) || new Array(); bars.set(symbol, [...items, b]); } } catch (e_13_1) { e_13 = { error: e_13_1 }; } finally { try { if (!_d && !_a && (_b = multiBars_3.return)) yield _b.call(multiBars_3); } finally { if (e_13) throw e_13.error; } } return bars; }); } exports.getMultiOptionBars = getMultiOptionBars; function getMultiOptionBarsAsync(symbols, options, config) { return __asyncGenerator(this, arguments, function* getMultiOptionBarsAsync_1() { var _a, e_14, _b, _c; const multiBars = getMultiDataV2(symbols, "/v1beta1/options/", TYPE.BARS, options, config); try { for (var _d = true, multiBars_4 = __asyncValues(multiBars), multiBars_4_1; multiBars_4_1 = yield __await(multiBars_4.next()), _a = multiBars_4_1.done, !_a; _d = true) { _c = multiBars_4_1.value; _d = false; const b = _c; b.data = Object.assign(Object.assign({}, b.data), { S: b.symbol }); yield yield __await((0, entityv2_1.AlpacaOptionBarV1Beta1)(b.data)); } } catch (e_14_1) { e_14 = { error: e_14_1 }; } finally { try { if (!_d && !_a && (_b = multiBars_4.return)) yield __await(_b.call(multiBars_4)); } finally { if (e_14) throw e_14.error; } } }); } exports.getMultiOptionBarsAsync = getMultiOptionBarsAsync; function getMultiOptionTrades(symbols, options, config) { return __awaiter(this, void 0, void 0, function* () { var _a, e_15, _b, _c; const multiTrades = getMultiOptionTradesAsync(symbols, options, config); const trades = new Map(); try { for (var _d = true, multiTrades_3 = __asyncValues(multiTrades), multiTrades_3_1; multiTrades_3_1 = yield multiTrades_3.next(), _a = multiTrades_3_1.done, !_a; _d = true) { _c = multiTrades_3_1.value; _d = false; const t = _c; // symbol will always have a value let symbol = t.Symbol ? t.Symbol : ""; delete t.Symbol; const items = trades.get(symbol) || new Array(); trades.set(symbol, [...items, t]); } } catch (e_15_1) { e_15 = { error: e_15_1 }; } finally { try { if (!_d && !_a && (_b = multiTrades_3.return)) yield _b.call(multiTrades_3); } finally { if (e_15) throw e_15.error; } } return trades; }); } exports.getMultiOptionTrades = getMultiOptionTrades; function getMultiOptionTradesAsync(symbols, options, config) { return __asyncGenerator(this, arguments, function* getMultiOptionTradesAsync_1() { var _a, e_16, _b, _c; const multiBars = getMultiDataV2(symbols, "/v1beta1/options/", TYPE.TRADES, options, config); try { for (var _d = true, multiBars_5 = __asyncValues(multiBars), multiBars_5_1; multiBars_5_1 = yield __await(multiBars_5.next()), _a = multiBars_5_1.done, !_a; _d = true) { _c = multiBars_5_1.value; _d = false; const b = _c; b.data = Object.assign(Object.assign({}, b.data), { S: b.symbol }); yield yield __await((0, entityv2_1.AlpacaOptionTradeV1Beta1)(b.data)); } } catch (e_16_1) { e_16 = { error: e_16_1 }; } finally { try { if (!_d && !_a && (_b = multiBars_5.return)) yield __await(_b.call(multiBars_5)); } finally { if (e_16) throw e_16.error; } } }); } exports.getMultiOptionTradesAsync = getMultiOptionTradesAsync; function getLatestOptionTrades(symbols, config) { return __awaiter(this, void 0, void 0, function* () { const resp = yield dataV2HttpRequest(`/v1beta1/options/${TYPE.TRADES}/latest`, { symbols: symbols.join(",") }, config); const multiLatestTrades = resp.data.trades; const multiLatestTradesResp = new Map(); for (const symbol in multiLatestTrades) { multiLatestTradesResp.set(symbol, (0, entityv2_1.AlpacaOptionTradeV1Beta1)(Object.assign({}, multiLatestTrades[symbol]))); } return multiLatestTradesResp; }); } exports.getLatestOptionTrades = getLatestOptionTrades; function getLatestOptionQuotes(symbols, config) { return __awaiter(this, void 0, void 0, function* () { const resp = yield dataV2HttpRequest(`/v1beta1/options/${TYPE.QUOTES}/latest`, { symbols: symbols.join(",") }, config); const multiLatestQuotes = resp.data.quotes; const multiLatestQuotesResp = new Map(); for (const symbol in multiLatestQuotes) { multiLatestQuotesResp.set(symbol, (0, entityv2_1.AlpacaOptionQuoteV1Beta1)(Object.assign({}, multiLatestQuotes[symbol]))); } return multiLatestQuotesResp; }); } exports.getLatestOptionQuotes = getLatestOptionQuotes; function getOptionSnapshots(symbols, config) { return __awaiter(this, void 0, void 0, function* () { const resp = yield dataV2HttpRequest(`/v1beta1/options/snapshots?symbols=${symbols.join(",")}`, {}, config); const result = Object.entries(resp.data.snapshots).map(([key, val]) => { return (0, entityv2_1.AlpacaOptionSnapshotV1Beta1)(Object.assign({ Symbol: key }, val)); }); return result; }); } exports.getOptionSnapshots = getOptionSnapshots; function getOptionChain(underlyingSymbol, options, config) { return __awaiter(this, void 0, void 0, function* () { var _a; if (options.totalLimit && options.totalLimit < 0) { throw new Error("negative total limit"); } if (options.pageLimit && options.pageLimit < 0) { throw new Error("negative page limit"); } let pageToken = null; let received = 0; const pageLimit = (options === null || options === void 0 ? void 0 : options.pageLimit) ? Math.min(options.pageLimit, V1_BETA1_MAX_LIMIT) : V1_BETA1_MAX_LIMIT; delete options.pageLimit; const totalLimit = (_a = options === null || options === void 0 ? void 0 : options.totalLimit) !== null && _a !== void 0 ? _a : 10000; delete options.totalLimit; const result = []; let limit; for (;;) { limit = getQueryLimit(totalLimit, pageLimit, received); if (limit < 1) { break; } const resp = yield dataV2HttpRequest(`/v1beta1/options/snapshots/${underlyingSymbol}`, Object.assign(Object.assign({}, options), { limit: limit, page_token: pageToken }), config); const res = Object.entries(resp.data.snapshots).map(([key, val]) => { return (0, entityv2_1.AlpacaOptionSnapshotV1Beta1)(Object.assign({ Symbol: key }, val)); }); received = received + res.length; result.push(...res); pageToken = resp.data.next_page_token; if (!pageToken) { break; } } return result; }); } exports.getOptionChain = getOptionChain; function getCorporateActions(symbols, options, config) { return __awaiter(this, void 0, void 0, function* () { var _a, _b; if (options.totalLimit && options.totalLimit < 0) { throw new Error("negative total limit"); } if (options.pageLimit && options.pageLimit < 0) { throw new Error("negative page limit"); } let pageToken = null; let received = 0; const pageLimit = (options === null || options === void 0 ? void 0 : options.pageLimit) ? Math.min(options.pageLimit, V1_BETA1_MAX_LIMIT) : V1_BETA1_MAX_LIMIT; options === null || options === void 0 ? true : delete options.pageLimit; const totalLimit = (_a = options === null || options === void 0 ? void 0 : options.totalLimit) !== null && _a !== void 0 ? _a : V2_MAX_LIMIT; delete options.totalLimit; let result = {}; const types = (_b = options === null || options === void 0 ? void 0 : options.types) === null || _b === void 0 ? void 0 : _b.join(","); const params = Object.assign(Object.assign({}, options), { symbols, types }); let limit; for (;;) { limit = getQueryLimit(totalLimit, pageLimit, received); if (limit < 1) { break; } const resp = yield dataV2HttpRequest(`/v1beta1/corporate-actions`, Object.assign(Object.assign({}, params), { limit: limit, page_token: pageToken }), config); const cas = (0, entityv2_1.convertCorporateActions)(resp.data.corporate_actions); result = (0, entityv2_1.mergeCorporateActions)(result, cas); received += (0, entityv2_1.getCorporateActionsSize)(cas); pageToken = resp.data.next_page_token; if (!pageToken) { break; } } return result; }); } exports.getCorporateActions = getCorporateActions;