@tastytrade/api 4.0.0 → 5.0.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/CHANGELOG.md +15 -0
- package/README.md +62 -31
- package/dist/account-streamer.d.ts +3 -2
- package/dist/account-streamer.d.ts.map +1 -1
- package/dist/account-streamer.js +8 -7
- package/dist/account-streamer.js.map +1 -1
- package/dist/logger.d.ts +20 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +36 -0
- package/dist/logger.js.map +1 -0
- package/dist/services/tastytrade-http-client.d.ts +3 -1
- package/dist/services/tastytrade-http-client.d.ts.map +1 -1
- package/dist/services/tastytrade-http-client.js +3 -1
- package/dist/services/tastytrade-http-client.js.map +1 -1
- package/dist/tastytrade-api.d.ts +12 -3
- package/dist/tastytrade-api.d.ts.map +1 -1
- package/dist/tastytrade-api.js +6 -5
- package/dist/tastytrade-api.js.map +1 -1
- package/lib/account-streamer.ts +15 -8
- package/lib/logger.ts +48 -0
- package/lib/services/tastytrade-http-client.ts +6 -2
- package/lib/tastytrade-api.ts +16 -3
- package/package.json +1 -1
- package/tsconfig.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [5.0.0] - 2024-09-17
|
|
10
|
+
|
|
11
|
+
The `TastytradeClient` constructor now takes a single config object instead of 2 urls.
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- Add optional logging; update example app [#44](https://github.com/tastytrade/tastytrade-api-js/pull/44)
|
|
16
|
+
- Add future option quote streaming example to README
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- Update README.md [#42](https://github.com/tastytrade/tastytrade-api-js/pull/35)
|
|
21
|
+
- README corrections
|
|
22
|
+
- typo on json account node name [#39](https://github.com/tastytrade/tastytrade-api-js/pull/39)
|
|
23
|
+
|
|
9
24
|
## [4.0.0] - 2024-03-12
|
|
10
25
|
|
|
11
26
|
### Changed
|
package/README.md
CHANGED
|
@@ -2,53 +2,84 @@
|
|
|
2
2
|
|
|
3
3
|
## Installation
|
|
4
4
|
npm:
|
|
5
|
-
`npm
|
|
5
|
+
`npm i @tastytrade/api`
|
|
6
6
|
|
|
7
7
|
yarn:
|
|
8
8
|
`yarn add @tastytrade/api`
|
|
9
9
|
|
|
10
10
|
## Quickstart
|
|
11
11
|
```js
|
|
12
|
-
import
|
|
13
|
-
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const
|
|
12
|
+
import TastytradeApi from "@tastytrade/api"
|
|
13
|
+
|
|
14
|
+
const tastytradeApi = new TastytradeApi(baseUrl, accountStreamerUrl)
|
|
15
|
+
const loginResponse = await tastytradeApi.sessionService.login(usernameOrEmail, password)
|
|
16
|
+
const accounts = await tastytradeApi.accountsAndCustomersService.getCustomerAccounts()
|
|
17
|
+
const accountPositions = await tastytradeApi.balancesAndPositionsService.getPositionsList(accounts[0].account['account-number'])
|
|
17
18
|
```
|
|
18
19
|
|
|
19
20
|
### Market Data
|
|
21
|
+
The MarketDataStreamer in this package is deprecated. We recommend using DxFeed's [@dxfeed/dxlink-api](https://github.com/dxFeed/dxLink/blob/main/dxlink-javascript/dxlink-api/README.md) instead.
|
|
22
|
+
|
|
23
|
+
Here's a node example of how you can subscribe to some future option quotes using `@dxfeed/dxlink-api`:
|
|
20
24
|
```js
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
console.log(data)
|
|
31
|
-
}
|
|
25
|
+
/**
|
|
26
|
+
* Below code assumes you've hit GET /api-quote-tokens and received a token
|
|
27
|
+
* You should also hit GET /futures-option-chains/{future_contract_code}/nested to get the future options you want to subscribe to
|
|
28
|
+
* There is an equivalent GET /option-chains/{underlying_ticker_symbol}/nested for equity options
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
const WebSocket = require('isomorphic-ws')
|
|
32
|
+
const { DXLinkWebSocketClient, DXLinkFeed, FeedDataFormat } = require('@dxfeed/dxlink-api')
|
|
33
|
+
global.WebSocket = WebSocket
|
|
32
34
|
|
|
33
|
-
|
|
34
|
-
const
|
|
35
|
+
const token = '<api quote token>'
|
|
36
|
+
const client = new DXLinkWebSocketClient()
|
|
37
|
+
client.connect('wss://tasty-openapi-ws.dxfeed.com/realtime')
|
|
38
|
+
client.setAuthToken(token)
|
|
39
|
+
|
|
40
|
+
const feed = new DXLinkFeed(client, 'AUTO')
|
|
41
|
+
|
|
42
|
+
// Note: Calling feed.configure is optional - omitting it means DxLink will return all fields
|
|
43
|
+
feed.configure({
|
|
44
|
+
acceptAggregationPeriod: 10,
|
|
45
|
+
acceptDataFormat: FeedDataFormat.COMPACT,
|
|
46
|
+
acceptEventFields: {
|
|
47
|
+
Quote: ['eventSymbol', 'askPrice', 'bidPrice']
|
|
48
|
+
},
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
feed.addEventListener((events) => {
|
|
52
|
+
events.map(event => {
|
|
53
|
+
console.log(event)
|
|
54
|
+
})
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
feed.addSubscriptions({
|
|
58
|
+
type: 'Quote',
|
|
59
|
+
symbol: './EW4Q24C5750:XCME', // Please note: we don't update this README daily. This symbol may be expired. You'll have to find an unexpired symbol.
|
|
60
|
+
})
|
|
61
|
+
```
|
|
35
62
|
|
|
36
|
-
|
|
37
|
-
streamer.addSubscription('AAPL')
|
|
38
|
-
// Optionally specify which market data events you want to subscribe to
|
|
39
|
-
streamer.addSubscription('SPY', { subscriptionTypes: [MarketDataSubscriptionType.Quote] })
|
|
63
|
+
To run the above code, save it to a file and run `node <filename>.js` in a terminal.
|
|
40
64
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
65
|
+
When adding a subscription, the `symbol` value should be the `put-streamer-symbol` or `call-streamer-symbol` returned by the `GET /futures-option-chains/{future_contract_code}/nested` endpoint. For example:
|
|
66
|
+
```js
|
|
67
|
+
// GET /futures-option-chains/ES/nested response:
|
|
68
|
+
{
|
|
69
|
+
"strike-price": "5750.0",
|
|
70
|
+
"call": "./ESU4 EW4Q4 240823C5750",
|
|
71
|
+
"call-streamer-symbol": "./EW4Q24C5750:XCME", <-- use this value
|
|
72
|
+
"put": "./ESU4 EW4Q4 240823P5750",
|
|
73
|
+
"put-streamer-symbol": "./EW4Q24P5750:XCME" <-- or this value
|
|
74
|
+
}
|
|
44
75
|
```
|
|
45
76
|
|
|
77
|
+
To subscribe to equities quotes, the `symbol` is just the ticker symbol, like `AAPL`.
|
|
78
|
+
|
|
46
79
|
### Account Streamer
|
|
47
80
|
```js
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const { AccountStreamer } = TastytradeApi
|
|
51
|
-
const _ = require('lodash')
|
|
81
|
+
import TastytradeApi from "@tastytrade/api"
|
|
82
|
+
import _ from 'lodash'
|
|
52
83
|
|
|
53
84
|
function handleStreamerMessage(json) {
|
|
54
85
|
console.log('streamer message received: ', json)
|
|
@@ -58,7 +89,7 @@ function handleStreamerStateChange(streamerState) {
|
|
|
58
89
|
console.log('streamer state changed: ', streamerState)
|
|
59
90
|
}
|
|
60
91
|
|
|
61
|
-
const tastytradeClient = new
|
|
92
|
+
const tastytradeClient = new TastytradeApi(baseUlr, accountStreamerUrl)
|
|
62
93
|
const accountStreamer = tastytradeClient.accountStreamer
|
|
63
94
|
const loginResponse = await tastytradeClient.sessionService.login(usernameOrEmail, password)
|
|
64
95
|
const accounts = await tastytradeClient.accountsAndCustomersService.getCustomerAccounts()
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { JsonValue } from './utils/json-util.js';
|
|
2
2
|
import { JsonBuilder } from './utils/json-util.js';
|
|
3
3
|
import TastytradeSession from './models/tastytrade-session.js';
|
|
4
|
+
import type Logger from './logger.js';
|
|
4
5
|
export declare enum STREAMER_STATE {
|
|
5
6
|
Open = 0,
|
|
6
7
|
Closed = 1,
|
|
@@ -12,6 +13,7 @@ export type StreamerMessageObserver = (json: object) => void;
|
|
|
12
13
|
export declare class AccountStreamer {
|
|
13
14
|
private readonly url;
|
|
14
15
|
private readonly session;
|
|
16
|
+
private readonly logger;
|
|
15
17
|
private websocket;
|
|
16
18
|
private startResolve;
|
|
17
19
|
private startReject;
|
|
@@ -25,12 +27,11 @@ export declare class AccountStreamer {
|
|
|
25
27
|
private readonly streamerMessageObservers;
|
|
26
28
|
private startPromise;
|
|
27
29
|
private readonly requestPromises;
|
|
28
|
-
private readonly logger;
|
|
29
30
|
/**
|
|
30
31
|
*
|
|
31
32
|
* @param url Url of the account streamer service
|
|
32
33
|
*/
|
|
33
|
-
constructor(url: string, session: TastytradeSession);
|
|
34
|
+
constructor(url: string, session: TastytradeSession, logger: Logger);
|
|
34
35
|
get streamerState(): STREAMER_STATE;
|
|
35
36
|
set streamerState(streamerState: STREAMER_STATE);
|
|
36
37
|
private get authToken();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account-streamer.d.ts","sourceRoot":"","sources":["../lib/account-streamer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAW,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,iBAAiB,MAAM,gCAAgC,CAAA;
|
|
1
|
+
{"version":3,"file":"account-streamer.d.ts","sourceRoot":"","sources":["../lib/account-streamer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAW,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,iBAAiB,MAAM,gCAAgC,CAAA;AAE9D,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC,oBAAY,cAAc;IACxB,IAAI,IAAI;IACR,MAAM,IAAI;IACV,KAAK,IAAI;CACV;AAeD,MAAM,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAA;AAEjC,MAAM,MAAM,qBAAqB,GAAG,CAAC,aAAa,EAAE,cAAc,KAAK,IAAI,CAAA;AAE3E,MAAM,MAAM,uBAAuB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;AAa5D,qBAAa,eAAe;IA8BxB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO;IA9B1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,YAAY,CAA2C;IAC/D,OAAO,CAAC,WAAW,CAAwC;IAC3D,OAAO,CAAC,cAAc,CAAY;IAClC,OAAO,CAAC,MAAM,CAAe;IAE7B,OAAO,CAAC,gBAAgB,CAAuC;IAE/D,cAAc,EAAE,GAAG,CAAO;IAC1B,cAAc,EAAE,GAAG,CAAO;IAC1B,OAAO,CAAC,cAAc,CAAwC;IAE9D,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAA8B;IAErE,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAgC;IAEzE,OAAO,CAAC,YAAY,CAAgC;IAEpD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAGnB;IAEb;;;OAGG;gBAEgB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,iBAAiB,EAC3C,MAAM,EAAE,MAAM;IAKhB,IAAI,aAAa,IAAI,cAAc,CAElC;IAED,IAAI,aAAa,CAAC,aAAa,EAAE,cAAc,EAM9C;IAED,OAAO,KAAK,SAAS,GAEpB;IAED;;;;OAIG;IACH,wBAAwB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,QAAQ;IAQnE,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IAyB/B,IAAI;IAIJ,OAAO,CAAC,QAAQ;IAsBhB,QAAQ,CAAC,aAAa,aAGrB;IAED,OAAO,CAAC,sBAAsB;IAc9B,IAAI,oBAAoB,YAEvB;IAED,OAAO,CAAC,oBAAoB;IAc5B,OAAO,CAAC,qBAAqB;IAI7B;;;;;OAKG;IACH,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,mBAAmB,UAAO,GAAG,MAAM;IA2B3D;;;;;OAKG;IACI,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM;IAS7D;;;;OAIG;IACI,eAAe,CAAC,cAAc,EAAE,MAAM;IAQ7C;;;;OAIG;IACU,mBAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAc3E,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAa1B;IAED,OAAO,CAAC,QAAQ,CAAC,WAAW,CAS3B;IAED,OAAO,CAAC,QAAQ,CAAC,WAAW,CAgB3B;IAED,OAAO,CAAC,QAAQ,CAAC,aAAa,CAW7B;IAED,kBAAkB,CAAC,QAAQ,EAAE,uBAAuB,GAAG,QAAQ;IAQ/D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CA0BhC;CACF"}
|
package/dist/account-streamer.js
CHANGED
|
@@ -33,7 +33,7 @@ export class AccountStreamer {
|
|
|
33
33
|
*
|
|
34
34
|
* @param url Url of the account streamer service
|
|
35
35
|
*/
|
|
36
|
-
constructor(url, session) {
|
|
36
|
+
constructor(url, session, logger) {
|
|
37
37
|
this.url = url;
|
|
38
38
|
this.session = session;
|
|
39
39
|
this.websocket = null;
|
|
@@ -49,16 +49,15 @@ export class AccountStreamer {
|
|
|
49
49
|
this.streamerMessageObservers = [];
|
|
50
50
|
this.startPromise = null;
|
|
51
51
|
this.requestPromises = new Map();
|
|
52
|
-
this.logger = console;
|
|
53
52
|
this.sendHeartbeat = () => {
|
|
54
53
|
this.clearHeartbeatTimerId();
|
|
55
54
|
this.send(new JsonBuilder({ action: MessageAction.HEARTBEAT }));
|
|
56
55
|
};
|
|
57
|
-
this.handleOpen = (
|
|
56
|
+
this.handleOpen = (_event) => {
|
|
58
57
|
if (this.startResolve === null) {
|
|
59
58
|
return;
|
|
60
59
|
}
|
|
61
|
-
this.logger.info('AccountStreamer opened'
|
|
60
|
+
this.logger.info('AccountStreamer opened');
|
|
62
61
|
this.startResolve(true);
|
|
63
62
|
this.startResolve = this.startReject = null;
|
|
64
63
|
this.streamerState = STREAMER_STATE.Open;
|
|
@@ -66,7 +65,7 @@ export class AccountStreamer {
|
|
|
66
65
|
this.scheduleHeartbeatTimer();
|
|
67
66
|
};
|
|
68
67
|
this.handleClose = (event) => {
|
|
69
|
-
this.logger.info('AccountStreamer closed'
|
|
68
|
+
this.logger.info('AccountStreamer closed');
|
|
70
69
|
if (this.websocket === null) {
|
|
71
70
|
return;
|
|
72
71
|
}
|
|
@@ -78,7 +77,7 @@ export class AccountStreamer {
|
|
|
78
77
|
if (this.websocket === null) {
|
|
79
78
|
return;
|
|
80
79
|
}
|
|
81
|
-
this.logger.
|
|
80
|
+
this.logger.error('AccountStreamer error', event);
|
|
82
81
|
this.lastErrorEvent = event;
|
|
83
82
|
this.streamerState = STREAMER_STATE.Error;
|
|
84
83
|
if (this.startReject !== null) {
|
|
@@ -100,7 +99,7 @@ export class AccountStreamer {
|
|
|
100
99
|
}
|
|
101
100
|
};
|
|
102
101
|
this.handleOneMessage = (json) => {
|
|
103
|
-
this.logger.info(json);
|
|
102
|
+
this.logger.info('Message received: ', json);
|
|
104
103
|
const action = json.action;
|
|
105
104
|
this.streamerMessageObservers.forEach(observer => observer(json));
|
|
106
105
|
if (action) {
|
|
@@ -122,6 +121,7 @@ export class AccountStreamer {
|
|
|
122
121
|
return;
|
|
123
122
|
}
|
|
124
123
|
};
|
|
124
|
+
this.logger = logger;
|
|
125
125
|
}
|
|
126
126
|
get streamerState() {
|
|
127
127
|
return this._streamerState;
|
|
@@ -251,6 +251,7 @@ export class AccountStreamer {
|
|
|
251
251
|
this.queued.push(message);
|
|
252
252
|
}
|
|
253
253
|
else {
|
|
254
|
+
this.logger.info('Sending message: ', message);
|
|
254
255
|
websocket.send(message);
|
|
255
256
|
}
|
|
256
257
|
return this.requestCounter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account-streamer.js","sourceRoot":"","sources":["../lib/account-streamer.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,eAAe,CAAA;AACrC,OAAO,CAAC,MAAM,QAAQ,CAAA;AAEtB,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,iBAAiB,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"account-streamer.js","sourceRoot":"","sources":["../lib/account-streamer.ts"],"names":[],"mappings":"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"}
|
package/dist/logger.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export default interface Logger {
|
|
2
|
+
error(...data: any[]): void;
|
|
3
|
+
info(...data: any[]): void;
|
|
4
|
+
warn(...data: any[]): void;
|
|
5
|
+
}
|
|
6
|
+
export declare enum LogLevel {
|
|
7
|
+
INFO = 1,
|
|
8
|
+
WARN = 2,
|
|
9
|
+
ERROR = 3
|
|
10
|
+
}
|
|
11
|
+
export declare class TastytradeLogger implements Logger {
|
|
12
|
+
logLevel: LogLevel;
|
|
13
|
+
private logger;
|
|
14
|
+
constructor(logger?: Logger, logLevel?: LogLevel);
|
|
15
|
+
error(...data: any[]): void;
|
|
16
|
+
info(...data: any[]): void;
|
|
17
|
+
warn(...data: any[]): void;
|
|
18
|
+
private shouldLog;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../lib/logger.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,WAAW,MAAM;IAC7B,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC3B,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;CAC5B;AAED,oBAAY,QAAQ;IAClB,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,IAAI;CACV;AAED,qBAAa,gBAAiB,YAAW,MAAM;IACtC,QAAQ,EAAE,QAAQ,CAAA;IACzB,OAAO,CAAC,MAAM,CAAsB;gBAExB,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ;IAKhD,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM3B,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM1B,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM1B,OAAO,CAAC,SAAS;CAMlB"}
|
package/dist/logger.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import _ from 'lodash';
|
|
2
|
+
export var LogLevel;
|
|
3
|
+
(function (LogLevel) {
|
|
4
|
+
LogLevel[LogLevel["INFO"] = 1] = "INFO";
|
|
5
|
+
LogLevel[LogLevel["WARN"] = 2] = "WARN";
|
|
6
|
+
LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
|
|
7
|
+
})(LogLevel || (LogLevel = {}));
|
|
8
|
+
export class TastytradeLogger {
|
|
9
|
+
constructor(logger, logLevel) {
|
|
10
|
+
this.logger = null;
|
|
11
|
+
this.logger = logger ?? null;
|
|
12
|
+
this.logLevel = logLevel ?? LogLevel.ERROR;
|
|
13
|
+
}
|
|
14
|
+
error(...data) {
|
|
15
|
+
if (this.shouldLog(LogLevel.ERROR)) {
|
|
16
|
+
this.logger.error(...data);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
info(...data) {
|
|
20
|
+
if (this.shouldLog(LogLevel.INFO)) {
|
|
21
|
+
this.logger.info(...data);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
warn(...data) {
|
|
25
|
+
if (this.shouldLog(LogLevel.WARN)) {
|
|
26
|
+
this.logger.warn(...data);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
shouldLog(level) {
|
|
30
|
+
if (_.isNil(this.logger)) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
return LogLevel[level] >= LogLevel[this.logLevel];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../lib/logger.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,QAAQ,CAAA;AAQtB,MAAM,CAAN,IAAY,QAIX;AAJD,WAAY,QAAQ;IAClB,uCAAQ,CAAA;IACR,uCAAQ,CAAA;IACR,yCAAS,CAAA;AACX,CAAC,EAJW,QAAQ,KAAR,QAAQ,QAInB;AAED,MAAM,OAAO,gBAAgB;IAI3B,YAAY,MAAe,EAAE,QAAmB;QAFxC,WAAM,GAAkB,IAAI,CAAA;QAGlC,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,IAAI,CAAA;QAC5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAA;IAC5C,CAAC;IAED,KAAK,CAAC,GAAG,IAAW;QAClB,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,MAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAA;QAC7B,CAAC;IACH,CAAC;IAED,IAAI,CAAC,GAAG,IAAW;QACjB,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,MAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC;IAED,IAAI,CAAC,GAAG,IAAW;QACjB,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,MAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC;IAEO,SAAS,CAAC,KAAe;QAC/B,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAA;QACd,CAAC;QACD,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACnD,CAAC;CACF"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import TastytradeSession from "../models/tastytrade-session.js";
|
|
2
|
+
import type Logger from "../logger.js";
|
|
2
3
|
export default class TastytradeHttpClient {
|
|
3
4
|
private readonly baseUrl;
|
|
5
|
+
private readonly logger?;
|
|
4
6
|
readonly session: TastytradeSession;
|
|
5
|
-
constructor(baseUrl: string);
|
|
7
|
+
constructor(baseUrl: string, logger?: Logger);
|
|
6
8
|
private getDefaultHeaders;
|
|
7
9
|
private executeRequest;
|
|
8
10
|
getData(url: string, headers?: object, queryParams?: object): Promise<any>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tastytrade-http-client.d.ts","sourceRoot":"","sources":["../../lib/services/tastytrade-http-client.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,MAAM,iCAAiC,CAAA;
|
|
1
|
+
{"version":3,"file":"tastytrade-http-client.d.ts","sourceRoot":"","sources":["../../lib/services/tastytrade-http-client.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,MAAM,iCAAiC,CAAA;AAK/D,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AAQtC,MAAM,CAAC,OAAO,OAAO,oBAAoB;IAIzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAQ;IAChC,SAAgB,OAAO,EAAE,iBAAiB,CAAA;gBAEb,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAK7D,OAAO,CAAC,iBAAiB;YAeX,cAAc;IAmBtB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,MAAW,EAAE,WAAW,GAAE,MAAW,GAAG,OAAO,CAAC,GAAG,CAAC;IAIlF,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAIlE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAIjE,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAInE,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;CAG/D"}
|
|
@@ -9,8 +9,9 @@ const ParamsSerializer = {
|
|
|
9
9
|
}
|
|
10
10
|
};
|
|
11
11
|
export default class TastytradeHttpClient {
|
|
12
|
-
constructor(baseUrl) {
|
|
12
|
+
constructor(baseUrl, logger) {
|
|
13
13
|
this.baseUrl = baseUrl;
|
|
14
|
+
this.logger = logger;
|
|
14
15
|
this.session = new TastytradeSession();
|
|
15
16
|
}
|
|
16
17
|
getDefaultHeaders() {
|
|
@@ -38,6 +39,7 @@ export default class TastytradeHttpClient {
|
|
|
38
39
|
params: dasherizedParams,
|
|
39
40
|
paramsSerializer: ParamsSerializer
|
|
40
41
|
}, _.isEmpty);
|
|
42
|
+
this.logger?.info('Making request', config);
|
|
41
43
|
return axios.request(config);
|
|
42
44
|
}
|
|
43
45
|
async getData(url, headers = {}, queryParams = {}) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tastytrade-http-client.js","sourceRoot":"","sources":["../../lib/services/tastytrade-http-client.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,MAAM,iCAAiC,CAAA;AAC/D,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,CAAC,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"tastytrade-http-client.js","sourceRoot":"","sources":["../../lib/services/tastytrade-http-client.ts"],"names":[],"mappings":"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"}
|
package/dist/tastytrade-api.d.ts
CHANGED
|
@@ -15,9 +15,16 @@ import SymbolSearchService from "./services/symbol-search-service.js";
|
|
|
15
15
|
import TransactionsService from "./services/transactions-service.js";
|
|
16
16
|
import WatchlistsService from "./services/watchlists-service.js";
|
|
17
17
|
import TastytradeSession from "./models/tastytrade-session.js";
|
|
18
|
+
import type Logger from "./logger.js";
|
|
19
|
+
import { TastytradeLogger, LogLevel } from "./logger.js";
|
|
20
|
+
export type ClientConfig = {
|
|
21
|
+
baseUrl: string;
|
|
22
|
+
accountStreamerUrl: string;
|
|
23
|
+
logger?: Logger;
|
|
24
|
+
logLevel?: LogLevel;
|
|
25
|
+
};
|
|
18
26
|
export default class TastytradeClient {
|
|
19
|
-
readonly
|
|
20
|
-
readonly accountStreamerUrl: string;
|
|
27
|
+
readonly logger: TastytradeLogger;
|
|
21
28
|
readonly httpClient: TastytradeHttpClient;
|
|
22
29
|
readonly accountStreamer: AccountStreamer;
|
|
23
30
|
readonly sessionService: SessionService;
|
|
@@ -33,9 +40,11 @@ export default class TastytradeClient {
|
|
|
33
40
|
readonly symbolSearchService: SymbolSearchService;
|
|
34
41
|
readonly transactionsService: TransactionsService;
|
|
35
42
|
readonly watchlistsService: WatchlistsService;
|
|
36
|
-
constructor(
|
|
43
|
+
constructor(config: ClientConfig);
|
|
37
44
|
get session(): TastytradeSession;
|
|
38
45
|
}
|
|
39
46
|
export { MarketDataStreamer, MarketDataSubscriptionType, type MarketDataListener, type CandleSubscriptionOptions, CandleType };
|
|
40
47
|
export { AccountStreamer, STREAMER_STATE, type Disposer, type StreamerStateObserver };
|
|
48
|
+
export { TastytradeLogger, LogLevel };
|
|
49
|
+
export type { Logger };
|
|
41
50
|
//# sourceMappingURL=tastytrade-api.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tastytrade-api.d.ts","sourceRoot":"","sources":["../lib/tastytrade-api.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,MAAM,sCAAsC,CAAA;AACvE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,QAAQ,EAAE,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAClH,OAAO,kBAAkB,EAAE,EAAE,KAAK,yBAAyB,EAAE,UAAU,EAAE,0BAA0B,EAAE,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAG/J,OAAO,cAAc,MAAM,+BAA+B,CAAA;AAC1D,OAAO,oBAAoB,MAAM,sCAAsC,CAAA;AACvE,OAAO,2BAA2B,MAAM,8CAA8C,CAAA;AACtF,OAAO,2BAA2B,MAAM,8CAA8C,CAAA;AACtF,OAAO,kBAAkB,MAAM,mCAAmC,CAAA;AAClE,OAAO,yBAAyB,MAAM,2CAA2C,CAAA;AACjF,OAAO,oBAAoB,MAAM,sCAAsC,CAAA;AACvE,OAAO,iCAAiC,MAAM,qDAAqD,CAAA;AACnG,OAAO,YAAY,MAAM,8BAA8B,CAAA;AACvD,OAAO,qBAAqB,MAAM,uCAAuC,CAAA;AACzE,OAAO,mBAAmB,MAAM,qCAAqC,CAAA;AACrE,OAAO,mBAAmB,MAAM,oCAAoC,CAAA;AACpE,OAAO,iBAAiB,MAAM,kCAAkC,CAAA;AAChE,OAAO,iBAAiB,MAAM,gCAAgC,CAAA;
|
|
1
|
+
{"version":3,"file":"tastytrade-api.d.ts","sourceRoot":"","sources":["../lib/tastytrade-api.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,MAAM,sCAAsC,CAAA;AACvE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,QAAQ,EAAE,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAClH,OAAO,kBAAkB,EAAE,EAAE,KAAK,yBAAyB,EAAE,UAAU,EAAE,0BAA0B,EAAE,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAG/J,OAAO,cAAc,MAAM,+BAA+B,CAAA;AAC1D,OAAO,oBAAoB,MAAM,sCAAsC,CAAA;AACvE,OAAO,2BAA2B,MAAM,8CAA8C,CAAA;AACtF,OAAO,2BAA2B,MAAM,8CAA8C,CAAA;AACtF,OAAO,kBAAkB,MAAM,mCAAmC,CAAA;AAClE,OAAO,yBAAyB,MAAM,2CAA2C,CAAA;AACjF,OAAO,oBAAoB,MAAM,sCAAsC,CAAA;AACvE,OAAO,iCAAiC,MAAM,qDAAqD,CAAA;AACnG,OAAO,YAAY,MAAM,8BAA8B,CAAA;AACvD,OAAO,qBAAqB,MAAM,uCAAuC,CAAA;AACzE,OAAO,mBAAmB,MAAM,qCAAqC,CAAA;AACrE,OAAO,mBAAmB,MAAM,oCAAoC,CAAA;AACpE,OAAO,iBAAiB,MAAM,kCAAkC,CAAA;AAChE,OAAO,iBAAiB,MAAM,gCAAgC,CAAA;AAC9D,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAExD,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAA;CACpB,CAAA;AAED,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACnC,SAAgB,MAAM,EAAE,gBAAgB,CAAA;IACxC,SAAgB,UAAU,EAAE,oBAAoB,CAAA;IAEhD,SAAgB,eAAe,EAAE,eAAe,CAAA;IAEhD,SAAgB,cAAc,EAAE,cAAc,CAAA;IAC9C,SAAgB,oBAAoB,EAAE,oBAAoB,CAAA;IAC1D,SAAgB,2BAA2B,EAAE,2BAA2B,CAAA;IACxE,SAAgB,2BAA2B,EAAE,2BAA2B,CAAA;IACxE,SAAgB,kBAAkB,EAAE,kBAAkB,CAAA;IACtD,SAAgB,yBAAyB,EAAE,yBAAyB,CAAA;IACpE,SAAgB,oBAAoB,EAAE,oBAAoB,CAAA;IAC1D,SAAgB,iCAAiC,EAAE,iCAAiC,CAAA;IACpF,SAAgB,YAAY,EAAE,YAAY,CAAA;IAC1C,SAAgB,qBAAqB,EAAE,qBAAqB,CAAA;IAC5D,SAAgB,mBAAmB,EAAE,mBAAmB,CAAA;IACxD,SAAgB,mBAAmB,EAAE,mBAAmB,CAAA;IACxD,SAAgB,iBAAiB,EAAE,iBAAiB,CAAA;gBAExC,MAAM,EAAE,YAAY;IAoBhC,IAAI,OAAO,IAAI,iBAAiB,CAE/B;CACF;AAED,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,KAAK,kBAAkB,EAAE,KAAK,yBAAyB,EAAE,UAAU,EAAE,CAAA;AAC9H,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,QAAQ,EAAE,KAAK,qBAAqB,EAAE,CAAA;AACrF,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAA;AACrC,YAAY,EAAE,MAAM,EAAE,CAAA"}
|
package/dist/tastytrade-api.js
CHANGED
|
@@ -16,12 +16,12 @@ import SymbolSearchService from "./services/symbol-search-service.js";
|
|
|
16
16
|
import TransactionsService from "./services/transactions-service.js";
|
|
17
17
|
import WatchlistsService from "./services/watchlists-service.js";
|
|
18
18
|
import TastytradeSession from "./models/tastytrade-session.js";
|
|
19
|
+
import { TastytradeLogger, LogLevel } from "./logger.js";
|
|
19
20
|
export default class TastytradeClient {
|
|
20
|
-
constructor(
|
|
21
|
-
this.
|
|
22
|
-
this.
|
|
23
|
-
this.
|
|
24
|
-
this.accountStreamer = new AccountStreamer(accountStreamerUrl, this.session);
|
|
21
|
+
constructor(config) {
|
|
22
|
+
this.logger = new TastytradeLogger(config.logger, config.logLevel);
|
|
23
|
+
this.httpClient = new TastytradeHttpClient(config.baseUrl, this.logger);
|
|
24
|
+
this.accountStreamer = new AccountStreamer(config.accountStreamerUrl, this.session, this.logger);
|
|
25
25
|
this.sessionService = new SessionService(this.httpClient);
|
|
26
26
|
this.accountStatusService = new AccountStatusService(this.httpClient);
|
|
27
27
|
this.accountsAndCustomersService = new AccountsAndCustomersService(this.httpClient);
|
|
@@ -42,4 +42,5 @@ export default class TastytradeClient {
|
|
|
42
42
|
}
|
|
43
43
|
export { MarketDataStreamer, MarketDataSubscriptionType, CandleType };
|
|
44
44
|
export { AccountStreamer, STREAMER_STATE };
|
|
45
|
+
export { TastytradeLogger, LogLevel };
|
|
45
46
|
//# sourceMappingURL=tastytrade-api.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tastytrade-api.js","sourceRoot":"","sources":["../lib/tastytrade-api.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,MAAM,sCAAsC,CAAA;AACvE,OAAO,EAAE,eAAe,EAAE,cAAc,EAA6C,MAAM,uBAAuB,CAAA;AAClH,OAAO,kBAAkB,EAAE,EAAkC,UAAU,EAAE,0BAA0B,EAA2B,MAAM,2BAA2B,CAAA;AAE/J,WAAW;AACX,OAAO,cAAc,MAAM,+BAA+B,CAAA;AAC1D,OAAO,oBAAoB,MAAM,sCAAsC,CAAA;AACvE,OAAO,2BAA2B,MAAM,8CAA8C,CAAA;AACtF,OAAO,2BAA2B,MAAM,8CAA8C,CAAA;AACtF,OAAO,kBAAkB,MAAM,mCAAmC,CAAA;AAClE,OAAO,yBAAyB,MAAM,2CAA2C,CAAA;AACjF,OAAO,oBAAoB,MAAM,sCAAsC,CAAA;AACvE,OAAO,iCAAiC,MAAM,qDAAqD,CAAA;AACnG,OAAO,YAAY,MAAM,8BAA8B,CAAA;AACvD,OAAO,qBAAqB,MAAM,uCAAuC,CAAA;AACzE,OAAO,mBAAmB,MAAM,qCAAqC,CAAA;AACrE,OAAO,mBAAmB,MAAM,oCAAoC,CAAA;AACpE,OAAO,iBAAiB,MAAM,kCAAkC,CAAA;AAChE,OAAO,iBAAiB,MAAM,gCAAgC,CAAA;AAE9D,MAAM,CAAC,OAAO,OAAO,gBAAgB;
|
|
1
|
+
{"version":3,"file":"tastytrade-api.js","sourceRoot":"","sources":["../lib/tastytrade-api.ts"],"names":[],"mappings":"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"}
|
package/lib/account-streamer.ts
CHANGED
|
@@ -4,6 +4,7 @@ import type { JsonMap, JsonValue } from './utils/json-util.js'
|
|
|
4
4
|
import { JsonBuilder } from './utils/json-util.js'
|
|
5
5
|
import TastytradeSession from './models/tastytrade-session.js'
|
|
6
6
|
import { MinTlsVersion } from './utils/constants.js'
|
|
7
|
+
import type Logger from './logger.js'
|
|
7
8
|
|
|
8
9
|
export enum STREAMER_STATE {
|
|
9
10
|
Open = 0,
|
|
@@ -42,6 +43,7 @@ function removeElement<T>(array: T[], element: T): void {
|
|
|
42
43
|
}
|
|
43
44
|
|
|
44
45
|
export class AccountStreamer {
|
|
46
|
+
private readonly logger: Logger
|
|
45
47
|
private websocket: WebSocket | null = null
|
|
46
48
|
private startResolve: ((result: boolean) => void) | null = null
|
|
47
49
|
private startReject: ((reason?: any) => void) | null = null
|
|
@@ -65,13 +67,17 @@ export class AccountStreamer {
|
|
|
65
67
|
[(status: string) => void, (error: string) => void]
|
|
66
68
|
> = new Map()
|
|
67
69
|
|
|
68
|
-
private readonly logger = console
|
|
69
|
-
|
|
70
70
|
/**
|
|
71
71
|
*
|
|
72
72
|
* @param url Url of the account streamer service
|
|
73
73
|
*/
|
|
74
|
-
constructor(
|
|
74
|
+
constructor(
|
|
75
|
+
private readonly url: string,
|
|
76
|
+
private readonly session: TastytradeSession,
|
|
77
|
+
logger: Logger
|
|
78
|
+
) {
|
|
79
|
+
this.logger = logger
|
|
80
|
+
}
|
|
75
81
|
|
|
76
82
|
get streamerState(): STREAMER_STATE {
|
|
77
83
|
return this._streamerState
|
|
@@ -237,6 +243,7 @@ export class AccountStreamer {
|
|
|
237
243
|
// Queue up and send on open
|
|
238
244
|
this.queued.push(message)
|
|
239
245
|
} else {
|
|
246
|
+
this.logger.info('Sending message: ', message)
|
|
240
247
|
websocket.send(message)
|
|
241
248
|
}
|
|
242
249
|
|
|
@@ -304,12 +311,12 @@ export class AccountStreamer {
|
|
|
304
311
|
this.queued = []
|
|
305
312
|
}
|
|
306
313
|
|
|
307
|
-
private readonly handleOpen = (
|
|
314
|
+
private readonly handleOpen = (_event: WebSocket.Event) => {
|
|
308
315
|
if (this.startResolve === null) {
|
|
309
316
|
return
|
|
310
317
|
}
|
|
311
318
|
|
|
312
|
-
this.logger.info('AccountStreamer opened'
|
|
319
|
+
this.logger.info('AccountStreamer opened')
|
|
313
320
|
|
|
314
321
|
this.startResolve(true)
|
|
315
322
|
this.startResolve = this.startReject = null
|
|
@@ -320,7 +327,7 @@ export class AccountStreamer {
|
|
|
320
327
|
}
|
|
321
328
|
|
|
322
329
|
private readonly handleClose = (event: WebSocket.CloseEvent) => {
|
|
323
|
-
this.logger.info('AccountStreamer closed'
|
|
330
|
+
this.logger.info('AccountStreamer closed')
|
|
324
331
|
if (this.websocket === null) {
|
|
325
332
|
return
|
|
326
333
|
}
|
|
@@ -335,7 +342,7 @@ export class AccountStreamer {
|
|
|
335
342
|
return
|
|
336
343
|
}
|
|
337
344
|
|
|
338
|
-
this.logger.
|
|
345
|
+
this.logger.error('AccountStreamer error', event)
|
|
339
346
|
|
|
340
347
|
this.lastErrorEvent = event
|
|
341
348
|
this.streamerState = STREAMER_STATE.Error
|
|
@@ -370,7 +377,7 @@ export class AccountStreamer {
|
|
|
370
377
|
}
|
|
371
378
|
|
|
372
379
|
private readonly handleOneMessage = (json: JsonMap) => {
|
|
373
|
-
this.logger.info(json)
|
|
380
|
+
this.logger.info('Message received: ', json)
|
|
374
381
|
|
|
375
382
|
const action = json.action as string
|
|
376
383
|
this.streamerMessageObservers.forEach(observer => observer(json))
|
package/lib/logger.ts
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import _ from 'lodash'
|
|
2
|
+
|
|
3
|
+
export default interface Logger {
|
|
4
|
+
error(...data: any[]): void;
|
|
5
|
+
info(...data: any[]): void;
|
|
6
|
+
warn(...data: any[]): void;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export enum LogLevel {
|
|
10
|
+
INFO = 1,
|
|
11
|
+
WARN = 2,
|
|
12
|
+
ERROR = 3
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export class TastytradeLogger implements Logger {
|
|
16
|
+
public logLevel: LogLevel
|
|
17
|
+
private logger: Logger | null = null
|
|
18
|
+
|
|
19
|
+
constructor(logger?: Logger, logLevel?: LogLevel) {
|
|
20
|
+
this.logger = logger ?? null
|
|
21
|
+
this.logLevel = logLevel ?? LogLevel.ERROR
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
error(...data: any[]): void {
|
|
25
|
+
if (this.shouldLog(LogLevel.ERROR)) {
|
|
26
|
+
this.logger!.error(...data)
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
info(...data: any[]): void {
|
|
31
|
+
if (this.shouldLog(LogLevel.INFO)) {
|
|
32
|
+
this.logger!.info(...data)
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
warn(...data: any[]): void {
|
|
37
|
+
if (this.shouldLog(LogLevel.WARN)) {
|
|
38
|
+
this.logger!.warn(...data)
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
private shouldLog(level: LogLevel) {
|
|
43
|
+
if (_.isNil(this.logger)) {
|
|
44
|
+
return false
|
|
45
|
+
}
|
|
46
|
+
return LogLevel[level] >= LogLevel[this.logLevel]
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -3,6 +3,7 @@ import axios from "axios"
|
|
|
3
3
|
import qs from 'qs'
|
|
4
4
|
import { recursiveDasherizeKeys } from "../utils/json-util.js"
|
|
5
5
|
import _ from 'lodash'
|
|
6
|
+
import type Logger from "../logger.js"
|
|
6
7
|
|
|
7
8
|
const ParamsSerializer = {
|
|
8
9
|
serialize: function (queryParams: object) {
|
|
@@ -10,10 +11,12 @@ const ParamsSerializer = {
|
|
|
10
11
|
}
|
|
11
12
|
}
|
|
12
13
|
|
|
13
|
-
export default class TastytradeHttpClient{
|
|
14
|
+
export default class TastytradeHttpClient {
|
|
15
|
+
private readonly logger?: Logger
|
|
14
16
|
public readonly session: TastytradeSession
|
|
15
17
|
|
|
16
|
-
constructor(private readonly baseUrl: string) {
|
|
18
|
+
constructor(private readonly baseUrl: string, logger?: Logger) {
|
|
19
|
+
this.logger = logger
|
|
17
20
|
this.session = new TastytradeSession()
|
|
18
21
|
}
|
|
19
22
|
|
|
@@ -47,6 +50,7 @@ export default class TastytradeHttpClient{
|
|
|
47
50
|
paramsSerializer: ParamsSerializer
|
|
48
51
|
}, _.isEmpty)
|
|
49
52
|
|
|
53
|
+
this.logger?.info('Making request', config)
|
|
50
54
|
return axios.request(config)
|
|
51
55
|
}
|
|
52
56
|
|
package/lib/tastytrade-api.ts
CHANGED
|
@@ -17,8 +17,18 @@ import SymbolSearchService from "./services/symbol-search-service.js"
|
|
|
17
17
|
import TransactionsService from "./services/transactions-service.js"
|
|
18
18
|
import WatchlistsService from "./services/watchlists-service.js"
|
|
19
19
|
import TastytradeSession from "./models/tastytrade-session.js"
|
|
20
|
+
import type Logger from "./logger.js"
|
|
21
|
+
import { TastytradeLogger, LogLevel } from "./logger.js"
|
|
22
|
+
|
|
23
|
+
export type ClientConfig = {
|
|
24
|
+
baseUrl: string,
|
|
25
|
+
accountStreamerUrl: string,
|
|
26
|
+
logger?: Logger,
|
|
27
|
+
logLevel?: LogLevel
|
|
28
|
+
}
|
|
20
29
|
|
|
21
30
|
export default class TastytradeClient {
|
|
31
|
+
public readonly logger: TastytradeLogger
|
|
22
32
|
public readonly httpClient: TastytradeHttpClient
|
|
23
33
|
|
|
24
34
|
public readonly accountStreamer: AccountStreamer
|
|
@@ -37,9 +47,10 @@ export default class TastytradeClient {
|
|
|
37
47
|
public readonly transactionsService: TransactionsService
|
|
38
48
|
public readonly watchlistsService: WatchlistsService
|
|
39
49
|
|
|
40
|
-
constructor(
|
|
41
|
-
this.
|
|
42
|
-
this.
|
|
50
|
+
constructor(config: ClientConfig) {
|
|
51
|
+
this.logger = new TastytradeLogger(config.logger, config.logLevel)
|
|
52
|
+
this.httpClient = new TastytradeHttpClient(config.baseUrl, this.logger)
|
|
53
|
+
this.accountStreamer = new AccountStreamer(config.accountStreamerUrl, this.session, this.logger)
|
|
43
54
|
|
|
44
55
|
this.sessionService = new SessionService(this.httpClient)
|
|
45
56
|
this.accountStatusService = new AccountStatusService(this.httpClient)
|
|
@@ -63,3 +74,5 @@ export default class TastytradeClient {
|
|
|
63
74
|
|
|
64
75
|
export { MarketDataStreamer, MarketDataSubscriptionType, type MarketDataListener, type CandleSubscriptionOptions, CandleType }
|
|
65
76
|
export { AccountStreamer, STREAMER_STATE, type Disposer, type StreamerStateObserver }
|
|
77
|
+
export { TastytradeLogger, LogLevel }
|
|
78
|
+
export type { Logger }
|
package/package.json
CHANGED
package/tsconfig.json
CHANGED
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
// "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
|
|
42
42
|
|
|
43
43
|
/* Module Resolution Options */
|
|
44
|
-
|
|
44
|
+
"moduleResolution": "nodenext", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
|
|
45
45
|
// "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
|
|
46
46
|
// "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
|
|
47
47
|
// "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
|