@ariva-mds/mds 2.60.0 → 2.62.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.
|
@@ -16,9 +16,9 @@ class MdsConnection {
|
|
|
16
16
|
* construct an MdsConnection
|
|
17
17
|
*/
|
|
18
18
|
constructor(websocketUrl, authdataCallback, options = { debug: false }) {
|
|
19
|
+
this.waitingForReconnect = [];
|
|
19
20
|
this.state = new MdsConnectionState_1.MdsConnectionState();
|
|
20
21
|
this.waitingForAuthentification = [];
|
|
21
|
-
this.waitingForReconnect = [];
|
|
22
22
|
this.nextGeneratedRequestId = 0;
|
|
23
23
|
this.runningRequests = new Map();
|
|
24
24
|
this.isDebug = false;
|
|
@@ -33,7 +33,7 @@ class MdsConnection {
|
|
|
33
33
|
*/
|
|
34
34
|
this.sourceCache = undefined;
|
|
35
35
|
/**
|
|
36
|
-
* gets the
|
|
36
|
+
* gets the trading time for a source
|
|
37
37
|
* */
|
|
38
38
|
this.tradingtimeCache = undefined;
|
|
39
39
|
/**
|
|
@@ -54,7 +54,7 @@ class MdsConnection {
|
|
|
54
54
|
this.websocket = new reconnecting_websocket_1.default(websocketUrl, [], options.wsOptions);
|
|
55
55
|
const outer = this;
|
|
56
56
|
// open-handler -> resend open requests from previous connection
|
|
57
|
-
this.websocket.onopen =
|
|
57
|
+
this.websocket.onopen = () => {
|
|
58
58
|
outer.debug(`websocket open, resending ${outer.waitingForReconnect.length} items`);
|
|
59
59
|
outer.state.connectionOpened();
|
|
60
60
|
for (const request of outer.waitingForReconnect) {
|
|
@@ -62,7 +62,7 @@ class MdsConnection {
|
|
|
62
62
|
}
|
|
63
63
|
};
|
|
64
64
|
// close handler -> store open requests for resending on reconnect
|
|
65
|
-
this.websocket.onclose =
|
|
65
|
+
this.websocket.onclose = () => {
|
|
66
66
|
outer.debug(`websocket closed, queuing ${outer.waitingForReconnect.length} items`);
|
|
67
67
|
outer.state.connectionClosed();
|
|
68
68
|
outer.waitingForReconnect = Array.from(outer.runningRequests.values());
|
|
@@ -73,7 +73,7 @@ class MdsConnection {
|
|
|
73
73
|
this.stayAuthenticated();
|
|
74
74
|
this.reconnectTimer = setInterval(() => {
|
|
75
75
|
if (!outer.state.isTimedOut()) {
|
|
76
|
-
outer.debug(
|
|
76
|
+
outer.debug('websocket timed out, calling reconnect');
|
|
77
77
|
outer.state.forcedDisconnect();
|
|
78
78
|
outer.websocket.reconnect();
|
|
79
79
|
}
|
|
@@ -89,8 +89,7 @@ class MdsConnection {
|
|
|
89
89
|
* create a hearbeat observable that can be subscribed to
|
|
90
90
|
*/
|
|
91
91
|
heartbeat() {
|
|
92
|
-
return this.observable({ heartbeat: {} })
|
|
93
|
-
.pipe((0, rxjs_1.map)((x) => x.dataHeartbeat));
|
|
92
|
+
return this.observable({ heartbeat: {} }).pipe((0, rxjs_1.map)((x) => x.dataHeartbeat));
|
|
94
93
|
}
|
|
95
94
|
/**
|
|
96
95
|
* sets the priority for sources
|
|
@@ -171,8 +170,7 @@ class MdsConnection {
|
|
|
171
170
|
*/
|
|
172
171
|
marketstates(marketstateQueries, quality) {
|
|
173
172
|
const full = new Map();
|
|
174
|
-
return this.marketstateUpdates(marketstateQueries, quality)
|
|
175
|
-
.pipe((0, rxjs_1.map)((update) => {
|
|
173
|
+
return this.marketstateUpdates(marketstateQueries, quality).pipe((0, rxjs_1.map)((update) => {
|
|
176
174
|
let existingEntry = update.marketstateId ? full.get(update.marketstateId) : undefined;
|
|
177
175
|
if (update.marketstateId) {
|
|
178
176
|
if (existingEntry) {
|
|
@@ -190,18 +188,26 @@ class MdsConnection {
|
|
|
190
188
|
* create a Marketstate for a snapshot request
|
|
191
189
|
*/
|
|
192
190
|
marketstateSnapshot(marketstateQueries, quality) {
|
|
193
|
-
return this.observable({
|
|
194
|
-
|
|
191
|
+
return this.observable({
|
|
192
|
+
listMarketstates: {
|
|
193
|
+
marketstateQueries: marketstateQueries,
|
|
194
|
+
quality: quality
|
|
195
|
+
}
|
|
196
|
+
}).pipe((0, rxjs_1.map)((x) => (0, models_1.MarketstateResponseSearchFromJSON)(x.dataMarketstate)));
|
|
195
197
|
}
|
|
196
198
|
/**
|
|
197
|
-
* create a
|
|
199
|
+
* create a market state observable that can be subscribed to, contains only delta for every marketstate
|
|
198
200
|
*/
|
|
199
201
|
marketstateUpdates(marketstateQueries, quality) {
|
|
200
|
-
return this.observable({
|
|
201
|
-
|
|
202
|
+
return this.observable({
|
|
203
|
+
subscribeMarketstates: {
|
|
204
|
+
marketstateQueries: marketstateQueries,
|
|
205
|
+
quality: quality
|
|
206
|
+
}
|
|
207
|
+
}).pipe((0, rxjs_1.map)((x) => (0, models_1.MarketstateResponseSearchFromJSON)(x.dataMarketstate)));
|
|
202
208
|
}
|
|
203
209
|
/**
|
|
204
|
-
* create a
|
|
210
|
+
* create a market state observable that can be subscribed to, contains only full state for every marketstate
|
|
205
211
|
*/
|
|
206
212
|
marketstatesStates(marketstateQueries, quality) {
|
|
207
213
|
return this.marketstates(marketstateQueries, quality).pipe((0, rxjs_1.map)((x) => x.state));
|
|
@@ -243,8 +249,8 @@ class MdsConnection {
|
|
|
243
249
|
}).pipe((0, rxjs_1.map)(state => (0, models_1.TimeseriesDataFromJSON)(state.dataTimeseries)));
|
|
244
250
|
}
|
|
245
251
|
/**
|
|
246
|
-
|
|
247
|
-
|
|
252
|
+
* Returns the Orderbook for the specified Marketstate.
|
|
253
|
+
* */
|
|
248
254
|
marketdepth(marketstateId, quality, orderBookVariant) {
|
|
249
255
|
return this.observable({
|
|
250
256
|
subscribeMarketdepth: {
|
|
@@ -305,6 +311,45 @@ class MdsConnection {
|
|
|
305
311
|
return tickHistory;
|
|
306
312
|
}));
|
|
307
313
|
}
|
|
314
|
+
timeseriesBidAsk(marketstateId, resolution, start, end, quality) {
|
|
315
|
+
return this.observable({
|
|
316
|
+
subscribeTimeseriesBidAsk: {
|
|
317
|
+
resolution: resolution,
|
|
318
|
+
marketstateId: marketstateId,
|
|
319
|
+
start: start instanceof Date ? start?.toISOString() : start,
|
|
320
|
+
end: end instanceof Date ? end?.toISOString() : end,
|
|
321
|
+
quality: quality
|
|
322
|
+
}
|
|
323
|
+
}).pipe((0, rxjs_1.map)(state => (0, models_1.TimeseriesBidAskDataFromJSON)(state.dataTimeseriesBidAsk)));
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Returns the Open-High-Low-Close Timeseries for the specified Instrument on the Source.
|
|
327
|
+
* */
|
|
328
|
+
timeseriesBidAskSnapshot(marketstateId, resolution, start, end, quality) {
|
|
329
|
+
return this.observable({
|
|
330
|
+
listTimeseriesBidAsk: {
|
|
331
|
+
resolution: resolution,
|
|
332
|
+
marketstateId: marketstateId,
|
|
333
|
+
start: start instanceof Date ? start?.toISOString() : start,
|
|
334
|
+
end: end instanceof Date ? end?.toISOString() : end,
|
|
335
|
+
quality: quality
|
|
336
|
+
}
|
|
337
|
+
}).pipe((0, rxjs_1.map)(state => (0, models_1.TimeseriesBidAskDataFromJSON)(state.dataTimeseriesBidAsk)));
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Returns the Orderbook for the specified Marketstate.
|
|
341
|
+
* */
|
|
342
|
+
topflop(listId, sourcePriorities, quality, topSize, flopSize) {
|
|
343
|
+
return this.observable({
|
|
344
|
+
subscribeListTopflop: {
|
|
345
|
+
listId: listId,
|
|
346
|
+
sourcePriorities: sourcePriorities,
|
|
347
|
+
topSize: topSize,
|
|
348
|
+
flopSize: flopSize,
|
|
349
|
+
quality: quality
|
|
350
|
+
}
|
|
351
|
+
}).pipe((0, rxjs_1.map)(state => (0, models_1.TopflopListFromJSON)(state.dataTopflopList)));
|
|
352
|
+
}
|
|
308
353
|
// #############################################################################################
|
|
309
354
|
updateExistingMarketstateWithDeltaUpdate(existingEntry, update) {
|
|
310
355
|
const existingJson = (0, models_1.MarketstateResponseSearchToJSON)(existingEntry);
|
|
@@ -353,15 +398,20 @@ class MdsConnection {
|
|
|
353
398
|
outer.state.authenticationEnded();
|
|
354
399
|
subscriber.error(error);
|
|
355
400
|
});
|
|
356
|
-
}).pipe((0, rxjs_1.retry)({ delay: 2000 }), (0, rxjs_1.repeat)({ delay: 2000 }))
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
401
|
+
}).pipe((0, rxjs_1.retry)({ delay: 2000 }), (0, rxjs_1.repeat)({ delay: 2000 })).subscribe({
|
|
402
|
+
next(n) {
|
|
403
|
+
outer.debug(`auth outer ${JSON.stringify(n)}`);
|
|
404
|
+
},
|
|
405
|
+
error(e) {
|
|
406
|
+
outer.error(`auth error ${JSON.stringify(e)}`);
|
|
407
|
+
},
|
|
408
|
+
complete() {
|
|
409
|
+
outer.debug('auth completed');
|
|
410
|
+
}
|
|
361
411
|
});
|
|
362
412
|
}
|
|
363
413
|
generateNextRequestId() {
|
|
364
|
-
return
|
|
414
|
+
return 'request-' + this.nextGeneratedRequestId++;
|
|
365
415
|
}
|
|
366
416
|
observable(req) {
|
|
367
417
|
const requestId = this.generateNextRequestId();
|
|
@@ -394,7 +444,7 @@ class MdsConnection {
|
|
|
394
444
|
processWebsocketMessageEvent(e) {
|
|
395
445
|
if (e?.data) {
|
|
396
446
|
const msg = JSON.parse(e.data);
|
|
397
|
-
this.debug(
|
|
447
|
+
this.debug('we received ' + JSON.stringify(msg));
|
|
398
448
|
this.state.messageReceived();
|
|
399
449
|
if (msg.requestId) {
|
|
400
450
|
const request = this.runningRequests.get(msg.requestId);
|
|
@@ -402,16 +452,14 @@ class MdsConnection {
|
|
|
402
452
|
if (request.promiseResolve && request.promiseReject) {
|
|
403
453
|
if (msg.isError) {
|
|
404
454
|
request.promiseReject(msg.errorMessage);
|
|
405
|
-
this.runningRequests.delete(msg.requestId);
|
|
406
455
|
}
|
|
407
456
|
else if (msg.isComplete) {
|
|
408
457
|
request.promiseResolve(msg);
|
|
409
|
-
this.runningRequests.delete(msg.requestId);
|
|
410
458
|
}
|
|
411
459
|
else {
|
|
412
460
|
request.promiseReject(msg.errorMessage);
|
|
413
|
-
this.runningRequests.delete(msg.requestId);
|
|
414
461
|
}
|
|
462
|
+
this.runningRequests.delete(msg.requestId);
|
|
415
463
|
}
|
|
416
464
|
else if (request.observableSubscriber) {
|
|
417
465
|
if (msg.isError) {
|
|
@@ -3,16 +3,16 @@ import { MdsConnectionState } from './MdsConnectionState';
|
|
|
3
3
|
import { RunningRequest } from './RunningRequest';
|
|
4
4
|
import { Observable, map, retry, repeat } from 'rxjs';
|
|
5
5
|
import { MarketstateUpdate } from './MarketstateUpdate';
|
|
6
|
-
import { AfuCompanyProfileFromJSON, BidAskHistoryDataFromJSON, ListingdataWithIdAndQualityFromJSON, MarketdepthWithIdFromJSON, MarketstateResponseSearchFromJSON, MarketstateResponseSearchToJSON, MasterdataMergedSummaryWithIdFromJSON, PerformanceDataForTimeRangeFromJSON, SourcedataFromJSON, TickHistoryDataFromJSON, TimeseriesDataFromJSON, TradetickerEventFromJSON, TradingtimeFromJSON, TradingtimeInfoReplyFromJSON } from '../models';
|
|
6
|
+
import { AfuCompanyProfileFromJSON, BidAskHistoryDataFromJSON, ListingdataWithIdAndQualityFromJSON, MarketdepthWithIdFromJSON, MarketstateResponseSearchFromJSON, MarketstateResponseSearchToJSON, MasterdataMergedSummaryWithIdFromJSON, PerformanceDataForTimeRangeFromJSON, SourcedataFromJSON, TickHistoryDataFromJSON, TimeseriesBidAskDataFromJSON, TimeseriesDataFromJSON, TopflopListFromJSON, TradetickerEventFromJSON, TradingtimeFromJSON, TradingtimeInfoReplyFromJSON } from '../models';
|
|
7
7
|
import { LruCache } from '../lrucache';
|
|
8
8
|
export class MdsConnection {
|
|
9
9
|
/**
|
|
10
10
|
* construct an MdsConnection
|
|
11
11
|
*/
|
|
12
12
|
constructor(websocketUrl, authdataCallback, options = { debug: false }) {
|
|
13
|
+
this.waitingForReconnect = [];
|
|
13
14
|
this.state = new MdsConnectionState();
|
|
14
15
|
this.waitingForAuthentification = [];
|
|
15
|
-
this.waitingForReconnect = [];
|
|
16
16
|
this.nextGeneratedRequestId = 0;
|
|
17
17
|
this.runningRequests = new Map();
|
|
18
18
|
this.isDebug = false;
|
|
@@ -27,7 +27,7 @@ export class MdsConnection {
|
|
|
27
27
|
*/
|
|
28
28
|
this.sourceCache = undefined;
|
|
29
29
|
/**
|
|
30
|
-
* gets the
|
|
30
|
+
* gets the trading time for a source
|
|
31
31
|
* */
|
|
32
32
|
this.tradingtimeCache = undefined;
|
|
33
33
|
/**
|
|
@@ -48,7 +48,7 @@ export class MdsConnection {
|
|
|
48
48
|
this.websocket = new ReconnectingWebSocket(websocketUrl, [], options.wsOptions);
|
|
49
49
|
const outer = this;
|
|
50
50
|
// open-handler -> resend open requests from previous connection
|
|
51
|
-
this.websocket.onopen =
|
|
51
|
+
this.websocket.onopen = () => {
|
|
52
52
|
outer.debug(`websocket open, resending ${outer.waitingForReconnect.length} items`);
|
|
53
53
|
outer.state.connectionOpened();
|
|
54
54
|
for (const request of outer.waitingForReconnect) {
|
|
@@ -56,7 +56,7 @@ export class MdsConnection {
|
|
|
56
56
|
}
|
|
57
57
|
};
|
|
58
58
|
// close handler -> store open requests for resending on reconnect
|
|
59
|
-
this.websocket.onclose =
|
|
59
|
+
this.websocket.onclose = () => {
|
|
60
60
|
outer.debug(`websocket closed, queuing ${outer.waitingForReconnect.length} items`);
|
|
61
61
|
outer.state.connectionClosed();
|
|
62
62
|
outer.waitingForReconnect = Array.from(outer.runningRequests.values());
|
|
@@ -67,7 +67,7 @@ export class MdsConnection {
|
|
|
67
67
|
this.stayAuthenticated();
|
|
68
68
|
this.reconnectTimer = setInterval(() => {
|
|
69
69
|
if (!outer.state.isTimedOut()) {
|
|
70
|
-
outer.debug(
|
|
70
|
+
outer.debug('websocket timed out, calling reconnect');
|
|
71
71
|
outer.state.forcedDisconnect();
|
|
72
72
|
outer.websocket.reconnect();
|
|
73
73
|
}
|
|
@@ -83,8 +83,7 @@ export class MdsConnection {
|
|
|
83
83
|
* create a hearbeat observable that can be subscribed to
|
|
84
84
|
*/
|
|
85
85
|
heartbeat() {
|
|
86
|
-
return this.observable({ heartbeat: {} })
|
|
87
|
-
.pipe(map((x) => x.dataHeartbeat));
|
|
86
|
+
return this.observable({ heartbeat: {} }).pipe(map((x) => x.dataHeartbeat));
|
|
88
87
|
}
|
|
89
88
|
/**
|
|
90
89
|
* sets the priority for sources
|
|
@@ -165,8 +164,7 @@ export class MdsConnection {
|
|
|
165
164
|
*/
|
|
166
165
|
marketstates(marketstateQueries, quality) {
|
|
167
166
|
const full = new Map();
|
|
168
|
-
return this.marketstateUpdates(marketstateQueries, quality)
|
|
169
|
-
.pipe(map((update) => {
|
|
167
|
+
return this.marketstateUpdates(marketstateQueries, quality).pipe(map((update) => {
|
|
170
168
|
let existingEntry = update.marketstateId ? full.get(update.marketstateId) : undefined;
|
|
171
169
|
if (update.marketstateId) {
|
|
172
170
|
if (existingEntry) {
|
|
@@ -184,18 +182,26 @@ export class MdsConnection {
|
|
|
184
182
|
* create a Marketstate for a snapshot request
|
|
185
183
|
*/
|
|
186
184
|
marketstateSnapshot(marketstateQueries, quality) {
|
|
187
|
-
return this.observable({
|
|
188
|
-
|
|
185
|
+
return this.observable({
|
|
186
|
+
listMarketstates: {
|
|
187
|
+
marketstateQueries: marketstateQueries,
|
|
188
|
+
quality: quality
|
|
189
|
+
}
|
|
190
|
+
}).pipe(map((x) => MarketstateResponseSearchFromJSON(x.dataMarketstate)));
|
|
189
191
|
}
|
|
190
192
|
/**
|
|
191
|
-
* create a
|
|
193
|
+
* create a market state observable that can be subscribed to, contains only delta for every marketstate
|
|
192
194
|
*/
|
|
193
195
|
marketstateUpdates(marketstateQueries, quality) {
|
|
194
|
-
return this.observable({
|
|
195
|
-
|
|
196
|
+
return this.observable({
|
|
197
|
+
subscribeMarketstates: {
|
|
198
|
+
marketstateQueries: marketstateQueries,
|
|
199
|
+
quality: quality
|
|
200
|
+
}
|
|
201
|
+
}).pipe(map((x) => MarketstateResponseSearchFromJSON(x.dataMarketstate)));
|
|
196
202
|
}
|
|
197
203
|
/**
|
|
198
|
-
* create a
|
|
204
|
+
* create a market state observable that can be subscribed to, contains only full state for every marketstate
|
|
199
205
|
*/
|
|
200
206
|
marketstatesStates(marketstateQueries, quality) {
|
|
201
207
|
return this.marketstates(marketstateQueries, quality).pipe(map((x) => x.state));
|
|
@@ -237,8 +243,8 @@ export class MdsConnection {
|
|
|
237
243
|
}).pipe(map(state => TimeseriesDataFromJSON(state.dataTimeseries)));
|
|
238
244
|
}
|
|
239
245
|
/**
|
|
240
|
-
|
|
241
|
-
|
|
246
|
+
* Returns the Orderbook for the specified Marketstate.
|
|
247
|
+
* */
|
|
242
248
|
marketdepth(marketstateId, quality, orderBookVariant) {
|
|
243
249
|
return this.observable({
|
|
244
250
|
subscribeMarketdepth: {
|
|
@@ -299,6 +305,45 @@ export class MdsConnection {
|
|
|
299
305
|
return tickHistory;
|
|
300
306
|
}));
|
|
301
307
|
}
|
|
308
|
+
timeseriesBidAsk(marketstateId, resolution, start, end, quality) {
|
|
309
|
+
return this.observable({
|
|
310
|
+
subscribeTimeseriesBidAsk: {
|
|
311
|
+
resolution: resolution,
|
|
312
|
+
marketstateId: marketstateId,
|
|
313
|
+
start: start instanceof Date ? start?.toISOString() : start,
|
|
314
|
+
end: end instanceof Date ? end?.toISOString() : end,
|
|
315
|
+
quality: quality
|
|
316
|
+
}
|
|
317
|
+
}).pipe(map(state => TimeseriesBidAskDataFromJSON(state.dataTimeseriesBidAsk)));
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Returns the Open-High-Low-Close Timeseries for the specified Instrument on the Source.
|
|
321
|
+
* */
|
|
322
|
+
timeseriesBidAskSnapshot(marketstateId, resolution, start, end, quality) {
|
|
323
|
+
return this.observable({
|
|
324
|
+
listTimeseriesBidAsk: {
|
|
325
|
+
resolution: resolution,
|
|
326
|
+
marketstateId: marketstateId,
|
|
327
|
+
start: start instanceof Date ? start?.toISOString() : start,
|
|
328
|
+
end: end instanceof Date ? end?.toISOString() : end,
|
|
329
|
+
quality: quality
|
|
330
|
+
}
|
|
331
|
+
}).pipe(map(state => TimeseriesBidAskDataFromJSON(state.dataTimeseriesBidAsk)));
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Returns the Orderbook for the specified Marketstate.
|
|
335
|
+
* */
|
|
336
|
+
topflop(listId, sourcePriorities, quality, topSize, flopSize) {
|
|
337
|
+
return this.observable({
|
|
338
|
+
subscribeListTopflop: {
|
|
339
|
+
listId: listId,
|
|
340
|
+
sourcePriorities: sourcePriorities,
|
|
341
|
+
topSize: topSize,
|
|
342
|
+
flopSize: flopSize,
|
|
343
|
+
quality: quality
|
|
344
|
+
}
|
|
345
|
+
}).pipe(map(state => TopflopListFromJSON(state.dataTopflopList)));
|
|
346
|
+
}
|
|
302
347
|
// #############################################################################################
|
|
303
348
|
updateExistingMarketstateWithDeltaUpdate(existingEntry, update) {
|
|
304
349
|
const existingJson = MarketstateResponseSearchToJSON(existingEntry);
|
|
@@ -347,15 +392,20 @@ export class MdsConnection {
|
|
|
347
392
|
outer.state.authenticationEnded();
|
|
348
393
|
subscriber.error(error);
|
|
349
394
|
});
|
|
350
|
-
}).pipe(retry({ delay: 2000 }), repeat({ delay: 2000 }))
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
395
|
+
}).pipe(retry({ delay: 2000 }), repeat({ delay: 2000 })).subscribe({
|
|
396
|
+
next(n) {
|
|
397
|
+
outer.debug(`auth outer ${JSON.stringify(n)}`);
|
|
398
|
+
},
|
|
399
|
+
error(e) {
|
|
400
|
+
outer.error(`auth error ${JSON.stringify(e)}`);
|
|
401
|
+
},
|
|
402
|
+
complete() {
|
|
403
|
+
outer.debug('auth completed');
|
|
404
|
+
}
|
|
355
405
|
});
|
|
356
406
|
}
|
|
357
407
|
generateNextRequestId() {
|
|
358
|
-
return
|
|
408
|
+
return 'request-' + this.nextGeneratedRequestId++;
|
|
359
409
|
}
|
|
360
410
|
observable(req) {
|
|
361
411
|
const requestId = this.generateNextRequestId();
|
|
@@ -388,7 +438,7 @@ export class MdsConnection {
|
|
|
388
438
|
processWebsocketMessageEvent(e) {
|
|
389
439
|
if (e?.data) {
|
|
390
440
|
const msg = JSON.parse(e.data);
|
|
391
|
-
this.debug(
|
|
441
|
+
this.debug('we received ' + JSON.stringify(msg));
|
|
392
442
|
this.state.messageReceived();
|
|
393
443
|
if (msg.requestId) {
|
|
394
444
|
const request = this.runningRequests.get(msg.requestId);
|
|
@@ -396,16 +446,14 @@ export class MdsConnection {
|
|
|
396
446
|
if (request.promiseResolve && request.promiseReject) {
|
|
397
447
|
if (msg.isError) {
|
|
398
448
|
request.promiseReject(msg.errorMessage);
|
|
399
|
-
this.runningRequests.delete(msg.requestId);
|
|
400
449
|
}
|
|
401
450
|
else if (msg.isComplete) {
|
|
402
451
|
request.promiseResolve(msg);
|
|
403
|
-
this.runningRequests.delete(msg.requestId);
|
|
404
452
|
}
|
|
405
453
|
else {
|
|
406
454
|
request.promiseReject(msg.errorMessage);
|
|
407
|
-
this.runningRequests.delete(msg.requestId);
|
|
408
455
|
}
|
|
456
|
+
this.runningRequests.delete(msg.requestId);
|
|
409
457
|
}
|
|
410
458
|
else if (request.observableSubscriber) {
|
|
411
459
|
if (msg.isError) {
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
import { MdsAuthdata } from './MdsAuthdata';
|
|
2
|
+
import { RunningRequest } from './RunningRequest';
|
|
2
3
|
import { MdsOptions } from './MdsOptions';
|
|
3
4
|
import { Observable } from 'rxjs';
|
|
4
5
|
import { MarketstateUpdate } from './MarketstateUpdate';
|
|
5
|
-
import { AfuCompanyProfile, BidAskHistoryData, ListingdataWithIdAndQuality, MarketdepthWithId, MarketstateResponseSearch, MasterdataMergedSummaryWithId, OrderBookVariant, PerformanceDataForTimeRange, Quality, Resolution, Sourcedata, TickHistoryData, TimeRange, TimeseriesData, TradetickerEvent, Tradingtime, TradingtimeInfoReply, WebSocketMessage } from '../models';
|
|
6
|
+
import { AfuCompanyProfile, BidAskHistoryData, ListingdataWithIdAndQuality, MarketdepthWithId, MarketstateResponseSearch, MasterdataMergedSummaryWithId, OrderBookVariant, PerformanceDataForTimeRange, Quality, Resolution, Sourcedata, TickHistoryData, TimeRange, TimeseriesBidAskData, TimeseriesData, TopflopList, TradetickerEvent, Tradingtime, TradingtimeInfoReply, WebSocketMessage } from '../models';
|
|
6
7
|
export declare class MdsConnection {
|
|
7
|
-
|
|
8
|
+
protected waitingForReconnect: RunningRequest[];
|
|
9
|
+
private readonly websocket;
|
|
8
10
|
private readonly authdataCallback;
|
|
9
|
-
private state;
|
|
11
|
+
private readonly state;
|
|
10
12
|
private waitingForAuthentification;
|
|
11
|
-
private waitingForReconnect;
|
|
12
13
|
private nextGeneratedRequestId;
|
|
13
14
|
private readonly runningRequests;
|
|
14
|
-
private isDebug;
|
|
15
|
-
private reconnectTimer;
|
|
15
|
+
private readonly isDebug;
|
|
16
|
+
private readonly reconnectTimer;
|
|
16
17
|
/**
|
|
17
18
|
* construct an MdsConnection
|
|
18
19
|
*/
|
|
@@ -36,7 +37,7 @@ export declare class MdsConnection {
|
|
|
36
37
|
private sourceCache;
|
|
37
38
|
source(sourceId: string): Promise<Sourcedata>;
|
|
38
39
|
/**
|
|
39
|
-
* gets the
|
|
40
|
+
* gets the trading time for a source
|
|
40
41
|
* */
|
|
41
42
|
private tradingtimeCache;
|
|
42
43
|
tradingtime(sourceId: string): Promise<Tradingtime>;
|
|
@@ -79,11 +80,11 @@ export declare class MdsConnection {
|
|
|
79
80
|
*/
|
|
80
81
|
marketstateSnapshot(marketstateQueries: string[], quality?: Quality): Observable<MarketstateResponseSearch>;
|
|
81
82
|
/**
|
|
82
|
-
* create a
|
|
83
|
+
* create a market state observable that can be subscribed to, contains only delta for every marketstate
|
|
83
84
|
*/
|
|
84
85
|
marketstateUpdates(marketstateQueries: string[], quality?: Quality): Observable<MarketstateResponseSearch>;
|
|
85
86
|
/**
|
|
86
|
-
* create a
|
|
87
|
+
* create a market state observable that can be subscribed to, contains only full state for every marketstate
|
|
87
88
|
*/
|
|
88
89
|
marketstatesStates(marketstateQueries: string[], quality?: Quality): Observable<MarketstateResponseSearch | undefined>;
|
|
89
90
|
/**
|
|
@@ -95,8 +96,8 @@ export declare class MdsConnection {
|
|
|
95
96
|
* */
|
|
96
97
|
timeseriesSnapshot(marketstateId: string, resolution: Resolution, start?: Date | string, end?: Date | string, cleanSplits?: boolean, cleanDividends?: boolean, cleanDistributions?: boolean, cleanSubscriptions?: boolean, quality?: Quality): Observable<TimeseriesData>;
|
|
97
98
|
/**
|
|
98
|
-
|
|
99
|
-
|
|
99
|
+
* Returns the Orderbook for the specified Marketstate.
|
|
100
|
+
* */
|
|
100
101
|
marketdepth(marketstateId: string, quality?: Quality, orderBookVariant?: OrderBookVariant): Observable<MarketdepthWithId>;
|
|
101
102
|
/**
|
|
102
103
|
* Returns the performance for a specified listing of an instrument.
|
|
@@ -110,6 +111,15 @@ export declare class MdsConnection {
|
|
|
110
111
|
* Returns the tick history for the specified Instrument on the Source.
|
|
111
112
|
*/
|
|
112
113
|
tickHistory(marketstateId: string, start?: Date | string, end?: Date | string, filterByVolume?: boolean, quality?: Quality, offset?: number, limit?: number): Observable<TickHistoryData>;
|
|
114
|
+
timeseriesBidAsk(marketstateId: string, resolution: Resolution, start?: Date | string, end?: Date | string, quality?: Quality): Observable<TimeseriesBidAskData>;
|
|
115
|
+
/**
|
|
116
|
+
* Returns the Open-High-Low-Close Timeseries for the specified Instrument on the Source.
|
|
117
|
+
* */
|
|
118
|
+
timeseriesBidAskSnapshot(marketstateId: string, resolution: Resolution, start?: Date | string, end?: Date | string, quality?: Quality): Observable<TimeseriesBidAskData>;
|
|
119
|
+
/**
|
|
120
|
+
* Returns the Orderbook for the specified Marketstate.
|
|
121
|
+
* */
|
|
122
|
+
topflop(listId: string, sourcePriorities: string[], quality: Quality, topSize?: number, flopSize?: number): Observable<TopflopList>;
|
|
113
123
|
private updateExistingMarketstateWithDeltaUpdate;
|
|
114
124
|
private sendAsSoonAsAuthenticationPermits;
|
|
115
125
|
private stayAuthenticated;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MdsConnection.d.ts","sourceRoot":"","sources":["../../../src/api/MdsConnection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"MdsConnection.d.ts","sourceRoot":"","sources":["../../../src/api/MdsConnection.ts"],"names":[],"mappings":"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"}
|