@huskly/ibkr-client 0.2.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 +112 -0
- package/dist/cli/account.d.ts +7 -0
- package/dist/cli/account.d.ts.map +1 -0
- package/dist/cli/account.js +27 -0
- package/dist/cli/account.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +50 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/orders.d.ts +4 -0
- package/dist/cli/orders.d.ts.map +1 -0
- package/dist/cli/orders.js +5 -0
- package/dist/cli/orders.js.map +1 -0
- package/dist/cli/positions.d.ts +12 -0
- package/dist/cli/positions.d.ts.map +1 -0
- package/dist/cli/positions.js +106 -0
- package/dist/cli/positions.js.map +1 -0
- package/dist/cli/quote.d.ts +4 -0
- package/dist/cli/quote.d.ts.map +1 -0
- package/dist/cli/quote.js +5 -0
- package/dist/cli/quote.js.map +1 -0
- package/dist/cli/shared.d.ts +12 -0
- package/dist/cli/shared.d.ts.map +1 -0
- package/dist/cli/shared.js +31 -0
- package/dist/cli/shared.js.map +1 -0
- package/dist/format.d.ts +13 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +32 -0
- package/dist/format.js.map +1 -0
- package/dist/helpers.d.ts +11 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/helpers.js +34 -0
- package/dist/helpers.js.map +1 -0
- package/dist/ibkr/dhPrime.d.ts +13 -0
- package/dist/ibkr/dhPrime.d.ts.map +1 -0
- package/dist/ibkr/dhPrime.js +44 -0
- package/dist/ibkr/dhPrime.js.map +1 -0
- package/dist/ibkr/ibkrApiTypes.d.ts +70 -0
- package/dist/ibkr/ibkrApiTypes.d.ts.map +1 -0
- package/dist/ibkr/ibkrApiTypes.js +9 -0
- package/dist/ibkr/ibkrApiTypes.js.map +1 -0
- package/dist/ibkr/ibkrClient.d.ts +44 -0
- package/dist/ibkr/ibkrClient.d.ts.map +1 -0
- package/dist/ibkr/ibkrClient.js +351 -0
- package/dist/ibkr/ibkrClient.js.map +1 -0
- package/dist/ibkr/oauthConfig.d.ts +15 -0
- package/dist/ibkr/oauthConfig.d.ts.map +1 -0
- package/dist/ibkr/oauthConfig.js +44 -0
- package/dist/ibkr/oauthConfig.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +81 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +11 -0
- package/dist/types.js.map +1 -0
- package/package.json +54 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Broker-neutral domain types shared across the CLI.
|
|
3
|
+
*
|
|
4
|
+
* Command handlers render these normalized shapes and never touch raw broker
|
|
5
|
+
* JSON. Both the IBKR client (here) and Schwab (when this is merged into
|
|
6
|
+
* huskly-cli) implement {@link BrokerClient}, so a single set of handlers can
|
|
7
|
+
* serve either broker. The field names mirror huskly-cli's `getAccountBalances`
|
|
8
|
+
* / `SchwabPosition` shapes to keep that future merge mechanical.
|
|
9
|
+
*/
|
|
10
|
+
export type BrokerName = "ibkr" | "schwab";
|
|
11
|
+
export interface AuthStatus {
|
|
12
|
+
authenticated: boolean;
|
|
13
|
+
competing: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface AccountBalances {
|
|
16
|
+
netLiquidation: number;
|
|
17
|
+
availableFunds: number;
|
|
18
|
+
buyingPower: number;
|
|
19
|
+
cashBalance: number;
|
|
20
|
+
}
|
|
21
|
+
export interface BrokerPosition {
|
|
22
|
+
/** Human-readable contract symbol/description. */
|
|
23
|
+
symbol: string;
|
|
24
|
+
/** Normalized asset type, e.g. EQUITY, OPTION, FUTURE. */
|
|
25
|
+
assetType: string;
|
|
26
|
+
longQuantity: number;
|
|
27
|
+
shortQuantity: number;
|
|
28
|
+
averagePrice: number;
|
|
29
|
+
marketPrice: number;
|
|
30
|
+
marketValue: number;
|
|
31
|
+
/** P/L for the current trading day. */
|
|
32
|
+
currentDayProfitLoss: number;
|
|
33
|
+
/** Unrealized open P/L. */
|
|
34
|
+
openProfitLoss: number;
|
|
35
|
+
}
|
|
36
|
+
export interface BrokerInstrument {
|
|
37
|
+
/** Broker-native contract id (IBKR conid), as a string. */
|
|
38
|
+
brokerId?: string;
|
|
39
|
+
symbol?: string;
|
|
40
|
+
description?: string;
|
|
41
|
+
exchange?: string;
|
|
42
|
+
assetType?: string;
|
|
43
|
+
}
|
|
44
|
+
export interface BrokerQuoteReference {
|
|
45
|
+
description?: string;
|
|
46
|
+
exchange?: string;
|
|
47
|
+
exchangeName?: string;
|
|
48
|
+
}
|
|
49
|
+
export interface BrokerQuoteData {
|
|
50
|
+
lastPrice?: number;
|
|
51
|
+
bidPrice?: number;
|
|
52
|
+
askPrice?: number;
|
|
53
|
+
closePrice?: number;
|
|
54
|
+
highPrice?: number;
|
|
55
|
+
lowPrice?: number;
|
|
56
|
+
openPrice?: number;
|
|
57
|
+
netChange?: number;
|
|
58
|
+
netPercentChange?: number;
|
|
59
|
+
totalVolume?: number;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Broker-neutral quote, mirroring huskly-cli's (Schwab-shaped) `BrokerQuote` so
|
|
63
|
+
* consumers normalize IBKR and Schwab quotes through one code path.
|
|
64
|
+
*/
|
|
65
|
+
export interface BrokerQuote {
|
|
66
|
+
symbol: string;
|
|
67
|
+
reference: BrokerQuoteReference;
|
|
68
|
+
quote: BrokerQuoteData;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* The contract every broker client satisfies. Kept intentionally small (account,
|
|
72
|
+
* positions, quotes); extend as commands are added.
|
|
73
|
+
*/
|
|
74
|
+
export interface BrokerClient {
|
|
75
|
+
getAuthStatus(): Promise<AuthStatus>;
|
|
76
|
+
getAccountId(): Promise<string>;
|
|
77
|
+
getAccountBalances(): Promise<AccountBalances>;
|
|
78
|
+
getPositions(symbol?: string): Promise<BrokerPosition[]>;
|
|
79
|
+
getQuotes(symbols: string[]): Promise<Record<string, BrokerQuote>>;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Broker-neutral domain types shared across the CLI.
|
|
3
|
+
*
|
|
4
|
+
* Command handlers render these normalized shapes and never touch raw broker
|
|
5
|
+
* JSON. Both the IBKR client (here) and Schwab (when this is merged into
|
|
6
|
+
* huskly-cli) implement {@link BrokerClient}, so a single set of handlers can
|
|
7
|
+
* serve either broker. The field names mirror huskly-cli's `getAccountBalances`
|
|
8
|
+
* / `SchwabPosition` shapes to keep that future merge mechanical.
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@huskly/ibkr-client",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Interactive Brokers Web API client (OAuth 1.0a) and terminal CLI",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"bin": {
|
|
15
|
+
"ibkr-cli": "./dist/cli/index.js"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist"
|
|
19
|
+
],
|
|
20
|
+
"repository": "github.com/huskly/ibkr-client",
|
|
21
|
+
"author": "Felipe Lima",
|
|
22
|
+
"license": "MIT",
|
|
23
|
+
"engines": {
|
|
24
|
+
"node": ">=20.0.0"
|
|
25
|
+
},
|
|
26
|
+
"scripts": {
|
|
27
|
+
"build": "tsc",
|
|
28
|
+
"dev": "tsx src/cli/index.ts",
|
|
29
|
+
"lint": "eslint src --ext .ts",
|
|
30
|
+
"lint:fix": "eslint src --ext .ts --fix",
|
|
31
|
+
"format": "prettier --write \"src/**/*.ts\"",
|
|
32
|
+
"format:check": "prettier --check \"src/**/*.ts\"",
|
|
33
|
+
"typecheck": "tsc --noEmit",
|
|
34
|
+
"clean": "rm -rf dist",
|
|
35
|
+
"check": "npm run lint && npm run format:check && npm run typecheck",
|
|
36
|
+
"prepublishOnly": "npm run clean && npm run build"
|
|
37
|
+
},
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"chalk": "^5.6.2",
|
|
40
|
+
"commander": "^14.0.2",
|
|
41
|
+
"dotenv": "^17.2.3",
|
|
42
|
+
"ibkr-client": "^1.0.4"
|
|
43
|
+
},
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"@eslint/js": "^9.39.1",
|
|
46
|
+
"@types/node": "^25",
|
|
47
|
+
"eslint": "^9.16.0",
|
|
48
|
+
"eslint-config-prettier": "^10",
|
|
49
|
+
"prettier": "^3.4.2",
|
|
50
|
+
"tsx": "^4.19.2",
|
|
51
|
+
"typescript": "^5.7.2",
|
|
52
|
+
"typescript-eslint": "^8.49.0"
|
|
53
|
+
}
|
|
54
|
+
}
|