@huskly/ibkr-client 0.6.0 → 0.8.0

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 (48) hide show
  1. package/README.md +79 -55
  2. package/dist/ibkr/derivativeContract.d.ts +6 -0
  3. package/dist/ibkr/derivativeContract.d.ts.map +1 -0
  4. package/dist/ibkr/derivativeContract.js +69 -0
  5. package/dist/ibkr/derivativeContract.js.map +1 -0
  6. package/dist/ibkr/ibkrApiTypes.d.ts +83 -1
  7. package/dist/ibkr/ibkrApiTypes.d.ts.map +1 -1
  8. package/dist/ibkr/ibkrClient.d.ts +39 -3
  9. package/dist/ibkr/ibkrClient.d.ts.map +1 -1
  10. package/dist/ibkr/ibkrClient.js +542 -2
  11. package/dist/ibkr/ibkrClient.js.map +1 -1
  12. package/dist/index.d.ts +2 -1
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +1 -0
  15. package/dist/index.js.map +1 -1
  16. package/dist/types.d.ts +133 -9
  17. package/dist/types.d.ts.map +1 -1
  18. package/dist/types.js +4 -6
  19. package/dist/types.js.map +1 -1
  20. package/package.json +4 -10
  21. package/dist/cli/account.d.ts +0 -7
  22. package/dist/cli/account.d.ts.map +0 -1
  23. package/dist/cli/account.js +0 -27
  24. package/dist/cli/account.js.map +0 -1
  25. package/dist/cli/index.d.ts +0 -3
  26. package/dist/cli/index.d.ts.map +0 -1
  27. package/dist/cli/index.js +0 -50
  28. package/dist/cli/index.js.map +0 -1
  29. package/dist/cli/orders.d.ts +0 -4
  30. package/dist/cli/orders.d.ts.map +0 -1
  31. package/dist/cli/orders.js +0 -5
  32. package/dist/cli/orders.js.map +0 -1
  33. package/dist/cli/positions.d.ts +0 -12
  34. package/dist/cli/positions.d.ts.map +0 -1
  35. package/dist/cli/positions.js +0 -106
  36. package/dist/cli/positions.js.map +0 -1
  37. package/dist/cli/quote.d.ts +0 -4
  38. package/dist/cli/quote.d.ts.map +0 -1
  39. package/dist/cli/quote.js +0 -5
  40. package/dist/cli/quote.js.map +0 -1
  41. package/dist/cli/shared.d.ts +0 -12
  42. package/dist/cli/shared.d.ts.map +0 -1
  43. package/dist/cli/shared.js +0 -31
  44. package/dist/cli/shared.js.map +0 -1
  45. package/dist/format.d.ts +0 -13
  46. package/dist/format.d.ts.map +0 -1
  47. package/dist/format.js +0 -32
  48. package/dist/format.js.map +0 -1
package/README.md CHANGED
@@ -1,9 +1,9 @@
1
- # IBKR CLI (`@huskly/ibkr-client`)
1
+ # IBKR Client (`@huskly/ibkr-client`)
2
2
 
3
- A terminal trading CLI for the **Interactive Brokers Web API**, authenticating
4
- over **OAuth 1.0a** (no Client Portal Gateway required). Built to mirror the
5
- architecture of [huskly-cli](https://github.com/felipecsl/huskly-cli) so the two
6
- can merge into a single multi-broker CLI (IBKR + Schwab) over time.
3
+ A reusable TypeScript client for the **Interactive Brokers Web API**,
4
+ authenticating over **OAuth 1.0a** without the Client Portal Gateway. This
5
+ package contains no command-line interface; terminal commands and presentation
6
+ belong exclusively in [huskly/cli](https://github.com/huskly/cli).
7
7
 
8
8
  The OAuth 1.0a live-session-token handshake is performed by the
9
9
  [`ibkr-client`](https://github.com/art1c0/ibkr-client) package. See the
@@ -12,17 +12,16 @@ the keys below are generated and registered in the IBKR self-service portal.
12
12
 
13
13
  ## Layout
14
14
 
15
- The repo is split into a reusable **library** and a thin **CLI**, mirroring
16
- huskly-cli's `@huskly/schwab-client` + CLI split:
15
+ The repository contains only the reusable client library:
17
16
 
18
- | Path | Purpose |
19
- | ------------------------ | ------------------------------------------------------------------------ |
20
- | `src/types.ts` | Broker-neutral `BrokerClient` interface + domain types (the merge contract) |
21
- | `src/ibkr/ibkrClient.ts` | `IbkrClient` — typed wrapper over `ibkr-client` implementing `BrokerClient` |
22
- | `src/ibkr/oauthConfig.ts`| Builds the OAuth config from `.pem` files + env vars |
23
- | `src/ibkr/dhPrime.ts` | Extracts the DH prime (hex) from `dhparam.pem` |
24
- | `src/ibkr/optionContract.ts` | Canonical OSI parsing and formatting for IBKR option contracts |
25
- | `src/cli/` | `commander` program, `--broker` flag, and command handlers |
17
+ | Path | Purpose |
18
+ | ---------------------------- | --------------------------------------------------------------------------- |
19
+ | `src/types.ts` | Broker-neutral `BrokerClient` interface and normalized domain types |
20
+ | `src/ibkr/ibkrClient.ts` | `IbkrClient` — typed wrapper over `ibkr-client` implementing `BrokerClient` |
21
+ | `src/ibkr/oauthConfig.ts` | Builds the OAuth config from `.pem` files + env vars |
22
+ | `src/ibkr/dhPrime.ts` | Extracts the DH prime (hex) from `dhparam.pem` |
23
+ | `src/ibkr/optionContract.ts` | Canonical OSI parsing and formatting for IBKR option contracts |
24
+ | `src/ibkr/derivativeContract.ts` | Normalizes OPT/FOP identity and market-data availability |
26
25
 
27
26
  The `*.pem` files (`private_signature.pem`, `private_encryption.pem`,
28
27
  `dhparam.pem`, plus the public keys) are the cryptographic material from the
@@ -31,7 +30,7 @@ wiki setup step and are git-ignored.
31
30
  ## Setup
32
31
 
33
32
  ```bash
34
- npm install
33
+ yarn install --frozen-lockfile
35
34
  ```
36
35
 
37
36
  Provide the account-specific secrets, either by copying the template:
@@ -56,43 +55,21 @@ Optional environment variables:
56
55
  - `IBKR_KEYS_DIR` — directory holding the `.pem` files (defaults to the current
57
56
  working directory).
58
57
  - `IBKR_ACCOUNT_ID` — target a specific account (otherwise the first is used).
58
+ - `IBKR_TRANSACTION_CURRENCY` — transaction-query currency (defaults to `USD`).
59
59
 
60
- ## Usage
60
+ ## Library API
61
61
 
62
- Run in development (via `tsx`, no build step):
62
+ `IbkrClient` owns IBKR authentication, requests, raw response types, and
63
+ normalization. Consumers such as huskly-cli provide presentation, command
64
+ routing, and caching. Its broker-neutral account API includes:
63
65
 
64
- ```bash
65
- npm run dev -- account
66
- npm run dev -- positions
67
- npm run dev -- positions AAPL # filter by symbol
68
- npm run dev -- positions --type EQUITY # filter by asset type
69
- npm run dev -- positions --csv # CSV instead of a table
70
- ```
71
-
72
- Or build and use the `ibkr-cli` binary:
73
-
74
- ```bash
75
- npm run build
76
- node dist/cli/index.js account
77
- ```
66
+ - `getAccountBalances()` and `getPositions()` for account state.
67
+ - `getQuotes()` and `searchInstruments()` for equity/ETF discovery and quotes.
68
+ - `fetchTransactionHistory()` for normalized portfolio transactions.
69
+ - `fetchOrders()` for normalized live orders, including aggregate `WORKING`
70
+ matching across IBKR's active order states.
78
71
 
79
- A global `--broker <ibkr|schwab>` flag (default `ibkr`) selects the broker.
80
- Only IBKR is implemented today; `schwab` is reserved for the huskly-cli merge.
81
-
82
- Example output:
83
-
84
- ```
85
- 💰 Account Summary
86
-
87
- Authenticated: yes Competing: no
88
- Account: U********
89
- ──────────────────────────────────────────────────
90
- Net Liquidation: $123,456.78
91
- Available Funds: $...
92
- ...
93
- ```
94
-
95
- ## Strategy market data
72
+ ### Strategy market data
96
73
 
97
74
  The reusable `IbkrClient` also exposes typed, read-only strategy data:
98
75
 
@@ -103,6 +80,53 @@ The reusable `IbkrClient` also exposes typed, read-only strategy data:
103
80
  - `getOptionQuote(...)` resolves and prices one exact contract with the same market-data shape.
104
81
  - `getOptionContract(conid)` maps a broker conid back to durable OSI identity.
105
82
 
83
+ ### Broker-neutral derivative discovery
84
+
85
+ `IbkrClient` implements the capability-specific `DerivativeDiscoveryClient` without adding
86
+ derivative operations to the smaller account-oriented `BrokerClient`:
87
+
88
+ - `getDerivativeExpiries(...)` lists exact series identity over a calendar range.
89
+ - `getDerivativeContracts(...)` discovers all matching contracts for one expiration.
90
+ - `resolveDerivativeContract(...)` returns exactly one contract and rejects ambiguous trading
91
+ classes.
92
+ - `getDerivativeChain(...)` prices one exact expiration and fails when no usable bid/ask exists.
93
+
94
+ Both `OPT` and `FOP` use the stateful `secdef/search` -> `secdef/strikes` -> `secdef/info`
95
+ sequence. FOP discovery derives a unique exchange such as CME from the search result when the
96
+ caller does not provide one. Index-option callers can select a venue explicitly, such as SMART.
97
+
98
+ ```ts
99
+ const nq = await client.resolveDerivativeContract({
100
+ assetClass: "FOP",
101
+ underlying: "NQ",
102
+ expiration: "2026-08-21",
103
+ strike: 26600,
104
+ right: "P",
105
+ tradingClass: "QN3",
106
+ });
107
+ // nq.multiplier === 20; nq.exchange === "CME"
108
+
109
+ const ndxp = await client.resolveDerivativeContract({
110
+ assetClass: "OPT",
111
+ underlying: "NDX",
112
+ expiration: "2026-08-20",
113
+ strike: 26600,
114
+ right: "P",
115
+ tradingClass: "NDXP",
116
+ exchange: "SMART",
117
+ });
118
+ ```
119
+
120
+ Semantic identity consists of asset class, underlying, expiration, strike, right, trading class,
121
+ exchange, and multiplier. `conid` is returned only because this package is the IBKR boundary; it
122
+ is broker-local, can change, and must not be persisted as durable strategy identity. Optional
123
+ settlement and exercise-style fields are preserved when IBKR supplies them.
124
+
125
+ Derivative quotes use nullable values for missing prices and Greeks and normalize field `6509`
126
+ to `live`, `delayed`, `frozen`, `frozen-delayed`, or `unavailable`. A missing subscription is
127
+ never reported as live data. All discovery APIs are read-only and do not call preview, order,
128
+ warning-reply, or cancellation endpoints.
129
+
106
130
  Contract discovery always calls `secdef/search` before `secdef/strikes`, because IBKR keeps
107
131
  that priming state in the authenticated session. Empty post-prime strikes and incomplete
108
132
  bid/ask/delta snapshots throw instead of looking like a valid chain with no candidates.
@@ -152,12 +176,12 @@ NODE
152
176
  ## Development
153
177
 
154
178
  ```bash
155
- npm run lint # eslint
156
- npm run format # prettier --write
157
- npm run typecheck # tsc --noEmit
158
- npm test # typecheck + native node:test suite
159
- npm run build # tsc -> dist/
160
- npm run check # lint + format:check + typecheck
179
+ yarn lint # eslint
180
+ yarn format # prettier --write
181
+ yarn typecheck # tsc --noEmit
182
+ yarn test # typecheck + native node:test suite
183
+ yarn build # tsc -> dist/
184
+ yarn run check # lint + format:check + typecheck
161
185
  ```
162
186
 
163
187
  CI (`.github/workflows/ci.yml`) runs lint, format check, typecheck, tests, and build on
@@ -0,0 +1,6 @@
1
+ import type { DerivativeAssetClass, DerivativeContract, DerivativeDataAvailability } from "../types.js";
2
+ import type { IbkrSecdefInfo } from "./ibkrApiTypes.js";
3
+ /** Normalize IBKR field 6509 without treating missing subscriptions as live data. */
4
+ export declare function normalizeDerivativeDataAvailability(raw: string | number | undefined): DerivativeDataAvailability;
5
+ export declare function normalizeDerivativeContract(raw: IbkrSecdefInfo, expectedAssetClass: DerivativeAssetClass, fallbackUnderlying: string): DerivativeContract | null;
6
+ //# sourceMappingURL=derivativeContract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derivativeContract.d.ts","sourceRoot":"","sources":["../../src/ibkr/derivativeContract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,EAE3B,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAwBxD,qFAAqF;AACrF,wBAAgB,mCAAmC,CACjD,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAC/B,0BAA0B,CAS5B;AAED,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,cAAc,EACnB,kBAAkB,EAAE,oBAAoB,EACxC,kBAAkB,EAAE,MAAM,GACzB,kBAAkB,GAAG,IAAI,CAoC3B"}
@@ -0,0 +1,69 @@
1
+ function calendarDate(raw) {
2
+ const digits = raw.replace(/-/g, "");
3
+ if (!/^\d{8}$/.test(digits))
4
+ return null;
5
+ const year = Number(digits.slice(0, 4));
6
+ const month = Number(digits.slice(4, 6));
7
+ const day = Number(digits.slice(6, 8));
8
+ const date = new Date(Date.UTC(year, month - 1, day));
9
+ if (date.getUTCFullYear() !== year ||
10
+ date.getUTCMonth() !== month - 1 ||
11
+ date.getUTCDate() !== day) {
12
+ return null;
13
+ }
14
+ return `${digits.slice(0, 4)}-${digits.slice(4, 6)}-${digits.slice(6, 8)}`;
15
+ }
16
+ function optionRight(raw) {
17
+ const right = raw?.toUpperCase();
18
+ return right === "C" || right === "P" ? right : null;
19
+ }
20
+ /** Normalize IBKR field 6509 without treating missing subscriptions as live data. */
21
+ export function normalizeDerivativeDataAvailability(raw) {
22
+ const timeline = String(raw ?? "")
23
+ .charAt(0)
24
+ .toUpperCase();
25
+ if (timeline === "R")
26
+ return "live";
27
+ if (timeline === "D")
28
+ return "delayed";
29
+ if (timeline === "Z")
30
+ return "frozen";
31
+ if (timeline === "Y")
32
+ return "frozen-delayed";
33
+ return "unavailable";
34
+ }
35
+ export function normalizeDerivativeContract(raw, expectedAssetClass, fallbackUnderlying) {
36
+ const assetClass = raw.secType?.toUpperCase();
37
+ const expiration = raw.maturityDate ? calendarDate(raw.maturityDate) : null;
38
+ const right = optionRight(raw.right);
39
+ const strike = Number(raw.strike);
40
+ const multiplier = Number(raw.multiplier);
41
+ const exchange = raw.exchange?.trim().toUpperCase();
42
+ const tradingClass = raw.tradingClass?.trim().toUpperCase();
43
+ if (raw.conid === undefined ||
44
+ assetClass !== expectedAssetClass ||
45
+ !expiration ||
46
+ !right ||
47
+ !Number.isFinite(strike) ||
48
+ strike <= 0 ||
49
+ !Number.isFinite(multiplier) ||
50
+ multiplier <= 0 ||
51
+ !exchange ||
52
+ !tradingClass) {
53
+ return null;
54
+ }
55
+ return {
56
+ conid: raw.conid,
57
+ assetClass: expectedAssetClass,
58
+ underlying: (raw.symbol ?? fallbackUnderlying).trim().toUpperCase(),
59
+ expiration,
60
+ strike,
61
+ right,
62
+ tradingClass,
63
+ exchange,
64
+ multiplier,
65
+ ...(raw.settlement ? { settlement: raw.settlement } : {}),
66
+ ...(raw.exerciseStyle ? { exerciseStyle: raw.exerciseStyle } : {}),
67
+ };
68
+ }
69
+ //# sourceMappingURL=derivativeContract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derivativeContract.js","sourceRoot":"","sources":["../../src/ibkr/derivativeContract.ts"],"names":[],"mappings":"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"}
@@ -51,6 +51,80 @@ export interface IbkrStockListing {
51
51
  }
52
52
  /** `trsrv/stocks` response: keyed by the requested symbol. */
53
53
  export type IbkrStocksResponse = Record<string, IbkrStockListing[] | undefined>;
54
+ export interface IbkrTransactionsResponse {
55
+ currency?: string;
56
+ from?: number;
57
+ to?: number;
58
+ includesRealTime?: boolean;
59
+ transactions?: IbkrTransaction[];
60
+ }
61
+ export interface IbkrTransaction {
62
+ date?: string;
63
+ rawDate?: string;
64
+ cur?: string;
65
+ fxRate?: number;
66
+ pr?: number;
67
+ qty?: number;
68
+ acctid?: string;
69
+ amt?: number;
70
+ conid?: number;
71
+ type?: string;
72
+ desc?: string;
73
+ }
74
+ export interface IbkrLiveOrdersResponse {
75
+ orders?: IbkrLiveOrder[];
76
+ snapshot?: boolean;
77
+ }
78
+ export interface IbkrBrokerageAccountsResponse {
79
+ accounts?: string[];
80
+ selectedAccount?: string;
81
+ }
82
+ export interface IbkrSwitchAccountResponse {
83
+ set?: boolean;
84
+ acctId?: string;
85
+ }
86
+ export interface IbkrLiveOrder {
87
+ account?: string;
88
+ acct?: string;
89
+ orderId?: number | string;
90
+ order_id?: number | string;
91
+ conid?: number;
92
+ ticker?: string;
93
+ symbol?: string;
94
+ description1?: string;
95
+ contractDescription1?: string;
96
+ contract_description_1?: string;
97
+ side?: string;
98
+ orderType?: string;
99
+ order_type?: string;
100
+ orderStatus?: string;
101
+ order_status?: string;
102
+ status?: string;
103
+ totalSize?: string | number;
104
+ total_size?: string | number;
105
+ size?: string | number;
106
+ cumFill?: string | number;
107
+ cum_fill?: string | number;
108
+ filledQuantity?: string | number;
109
+ remainingQuantity?: string | number;
110
+ sizeAndFills?: string;
111
+ size_and_fills?: string;
112
+ avgPrice?: string | number;
113
+ averagePrice?: string | number;
114
+ average_price?: string | number;
115
+ price?: string | number;
116
+ limitPrice?: string | number;
117
+ stopPrice?: string | number;
118
+ orderDescription?: string;
119
+ order_description?: string;
120
+ orderDesc?: string;
121
+ orderDescriptionWithContract?: string;
122
+ order_description_with_contract?: string;
123
+ lastExecutionTime?: string;
124
+ lastExecutionTime_r?: number;
125
+ orderTime?: string;
126
+ order_time?: string;
127
+ }
54
128
  /** One OHLCV bar from `iserver/marketdata/history`. */
55
129
  export interface IbkrMarketDataHistoryBar {
56
130
  o?: number;
@@ -69,7 +143,7 @@ export interface IbkrMarketDataHistoryResponse {
69
143
  }
70
144
  /** A security-definition search result. Calling this endpoint primes strikes for the session. */
71
145
  export interface IbkrSecdefSearchResult {
72
- conid?: number;
146
+ conid?: number | string;
73
147
  symbol?: string;
74
148
  sections?: {
75
149
  secType?: string;
@@ -84,9 +158,17 @@ export interface IbkrSecdefStrikesResponse {
84
158
  export interface IbkrSecdefInfo {
85
159
  conid?: number;
86
160
  symbol?: string;
161
+ secType?: string;
162
+ exchange?: string;
163
+ listingExchange?: string | null;
87
164
  maturityDate?: string;
88
165
  right?: string;
89
166
  strike?: number;
167
+ multiplier?: string | number;
168
+ tradingClass?: string;
169
+ validExchanges?: string;
170
+ settlement?: string;
171
+ exerciseStyle?: string;
90
172
  }
91
173
  /** `trsrv/secdef` response keyed by conid. */
92
174
  export type IbkrSecdefByConidResponse = Record<string, {
@@ -1 +1 @@
1
- {"version":3,"file":"ibkrApiTypes.d.ts","sourceRoot":"","sources":["../../src/ibkr/ibkrApiTypes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ibkrApiTypes.d.ts","sourceRoot":"","sources":["../../src/ibkr/ibkrApiTypes.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,17 @@
1
1
  import type { IbkrOauth1Config } from "./oauthConfig.js";
2
- import type { AccountBalances, AuthStatus, BrokerClient, BrokerPosition, BrokerQuote, OptionContract, OptionMarketQuote, OptionQuoteRequest, OptionRight, PriceHistoryBar, PriceHistoryRequest } from "../types.js";
2
+ import type { AccountBalances, AuthStatus, BrokerAccountOrders, BrokerClient, BrokerInstrument, BrokerInstrumentSearchProjection, BrokerOrdersOptions, BrokerPosition, BrokerQuote, BrokerTransactionHistory, DerivativeContract, DerivativeContractQuery, DerivativeDiscoveryClient, DerivativeExpiry, DerivativeExpiryQuery, DerivativeQuote, OptionContract, OptionMarketQuote, OptionQuoteRequest, OptionRight, PriceHistoryBar, PriceHistoryRequest } from "../types.js";
3
3
  /**
4
4
  * Typed IBKR Web API client implementing the broker-neutral {@link BrokerClient}.
5
5
  * Wraps the `ibkr-client` npm package, which performs the OAuth 1.0a
6
6
  * live-session-token handshake. Ports the data access from the Python PoC
7
7
  * (main.py): account summary, positions paging, and day-P/L snapshots.
8
8
  */
9
- export declare class IbkrClient implements BrokerClient {
9
+ export declare class IbkrClient implements BrokerClient, DerivativeDiscoveryClient {
10
10
  private readonly raw;
11
11
  private initPromise?;
12
12
  private accountIdPromise?;
13
13
  private readonly optionDiscovery;
14
+ private readonly derivativeDiscovery;
14
15
  constructor(config: IbkrOauth1Config);
15
16
  /** Obtain the live session token (idempotent — safe to await repeatedly). */
16
17
  init(): Promise<void>;
@@ -25,12 +26,26 @@ export declare class IbkrClient implements BrokerClient {
25
26
  private normalizePosition;
26
27
  getQuotes(symbols: string[]): Promise<Record<string, BrokerQuote>>;
27
28
  /** Resolve equity/ETF symbols to IBKR contracts via `trsrv/stocks`. */
28
- private searchInstruments;
29
+ searchInstruments(symbol: string, projection?: BrokerInstrumentSearchProjection): Promise<BrokerInstrument[]>;
30
+ fetchTransactionHistory(startDate: Date, endDate: Date): Promise<BrokerTransactionHistory[]>;
31
+ fetchOrders(options: BrokerOrdersOptions): Promise<BrokerAccountOrders[]>;
32
+ private prepareBrokerageAccount;
29
33
  private normalizeStockListing;
30
34
  private normalizeStockContract;
31
35
  private resolveQuoteContract;
32
36
  /** Return normalized daily price history without consulting a vendor-owned clock. */
33
37
  getPriceHistory(input: PriceHistoryRequest): Promise<PriceHistoryBar[]>;
38
+ /** Discover listed derivative series over an inclusive calendar range. */
39
+ getDerivativeExpiries(query: DerivativeExpiryQuery): Promise<DerivativeExpiry[]>;
40
+ /** Discover contracts for one exact expiration, preserving class and venue identity. */
41
+ getDerivativeContracts(query: DerivativeContractQuery): Promise<DerivativeContract[]>;
42
+ /** Resolve exactly one contract and reject missing or ambiguous semantic identity. */
43
+ resolveDerivativeContract(query: DerivativeContractQuery & {
44
+ right: OptionRight;
45
+ strike: number;
46
+ }): Promise<DerivativeContract>;
47
+ /** Return an exact-expiration derivative chain with explicit data availability. */
48
+ getDerivativeChain(query: DerivativeContractQuery): Promise<DerivativeQuote[]>;
34
49
  /** Discover every listed weekly/monthly expiry in the requested calendar range. */
35
50
  getOptionExpiries(symbol: string, right: OptionRight, fromDate: string, toDate: string): Promise<string[]>;
36
51
  /** Build one exact-expiry chain with canonical OSI symbols and required pricing/greeks. */
@@ -40,11 +55,32 @@ export declare class IbkrClient implements BrokerClient {
40
55
  /** Resolve a conid back into the canonical OSI-bearing option contract. */
41
56
  getOptionContract(conid: number): Promise<OptionContract | null>;
42
57
  private resolveOptionContract;
58
+ private discoverDerivativeMonth;
59
+ private loadDerivativeContracts;
60
+ private fetchDerivativeQuotes;
43
61
  private discoverOptions;
44
62
  private loadOptionContracts;
45
63
  private fetchOptionQuotes;
46
64
  private historyDays;
47
65
  private fetchQuoteHistory;
66
+ private normalizeTransaction;
67
+ private normalizeOrder;
68
+ private normalizeOrderLeg;
69
+ private normalizeOrderStatus;
70
+ private normalizeOrderType;
71
+ private normalizeOrderSide;
72
+ private ibkrStatusFilter;
73
+ private orderMatchesStatus;
74
+ private orderBelongsToAccount;
75
+ private orderInDateRange;
76
+ private orderTimeMs;
77
+ private parseOrderTime;
78
+ private firstNumber;
79
+ private firstPositiveNumber;
80
+ private quantityFromDescription;
81
+ private filledQuantityFromSizeAndFills;
82
+ private parseTransactionTime;
83
+ private transactionKey;
48
84
  /** Overridable in request-level tests so snapshot warm-up does not sleep. */
49
85
  protected wait(ms: number): Promise<void>;
50
86
  private normalizeQuote;
@@ -1 +1 @@
1
- {"version":3,"file":"ibkrClient.d.ts","sourceRoot":"","sources":["../../src/ibkr/ibkrClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ibkrClient.d.ts","sourceRoot":"","sources":["../../src/ibkr/ibkrClient.ts"],"names":[],"mappings":"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"}