@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.
- package/.vscode/launch.json +29 -0
- package/CHANGELOG.md +41 -0
- package/CODEOWNERS +1 -0
- package/README.md +64 -31
- package/dist/account-streamer.d.ts +10 -8
- package/dist/account-streamer.d.ts.map +1 -0
- package/dist/account-streamer.js +147 -229
- package/dist/account-streamer.js.map +1 -0
- 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/market-data-streamer.d.ts +7 -5
- package/dist/market-data-streamer.d.ts.map +1 -0
- package/dist/market-data-streamer.js +139 -172
- package/dist/market-data-streamer.js.map +1 -0
- package/dist/models/tastytrade-session.d.ts +1 -0
- package/dist/models/tastytrade-session.d.ts.map +1 -0
- package/dist/models/tastytrade-session.js +10 -20
- package/dist/models/tastytrade-session.js.map +1 -0
- package/dist/services/account-status-service.d.ts +2 -1
- package/dist/services/account-status-service.d.ts.map +1 -0
- package/dist/services/account-status-service.js +11 -60
- package/dist/services/account-status-service.js.map +1 -0
- package/dist/services/accounts-and-customers-service.d.ts +2 -1
- package/dist/services/accounts-and-customers-service.d.ts.map +1 -0
- package/dist/services/accounts-and-customers-service.js +29 -112
- package/dist/services/accounts-and-customers-service.js.map +1 -0
- package/dist/services/balances-and-positions-service.d.ts +2 -1
- package/dist/services/balances-and-positions-service.d.ts.map +1 -0
- package/dist/services/balances-and-positions-service.js +22 -88
- package/dist/services/balances-and-positions-service.js.map +1 -0
- package/dist/services/instruments-service.d.ts +2 -1
- package/dist/services/instruments-service.d.ts.map +1 -0
- package/dist/services/instruments-service.js +130 -365
- package/dist/services/instruments-service.js.map +1 -0
- package/dist/services/margin-requirements-service.d.ts +2 -1
- package/dist/services/margin-requirements-service.d.ts.map +1 -0
- package/dist/services/margin-requirements-service.js +16 -73
- package/dist/services/margin-requirements-service.js.map +1 -0
- package/dist/services/market-metrics-service.d.ts +2 -1
- package/dist/services/market-metrics-service.d.ts.map +1 -0
- package/dist/services/market-metrics-service.js +21 -88
- package/dist/services/market-metrics-service.js.map +1 -0
- package/dist/services/net-liquidating-value-history-service.d.ts +2 -1
- package/dist/services/net-liquidating-value-history-service.d.ts.map +1 -0
- package/dist/services/net-liquidating-value-history-service.js +16 -74
- package/dist/services/net-liquidating-value-history-service.js.map +1 -0
- package/dist/services/orders-service.d.ts +2 -1
- package/dist/services/orders-service.d.ts.map +1 -0
- package/dist/services/orders-service.js +76 -231
- package/dist/services/orders-service.js.map +1 -0
- package/dist/services/risk-parameters-service.d.ts +2 -1
- package/dist/services/risk-parameters-service.d.ts.map +1 -0
- package/dist/services/risk-parameters-service.js +16 -73
- package/dist/services/risk-parameters-service.js.map +1 -0
- package/dist/services/session-service.d.ts +2 -1
- package/dist/services/session-service.d.ts.map +1 -0
- package/dist/services/session-service.js +30 -110
- package/dist/services/session-service.js.map +1 -0
- package/dist/services/symbol-search-service.d.ts +2 -1
- package/dist/services/symbol-search-service.d.ts.map +1 -0
- package/dist/services/symbol-search-service.js +11 -60
- package/dist/services/symbol-search-service.js.map +1 -0
- package/dist/services/tastytrade-http-client.d.ts +5 -3
- package/dist/services/tastytrade-http-client.d.ts.map +1 -0
- package/dist/services/tastytrade-http-client.js +53 -134
- package/dist/services/tastytrade-http-client.js.map +1 -0
- package/dist/services/transactions-service.d.ts +2 -1
- package/dist/services/transactions-service.d.ts.map +1 -0
- package/dist/services/transactions-service.js +22 -87
- package/dist/services/transactions-service.js.map +1 -0
- package/dist/services/watchlists-service.d.ts +2 -1
- package/dist/services/watchlists-service.d.ts.map +1 -0
- package/dist/services/watchlists-service.js +51 -165
- package/dist/services/watchlists-service.js.map +1 -0
- package/dist/tastytrade-api.d.ts +32 -22
- package/dist/tastytrade-api.d.ts.map +1 -0
- package/dist/tastytrade-api.js +44 -79
- package/dist/tastytrade-api.js.map +1 -0
- package/dist/utils/constants.d.ts +1 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +2 -4
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/json-util.d.ts +4 -3
- package/dist/utils/json-util.d.ts.map +1 -0
- package/dist/utils/json-util.js +14 -25
- package/dist/utils/json-util.js.map +1 -0
- package/dist/utils/response-util.d.ts +1 -0
- package/dist/utils/response-util.d.ts.map +1 -0
- package/dist/utils/response-util.js +7 -12
- package/dist/utils/response-util.js.map +1 -0
- package/lib/account-streamer.ts +19 -12
- package/lib/logger.ts +48 -0
- package/lib/market-data-streamer.ts +5 -1
- package/lib/services/account-status-service.ts +2 -2
- package/lib/services/accounts-and-customers-service.ts +2 -2
- package/lib/services/balances-and-positions-service.ts +2 -2
- package/lib/services/instruments-service.ts +2 -2
- package/lib/services/margin-requirements-service.ts +2 -2
- package/lib/services/market-metrics-service.ts +2 -2
- package/lib/services/net-liquidating-value-history-service.ts +2 -2
- package/lib/services/orders-service.ts +2 -2
- package/lib/services/risk-parameters-service.ts +2 -2
- package/lib/services/session-service.ts +2 -2
- package/lib/services/symbol-search-service.ts +2 -2
- package/lib/services/tastytrade-http-client.ts +21 -16
- package/lib/services/transactions-service.ts +2 -2
- package/lib/services/watchlists-service.ts +2 -2
- package/lib/tastytrade-api.ts +35 -22
- package/package.json +14 -9
- package/tsconfig.json +12 -11
package/dist/account-streamer.js
CHANGED
|
@@ -1,55 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
-
function step(op) {
|
|
16
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
-
while (_) try {
|
|
18
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
-
switch (op[0]) {
|
|
21
|
-
case 0: case 1: t = op; break;
|
|
22
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
-
default:
|
|
26
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
-
if (t[2]) _.ops.pop();
|
|
31
|
-
_.trys.pop(); continue;
|
|
32
|
-
}
|
|
33
|
-
op = body.call(thisArg, _);
|
|
34
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
-
};
|
|
41
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
-
exports.AccountStreamer = exports.STREAMER_STATE = void 0;
|
|
43
|
-
var isomorphic_ws_1 = __importDefault(require("isomorphic-ws"));
|
|
44
|
-
var lodash_1 = __importDefault(require("lodash"));
|
|
45
|
-
var json_util_1 = require("./utils/json-util");
|
|
46
|
-
var constants_1 = require("./utils/constants");
|
|
47
|
-
var STREAMER_STATE;
|
|
1
|
+
import WebSocket from 'isomorphic-ws';
|
|
2
|
+
import _ from 'lodash';
|
|
3
|
+
import { JsonBuilder } from './utils/json-util.js';
|
|
4
|
+
import TastytradeSession from './models/tastytrade-session.js';
|
|
5
|
+
import { MinTlsVersion } from './utils/constants.js';
|
|
6
|
+
export var STREAMER_STATE;
|
|
48
7
|
(function (STREAMER_STATE) {
|
|
49
8
|
STREAMER_STATE[STREAMER_STATE["Open"] = 0] = "Open";
|
|
50
9
|
STREAMER_STATE[STREAMER_STATE["Closed"] = 1] = "Closed";
|
|
51
10
|
STREAMER_STATE[STREAMER_STATE["Error"] = 2] = "Error";
|
|
52
|
-
})(STREAMER_STATE
|
|
11
|
+
})(STREAMER_STATE || (STREAMER_STATE = {}));
|
|
53
12
|
var MessageAction;
|
|
54
13
|
(function (MessageAction) {
|
|
55
14
|
MessageAction["ACCOUNT_SUBSCRIBE"] = "account-subscribe";
|
|
@@ -59,23 +18,22 @@ var MessageAction;
|
|
|
59
18
|
MessageAction["QUOTE_ALERTS_SUBSCRIBE"] = "quote-alerts-subscribe";
|
|
60
19
|
MessageAction["USER_MESSAGE_SUBSCRIBE"] = "user-message-subscribe";
|
|
61
20
|
})(MessageAction || (MessageAction = {}));
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
21
|
+
const HEARTBEAT_INTERVAL = 20000; // 20 seconds
|
|
22
|
+
const SOURCE = 'tastytrade-api-js-sdk';
|
|
23
|
+
const REQUEST_ID = 'request-id';
|
|
65
24
|
function removeElement(array, element) {
|
|
66
|
-
|
|
25
|
+
const index = array.indexOf(element);
|
|
67
26
|
if (index < 0) {
|
|
68
27
|
return;
|
|
69
28
|
}
|
|
70
29
|
array.splice(index, 1);
|
|
71
30
|
}
|
|
72
|
-
|
|
31
|
+
export class AccountStreamer {
|
|
73
32
|
/**
|
|
74
33
|
*
|
|
75
34
|
* @param url Url of the account streamer service
|
|
76
35
|
*/
|
|
77
|
-
|
|
78
|
-
var _this = this;
|
|
36
|
+
constructor(url, session, logger) {
|
|
79
37
|
this.url = url;
|
|
80
38
|
this.session = session;
|
|
81
39
|
this.websocket = null;
|
|
@@ -91,71 +49,69 @@ var AccountStreamer = /** @class */ (function () {
|
|
|
91
49
|
this.streamerMessageObservers = [];
|
|
92
50
|
this.startPromise = null;
|
|
93
51
|
this.requestPromises = new Map();
|
|
94
|
-
this.
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
_this.send(new json_util_1.JsonBuilder({ action: MessageAction.HEARTBEAT }));
|
|
52
|
+
this.sendHeartbeat = () => {
|
|
53
|
+
this.clearHeartbeatTimerId();
|
|
54
|
+
this.send(new JsonBuilder({ action: MessageAction.HEARTBEAT }));
|
|
98
55
|
};
|
|
99
|
-
this.handleOpen =
|
|
100
|
-
if (
|
|
56
|
+
this.handleOpen = (_event) => {
|
|
57
|
+
if (this.startResolve === null) {
|
|
101
58
|
return;
|
|
102
59
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
60
|
+
this.logger.info('AccountStreamer opened');
|
|
61
|
+
this.startResolve(true);
|
|
62
|
+
this.startResolve = this.startReject = null;
|
|
63
|
+
this.streamerState = STREAMER_STATE.Open;
|
|
64
|
+
this.sendQueuedMessages();
|
|
65
|
+
this.scheduleHeartbeatTimer();
|
|
109
66
|
};
|
|
110
|
-
this.handleClose =
|
|
111
|
-
|
|
112
|
-
if (
|
|
67
|
+
this.handleClose = (event) => {
|
|
68
|
+
this.logger.info('AccountStreamer closed');
|
|
69
|
+
if (this.websocket === null) {
|
|
113
70
|
return;
|
|
114
71
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
72
|
+
this.lastCloseEvent = event;
|
|
73
|
+
this.streamerState = STREAMER_STATE.Closed;
|
|
74
|
+
this.teardown();
|
|
118
75
|
};
|
|
119
|
-
this.handleError =
|
|
120
|
-
if (
|
|
76
|
+
this.handleError = (event) => {
|
|
77
|
+
if (this.websocket === null) {
|
|
121
78
|
return;
|
|
122
79
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
if (
|
|
127
|
-
|
|
128
|
-
|
|
80
|
+
this.logger.error('AccountStreamer error', event);
|
|
81
|
+
this.lastErrorEvent = event;
|
|
82
|
+
this.streamerState = STREAMER_STATE.Error;
|
|
83
|
+
if (this.startReject !== null) {
|
|
84
|
+
this.startReject(new Error('Failed to connect'));
|
|
85
|
+
this.startReject = this.startResolve = null;
|
|
129
86
|
}
|
|
130
|
-
|
|
87
|
+
this.teardown();
|
|
131
88
|
};
|
|
132
|
-
this.handleMessage =
|
|
133
|
-
|
|
89
|
+
this.handleMessage = (event) => {
|
|
90
|
+
const json = JSON.parse(event.data);
|
|
134
91
|
if (json.results !== undefined) {
|
|
135
|
-
|
|
136
|
-
for (
|
|
137
|
-
|
|
138
|
-
_this.handleOneMessage(result);
|
|
92
|
+
const results = json.results;
|
|
93
|
+
for (const result of results) {
|
|
94
|
+
this.handleOneMessage(result);
|
|
139
95
|
}
|
|
140
96
|
}
|
|
141
97
|
else {
|
|
142
|
-
|
|
98
|
+
this.handleOneMessage(json);
|
|
143
99
|
}
|
|
144
100
|
};
|
|
145
|
-
this.handleOneMessage =
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
101
|
+
this.handleOneMessage = (json) => {
|
|
102
|
+
this.logger.info('Message received: ', json);
|
|
103
|
+
const action = json.action;
|
|
104
|
+
this.streamerMessageObservers.forEach(observer => observer(json));
|
|
149
105
|
if (action) {
|
|
150
106
|
if (action === MessageAction.HEARTBEAT) {
|
|
151
107
|
// schedule next heartbeat
|
|
152
|
-
|
|
108
|
+
this.scheduleHeartbeatTimer();
|
|
153
109
|
}
|
|
154
|
-
|
|
110
|
+
const promiseCallbacks = this.requestPromises.get(json[REQUEST_ID]);
|
|
155
111
|
if (promiseCallbacks) {
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
if (
|
|
112
|
+
const [resolve, reject] = promiseCallbacks;
|
|
113
|
+
const status = json.status;
|
|
114
|
+
if (status === 'ok') {
|
|
159
115
|
resolve(json.action);
|
|
160
116
|
}
|
|
161
117
|
else {
|
|
@@ -165,97 +121,71 @@ var AccountStreamer = /** @class */ (function () {
|
|
|
165
121
|
return;
|
|
166
122
|
}
|
|
167
123
|
};
|
|
124
|
+
this.logger = logger;
|
|
125
|
+
}
|
|
126
|
+
get streamerState() {
|
|
127
|
+
return this._streamerState;
|
|
128
|
+
}
|
|
129
|
+
set streamerState(streamerState) {
|
|
130
|
+
this._streamerState = streamerState;
|
|
131
|
+
this.streamerStateObservers.forEach(observer => {
|
|
132
|
+
observer(streamerState);
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
get authToken() {
|
|
136
|
+
return this.session.authToken;
|
|
168
137
|
}
|
|
169
|
-
Object.defineProperty(AccountStreamer.prototype, "streamerState", {
|
|
170
|
-
get: function () {
|
|
171
|
-
return this._streamerState;
|
|
172
|
-
},
|
|
173
|
-
set: function (streamerState) {
|
|
174
|
-
this._streamerState = streamerState;
|
|
175
|
-
this.streamerStateObservers.forEach(function (observer) {
|
|
176
|
-
observer(streamerState);
|
|
177
|
-
});
|
|
178
|
-
},
|
|
179
|
-
enumerable: false,
|
|
180
|
-
configurable: true
|
|
181
|
-
});
|
|
182
|
-
Object.defineProperty(AccountStreamer.prototype, "authToken", {
|
|
183
|
-
get: function () {
|
|
184
|
-
return this.session.authToken;
|
|
185
|
-
},
|
|
186
|
-
enumerable: false,
|
|
187
|
-
configurable: true
|
|
188
|
-
});
|
|
189
138
|
/**
|
|
190
139
|
* Adds a custom callback that fires when the streamer state changes
|
|
191
140
|
* @param observer
|
|
192
141
|
* @returns
|
|
193
142
|
*/
|
|
194
|
-
|
|
195
|
-
var _this = this;
|
|
143
|
+
addStreamerStateObserver(observer) {
|
|
196
144
|
this.streamerStateObservers.push(observer);
|
|
197
|
-
return
|
|
198
|
-
removeElement(
|
|
145
|
+
return () => {
|
|
146
|
+
removeElement(this.streamerStateObservers, observer);
|
|
199
147
|
};
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
return this.streamerState === STREAMER_STATE.Closed;
|
|
211
|
-
},
|
|
212
|
-
enumerable: false,
|
|
213
|
-
configurable: true
|
|
214
|
-
});
|
|
215
|
-
Object.defineProperty(AccountStreamer.prototype, "isError", {
|
|
216
|
-
get: function () {
|
|
217
|
-
return this.streamerState === STREAMER_STATE.Error;
|
|
218
|
-
},
|
|
219
|
-
enumerable: false,
|
|
220
|
-
configurable: true
|
|
221
|
-
});
|
|
148
|
+
}
|
|
149
|
+
get isOpen() {
|
|
150
|
+
return this.streamerState === STREAMER_STATE.Open;
|
|
151
|
+
}
|
|
152
|
+
get isClosed() {
|
|
153
|
+
return this.streamerState === STREAMER_STATE.Closed;
|
|
154
|
+
}
|
|
155
|
+
get isError() {
|
|
156
|
+
return this.streamerState === STREAMER_STATE.Error;
|
|
157
|
+
}
|
|
222
158
|
/**
|
|
223
159
|
* Entrypoint for beginning a websocket session
|
|
224
160
|
* You must have a valid tastytrade authToken before calling this method
|
|
225
161
|
* @returns Promise that resolves when the "opened" message is received (see handleOpen)
|
|
226
162
|
*/
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
return [2 /*return*/, this.startPromise];
|
|
234
|
-
}
|
|
235
|
-
this.websocket = new isomorphic_ws_1.default(this.url, [], {
|
|
236
|
-
minVersion: constants_1.MinTlsVersion // TLS Config
|
|
237
|
-
});
|
|
238
|
-
websocket = this.websocket;
|
|
239
|
-
this.lastCloseEvent = null;
|
|
240
|
-
this.lastErrorEvent = null;
|
|
241
|
-
websocket.addEventListener('open', this.handleOpen);
|
|
242
|
-
websocket.addEventListener('close', this.handleClose);
|
|
243
|
-
websocket.addEventListener('error', this.handleError);
|
|
244
|
-
websocket.addEventListener('message', this.handleMessage);
|
|
245
|
-
this.logger.info('AccountStreamer - starting');
|
|
246
|
-
this.startPromise = new Promise(function (resolve, reject) {
|
|
247
|
-
_this.startResolve = resolve;
|
|
248
|
-
_this.startReject = reject;
|
|
249
|
-
});
|
|
250
|
-
return [2 /*return*/, this.startPromise];
|
|
251
|
-
});
|
|
163
|
+
async start() {
|
|
164
|
+
if (this.startPromise !== null) {
|
|
165
|
+
return this.startPromise;
|
|
166
|
+
}
|
|
167
|
+
this.websocket = new WebSocket(this.url, [], {
|
|
168
|
+
minVersion: MinTlsVersion // TLS Config
|
|
252
169
|
});
|
|
253
|
-
|
|
254
|
-
|
|
170
|
+
const websocket = this.websocket;
|
|
171
|
+
this.lastCloseEvent = null;
|
|
172
|
+
this.lastErrorEvent = null;
|
|
173
|
+
websocket.addEventListener('open', this.handleOpen);
|
|
174
|
+
websocket.addEventListener('close', this.handleClose);
|
|
175
|
+
websocket.addEventListener('error', this.handleError);
|
|
176
|
+
websocket.addEventListener('message', this.handleMessage);
|
|
177
|
+
this.logger.info('AccountStreamer - starting');
|
|
178
|
+
this.startPromise = new Promise((resolve, reject) => {
|
|
179
|
+
this.startResolve = resolve;
|
|
180
|
+
this.startReject = reject;
|
|
181
|
+
});
|
|
182
|
+
return this.startPromise;
|
|
183
|
+
}
|
|
184
|
+
stop() {
|
|
255
185
|
this.teardown();
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
|
|
186
|
+
}
|
|
187
|
+
teardown() {
|
|
188
|
+
const websocket = this.websocket;
|
|
259
189
|
if (websocket === null) {
|
|
260
190
|
return;
|
|
261
191
|
}
|
|
@@ -269,24 +199,20 @@ var AccountStreamer = /** @class */ (function () {
|
|
|
269
199
|
this.websocket = null;
|
|
270
200
|
this.logger.info('AccountStreamer - teardown');
|
|
271
201
|
this.streamerState = STREAMER_STATE.Closed; // Manually update status for convenience
|
|
272
|
-
}
|
|
273
|
-
|
|
202
|
+
}
|
|
203
|
+
scheduleHeartbeatTimer() {
|
|
274
204
|
if (this.isHeartbeatScheduled) {
|
|
275
205
|
// Heartbeat already scheduled
|
|
276
206
|
return;
|
|
277
207
|
}
|
|
278
208
|
this.logger.info('Scheduling heartbeat with interval: ', HEARTBEAT_INTERVAL);
|
|
279
|
-
|
|
209
|
+
const scheduler = typeof window === 'undefined' ? setTimeout : window.setTimeout;
|
|
280
210
|
this.heartbeatTimerId = scheduler(this.sendHeartbeat, HEARTBEAT_INTERVAL);
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
enumerable: false,
|
|
287
|
-
configurable: true
|
|
288
|
-
});
|
|
289
|
-
AccountStreamer.prototype.cancelHeartbeatTimer = function () {
|
|
211
|
+
}
|
|
212
|
+
get isHeartbeatScheduled() {
|
|
213
|
+
return !_.isNil(this.heartbeatTimerId);
|
|
214
|
+
}
|
|
215
|
+
cancelHeartbeatTimer() {
|
|
290
216
|
if (!this.isHeartbeatScheduled) {
|
|
291
217
|
return; // Nothing to cancel
|
|
292
218
|
}
|
|
@@ -297,103 +223,95 @@ var AccountStreamer = /** @class */ (function () {
|
|
|
297
223
|
clearTimeout(this.heartbeatTimerId);
|
|
298
224
|
}
|
|
299
225
|
this.clearHeartbeatTimerId();
|
|
300
|
-
}
|
|
301
|
-
|
|
226
|
+
}
|
|
227
|
+
clearHeartbeatTimerId() {
|
|
302
228
|
this.heartbeatTimerId = null;
|
|
303
|
-
}
|
|
229
|
+
}
|
|
304
230
|
/**
|
|
305
231
|
* Send a message via websocket
|
|
306
232
|
* @param json JsonBuilder
|
|
307
233
|
* @param includeSessionToken Attaches session token to message if true
|
|
308
234
|
* @returns
|
|
309
235
|
*/
|
|
310
|
-
|
|
311
|
-
if (includeSessionToken === void 0) { includeSessionToken = true; }
|
|
236
|
+
send(json, includeSessionToken = true) {
|
|
312
237
|
this.requestCounter += 1;
|
|
313
238
|
json.add(REQUEST_ID, this.requestCounter);
|
|
314
239
|
json.add('source', SOURCE);
|
|
315
240
|
if (includeSessionToken) {
|
|
316
|
-
|
|
241
|
+
const sessionToken = this.authToken;
|
|
317
242
|
if (!sessionToken) {
|
|
318
243
|
throw new Error('sessionToken not set');
|
|
319
244
|
}
|
|
320
245
|
json.add('auth-token', sessionToken);
|
|
321
246
|
}
|
|
322
|
-
|
|
323
|
-
|
|
247
|
+
const message = JSON.stringify(json.json);
|
|
248
|
+
const websocket = this.websocket;
|
|
324
249
|
if (websocket === null) {
|
|
325
250
|
// Queue up and send on open
|
|
326
251
|
this.queued.push(message);
|
|
327
252
|
}
|
|
328
253
|
else {
|
|
254
|
+
this.logger.info('Sending message: ', message);
|
|
329
255
|
websocket.send(message);
|
|
330
256
|
}
|
|
331
257
|
return this.requestCounter;
|
|
332
|
-
}
|
|
258
|
+
}
|
|
333
259
|
/**
|
|
334
260
|
* Used by other methods to send a specific `action` message
|
|
335
261
|
* @param action
|
|
336
262
|
* @param value
|
|
337
263
|
* @returns
|
|
338
264
|
*/
|
|
339
|
-
|
|
340
|
-
|
|
265
|
+
subscribeTo(action, value) {
|
|
266
|
+
const json = new JsonBuilder();
|
|
341
267
|
json.add('action', action);
|
|
342
|
-
if (!
|
|
268
|
+
if (!_.isUndefined(value)) {
|
|
343
269
|
json.add('value', value);
|
|
344
270
|
}
|
|
345
271
|
return this.send(json);
|
|
346
|
-
}
|
|
272
|
+
}
|
|
347
273
|
/**
|
|
348
274
|
* Subscribes to all user-level messages for given user external id
|
|
349
275
|
* @param userExternalId "external-id" from login response
|
|
350
276
|
* @returns Promise that resolves when ack is received
|
|
351
277
|
*/
|
|
352
|
-
|
|
278
|
+
subscribeToUser(userExternalId) {
|
|
353
279
|
if (!userExternalId) {
|
|
354
280
|
return;
|
|
355
281
|
}
|
|
356
282
|
this.subscribeTo(MessageAction.USER_MESSAGE_SUBSCRIBE, userExternalId);
|
|
357
|
-
}
|
|
283
|
+
}
|
|
358
284
|
/**
|
|
359
285
|
* Subscribes to all account-level messages for given account numbers
|
|
360
286
|
* @param accountNumbers List of account numbers to subscribe to
|
|
361
287
|
* @returns Promise that resolves when an ack is received
|
|
362
288
|
*/
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
value = accountNumbers.length > 1 ? accountNumbers : accountNumbers[0];
|
|
372
|
-
requestId = this.subscribeTo(MessageAction.CONNECT, value);
|
|
373
|
-
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
374
|
-
_this.requestPromises.set(requestId, [resolve, reject]);
|
|
375
|
-
})];
|
|
376
|
-
});
|
|
289
|
+
async subscribeToAccounts(accountNumbers) {
|
|
290
|
+
if (accountNumbers.length === 0) {
|
|
291
|
+
return Promise.reject('no account numbers');
|
|
292
|
+
}
|
|
293
|
+
const value = accountNumbers.length > 1 ? accountNumbers : accountNumbers[0];
|
|
294
|
+
const requestId = this.subscribeTo(MessageAction.CONNECT, value);
|
|
295
|
+
return new Promise((resolve, reject) => {
|
|
296
|
+
this.requestPromises.set(requestId, [resolve, reject]);
|
|
377
297
|
});
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
|
|
298
|
+
}
|
|
299
|
+
sendQueuedMessages() {
|
|
300
|
+
const queued = this.queued;
|
|
381
301
|
if (queued.length === 0 || this.websocket === null) {
|
|
382
302
|
return;
|
|
383
303
|
}
|
|
384
|
-
|
|
385
|
-
queued.forEach(
|
|
304
|
+
const websocket = this.websocket;
|
|
305
|
+
queued.forEach(msg => {
|
|
386
306
|
websocket.send(msg);
|
|
387
307
|
});
|
|
388
308
|
this.queued = [];
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
var _this = this;
|
|
309
|
+
}
|
|
310
|
+
addMessageObserver(observer) {
|
|
392
311
|
this.streamerMessageObservers.push(observer);
|
|
393
|
-
return
|
|
394
|
-
removeElement(
|
|
312
|
+
return () => {
|
|
313
|
+
removeElement(this.streamerMessageObservers, observer);
|
|
395
314
|
};
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
exports.AccountStreamer = AccountStreamer;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
//# sourceMappingURL=account-streamer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -20,15 +20,15 @@ export declare enum CandleType {
|
|
|
20
20
|
Volume = "v",
|
|
21
21
|
Price = "p"
|
|
22
22
|
}
|
|
23
|
-
export
|
|
24
|
-
export
|
|
25
|
-
export
|
|
26
|
-
export
|
|
23
|
+
export type MarketDataListener = (data: any) => void;
|
|
24
|
+
export type ErrorListener = (error: any) => void;
|
|
25
|
+
export type AuthStateListener = (isAuthorized: boolean) => void;
|
|
26
|
+
export type CandleSubscriptionOptions = {
|
|
27
27
|
period: number;
|
|
28
28
|
type: CandleType;
|
|
29
29
|
channelId: number;
|
|
30
30
|
};
|
|
31
|
-
|
|
31
|
+
type Remover = () => void;
|
|
32
32
|
export default class MarketDataStreamer {
|
|
33
33
|
private webSocket;
|
|
34
34
|
private token;
|
|
@@ -39,6 +39,7 @@ export default class MarketDataStreamer {
|
|
|
39
39
|
private authState;
|
|
40
40
|
private errorListeners;
|
|
41
41
|
private authStateListeners;
|
|
42
|
+
constructor();
|
|
42
43
|
addDataListener(dataListener: MarketDataListener, channelId?: number | null): Remover;
|
|
43
44
|
addErrorListener(errorListener: ErrorListener): Remover;
|
|
44
45
|
addAuthStateChangeListener(authStateListener: AuthStateListener): Remover;
|
|
@@ -93,3 +94,4 @@ export default class MarketDataStreamer {
|
|
|
93
94
|
private sendMessage;
|
|
94
95
|
}
|
|
95
96
|
export {};
|
|
97
|
+
//# sourceMappingURL=market-data-streamer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"market-data-streamer.d.ts","sourceRoot":"","sources":["../lib/market-data-streamer.ts"],"names":[],"mappings":"AAKA,oBAAY,0BAA0B;IACpC,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,UAAU,eAAe;CAC1B;AAED,oBAAY,UAAU;IACpB,IAAI,MAAM;IACV,MAAM,MAAM;IACZ,MAAM,MAAM;IACZ,IAAI,MAAM;IACV,GAAG,MAAM;IACT,IAAI,MAAM;IACV,KAAK,OAAO;IACZ,WAAW,MAAM;IACjB,IAAI,MAAM;IACV,MAAM,MAAM;IACZ,KAAK,MAAM;CACZ;AAED,MAAM,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAA;AACpD,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAA;AAChD,MAAM,MAAM,iBAAiB,GAAG,CAAC,YAAY,EAAE,OAAO,KAAK,IAAI,CAAA;AAI/D,MAAM,MAAM,yBAAyB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAA;AAC/F,KAAK,OAAO,GAAG,MAAM,IAAI,CAAA;AASzB,MAAM,CAAC,OAAO,OAAO,kBAAkB;IACrC,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,mBAAmB,CAAmB;IAC9C,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,YAAY,CAAY;IAChC,OAAO,CAAC,kBAAkB,CAA+C;IACzE,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,cAAc,CAAY;IAClC,OAAO,CAAC,kBAAkB,CAAY;;IAMtC,eAAe,CAAC,YAAY,EAAE,kBAAkB,EAAE,SAAS,GAAE,MAAM,GAAG,IAAW,GAAG,OAAO;IAU3F,gBAAgB,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO;IAUvD,0BAA0B,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,OAAO;IAUzE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAelC,UAAU;IAoBV,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO;;;KAA2E,GAAG,OAAO;IAiB5H;;;;;;;;OAQG;IACH,qBAAqB,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,yBAAyB;IAmBlG,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO;;;KAA2E;IAUrH,sBAAsB,CAAC,SAAS,SAAmB;IASnD,eAAe,CAAC,SAAS,EAAE,MAAM;IAmBjC,eAAe,CAAC,SAAS,EAAE,MAAM;IAIjC,IAAI,qBAAqB,YAExB;IAED,IAAI,WAAW,YAEd;IAED,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,uBAAuB;IAa/B;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IAS/B,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,MAAM;IAcd,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,cAAc;IAQtB,IAAI,kBAAkB,YAErB;IAED,OAAO,CAAC,sBAAsB;IAe9B,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,qBAAqB;IAgB7B,OAAO,CAAC,WAAW;CAOpB"}
|