@huskly/ibkr-client 0.3.1 → 0.5.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.
package/README.md CHANGED
@@ -21,6 +21,7 @@ huskly-cli's `@huskly/schwab-client` + CLI split:
21
21
  | `src/ibkr/ibkrClient.ts` | `IbkrClient` — typed wrapper over `ibkr-client` implementing `BrokerClient` |
22
22
  | `src/ibkr/oauthConfig.ts`| Builds the OAuth config from `.pem` files + env vars |
23
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 |
24
25
  | `src/cli/` | `commander` program, `--broker` flag, and command handlers |
25
26
 
26
27
  The `*.pem` files (`private_signature.pem`, `private_encryption.pem`,
@@ -91,17 +92,73 @@ Available Funds: $...
91
92
  ...
92
93
  ```
93
94
 
95
+ ## Strategy market data
96
+
97
+ The reusable `IbkrClient` also exposes typed, read-only strategy data:
98
+
99
+ - `getPriceHistory(...)` returns normalized OHLCV bars.
100
+ - `getOptionExpiries(...)` discovers weekly and monthly maturities across month buckets.
101
+ - `getOptionChain(...)` returns an exact-expiry chain with canonical OSI symbols, conids,
102
+ bid/ask/mid prices, and delta.
103
+ - `getOptionQuote(...)` resolves and prices one exact contract.
104
+ - `getOptionContract(conid)` maps a broker conid back to durable OSI identity.
105
+
106
+ Contract discovery always calls `secdef/search` before `secdef/strikes`, because IBKR keeps
107
+ that priming state in the authenticated session. Empty post-prime strikes and incomplete
108
+ bid/ask/delta snapshots throw instead of looking like a valid chain with no candidates.
109
+ Request shaping is resilient by design: option discovery normalizes the requested symbol,
110
+ applies bounded batching for secondary-definition and market-data calls, and retries read-only
111
+ requests on transient `429` responses with capped exponential backoff (including `Retry-After`
112
+ headers when available). If every returned contract is unusable (missing bid/ask/delta), the
113
+ client now fails noisily so callers can handle that condition explicitly.
114
+ Conids are broker-boundary identifiers; consumers should persist the returned OSI `symbol`.
115
+
116
+ ### Authorized read-only smoke test
117
+
118
+ Run this only after the account owner authorizes a read-only brokerage request and the OAuth
119
+ environment from Setup is present. Supply an explicit calendar window; the client does not
120
+ source strategy time from IBKR. This calls account, security-definition, history, and
121
+ market-data endpoints only—never preview, placement, reply-confirmation, or cancellation.
122
+
123
+ ```bash
124
+ IBKR_SMOKE_SYMBOL=MSTR \
125
+ IBKR_SMOKE_FROM=2026-08-01 \
126
+ IBKR_SMOKE_TO=2026-08-31 \
127
+ node --input-type=module <<'NODE'
128
+ import { IbkrClient, buildOauthConfig } from "./dist/index.js";
129
+
130
+ const client = new IbkrClient(buildOauthConfig());
131
+ await client.init();
132
+ const symbol = process.env.IBKR_SMOKE_SYMBOL;
133
+ const from = process.env.IBKR_SMOKE_FROM;
134
+ const to = process.env.IBKR_SMOKE_TO;
135
+ if (!symbol || !from || !to) throw new Error("Smoke symbol/from/to are required");
136
+
137
+ const [balances, history, expiries] = await Promise.all([
138
+ client.getAccountBalances(),
139
+ client.getPriceHistory({ symbol, days: 5 }),
140
+ client.getOptionExpiries(symbol, "C", from, to),
141
+ ]);
142
+ const expiry = expiries[0];
143
+ if (!expiry) throw new Error(`No listed expiries for ${symbol} in ${from}..${to}`);
144
+ const chain = await client.getOptionChain(symbol, expiry);
145
+ console.log({ equityRead: Number.isFinite(balances.netLiquidation), historyBars: history.length,
146
+ expiry, contracts: chain.length, first: chain[0]?.symbol });
147
+ NODE
148
+ ```
149
+
94
150
  ## Development
95
151
 
96
152
  ```bash
97
153
  npm run lint # eslint
98
154
  npm run format # prettier --write
99
155
  npm run typecheck # tsc --noEmit
156
+ npm test # typecheck + native node:test suite
100
157
  npm run build # tsc -> dist/
101
158
  npm run check # lint + format:check + typecheck
102
159
  ```
103
160
 
104
- CI (`.github/workflows/ci.yml`) runs lint, format check, typecheck, and build on
161
+ CI (`.github/workflows/ci.yml`) runs lint, format check, typecheck, tests, and build on
105
162
  every push and pull request, plus [gitleaks](https://github.com/gitleaks/gitleaks)
106
163
  to guard against committed secrets.
107
164
 
@@ -67,4 +67,33 @@ export interface IbkrMarketDataHistoryResponse {
67
67
  volumeFactor?: number;
68
68
  data?: IbkrMarketDataHistoryBar[];
69
69
  }
70
+ /** A security-definition search result. Calling this endpoint primes strikes for the session. */
71
+ export interface IbkrSecdefSearchResult {
72
+ conid?: number;
73
+ symbol?: string;
74
+ sections?: {
75
+ secType?: string;
76
+ months?: string;
77
+ exchange?: string;
78
+ }[];
79
+ }
80
+ export interface IbkrSecdefStrikesResponse {
81
+ call?: number[];
82
+ put?: number[];
83
+ }
84
+ export interface IbkrSecdefInfo {
85
+ conid?: number;
86
+ symbol?: string;
87
+ maturityDate?: string;
88
+ right?: string;
89
+ strike?: number;
90
+ }
91
+ /** `trsrv/secdef` response keyed by conid. */
92
+ export type IbkrSecdefByConidResponse = Record<string, {
93
+ conid?: number;
94
+ symbol?: string;
95
+ expiry?: string;
96
+ putOrCall?: string;
97
+ strike?: string | number;
98
+ } | undefined>;
70
99
  //# sourceMappingURL=ibkrApiTypes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ibkrApiTypes.d.ts","sourceRoot":"","sources":["../../src/ibkr/ibkrApiTypes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,cAAc;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,sEAAsE;AACtE,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,SAAS,CAAC,CAAC;AAEhF,2DAA2D;AAC3D,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,6EAA6E;AAC7E,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,GAAG;IACjF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,iEAAiE;AACjE,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,kEAAkE;AAClE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,iBAAiB,EAAE,CAAC;CACjC;AAED,8DAA8D;AAC9D,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,SAAS,CAAC,CAAC;AAEhF,uDAAuD;AACvD,MAAM,WAAW,wBAAwB;IACvC,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ;AAED,6CAA6C;AAC7C,MAAM,WAAW,6BAA6B;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,wBAAwB,EAAE,CAAC;CACnC"}
1
+ {"version":3,"file":"ibkrApiTypes.d.ts","sourceRoot":"","sources":["../../src/ibkr/ibkrApiTypes.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { IbkrOauth1Config } from "./oauthConfig.js";
2
- import type { AccountBalances, AuthStatus, BrokerClient, BrokerPosition, BrokerQuote } from "../types.js";
2
+ import type { AccountBalances, AuthStatus, BrokerClient, BrokerPosition, BrokerQuote, 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
@@ -10,6 +10,7 @@ export declare class IbkrClient implements BrokerClient {
10
10
  private readonly raw;
11
11
  private initPromise?;
12
12
  private accountIdPromise?;
13
+ private readonly optionDiscovery;
13
14
  constructor(config: IbkrOauth1Config);
14
15
  /** Obtain the live session token (idempotent — safe to await repeatedly). */
15
16
  init(): Promise<void>;
@@ -28,7 +29,24 @@ export declare class IbkrClient implements BrokerClient {
28
29
  private normalizeStockListing;
29
30
  private normalizeStockContract;
30
31
  private resolveQuoteContract;
32
+ /** Return normalized daily price history without consulting a vendor-owned clock. */
33
+ getPriceHistory(input: PriceHistoryRequest): Promise<PriceHistoryBar[]>;
34
+ /** Discover every listed weekly/monthly expiry in the requested calendar range. */
35
+ getOptionExpiries(symbol: string, right: OptionRight, fromDate: string, toDate: string): Promise<string[]>;
36
+ /** Build one exact-expiry chain with canonical OSI symbols and required pricing/greeks. */
37
+ getOptionChain(symbol: string, expiry: string): Promise<OptionMarketQuote[]>;
38
+ /** Fetch one exact option quote; null means the contract is not listed. */
39
+ getOptionQuote(input: OptionQuoteRequest): Promise<OptionMarketQuote | null>;
40
+ /** Resolve a conid back into the canonical OSI-bearing option contract. */
41
+ getOptionContract(conid: number): Promise<OptionContract | null>;
42
+ private resolveOptionContract;
43
+ private discoverOptions;
44
+ private loadOptionContracts;
45
+ private fetchOptionQuotes;
46
+ private historyDays;
31
47
  private fetchQuoteHistory;
48
+ /** Overridable in request-level tests so snapshot warm-up does not sleep. */
49
+ protected wait(ms: number): Promise<void>;
32
50
  private normalizeQuote;
33
51
  private latestHistoryBar;
34
52
  private previousHistoryBar;
@@ -39,6 +57,22 @@ export declare class IbkrClient implements BrokerClient {
39
57
  private snapshotPercent;
40
58
  private snapshotVolume;
41
59
  /** Typed wrapper around the raw client's untyped `request()`. */
42
- private req;
60
+ protected sendRequest<T>(input: {
61
+ path: string;
62
+ method?: string;
63
+ params?: Record<string, string | number | boolean | null | undefined>;
64
+ data?: object;
65
+ }): Promise<T>;
66
+ protected req<T>(input: {
67
+ path: string;
68
+ method?: string;
69
+ params?: Record<string, string | number | boolean | null | undefined>;
70
+ data?: object;
71
+ }): Promise<T>;
72
+ private httpStatusFromError;
73
+ private retryAfterFromError;
74
+ private computeBackoffDelayMs;
75
+ private numberFromUnknown;
76
+ private headerValue;
43
77
  }
44
78
  //# sourceMappingURL=ibkrClient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ibkrClient.d.ts","sourceRoot":"","sources":["../../src/ibkr/ibkrClient.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EACV,YAAY,EAEZ,cAAc,EACd,WAAW,EACZ,MAAM,aAAa,CAAC;AAsDrB;;;;;GAKG;AACH,qBAAa,UAAW,YAAW,YAAY;IAC7C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgB;IACpC,OAAO,CAAC,WAAW,CAAC,CAAgB;IACpC,OAAO,CAAC,gBAAgB,CAAC,CAAkB;gBAE/B,MAAM,EAAE,gBAAgB;IAIpC,6EAA6E;IAC7E,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IASf,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;IAWpC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAY/B,kBAAkB,IAAI,OAAO,CAAC,eAAe,CAAC;IAc9C,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAa9D,yEAAyE;YAC3D,iBAAiB;IAc/B,kFAAkF;YACpE,WAAW;IAqBzB,OAAO,CAAC,iBAAiB;IAgBnB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAyCxE,uEAAuE;YACzD,iBAAiB;IAY/B,OAAO,CAAC,qBAAqB;IAgB7B,OAAO,CAAC,sBAAsB;YAehB,oBAAoB;YAgBpB,iBAAiB;IAkB/B,OAAO,CAAC,cAAc;IAoDtB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,cAAc;IAmBtB,iEAAiE;YACnD,GAAG;CAQlB"}
1
+ {"version":3,"file":"ibkrClient.d.ts","sourceRoot":"","sources":["../../src/ibkr/ibkrClient.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { createRequire } from "node:module";
2
2
  import { ASSET_CLASS_LABELS, toNumber } from "../helpers.js";
3
+ import { normalizeOptionContract, parseOsiOptionSymbol } from "./optionContract.js";
3
4
  // `ibkr-client`'s published ESM build is broken: its `import` condition points
4
5
  // at files that use extensionless relative imports, which Node's strict ESM
5
6
  // resolver rejects. Its CJS build is fine, so we deliberately load that via
@@ -9,6 +10,11 @@ const require = createRequire(import.meta.url);
9
10
  const { IbkrClient: RawIbkrClientCtor } = require("ibkr-client");
10
11
  /** Live market-data snapshot field 78 = position's P&L for the current day. */
11
12
  const DAY_PNL_FIELD = "78";
13
+ const OPTION_QUOTE_FIELDS = [
14
+ "84", // Bid
15
+ "86", // Ask
16
+ "7308", // Delta
17
+ ].join(",");
12
18
  const QUOTE_FIELDS = [
13
19
  "31", // Last
14
20
  "55", // Symbol
@@ -24,7 +30,86 @@ const QUOTE_FIELDS = [
24
30
  "6509", // Market data availability
25
31
  "7762", // Unformatted volume
26
32
  ].join(",");
33
+ const OPTION_DISCOVERY_MONTH_CONCURRENCY = 1;
34
+ const OPTION_SECDEF_INFO_BATCH_SIZE = 8;
35
+ const OPTION_MARKETDATA_BATCH_SIZE = 100;
36
+ const READ_ONLY_REQUEST_MAX_RETRIES = 3;
37
+ const REQUEST_RETRY_BASE_DELAY_MS = 250;
38
+ const REQUEST_RETRY_MAX_DELAY_MS = 5_000;
27
39
  const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
40
+ function parseRetryAfter(raw) {
41
+ const asString = typeof raw === "string" ? raw.trim() : undefined;
42
+ if (!asString)
43
+ return undefined;
44
+ const numeric = Number(asString);
45
+ if (Number.isFinite(numeric) && numeric > 0)
46
+ return Math.ceil(numeric * 1000);
47
+ const date = Date.parse(asString);
48
+ if (!Number.isNaN(date)) {
49
+ const ms = Math.max(0, date - Date.now());
50
+ if (ms > 0)
51
+ return ms;
52
+ }
53
+ return undefined;
54
+ }
55
+ function isHeadersLike(input) {
56
+ return (typeof input === "object" &&
57
+ input !== null &&
58
+ typeof input.get === "function");
59
+ }
60
+ function headerToString(value) {
61
+ if (value === undefined || value === null)
62
+ return undefined;
63
+ if (Array.isArray(value))
64
+ return headerToString(value[0]);
65
+ if (typeof value === "number" || typeof value === "boolean" || typeof value === "string") {
66
+ return String(value);
67
+ }
68
+ return undefined;
69
+ }
70
+ function chunks(values, size) {
71
+ const result = [];
72
+ for (let index = 0; index < values.length; index += size) {
73
+ result.push(values.slice(index, index + size));
74
+ }
75
+ return result;
76
+ }
77
+ function monthCode(calendarDate) {
78
+ const match = /^(?<year>\d{4})-(?<month>\d{2})-\d{2}$/.exec(calendarDate);
79
+ const year = Number(match?.groups?.["year"]);
80
+ const month = Number(match?.groups?.["month"]);
81
+ if (!match || month < 1 || month > 12)
82
+ throw new Error(`Invalid calendar date: ${calendarDate}`);
83
+ const monthName = [
84
+ "JAN",
85
+ "FEB",
86
+ "MAR",
87
+ "APR",
88
+ "MAY",
89
+ "JUN",
90
+ "JUL",
91
+ "AUG",
92
+ "SEP",
93
+ "OCT",
94
+ "NOV",
95
+ "DEC",
96
+ ][month - 1];
97
+ return `${String(monthName)}${String(year).slice(2)}`;
98
+ }
99
+ function monthCodes(fromDate, toDate) {
100
+ const start = new Date(`${fromDate}T00:00:00Z`);
101
+ const end = new Date(`${toDate}T00:00:00Z`);
102
+ if (!Number.isFinite(start.getTime()) || !Number.isFinite(end.getTime()) || start > end) {
103
+ throw new Error(`Invalid option expiry range: ${fromDate}..${toDate}`);
104
+ }
105
+ const result = [];
106
+ const cursor = new Date(Date.UTC(start.getUTCFullYear(), start.getUTCMonth(), 1));
107
+ while (cursor <= end) {
108
+ result.push(monthCode(cursor.toISOString().slice(0, 10)));
109
+ cursor.setUTCMonth(cursor.getUTCMonth() + 1);
110
+ }
111
+ return result;
112
+ }
28
113
  /**
29
114
  * Typed IBKR Web API client implementing the broker-neutral {@link BrokerClient}.
30
115
  * Wraps the `ibkr-client` npm package, which performs the OAuth 1.0a
@@ -35,6 +120,7 @@ export class IbkrClient {
35
120
  raw;
36
121
  initPromise;
37
122
  accountIdPromise;
123
+ optionDiscovery = new Map();
38
124
  constructor(config) {
39
125
  this.raw = new RawIbkrClientCtor(config);
40
126
  }
@@ -43,7 +129,7 @@ export class IbkrClient {
43
129
  this.initPromise ??= (async () => {
44
130
  await this.raw.init();
45
131
  // IBKR is slow right after init; give the session a moment to settle.
46
- await sleep(1000);
132
+ await this.wait(1000);
47
133
  })();
48
134
  return this.initPromise;
49
135
  }
@@ -116,7 +202,7 @@ export class IbkrClient {
116
202
  return result;
117
203
  const params = { conids: conids.join(","), fields: DAY_PNL_FIELD };
118
204
  await this.req({ path: "iserver/marketdata/snapshot", params }); // warm up
119
- await sleep(2000);
205
+ await this.wait(2000);
120
206
  const snapshot = await this.req({
121
207
  path: "iserver/marketdata/snapshot",
122
208
  params,
@@ -138,6 +224,7 @@ export class IbkrClient {
138
224
  longQuantity: qty > 0 ? qty : 0,
139
225
  shortQuantity: qty < 0 ? Math.abs(qty) : 0,
140
226
  averagePrice: toNumber(p.avgPrice),
227
+ ...(p.multiplier === undefined ? {} : { multiplier: p.multiplier }),
141
228
  marketPrice: toNumber(p.mktPrice),
142
229
  marketValue: toNumber(p.mktValue),
143
230
  currentDayProfitLoss: p.conid !== undefined ? (dayPnl.get(p.conid) ?? 0) : 0,
@@ -152,7 +239,7 @@ export class IbkrClient {
152
239
  const conids = resolvedContracts.map((contract) => contract.conid).join(",");
153
240
  const params = { conids, fields: QUOTE_FIELDS };
154
241
  await this.req({ path: "iserver/marketdata/snapshot", params }); // warm up
155
- await sleep(2000);
242
+ await this.wait(2000);
156
243
  const snapshots = await this.req({
157
244
  path: "iserver/marketdata/snapshot",
158
245
  params,
@@ -209,6 +296,22 @@ export class IbkrClient {
209
296
  };
210
297
  }
211
298
  async resolveQuoteContract(symbol) {
299
+ const osi = parseOsiOptionSymbol(symbol);
300
+ if (osi) {
301
+ const option = await this.resolveOptionContract({
302
+ symbol: osi.underlying,
303
+ expiry: osi.expiry,
304
+ strike: osi.strike,
305
+ right: osi.right,
306
+ });
307
+ return option
308
+ ? {
309
+ requestedSymbol: symbol,
310
+ symbol: option.symbol,
311
+ conid: option.conid,
312
+ }
313
+ : undefined;
314
+ }
212
315
  const instruments = await this.searchInstruments(symbol);
213
316
  const instrument = instruments.find((item) => item.brokerId !== undefined);
214
317
  if (instrument?.brokerId === undefined)
@@ -224,22 +327,231 @@ export class IbkrClient {
224
327
  ...(instrument.exchange !== undefined ? { exchange: instrument.exchange } : {}),
225
328
  };
226
329
  }
227
- async fetchQuoteHistory(conid) {
330
+ /** Return normalized daily price history without consulting a vendor-owned clock. */
331
+ async getPriceHistory(input) {
332
+ const contract = await this.resolveQuoteContract(input.symbol);
333
+ if (!contract)
334
+ throw new Error(`IBKR could not resolve market-data contract: ${input.symbol}`);
335
+ const days = this.historyDays(input);
336
+ const history = await this.fetchQuoteHistory(contract.conid, `${String(days)}d`, false);
337
+ const volumeFactor = history?.volumeFactor ?? 1;
338
+ return (history?.data ?? []).map((bar) => {
339
+ if (bar.t === undefined ||
340
+ bar.o === undefined ||
341
+ bar.h === undefined ||
342
+ bar.l === undefined ||
343
+ bar.c === undefined ||
344
+ bar.v === undefined) {
345
+ throw new Error(`IBKR returned an incomplete history bar for ${input.symbol}`);
346
+ }
347
+ return {
348
+ datetime: bar.t,
349
+ open: bar.o,
350
+ high: bar.h,
351
+ low: bar.l,
352
+ close: bar.c,
353
+ volume: bar.v * volumeFactor,
354
+ };
355
+ });
356
+ }
357
+ /** Discover every listed weekly/monthly expiry in the requested calendar range. */
358
+ async getOptionExpiries(symbol, right, fromDate, toDate) {
359
+ const normalized = symbol.trim().toUpperCase();
360
+ const months = monthCodes(fromDate, toDate);
361
+ const contracts = [];
362
+ for (let index = 0; index < months.length; index += OPTION_DISCOVERY_MONTH_CONCURRENCY) {
363
+ const batch = months.slice(index, index + OPTION_DISCOVERY_MONTH_CONCURRENCY);
364
+ const batchContracts = (await Promise.all(batch.map((month) => this.discoverOptions(normalized, month)))).flat();
365
+ contracts.push(...batchContracts);
366
+ }
367
+ return [
368
+ ...new Set(contracts
369
+ .filter((contract) => contract.right === right && contract.expiry >= fromDate && contract.expiry <= toDate)
370
+ .map((contract) => contract.expiry)),
371
+ ].sort();
372
+ }
373
+ /** Build one exact-expiry chain with canonical OSI symbols and required pricing/greeks. */
374
+ async getOptionChain(symbol, expiry) {
375
+ const contracts = (await this.discoverOptions(symbol, monthCode(expiry))).filter((contract) => contract.expiry === expiry);
376
+ if (!contracts.length) {
377
+ throw new Error(`IBKR returned no option contracts for ${symbol} ${expiry}`);
378
+ }
379
+ const quoted = await this.fetchOptionQuotes(contracts, { allowIncomplete: true });
380
+ if (!quoted.length) {
381
+ throw new Error(`IBKR returned no usable option quotes for ${symbol} ${expiry}`);
382
+ }
383
+ return quoted;
384
+ }
385
+ /** Fetch one exact option quote; null means the contract is not listed. */
386
+ async getOptionQuote(input) {
387
+ const contract = await this.resolveOptionContract(input);
388
+ if (!contract)
389
+ return null;
390
+ return (await this.fetchOptionQuotes([contract]))[0] ?? null;
391
+ }
392
+ /** Resolve a conid back into the canonical OSI-bearing option contract. */
393
+ async getOptionContract(conid) {
394
+ const response = await this.req({
395
+ path: "trsrv/secdef",
396
+ params: { conids: String(conid) },
397
+ });
398
+ const raw = response[String(conid)];
399
+ if (!raw)
400
+ return null;
401
+ return normalizeOptionContract({
402
+ conid: raw.conid ?? conid,
403
+ symbol: raw.symbol,
404
+ maturityDate: raw.expiry,
405
+ right: raw.putOrCall,
406
+ strike: raw.strike,
407
+ });
408
+ }
409
+ async resolveOptionContract(input) {
410
+ const contracts = await this.discoverOptions(input.symbol, monthCode(input.expiry));
411
+ return (contracts.find((contract) => contract.expiry === input.expiry &&
412
+ contract.right === input.right &&
413
+ contract.strike === input.strike) ?? null);
414
+ }
415
+ discoverOptions(symbol, month) {
416
+ const normalized = symbol.trim().toUpperCase();
417
+ const key = `${normalized}:${month}`;
418
+ let pending = this.optionDiscovery.get(key);
419
+ if (!pending) {
420
+ pending = this.loadOptionContracts(normalized, month);
421
+ this.optionDiscovery.set(key, pending);
422
+ }
423
+ return pending;
424
+ }
425
+ async loadOptionContracts(symbol, month) {
426
+ // This search is load-bearing: IBKR silently returns empty strikes unless the current
427
+ // session has first searched the underlying.
428
+ const search = await this.req({
429
+ path: "iserver/secdef/search",
430
+ params: { symbol },
431
+ });
432
+ const underlying = search.find((candidate) => candidate.conid !== undefined &&
433
+ candidate.sections?.some((section) => section.secType === "OPT"));
434
+ if (underlying?.conid === undefined) {
435
+ throw new Error(`IBKR did not identify ${symbol} as an optionable underlying`);
436
+ }
437
+ const strikes = await this.req({
438
+ path: "iserver/secdef/strikes",
439
+ params: { conid: String(underlying.conid), sectype: "OPT", month },
440
+ });
441
+ const requests = [
442
+ ...(strikes.call ?? []).map((strike) => ({ strike, right: "C" })),
443
+ ...(strikes.put ?? []).map((strike) => ({ strike, right: "P" })),
444
+ ];
445
+ if (!requests.length) {
446
+ throw new Error(`IBKR returned empty option strikes for ${symbol} ${month} after secdef/search priming`);
447
+ }
448
+ const contracts = [];
449
+ for (const batch of chunks(requests, OPTION_SECDEF_INFO_BATCH_SIZE)) {
450
+ const responses = await Promise.all(batch.map(({ strike, right }) => this.req({
451
+ path: "iserver/secdef/info",
452
+ params: {
453
+ conid: String(underlying.conid),
454
+ sectype: "OPT",
455
+ month,
456
+ strike,
457
+ right,
458
+ },
459
+ })));
460
+ for (const raw of responses.flat()) {
461
+ const contract = normalizeOptionContract({
462
+ conid: raw.conid,
463
+ symbol: raw.symbol ?? underlying.symbol ?? symbol,
464
+ maturityDate: raw.maturityDate,
465
+ right: raw.right,
466
+ strike: raw.strike,
467
+ });
468
+ if (contract)
469
+ contracts.push(contract);
470
+ }
471
+ }
472
+ const unique = [...new Map(contracts.map((contract) => [contract.conid, contract])).values()];
473
+ if (!unique.length) {
474
+ throw new Error(`IBKR returned no usable option definitions for ${symbol} ${month}`);
475
+ }
476
+ return unique;
477
+ }
478
+ async fetchOptionQuotes(contracts, options = {}) {
479
+ const { allowIncomplete = false } = options;
480
+ const result = [];
481
+ const skipped = [];
482
+ for (const batch of chunks(contracts, OPTION_MARKETDATA_BATCH_SIZE)) {
483
+ const params = {
484
+ conids: batch.map((contract) => contract.conid).join(","),
485
+ fields: OPTION_QUOTE_FIELDS,
486
+ };
487
+ await this.req({ path: "iserver/marketdata/snapshot", params });
488
+ await this.wait(2000);
489
+ const snapshots = await this.req({
490
+ path: "iserver/marketdata/snapshot",
491
+ params,
492
+ });
493
+ const byConid = new Map(snapshots
494
+ .filter((snapshot) => snapshot.conid !== undefined)
495
+ .map((snapshot) => [snapshot.conid, snapshot]));
496
+ for (const contract of batch) {
497
+ const snapshot = byConid.get(contract.conid);
498
+ const bid = snapshot ? this.snapshotNumber(snapshot, "84") : undefined;
499
+ const ask = snapshot ? this.snapshotNumber(snapshot, "86") : undefined;
500
+ const delta = snapshot ? this.snapshotNumber(snapshot, "7308") : undefined;
501
+ if (bid === undefined || ask === undefined || delta === undefined) {
502
+ if (allowIncomplete) {
503
+ skipped.push(contract.symbol);
504
+ continue;
505
+ }
506
+ throw new Error(`IBKR returned incomplete option market data for ${contract.symbol} (bid/ask/delta required)`);
507
+ }
508
+ result.push({ ...contract, bid, ask, mid: (bid + ask) / 2, delta });
509
+ }
510
+ }
511
+ if (allowIncomplete && skipped.length && skipped.length === contracts.length) {
512
+ const symbol = contracts[0]?.underlying ?? "unknown";
513
+ const expiry = contracts[0]?.expiry ?? "unknown";
514
+ throw new Error(`IBKR returned unusable option market data for ${symbol} ${expiry} (all ${String(skipped.length)} contracts)`);
515
+ }
516
+ return result;
517
+ }
518
+ historyDays(input) {
519
+ if (input.days !== undefined) {
520
+ if (!Number.isFinite(input.days) || input.days <= 0) {
521
+ throw new Error(`History days must be positive: ${String(input.days)}`);
522
+ }
523
+ return Math.ceil(input.days);
524
+ }
525
+ if (input.startDate === undefined || input.endDate === undefined) {
526
+ throw new Error("Price history requires days or both startDate and endDate");
527
+ }
528
+ const duration = input.endDate - input.startDate;
529
+ if (duration < 0)
530
+ throw new Error("Price history endDate must not precede startDate");
531
+ return Math.max(1, Math.ceil(duration / 86_400_000) + 1);
532
+ }
533
+ async fetchQuoteHistory(conid, period = "5d", suppressErrors = true) {
228
534
  try {
229
535
  return await this.req({
230
536
  path: "iserver/marketdata/history",
231
537
  params: {
232
538
  conid: String(conid),
233
- period: "5d",
539
+ period,
234
540
  bar: "1d",
235
541
  outsideRth: true,
236
542
  },
237
543
  });
238
544
  }
239
- catch {
545
+ catch (error) {
546
+ if (!suppressErrors)
547
+ throw error;
240
548
  return undefined;
241
549
  }
242
550
  }
551
+ /** Overridable in request-level tests so snapshot warm-up does not sleep. */
552
+ wait(ms) {
553
+ return sleep(ms);
554
+ }
243
555
  normalizeQuote(contract, snapshot, history) {
244
556
  const symbol = this.snapshotString(snapshot, "55") ?? contract.symbol;
245
557
  const description = this.snapshotString(snapshot, "58") ?? history?.text ?? contract.description;
@@ -284,10 +596,14 @@ export class IbkrClient {
284
596
  };
285
597
  }
286
598
  latestHistoryBar(history) {
287
- return history?.data?.at(-1);
599
+ if (!history?.data?.length)
600
+ return undefined;
601
+ return history.data[history.data.length - 1];
288
602
  }
289
603
  previousHistoryBar(history) {
290
- return history?.data?.at(-2);
604
+ if (!history?.data || history.data.length < 2)
605
+ return undefined;
606
+ return history.data[history.data.length - 2];
291
607
  }
292
608
  historyVolume(history, bar) {
293
609
  if (bar?.v === undefined)
@@ -344,8 +660,97 @@ export class IbkrClient {
344
660
  return parsed;
345
661
  }
346
662
  /** Typed wrapper around the raw client's untyped `request()`. */
347
- async req(input) {
663
+ async sendRequest(input) {
348
664
  return (await this.raw.request(input));
349
665
  }
666
+ async req(input) {
667
+ let retries = 0;
668
+ for (;;) {
669
+ try {
670
+ return await this.sendRequest(input);
671
+ }
672
+ catch (error) {
673
+ const status = this.httpStatusFromError(error);
674
+ if (status !== 429 || retries >= READ_ONLY_REQUEST_MAX_RETRIES) {
675
+ throw error;
676
+ }
677
+ const retryAfter = this.retryAfterFromError(error);
678
+ const delayMs = this.computeBackoffDelayMs(retries, retryAfter);
679
+ retries += 1;
680
+ await this.wait(delayMs);
681
+ }
682
+ }
683
+ }
684
+ httpStatusFromError(error) {
685
+ if (typeof error !== "object" || error === null)
686
+ return undefined;
687
+ const response = error.response;
688
+ const directStatus = this.numberFromUnknown(error.status);
689
+ if (directStatus !== undefined)
690
+ return directStatus;
691
+ const directStatusCode = this.numberFromUnknown(error.statusCode);
692
+ if (directStatusCode !== undefined)
693
+ return directStatusCode;
694
+ if (typeof response === "object" && response !== null) {
695
+ return this.numberFromUnknown(response.status ??
696
+ response.statusCode);
697
+ }
698
+ const message = error.message;
699
+ if (typeof message === "string") {
700
+ const match = /\b429\b/.exec(message);
701
+ if (match)
702
+ return 429;
703
+ }
704
+ return undefined;
705
+ }
706
+ retryAfterFromError(error) {
707
+ if (typeof error !== "object" || error === null)
708
+ return undefined;
709
+ const response = error.response;
710
+ const responseHeaders = response && typeof response === "object" && "headers" in response
711
+ ? response.headers
712
+ : undefined;
713
+ const directHeaders = error.headers;
714
+ const retryAfterRaw = this.headerValue(responseHeaders, "Retry-After") ??
715
+ this.headerValue(directHeaders, "Retry-After");
716
+ return parseRetryAfter(retryAfterRaw);
717
+ }
718
+ computeBackoffDelayMs(retry, retryAfterMs) {
719
+ if (retryAfterMs !== undefined)
720
+ return Math.min(retryAfterMs, REQUEST_RETRY_MAX_DELAY_MS);
721
+ return Math.min(REQUEST_RETRY_BASE_DELAY_MS * 2 ** retry, REQUEST_RETRY_MAX_DELAY_MS);
722
+ }
723
+ numberFromUnknown(value) {
724
+ if (typeof value === "number")
725
+ return Number.isFinite(value) ? value : undefined;
726
+ if (typeof value === "string") {
727
+ const parsed = Number(value);
728
+ return Number.isFinite(parsed) ? parsed : undefined;
729
+ }
730
+ return undefined;
731
+ }
732
+ headerValue(headers, headerName) {
733
+ const canonical = headerName.toLowerCase();
734
+ if (headers === undefined || headers === null)
735
+ return undefined;
736
+ if (isHeadersLike(headers)) {
737
+ const direct = headers.get(canonical) ?? headers.get(headerName);
738
+ return direct ?? undefined;
739
+ }
740
+ if (typeof headers === "object") {
741
+ const bucket = headers;
742
+ const direct = headerToString(bucket[headerName]) ?? headerToString(bucket[canonical]);
743
+ if (direct !== undefined)
744
+ return direct;
745
+ for (const [key, value] of Object.entries(bucket)) {
746
+ if (key.toLowerCase() !== canonical)
747
+ continue;
748
+ const candidate = headerToString(value);
749
+ if (candidate !== undefined)
750
+ return candidate;
751
+ }
752
+ }
753
+ return undefined;
754
+ }
350
755
  }
351
756
  //# sourceMappingURL=ibkrClient.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ibkrClient.js","sourceRoot":"","sources":["../../src/ibkr/ibkrClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ibkrClient.js","sourceRoot":"","sources":["../../src/ibkr/ibkrClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { OptionContract, OptionRight } from "../types.js";
2
+ export interface ParsedOsiOptionSymbol {
3
+ underlying: string;
4
+ expiry: string;
5
+ strike: number;
6
+ right: OptionRight;
7
+ }
8
+ export declare function formatOsiOptionSymbol(input: {
9
+ underlying: string;
10
+ expiry: string;
11
+ strike: number;
12
+ right: OptionRight;
13
+ }): string;
14
+ export declare function parseOsiOptionSymbol(symbol: string): ParsedOsiOptionSymbol | null;
15
+ export declare function normalizeOptionContract(input: {
16
+ conid?: number | undefined;
17
+ symbol?: string | undefined;
18
+ maturityDate?: string | undefined;
19
+ right?: string | undefined;
20
+ strike?: string | number | undefined;
21
+ }): OptionContract | null;
22
+ //# sourceMappingURL=optionContract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optionContract.d.ts","sourceRoot":"","sources":["../../src/ibkr/optionContract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/D,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,CAAC;CACpB;AAmBD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,CAAC;CACpB,GAAG,MAAM,CAWT;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CAkBjF;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACtC,GAAG,cAAc,GAAG,IAAI,CA2BxB"}
@@ -0,0 +1,77 @@
1
+ const OSI_PATTERN = /^(.{6})(\d{6})([CP])(\d{8})$/;
2
+ function calendarDate(raw) {
3
+ const digits = raw.replace(/-/g, "");
4
+ if (!/^\d{8}$/.test(digits))
5
+ throw new Error(`Invalid option expiry: ${raw}`);
6
+ const year = Number(digits.slice(0, 4));
7
+ const month = Number(digits.slice(4, 6));
8
+ const day = Number(digits.slice(6, 8));
9
+ const date = new Date(Date.UTC(year, month - 1, day));
10
+ if (date.getUTCFullYear() !== year ||
11
+ date.getUTCMonth() !== month - 1 ||
12
+ date.getUTCDate() !== day) {
13
+ throw new Error(`Invalid option expiry: ${raw}`);
14
+ }
15
+ return `${digits.slice(0, 4)}-${digits.slice(4, 6)}-${digits.slice(6, 8)}`;
16
+ }
17
+ export function formatOsiOptionSymbol(input) {
18
+ const underlying = input.underlying.trim().toUpperCase();
19
+ if (!underlying || underlying.length > 6) {
20
+ throw new Error(`OSI underlying must contain 1-6 characters: ${input.underlying}`);
21
+ }
22
+ const expiry = calendarDate(input.expiry).replace(/-/g, "").slice(2);
23
+ const strikeMillis = Math.round(input.strike * 1000);
24
+ if (!Number.isFinite(input.strike) || input.strike <= 0 || strikeMillis > 99_999_999) {
25
+ throw new Error(`Invalid option strike: ${String(input.strike)}`);
26
+ }
27
+ return `${underlying.padEnd(6)}${expiry}${input.right}${String(strikeMillis).padStart(8, "0")}`;
28
+ }
29
+ export function parseOsiOptionSymbol(symbol) {
30
+ const match = OSI_PATTERN.exec(symbol.toUpperCase());
31
+ if (!match)
32
+ return null;
33
+ const [, root, date, right, strike] = match;
34
+ if (right === undefined || strike === undefined || root === undefined || date === undefined) {
35
+ return null;
36
+ }
37
+ if (right !== "C" && right !== "P")
38
+ return null;
39
+ try {
40
+ return {
41
+ underlying: root.trim(),
42
+ expiry: calendarDate(`20${date}`),
43
+ right,
44
+ strike: Number(strike) / 1000,
45
+ };
46
+ }
47
+ catch {
48
+ return null;
49
+ }
50
+ }
51
+ export function normalizeOptionContract(input) {
52
+ const right = input.right?.toUpperCase();
53
+ const strike = Number(input.strike);
54
+ if (input.conid === undefined ||
55
+ !input.symbol ||
56
+ !input.maturityDate ||
57
+ (right !== "C" && right !== "P") ||
58
+ !Number.isFinite(strike) ||
59
+ strike <= 0) {
60
+ return null;
61
+ }
62
+ const expiry = calendarDate(input.maturityDate);
63
+ return {
64
+ conid: input.conid,
65
+ underlying: input.symbol.trim().toUpperCase(),
66
+ expiry,
67
+ strike,
68
+ right,
69
+ symbol: formatOsiOptionSymbol({
70
+ underlying: input.symbol,
71
+ expiry,
72
+ strike,
73
+ right,
74
+ }),
75
+ };
76
+ }
77
+ //# sourceMappingURL=optionContract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optionContract.js","sourceRoot":"","sources":["../../src/ibkr/optionContract.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  /** Package entry point — the broker-neutral types and the IBKR client. */
2
2
  export { IbkrClient } from "./ibkr/ibkrClient.js";
3
3
  export { buildOauthConfig } from "./ibkr/oauthConfig.js";
4
- export type { AccountBalances, AuthStatus, BrokerClient, BrokerInstrument, BrokerName, BrokerPosition, BrokerQuote, BrokerQuoteData, BrokerQuoteReference, } from "./types.js";
4
+ export type { AccountBalances, AuthStatus, BrokerClient, BrokerInstrument, BrokerName, BrokerPosition, BrokerQuote, BrokerQuoteData, BrokerQuoteReference, OptionContract, OptionMarketQuote, OptionQuoteRequest, OptionRight, PriceHistoryBar, PriceHistoryRequest, } from "./types.js";
5
+ export { formatOsiOptionSymbol, parseOsiOptionSymbol } from "./ibkr/optionContract.js";
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EACV,eAAe,EACf,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,WAAW,EACX,eAAe,EACf,oBAAoB,GACrB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EACV,eAAe,EACf,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,mBAAmB,GACpB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  /** Package entry point — the broker-neutral types and the IBKR client. */
2
2
  export { IbkrClient } from "./ibkr/ibkrClient.js";
3
3
  export { buildOauthConfig } from "./ibkr/oauthConfig.js";
4
+ export { formatOsiOptionSymbol, parseOsiOptionSymbol } from "./ibkr/optionContract.js";
4
5
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAkBzD,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC"}
package/dist/types.d.ts CHANGED
@@ -26,6 +26,8 @@ export interface BrokerPosition {
26
26
  longQuantity: number;
27
27
  shortQuantity: number;
28
28
  averagePrice: number;
29
+ /** Contract multiplier when IBKR supplies one (normally 100 for US equity options). */
30
+ multiplier?: number;
29
31
  marketPrice: number;
30
32
  marketValue: number;
31
33
  /** P/L for the current trading day. */
@@ -67,6 +69,47 @@ export interface BrokerQuote {
67
69
  reference: BrokerQuoteReference;
68
70
  quote: BrokerQuoteData;
69
71
  }
72
+ /** One normalized daily/intraday market-data history bar. */
73
+ export interface PriceHistoryBar {
74
+ datetime: number;
75
+ open: number;
76
+ high: number;
77
+ low: number;
78
+ close: number;
79
+ volume: number;
80
+ }
81
+ export type OptionRight = "C" | "P";
82
+ /**
83
+ * An IBKR option contract with durable OSI identity. The conid is intentionally retained
84
+ * only at this broker boundary; consumers should persist {@link symbol}, not {@link conid}.
85
+ */
86
+ export interface OptionContract {
87
+ conid: number;
88
+ symbol: string;
89
+ underlying: string;
90
+ expiry: string;
91
+ strike: number;
92
+ right: OptionRight;
93
+ }
94
+ /** A fully priced option contract suitable for delta-based strategy selection. */
95
+ export interface OptionMarketQuote extends OptionContract {
96
+ bid: number;
97
+ ask: number;
98
+ mid: number;
99
+ delta: number;
100
+ }
101
+ export interface PriceHistoryRequest {
102
+ symbol: string;
103
+ days?: number;
104
+ startDate?: number;
105
+ endDate?: number;
106
+ }
107
+ export interface OptionQuoteRequest {
108
+ symbol: string;
109
+ expiry: string;
110
+ strike: number;
111
+ right: OptionRight;
112
+ }
70
113
  /**
71
114
  * The contract every broker client satisfies. Kept intentionally small (account,
72
115
  * positions, quotes); extend as commands are added.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE3C,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,2BAA2B;IAC3B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,oBAAoB,CAAC;IAChC,KAAK,EAAE,eAAe,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAChC,kBAAkB,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;IAC/C,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IACzD,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;CACpE"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@huskly/ibkr-client",
3
- "version": "0.3.1",
3
+ "version": "0.5.0",
4
4
  "description": "Interactive Brokers Web API client (OAuth 1.0a) and terminal CLI",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -28,27 +28,28 @@
28
28
  "dev": "tsx src/cli/index.ts",
29
29
  "lint": "eslint src --ext .ts",
30
30
  "lint:fix": "eslint src --ext .ts --fix",
31
- "format": "prettier --write \"src/**/*.ts\"",
32
- "format:check": "prettier --check \"src/**/*.ts\"",
31
+ "format": "prettier --write \"{src,test}/**/*.ts\"",
32
+ "format:check": "prettier --check \"{src,test}/**/*.ts\"",
33
33
  "typecheck": "tsc --noEmit",
34
+ "test": "tsc --noEmit -p tsconfig.test.json && node --import tsx --test test/**/*.test.ts",
34
35
  "clean": "rm -rf dist",
35
36
  "check": "npm run lint && npm run format:check && npm run typecheck",
36
37
  "prepublishOnly": "npm run clean && npm run build"
37
38
  },
38
39
  "dependencies": {
39
40
  "chalk": "^5.6.2",
40
- "commander": "^14.0.2",
41
+ "commander": "^15.0.0",
41
42
  "dotenv": "^17.2.3",
42
43
  "ibkr-client": "^1.0.4"
43
44
  },
44
45
  "devDependencies": {
45
46
  "@eslint/js": "^9.39.1",
46
- "@types/node": "^25",
47
+ "@types/node": "^26.1.1",
47
48
  "eslint": "^9.16.0",
48
49
  "eslint-config-prettier": "^10",
49
- "prettier": "^3.4.2",
50
+ "prettier": "^3.9.6",
50
51
  "tsx": "^4.19.2",
51
- "typescript": "^5.7.2",
52
+ "typescript": "^6.0.3",
52
53
  "typescript-eslint": "^8.49.0"
53
54
  }
54
55
  }