@tastytrade/api 6.0.0 → 7.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/.idea/codeStyles/Project.xml +61 -0
- package/.idea/codeStyles/codeStyleConfig.xml +5 -0
- package/.idea/inspectionProfiles/Project_Default.xml +6 -0
- package/.idea/misc.xml +4 -0
- package/.idea/modules.xml +8 -0
- package/.idea/tastytrade-api-js.iml +15 -0
- package/.idea/vcs.xml +6 -0
- package/CHANGELOG.md +30 -0
- package/README.md +5 -16
- package/UPGRADING.md +118 -0
- package/dist/account-streamer.d.ts +10 -9
- package/dist/account-streamer.d.ts.map +1 -1
- package/dist/account-streamer.js +16 -22
- package/dist/account-streamer.js.map +1 -1
- package/dist/services/instruments-service.js +1 -1
- package/dist/services/instruments-service.js.map +1 -1
- package/dist/services/tastytrade-http-client.d.ts +4 -6
- package/dist/services/tastytrade-http-client.d.ts.map +1 -1
- package/dist/services/tastytrade-http-client.js +3 -11
- package/dist/services/tastytrade-http-client.js.map +1 -1
- package/dist/tastytrade-api.d.ts +5 -9
- package/dist/tastytrade-api.d.ts.map +1 -1
- package/dist/tastytrade-api.js +1 -6
- package/dist/tastytrade-api.js.map +1 -1
- package/lib/account-streamer.ts +17 -24
- package/lib/services/instruments-service.ts +1 -1
- package/lib/services/tastytrade-http-client.ts +7 -16
- package/lib/tastytrade-api.ts +6 -15
- package/package.json +1 -1
- package/lib/models/tastytrade-session.ts +0 -13
- package/lib/services/session-service.ts +0 -47
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
<component name="ProjectCodeStyleConfiguration">
|
|
2
|
+
<code_scheme name="Project" version="173">
|
|
3
|
+
<HTMLCodeStyleSettings>
|
|
4
|
+
<option name="HTML_SPACE_INSIDE_EMPTY_TAG" value="true" />
|
|
5
|
+
</HTMLCodeStyleSettings>
|
|
6
|
+
<JSCodeStyleSettings version="0">
|
|
7
|
+
<option name="USE_SEMICOLON_AFTER_STATEMENT" value="false" />
|
|
8
|
+
<option name="FORCE_SEMICOLON_STYLE" value="true" />
|
|
9
|
+
<option name="SPACE_BEFORE_FUNCTION_LEFT_PARENTH" value="false" />
|
|
10
|
+
<option name="USE_DOUBLE_QUOTES" value="false" />
|
|
11
|
+
<option name="FORCE_QUOTE_STYlE" value="true" />
|
|
12
|
+
<option name="ENFORCE_TRAILING_COMMA" value="Remove" />
|
|
13
|
+
<option name="SPACES_WITHIN_OBJECT_LITERAL_BRACES" value="true" />
|
|
14
|
+
<option name="SPACES_WITHIN_IMPORTS" value="true" />
|
|
15
|
+
</JSCodeStyleSettings>
|
|
16
|
+
<TypeScriptCodeStyleSettings version="0">
|
|
17
|
+
<option name="USE_SEMICOLON_AFTER_STATEMENT" value="false" />
|
|
18
|
+
<option name="FORCE_SEMICOLON_STYLE" value="true" />
|
|
19
|
+
<option name="SPACE_BEFORE_FUNCTION_LEFT_PARENTH" value="false" />
|
|
20
|
+
<option name="USE_DOUBLE_QUOTES" value="false" />
|
|
21
|
+
<option name="FORCE_QUOTE_STYlE" value="true" />
|
|
22
|
+
<option name="ENFORCE_TRAILING_COMMA" value="Remove" />
|
|
23
|
+
<option name="SPACES_WITHIN_OBJECT_LITERAL_BRACES" value="true" />
|
|
24
|
+
<option name="SPACES_WITHIN_IMPORTS" value="true" />
|
|
25
|
+
</TypeScriptCodeStyleSettings>
|
|
26
|
+
<VueCodeStyleSettings>
|
|
27
|
+
<option name="INTERPOLATION_NEW_LINE_AFTER_START_DELIMITER" value="false" />
|
|
28
|
+
<option name="INTERPOLATION_NEW_LINE_BEFORE_END_DELIMITER" value="false" />
|
|
29
|
+
</VueCodeStyleSettings>
|
|
30
|
+
<codeStyleSettings language="HTML">
|
|
31
|
+
<option name="SOFT_MARGINS" value="80" />
|
|
32
|
+
<indentOptions>
|
|
33
|
+
<option name="INDENT_SIZE" value="2" />
|
|
34
|
+
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
|
35
|
+
<option name="TAB_SIZE" value="2" />
|
|
36
|
+
</indentOptions>
|
|
37
|
+
</codeStyleSettings>
|
|
38
|
+
<codeStyleSettings language="JavaScript">
|
|
39
|
+
<option name="SOFT_MARGINS" value="80" />
|
|
40
|
+
<indentOptions>
|
|
41
|
+
<option name="INDENT_SIZE" value="2" />
|
|
42
|
+
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
|
43
|
+
<option name="TAB_SIZE" value="2" />
|
|
44
|
+
</indentOptions>
|
|
45
|
+
</codeStyleSettings>
|
|
46
|
+
<codeStyleSettings language="TypeScript">
|
|
47
|
+
<option name="SOFT_MARGINS" value="80" />
|
|
48
|
+
<indentOptions>
|
|
49
|
+
<option name="INDENT_SIZE" value="2" />
|
|
50
|
+
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
|
51
|
+
<option name="TAB_SIZE" value="2" />
|
|
52
|
+
</indentOptions>
|
|
53
|
+
</codeStyleSettings>
|
|
54
|
+
<codeStyleSettings language="Vue">
|
|
55
|
+
<option name="SOFT_MARGINS" value="80" />
|
|
56
|
+
<indentOptions>
|
|
57
|
+
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
|
58
|
+
</indentOptions>
|
|
59
|
+
</codeStyleSettings>
|
|
60
|
+
</code_scheme>
|
|
61
|
+
</component>
|
package/.idea/misc.xml
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<project version="4">
|
|
3
|
+
<component name="ProjectModuleManager">
|
|
4
|
+
<modules>
|
|
5
|
+
<module fileurl="file://$PROJECT_DIR$/.idea/tastytrade-api-js.iml" filepath="$PROJECT_DIR$/.idea/tastytrade-api-js.iml" />
|
|
6
|
+
</modules>
|
|
7
|
+
</component>
|
|
8
|
+
</project>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<module type="RUBY_MODULE" version="4">
|
|
3
|
+
<component name="ModuleRunConfigurationManager">
|
|
4
|
+
<shared />
|
|
5
|
+
</component>
|
|
6
|
+
<component name="NewModuleRootManager">
|
|
7
|
+
<content url="file://$MODULE_DIR$">
|
|
8
|
+
<sourceFolder url="file://$MODULE_DIR$/features" isTestSource="true" />
|
|
9
|
+
<sourceFolder url="file://$MODULE_DIR$/spec" isTestSource="true" />
|
|
10
|
+
<sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
|
|
11
|
+
</content>
|
|
12
|
+
<orderEntry type="inheritedJdk" />
|
|
13
|
+
<orderEntry type="sourceFolder" forTests="false" />
|
|
14
|
+
</component>
|
|
15
|
+
</module>
|
package/.idea/vcs.xml
ADDED
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,36 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [7.0.0] - 2026-02-13
|
|
10
|
+
|
|
11
|
+
**⚠️ BREAKING CHANGES - See [UPGRADING.md](UPGRADING.md) for migration guide**
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- Added automatic token refresh in AccountStreamer.send() method
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- BREAKING: TastytradeHttpClient constructor now requires full ClientConfig instead of Partial<ClientConfig>
|
|
20
|
+
- BREAKING: OAuth fields in ClientConfig are now required (not optional): clientSecret, refreshToken, and oauthScopes
|
|
21
|
+
- BREAKING: AccountStreamer constructor now accepts TastytradeHttpClient instead of separate TastytradeSession and AccessToken parameters
|
|
22
|
+
- BREAKING: AccountStreamer.send(), subscribeTo(), and subscribeToUser() methods are now async and return Promise<number>
|
|
23
|
+
- BREAKING: ClientConfig type requires clientSecret, refreshToken, and oauthScopes (no longer optional)
|
|
24
|
+
- TastytradeClient.ProdConfig and SandboxConfig now return Partial<ClientConfig> instead of full ClientConfig
|
|
25
|
+
- TastytradeHttpClient.needsTokenRefresh getter now only checks access token expiration (removed session checks)
|
|
26
|
+
- TastytradeHttpClient.authHeader getter now only returns access token (removed session token logic)
|
|
27
|
+
- AccountStreamer.authHeader getter now delegates to httpClient.authHeader
|
|
28
|
+
- AccountStreamer.subscribeToUser() now returns rejected promise with error message for invalid user IDs
|
|
29
|
+
- Updated JSDoc in AccountStreamer to remove session references
|
|
30
|
+
|
|
31
|
+
### Removed
|
|
32
|
+
|
|
33
|
+
- BREAKING: Removed lib/models/tastytrade-session.ts - session-based authentication no longer supported
|
|
34
|
+
- BREAKING: Removed lib/services/session-service.ts - no more login(), logout(), or validate() methods
|
|
35
|
+
- BREAKING: Removed session property from TastytradeHttpClient
|
|
36
|
+
- BREAKING: Removed sessionService property from TastytradeClient
|
|
37
|
+
- BREAKING: Removed session getter from TastytradeClient
|
|
38
|
+
|
|
9
39
|
## [6.0.0] - 2025-10-01
|
|
10
40
|
|
|
11
41
|
### Added
|
package/README.md
CHANGED
|
@@ -13,23 +13,12 @@ yarn add @tastytrade/api
|
|
|
13
13
|
|
|
14
14
|
## Quickstart
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
Session auth is deprecated for Api users. Please migrate to Oauth (instructions below). You can create an Oauth application for your own account by going to [my.tastytrade.com](https://my.tastytrade.com/app.html#/manage/api-access/open-api/).
|
|
16
|
+
Please upgrade to the latest version 7.0. See [UPGRADING.md](UPGRADING.md) for migration guide.
|
|
18
17
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
// Use built-in configs or provide your own
|
|
23
|
-
const tastytradeClient = new TastytradeClient(TastytradeClient.ProdConfig)
|
|
24
|
-
// Or for sandbox: new TastytradeClient(TastytradeClient.SandboxConfig)
|
|
25
|
-
|
|
26
|
-
await tastytradeClient.sessionService.login(usernameOrEmail, password)
|
|
27
|
-
const accounts = await tastytradeClient.accountsAndCustomersService.getCustomerAccounts()
|
|
28
|
-
const accountPositions = await tastytradeClient.balancesAndPositionsService.getPositionsList(accounts[0].account['account-number'])
|
|
29
|
-
```
|
|
18
|
+
### Initialization
|
|
19
|
+
You must provide `clientSecret`, `refreshToken`, and `oauthScopes` when instantiating the client.
|
|
30
20
|
|
|
31
|
-
|
|
32
|
-
For OAuth-based authentication, provide `clientSecret`, `refreshToken`, and `oauthScopes` when instantiating the client:
|
|
21
|
+
For instructions on obtaining a client secret and refresh token, refer to our [Oauth2 guide](https://developer.tastytrade.com/oauth/).
|
|
33
22
|
|
|
34
23
|
```js
|
|
35
24
|
import TastytradeClient from "@tastytrade/api"
|
|
@@ -45,7 +34,7 @@ const tastytradeClient = new TastytradeClient({
|
|
|
45
34
|
const accounts = await tastytradeClient.accountsAndCustomersService.getCustomerAccounts()
|
|
46
35
|
```
|
|
47
36
|
|
|
48
|
-
The client will automatically generate and refresh access tokens as needed.
|
|
37
|
+
The client will automatically generate and refresh access tokens as needed.
|
|
49
38
|
|
|
50
39
|
### Targeting a Specific API Version
|
|
51
40
|
New Api versions are outlined in our [Release Notes](https://developer.tastytrade.com/release-notes/) docs.
|
package/UPGRADING.md
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# Migration Guide: v6.0 → v7.0
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Version 7.0 removes session-based authentication entirely in favor of OAuth token-based authentication. This change simplifies the authentication flow and aligns with modern API security practices.
|
|
6
|
+
|
|
7
|
+
## Breaking Changes Summary
|
|
8
|
+
|
|
9
|
+
- ❌ **Removed**: `SessionService` (no more `login()`, `logout()`, `validate()`)
|
|
10
|
+
- ❌ **Removed**: `TastytradeSession` class
|
|
11
|
+
- ❌ **Removed**: `session` property from `TastytradeClient`
|
|
12
|
+
- ✅ **Required**: OAuth credentials (`clientSecret`, `refreshToken`, `oauthScopes`) now mandatory in `ClientConfig`
|
|
13
|
+
- ⚠️ **Changed**: `AccountStreamer` constructor signature
|
|
14
|
+
- ⚠️ **Changed**: Several `AccountStreamer` methods now async
|
|
15
|
+
|
|
16
|
+
## Migration Steps
|
|
17
|
+
|
|
18
|
+
### 1. Update TastytradeClient Initialization
|
|
19
|
+
|
|
20
|
+
#### Before (v6.0)
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
import TastytradeClient from 'tastytrade-api'
|
|
24
|
+
|
|
25
|
+
const client = new TastytradeClient({
|
|
26
|
+
baseUrl: 'https://api.tastyworks.com',
|
|
27
|
+
accountStreamerUrl: 'wss://streamer.tastyworks.com'
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
// Login required before making API calls
|
|
31
|
+
await client.sessionService.login(username, password)
|
|
32
|
+
|
|
33
|
+
const accounts = await client.accountsAndCustomersService.getCustomerAccounts()
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
#### After (v7.0)
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
import TastytradeClient from 'tastytrade-api'
|
|
40
|
+
|
|
41
|
+
const client = new TastytradeClient({
|
|
42
|
+
baseUrl: 'https://api.tastyworks.com',
|
|
43
|
+
accountStreamerUrl: 'wss://streamer.tastyworks.com',
|
|
44
|
+
clientSecret: 'your-client-secret',
|
|
45
|
+
refreshToken: 'your-refresh-token',
|
|
46
|
+
oauthScopes: ['read', 'trade']
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
// No login needed - client automatically manages tokens
|
|
50
|
+
const accounts = await client.accountsAndCustomersService.getCustomerAccounts()
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Or use the predefined configs:
|
|
54
|
+
|
|
55
|
+
```typescript
|
|
56
|
+
const client = new TastytradeClient({
|
|
57
|
+
...TastytradeClient.ProdConfig, // baseUrl + accountStreamerUrl
|
|
58
|
+
clientSecret: 'your-client-secret',
|
|
59
|
+
refreshToken: 'your-refresh-token',
|
|
60
|
+
oauthScopes: ['read', 'trade']
|
|
61
|
+
})
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### 2. Remove All SessionService Usage
|
|
65
|
+
|
|
66
|
+
Before (v6.0)
|
|
67
|
+
|
|
68
|
+
```typescript
|
|
69
|
+
// Login
|
|
70
|
+
await client.sessionService.login(username, password)
|
|
71
|
+
|
|
72
|
+
// Login with remember token
|
|
73
|
+
await client.sessionService.loginWithRememberToken(username, rememberToken)
|
|
74
|
+
|
|
75
|
+
// Validate session
|
|
76
|
+
const isValid = await client.sessionService.validate()
|
|
77
|
+
|
|
78
|
+
// Logout
|
|
79
|
+
await client.sessionService.logout()
|
|
80
|
+
|
|
81
|
+
// Check if logged in
|
|
82
|
+
if (client.session.isValid) {
|
|
83
|
+
// Do something
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
After (v7.0)
|
|
88
|
+
|
|
89
|
+
```typescript
|
|
90
|
+
// Access tokens are refreshed automatically. No sessions or session tokens.
|
|
91
|
+
const client = new TastytradeClient(config)
|
|
92
|
+
await client.accountsAndCustomersService.getCustomerAccounts()
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### 3. Update AccountStreamer Method Calls
|
|
96
|
+
|
|
97
|
+
Several AccountStreamer methods now return promises:
|
|
98
|
+
|
|
99
|
+
Before (v6.0)
|
|
100
|
+
|
|
101
|
+
```typescript
|
|
102
|
+
await streamer.start()
|
|
103
|
+
|
|
104
|
+
streamer.subscribeTo('action', value)
|
|
105
|
+
streamer.subscribeToUser(userExternalId)
|
|
106
|
+
const requestId = streamer.subscribeToAccounts(['account123'])
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
After (v7.0)
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
await streamer.start()
|
|
113
|
+
|
|
114
|
+
// Now async - must await
|
|
115
|
+
await streamer.subscribeTo('action', value)
|
|
116
|
+
await streamer.subscribeToUser(userExternalId)
|
|
117
|
+
const requestId = await streamer.subscribeToAccounts(['account123'])
|
|
118
|
+
```
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import type { JsonValue } from './utils/json-util.js';
|
|
2
2
|
import { JsonBuilder } from './utils/json-util.js';
|
|
3
|
-
import TastytradeSession from './models/tastytrade-session.js';
|
|
4
3
|
import type Logger from './logger.js';
|
|
5
|
-
import
|
|
4
|
+
import TastytradeHttpClient from './services/tastytrade-http-client.js';
|
|
6
5
|
export declare enum STREAMER_STATE {
|
|
7
6
|
Open = 0,
|
|
8
7
|
Closed = 1,
|
|
@@ -13,8 +12,7 @@ export type StreamerStateObserver = (streamerState: STREAMER_STATE) => void;
|
|
|
13
12
|
export type StreamerMessageObserver = (json: object) => void;
|
|
14
13
|
export declare class AccountStreamer {
|
|
15
14
|
private readonly url;
|
|
16
|
-
private readonly
|
|
17
|
-
private readonly accessToken;
|
|
15
|
+
private readonly httpClient;
|
|
18
16
|
private readonly heartbeatInterval;
|
|
19
17
|
private readonly logger;
|
|
20
18
|
private websocket;
|
|
@@ -33,8 +31,11 @@ export declare class AccountStreamer {
|
|
|
33
31
|
/**
|
|
34
32
|
*
|
|
35
33
|
* @param url Url of the account streamer service
|
|
34
|
+
* @param httpClient Instance of TastytradeHttpClient
|
|
35
|
+
* @param logger Logger to use
|
|
36
|
+
* @param heartbeatInterval Interval at which to auto-send heartbeat messages
|
|
36
37
|
*/
|
|
37
|
-
constructor(url: string,
|
|
38
|
+
constructor(url: string, httpClient: TastytradeHttpClient, logger: Logger, heartbeatInterval?: number);
|
|
38
39
|
get streamerState(): STREAMER_STATE;
|
|
39
40
|
set streamerState(streamerState: STREAMER_STATE);
|
|
40
41
|
private get authHeader();
|
|
@@ -49,7 +50,7 @@ export declare class AccountStreamer {
|
|
|
49
50
|
get isError(): boolean;
|
|
50
51
|
/**
|
|
51
52
|
* Entrypoint for beginning a websocket session
|
|
52
|
-
* You must have a valid tastytrade
|
|
53
|
+
* You must have a valid tastytrade access token before calling this method
|
|
53
54
|
* @returns Promise that resolves when the "opened" message is received (see handleOpen)
|
|
54
55
|
*/
|
|
55
56
|
start(): Promise<boolean>;
|
|
@@ -66,20 +67,20 @@ export declare class AccountStreamer {
|
|
|
66
67
|
* @param includeSessionToken Attaches session token to message if true
|
|
67
68
|
* @returns
|
|
68
69
|
*/
|
|
69
|
-
send(json: JsonBuilder
|
|
70
|
+
send(json: JsonBuilder): Promise<number>;
|
|
70
71
|
/**
|
|
71
72
|
* Used by other methods to send a specific `action` message
|
|
72
73
|
* @param action
|
|
73
74
|
* @param value
|
|
74
75
|
* @returns
|
|
75
76
|
*/
|
|
76
|
-
subscribeTo(action: string, value?: JsonValue): number
|
|
77
|
+
subscribeTo(action: string, value?: JsonValue): Promise<number>;
|
|
77
78
|
/**
|
|
78
79
|
* Subscribes to all user-level messages for given user external id
|
|
79
80
|
* @param userExternalId "external-id" from login response
|
|
80
81
|
* @returns Promise that resolves when ack is received
|
|
81
82
|
*/
|
|
82
|
-
subscribeToUser(userExternalId: string):
|
|
83
|
+
subscribeToUser(userExternalId: string): Promise<number>;
|
|
83
84
|
/**
|
|
84
85
|
* Subscribes to all account-level messages for given account numbers
|
|
85
86
|
* @param accountNumbers List of account numbers to subscribe to
|
|
@@ -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;
|
|
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;AAElD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,oBAAoB,MAAM,sCAAsC,CAAA;AAEvE,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;IAiCxB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAE3B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAnCpC,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,CAAI;IAC1B,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;;;;;;OAMG;gBAEgB,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,oBAAoB,EACjD,MAAM,EAAE,MAAM,EACG,iBAAiB,GAAE,MAAmC;IAKzE,IAAI,aAAa,IAAI,cAAc,CAElC;IAED,IAAI,aAAa,CAAC,aAAa,EAAE,cAAc,EAM9C;IAED,OAAO,KAAK,UAAU,GAErB;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;IACG,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAwB9C;;;;;OAKG;IACU,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;IAS5E;;;;OAIG;IACU,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQrE;;;;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
|
@@ -31,11 +31,13 @@ export class AccountStreamer {
|
|
|
31
31
|
/**
|
|
32
32
|
*
|
|
33
33
|
* @param url Url of the account streamer service
|
|
34
|
+
* @param httpClient Instance of TastytradeHttpClient
|
|
35
|
+
* @param logger Logger to use
|
|
36
|
+
* @param heartbeatInterval Interval at which to auto-send heartbeat messages
|
|
34
37
|
*/
|
|
35
|
-
constructor(url,
|
|
38
|
+
constructor(url, httpClient, logger, heartbeatInterval = DEFAULT_HEARTBEAT_INTERVAL) {
|
|
36
39
|
this.url = url;
|
|
37
|
-
this.
|
|
38
|
-
this.accessToken = accessToken;
|
|
40
|
+
this.httpClient = httpClient;
|
|
39
41
|
this.heartbeatInterval = heartbeatInterval;
|
|
40
42
|
this.websocket = null;
|
|
41
43
|
this.startResolve = null;
|
|
@@ -134,13 +136,7 @@ export class AccountStreamer {
|
|
|
134
136
|
});
|
|
135
137
|
}
|
|
136
138
|
get authHeader() {
|
|
137
|
-
|
|
138
|
-
return this.session.authToken;
|
|
139
|
-
}
|
|
140
|
-
if (this.accessToken.isValid) {
|
|
141
|
-
return this.accessToken.authorizationHeader;
|
|
142
|
-
}
|
|
143
|
-
return null;
|
|
139
|
+
return this.httpClient.authHeader;
|
|
144
140
|
}
|
|
145
141
|
/**
|
|
146
142
|
* Adds a custom callback that fires when the streamer state changes
|
|
@@ -164,7 +160,7 @@ export class AccountStreamer {
|
|
|
164
160
|
}
|
|
165
161
|
/**
|
|
166
162
|
* Entrypoint for beginning a websocket session
|
|
167
|
-
* You must have a valid tastytrade
|
|
163
|
+
* You must have a valid tastytrade access token before calling this method
|
|
168
164
|
* @returns Promise that resolves when the "opened" message is received (see handleOpen)
|
|
169
165
|
*/
|
|
170
166
|
async start() {
|
|
@@ -240,16 +236,14 @@ export class AccountStreamer {
|
|
|
240
236
|
* @param includeSessionToken Attaches session token to message if true
|
|
241
237
|
* @returns
|
|
242
238
|
*/
|
|
243
|
-
send(json
|
|
239
|
+
async send(json) {
|
|
244
240
|
this.requestCounter += 1;
|
|
245
241
|
json.add(REQUEST_ID, this.requestCounter);
|
|
246
242
|
json.add('source', SOURCE);
|
|
247
|
-
if (
|
|
248
|
-
|
|
249
|
-
throw new Error('session or access token not set');
|
|
250
|
-
}
|
|
251
|
-
json.add('auth-token', this.authHeader);
|
|
243
|
+
if (this.httpClient.needsTokenRefresh) {
|
|
244
|
+
await this.httpClient.generateAccessToken();
|
|
252
245
|
}
|
|
246
|
+
json.add('auth-token', this.authHeader);
|
|
253
247
|
const message = JSON.stringify(json.json);
|
|
254
248
|
const websocket = this.websocket;
|
|
255
249
|
if (websocket === null) {
|
|
@@ -268,7 +262,7 @@ export class AccountStreamer {
|
|
|
268
262
|
* @param value
|
|
269
263
|
* @returns
|
|
270
264
|
*/
|
|
271
|
-
subscribeTo(action, value) {
|
|
265
|
+
async subscribeTo(action, value) {
|
|
272
266
|
const json = new JsonBuilder();
|
|
273
267
|
json.add('action', action);
|
|
274
268
|
if (!_.isUndefined(value)) {
|
|
@@ -281,11 +275,11 @@ export class AccountStreamer {
|
|
|
281
275
|
* @param userExternalId "external-id" from login response
|
|
282
276
|
* @returns Promise that resolves when ack is received
|
|
283
277
|
*/
|
|
284
|
-
subscribeToUser(userExternalId) {
|
|
278
|
+
async subscribeToUser(userExternalId) {
|
|
285
279
|
if (!userExternalId) {
|
|
286
|
-
return;
|
|
280
|
+
return Promise.reject(`Must provide user external id. You provided: ${userExternalId}`);
|
|
287
281
|
}
|
|
288
|
-
this.subscribeTo(MessageAction.USER_MESSAGE_SUBSCRIBE, userExternalId);
|
|
282
|
+
return this.subscribeTo(MessageAction.USER_MESSAGE_SUBSCRIBE, userExternalId);
|
|
289
283
|
}
|
|
290
284
|
/**
|
|
291
285
|
* Subscribes to all account-level messages for given account numbers
|
|
@@ -297,7 +291,7 @@ export class AccountStreamer {
|
|
|
297
291
|
return Promise.reject('no account numbers');
|
|
298
292
|
}
|
|
299
293
|
const value = accountNumbers.length > 1 ? accountNumbers : accountNumbers[0];
|
|
300
|
-
const requestId = this.subscribeTo(MessageAction.CONNECT, value);
|
|
294
|
+
const requestId = await this.subscribeTo(MessageAction.CONNECT, value);
|
|
301
295
|
return new Promise((resolve, reject) => {
|
|
302
296
|
this.requestPromises.set(requestId, [resolve, reject]);
|
|
303
297
|
});
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"account-streamer.js","sourceRoot":"","sources":["../lib/account-streamer.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,7 +37,7 @@ export default class InstrumentsService {
|
|
|
37
37
|
throw new Error('Symbols are required for InstrumentService.getEquityOptions');
|
|
38
38
|
}
|
|
39
39
|
//Returns a set of equity options given one or more symbols
|
|
40
|
-
const queryParams = { symbols, active, withExpired };
|
|
40
|
+
const queryParams = { symbol: symbols, active, withExpired };
|
|
41
41
|
const equityOptions = (await this.httpClient.getData(`/instruments/equity-options`, {}, queryParams));
|
|
42
42
|
return extractResponseData(equityOptions);
|
|
43
43
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instruments-service.js","sourceRoot":"","sources":["../../lib/services/instruments-service.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,MAAM,2BAA2B,CAAC;AAE5D,OAAO,CAAC,MAAM,QAAQ,CAAA;AAEtB,MAAM,CAAC,OAAO,OAAO,kBAAkB;IACnC,YAAoB,UAAgC;QAAhC,eAAU,GAAV,UAAU,CAAsB;IACpD,CAAC;IAED,oEAAoE;IACpE,KAAK,CAAC,mBAAmB,CAAC,UAAoB,EAAE;QAC5C,2EAA2E;QAC3E,MAAM,WAAW,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;QACvC,MAAM,gBAAgB,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,+BAA+B,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC,CAAA;QAC1G,OAAO,mBAAmB,CAAC,gBAAgB,CAAC,CAAA;IAChD,CAAC;IACD,KAAK,CAAC,uBAAuB,CAAC,MAAc;QACxC,2CAA2C;QAC3C,MAAM,aAAa,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAA;QAChD,MAAM,oBAAoB,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,iCAAiC,aAAa,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;QACtH,OAAO,mBAAmB,CAAC,oBAAoB,CAAC,CAAA;IACpD,CAAC;IACD,KAAK,CAAC,iBAAiB,CAAC,WAAW,GAAG,EAAE;QACpC,oDAAoD;QACpD,MAAM,cAAc,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,8BAA8B,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC,CAAA;QACvG,OAAO,mBAAmB,CAAC,cAAc,CAAC,CAAA;IAC9C,CAAC;IACD,KAAK,CAAC,oBAAoB,CAAC,WAAW,GAAG,EAAE;QACvC,2EAA2E;QAC3E,MAAM,iBAAiB,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,uBAAuB,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC,CAAA;QACnG,OAAO,mBAAmB,CAAC,iBAAiB,CAAC,CAAA;IACjD,CAAC;IACD,KAAK,CAAC,eAAe,CAAC,MAAc;QAChC,4DAA4D;QAC5D,MAAM,YAAY,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,yBAAyB,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;QAC/F,OAAO,mBAAmB,CAAC,YAAY,CAAC,CAAA;IAC5C,CAAC;IACD,KAAK,CAAC,gBAAgB,CAAC,OAAiB,EAAE,MAAM,GAAG,IAAI,EAAE,WAAW,GAAG,KAAK;QACxE,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAA;QAChF,CAAC;QAED,2DAA2D;QAC3D,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"instruments-service.js","sourceRoot":"","sources":["../../lib/services/instruments-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,15 @@
|
|
|
1
|
-
import TastytradeSession from "../models/tastytrade-session.js";
|
|
2
1
|
import AccessToken from "../models/access-token.js";
|
|
3
2
|
import type Logger from "../logger.js";
|
|
4
3
|
import type { ClientConfig } from "../tastytrade-api.js";
|
|
5
4
|
export default class TastytradeHttpClient {
|
|
6
5
|
private readonly logger?;
|
|
7
6
|
baseUrl: string;
|
|
8
|
-
clientSecret
|
|
9
|
-
refreshToken
|
|
10
|
-
oauthScopes
|
|
7
|
+
clientSecret: string;
|
|
8
|
+
refreshToken: string;
|
|
9
|
+
oauthScopes: string[];
|
|
11
10
|
readonly accessToken: AccessToken;
|
|
12
|
-
readonly session: TastytradeSession;
|
|
13
11
|
private _targetApiVersion?;
|
|
14
|
-
constructor(clientConfig:
|
|
12
|
+
constructor(clientConfig: ClientConfig, logger?: Logger);
|
|
15
13
|
updateConfig(config: Partial<ClientConfig>): void;
|
|
16
14
|
get needsTokenRefresh(): boolean;
|
|
17
15
|
get authHeader(): string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tastytrade-http-client.d.ts","sourceRoot":"","sources":["../../lib/services/tastytrade-http-client.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"tastytrade-http-client.d.ts","sourceRoot":"","sources":["../../lib/services/tastytrade-http-client.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,2BAA2B,CAAA;AAKnD,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAUxD,MAAM,CAAC,OAAO,OAAO,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAQ;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,EAAE,CAAA;IAC5B,SAAgB,WAAW,EAAE,WAAW,CAAA;IACxC,OAAO,CAAC,iBAAiB,CAAC,CAAQ;gBAEtB,YAAY,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,MAAM;IAUhD,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC;IAQjD,IAAI,iBAAiB,IAAI,OAAO,CAE/B;IAED,IAAI,UAAU,IAAI,MAAM,GAAG,IAAI,CAK9B;IAED,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,WAAW;IAON,mBAAmB,IAAI,OAAO,CAAC,GAAG,CAAC;YAkBlC,cAAc;IAgBtB,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;IAI5D,IAAW,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAEhD;IAED,IAAW,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAKtD;CACJ"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import TastytradeSession from "../models/tastytrade-session.js";
|
|
2
1
|
import AccessToken from "../models/access-token.js";
|
|
3
2
|
import axios from "axios";
|
|
4
3
|
import qs from 'qs';
|
|
@@ -15,7 +14,9 @@ export default class TastytradeHttpClient {
|
|
|
15
14
|
this.logger = logger;
|
|
16
15
|
this.baseUrl = clientConfig.baseUrl;
|
|
17
16
|
this.accessToken = new AccessToken();
|
|
18
|
-
this.
|
|
17
|
+
this.clientSecret = clientConfig.clientSecret;
|
|
18
|
+
this.refreshToken = clientConfig.refreshToken;
|
|
19
|
+
this.oauthScopes = clientConfig.oauthScopes;
|
|
19
20
|
this.updateConfig(clientConfig);
|
|
20
21
|
}
|
|
21
22
|
updateConfig(config) {
|
|
@@ -26,18 +27,9 @@ export default class TastytradeHttpClient {
|
|
|
26
27
|
}
|
|
27
28
|
}
|
|
28
29
|
get needsTokenRefresh() {
|
|
29
|
-
if (this.session.isValid) {
|
|
30
|
-
return false;
|
|
31
|
-
}
|
|
32
|
-
if (_.isNil(this.refreshToken) || _.isNil(this.clientSecret)) {
|
|
33
|
-
return false;
|
|
34
|
-
}
|
|
35
30
|
return this.accessToken.isExpired;
|
|
36
31
|
}
|
|
37
32
|
get authHeader() {
|
|
38
|
-
if (this.session.isValid) {
|
|
39
|
-
return this.session.authToken;
|
|
40
|
-
}
|
|
41
33
|
if (this.accessToken.isValid) {
|
|
42
34
|
return this.accessToken.authorizationHeader;
|
|
43
35
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tastytrade-http-client.js","sourceRoot":"","sources":["../../lib/services/tastytrade-http-client.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
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
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import TastytradeHttpClient from "./services/tastytrade-http-client.js";
|
|
2
2
|
import { AccountStreamer, STREAMER_STATE, type Disposer, type StreamerStateObserver } from './account-streamer.js';
|
|
3
|
-
import SessionService from "./services/session-service.js";
|
|
4
3
|
import AccountStatusService from "./services/account-status-service.js";
|
|
5
4
|
import AccountsAndCustomersService from "./services/accounts-and-customers-service.js";
|
|
6
5
|
import BalancesAndPositionsService from "./services/balances-and-positions-service.js";
|
|
@@ -13,7 +12,6 @@ import RiskParametersService from "./services/risk-parameters-service.js";
|
|
|
13
12
|
import SymbolSearchService from "./services/symbol-search-service.js";
|
|
14
13
|
import TransactionsService from "./services/transactions-service.js";
|
|
15
14
|
import WatchlistsService from "./services/watchlists-service.js";
|
|
16
|
-
import TastytradeSession from "./models/tastytrade-session.js";
|
|
17
15
|
import type Logger from "./logger.js";
|
|
18
16
|
import { TastytradeLogger, LogLevel } from "./logger.js";
|
|
19
17
|
import QuoteStreamer, { MarketDataSubscriptionType, CandleType } from "./quote-streamer.js";
|
|
@@ -21,21 +19,20 @@ import type AccessToken from "./models/access-token.js";
|
|
|
21
19
|
export type ClientConfig = {
|
|
22
20
|
baseUrl: string;
|
|
23
21
|
accountStreamerUrl: string;
|
|
24
|
-
clientSecret
|
|
25
|
-
refreshToken
|
|
26
|
-
oauthScopes
|
|
22
|
+
clientSecret: string;
|
|
23
|
+
refreshToken: string;
|
|
24
|
+
oauthScopes: string[];
|
|
27
25
|
logger?: Logger;
|
|
28
26
|
logLevel?: LogLevel;
|
|
29
27
|
targetApiVersion?: string;
|
|
30
28
|
};
|
|
31
29
|
export default class TastytradeClient {
|
|
32
|
-
static readonly ProdConfig: ClientConfig
|
|
33
|
-
static readonly SandboxConfig: ClientConfig
|
|
30
|
+
static readonly ProdConfig: Partial<ClientConfig>;
|
|
31
|
+
static readonly SandboxConfig: Partial<ClientConfig>;
|
|
34
32
|
readonly logger: TastytradeLogger;
|
|
35
33
|
readonly httpClient: TastytradeHttpClient;
|
|
36
34
|
readonly accountStreamer: AccountStreamer;
|
|
37
35
|
readonly quoteStreamer: QuoteStreamer;
|
|
38
|
-
readonly sessionService: SessionService;
|
|
39
36
|
readonly accountStatusService: AccountStatusService;
|
|
40
37
|
readonly accountsAndCustomersService: AccountsAndCustomersService;
|
|
41
38
|
readonly balancesAndPositionsService: BalancesAndPositionsService;
|
|
@@ -50,7 +47,6 @@ export default class TastytradeClient {
|
|
|
50
47
|
readonly watchlistsService: WatchlistsService;
|
|
51
48
|
constructor(config: ClientConfig);
|
|
52
49
|
updateConfig(config: Partial<ClientConfig>): void;
|
|
53
|
-
get session(): TastytradeSession;
|
|
54
50
|
get accessToken(): AccessToken;
|
|
55
51
|
}
|
|
56
52
|
export { MarketDataSubscriptionType, CandleType };
|
|
@@ -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;
|
|
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;AAGlH,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,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,aAAa,EAAE,EAAE,0BAA0B,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAC3F,OAAO,KAAK,WAAW,MAAM,0BAA0B,CAAA;AAEvD,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACnC,gBAAuB,UAAU,EAAE,OAAO,CAAC,YAAY,CAAC,CAGvD;IACD,gBAAuB,aAAa,EAAE,OAAO,CAAC,YAAY,CAAC,CAG1D;IACD,SAAgB,MAAM,EAAE,gBAAgB,CAAA;IACxC,SAAgB,UAAU,EAAE,oBAAoB,CAAA;IAEhD,SAAgB,eAAe,EAAE,eAAe,CAAA;IAChD,SAAgB,aAAa,EAAE,aAAa,CAAA;IAE5C,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;IAsBzB,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC;IAKjD,IAAI,WAAW,IAAI,WAAW,CAE7B;CACF;AAED,OAAO,EAAE,0BAA0B,EAAE,UAAU,EAAE,CAAA;AACjD,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
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import TastytradeHttpClient from "./services/tastytrade-http-client.js";
|
|
2
2
|
import { AccountStreamer, STREAMER_STATE } from './account-streamer.js';
|
|
3
3
|
//Services:
|
|
4
|
-
import SessionService from "./services/session-service.js";
|
|
5
4
|
import AccountStatusService from "./services/account-status-service.js";
|
|
6
5
|
import AccountsAndCustomersService from "./services/accounts-and-customers-service.js";
|
|
7
6
|
import BalancesAndPositionsService from "./services/balances-and-positions-service.js";
|
|
@@ -20,7 +19,6 @@ class TastytradeClient {
|
|
|
20
19
|
constructor(config) {
|
|
21
20
|
this.logger = new TastytradeLogger(config.logger, config.logLevel);
|
|
22
21
|
this.httpClient = new TastytradeHttpClient(config, this.logger);
|
|
23
|
-
this.sessionService = new SessionService(this.httpClient);
|
|
24
22
|
this.accountStatusService = new AccountStatusService(this.httpClient);
|
|
25
23
|
this.accountsAndCustomersService = new AccountsAndCustomersService(this.httpClient);
|
|
26
24
|
this.balancesAndPositionsService = new BalancesAndPositionsService(this.httpClient);
|
|
@@ -33,16 +31,13 @@ class TastytradeClient {
|
|
|
33
31
|
this.symbolSearchService = new SymbolSearchService(this.httpClient);
|
|
34
32
|
this.transactionsService = new TransactionsService(this.httpClient);
|
|
35
33
|
this.watchlistsService = new WatchlistsService(this.httpClient);
|
|
36
|
-
this.accountStreamer = new AccountStreamer(config.accountStreamerUrl, this.
|
|
34
|
+
this.accountStreamer = new AccountStreamer(config.accountStreamerUrl, this.httpClient, this.logger);
|
|
37
35
|
this.quoteStreamer = new QuoteStreamer(this.accountsAndCustomersService, this.logger);
|
|
38
36
|
}
|
|
39
37
|
updateConfig(config) {
|
|
40
38
|
this.httpClient.updateConfig(config);
|
|
41
39
|
this.logger.updateConfig(config);
|
|
42
40
|
}
|
|
43
|
-
get session() {
|
|
44
|
-
return this.httpClient.session;
|
|
45
|
-
}
|
|
46
41
|
get accessToken() {
|
|
47
42
|
return this.httpClient.accessToken;
|
|
48
43
|
}
|
|
@@ -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;
|
|
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
|
@@ -2,10 +2,9 @@ import WebSocket from 'isomorphic-ws'
|
|
|
2
2
|
import _ from 'lodash'
|
|
3
3
|
import type { JsonMap, JsonValue } from './utils/json-util.js'
|
|
4
4
|
import { JsonBuilder } from './utils/json-util.js'
|
|
5
|
-
import TastytradeSession from './models/tastytrade-session.js'
|
|
6
5
|
import { MinTlsVersion } from './utils/constants.js'
|
|
7
6
|
import type Logger from './logger.js'
|
|
8
|
-
import
|
|
7
|
+
import TastytradeHttpClient from './services/tastytrade-http-client.js'
|
|
9
8
|
|
|
10
9
|
export enum STREAMER_STATE {
|
|
11
10
|
Open = 0,
|
|
@@ -71,11 +70,13 @@ export class AccountStreamer {
|
|
|
71
70
|
/**
|
|
72
71
|
*
|
|
73
72
|
* @param url Url of the account streamer service
|
|
73
|
+
* @param httpClient Instance of TastytradeHttpClient
|
|
74
|
+
* @param logger Logger to use
|
|
75
|
+
* @param heartbeatInterval Interval at which to auto-send heartbeat messages
|
|
74
76
|
*/
|
|
75
77
|
constructor(
|
|
76
78
|
private readonly url: string,
|
|
77
|
-
private readonly
|
|
78
|
-
private readonly accessToken: AccessToken,
|
|
79
|
+
private readonly httpClient: TastytradeHttpClient,
|
|
79
80
|
logger: Logger,
|
|
80
81
|
private readonly heartbeatInterval: number = DEFAULT_HEARTBEAT_INTERVAL
|
|
81
82
|
) {
|
|
@@ -95,13 +96,7 @@ export class AccountStreamer {
|
|
|
95
96
|
}
|
|
96
97
|
|
|
97
98
|
private get authHeader() {
|
|
98
|
-
|
|
99
|
-
return this.session.authToken
|
|
100
|
-
}
|
|
101
|
-
if (this.accessToken.isValid) {
|
|
102
|
-
return this.accessToken.authorizationHeader
|
|
103
|
-
}
|
|
104
|
-
return null
|
|
99
|
+
return this.httpClient.authHeader
|
|
105
100
|
}
|
|
106
101
|
|
|
107
102
|
/**
|
|
@@ -131,7 +126,7 @@ export class AccountStreamer {
|
|
|
131
126
|
|
|
132
127
|
/**
|
|
133
128
|
* Entrypoint for beginning a websocket session
|
|
134
|
-
* You must have a valid tastytrade
|
|
129
|
+
* You must have a valid tastytrade access token before calling this method
|
|
135
130
|
* @returns Promise that resolves when the "opened" message is received (see handleOpen)
|
|
136
131
|
*/
|
|
137
132
|
async start(): Promise<boolean> {
|
|
@@ -232,19 +227,17 @@ export class AccountStreamer {
|
|
|
232
227
|
* @param includeSessionToken Attaches session token to message if true
|
|
233
228
|
* @returns
|
|
234
229
|
*/
|
|
235
|
-
send(json: JsonBuilder
|
|
230
|
+
async send(json: JsonBuilder): Promise<number> {
|
|
236
231
|
this.requestCounter += 1
|
|
237
232
|
json.add(REQUEST_ID, this.requestCounter)
|
|
238
233
|
json.add('source', SOURCE)
|
|
239
234
|
|
|
240
|
-
if (
|
|
241
|
-
|
|
242
|
-
throw new Error('session or access token not set')
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
json.add('auth-token', this.authHeader)
|
|
235
|
+
if (this.httpClient.needsTokenRefresh) {
|
|
236
|
+
await this.httpClient.generateAccessToken()
|
|
246
237
|
}
|
|
247
238
|
|
|
239
|
+
json.add('auth-token', this.authHeader)
|
|
240
|
+
|
|
248
241
|
const message = JSON.stringify(json.json)
|
|
249
242
|
const websocket = this.websocket
|
|
250
243
|
if (websocket === null) {
|
|
@@ -264,7 +257,7 @@ export class AccountStreamer {
|
|
|
264
257
|
* @param value
|
|
265
258
|
* @returns
|
|
266
259
|
*/
|
|
267
|
-
public subscribeTo(action: string, value?: JsonValue): number {
|
|
260
|
+
public async subscribeTo(action: string, value?: JsonValue): Promise<number> {
|
|
268
261
|
const json = new JsonBuilder()
|
|
269
262
|
json.add('action', action)
|
|
270
263
|
if (!_.isUndefined(value)) {
|
|
@@ -278,12 +271,12 @@ export class AccountStreamer {
|
|
|
278
271
|
* @param userExternalId "external-id" from login response
|
|
279
272
|
* @returns Promise that resolves when ack is received
|
|
280
273
|
*/
|
|
281
|
-
public subscribeToUser(userExternalId: string) {
|
|
274
|
+
public async subscribeToUser(userExternalId: string): Promise<number> {
|
|
282
275
|
if (!userExternalId) {
|
|
283
|
-
return
|
|
276
|
+
return Promise.reject(`Must provide user external id. You provided: ${userExternalId}`)
|
|
284
277
|
}
|
|
285
278
|
|
|
286
|
-
this.subscribeTo(MessageAction.USER_MESSAGE_SUBSCRIBE, userExternalId)
|
|
279
|
+
return this.subscribeTo(MessageAction.USER_MESSAGE_SUBSCRIBE, userExternalId)
|
|
287
280
|
}
|
|
288
281
|
|
|
289
282
|
/**
|
|
@@ -298,7 +291,7 @@ export class AccountStreamer {
|
|
|
298
291
|
|
|
299
292
|
const value: JsonValue =
|
|
300
293
|
accountNumbers.length > 1 ? accountNumbers : accountNumbers[0]
|
|
301
|
-
const requestId = this.subscribeTo(MessageAction.CONNECT, value)
|
|
294
|
+
const requestId = await this.subscribeTo(MessageAction.CONNECT, value)
|
|
302
295
|
|
|
303
296
|
return new Promise<string>((resolve, reject) => {
|
|
304
297
|
this.requestPromises.set(requestId, [resolve, reject])
|
|
@@ -40,7 +40,7 @@ export default class InstrumentsService {
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
//Returns a set of equity options given one or more symbols
|
|
43
|
-
const queryParams = { symbols, active, withExpired }
|
|
43
|
+
const queryParams = { symbol: symbols, active, withExpired }
|
|
44
44
|
const equityOptions = (await this.httpClient.getData(`/instruments/equity-options`, {}, queryParams))
|
|
45
45
|
return extractResponseData(equityOptions)
|
|
46
46
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import TastytradeSession from "../models/tastytrade-session.js"
|
|
2
1
|
import AccessToken from "../models/access-token.js"
|
|
3
2
|
import axios from "axios"
|
|
4
3
|
import qs from 'qs'
|
|
@@ -18,18 +17,19 @@ const ApiVersionRegex = /^\d{8}$/
|
|
|
18
17
|
export default class TastytradeHttpClient {
|
|
19
18
|
private readonly logger?: Logger
|
|
20
19
|
public baseUrl: string
|
|
21
|
-
public clientSecret
|
|
22
|
-
public refreshToken
|
|
23
|
-
public oauthScopes
|
|
20
|
+
public clientSecret: string
|
|
21
|
+
public refreshToken: string
|
|
22
|
+
public oauthScopes: string[]
|
|
24
23
|
public readonly accessToken: AccessToken
|
|
25
|
-
public readonly session: TastytradeSession
|
|
26
24
|
private _targetApiVersion?: string
|
|
27
25
|
|
|
28
|
-
constructor(clientConfig:
|
|
26
|
+
constructor(clientConfig: ClientConfig, logger?: Logger) {
|
|
29
27
|
this.logger = logger
|
|
30
28
|
this.baseUrl = clientConfig.baseUrl!
|
|
31
29
|
this.accessToken = new AccessToken()
|
|
32
|
-
this.
|
|
30
|
+
this.clientSecret = clientConfig.clientSecret
|
|
31
|
+
this.refreshToken = clientConfig.refreshToken
|
|
32
|
+
this.oauthScopes = clientConfig.oauthScopes
|
|
33
33
|
this.updateConfig(clientConfig)
|
|
34
34
|
}
|
|
35
35
|
|
|
@@ -42,19 +42,10 @@ export default class TastytradeHttpClient {
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
get needsTokenRefresh(): boolean {
|
|
45
|
-
if (this.session.isValid) {
|
|
46
|
-
return false
|
|
47
|
-
}
|
|
48
|
-
if (_.isNil(this.refreshToken) || _.isNil(this.clientSecret)) {
|
|
49
|
-
return false
|
|
50
|
-
}
|
|
51
45
|
return this.accessToken.isExpired
|
|
52
46
|
}
|
|
53
47
|
|
|
54
48
|
get authHeader(): string | null {
|
|
55
|
-
if (this.session.isValid) {
|
|
56
|
-
return this.session.authToken
|
|
57
|
-
}
|
|
58
49
|
if (this.accessToken.isValid) {
|
|
59
50
|
return this.accessToken.authorizationHeader
|
|
60
51
|
}
|
package/lib/tastytrade-api.ts
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import TastytradeHttpClient from "./services/tastytrade-http-client.js"
|
|
2
2
|
import { AccountStreamer, STREAMER_STATE, type Disposer, type StreamerStateObserver } from './account-streamer.js'
|
|
3
|
-
import _ from 'lodash'
|
|
4
3
|
|
|
5
4
|
//Services:
|
|
6
|
-
import SessionService from "./services/session-service.js"
|
|
7
5
|
import AccountStatusService from "./services/account-status-service.js"
|
|
8
6
|
import AccountsAndCustomersService from "./services/accounts-and-customers-service.js"
|
|
9
7
|
import BalancesAndPositionsService from "./services/balances-and-positions-service.js"
|
|
@@ -16,7 +14,6 @@ import RiskParametersService from "./services/risk-parameters-service.js"
|
|
|
16
14
|
import SymbolSearchService from "./services/symbol-search-service.js"
|
|
17
15
|
import TransactionsService from "./services/transactions-service.js"
|
|
18
16
|
import WatchlistsService from "./services/watchlists-service.js"
|
|
19
|
-
import TastytradeSession from "./models/tastytrade-session.js"
|
|
20
17
|
import type Logger from "./logger.js"
|
|
21
18
|
import { TastytradeLogger, LogLevel } from "./logger.js"
|
|
22
19
|
import QuoteStreamer, { MarketDataSubscriptionType, CandleType } from "./quote-streamer.js"
|
|
@@ -25,20 +22,20 @@ import type AccessToken from "./models/access-token.js"
|
|
|
25
22
|
export type ClientConfig = {
|
|
26
23
|
baseUrl: string,
|
|
27
24
|
accountStreamerUrl: string,
|
|
28
|
-
clientSecret
|
|
29
|
-
refreshToken
|
|
30
|
-
oauthScopes
|
|
25
|
+
clientSecret: string,
|
|
26
|
+
refreshToken: string,
|
|
27
|
+
oauthScopes: string[],
|
|
31
28
|
logger?: Logger,
|
|
32
29
|
logLevel?: LogLevel
|
|
33
30
|
targetApiVersion?: string
|
|
34
31
|
}
|
|
35
32
|
|
|
36
33
|
export default class TastytradeClient {
|
|
37
|
-
public static readonly ProdConfig: ClientConfig = {
|
|
34
|
+
public static readonly ProdConfig: Partial<ClientConfig> = {
|
|
38
35
|
baseUrl: 'https://api.tastyworks.com',
|
|
39
36
|
accountStreamerUrl: 'wss://streamer.tastyworks.com',
|
|
40
37
|
}
|
|
41
|
-
public static readonly SandboxConfig: ClientConfig = {
|
|
38
|
+
public static readonly SandboxConfig: Partial<ClientConfig> = {
|
|
42
39
|
baseUrl: 'https://api.cert.tastyworks.com',
|
|
43
40
|
accountStreamerUrl: 'wss://streamer.cert.tastyworks.com',
|
|
44
41
|
}
|
|
@@ -48,7 +45,6 @@ export default class TastytradeClient {
|
|
|
48
45
|
public readonly accountStreamer: AccountStreamer
|
|
49
46
|
public readonly quoteStreamer: QuoteStreamer
|
|
50
47
|
|
|
51
|
-
public readonly sessionService: SessionService
|
|
52
48
|
public readonly accountStatusService: AccountStatusService
|
|
53
49
|
public readonly accountsAndCustomersService: AccountsAndCustomersService
|
|
54
50
|
public readonly balancesAndPositionsService: BalancesAndPositionsService
|
|
@@ -66,7 +62,6 @@ export default class TastytradeClient {
|
|
|
66
62
|
this.logger = new TastytradeLogger(config.logger, config.logLevel)
|
|
67
63
|
this.httpClient = new TastytradeHttpClient(config, this.logger)
|
|
68
64
|
|
|
69
|
-
this.sessionService = new SessionService(this.httpClient)
|
|
70
65
|
this.accountStatusService = new AccountStatusService(this.httpClient)
|
|
71
66
|
this.accountsAndCustomersService = new AccountsAndCustomersService(this.httpClient)
|
|
72
67
|
this.balancesAndPositionsService = new BalancesAndPositionsService(this.httpClient)
|
|
@@ -81,7 +76,7 @@ export default class TastytradeClient {
|
|
|
81
76
|
this.watchlistsService = new WatchlistsService(this.httpClient)
|
|
82
77
|
|
|
83
78
|
|
|
84
|
-
this.accountStreamer = new AccountStreamer(config.accountStreamerUrl, this.
|
|
79
|
+
this.accountStreamer = new AccountStreamer(config.accountStreamerUrl, this.httpClient, this.logger)
|
|
85
80
|
this.quoteStreamer = new QuoteStreamer(this.accountsAndCustomersService, this.logger)
|
|
86
81
|
}
|
|
87
82
|
|
|
@@ -90,10 +85,6 @@ export default class TastytradeClient {
|
|
|
90
85
|
this.logger.updateConfig(config)
|
|
91
86
|
}
|
|
92
87
|
|
|
93
|
-
get session(): TastytradeSession {
|
|
94
|
-
return this.httpClient.session
|
|
95
|
-
}
|
|
96
|
-
|
|
97
88
|
get accessToken(): AccessToken {
|
|
98
89
|
return this.httpClient.accessToken
|
|
99
90
|
}
|
package/package.json
CHANGED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import extractResponseData from "../utils/response-util.js";
|
|
2
|
-
import TastytradeHttpClient from "./tastytrade-http-client.js";
|
|
3
|
-
|
|
4
|
-
export default class SessionService {
|
|
5
|
-
constructor(public httpClient: TastytradeHttpClient) {
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
private get clientId(): string {
|
|
9
|
-
return '9953f07a-5de4-408c-a8ab-688a6320f00f'
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
private get clientSecret(): string {
|
|
13
|
-
return 'baa245033420a05d013541c0c6ef4f98bb16a1ec'
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
private get refreshToken(): string {
|
|
17
|
-
return 'eyJhbGciOiJFZERTQSIsInR5cCI6InJ0K2p3dCIsImtpZCI6IkZqVTdUT25qVEQ2WnVySlg2cVlwWmVPbzBDQzQ5TnIzR1pUN1E4MTc0cUkiLCJqa3UiOiJodHRwczovL2ludGVyaW9yLWFwaS5hcjIudGFzdHl0cmFkZS5zeXN0ZW1zL29hdXRoL2p3a3MifQ.eyJpc3MiOiJodHRwczovL2FwaS50YXN0eXRyYWRlLmNvbSIsInN1YiI6IlUwMDAwMDM3MTg0IiwiaWF0IjoxNzU4MjQzNjY0LCJhdWQiOiI5OTUzZjA3YS01ZGU0LTQwOGMtYThhYi02ODhhNjMyMGYwMGYiLCJncmFudF9pZCI6Ikc0ZTc4MjFkYy03NTQyLTQ0NTQtODBkMy1iYjU3NGEwMGRkYWMiLCJzY29wZSI6InJlYWQgdHJhZGUifQ.ZsP51rUGQIXsP-cU0OCa-45AwwMp18YxOrT_mrrocClhRL7bfWctX8GOJ35Nn_E48WOuQPxUF3KMhSn1tkqLBQ'
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
// Sessions: Allows an API client to interact with their session, or create a new one.
|
|
21
|
-
async login(usernameOrEmail: string, password: string, rememberMe = false) {
|
|
22
|
-
// Create a new user session.
|
|
23
|
-
const params = { login: usernameOrEmail, password, rememberMe }
|
|
24
|
-
const sessionResponse = await this.httpClient.postData('/sessions', params, {})
|
|
25
|
-
const sessionData = extractResponseData(sessionResponse)
|
|
26
|
-
this.httpClient.session.authToken = sessionData["session-token"]
|
|
27
|
-
return sessionData
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
async loginWithRememberToken(usernameOrEmail: string, rememberToken: string, rememberMe = false){
|
|
31
|
-
// Creates a session using the remember token.
|
|
32
|
-
const params = { login: usernameOrEmail, rememberToken, rememberMe }
|
|
33
|
-
const sessionData = extractResponseData(await this.httpClient.postData('/sessions', params, {}))
|
|
34
|
-
this.httpClient.session.authToken = sessionData["session-token"]
|
|
35
|
-
return sessionData
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
async validate() {
|
|
39
|
-
const response = await this.httpClient.postData('/sessions/validate', {}, {});
|
|
40
|
-
return extractResponseData(response);
|
|
41
|
-
}
|
|
42
|
-
async logout(){
|
|
43
|
-
const response = await this.httpClient.deleteData('/sessions', {});// added this for the integration tests?
|
|
44
|
-
this.httpClient.session.clear()
|
|
45
|
-
return { status: response.status };
|
|
46
|
-
}
|
|
47
|
-
}
|