@tastytrade/api 3.1.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.
Files changed (112) hide show
  1. package/.vscode/launch.json +29 -0
  2. package/CHANGELOG.md +41 -0
  3. package/CODEOWNERS +1 -0
  4. package/README.md +64 -31
  5. package/dist/account-streamer.d.ts +10 -8
  6. package/dist/account-streamer.d.ts.map +1 -0
  7. package/dist/account-streamer.js +147 -229
  8. package/dist/account-streamer.js.map +1 -0
  9. package/dist/logger.d.ts +20 -0
  10. package/dist/logger.d.ts.map +1 -0
  11. package/dist/logger.js +36 -0
  12. package/dist/logger.js.map +1 -0
  13. package/dist/market-data-streamer.d.ts +7 -5
  14. package/dist/market-data-streamer.d.ts.map +1 -0
  15. package/dist/market-data-streamer.js +139 -172
  16. package/dist/market-data-streamer.js.map +1 -0
  17. package/dist/models/tastytrade-session.d.ts +1 -0
  18. package/dist/models/tastytrade-session.d.ts.map +1 -0
  19. package/dist/models/tastytrade-session.js +10 -20
  20. package/dist/models/tastytrade-session.js.map +1 -0
  21. package/dist/services/account-status-service.d.ts +2 -1
  22. package/dist/services/account-status-service.d.ts.map +1 -0
  23. package/dist/services/account-status-service.js +11 -60
  24. package/dist/services/account-status-service.js.map +1 -0
  25. package/dist/services/accounts-and-customers-service.d.ts +2 -1
  26. package/dist/services/accounts-and-customers-service.d.ts.map +1 -0
  27. package/dist/services/accounts-and-customers-service.js +29 -112
  28. package/dist/services/accounts-and-customers-service.js.map +1 -0
  29. package/dist/services/balances-and-positions-service.d.ts +2 -1
  30. package/dist/services/balances-and-positions-service.d.ts.map +1 -0
  31. package/dist/services/balances-and-positions-service.js +22 -88
  32. package/dist/services/balances-and-positions-service.js.map +1 -0
  33. package/dist/services/instruments-service.d.ts +2 -1
  34. package/dist/services/instruments-service.d.ts.map +1 -0
  35. package/dist/services/instruments-service.js +130 -365
  36. package/dist/services/instruments-service.js.map +1 -0
  37. package/dist/services/margin-requirements-service.d.ts +2 -1
  38. package/dist/services/margin-requirements-service.d.ts.map +1 -0
  39. package/dist/services/margin-requirements-service.js +16 -73
  40. package/dist/services/margin-requirements-service.js.map +1 -0
  41. package/dist/services/market-metrics-service.d.ts +2 -1
  42. package/dist/services/market-metrics-service.d.ts.map +1 -0
  43. package/dist/services/market-metrics-service.js +21 -88
  44. package/dist/services/market-metrics-service.js.map +1 -0
  45. package/dist/services/net-liquidating-value-history-service.d.ts +2 -1
  46. package/dist/services/net-liquidating-value-history-service.d.ts.map +1 -0
  47. package/dist/services/net-liquidating-value-history-service.js +16 -74
  48. package/dist/services/net-liquidating-value-history-service.js.map +1 -0
  49. package/dist/services/orders-service.d.ts +2 -1
  50. package/dist/services/orders-service.d.ts.map +1 -0
  51. package/dist/services/orders-service.js +76 -231
  52. package/dist/services/orders-service.js.map +1 -0
  53. package/dist/services/risk-parameters-service.d.ts +2 -1
  54. package/dist/services/risk-parameters-service.d.ts.map +1 -0
  55. package/dist/services/risk-parameters-service.js +16 -73
  56. package/dist/services/risk-parameters-service.js.map +1 -0
  57. package/dist/services/session-service.d.ts +2 -1
  58. package/dist/services/session-service.d.ts.map +1 -0
  59. package/dist/services/session-service.js +30 -110
  60. package/dist/services/session-service.js.map +1 -0
  61. package/dist/services/symbol-search-service.d.ts +2 -1
  62. package/dist/services/symbol-search-service.d.ts.map +1 -0
  63. package/dist/services/symbol-search-service.js +11 -60
  64. package/dist/services/symbol-search-service.js.map +1 -0
  65. package/dist/services/tastytrade-http-client.d.ts +5 -3
  66. package/dist/services/tastytrade-http-client.d.ts.map +1 -0
  67. package/dist/services/tastytrade-http-client.js +53 -134
  68. package/dist/services/tastytrade-http-client.js.map +1 -0
  69. package/dist/services/transactions-service.d.ts +2 -1
  70. package/dist/services/transactions-service.d.ts.map +1 -0
  71. package/dist/services/transactions-service.js +22 -87
  72. package/dist/services/transactions-service.js.map +1 -0
  73. package/dist/services/watchlists-service.d.ts +2 -1
  74. package/dist/services/watchlists-service.d.ts.map +1 -0
  75. package/dist/services/watchlists-service.js +51 -165
  76. package/dist/services/watchlists-service.js.map +1 -0
  77. package/dist/tastytrade-api.d.ts +32 -22
  78. package/dist/tastytrade-api.d.ts.map +1 -0
  79. package/dist/tastytrade-api.js +44 -79
  80. package/dist/tastytrade-api.js.map +1 -0
  81. package/dist/utils/constants.d.ts +1 -0
  82. package/dist/utils/constants.d.ts.map +1 -0
  83. package/dist/utils/constants.js +2 -4
  84. package/dist/utils/constants.js.map +1 -0
  85. package/dist/utils/json-util.d.ts +4 -3
  86. package/dist/utils/json-util.d.ts.map +1 -0
  87. package/dist/utils/json-util.js +14 -25
  88. package/dist/utils/json-util.js.map +1 -0
  89. package/dist/utils/response-util.d.ts +1 -0
  90. package/dist/utils/response-util.d.ts.map +1 -0
  91. package/dist/utils/response-util.js +7 -12
  92. package/dist/utils/response-util.js.map +1 -0
  93. package/lib/account-streamer.ts +19 -12
  94. package/lib/logger.ts +48 -0
  95. package/lib/market-data-streamer.ts +5 -1
  96. package/lib/services/account-status-service.ts +2 -2
  97. package/lib/services/accounts-and-customers-service.ts +2 -2
  98. package/lib/services/balances-and-positions-service.ts +2 -2
  99. package/lib/services/instruments-service.ts +2 -2
  100. package/lib/services/margin-requirements-service.ts +2 -2
  101. package/lib/services/market-metrics-service.ts +2 -2
  102. package/lib/services/net-liquidating-value-history-service.ts +2 -2
  103. package/lib/services/orders-service.ts +2 -2
  104. package/lib/services/risk-parameters-service.ts +2 -2
  105. package/lib/services/session-service.ts +2 -2
  106. package/lib/services/symbol-search-service.ts +2 -2
  107. package/lib/services/tastytrade-http-client.ts +21 -16
  108. package/lib/services/transactions-service.ts +2 -2
  109. package/lib/services/watchlists-service.ts +2 -2
  110. package/lib/tastytrade-api.ts +35 -22
  111. package/package.json +14 -9
  112. package/tsconfig.json +12 -11
@@ -0,0 +1,29 @@
1
+ {
2
+ // Use IntelliSense to learn about possible attributes.
3
+ // Hover to view descriptions of existing attributes.
4
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5
+ "version": "0.2.0",
6
+ "configurations": [
7
+ {
8
+ "type": "node",
9
+ "request": "launch",
10
+ "name": "Typescript",
11
+ "skipFiles": [
12
+ "<node_internals>/**"
13
+ ],
14
+ "runtimeExecutable": "ts-node",
15
+ // "runtimeArgs": ["--nolazy", "-r", "ts-node/register/transpile-only"],
16
+ "args": ["thingy/main.ts"]
17
+ },
18
+ {
19
+ "type": "node",
20
+ "request": "launch",
21
+ "name": "Javascript",
22
+ "skipFiles": [
23
+ "<node_internals>/**"
24
+ ],
25
+ "runtimeExecutable": "node",
26
+ "args": ["thingy/default.js"]
27
+ }
28
+ ]
29
+ }
package/CHANGELOG.md ADDED
@@ -0,0 +1,41 @@
1
+ # @tastytrade/api
2
+ All notable changes to this project will be documented in this file.
3
+
4
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
5
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+
7
+ ## [Unreleased]
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
+
24
+ ## [4.0.0] - 2024-03-12
25
+
26
+ ### Changed
27
+
28
+ - Tsconfig library updates [#35](https://github.com/tastytrade/tastytrade-api-js/pull/35)
29
+ - target modern JS modules [#30](https://github.com/tastytrade/tastytrade-api-js/pull/30)
30
+ - Deprecate MarketDataStreamer [#29](https://github.com/tastytrade/tastytrade-api-js/pull/29)
31
+ - Target moden node runtimes [#22](https://github.com/tastytrade/tastytrade-api-js/pull/22)
32
+
33
+ ### Fixed
34
+
35
+ - add missing return in getDefaultHeaders [#32](https://github.com/tastytrade/tastytrade-api-js/pull/32)
36
+ - Dont set User-Agent header in browser environment [#28](https://github.com/tastytrade/tastytrade-api-js/pull/28)
37
+
38
+ ### Removed
39
+
40
+ - Remove https.Agent in `tastytrade-http-client` [#24](https://github.com/tastytrade/tastytrade-api-js/pull/24)
41
+ - Remove un-needed types dependency [#21](https://github.com/tastytrade/tastytrade-api-js/pull/21)
package/CODEOWNERS ADDED
@@ -0,0 +1 @@
1
+ * @dmoss18
package/README.md CHANGED
@@ -2,53 +2,84 @@
2
2
 
3
3
  ## Installation
4
4
  npm:
5
- `npm -i @tastytrade/api`
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 TastytradeClient from "@tastytrade/api"
13
- const tastytradeClient = new TastytradeClient(baseUrl, accountStreamerUrl)
14
- const loginResponse = await tastytradeClient.sessionService.login(usernameOrEmail, pasword)
15
- const accounts = await tastytradeClient.accountsAndCustomersService.getCustomerAccounts()
16
- const accountPositions = await tastytradeClient.balancesAndPositionsService.getPositionsList(accounts[0].accounts['account-number'])
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
- import TastytradeClient, { MarketDataStreamer, MarketDataSubscriptionType } from "@tastytrade-api"
22
- const tastytradeClient = new TastytradeClient(baseUrl, accountStreamerUrl)
23
- await tastytradeClient.sessionService.login(usernameOrEmail, pasword)
24
- const tokenResponse = await tastytradeClient.AccountsAndCustomersService.getApiQuoteToken()
25
- const streamer = new MarketDataStreamer()
26
- streamer.connect(tokenResponse['dxlink-url'], tokenResponse.token)
27
-
28
- function handleMarketDataReceived(data) {
29
- // Triggers every time market data event occurs
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
- // Add a listener for incoming market data. Returns a remove() function that removes the listener from the quote streamer
34
- const removeDataListener = streamer.addDataListener(handleMarketDataReceived)
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
- // Subscribe to a single equity quote
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
- // Subscribe to a single equity option quote
42
- const optionChain = await tastytradeClient.instrumentsService.getOptionChain('AAPL')
43
- streamer.addSubscription(optionChain[0]['streamer-symbol'])
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
- const TastytradeApi = require("@tastytrade/api")
49
- const TastytradeClient = TastytradeApi.default
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 TastytradeClient(baseUrl, accountStreamerUrl)
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()
@@ -95,6 +126,8 @@ API_PASSWORD=<your cert password>
95
126
  API_ACCOUNT_NUMBER=<your cert account number>
96
127
  ```
97
128
 
129
+ These values should match whatever username/password/account you set up in the tastytrade sandbox environment. Head to developer.tastyworks.com to get that set up.
130
+
98
131
  ## Running example app
99
132
  ```sh
100
133
  npm run build
@@ -1,17 +1,19 @@
1
- import type { JsonValue } from './utils/json-util';
2
- import { JsonBuilder } from './utils/json-util';
3
- import TastytradeSession from './models/tastytrade-session';
1
+ import type { JsonValue } from './utils/json-util.js';
2
+ import { JsonBuilder } from './utils/json-util.js';
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,
7
8
  Error = 2
8
9
  }
9
- export declare type Disposer = () => void;
10
- export declare type StreamerStateObserver = (streamerState: STREAMER_STATE) => void;
11
- export declare type StreamerMessageObserver = (json: object) => void;
10
+ export type Disposer = () => void;
11
+ export type StreamerStateObserver = (streamerState: STREAMER_STATE) => void;
12
+ 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();
@@ -90,3 +91,4 @@ export declare class AccountStreamer {
90
91
  addMessageObserver(observer: StreamerMessageObserver): Disposer;
91
92
  private readonly handleOneMessage;
92
93
  }
94
+ //# sourceMappingURL=account-streamer.d.ts.map
@@ -0,0 +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;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"}