@adaptic/utils 0.0.382 → 0.0.900
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +153 -61
- package/dist/index.cjs +60090 -5244
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +59829 -5244
- package/dist/index.mjs.map +1 -1
- package/dist/test.js +733 -383
- package/dist/test.js.map +1 -1
- package/dist/types/__tests__/alpaca-functions.test.d.ts +2 -0
- package/dist/types/__tests__/alpaca-functions.test.d.ts.map +1 -0
- package/dist/types/__tests__/api-endpoints.test.d.ts +2 -0
- package/dist/types/__tests__/api-endpoints.test.d.ts.map +1 -0
- package/dist/types/__tests__/asset-allocation.test.d.ts +2 -0
- package/dist/types/__tests__/asset-allocation.test.d.ts.map +1 -0
- package/dist/types/__tests__/auth-validator.test.d.ts +2 -0
- package/dist/types/__tests__/auth-validator.test.d.ts.map +1 -0
- package/dist/types/__tests__/cache.test.d.ts +2 -0
- package/dist/types/__tests__/cache.test.d.ts.map +1 -0
- package/dist/types/__tests__/errors.test.d.ts +2 -0
- package/dist/types/__tests__/errors.test.d.ts.map +1 -0
- package/dist/types/__tests__/financial-regression.test.d.ts +2 -0
- package/dist/types/__tests__/financial-regression.test.d.ts.map +1 -0
- package/dist/types/__tests__/format-tools.test.d.ts +2 -0
- package/dist/types/__tests__/format-tools.test.d.ts.map +1 -0
- package/dist/types/__tests__/http-keep-alive.test.d.ts +2 -0
- package/dist/types/__tests__/http-keep-alive.test.d.ts.map +1 -0
- package/dist/types/__tests__/http-timeout.test.d.ts +2 -0
- package/dist/types/__tests__/http-timeout.test.d.ts.map +1 -0
- package/dist/types/__tests__/logger.test.d.ts +2 -0
- package/dist/types/__tests__/logger.test.d.ts.map +1 -0
- package/dist/types/__tests__/market-time.test.d.ts +2 -0
- package/dist/types/__tests__/market-time.test.d.ts.map +1 -0
- package/dist/types/__tests__/misc-utils.test.d.ts +2 -0
- package/dist/types/__tests__/misc-utils.test.d.ts.map +1 -0
- package/dist/types/__tests__/paginator.test.d.ts +2 -0
- package/dist/types/__tests__/paginator.test.d.ts.map +1 -0
- package/dist/types/__tests__/performance-metrics.test.d.ts +2 -0
- package/dist/types/__tests__/performance-metrics.test.d.ts.map +1 -0
- package/dist/types/__tests__/polygon.test.d.ts +2 -0
- package/dist/types/__tests__/polygon.test.d.ts.map +1 -0
- package/dist/types/__tests__/price-utils.test.d.ts +2 -0
- package/dist/types/__tests__/price-utils.test.d.ts.map +1 -0
- package/dist/types/__tests__/property-based-financial.test.d.ts +2 -0
- package/dist/types/__tests__/property-based-financial.test.d.ts.map +1 -0
- package/dist/types/__tests__/rate-limiter.test.d.ts +2 -0
- package/dist/types/__tests__/rate-limiter.test.d.ts.map +1 -0
- package/dist/types/__tests__/schema-validation.test.d.ts +2 -0
- package/dist/types/__tests__/schema-validation.test.d.ts.map +1 -0
- package/dist/types/__tests__/technical-analysis.test.d.ts +2 -0
- package/dist/types/__tests__/technical-analysis.test.d.ts.map +1 -0
- package/dist/types/__tests__/time-utils.test.d.ts +2 -0
- package/dist/types/__tests__/time-utils.test.d.ts.map +1 -0
- package/dist/types/adaptic.d.ts +2 -2
- package/dist/types/adaptic.d.ts.map +1 -1
- package/dist/types/alpaca/client.d.ts +95 -0
- package/dist/types/alpaca/client.d.ts.map +1 -0
- package/dist/types/alpaca/crypto/data.d.ts +281 -0
- package/dist/types/alpaca/crypto/data.d.ts.map +1 -0
- package/dist/types/alpaca/crypto/index.d.ts +75 -0
- package/dist/types/alpaca/crypto/index.d.ts.map +1 -0
- package/dist/types/alpaca/crypto/orders.d.ts +221 -0
- package/dist/types/alpaca/crypto/orders.d.ts.map +1 -0
- package/dist/types/alpaca/index.d.ts +205 -0
- package/dist/types/alpaca/index.d.ts.map +1 -0
- package/dist/types/alpaca/legacy/account.d.ts +34 -0
- package/dist/types/alpaca/legacy/account.d.ts.map +1 -0
- package/dist/types/alpaca/legacy/assets.d.ts +13 -0
- package/dist/types/alpaca/legacy/assets.d.ts.map +1 -0
- package/dist/types/alpaca/legacy/auth.d.ts +18 -0
- package/dist/types/alpaca/legacy/auth.d.ts.map +1 -0
- package/dist/types/alpaca/legacy/index.d.ts +15 -0
- package/dist/types/alpaca/legacy/index.d.ts.map +1 -0
- package/dist/types/alpaca/legacy/market-data.d.ts +32 -0
- package/dist/types/alpaca/legacy/market-data.d.ts.map +1 -0
- package/dist/types/alpaca/legacy/orders.d.ts +84 -0
- package/dist/types/alpaca/legacy/orders.d.ts.map +1 -0
- package/dist/types/alpaca/legacy/positions.d.ts +66 -0
- package/dist/types/alpaca/legacy/positions.d.ts.map +1 -0
- package/dist/types/alpaca/legacy/utils.d.ts +18 -0
- package/dist/types/alpaca/legacy/utils.d.ts.map +1 -0
- package/dist/types/alpaca/market-data/bars.d.ts +142 -0
- package/dist/types/alpaca/market-data/bars.d.ts.map +1 -0
- package/dist/types/alpaca/market-data/index.d.ts +13 -0
- package/dist/types/alpaca/market-data/index.d.ts.map +1 -0
- package/dist/types/alpaca/market-data/news.d.ts +87 -0
- package/dist/types/alpaca/market-data/news.d.ts.map +1 -0
- package/dist/types/alpaca/market-data/quotes.d.ts +85 -0
- package/dist/types/alpaca/market-data/quotes.d.ts.map +1 -0
- package/dist/types/alpaca/market-data/trades.d.ts +98 -0
- package/dist/types/alpaca/market-data/trades.d.ts.map +1 -0
- package/dist/types/alpaca/options/contracts.d.ts +279 -0
- package/dist/types/alpaca/options/contracts.d.ts.map +1 -0
- package/dist/types/alpaca/options/data.d.ts +126 -0
- package/dist/types/alpaca/options/data.d.ts.map +1 -0
- package/dist/types/alpaca/options/index.d.ts +17 -0
- package/dist/types/alpaca/options/index.d.ts.map +1 -0
- package/dist/types/alpaca/options/orders.d.ts +366 -0
- package/dist/types/alpaca/options/orders.d.ts.map +1 -0
- package/dist/types/alpaca/options/strategies.d.ts +224 -0
- package/dist/types/alpaca/options/strategies.d.ts.map +1 -0
- package/dist/types/alpaca/streams/base-stream.d.ts +143 -0
- package/dist/types/alpaca/streams/base-stream.d.ts.map +1 -0
- package/dist/types/alpaca/streams/crypto-stream.d.ts +173 -0
- package/dist/types/alpaca/streams/crypto-stream.d.ts.map +1 -0
- package/dist/types/alpaca/streams/index.d.ts +54 -0
- package/dist/types/alpaca/streams/index.d.ts.map +1 -0
- package/dist/types/alpaca/streams/option-stream.d.ts +167 -0
- package/dist/types/alpaca/streams/option-stream.d.ts.map +1 -0
- package/dist/types/alpaca/streams/stock-stream.d.ts +176 -0
- package/dist/types/alpaca/streams/stock-stream.d.ts.map +1 -0
- package/dist/types/alpaca/streams/stream-manager.d.ts +277 -0
- package/dist/types/alpaca/streams/stream-manager.d.ts.map +1 -0
- package/dist/types/alpaca/streams/trading-stream.d.ts +186 -0
- package/dist/types/alpaca/streams/trading-stream.d.ts.map +1 -0
- package/dist/types/alpaca/streams.d.ts +88 -0
- package/dist/types/alpaca/streams.d.ts.map +1 -0
- package/dist/types/alpaca/test-imports.d.ts +7 -0
- package/dist/types/alpaca/test-imports.d.ts.map +1 -0
- package/dist/types/alpaca/trading/account.d.ts +198 -0
- package/dist/types/alpaca/trading/account.d.ts.map +1 -0
- package/dist/types/alpaca/trading/bracket-orders.d.ts +162 -0
- package/dist/types/alpaca/trading/bracket-orders.d.ts.map +1 -0
- package/dist/types/alpaca/trading/clock.d.ts +99 -0
- package/dist/types/alpaca/trading/clock.d.ts.map +1 -0
- package/dist/types/alpaca/trading/index.d.ts +15 -0
- package/dist/types/alpaca/trading/index.d.ts.map +1 -0
- package/dist/types/alpaca/trading/oco-orders.d.ts +203 -0
- package/dist/types/alpaca/trading/oco-orders.d.ts.map +1 -0
- package/dist/types/alpaca/trading/order-utils.d.ts +404 -0
- package/dist/types/alpaca/trading/order-utils.d.ts.map +1 -0
- package/dist/types/alpaca/trading/orders.d.ts +199 -0
- package/dist/types/alpaca/trading/orders.d.ts.map +1 -0
- package/dist/types/alpaca/trading/oto-orders.d.ts +282 -0
- package/dist/types/alpaca/trading/oto-orders.d.ts.map +1 -0
- package/dist/types/alpaca/trading/positions.d.ts +389 -0
- package/dist/types/alpaca/trading/positions.d.ts.map +1 -0
- package/dist/types/alpaca/trading/smart-orders.d.ts +301 -0
- package/dist/types/alpaca/trading/smart-orders.d.ts.map +1 -0
- package/dist/types/alpaca/trading/trailing-stops.d.ts +240 -0
- package/dist/types/alpaca/trading/trailing-stops.d.ts.map +1 -0
- package/dist/types/alpaca-market-data-api.d.ts +12 -10
- package/dist/types/alpaca-market-data-api.d.ts.map +1 -1
- package/dist/types/alpaca-trading-api.d.ts +12 -12
- package/dist/types/alpaca-trading-api.d.ts.map +1 -1
- package/dist/types/alphavantage.d.ts +1 -1
- package/dist/types/alphavantage.d.ts.map +1 -1
- package/dist/types/asset-allocation-algorithm.d.ts +7 -1
- package/dist/types/asset-allocation-algorithm.d.ts.map +1 -1
- package/dist/types/cache/stampede-protected-cache.d.ts.map +1 -1
- package/dist/types/config/api-endpoints.d.ts +94 -0
- package/dist/types/config/api-endpoints.d.ts.map +1 -0
- package/dist/types/crypto.d.ts +2 -2
- package/dist/types/crypto.d.ts.map +1 -1
- package/dist/types/display-manager.d.ts +1 -1
- package/dist/types/display-manager.d.ts.map +1 -1
- package/dist/types/errors/index.d.ts +130 -0
- package/dist/types/errors/index.d.ts.map +1 -0
- package/dist/types/examples/asset-allocation-example.d.ts +7 -6
- package/dist/types/examples/asset-allocation-example.d.ts.map +1 -1
- package/dist/types/examples/rate-limiter-example.d.ts +7 -0
- package/dist/types/examples/rate-limiter-example.d.ts.map +1 -0
- package/dist/types/format-tools.d.ts.map +1 -1
- package/dist/types/http-timeout.d.ts +37 -0
- package/dist/types/http-timeout.d.ts.map +1 -0
- package/dist/types/index.d.ts +393 -55
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/logger.d.ts +56 -0
- package/dist/types/logger.d.ts.map +1 -0
- package/dist/types/logging.d.ts +1 -1
- package/dist/types/logging.d.ts.map +1 -1
- package/dist/types/market-hours.d.ts.map +1 -1
- package/dist/types/market-time.d.ts +75 -13
- package/dist/types/market-time.d.ts.map +1 -1
- package/dist/types/metrics-calcs.d.ts.map +1 -1
- package/dist/types/misc-utils.d.ts +4 -1
- package/dist/types/misc-utils.d.ts.map +1 -1
- package/dist/types/performance-metrics.d.ts +4 -4
- package/dist/types/performance-metrics.d.ts.map +1 -1
- package/dist/types/polygon-indices.d.ts +3 -3
- package/dist/types/polygon-indices.d.ts.map +1 -1
- package/dist/types/polygon.d.ts +1 -1
- package/dist/types/polygon.d.ts.map +1 -1
- package/dist/types/price-utils.d.ts.map +1 -1
- package/dist/types/rate-limiter.d.ts +171 -0
- package/dist/types/rate-limiter.d.ts.map +1 -0
- package/dist/types/schemas/alpaca-schemas.d.ts +779 -0
- package/dist/types/schemas/alpaca-schemas.d.ts.map +1 -0
- package/dist/types/schemas/alphavantage-schemas.d.ts +255 -0
- package/dist/types/schemas/alphavantage-schemas.d.ts.map +1 -0
- package/dist/types/schemas/index.d.ts +21 -0
- package/dist/types/schemas/index.d.ts.map +1 -0
- package/dist/types/schemas/polygon-schemas.d.ts +551 -0
- package/dist/types/schemas/polygon-schemas.d.ts.map +1 -0
- package/dist/types/schemas/validate-response.d.ts +88 -0
- package/dist/types/schemas/validate-response.d.ts.map +1 -0
- package/dist/types/technical-analysis.d.ts +9 -9
- package/dist/types/technical-analysis.d.ts.map +1 -1
- package/dist/types/time-utils.d.ts.map +1 -1
- package/dist/types/types/adaptic-types.d.ts +1 -1
- package/dist/types/types/adaptic-types.d.ts.map +1 -1
- package/dist/types/types/alpaca-types.d.ts +172 -98
- package/dist/types/types/alpaca-types.d.ts.map +1 -1
- package/dist/types/types/alphavantage-types.d.ts +2 -2
- package/dist/types/types/asset-allocation-types.d.ts +11 -11
- package/dist/types/types/index.d.ts +8 -8
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/types/types/logging-types.d.ts +2 -2
- package/dist/types/types/logging-types.d.ts.map +1 -1
- package/dist/types/types/market-time-types.d.ts +4 -4
- package/dist/types/types/market-time-types.d.ts.map +1 -1
- package/dist/types/types/metrics-types.d.ts +3 -3
- package/dist/types/types/metrics-types.d.ts.map +1 -1
- package/dist/types/types/polygon-indices-types.d.ts +6 -6
- package/dist/types/types/polygon-types.d.ts +3 -3
- package/dist/types/types/ta-types.d.ts +3 -3
- package/dist/types/utils/auth-validator.d.ts +32 -0
- package/dist/types/utils/auth-validator.d.ts.map +1 -0
- package/dist/types/utils/http-keep-alive.d.ts +110 -0
- package/dist/types/utils/http-keep-alive.d.ts.map +1 -0
- package/dist/types/utils/paginator.d.ts +154 -0
- package/dist/types/utils/paginator.d.ts.map +1 -0
- package/dist/types/utils/retry.d.ts +78 -0
- package/dist/types/utils/retry.d.ts.map +1 -0
- package/package.json +25 -5
- package/dist/types/alpaca-functions.d.ts +0 -233
- package/dist/types/alpaca-functions.d.ts.map +0 -1
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stock Data Stream Module
|
|
3
|
+
* Real-time stock quotes, trades, and bars via Alpaca WebSocket
|
|
4
|
+
*
|
|
5
|
+
* Uses the official Alpaca SDK data_stream_v2 for reliable real-time data.
|
|
6
|
+
* Provides automatic reconnection, subscription management, and type-safe events.
|
|
7
|
+
*/
|
|
8
|
+
import { EventEmitter } from "events";
|
|
9
|
+
import { AlpacaClient } from "../client";
|
|
10
|
+
import { AlpacaTradeStream, AlpacaQuoteStream, AlpacaBarStream, AlpacaDailyBarStream, AlpacaUpdatedBarStream, AlpacaTradingStatusStream, AlpacaLULDStream, AlpacaTradeCorrectionStream, AlpacaTradeCancelStream, AlpacaOrderImbalanceStream, AlpacaStockStreamMessage } from "../../types/alpaca-types";
|
|
11
|
+
import { StreamConfig, StreamState, SubscriptionRequest } from "./base-stream";
|
|
12
|
+
/**
|
|
13
|
+
* Stock stream data feed type
|
|
14
|
+
*/
|
|
15
|
+
export type StockDataFeed = "sip" | "iex" | "test";
|
|
16
|
+
/**
|
|
17
|
+
* Stock stream configuration
|
|
18
|
+
*/
|
|
19
|
+
export interface StockStreamConfig extends StreamConfig {
|
|
20
|
+
/** Data feed to use */
|
|
21
|
+
feed: StockDataFeed;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Default stock stream configuration
|
|
25
|
+
*/
|
|
26
|
+
export declare const DEFAULT_STOCK_STREAM_CONFIG: Partial<StockStreamConfig>;
|
|
27
|
+
/**
|
|
28
|
+
* Stock stream event map for type-safe event handling
|
|
29
|
+
*/
|
|
30
|
+
export interface StockStreamEventMap {
|
|
31
|
+
trade: AlpacaTradeStream;
|
|
32
|
+
quote: AlpacaQuoteStream;
|
|
33
|
+
bar: AlpacaBarStream;
|
|
34
|
+
dailyBar: AlpacaDailyBarStream;
|
|
35
|
+
updatedBar: AlpacaUpdatedBarStream;
|
|
36
|
+
tradingStatus: AlpacaTradingStatusStream;
|
|
37
|
+
luld: AlpacaLULDStream;
|
|
38
|
+
tradeCorrection: AlpacaTradeCorrectionStream;
|
|
39
|
+
tradeCancel: AlpacaTradeCancelStream;
|
|
40
|
+
orderImbalance: AlpacaOrderImbalanceStream;
|
|
41
|
+
data: AlpacaStockStreamMessage;
|
|
42
|
+
subscription: {
|
|
43
|
+
trades: string[];
|
|
44
|
+
quotes: string[];
|
|
45
|
+
bars: string[];
|
|
46
|
+
};
|
|
47
|
+
authenticated: void;
|
|
48
|
+
connected: void;
|
|
49
|
+
disconnected: {
|
|
50
|
+
code: number;
|
|
51
|
+
reason: string;
|
|
52
|
+
};
|
|
53
|
+
stateChange: StreamState;
|
|
54
|
+
error: Error;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Stock Data Stream class for receiving real-time stock market data
|
|
58
|
+
* Uses the official Alpaca SDK data_stream_v2 for WebSocket management.
|
|
59
|
+
*/
|
|
60
|
+
export declare class StockDataStream extends EventEmitter {
|
|
61
|
+
private client;
|
|
62
|
+
private socket;
|
|
63
|
+
private state;
|
|
64
|
+
private feed;
|
|
65
|
+
private config;
|
|
66
|
+
private subscriptions;
|
|
67
|
+
private pendingSubscriptions;
|
|
68
|
+
constructor(client: AlpacaClient, config?: Partial<StockStreamConfig>);
|
|
69
|
+
/**
|
|
70
|
+
* Log helper
|
|
71
|
+
*/
|
|
72
|
+
private log;
|
|
73
|
+
/**
|
|
74
|
+
* Get the current stream state
|
|
75
|
+
*/
|
|
76
|
+
getState(): StreamState;
|
|
77
|
+
/**
|
|
78
|
+
* Check if stream is connected and authenticated
|
|
79
|
+
*/
|
|
80
|
+
isStreamConnected(): boolean;
|
|
81
|
+
/**
|
|
82
|
+
* Get current subscriptions
|
|
83
|
+
*/
|
|
84
|
+
getSubscriptions(): SubscriptionRequest;
|
|
85
|
+
/**
|
|
86
|
+
* Set the data feed
|
|
87
|
+
*/
|
|
88
|
+
setFeed(feed: StockDataFeed): void;
|
|
89
|
+
/**
|
|
90
|
+
* Get the current data feed
|
|
91
|
+
*/
|
|
92
|
+
getFeed(): StockDataFeed;
|
|
93
|
+
/**
|
|
94
|
+
* Connect to the stock data stream using SDK
|
|
95
|
+
*/
|
|
96
|
+
connect(): Promise<void>;
|
|
97
|
+
/**
|
|
98
|
+
* Set up all data event handlers for SDK
|
|
99
|
+
*/
|
|
100
|
+
private setupDataHandlers;
|
|
101
|
+
/**
|
|
102
|
+
* Disconnect from the stock data stream
|
|
103
|
+
*/
|
|
104
|
+
disconnect(): void;
|
|
105
|
+
/**
|
|
106
|
+
* Subscribe to market data
|
|
107
|
+
*/
|
|
108
|
+
subscribe(request: SubscriptionRequest): void;
|
|
109
|
+
/**
|
|
110
|
+
* Unsubscribe from market data
|
|
111
|
+
*/
|
|
112
|
+
unsubscribe(request: SubscriptionRequest): void;
|
|
113
|
+
/**
|
|
114
|
+
* Subscribe to stock trades
|
|
115
|
+
*/
|
|
116
|
+
subscribeTrades(symbols: string[]): void;
|
|
117
|
+
/**
|
|
118
|
+
* Subscribe to stock quotes
|
|
119
|
+
*/
|
|
120
|
+
subscribeQuotes(symbols: string[]): void;
|
|
121
|
+
/**
|
|
122
|
+
* Subscribe to stock bars
|
|
123
|
+
*/
|
|
124
|
+
subscribeBars(symbols: string[]): void;
|
|
125
|
+
/**
|
|
126
|
+
* Subscribe to all data types for symbols
|
|
127
|
+
*/
|
|
128
|
+
subscribeAll(symbols: string[]): void;
|
|
129
|
+
/**
|
|
130
|
+
* Unsubscribe from stock trades
|
|
131
|
+
*/
|
|
132
|
+
unsubscribeTrades(symbols: string[]): void;
|
|
133
|
+
/**
|
|
134
|
+
* Unsubscribe from stock quotes
|
|
135
|
+
*/
|
|
136
|
+
unsubscribeQuotes(symbols: string[]): void;
|
|
137
|
+
/**
|
|
138
|
+
* Unsubscribe from stock bars
|
|
139
|
+
*/
|
|
140
|
+
unsubscribeBars(symbols: string[]): void;
|
|
141
|
+
/**
|
|
142
|
+
* Unsubscribe from all data types for symbols
|
|
143
|
+
*/
|
|
144
|
+
unsubscribeAll(symbols: string[]): void;
|
|
145
|
+
/**
|
|
146
|
+
* Send subscription request using SDK methods
|
|
147
|
+
*/
|
|
148
|
+
private sendSubscription;
|
|
149
|
+
/**
|
|
150
|
+
* Send unsubscription request using SDK methods
|
|
151
|
+
*/
|
|
152
|
+
private sendUnsubscription;
|
|
153
|
+
private convertTrade;
|
|
154
|
+
private convertQuote;
|
|
155
|
+
private convertBar;
|
|
156
|
+
private convertDailyBar;
|
|
157
|
+
private convertUpdatedBar;
|
|
158
|
+
private convertStatus;
|
|
159
|
+
private convertLuld;
|
|
160
|
+
private convertCancelError;
|
|
161
|
+
private convertCorrection;
|
|
162
|
+
/**
|
|
163
|
+
* Type-safe event listener registration
|
|
164
|
+
*/
|
|
165
|
+
on<K extends keyof StockStreamEventMap>(event: K, listener: (data: StockStreamEventMap[K]) => void): this;
|
|
166
|
+
/**
|
|
167
|
+
* Type-safe event emitter
|
|
168
|
+
*/
|
|
169
|
+
emit<K extends keyof StockStreamEventMap>(event: K, data?: StockStreamEventMap[K]): boolean;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Create a stock data stream for a client
|
|
173
|
+
*/
|
|
174
|
+
export declare function createStockDataStream(client: AlpacaClient, config?: Partial<StockStreamConfig>): StockDataStream;
|
|
175
|
+
export default StockDataStream;
|
|
176
|
+
//# sourceMappingURL=stock-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stock-stream.d.ts","sourceRoot":"","sources":["../../../../src/alpaca/streams/stock-stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stream Manager Module
|
|
3
|
+
* Unified management of all Alpaca WebSocket streams with connection pooling and coordination.
|
|
4
|
+
*
|
|
5
|
+
* Features:
|
|
6
|
+
* - Centralized stream lifecycle management
|
|
7
|
+
* - Connection pooling and reuse
|
|
8
|
+
* - Automatic reconnection handling
|
|
9
|
+
* - Coordinated subscriptions across streams
|
|
10
|
+
* - Health monitoring and status reporting
|
|
11
|
+
* - Graceful shutdown
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const client = createAlpacaClient(config);
|
|
16
|
+
* const manager = createStreamManager(client);
|
|
17
|
+
*
|
|
18
|
+
* // Connect to specific streams
|
|
19
|
+
* await manager.connectTrading();
|
|
20
|
+
* await manager.connectStockData();
|
|
21
|
+
*
|
|
22
|
+
* // Or connect to all streams at once
|
|
23
|
+
* await manager.connectAll();
|
|
24
|
+
*
|
|
25
|
+
* // Get status
|
|
26
|
+
* const status = manager.getStatus();
|
|
27
|
+
* console.log(status); // { trading: true, stock: true, option: false, crypto: false }
|
|
28
|
+
*
|
|
29
|
+
* // Use individual streams
|
|
30
|
+
* const tradingStream = manager.getTradingStream();
|
|
31
|
+
* tradingStream?.on('fill', (update) => console.log('Order filled!'));
|
|
32
|
+
*
|
|
33
|
+
* // Graceful shutdown
|
|
34
|
+
* await manager.disconnectAll();
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
import { AlpacaClient } from "../client";
|
|
38
|
+
import { EventEmitter } from "events";
|
|
39
|
+
import { TradingStream } from "./trading-stream";
|
|
40
|
+
import { StockDataStream, StockStreamConfig } from "./stock-stream";
|
|
41
|
+
import { OptionDataStream, OptionStreamConfig } from "./option-stream";
|
|
42
|
+
import { CryptoDataStream, CryptoStreamConfig } from "./crypto-stream";
|
|
43
|
+
import { StreamConfig, StreamState, SubscriptionRequest } from "./base-stream";
|
|
44
|
+
/**
|
|
45
|
+
* Stream connection status for all managed streams
|
|
46
|
+
*/
|
|
47
|
+
export interface StreamStatus {
|
|
48
|
+
/** Trading stream connected status */
|
|
49
|
+
trading: boolean;
|
|
50
|
+
/** Stock data stream connected status */
|
|
51
|
+
stock: boolean;
|
|
52
|
+
/** Option data stream connected status */
|
|
53
|
+
option: boolean;
|
|
54
|
+
/** Crypto data stream connected status */
|
|
55
|
+
crypto: boolean;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Detailed stream status with state information
|
|
59
|
+
*/
|
|
60
|
+
export interface DetailedStreamStatus {
|
|
61
|
+
trading: {
|
|
62
|
+
connected: boolean;
|
|
63
|
+
state: StreamState;
|
|
64
|
+
};
|
|
65
|
+
stock: {
|
|
66
|
+
connected: boolean;
|
|
67
|
+
state: StreamState;
|
|
68
|
+
};
|
|
69
|
+
option: {
|
|
70
|
+
connected: boolean;
|
|
71
|
+
state: StreamState;
|
|
72
|
+
};
|
|
73
|
+
crypto: {
|
|
74
|
+
connected: boolean;
|
|
75
|
+
state: StreamState;
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Stream manager configuration
|
|
80
|
+
*/
|
|
81
|
+
export interface StreamManagerConfig {
|
|
82
|
+
/** Base stream configuration */
|
|
83
|
+
baseConfig: Partial<StreamConfig>;
|
|
84
|
+
/** Stock stream specific configuration */
|
|
85
|
+
stockConfig: Partial<StockStreamConfig>;
|
|
86
|
+
/** Option stream specific configuration */
|
|
87
|
+
optionConfig: Partial<OptionStreamConfig>;
|
|
88
|
+
/** Crypto stream specific configuration */
|
|
89
|
+
cryptoConfig: Partial<CryptoStreamConfig>;
|
|
90
|
+
/** Auto-connect streams on creation */
|
|
91
|
+
autoConnect: boolean;
|
|
92
|
+
/** Enable health monitoring */
|
|
93
|
+
healthMonitoring: boolean;
|
|
94
|
+
/** Health check interval in milliseconds */
|
|
95
|
+
healthCheckInterval: number;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Default stream manager configuration
|
|
99
|
+
*/
|
|
100
|
+
export declare const DEFAULT_STREAM_MANAGER_CONFIG: StreamManagerConfig;
|
|
101
|
+
/**
|
|
102
|
+
* Stream manager event map
|
|
103
|
+
*/
|
|
104
|
+
export interface StreamManagerEventMap {
|
|
105
|
+
"stream:connected": {
|
|
106
|
+
stream: "trading" | "stock" | "option" | "crypto";
|
|
107
|
+
};
|
|
108
|
+
"stream:disconnected": {
|
|
109
|
+
stream: "trading" | "stock" | "option" | "crypto";
|
|
110
|
+
code: number;
|
|
111
|
+
reason: string;
|
|
112
|
+
};
|
|
113
|
+
"stream:error": {
|
|
114
|
+
stream: "trading" | "stock" | "option" | "crypto";
|
|
115
|
+
error: Error;
|
|
116
|
+
};
|
|
117
|
+
"all:connected": void;
|
|
118
|
+
"all:disconnected": void;
|
|
119
|
+
"health:check": StreamStatus;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Unified Stream Manager
|
|
123
|
+
* Manages all WebSocket connections for a client with connection pooling and coordination.
|
|
124
|
+
*/
|
|
125
|
+
export declare class StreamManager extends EventEmitter {
|
|
126
|
+
private client;
|
|
127
|
+
private config;
|
|
128
|
+
private tradingStream;
|
|
129
|
+
private stockStream;
|
|
130
|
+
private optionStream;
|
|
131
|
+
private cryptoStream;
|
|
132
|
+
private healthCheckTimer;
|
|
133
|
+
private isShuttingDown;
|
|
134
|
+
constructor(client: AlpacaClient, config?: Partial<StreamManagerConfig>);
|
|
135
|
+
/**
|
|
136
|
+
* Connect to the trading stream
|
|
137
|
+
* @returns The connected trading stream
|
|
138
|
+
*/
|
|
139
|
+
connectTrading(): Promise<TradingStream>;
|
|
140
|
+
/**
|
|
141
|
+
* Connect to the stock data stream
|
|
142
|
+
* @returns The connected stock data stream
|
|
143
|
+
*/
|
|
144
|
+
connectStockData(): Promise<StockDataStream>;
|
|
145
|
+
/**
|
|
146
|
+
* Connect to the options data stream
|
|
147
|
+
* @returns The connected option data stream
|
|
148
|
+
*/
|
|
149
|
+
connectOptionData(): Promise<OptionDataStream>;
|
|
150
|
+
/**
|
|
151
|
+
* Connect to the crypto data stream
|
|
152
|
+
* @returns The connected crypto data stream
|
|
153
|
+
*/
|
|
154
|
+
connectCryptoData(): Promise<CryptoDataStream>;
|
|
155
|
+
/**
|
|
156
|
+
* Connect all streams concurrently
|
|
157
|
+
*/
|
|
158
|
+
connectAll(): Promise<void>;
|
|
159
|
+
/**
|
|
160
|
+
* Connect only market data streams (stock, option, crypto)
|
|
161
|
+
*/
|
|
162
|
+
connectMarketData(): Promise<void>;
|
|
163
|
+
/**
|
|
164
|
+
* Disconnect from the trading stream
|
|
165
|
+
*/
|
|
166
|
+
disconnectTrading(): void;
|
|
167
|
+
/**
|
|
168
|
+
* Disconnect from the stock data stream
|
|
169
|
+
*/
|
|
170
|
+
disconnectStockData(): void;
|
|
171
|
+
/**
|
|
172
|
+
* Disconnect from the option data stream
|
|
173
|
+
*/
|
|
174
|
+
disconnectOptionData(): void;
|
|
175
|
+
/**
|
|
176
|
+
* Disconnect from the crypto data stream
|
|
177
|
+
*/
|
|
178
|
+
disconnectCryptoData(): void;
|
|
179
|
+
/**
|
|
180
|
+
* Disconnect all streams
|
|
181
|
+
*/
|
|
182
|
+
disconnectAll(): void;
|
|
183
|
+
/**
|
|
184
|
+
* Graceful shutdown - disconnect all streams and cleanup
|
|
185
|
+
*/
|
|
186
|
+
shutdown(): Promise<void>;
|
|
187
|
+
/**
|
|
188
|
+
* Get simple connection status
|
|
189
|
+
*/
|
|
190
|
+
getStatus(): StreamStatus;
|
|
191
|
+
/**
|
|
192
|
+
* Get detailed connection status with state information
|
|
193
|
+
*/
|
|
194
|
+
getDetailedStatus(): DetailedStreamStatus;
|
|
195
|
+
/**
|
|
196
|
+
* Check if any stream is connected
|
|
197
|
+
*/
|
|
198
|
+
isAnyConnected(): boolean;
|
|
199
|
+
/**
|
|
200
|
+
* Check if all streams are connected
|
|
201
|
+
*/
|
|
202
|
+
isAllConnected(): boolean;
|
|
203
|
+
/**
|
|
204
|
+
* Get the trading stream (may be null if not connected)
|
|
205
|
+
*/
|
|
206
|
+
getTradingStream(): TradingStream | null;
|
|
207
|
+
/**
|
|
208
|
+
* Get the stock data stream (may be null if not connected)
|
|
209
|
+
*/
|
|
210
|
+
getStockStream(): StockDataStream | null;
|
|
211
|
+
/**
|
|
212
|
+
* Get the option data stream (may be null if not connected)
|
|
213
|
+
*/
|
|
214
|
+
getOptionStream(): OptionDataStream | null;
|
|
215
|
+
/**
|
|
216
|
+
* Get the crypto data stream (may be null if not connected)
|
|
217
|
+
*/
|
|
218
|
+
getCryptoStream(): CryptoDataStream | null;
|
|
219
|
+
/**
|
|
220
|
+
* Subscribe to stock market data
|
|
221
|
+
*/
|
|
222
|
+
subscribeStocks(request: SubscriptionRequest): void;
|
|
223
|
+
/**
|
|
224
|
+
* Subscribe to option market data
|
|
225
|
+
*/
|
|
226
|
+
subscribeOptions(request: SubscriptionRequest): void;
|
|
227
|
+
/**
|
|
228
|
+
* Subscribe to crypto market data
|
|
229
|
+
*/
|
|
230
|
+
subscribeCrypto(request: SubscriptionRequest): void;
|
|
231
|
+
/**
|
|
232
|
+
* Unsubscribe from stock market data
|
|
233
|
+
*/
|
|
234
|
+
unsubscribeStocks(request: SubscriptionRequest): void;
|
|
235
|
+
/**
|
|
236
|
+
* Unsubscribe from option market data
|
|
237
|
+
*/
|
|
238
|
+
unsubscribeOptions(request: SubscriptionRequest): void;
|
|
239
|
+
/**
|
|
240
|
+
* Unsubscribe from crypto market data
|
|
241
|
+
*/
|
|
242
|
+
unsubscribeCrypto(request: SubscriptionRequest): void;
|
|
243
|
+
/**
|
|
244
|
+
* Get all current subscriptions
|
|
245
|
+
*/
|
|
246
|
+
getAllSubscriptions(): {
|
|
247
|
+
stock: SubscriptionRequest;
|
|
248
|
+
option: SubscriptionRequest;
|
|
249
|
+
crypto: SubscriptionRequest;
|
|
250
|
+
};
|
|
251
|
+
/**
|
|
252
|
+
* Setup event handlers for a stream
|
|
253
|
+
*/
|
|
254
|
+
private setupStreamEventHandlers;
|
|
255
|
+
/**
|
|
256
|
+
* Start health monitoring
|
|
257
|
+
*/
|
|
258
|
+
private startHealthMonitoring;
|
|
259
|
+
/**
|
|
260
|
+
* Stop health monitoring
|
|
261
|
+
*/
|
|
262
|
+
private stopHealthMonitoring;
|
|
263
|
+
/**
|
|
264
|
+
* Type-safe event listener registration
|
|
265
|
+
*/
|
|
266
|
+
on<K extends keyof StreamManagerEventMap>(event: K, listener: (data: StreamManagerEventMap[K]) => void): this;
|
|
267
|
+
/**
|
|
268
|
+
* Type-safe event emitter
|
|
269
|
+
*/
|
|
270
|
+
emit<K extends keyof StreamManagerEventMap>(event: K, data?: StreamManagerEventMap[K]): boolean;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Create a stream manager for a client
|
|
274
|
+
*/
|
|
275
|
+
export declare function createStreamManager(client: AlpacaClient, config?: Partial<StreamManagerConfig>): StreamManager;
|
|
276
|
+
export default StreamManager;
|
|
277
|
+
//# sourceMappingURL=stream-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-manager.d.ts","sourceRoot":"","sources":["../../../../src/alpaca/streams/stream-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trading Stream Module
|
|
3
|
+
* WebSocket stream for real-time trading updates (order fills, cancellations, etc.)
|
|
4
|
+
*
|
|
5
|
+
* Features:
|
|
6
|
+
* - Real-time order status updates
|
|
7
|
+
* - Automatic reconnection with exponential backoff
|
|
8
|
+
* - Type-safe event handling
|
|
9
|
+
* - Comprehensive logging
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const client = createAlpacaClient(config);
|
|
14
|
+
* const stream = createTradingStream(client);
|
|
15
|
+
*
|
|
16
|
+
* stream.on('fill', (update) => {
|
|
17
|
+
* console.log(`Order filled: ${update.order.symbol} @ ${update.price}`);
|
|
18
|
+
* });
|
|
19
|
+
*
|
|
20
|
+
* stream.on('trade_update', (update) => {
|
|
21
|
+
* console.log(`Trade update: ${update.event}`);
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* await stream.connect();
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
import { AlpacaClient } from "../client";
|
|
28
|
+
import { BaseStream, StreamConfig } from "./base-stream";
|
|
29
|
+
import { TradeUpdate } from "../../types/alpaca-types";
|
|
30
|
+
/**
|
|
31
|
+
* Trading stream event names representing all possible order status changes.
|
|
32
|
+
* These events are emitted when order state changes occur.
|
|
33
|
+
*/
|
|
34
|
+
export type TradingStreamEvent = "new" | "fill" | "partial_fill" | "canceled" | "expired" | "done_for_day" | "replaced" | "rejected" | "pending_new" | "pending_cancel" | "pending_replace" | "calculated" | "suspended" | "order_cancel_rejected" | "order_replace_rejected" | "stopped" | "accepted" | "accepted_for_bidding";
|
|
35
|
+
/**
|
|
36
|
+
* Trading stream event map for type-safe event handling.
|
|
37
|
+
* Maps event names to their payload types.
|
|
38
|
+
*/
|
|
39
|
+
export interface TradingStreamEventMap {
|
|
40
|
+
/** Generic trade update event - emitted for all order changes */
|
|
41
|
+
trade_update: TradeUpdate;
|
|
42
|
+
/** Emitted when stream is authenticated */
|
|
43
|
+
authenticated: void;
|
|
44
|
+
/** Emitted when stream is connected */
|
|
45
|
+
connected: void;
|
|
46
|
+
/** Emitted when stream is disconnected */
|
|
47
|
+
disconnected: {
|
|
48
|
+
code: number;
|
|
49
|
+
reason: string;
|
|
50
|
+
};
|
|
51
|
+
/** Emitted on stream errors */
|
|
52
|
+
error: Error;
|
|
53
|
+
/** Emitted when max reconnection attempts reached */
|
|
54
|
+
max_reconnects: void;
|
|
55
|
+
new: TradeUpdate;
|
|
56
|
+
fill: TradeUpdate;
|
|
57
|
+
partial_fill: TradeUpdate;
|
|
58
|
+
canceled: TradeUpdate;
|
|
59
|
+
expired: TradeUpdate;
|
|
60
|
+
done_for_day: TradeUpdate;
|
|
61
|
+
replaced: TradeUpdate;
|
|
62
|
+
rejected: TradeUpdate;
|
|
63
|
+
pending_new: TradeUpdate;
|
|
64
|
+
pending_cancel: TradeUpdate;
|
|
65
|
+
pending_replace: TradeUpdate;
|
|
66
|
+
calculated: TradeUpdate;
|
|
67
|
+
suspended: TradeUpdate;
|
|
68
|
+
order_cancel_rejected: TradeUpdate;
|
|
69
|
+
order_replace_rejected: TradeUpdate;
|
|
70
|
+
stopped: TradeUpdate;
|
|
71
|
+
accepted: TradeUpdate;
|
|
72
|
+
accepted_for_bidding: TradeUpdate;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Trading Stream class for receiving real-time order updates.
|
|
76
|
+
*
|
|
77
|
+
* Connects to Alpaca's trading WebSocket and provides real-time
|
|
78
|
+
* updates on order status changes including fills, cancellations,
|
|
79
|
+
* rejections, and more.
|
|
80
|
+
*
|
|
81
|
+
* @extends BaseStream
|
|
82
|
+
*/
|
|
83
|
+
export declare class TradingStream extends BaseStream {
|
|
84
|
+
protected readonly streamName = "TradingStream";
|
|
85
|
+
private tradeUpdateCallback;
|
|
86
|
+
private orderCallbacks;
|
|
87
|
+
constructor(client: AlpacaClient, config?: Partial<StreamConfig>);
|
|
88
|
+
/**
|
|
89
|
+
* Get the WebSocket URL for trading stream
|
|
90
|
+
*/
|
|
91
|
+
protected getStreamUrl(): string;
|
|
92
|
+
/**
|
|
93
|
+
* Override authenticate to use trading stream format
|
|
94
|
+
*/
|
|
95
|
+
protected authenticate(): Promise<void>;
|
|
96
|
+
/**
|
|
97
|
+
* Subscribe to trade updates after authentication
|
|
98
|
+
*/
|
|
99
|
+
private subscribeToTradeUpdates;
|
|
100
|
+
/**
|
|
101
|
+
* Process incoming messages
|
|
102
|
+
*/
|
|
103
|
+
protected processMessage(message: Record<string, unknown>): void;
|
|
104
|
+
/**
|
|
105
|
+
* Handle listening confirmation message
|
|
106
|
+
*/
|
|
107
|
+
private handleListeningMessage;
|
|
108
|
+
/**
|
|
109
|
+
* Handle trade update message
|
|
110
|
+
*/
|
|
111
|
+
private handleTradeUpdate;
|
|
112
|
+
/**
|
|
113
|
+
* Check if an event represents a terminal order state
|
|
114
|
+
*/
|
|
115
|
+
private isTerminalState;
|
|
116
|
+
/**
|
|
117
|
+
* Register a callback for trade updates
|
|
118
|
+
* @param callback Function to call when trade updates are received
|
|
119
|
+
*/
|
|
120
|
+
onTradeUpdate(callback: (update: TradeUpdate) => void): void;
|
|
121
|
+
/**
|
|
122
|
+
* Remove the trade update callback
|
|
123
|
+
*/
|
|
124
|
+
removeTradeUpdateCallback(): void;
|
|
125
|
+
/**
|
|
126
|
+
* Register a callback for a specific order's updates.
|
|
127
|
+
* The callback is automatically removed when the order reaches a terminal state.
|
|
128
|
+
*
|
|
129
|
+
* @param orderId The order ID to watch
|
|
130
|
+
* @param callback Function to call when updates for this order are received
|
|
131
|
+
*/
|
|
132
|
+
watchOrder(orderId: string, callback: (update: TradeUpdate) => void): void;
|
|
133
|
+
/**
|
|
134
|
+
* Stop watching a specific order
|
|
135
|
+
*
|
|
136
|
+
* @param orderId The order ID to stop watching
|
|
137
|
+
*/
|
|
138
|
+
unwatchOrder(orderId: string): void;
|
|
139
|
+
/**
|
|
140
|
+
* Get all currently watched order IDs
|
|
141
|
+
*/
|
|
142
|
+
getWatchedOrders(): string[];
|
|
143
|
+
/**
|
|
144
|
+
* Wait for an order to reach a terminal state.
|
|
145
|
+
* Returns a promise that resolves with the final trade update.
|
|
146
|
+
*
|
|
147
|
+
* @param orderId The order ID to wait for
|
|
148
|
+
* @param timeoutMs Optional timeout in milliseconds (default: 30000)
|
|
149
|
+
* @returns Promise resolving to the final TradeUpdate
|
|
150
|
+
* @throws Error if timeout is reached
|
|
151
|
+
*
|
|
152
|
+
* @example
|
|
153
|
+
* ```typescript
|
|
154
|
+
* const finalUpdate = await stream.waitForOrderCompletion(order.id, 60000);
|
|
155
|
+
* console.log(`Order ${finalUpdate.event}: ${finalUpdate.order.filled_qty} filled`);
|
|
156
|
+
* ```
|
|
157
|
+
*/
|
|
158
|
+
waitForOrderCompletion(orderId: string, timeoutMs?: number): Promise<TradeUpdate>;
|
|
159
|
+
/**
|
|
160
|
+
* Schedule a reconnection attempt with exponential backoff.
|
|
161
|
+
* Emits 'max_reconnects' event when maximum attempts are reached.
|
|
162
|
+
*/
|
|
163
|
+
protected scheduleReconnect(): void;
|
|
164
|
+
/**
|
|
165
|
+
* Type-safe event listener registration
|
|
166
|
+
*/
|
|
167
|
+
on<K extends keyof TradingStreamEventMap>(event: K, listener: (data: TradingStreamEventMap[K]) => void): this;
|
|
168
|
+
/**
|
|
169
|
+
* Type-safe once event listener registration
|
|
170
|
+
*/
|
|
171
|
+
once<K extends keyof TradingStreamEventMap>(event: K, listener: (data: TradingStreamEventMap[K]) => void): this;
|
|
172
|
+
/**
|
|
173
|
+
* Type-safe event emitter
|
|
174
|
+
*/
|
|
175
|
+
emit<K extends keyof TradingStreamEventMap>(event: K, data?: TradingStreamEventMap[K]): boolean;
|
|
176
|
+
/**
|
|
177
|
+
* Type-safe remove listener
|
|
178
|
+
*/
|
|
179
|
+
off<K extends keyof TradingStreamEventMap>(event: K, listener: (data: TradingStreamEventMap[K]) => void): this;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Create a trading stream for a client
|
|
183
|
+
*/
|
|
184
|
+
export declare function createTradingStream(client: AlpacaClient, config?: Partial<StreamConfig>): TradingStream;
|
|
185
|
+
export default TradingStream;
|
|
186
|
+
//# sourceMappingURL=trading-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trading-stream.d.ts","sourceRoot":"","sources":["../../../../src/alpaca/streams/trading-stream.ts"],"names":[],"mappings":"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"}
|