@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,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Stream Module
|
|
3
|
+
* Abstract base class for all Alpaca WebSocket streams
|
|
4
|
+
*/
|
|
5
|
+
import { EventEmitter } from "events";
|
|
6
|
+
import WebSocket from "ws";
|
|
7
|
+
import { LogOptions } from "../../types/logging-types";
|
|
8
|
+
import { AlpacaClient } from "../client";
|
|
9
|
+
/**
|
|
10
|
+
* Stream connection state
|
|
11
|
+
*/
|
|
12
|
+
export type StreamState = "disconnected" | "connecting" | "connected" | "authenticated" | "error";
|
|
13
|
+
/**
|
|
14
|
+
* Stream configuration options
|
|
15
|
+
*/
|
|
16
|
+
export interface StreamConfig {
|
|
17
|
+
/** Auto-reconnect on disconnect */
|
|
18
|
+
autoReconnect: boolean;
|
|
19
|
+
/** Reconnect delay in milliseconds */
|
|
20
|
+
reconnectDelay: number;
|
|
21
|
+
/** Maximum reconnection attempts (0 = unlimited) */
|
|
22
|
+
maxReconnectAttempts: number;
|
|
23
|
+
/** Connection timeout in milliseconds */
|
|
24
|
+
connectionTimeout: number;
|
|
25
|
+
/** Authentication timeout in milliseconds */
|
|
26
|
+
authTimeout: number;
|
|
27
|
+
/** Heartbeat interval in milliseconds (0 = disabled) */
|
|
28
|
+
heartbeatInterval: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Default stream configuration
|
|
32
|
+
*/
|
|
33
|
+
export declare const DEFAULT_STREAM_CONFIG: StreamConfig;
|
|
34
|
+
/**
|
|
35
|
+
* Subscription request structure
|
|
36
|
+
*/
|
|
37
|
+
export interface SubscriptionRequest {
|
|
38
|
+
trades?: string[];
|
|
39
|
+
quotes?: string[];
|
|
40
|
+
bars?: string[];
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Abstract base class for all Alpaca WebSocket streams
|
|
44
|
+
*/
|
|
45
|
+
export declare abstract class BaseStream extends EventEmitter {
|
|
46
|
+
protected client: AlpacaClient;
|
|
47
|
+
protected ws: WebSocket | null;
|
|
48
|
+
protected state: StreamState;
|
|
49
|
+
protected config: StreamConfig;
|
|
50
|
+
protected reconnectAttempts: number;
|
|
51
|
+
protected reconnectTimer: NodeJS.Timeout | null;
|
|
52
|
+
protected heartbeatTimer: NodeJS.Timeout | null;
|
|
53
|
+
protected connectionTimer: NodeJS.Timeout | null;
|
|
54
|
+
protected subscriptions: SubscriptionRequest;
|
|
55
|
+
protected pendingSubscriptions: SubscriptionRequest | null;
|
|
56
|
+
/** Name of the stream for logging */
|
|
57
|
+
protected abstract readonly streamName: string;
|
|
58
|
+
/** WebSocket URL for the stream */
|
|
59
|
+
protected abstract getStreamUrl(): string;
|
|
60
|
+
constructor(client: AlpacaClient, config?: Partial<StreamConfig>);
|
|
61
|
+
/**
|
|
62
|
+
* Log a message with stream context
|
|
63
|
+
*/
|
|
64
|
+
protected log(message: string, options?: LogOptions): void;
|
|
65
|
+
/**
|
|
66
|
+
* Get the current stream state
|
|
67
|
+
*/
|
|
68
|
+
getState(): StreamState;
|
|
69
|
+
/**
|
|
70
|
+
* Check if stream is connected and authenticated
|
|
71
|
+
*/
|
|
72
|
+
isStreamConnected(): boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Get current subscriptions
|
|
75
|
+
*/
|
|
76
|
+
getSubscriptions(): SubscriptionRequest;
|
|
77
|
+
/**
|
|
78
|
+
* Connect to the WebSocket stream
|
|
79
|
+
*/
|
|
80
|
+
connect(): Promise<void>;
|
|
81
|
+
/**
|
|
82
|
+
* Disconnect from the WebSocket stream
|
|
83
|
+
*/
|
|
84
|
+
disconnect(): void;
|
|
85
|
+
/**
|
|
86
|
+
* Subscribe to market data
|
|
87
|
+
*/
|
|
88
|
+
subscribe(request: SubscriptionRequest): void;
|
|
89
|
+
/**
|
|
90
|
+
* Unsubscribe from market data
|
|
91
|
+
*/
|
|
92
|
+
unsubscribe(request: SubscriptionRequest): void;
|
|
93
|
+
/**
|
|
94
|
+
* Authenticate with the WebSocket
|
|
95
|
+
*/
|
|
96
|
+
protected authenticate(): Promise<void>;
|
|
97
|
+
/**
|
|
98
|
+
* Send subscription request
|
|
99
|
+
*/
|
|
100
|
+
protected sendSubscription(): void;
|
|
101
|
+
/**
|
|
102
|
+
* Send unsubscription request
|
|
103
|
+
*/
|
|
104
|
+
protected sendUnsubscription(request: SubscriptionRequest): void;
|
|
105
|
+
/**
|
|
106
|
+
* Handle incoming WebSocket messages
|
|
107
|
+
*/
|
|
108
|
+
protected handleMessage(data: WebSocket.Data): void;
|
|
109
|
+
/**
|
|
110
|
+
* Process a single message - to be implemented by subclasses
|
|
111
|
+
*/
|
|
112
|
+
protected abstract processMessage(message: Record<string, unknown>): void;
|
|
113
|
+
/**
|
|
114
|
+
* Handle WebSocket close event
|
|
115
|
+
*/
|
|
116
|
+
protected handleClose(code: number, reason: string): void;
|
|
117
|
+
/**
|
|
118
|
+
* Handle WebSocket error event
|
|
119
|
+
*/
|
|
120
|
+
protected handleError(error: Error): void;
|
|
121
|
+
/**
|
|
122
|
+
* Schedule a reconnection attempt
|
|
123
|
+
*/
|
|
124
|
+
protected scheduleReconnect(): void;
|
|
125
|
+
/**
|
|
126
|
+
* Start heartbeat to keep connection alive
|
|
127
|
+
*/
|
|
128
|
+
protected startHeartbeat(): void;
|
|
129
|
+
/**
|
|
130
|
+
* Stop heartbeat timer
|
|
131
|
+
*/
|
|
132
|
+
protected stopHeartbeat(): void;
|
|
133
|
+
/**
|
|
134
|
+
* Clear connection timer
|
|
135
|
+
*/
|
|
136
|
+
protected clearConnectionTimer(): void;
|
|
137
|
+
/**
|
|
138
|
+
* Clear all timers
|
|
139
|
+
*/
|
|
140
|
+
protected clearAllTimers(): void;
|
|
141
|
+
}
|
|
142
|
+
export default BaseStream;
|
|
143
|
+
//# sourceMappingURL=base-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-stream.d.ts","sourceRoot":"","sources":["../../../../src/alpaca/streams/base-stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Crypto Data Stream Module
|
|
3
|
+
* Real-time cryptocurrency quotes, trades, and bars via Alpaca WebSocket (24/7)
|
|
4
|
+
*
|
|
5
|
+
* Uses the official Alpaca SDK crypto_stream_v1beta3 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 { AlpacaCryptoTradeStream, AlpacaCryptoQuoteStream, AlpacaCryptoBarStream, AlpacaCryptoDailyBarStream, AlpacaCryptoUpdatedBarStream, AlpacaCryptoStreamMessage } from "../../types/alpaca-types";
|
|
11
|
+
import { StreamConfig, StreamState, SubscriptionRequest } from "./base-stream";
|
|
12
|
+
/**
|
|
13
|
+
* Crypto stream location
|
|
14
|
+
*/
|
|
15
|
+
export type CryptoStreamLocation = "us";
|
|
16
|
+
/**
|
|
17
|
+
* Crypto stream configuration
|
|
18
|
+
*/
|
|
19
|
+
export interface CryptoStreamConfig extends StreamConfig {
|
|
20
|
+
/** Location for crypto data */
|
|
21
|
+
location: CryptoStreamLocation;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Default crypto stream configuration
|
|
25
|
+
*/
|
|
26
|
+
export declare const DEFAULT_CRYPTO_STREAM_CONFIG: Partial<CryptoStreamConfig>;
|
|
27
|
+
/**
|
|
28
|
+
* Crypto stream event map for type-safe event handling
|
|
29
|
+
*/
|
|
30
|
+
export interface CryptoStreamEventMap {
|
|
31
|
+
trade: AlpacaCryptoTradeStream;
|
|
32
|
+
quote: AlpacaCryptoQuoteStream;
|
|
33
|
+
bar: AlpacaCryptoBarStream;
|
|
34
|
+
dailyBar: AlpacaCryptoDailyBarStream;
|
|
35
|
+
updatedBar: AlpacaCryptoUpdatedBarStream;
|
|
36
|
+
data: AlpacaCryptoStreamMessage;
|
|
37
|
+
subscription: {
|
|
38
|
+
trades: string[];
|
|
39
|
+
quotes: string[];
|
|
40
|
+
bars: string[];
|
|
41
|
+
};
|
|
42
|
+
authenticated: void;
|
|
43
|
+
connected: void;
|
|
44
|
+
disconnected: {
|
|
45
|
+
code: number;
|
|
46
|
+
reason: string;
|
|
47
|
+
};
|
|
48
|
+
stateChange: StreamState;
|
|
49
|
+
error: Error;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Crypto Data Stream class for receiving real-time cryptocurrency market data
|
|
53
|
+
* Uses the official Alpaca SDK crypto_stream_v1beta3 for WebSocket management.
|
|
54
|
+
* Operates 24/7 for cryptocurrency markets.
|
|
55
|
+
*/
|
|
56
|
+
export declare class CryptoDataStream extends EventEmitter {
|
|
57
|
+
private client;
|
|
58
|
+
private socket;
|
|
59
|
+
private state;
|
|
60
|
+
private location;
|
|
61
|
+
private config;
|
|
62
|
+
private subscriptions;
|
|
63
|
+
private pendingSubscriptions;
|
|
64
|
+
private currentSymbol;
|
|
65
|
+
constructor(client: AlpacaClient, config?: Partial<CryptoStreamConfig>);
|
|
66
|
+
/**
|
|
67
|
+
* Log helper
|
|
68
|
+
*/
|
|
69
|
+
private log;
|
|
70
|
+
/**
|
|
71
|
+
* Get the current stream state
|
|
72
|
+
*/
|
|
73
|
+
getState(): StreamState;
|
|
74
|
+
/**
|
|
75
|
+
* Check if stream is connected and authenticated
|
|
76
|
+
*/
|
|
77
|
+
isStreamConnected(): boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Get current subscriptions
|
|
80
|
+
*/
|
|
81
|
+
getSubscriptions(): SubscriptionRequest;
|
|
82
|
+
/**
|
|
83
|
+
* Set the stream location
|
|
84
|
+
*/
|
|
85
|
+
setLocation(location: CryptoStreamLocation): void;
|
|
86
|
+
/**
|
|
87
|
+
* Get the current stream location
|
|
88
|
+
*/
|
|
89
|
+
getLocation(): CryptoStreamLocation;
|
|
90
|
+
/**
|
|
91
|
+
* Connect to the crypto data stream using SDK
|
|
92
|
+
*/
|
|
93
|
+
connect(): Promise<void>;
|
|
94
|
+
/**
|
|
95
|
+
* Set up all data event handlers for SDK
|
|
96
|
+
*/
|
|
97
|
+
private setupDataHandlers;
|
|
98
|
+
/**
|
|
99
|
+
* Disconnect from the crypto data stream
|
|
100
|
+
*/
|
|
101
|
+
disconnect(): void;
|
|
102
|
+
/**
|
|
103
|
+
* Subscribe to market data
|
|
104
|
+
*/
|
|
105
|
+
subscribe(request: SubscriptionRequest): void;
|
|
106
|
+
/**
|
|
107
|
+
* Unsubscribe from market data
|
|
108
|
+
*/
|
|
109
|
+
unsubscribe(request: SubscriptionRequest): void;
|
|
110
|
+
/**
|
|
111
|
+
* Subscribe to crypto trades
|
|
112
|
+
*/
|
|
113
|
+
subscribeTrades(symbols: string[]): void;
|
|
114
|
+
/**
|
|
115
|
+
* Subscribe to crypto quotes
|
|
116
|
+
*/
|
|
117
|
+
subscribeQuotes(symbols: string[]): void;
|
|
118
|
+
/**
|
|
119
|
+
* Subscribe to crypto bars
|
|
120
|
+
*/
|
|
121
|
+
subscribeBars(symbols: string[]): void;
|
|
122
|
+
/**
|
|
123
|
+
* Subscribe to all data types for crypto symbols
|
|
124
|
+
*/
|
|
125
|
+
subscribeAll(symbols: string[]): void;
|
|
126
|
+
/**
|
|
127
|
+
* Unsubscribe from crypto trades
|
|
128
|
+
*/
|
|
129
|
+
unsubscribeTrades(symbols: string[]): void;
|
|
130
|
+
/**
|
|
131
|
+
* Unsubscribe from crypto quotes
|
|
132
|
+
*/
|
|
133
|
+
unsubscribeQuotes(symbols: string[]): void;
|
|
134
|
+
/**
|
|
135
|
+
* Unsubscribe from crypto bars
|
|
136
|
+
*/
|
|
137
|
+
unsubscribeBars(symbols: string[]): void;
|
|
138
|
+
/**
|
|
139
|
+
* Unsubscribe from all data types for crypto symbols
|
|
140
|
+
*/
|
|
141
|
+
unsubscribeAll(symbols: string[]): void;
|
|
142
|
+
/**
|
|
143
|
+
* Subscribe to popular crypto pairs
|
|
144
|
+
*/
|
|
145
|
+
subscribePopularPairs(): void;
|
|
146
|
+
/**
|
|
147
|
+
* Send subscription request using SDK methods
|
|
148
|
+
*/
|
|
149
|
+
private sendSubscription;
|
|
150
|
+
/**
|
|
151
|
+
* Send unsubscription request using SDK methods
|
|
152
|
+
*/
|
|
153
|
+
private sendUnsubscription;
|
|
154
|
+
private convertTrade;
|
|
155
|
+
private convertQuote;
|
|
156
|
+
private convertBar;
|
|
157
|
+
private convertDailyBar;
|
|
158
|
+
private convertUpdatedBar;
|
|
159
|
+
/**
|
|
160
|
+
* Type-safe event listener registration
|
|
161
|
+
*/
|
|
162
|
+
on<K extends keyof CryptoStreamEventMap>(event: K, listener: (data: CryptoStreamEventMap[K]) => void): this;
|
|
163
|
+
/**
|
|
164
|
+
* Type-safe event emitter
|
|
165
|
+
*/
|
|
166
|
+
emit<K extends keyof CryptoStreamEventMap>(event: K, data?: CryptoStreamEventMap[K]): boolean;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Create a crypto data stream for a client
|
|
170
|
+
*/
|
|
171
|
+
export declare function createCryptoDataStream(client: AlpacaClient, config?: Partial<CryptoStreamConfig>): CryptoDataStream;
|
|
172
|
+
export default CryptoDataStream;
|
|
173
|
+
//# sourceMappingURL=crypto-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto-stream.d.ts","sourceRoot":"","sources":["../../../../src/alpaca/streams/crypto-stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Streams Module Index
|
|
3
|
+
* Re-exports all stream-related functionality for Alpaca WebSocket connections.
|
|
4
|
+
*
|
|
5
|
+
* This module provides unified WebSocket streaming for:
|
|
6
|
+
* - Trading updates (order fills, cancellations, etc.)
|
|
7
|
+
* - Stock market data (trades, quotes, bars)
|
|
8
|
+
* - Options market data (trades, quotes, bars)
|
|
9
|
+
* - Crypto market data (trades, quotes, bars)
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { createStreamManager, createAlpacaClient } from '@adaptic/utils';
|
|
14
|
+
*
|
|
15
|
+
* const client = createAlpacaClient({
|
|
16
|
+
* apiKey: 'your-api-key',
|
|
17
|
+
* apiSecret: 'your-api-secret',
|
|
18
|
+
* accountType: 'PAPER',
|
|
19
|
+
* });
|
|
20
|
+
*
|
|
21
|
+
* // Use the unified stream manager
|
|
22
|
+
* const manager = createStreamManager(client);
|
|
23
|
+
* await manager.connectAll();
|
|
24
|
+
*
|
|
25
|
+
* // Subscribe to stock data
|
|
26
|
+
* manager.subscribeStocks({
|
|
27
|
+
* trades: ['AAPL', 'MSFT'],
|
|
28
|
+
* quotes: ['AAPL', 'MSFT'],
|
|
29
|
+
* });
|
|
30
|
+
*
|
|
31
|
+
* // Listen for trading updates
|
|
32
|
+
* const tradingStream = manager.getTradingStream();
|
|
33
|
+
* tradingStream?.on('fill', (update) => {
|
|
34
|
+
* console.log(`Order filled: ${update.order.symbol}`);
|
|
35
|
+
* });
|
|
36
|
+
*
|
|
37
|
+
* // Or use individual streams directly
|
|
38
|
+
* import { createStockDataStream, createTradingStream } from '@adaptic/utils';
|
|
39
|
+
*
|
|
40
|
+
* const stockStream = createStockDataStream(client);
|
|
41
|
+
* await stockStream.connect();
|
|
42
|
+
* stockStream.subscribeTrades(['AAPL', 'TSLA']);
|
|
43
|
+
* stockStream.on('trade', (trade) => {
|
|
44
|
+
* console.log(`Trade: ${trade.S} @ ${trade.p}`);
|
|
45
|
+
* });
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export { BaseStream, StreamConfig, StreamState, SubscriptionRequest, DEFAULT_STREAM_CONFIG, } from "./base-stream";
|
|
49
|
+
export { TradingStream, TradingStreamEvent, TradingStreamEventMap, createTradingStream, } from "./trading-stream";
|
|
50
|
+
export { StockDataStream, StockDataFeed, StockStreamConfig, StockStreamEventMap, createStockDataStream, DEFAULT_STOCK_STREAM_CONFIG, } from "./stock-stream";
|
|
51
|
+
export { OptionDataStream, OptionDataFeed, OptionStreamConfig, OptionStreamEventMap, createOptionDataStream, DEFAULT_OPTION_STREAM_CONFIG, } from "./option-stream";
|
|
52
|
+
export { CryptoDataStream, CryptoStreamLocation, CryptoStreamConfig, CryptoStreamEventMap, createCryptoDataStream, DEFAULT_CRYPTO_STREAM_CONFIG, } from "./crypto-stream";
|
|
53
|
+
export { StreamManager, StreamStatus, DetailedStreamStatus, StreamManagerConfig, StreamManagerEventMap, createStreamManager, DEFAULT_STREAM_MANAGER_CONFIG, } from "./stream-manager";
|
|
54
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/alpaca/streams/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAGH,OAAO,EACL,UAAU,EACV,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,4BAA4B,GAC7B,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,4BAA4B,GAC7B,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,6BAA6B,GAC9B,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Option Data Stream Module
|
|
3
|
+
* Real-time options quotes, trades, and bars via Alpaca WebSocket
|
|
4
|
+
*
|
|
5
|
+
* Uses the official Alpaca SDK option_stream 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 { AlpacaOptionTradeStream, AlpacaOptionQuoteStream, AlpacaOptionBarStream, AlpacaOptionStreamMessage } from "../../types/alpaca-types";
|
|
11
|
+
import { StreamConfig, StreamState, SubscriptionRequest } from "./base-stream";
|
|
12
|
+
/**
|
|
13
|
+
* Option stream data feed type
|
|
14
|
+
*/
|
|
15
|
+
export type OptionDataFeed = "opra" | "indicative";
|
|
16
|
+
/**
|
|
17
|
+
* Option stream configuration
|
|
18
|
+
*/
|
|
19
|
+
export interface OptionStreamConfig extends StreamConfig {
|
|
20
|
+
/** Data feed to use */
|
|
21
|
+
feed: OptionDataFeed;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Default option stream configuration
|
|
25
|
+
*/
|
|
26
|
+
export declare const DEFAULT_OPTION_STREAM_CONFIG: Partial<OptionStreamConfig>;
|
|
27
|
+
/**
|
|
28
|
+
* Option stream event map for type-safe event handling
|
|
29
|
+
*/
|
|
30
|
+
export interface OptionStreamEventMap {
|
|
31
|
+
trade: AlpacaOptionTradeStream;
|
|
32
|
+
quote: AlpacaOptionQuoteStream;
|
|
33
|
+
bar: AlpacaOptionBarStream;
|
|
34
|
+
data: AlpacaOptionStreamMessage;
|
|
35
|
+
subscription: {
|
|
36
|
+
trades: string[];
|
|
37
|
+
quotes: string[];
|
|
38
|
+
};
|
|
39
|
+
authenticated: void;
|
|
40
|
+
connected: void;
|
|
41
|
+
disconnected: {
|
|
42
|
+
code: number;
|
|
43
|
+
reason: string;
|
|
44
|
+
};
|
|
45
|
+
stateChange: StreamState;
|
|
46
|
+
error: Error;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Option Data Stream class for receiving real-time options market data
|
|
50
|
+
* Uses the official Alpaca SDK option_stream for WebSocket management.
|
|
51
|
+
*/
|
|
52
|
+
export declare class OptionDataStream extends EventEmitter {
|
|
53
|
+
private client;
|
|
54
|
+
private socket;
|
|
55
|
+
private state;
|
|
56
|
+
private feed;
|
|
57
|
+
private config;
|
|
58
|
+
private subscriptions;
|
|
59
|
+
private pendingSubscriptions;
|
|
60
|
+
constructor(client: AlpacaClient, config?: Partial<OptionStreamConfig>);
|
|
61
|
+
/**
|
|
62
|
+
* Log helper
|
|
63
|
+
*/
|
|
64
|
+
private log;
|
|
65
|
+
/**
|
|
66
|
+
* Get the current stream state
|
|
67
|
+
*/
|
|
68
|
+
getState(): StreamState;
|
|
69
|
+
/**
|
|
70
|
+
* Check if stream is connected and authenticated
|
|
71
|
+
*/
|
|
72
|
+
isStreamConnected(): boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Get current subscriptions
|
|
75
|
+
*/
|
|
76
|
+
getSubscriptions(): SubscriptionRequest;
|
|
77
|
+
/**
|
|
78
|
+
* Set the data feed
|
|
79
|
+
*/
|
|
80
|
+
setFeed(feed: OptionDataFeed): void;
|
|
81
|
+
/**
|
|
82
|
+
* Get the current data feed
|
|
83
|
+
*/
|
|
84
|
+
getFeed(): OptionDataFeed;
|
|
85
|
+
/**
|
|
86
|
+
* Connect to the option data stream using SDK
|
|
87
|
+
*/
|
|
88
|
+
connect(): Promise<void>;
|
|
89
|
+
/**
|
|
90
|
+
* Set up all data event handlers for SDK
|
|
91
|
+
*/
|
|
92
|
+
private setupDataHandlers;
|
|
93
|
+
/**
|
|
94
|
+
* Disconnect from the option data stream
|
|
95
|
+
*/
|
|
96
|
+
disconnect(): void;
|
|
97
|
+
/**
|
|
98
|
+
* Subscribe to market data
|
|
99
|
+
*/
|
|
100
|
+
subscribe(request: SubscriptionRequest): void;
|
|
101
|
+
/**
|
|
102
|
+
* Unsubscribe from market data
|
|
103
|
+
*/
|
|
104
|
+
unsubscribe(request: SubscriptionRequest): void;
|
|
105
|
+
/**
|
|
106
|
+
* Subscribe to option trades
|
|
107
|
+
*/
|
|
108
|
+
subscribeTrades(symbols: string[]): void;
|
|
109
|
+
/**
|
|
110
|
+
* Subscribe to option quotes
|
|
111
|
+
*/
|
|
112
|
+
subscribeQuotes(symbols: string[]): void;
|
|
113
|
+
/**
|
|
114
|
+
* Subscribe to option bars (not supported by SDK - logs warning)
|
|
115
|
+
*/
|
|
116
|
+
subscribeBars(symbols: string[]): void;
|
|
117
|
+
/**
|
|
118
|
+
* Subscribe to all data types for option symbols
|
|
119
|
+
*/
|
|
120
|
+
subscribeAll(symbols: string[]): void;
|
|
121
|
+
/**
|
|
122
|
+
* Unsubscribe from option trades
|
|
123
|
+
*/
|
|
124
|
+
unsubscribeTrades(symbols: string[]): void;
|
|
125
|
+
/**
|
|
126
|
+
* Unsubscribe from option quotes
|
|
127
|
+
*/
|
|
128
|
+
unsubscribeQuotes(symbols: string[]): void;
|
|
129
|
+
/**
|
|
130
|
+
* Unsubscribe from option bars (not supported)
|
|
131
|
+
*/
|
|
132
|
+
unsubscribeBars(symbols: string[]): void;
|
|
133
|
+
/**
|
|
134
|
+
* Unsubscribe from all data types for option symbols
|
|
135
|
+
*/
|
|
136
|
+
unsubscribeAll(symbols: string[]): void;
|
|
137
|
+
/**
|
|
138
|
+
* Subscribe to options by underlying symbol
|
|
139
|
+
* @param underlying The underlying stock symbol (not used in this implementation)
|
|
140
|
+
* @param contracts Array of option contract symbols to subscribe to
|
|
141
|
+
*/
|
|
142
|
+
subscribeByUnderlying(underlying: string, contracts: string[]): void;
|
|
143
|
+
/**
|
|
144
|
+
* Send subscription request using SDK methods
|
|
145
|
+
*/
|
|
146
|
+
private sendSubscription;
|
|
147
|
+
/**
|
|
148
|
+
* Send unsubscription request using SDK methods
|
|
149
|
+
*/
|
|
150
|
+
private sendUnsubscription;
|
|
151
|
+
private convertTrade;
|
|
152
|
+
private convertQuote;
|
|
153
|
+
/**
|
|
154
|
+
* Type-safe event listener registration
|
|
155
|
+
*/
|
|
156
|
+
on<K extends keyof OptionStreamEventMap>(event: K, listener: (data: OptionStreamEventMap[K]) => void): this;
|
|
157
|
+
/**
|
|
158
|
+
* Type-safe event emitter
|
|
159
|
+
*/
|
|
160
|
+
emit<K extends keyof OptionStreamEventMap>(event: K, data?: OptionStreamEventMap[K]): boolean;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Create an option data stream for a client
|
|
164
|
+
*/
|
|
165
|
+
export declare function createOptionDataStream(client: AlpacaClient, config?: Partial<OptionStreamConfig>): OptionDataStream;
|
|
166
|
+
export default OptionDataStream;
|
|
167
|
+
//# sourceMappingURL=option-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"option-stream.d.ts","sourceRoot":"","sources":["../../../../src/alpaca/streams/option-stream.ts"],"names":[],"mappings":"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"}
|