thetadatadx 7.3.0 → 7.3.1

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.
Files changed (4) hide show
  1. package/README.md +23 -16
  2. package/index.d.ts +183 -0
  3. package/index.js +579 -5
  4. package/package.json +19 -6
package/README.md CHANGED
@@ -1,31 +1,28 @@
1
1
  # thetadatadx (Node.js / TypeScript)
2
2
 
3
- Node.js SDK for ThetaData market data, powered by the `thetadatadx` Rust crate via napi-rs.
3
+ Node.js SDK for ThetaData market data, powered by compiled Rust via napi-rs. Pre-built native binaries for Linux x64, macOS Apple Silicon, and Windows x64 — no Rust toolchain required.
4
4
 
5
- Every call goes through compiled Rust -- gRPC, protobuf, zstd, FIT decoding, and TCP streaming all happen at native speed. Node.js is just the interface.
5
+ Every call goes through compiled Rust gRPC, protobuf, zstd, FIT decoding, and TCP streaming all happen at native speed. Node.js is just the interface.
6
6
 
7
- ## Prerequisites
8
-
9
- - Node.js >= 18
10
- - Rust stable toolchain (for building from source)
11
- - `protoc` (Protocol Buffers compiler)
12
-
13
- ## Build from source
7
+ ## Install
14
8
 
15
9
  ```bash
16
- cd sdks/typescript
17
- npm install
18
- npm run build # release build -> thetadatadx.node
10
+ npm install thetadatadx
19
11
  ```
20
12
 
13
+ Pre-built binaries are downloaded automatically for your platform. Supported:
14
+ - Linux x64 (glibc)
15
+ - macOS arm64 (Apple Silicon)
16
+ - Windows x64 (MSVC)
17
+
21
18
  ## Usage
22
19
 
23
20
  ```js
24
21
  const { ThetaDataDx } = require('thetadatadx');
25
22
 
26
23
  // Connect (requires ThetaData credentials)
27
- const tdx = await ThetaDataDx.connect('user@example.com', 'password');
28
- // Or from file: const tdx = await ThetaDataDx.connectFromFile('creds.txt');
24
+ const tdx = ThetaDataDx.connectFromFile('creds.txt');
25
+ // Or: const tdx = ThetaDataDx.connect('user@example.com', 'password');
29
26
 
30
27
  // Historical: returns columnar object { close: number[], volume: number[], ... }
31
28
  const ohlc = tdx.stockHistoryOHLC('AAPL', '20240315', '60000');
@@ -49,11 +46,21 @@ Generated interfaces for every tick type live in `src/types.ts`:
49
46
  import type { OhlcTickColumnar, GreeksTickColumnar } from 'thetadatadx/src/types';
50
47
  ```
51
48
 
52
- Full type declarations for the `ThetaDataDx` class are in `index.d.ts` (auto-generated by napi-rs on build).
49
+ Full type declarations for the `ThetaDataDx` class are in `index.d.ts` (auto-generated by napi-rs).
50
+
51
+ ## Building from source
52
+
53
+ Only needed if your platform doesn't have a pre-built binary or you want to develop locally:
54
+
55
+ ```bash
56
+ cd sdks/typescript
57
+ npm install
58
+ npm run build # requires Rust stable + protoc
59
+ ```
53
60
 
54
61
  ## API reference
55
62
 
56
- All 61 endpoints from `endpoint_surface.toml` are exposed as camelCase methods on `ThetaDataDx`. See `index.d.ts` after building for the complete method list with JSDoc comments.
63
+ All 61 endpoints from `endpoint_surface.toml` are exposed as camelCase methods on `ThetaDataDx`. See `index.d.ts` for the complete method list with JSDoc comments.
57
64
 
58
65
  ## Docs
59
66
 
package/index.d.ts ADDED
@@ -0,0 +1,183 @@
1
+ /* auto-generated by NAPI-RS */
2
+ /* eslint-disable */
3
+ export declare class ThetaDataDx {
4
+ /**
5
+ * Connect to ThetaData. Historical (MDDS/gRPC) only; call startStreaming()
6
+ * to begin FPSS real-time data.
7
+ */
8
+ static connect(email: string, password: string): ThetaDataDx
9
+ /** Connect with a credentials file (line 1 = email, line 2 = password). */
10
+ static connectFromFile(path: string): ThetaDataDx
11
+ /** List all available stock ticker symbols. */
12
+ stockListSymbols(timeoutMs?: number | undefined | null): Array<string>
13
+ /** List available dates for a stock by request type (EOD, TRADE, QUOTE, etc.). */
14
+ stockListDates(requestType: string, symbol: string, timeoutMs?: number | undefined | null): Array<string>
15
+ /** Get the latest OHLC snapshot for one or more stocks. */
16
+ stockSnapshotOHLC(symbols: Array<string>, venue?: string | undefined | null, minTime?: string | undefined | null, timeoutMs?: number | undefined | null): any
17
+ /** Get the latest trade snapshot for one or more stocks. */
18
+ stockSnapshotTrade(symbols: Array<string>, venue?: string | undefined | null, minTime?: string | undefined | null, timeoutMs?: number | undefined | null): any
19
+ /** Get the latest NBBO quote snapshot for one or more stocks. */
20
+ stockSnapshotQuote(symbols: Array<string>, venue?: string | undefined | null, minTime?: string | undefined | null, timeoutMs?: number | undefined | null): any
21
+ /** Get the latest market value snapshot for one or more stocks. */
22
+ stockSnapshotMarketValue(symbols: Array<string>, venue?: string | undefined | null, minTime?: string | undefined | null, timeoutMs?: number | undefined | null): any
23
+ /** Fetch end-of-day stock data for a date range. Returns OHLCV + bid/ask per trading day. */
24
+ stockHistoryEOD(symbol: string, startDate: string, endDate: string, timeoutMs?: number | undefined | null): any
25
+ /** Fetch intraday OHLC bars for a stock on a single date. */
26
+ stockHistoryOHLC(symbol: string, date: string, interval: string, startTime?: string | undefined | null, endTime?: string | undefined | null, venue?: string | undefined | null, startDate?: string | undefined | null, endDate?: string | undefined | null, timeoutMs?: number | undefined | null): any
27
+ /** Fetch all trades for a stock on a given date. */
28
+ stockHistoryTrade(symbol: string, date: string, startTime?: string | undefined | null, endTime?: string | undefined | null, venue?: string | undefined | null, startDate?: string | undefined | null, endDate?: string | undefined | null, timeoutMs?: number | undefined | null): any
29
+ /** Fetch NBBO quotes for a stock on a given date at a given interval. */
30
+ stockHistoryQuote(symbol: string, date: string, interval: string, startTime?: string | undefined | null, endTime?: string | undefined | null, venue?: string | undefined | null, startDate?: string | undefined | null, endDate?: string | undefined | null, timeoutMs?: number | undefined | null): any
31
+ /** Fetch combined trade + quote ticks for a stock on a given date. Returns raw DataTable. */
32
+ stockHistoryTradeQuote(symbol: string, date: string, startTime?: string | undefined | null, endTime?: string | undefined | null, exclusive?: boolean | undefined | null, venue?: string | undefined | null, startDate?: string | undefined | null, endDate?: string | undefined | null, timeoutMs?: number | undefined | null): any
33
+ /** Fetch the trade at a specific time of day across a date range. */
34
+ stockAtTimeTrade(symbol: string, startDate: string, endDate: string, timeOfDay: string, venue?: string | undefined | null, timeoutMs?: number | undefined | null): any
35
+ /** Fetch the quote at a specific time of day across a date range. */
36
+ stockAtTimeQuote(symbol: string, startDate: string, endDate: string, timeOfDay: string, venue?: string | undefined | null, timeoutMs?: number | undefined | null): any
37
+ /** List all available option underlying symbols. */
38
+ optionListSymbols(timeoutMs?: number | undefined | null): Array<string>
39
+ /** List available dates for an option contract by request type. */
40
+ optionListDates(requestType: string, symbol: string, expiration: string, strike: string, right: string, timeoutMs?: number | undefined | null): Array<string>
41
+ /** List available expiration dates for an option underlying. */
42
+ optionListExpirations(symbol: string, timeoutMs?: number | undefined | null): Array<string>
43
+ /** List available strike prices for an option at a given expiration. */
44
+ optionListStrikes(symbol: string, expiration: string, timeoutMs?: number | undefined | null): Array<string>
45
+ /** List all option contracts for a symbol on a given date. */
46
+ optionListContracts(requestType: string, symbol: string, date: string, maxDte?: number | undefined | null, timeoutMs?: number | undefined | null): any
47
+ /** Get the latest OHLC snapshot for an option contract. */
48
+ optionSnapshotOHLC(symbol: string, expiration: string, strike: string, right: string, maxDte?: number | undefined | null, strikeRange?: number | undefined | null, minTime?: string | undefined | null, timeoutMs?: number | undefined | null): any
49
+ /** Get the latest trade snapshot for an option contract. */
50
+ optionSnapshotTrade(symbol: string, expiration: string, strike: string, right: string, strikeRange?: number | undefined | null, minTime?: string | undefined | null, timeoutMs?: number | undefined | null): any
51
+ /** Get the latest NBBO quote snapshot for an option contract. */
52
+ optionSnapshotQuote(symbol: string, expiration: string, strike: string, right: string, maxDte?: number | undefined | null, strikeRange?: number | undefined | null, minTime?: string | undefined | null, timeoutMs?: number | undefined | null): any
53
+ /** Get the latest open interest snapshot for an option contract. */
54
+ optionSnapshotOpenInterest(symbol: string, expiration: string, strike: string, right: string, maxDte?: number | undefined | null, strikeRange?: number | undefined | null, minTime?: string | undefined | null, timeoutMs?: number | undefined | null): any
55
+ /** Get the latest market value snapshot for an option contract. */
56
+ optionSnapshotMarketValue(symbol: string, expiration: string, strike: string, right: string, maxDte?: number | undefined | null, strikeRange?: number | undefined | null, minTime?: string | undefined | null, timeoutMs?: number | undefined | null): any
57
+ /** Get implied volatility snapshot for an option contract (from ThetaData server). */
58
+ optionSnapshotGreeksImpliedVolatility(symbol: string, expiration: string, strike: string, right: string, annualDividend?: number | undefined | null, rateType?: string | undefined | null, rateValue?: number | undefined | null, stockPrice?: number | undefined | null, version?: string | undefined | null, maxDte?: number | undefined | null, strikeRange?: number | undefined | null, minTime?: string | undefined | null, useMarketValue?: boolean | undefined | null, timeoutMs?: number | undefined | null): any
59
+ /** Get all Greeks snapshot for an option contract (from ThetaData server). */
60
+ optionSnapshotGreeksAll(symbol: string, expiration: string, strike: string, right: string, annualDividend?: number | undefined | null, rateType?: string | undefined | null, rateValue?: number | undefined | null, stockPrice?: number | undefined | null, version?: string | undefined | null, maxDte?: number | undefined | null, strikeRange?: number | undefined | null, minTime?: string | undefined | null, useMarketValue?: boolean | undefined | null, timeoutMs?: number | undefined | null): any
61
+ /** Get first-order Greeks snapshot (delta, theta, rho) for an option contract. */
62
+ optionSnapshotGreeksFirstOrder(symbol: string, expiration: string, strike: string, right: string, annualDividend?: number | undefined | null, rateType?: string | undefined | null, rateValue?: number | undefined | null, stockPrice?: number | undefined | null, version?: string | undefined | null, maxDte?: number | undefined | null, strikeRange?: number | undefined | null, minTime?: string | undefined | null, useMarketValue?: boolean | undefined | null, timeoutMs?: number | undefined | null): any
63
+ /** Get second-order Greeks snapshot (gamma, vanna, charm) for an option contract. */
64
+ optionSnapshotGreeksSecondOrder(symbol: string, expiration: string, strike: string, right: string, annualDividend?: number | undefined | null, rateType?: string | undefined | null, rateValue?: number | undefined | null, stockPrice?: number | undefined | null, version?: string | undefined | null, maxDte?: number | undefined | null, strikeRange?: number | undefined | null, minTime?: string | undefined | null, useMarketValue?: boolean | undefined | null, timeoutMs?: number | undefined | null): any
65
+ /** Get third-order Greeks snapshot (speed, color, ultima) for an option contract. */
66
+ optionSnapshotGreeksThirdOrder(symbol: string, expiration: string, strike: string, right: string, annualDividend?: number | undefined | null, rateType?: string | undefined | null, rateValue?: number | undefined | null, stockPrice?: number | undefined | null, version?: string | undefined | null, maxDte?: number | undefined | null, strikeRange?: number | undefined | null, minTime?: string | undefined | null, useMarketValue?: boolean | undefined | null, timeoutMs?: number | undefined | null): any
67
+ /** Fetch end-of-day option data for a contract over a date range. */
68
+ optionHistoryEOD(symbol: string, expiration: string, strike: string, right: string, startDate: string, endDate: string, maxDte?: number | undefined | null, strikeRange?: number | undefined | null, timeoutMs?: number | undefined | null): any
69
+ /** Fetch intraday OHLC bars for an option contract. */
70
+ optionHistoryOHLC(symbol: string, expiration: string, strike: string, right: string, date: string, interval: string, startTime?: string | undefined | null, endTime?: string | undefined | null, strikeRange?: number | undefined | null, startDate?: string | undefined | null, endDate?: string | undefined | null, timeoutMs?: number | undefined | null): any
71
+ /** Fetch all trades for an option contract on a given date. */
72
+ optionHistoryTrade(symbol: string, expiration: string, strike: string, right: string, date: string, startTime?: string | undefined | null, endTime?: string | undefined | null, maxDte?: number | undefined | null, strikeRange?: number | undefined | null, startDate?: string | undefined | null, endDate?: string | undefined | null, timeoutMs?: number | undefined | null): any
73
+ /** Fetch NBBO quotes for an option contract on a given date. */
74
+ optionHistoryQuote(symbol: string, expiration: string, strike: string, right: string, date: string, interval: string, startTime?: string | undefined | null, endTime?: string | undefined | null, maxDte?: number | undefined | null, strikeRange?: number | undefined | null, startDate?: string | undefined | null, endDate?: string | undefined | null, timeoutMs?: number | undefined | null): any
75
+ /** Fetch combined trade + quote ticks for an option contract. */
76
+ optionHistoryTradeQuote(symbol: string, expiration: string, strike: string, right: string, date: string, startTime?: string | undefined | null, endTime?: string | undefined | null, exclusive?: boolean | undefined | null, maxDte?: number | undefined | null, strikeRange?: number | undefined | null, startDate?: string | undefined | null, endDate?: string | undefined | null, timeoutMs?: number | undefined | null): any
77
+ /** Fetch open interest history for an option contract. */
78
+ optionHistoryOpenInterest(symbol: string, expiration: string, strike: string, right: string, date: string, maxDte?: number | undefined | null, strikeRange?: number | undefined | null, startDate?: string | undefined | null, endDate?: string | undefined | null, timeoutMs?: number | undefined | null): any
79
+ /** Fetch end-of-day Greeks history for an option contract. */
80
+ optionHistoryGreeksEOD(symbol: string, expiration: string, strike: string, right: string, startDate: string, endDate: string, annualDividend?: number | undefined | null, rateType?: string | undefined | null, rateValue?: number | undefined | null, version?: string | undefined | null, underlyerUseNbbo?: boolean | undefined | null, maxDte?: number | undefined | null, strikeRange?: number | undefined | null, timeoutMs?: number | undefined | null): any
81
+ /** Fetch all Greeks history for an option contract (intraday, sampled by interval). */
82
+ optionHistoryGreeksAll(symbol: string, expiration: string, strike: string, right: string, date: string, interval: string, startTime?: string | undefined | null, endTime?: string | undefined | null, annualDividend?: number | undefined | null, rateType?: string | undefined | null, rateValue?: number | undefined | null, version?: string | undefined | null, strikeRange?: number | undefined | null, startDate?: string | undefined | null, endDate?: string | undefined | null, timeoutMs?: number | undefined | null): any
83
+ /** Fetch all Greeks on each trade for an option contract. */
84
+ optionHistoryTradeGreeksAll(symbol: string, expiration: string, strike: string, right: string, date: string, startTime?: string | undefined | null, endTime?: string | undefined | null, annualDividend?: number | undefined | null, rateType?: string | undefined | null, rateValue?: number | undefined | null, version?: string | undefined | null, maxDte?: number | undefined | null, strikeRange?: number | undefined | null, startDate?: string | undefined | null, endDate?: string | undefined | null, timeoutMs?: number | undefined | null): any
85
+ /** Fetch first-order Greeks history (intraday, sampled by interval). */
86
+ optionHistoryGreeksFirstOrder(symbol: string, expiration: string, strike: string, right: string, date: string, interval: string, startTime?: string | undefined | null, endTime?: string | undefined | null, annualDividend?: number | undefined | null, rateType?: string | undefined | null, rateValue?: number | undefined | null, version?: string | undefined | null, strikeRange?: number | undefined | null, startDate?: string | undefined | null, endDate?: string | undefined | null, timeoutMs?: number | undefined | null): any
87
+ /** Fetch first-order Greeks on each trade for an option contract. */
88
+ optionHistoryTradeGreeksFirstOrder(symbol: string, expiration: string, strike: string, right: string, date: string, startTime?: string | undefined | null, endTime?: string | undefined | null, annualDividend?: number | undefined | null, rateType?: string | undefined | null, rateValue?: number | undefined | null, version?: string | undefined | null, maxDte?: number | undefined | null, strikeRange?: number | undefined | null, startDate?: string | undefined | null, endDate?: string | undefined | null, timeoutMs?: number | undefined | null): any
89
+ /** Fetch second-order Greeks history (intraday, sampled by interval). */
90
+ optionHistoryGreeksSecondOrder(symbol: string, expiration: string, strike: string, right: string, date: string, interval: string, startTime?: string | undefined | null, endTime?: string | undefined | null, annualDividend?: number | undefined | null, rateType?: string | undefined | null, rateValue?: number | undefined | null, version?: string | undefined | null, strikeRange?: number | undefined | null, startDate?: string | undefined | null, endDate?: string | undefined | null, timeoutMs?: number | undefined | null): any
91
+ /** Fetch second-order Greeks on each trade for an option contract. */
92
+ optionHistoryTradeGreeksSecondOrder(symbol: string, expiration: string, strike: string, right: string, date: string, startTime?: string | undefined | null, endTime?: string | undefined | null, annualDividend?: number | undefined | null, rateType?: string | undefined | null, rateValue?: number | undefined | null, version?: string | undefined | null, maxDte?: number | undefined | null, strikeRange?: number | undefined | null, startDate?: string | undefined | null, endDate?: string | undefined | null, timeoutMs?: number | undefined | null): any
93
+ /** Fetch third-order Greeks history (intraday, sampled by interval). */
94
+ optionHistoryGreeksThirdOrder(symbol: string, expiration: string, strike: string, right: string, date: string, interval: string, startTime?: string | undefined | null, endTime?: string | undefined | null, annualDividend?: number | undefined | null, rateType?: string | undefined | null, rateValue?: number | undefined | null, version?: string | undefined | null, strikeRange?: number | undefined | null, startDate?: string | undefined | null, endDate?: string | undefined | null, timeoutMs?: number | undefined | null): any
95
+ /** Fetch third-order Greeks on each trade for an option contract. */
96
+ optionHistoryTradeGreeksThirdOrder(symbol: string, expiration: string, strike: string, right: string, date: string, startTime?: string | undefined | null, endTime?: string | undefined | null, annualDividend?: number | undefined | null, rateType?: string | undefined | null, rateValue?: number | undefined | null, version?: string | undefined | null, maxDte?: number | undefined | null, strikeRange?: number | undefined | null, startDate?: string | undefined | null, endDate?: string | undefined | null, timeoutMs?: number | undefined | null): any
97
+ /** Fetch implied volatility history (intraday, sampled by interval). */
98
+ optionHistoryGreeksImpliedVolatility(symbol: string, expiration: string, strike: string, right: string, date: string, interval: string, startTime?: string | undefined | null, endTime?: string | undefined | null, annualDividend?: number | undefined | null, rateType?: string | undefined | null, rateValue?: number | undefined | null, version?: string | undefined | null, strikeRange?: number | undefined | null, startDate?: string | undefined | null, endDate?: string | undefined | null, timeoutMs?: number | undefined | null): any
99
+ /** Fetch implied volatility on each trade for an option contract. */
100
+ optionHistoryTradeGreeksImpliedVolatility(symbol: string, expiration: string, strike: string, right: string, date: string, startTime?: string | undefined | null, endTime?: string | undefined | null, annualDividend?: number | undefined | null, rateType?: string | undefined | null, rateValue?: number | undefined | null, version?: string | undefined | null, maxDte?: number | undefined | null, strikeRange?: number | undefined | null, startDate?: string | undefined | null, endDate?: string | undefined | null, timeoutMs?: number | undefined | null): any
101
+ /** Fetch the trade at a specific time of day across a date range for an option. */
102
+ optionAtTimeTrade(symbol: string, expiration: string, strike: string, right: string, startDate: string, endDate: string, timeOfDay: string, maxDte?: number | undefined | null, strikeRange?: number | undefined | null, timeoutMs?: number | undefined | null): any
103
+ /** Fetch the quote at a specific time of day across a date range for an option. */
104
+ optionAtTimeQuote(symbol: string, expiration: string, strike: string, right: string, startDate: string, endDate: string, timeOfDay: string, maxDte?: number | undefined | null, strikeRange?: number | undefined | null, timeoutMs?: number | undefined | null): any
105
+ /** List all available index symbols. */
106
+ indexListSymbols(timeoutMs?: number | undefined | null): Array<string>
107
+ /** List available dates for an index symbol. */
108
+ indexListDates(symbol: string, timeoutMs?: number | undefined | null): Array<string>
109
+ /** Get the latest OHLC snapshot for one or more indices. */
110
+ indexSnapshotOHLC(symbols: Array<string>, minTime?: string | undefined | null, timeoutMs?: number | undefined | null): any
111
+ /** Get the latest price snapshot for one or more indices. */
112
+ indexSnapshotPrice(symbols: Array<string>, minTime?: string | undefined | null, timeoutMs?: number | undefined | null): any
113
+ /** Get the latest market value snapshot for one or more indices. */
114
+ indexSnapshotMarketValue(symbols: Array<string>, minTime?: string | undefined | null, timeoutMs?: number | undefined | null): any
115
+ /** Fetch end-of-day index data for a date range. */
116
+ indexHistoryEOD(symbol: string, startDate: string, endDate: string, timeoutMs?: number | undefined | null): any
117
+ /** Fetch intraday OHLC bars for an index. */
118
+ indexHistoryOHLC(symbol: string, startDate: string, endDate: string, interval: string, startTime?: string | undefined | null, endTime?: string | undefined | null, timeoutMs?: number | undefined | null): any
119
+ /** Fetch intraday price history for an index. */
120
+ indexHistoryPrice(symbol: string, date: string, interval: string, startTime?: string | undefined | null, endTime?: string | undefined | null, startDate?: string | undefined | null, endDate?: string | undefined | null, timeoutMs?: number | undefined | null): any
121
+ /** Fetch the index price at a specific time of day across a date range. */
122
+ indexAtTimePrice(symbol: string, startDate: string, endDate: string, timeOfDay: string, timeoutMs?: number | undefined | null): any
123
+ /** Check whether the market is open today. */
124
+ calendarOpenToday(timeoutMs?: number | undefined | null): any
125
+ /** Get calendar information for a specific date. */
126
+ calendarOnDate(date: string, timeoutMs?: number | undefined | null): any
127
+ /** Get calendar information for an entire year. */
128
+ calendarYear(year: string, timeoutMs?: number | undefined | null): any
129
+ /** Fetch end-of-day interest rate history. */
130
+ interestRateHistoryEOD(symbol: string, startDate: string, endDate: string, timeoutMs?: number | undefined | null): any
131
+ /** Fetch intraday OHLC bars across a date range. */
132
+ stockHistoryOHLCRange(symbol: string, startDate: string, endDate: string, interval: string, startTime?: string | undefined | null, endTime?: string | undefined | null, venue?: string | undefined | null, timeoutMs?: number | undefined | null): any
133
+ /** Start FPSS streaming. Events are buffered; poll with next_event(). */
134
+ startStreaming(): void
135
+ /** Whether the streaming connection is active. */
136
+ isStreaming(): boolean
137
+ /** Subscribe to real-time quote data for a stock symbol. */
138
+ subscribeQuotes(symbol: string): void
139
+ /** Subscribe to real-time trade data for a stock symbol. */
140
+ subscribeTrades(symbol: string): void
141
+ /** Subscribe to open interest data for a stock symbol. */
142
+ subscribeOpenInterest(symbol: string): void
143
+ /** Subscribe to quote data for an option contract. */
144
+ subscribeOptionQuotes(symbol: string, expiration: string, strike: string, right: string): void
145
+ /** Subscribe to trade data for an option contract. */
146
+ subscribeOptionTrades(symbol: string, expiration: string, strike: string, right: string): void
147
+ /** Subscribe to open interest data for an option contract. */
148
+ subscribeOptionOpenInterest(symbol: string, expiration: string, strike: string, right: string): void
149
+ /** Subscribe to all trades for a security type. */
150
+ subscribeFullTrades(secType: string): void
151
+ /** Subscribe to all open interest for a security type. */
152
+ subscribeFullOpenInterest(secType: string): void
153
+ /** Unsubscribe from quote data for a stock symbol. */
154
+ unsubscribeQuotes(symbol: string): void
155
+ /** Unsubscribe from trade data for a stock symbol. */
156
+ unsubscribeTrades(symbol: string): void
157
+ /** Unsubscribe from open interest data for a stock symbol. */
158
+ unsubscribeOpenInterest(symbol: string): void
159
+ /** Unsubscribe from quote data for an option contract. */
160
+ unsubscribeOptionQuotes(symbol: string, expiration: string, strike: string, right: string): void
161
+ /** Unsubscribe from trade data for an option contract. */
162
+ unsubscribeOptionTrades(symbol: string, expiration: string, strike: string, right: string): void
163
+ /** Unsubscribe from open interest data for an option contract. */
164
+ unsubscribeOptionOpenInterest(symbol: string, expiration: string, strike: string, right: string): void
165
+ /** Unsubscribe from all trades for a security type. */
166
+ unsubscribeFullTrades(secType: string): void
167
+ /** Unsubscribe from all open interest for a security type. */
168
+ unsubscribeFullOpenInterest(secType: string): void
169
+ /** Get the current contract map keyed by server-assigned contract ID. */
170
+ contractMap(): Record<string, string>
171
+ /** Look up a single contract by its server-assigned ID. */
172
+ contractLookup(id: number): string | null
173
+ /** Get a snapshot of currently active subscriptions. */
174
+ activeSubscriptions(): any
175
+ /** Poll for the next FPSS event. */
176
+ nextEvent(timeoutMs: number): any | null
177
+ /** Reconnect streaming and re-subscribe all previous subscriptions. */
178
+ reconnect(): void
179
+ /** Stop streaming while keeping the historical client usable. */
180
+ stopStreaming(): void
181
+ /** Shut down the FPSS streaming connection. */
182
+ shutdown(): void
183
+ }
package/index.js CHANGED
@@ -1,5 +1,579 @@
1
- // Local-build loader for the napi native addon.
2
- // After `npm run build`, the compiled .node binary lives next to this file.
3
- const { ThetaDataDx } = require('./thetadatadx.node');
4
- module.exports = { ThetaDataDx };
5
- module.exports.ThetaDataDx = ThetaDataDx;
1
+ // prettier-ignore
2
+ /* eslint-disable */
3
+ // @ts-nocheck
4
+ /* auto-generated by NAPI-RS */
5
+
6
+ const { readFileSync } = require('node:fs')
7
+ let nativeBinding = null
8
+ const loadErrors = []
9
+
10
+ const isMusl = () => {
11
+ let musl = false
12
+ if (process.platform === 'linux') {
13
+ musl = isMuslFromFilesystem()
14
+ if (musl === null) {
15
+ musl = isMuslFromReport()
16
+ }
17
+ if (musl === null) {
18
+ musl = isMuslFromChildProcess()
19
+ }
20
+ }
21
+ return musl
22
+ }
23
+
24
+ const isFileMusl = (f) => f.includes('libc.musl-') || f.includes('ld-musl-')
25
+
26
+ const isMuslFromFilesystem = () => {
27
+ try {
28
+ return readFileSync('/usr/bin/ldd', 'utf-8').includes('musl')
29
+ } catch {
30
+ return null
31
+ }
32
+ }
33
+
34
+ const isMuslFromReport = () => {
35
+ let report = null
36
+ if (typeof process.report?.getReport === 'function') {
37
+ process.report.excludeNetwork = true
38
+ report = process.report.getReport()
39
+ }
40
+ if (!report) {
41
+ return null
42
+ }
43
+ if (report.header && report.header.glibcVersionRuntime) {
44
+ return false
45
+ }
46
+ if (Array.isArray(report.sharedObjects)) {
47
+ if (report.sharedObjects.some(isFileMusl)) {
48
+ return true
49
+ }
50
+ }
51
+ return false
52
+ }
53
+
54
+ const isMuslFromChildProcess = () => {
55
+ try {
56
+ return require('child_process').execSync('ldd --version', { encoding: 'utf8' }).includes('musl')
57
+ } catch (e) {
58
+ // If we reach this case, we don't know if the system is musl or not, so is better to just fallback to false
59
+ return false
60
+ }
61
+ }
62
+
63
+ function requireNative() {
64
+ if (process.env.NAPI_RS_NATIVE_LIBRARY_PATH) {
65
+ try {
66
+ return require(process.env.NAPI_RS_NATIVE_LIBRARY_PATH);
67
+ } catch (err) {
68
+ loadErrors.push(err)
69
+ }
70
+ } else if (process.platform === 'android') {
71
+ if (process.arch === 'arm64') {
72
+ try {
73
+ return require('./thetadatadx.android-arm64.node')
74
+ } catch (e) {
75
+ loadErrors.push(e)
76
+ }
77
+ try {
78
+ const binding = require('thetadatadx-android-arm64')
79
+ const bindingPackageVersion = require('thetadatadx-android-arm64/package.json').version
80
+ if (bindingPackageVersion !== '7.3.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
81
+ throw new Error(`Native binding package version mismatch, expected 7.3.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
82
+ }
83
+ return binding
84
+ } catch (e) {
85
+ loadErrors.push(e)
86
+ }
87
+ } else if (process.arch === 'arm') {
88
+ try {
89
+ return require('./thetadatadx.android-arm-eabi.node')
90
+ } catch (e) {
91
+ loadErrors.push(e)
92
+ }
93
+ try {
94
+ const binding = require('thetadatadx-android-arm-eabi')
95
+ const bindingPackageVersion = require('thetadatadx-android-arm-eabi/package.json').version
96
+ if (bindingPackageVersion !== '7.3.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
97
+ throw new Error(`Native binding package version mismatch, expected 7.3.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
98
+ }
99
+ return binding
100
+ } catch (e) {
101
+ loadErrors.push(e)
102
+ }
103
+ } else {
104
+ loadErrors.push(new Error(`Unsupported architecture on Android ${process.arch}`))
105
+ }
106
+ } else if (process.platform === 'win32') {
107
+ if (process.arch === 'x64') {
108
+ if (process.config?.variables?.shlib_suffix === 'dll.a' || process.config?.variables?.node_target_type === 'shared_library') {
109
+ try {
110
+ return require('./thetadatadx.win32-x64-gnu.node')
111
+ } catch (e) {
112
+ loadErrors.push(e)
113
+ }
114
+ try {
115
+ const binding = require('thetadatadx-win32-x64-gnu')
116
+ const bindingPackageVersion = require('thetadatadx-win32-x64-gnu/package.json').version
117
+ if (bindingPackageVersion !== '7.3.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
118
+ throw new Error(`Native binding package version mismatch, expected 7.3.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
119
+ }
120
+ return binding
121
+ } catch (e) {
122
+ loadErrors.push(e)
123
+ }
124
+ } else {
125
+ try {
126
+ return require('./thetadatadx.win32-x64-msvc.node')
127
+ } catch (e) {
128
+ loadErrors.push(e)
129
+ }
130
+ try {
131
+ const binding = require('thetadatadx-win32-x64-msvc')
132
+ const bindingPackageVersion = require('thetadatadx-win32-x64-msvc/package.json').version
133
+ if (bindingPackageVersion !== '7.3.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
134
+ throw new Error(`Native binding package version mismatch, expected 7.3.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
135
+ }
136
+ return binding
137
+ } catch (e) {
138
+ loadErrors.push(e)
139
+ }
140
+ }
141
+ } else if (process.arch === 'ia32') {
142
+ try {
143
+ return require('./thetadatadx.win32-ia32-msvc.node')
144
+ } catch (e) {
145
+ loadErrors.push(e)
146
+ }
147
+ try {
148
+ const binding = require('thetadatadx-win32-ia32-msvc')
149
+ const bindingPackageVersion = require('thetadatadx-win32-ia32-msvc/package.json').version
150
+ if (bindingPackageVersion !== '7.3.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
151
+ throw new Error(`Native binding package version mismatch, expected 7.3.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
152
+ }
153
+ return binding
154
+ } catch (e) {
155
+ loadErrors.push(e)
156
+ }
157
+ } else if (process.arch === 'arm64') {
158
+ try {
159
+ return require('./thetadatadx.win32-arm64-msvc.node')
160
+ } catch (e) {
161
+ loadErrors.push(e)
162
+ }
163
+ try {
164
+ const binding = require('thetadatadx-win32-arm64-msvc')
165
+ const bindingPackageVersion = require('thetadatadx-win32-arm64-msvc/package.json').version
166
+ if (bindingPackageVersion !== '7.3.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
167
+ throw new Error(`Native binding package version mismatch, expected 7.3.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
168
+ }
169
+ return binding
170
+ } catch (e) {
171
+ loadErrors.push(e)
172
+ }
173
+ } else {
174
+ loadErrors.push(new Error(`Unsupported architecture on Windows: ${process.arch}`))
175
+ }
176
+ } else if (process.platform === 'darwin') {
177
+ try {
178
+ return require('./thetadatadx.darwin-universal.node')
179
+ } catch (e) {
180
+ loadErrors.push(e)
181
+ }
182
+ try {
183
+ const binding = require('thetadatadx-darwin-universal')
184
+ const bindingPackageVersion = require('thetadatadx-darwin-universal/package.json').version
185
+ if (bindingPackageVersion !== '7.3.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
186
+ throw new Error(`Native binding package version mismatch, expected 7.3.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
187
+ }
188
+ return binding
189
+ } catch (e) {
190
+ loadErrors.push(e)
191
+ }
192
+ if (process.arch === 'x64') {
193
+ try {
194
+ return require('./thetadatadx.darwin-x64.node')
195
+ } catch (e) {
196
+ loadErrors.push(e)
197
+ }
198
+ try {
199
+ const binding = require('thetadatadx-darwin-x64')
200
+ const bindingPackageVersion = require('thetadatadx-darwin-x64/package.json').version
201
+ if (bindingPackageVersion !== '7.3.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
202
+ throw new Error(`Native binding package version mismatch, expected 7.3.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
203
+ }
204
+ return binding
205
+ } catch (e) {
206
+ loadErrors.push(e)
207
+ }
208
+ } else if (process.arch === 'arm64') {
209
+ try {
210
+ return require('./thetadatadx.darwin-arm64.node')
211
+ } catch (e) {
212
+ loadErrors.push(e)
213
+ }
214
+ try {
215
+ const binding = require('thetadatadx-darwin-arm64')
216
+ const bindingPackageVersion = require('thetadatadx-darwin-arm64/package.json').version
217
+ if (bindingPackageVersion !== '7.3.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
218
+ throw new Error(`Native binding package version mismatch, expected 7.3.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
219
+ }
220
+ return binding
221
+ } catch (e) {
222
+ loadErrors.push(e)
223
+ }
224
+ } else {
225
+ loadErrors.push(new Error(`Unsupported architecture on macOS: ${process.arch}`))
226
+ }
227
+ } else if (process.platform === 'freebsd') {
228
+ if (process.arch === 'x64') {
229
+ try {
230
+ return require('./thetadatadx.freebsd-x64.node')
231
+ } catch (e) {
232
+ loadErrors.push(e)
233
+ }
234
+ try {
235
+ const binding = require('thetadatadx-freebsd-x64')
236
+ const bindingPackageVersion = require('thetadatadx-freebsd-x64/package.json').version
237
+ if (bindingPackageVersion !== '7.3.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
238
+ throw new Error(`Native binding package version mismatch, expected 7.3.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
239
+ }
240
+ return binding
241
+ } catch (e) {
242
+ loadErrors.push(e)
243
+ }
244
+ } else if (process.arch === 'arm64') {
245
+ try {
246
+ return require('./thetadatadx.freebsd-arm64.node')
247
+ } catch (e) {
248
+ loadErrors.push(e)
249
+ }
250
+ try {
251
+ const binding = require('thetadatadx-freebsd-arm64')
252
+ const bindingPackageVersion = require('thetadatadx-freebsd-arm64/package.json').version
253
+ if (bindingPackageVersion !== '7.3.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
254
+ throw new Error(`Native binding package version mismatch, expected 7.3.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
255
+ }
256
+ return binding
257
+ } catch (e) {
258
+ loadErrors.push(e)
259
+ }
260
+ } else {
261
+ loadErrors.push(new Error(`Unsupported architecture on FreeBSD: ${process.arch}`))
262
+ }
263
+ } else if (process.platform === 'linux') {
264
+ if (process.arch === 'x64') {
265
+ if (isMusl()) {
266
+ try {
267
+ return require('./thetadatadx.linux-x64-musl.node')
268
+ } catch (e) {
269
+ loadErrors.push(e)
270
+ }
271
+ try {
272
+ const binding = require('thetadatadx-linux-x64-musl')
273
+ const bindingPackageVersion = require('thetadatadx-linux-x64-musl/package.json').version
274
+ if (bindingPackageVersion !== '7.3.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
275
+ throw new Error(`Native binding package version mismatch, expected 7.3.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
276
+ }
277
+ return binding
278
+ } catch (e) {
279
+ loadErrors.push(e)
280
+ }
281
+ } else {
282
+ try {
283
+ return require('./thetadatadx.linux-x64-gnu.node')
284
+ } catch (e) {
285
+ loadErrors.push(e)
286
+ }
287
+ try {
288
+ const binding = require('thetadatadx-linux-x64-gnu')
289
+ const bindingPackageVersion = require('thetadatadx-linux-x64-gnu/package.json').version
290
+ if (bindingPackageVersion !== '7.3.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
291
+ throw new Error(`Native binding package version mismatch, expected 7.3.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
292
+ }
293
+ return binding
294
+ } catch (e) {
295
+ loadErrors.push(e)
296
+ }
297
+ }
298
+ } else if (process.arch === 'arm64') {
299
+ if (isMusl()) {
300
+ try {
301
+ return require('./thetadatadx.linux-arm64-musl.node')
302
+ } catch (e) {
303
+ loadErrors.push(e)
304
+ }
305
+ try {
306
+ const binding = require('thetadatadx-linux-arm64-musl')
307
+ const bindingPackageVersion = require('thetadatadx-linux-arm64-musl/package.json').version
308
+ if (bindingPackageVersion !== '7.3.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
309
+ throw new Error(`Native binding package version mismatch, expected 7.3.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
310
+ }
311
+ return binding
312
+ } catch (e) {
313
+ loadErrors.push(e)
314
+ }
315
+ } else {
316
+ try {
317
+ return require('./thetadatadx.linux-arm64-gnu.node')
318
+ } catch (e) {
319
+ loadErrors.push(e)
320
+ }
321
+ try {
322
+ const binding = require('thetadatadx-linux-arm64-gnu')
323
+ const bindingPackageVersion = require('thetadatadx-linux-arm64-gnu/package.json').version
324
+ if (bindingPackageVersion !== '7.3.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
325
+ throw new Error(`Native binding package version mismatch, expected 7.3.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
326
+ }
327
+ return binding
328
+ } catch (e) {
329
+ loadErrors.push(e)
330
+ }
331
+ }
332
+ } else if (process.arch === 'arm') {
333
+ if (isMusl()) {
334
+ try {
335
+ return require('./thetadatadx.linux-arm-musleabihf.node')
336
+ } catch (e) {
337
+ loadErrors.push(e)
338
+ }
339
+ try {
340
+ const binding = require('thetadatadx-linux-arm-musleabihf')
341
+ const bindingPackageVersion = require('thetadatadx-linux-arm-musleabihf/package.json').version
342
+ if (bindingPackageVersion !== '7.3.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
343
+ throw new Error(`Native binding package version mismatch, expected 7.3.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
344
+ }
345
+ return binding
346
+ } catch (e) {
347
+ loadErrors.push(e)
348
+ }
349
+ } else {
350
+ try {
351
+ return require('./thetadatadx.linux-arm-gnueabihf.node')
352
+ } catch (e) {
353
+ loadErrors.push(e)
354
+ }
355
+ try {
356
+ const binding = require('thetadatadx-linux-arm-gnueabihf')
357
+ const bindingPackageVersion = require('thetadatadx-linux-arm-gnueabihf/package.json').version
358
+ if (bindingPackageVersion !== '7.3.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
359
+ throw new Error(`Native binding package version mismatch, expected 7.3.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
360
+ }
361
+ return binding
362
+ } catch (e) {
363
+ loadErrors.push(e)
364
+ }
365
+ }
366
+ } else if (process.arch === 'loong64') {
367
+ if (isMusl()) {
368
+ try {
369
+ return require('./thetadatadx.linux-loong64-musl.node')
370
+ } catch (e) {
371
+ loadErrors.push(e)
372
+ }
373
+ try {
374
+ const binding = require('thetadatadx-linux-loong64-musl')
375
+ const bindingPackageVersion = require('thetadatadx-linux-loong64-musl/package.json').version
376
+ if (bindingPackageVersion !== '7.3.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
377
+ throw new Error(`Native binding package version mismatch, expected 7.3.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
378
+ }
379
+ return binding
380
+ } catch (e) {
381
+ loadErrors.push(e)
382
+ }
383
+ } else {
384
+ try {
385
+ return require('./thetadatadx.linux-loong64-gnu.node')
386
+ } catch (e) {
387
+ loadErrors.push(e)
388
+ }
389
+ try {
390
+ const binding = require('thetadatadx-linux-loong64-gnu')
391
+ const bindingPackageVersion = require('thetadatadx-linux-loong64-gnu/package.json').version
392
+ if (bindingPackageVersion !== '7.3.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
393
+ throw new Error(`Native binding package version mismatch, expected 7.3.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
394
+ }
395
+ return binding
396
+ } catch (e) {
397
+ loadErrors.push(e)
398
+ }
399
+ }
400
+ } else if (process.arch === 'riscv64') {
401
+ if (isMusl()) {
402
+ try {
403
+ return require('./thetadatadx.linux-riscv64-musl.node')
404
+ } catch (e) {
405
+ loadErrors.push(e)
406
+ }
407
+ try {
408
+ const binding = require('thetadatadx-linux-riscv64-musl')
409
+ const bindingPackageVersion = require('thetadatadx-linux-riscv64-musl/package.json').version
410
+ if (bindingPackageVersion !== '7.3.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
411
+ throw new Error(`Native binding package version mismatch, expected 7.3.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
412
+ }
413
+ return binding
414
+ } catch (e) {
415
+ loadErrors.push(e)
416
+ }
417
+ } else {
418
+ try {
419
+ return require('./thetadatadx.linux-riscv64-gnu.node')
420
+ } catch (e) {
421
+ loadErrors.push(e)
422
+ }
423
+ try {
424
+ const binding = require('thetadatadx-linux-riscv64-gnu')
425
+ const bindingPackageVersion = require('thetadatadx-linux-riscv64-gnu/package.json').version
426
+ if (bindingPackageVersion !== '7.3.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
427
+ throw new Error(`Native binding package version mismatch, expected 7.3.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
428
+ }
429
+ return binding
430
+ } catch (e) {
431
+ loadErrors.push(e)
432
+ }
433
+ }
434
+ } else if (process.arch === 'ppc64') {
435
+ try {
436
+ return require('./thetadatadx.linux-ppc64-gnu.node')
437
+ } catch (e) {
438
+ loadErrors.push(e)
439
+ }
440
+ try {
441
+ const binding = require('thetadatadx-linux-ppc64-gnu')
442
+ const bindingPackageVersion = require('thetadatadx-linux-ppc64-gnu/package.json').version
443
+ if (bindingPackageVersion !== '7.3.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
444
+ throw new Error(`Native binding package version mismatch, expected 7.3.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
445
+ }
446
+ return binding
447
+ } catch (e) {
448
+ loadErrors.push(e)
449
+ }
450
+ } else if (process.arch === 's390x') {
451
+ try {
452
+ return require('./thetadatadx.linux-s390x-gnu.node')
453
+ } catch (e) {
454
+ loadErrors.push(e)
455
+ }
456
+ try {
457
+ const binding = require('thetadatadx-linux-s390x-gnu')
458
+ const bindingPackageVersion = require('thetadatadx-linux-s390x-gnu/package.json').version
459
+ if (bindingPackageVersion !== '7.3.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
460
+ throw new Error(`Native binding package version mismatch, expected 7.3.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
461
+ }
462
+ return binding
463
+ } catch (e) {
464
+ loadErrors.push(e)
465
+ }
466
+ } else {
467
+ loadErrors.push(new Error(`Unsupported architecture on Linux: ${process.arch}`))
468
+ }
469
+ } else if (process.platform === 'openharmony') {
470
+ if (process.arch === 'arm64') {
471
+ try {
472
+ return require('./thetadatadx.openharmony-arm64.node')
473
+ } catch (e) {
474
+ loadErrors.push(e)
475
+ }
476
+ try {
477
+ const binding = require('thetadatadx-openharmony-arm64')
478
+ const bindingPackageVersion = require('thetadatadx-openharmony-arm64/package.json').version
479
+ if (bindingPackageVersion !== '7.3.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
480
+ throw new Error(`Native binding package version mismatch, expected 7.3.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
481
+ }
482
+ return binding
483
+ } catch (e) {
484
+ loadErrors.push(e)
485
+ }
486
+ } else if (process.arch === 'x64') {
487
+ try {
488
+ return require('./thetadatadx.openharmony-x64.node')
489
+ } catch (e) {
490
+ loadErrors.push(e)
491
+ }
492
+ try {
493
+ const binding = require('thetadatadx-openharmony-x64')
494
+ const bindingPackageVersion = require('thetadatadx-openharmony-x64/package.json').version
495
+ if (bindingPackageVersion !== '7.3.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
496
+ throw new Error(`Native binding package version mismatch, expected 7.3.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
497
+ }
498
+ return binding
499
+ } catch (e) {
500
+ loadErrors.push(e)
501
+ }
502
+ } else if (process.arch === 'arm') {
503
+ try {
504
+ return require('./thetadatadx.openharmony-arm.node')
505
+ } catch (e) {
506
+ loadErrors.push(e)
507
+ }
508
+ try {
509
+ const binding = require('thetadatadx-openharmony-arm')
510
+ const bindingPackageVersion = require('thetadatadx-openharmony-arm/package.json').version
511
+ if (bindingPackageVersion !== '7.3.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
512
+ throw new Error(`Native binding package version mismatch, expected 7.3.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
513
+ }
514
+ return binding
515
+ } catch (e) {
516
+ loadErrors.push(e)
517
+ }
518
+ } else {
519
+ loadErrors.push(new Error(`Unsupported architecture on OpenHarmony: ${process.arch}`))
520
+ }
521
+ } else {
522
+ loadErrors.push(new Error(`Unsupported OS: ${process.platform}, architecture: ${process.arch}`))
523
+ }
524
+ }
525
+
526
+ nativeBinding = requireNative()
527
+
528
+ if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) {
529
+ let wasiBinding = null
530
+ let wasiBindingError = null
531
+ try {
532
+ wasiBinding = require('./thetadatadx.wasi.cjs')
533
+ nativeBinding = wasiBinding
534
+ } catch (err) {
535
+ if (process.env.NAPI_RS_FORCE_WASI) {
536
+ wasiBindingError = err
537
+ }
538
+ }
539
+ if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) {
540
+ try {
541
+ wasiBinding = require('thetadatadx-wasm32-wasi')
542
+ nativeBinding = wasiBinding
543
+ } catch (err) {
544
+ if (process.env.NAPI_RS_FORCE_WASI) {
545
+ if (!wasiBindingError) {
546
+ wasiBindingError = err
547
+ } else {
548
+ wasiBindingError.cause = err
549
+ }
550
+ loadErrors.push(err)
551
+ }
552
+ }
553
+ }
554
+ if (process.env.NAPI_RS_FORCE_WASI === 'error' && !wasiBinding) {
555
+ const error = new Error('WASI binding not found and NAPI_RS_FORCE_WASI is set to error')
556
+ error.cause = wasiBindingError
557
+ throw error
558
+ }
559
+ }
560
+
561
+ if (!nativeBinding) {
562
+ if (loadErrors.length > 0) {
563
+ throw new Error(
564
+ `Cannot find native binding. ` +
565
+ `npm has a bug related to optional dependencies (https://github.com/npm/cli/issues/4828). ` +
566
+ 'Please try `npm i` again after removing both package-lock.json and node_modules directory.',
567
+ {
568
+ cause: loadErrors.reduce((err, cur) => {
569
+ cur.cause = err
570
+ return cur
571
+ }),
572
+ },
573
+ )
574
+ }
575
+ throw new Error(`Failed to load native binding`)
576
+ }
577
+
578
+ module.exports = nativeBinding
579
+ module.exports.ThetaDataDx = nativeBinding.ThetaDataDx
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thetadatadx",
3
- "version": "7.3.0",
3
+ "version": "7.3.1",
4
4
  "description": "Native ThetaData SDK for Node.js — powered by Rust via napi-rs",
5
5
  "license": "GPL-3.0-or-later",
6
6
  "repository": {
@@ -11,15 +11,28 @@
11
11
  "types": "index.d.ts",
12
12
  "napi": {
13
13
  "name": "thetadatadx",
14
- "triples": {}
14
+ "triples": {
15
+ "defaults": false,
16
+ "additional": [
17
+ "x86_64-unknown-linux-gnu",
18
+ "aarch64-apple-darwin",
19
+ "x86_64-pc-windows-msvc"
20
+ ]
21
+ }
15
22
  },
16
23
  "scripts": {
17
- "build": "napi build --release",
18
- "build:debug": "napi build",
19
- "test": "node --test __tests__/basic.test.mjs"
24
+ "build": "napi build --platform --release",
25
+ "build:debug": "napi build --platform",
26
+ "test": "node --test __tests__/basic.test.mjs",
27
+ "version": "napi version"
20
28
  },
21
29
  "devDependencies": {
22
- "@napi-rs/cli": "^2.18.0"
30
+ "@napi-rs/cli": "^3.6.2"
31
+ },
32
+ "optionalDependencies": {
33
+ "thetadatadx-linux-x64-gnu": "7.3.1",
34
+ "thetadatadx-darwin-arm64": "7.3.1",
35
+ "thetadatadx-win32-x64-msvc": "7.3.1"
23
36
  },
24
37
  "engines": {
25
38
  "node": ">= 18"