mconnectb 1.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/LICENSE +21 -0
- package/README.md +351 -0
- package/dist/constants/index.d.ts +158 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +161 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/constants/routes.d.ts +109 -0
- package/dist/constants/routes.d.ts.map +1 -0
- package/dist/constants/routes.js +120 -0
- package/dist/constants/routes.js.map +1 -0
- package/dist/example/example.d.ts +44 -0
- package/dist/example/example.d.ts.map +1 -0
- package/dist/example/example.js +727 -0
- package/dist/example/example.js.map +1 -0
- package/dist/example/websocket-stream.d.ts +2 -0
- package/dist/example/websocket-stream.d.ts.map +1 -0
- package/dist/example/websocket-stream.js +116 -0
- package/dist/example/websocket-stream.js.map +1 -0
- package/dist/lib/connect.d.ts +306 -0
- package/dist/lib/connect.d.ts.map +1 -0
- package/dist/lib/connect.js +514 -0
- package/dist/lib/connect.js.map +1 -0
- package/dist/lib/index.d.ts +5 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +27 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/response-logger.d.ts +15 -0
- package/dist/lib/response-logger.d.ts.map +1 -0
- package/dist/lib/response-logger.js +73 -0
- package/dist/lib/response-logger.js.map +1 -0
- package/dist/lib/ticker.d.ts +43 -0
- package/dist/lib/ticker.d.ts.map +1 -0
- package/dist/lib/ticker.js +362 -0
- package/dist/lib/ticker.js.map +1 -0
- package/dist/lib/utils.d.ts +36 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +75 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/test/test-websocket.d.ts +2 -0
- package/dist/test/test-websocket.d.ts.map +1 -0
- package/dist/test/test-websocket.js +116 -0
- package/dist/test/test-websocket.js.map +1 -0
- package/dist/test/test.d.ts +2 -0
- package/dist/test/test.d.ts.map +1 -0
- package/dist/test/test.js +892 -0
- package/dist/test/test.js.map +1 -0
- package/dist/types/config.d.ts +138 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +12 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +631 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +12 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +91 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
export declare class MTicker extends EventEmitter {
|
|
3
|
+
private apiKey;
|
|
4
|
+
private accessToken;
|
|
5
|
+
private root;
|
|
6
|
+
private debug;
|
|
7
|
+
private reconnect;
|
|
8
|
+
private static readonly EXCHANGE_TYPE;
|
|
9
|
+
static readonly MODE_LTP = 1;
|
|
10
|
+
static readonly MODE_QUOTE = 2;
|
|
11
|
+
static readonly MODE_SNAP = 3;
|
|
12
|
+
private static readonly MESSAGE_SUBSCRIBE;
|
|
13
|
+
private static readonly MESSAGE_UNSUBSCRIBE;
|
|
14
|
+
private ws;
|
|
15
|
+
private socketUrl;
|
|
16
|
+
private subscribedTokens;
|
|
17
|
+
private reconnectAttempts;
|
|
18
|
+
private maxReconnectAttempts;
|
|
19
|
+
private reconnectDelay;
|
|
20
|
+
private pingInterval;
|
|
21
|
+
private isFirstConnect;
|
|
22
|
+
private defaultMode;
|
|
23
|
+
constructor(apiKey: string, accessToken: string, root: string, debug?: boolean, reconnect?: boolean, maxReconnectTries?: number, reconnectMaxDelay?: number, defaultMode?: number);
|
|
24
|
+
connect(): void;
|
|
25
|
+
private onOpen;
|
|
26
|
+
private onMessage;
|
|
27
|
+
private onClose;
|
|
28
|
+
private onError;
|
|
29
|
+
private startPing;
|
|
30
|
+
private stopPing;
|
|
31
|
+
sendLoginAfterConnect(): void;
|
|
32
|
+
subscribe(exchangeType: string, instrumentTokens: string[], mode?: number): void;
|
|
33
|
+
unsubscribe(exchangeType: string, instrumentTokens: string[]): void;
|
|
34
|
+
private resubscribe;
|
|
35
|
+
private parseTextMessage;
|
|
36
|
+
private convertFromUnixTimestamp;
|
|
37
|
+
private convertPrices;
|
|
38
|
+
private parseBinary;
|
|
39
|
+
private readUInt64LE;
|
|
40
|
+
close(code?: number, reason?: string): void;
|
|
41
|
+
isConnected(): boolean;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=ticker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ticker.d.ts","sourceRoot":"","sources":["../../lib/ticker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAqDtC,qBAAa,OAAQ,SAAQ,YAAY;IA2BrC,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,SAAS;IA9BnB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAMnC;IAEF,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK;IAC7B,MAAM,CAAC,QAAQ,CAAC,UAAU,KAAK;IAC/B,MAAM,CAAC,QAAQ,CAAC,SAAS,KAAK;IAE9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAK;IAC9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAK;IAEhD,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,WAAW,CAAS;gBAGlB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,KAAK,UAAQ,EACb,SAAS,UAAO,EACxB,iBAAiB,SAAK,EACtB,iBAAiB,SAAQ,EACzB,WAAW,SAAmB;IAShC,OAAO,IAAI,IAAI;IASf,OAAO,CAAC,MAAM;IAad,OAAO,CAAC,SAAS;IAuBjB,OAAO,CAAC,OAAO;IAaf,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,QAAQ;IAOhB,qBAAqB,IAAI,IAAI;IAM7B,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAsBhF,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,IAAI;IAqBnE,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,wBAAwB;IAShC,OAAO,CAAC,aAAa;IA+DrB,OAAO,CAAC,WAAW;IA+FnB,OAAO,CAAC,YAAY;IAQpB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ3C,WAAW,IAAI,OAAO;CAGvB"}
|
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.MTicker = void 0;
|
|
7
|
+
const ws_1 = __importDefault(require("ws"));
|
|
8
|
+
const events_1 = require("events");
|
|
9
|
+
class MTicker extends events_1.EventEmitter {
|
|
10
|
+
constructor(apiKey, accessToken, root, debug = false, reconnect = true, maxReconnectTries = 50, reconnectMaxDelay = 60000, defaultMode = MTicker.MODE_LTP) {
|
|
11
|
+
super();
|
|
12
|
+
this.apiKey = apiKey;
|
|
13
|
+
this.accessToken = accessToken;
|
|
14
|
+
this.root = root;
|
|
15
|
+
this.debug = debug;
|
|
16
|
+
this.reconnect = reconnect;
|
|
17
|
+
this.ws = null;
|
|
18
|
+
this.subscribedTokens = {};
|
|
19
|
+
this.reconnectAttempts = 0;
|
|
20
|
+
this.pingInterval = null;
|
|
21
|
+
this.isFirstConnect = true;
|
|
22
|
+
this.socketUrl = `${this.root}?ACCESS_TOKEN=${this.accessToken}&API_KEY=${this.apiKey}`;
|
|
23
|
+
this.maxReconnectAttempts = maxReconnectTries;
|
|
24
|
+
this.reconnectDelay = reconnectMaxDelay;
|
|
25
|
+
this.defaultMode = defaultMode;
|
|
26
|
+
}
|
|
27
|
+
connect() {
|
|
28
|
+
this.ws = new ws_1.default(this.socketUrl);
|
|
29
|
+
this.ws.on('open', () => this.onOpen());
|
|
30
|
+
this.ws.on('message', (data) => this.onMessage(data));
|
|
31
|
+
this.ws.on('close', (code, reason) => this.onClose(code, reason.toString()));
|
|
32
|
+
this.ws.on('error', (error) => this.onError(error));
|
|
33
|
+
}
|
|
34
|
+
onOpen() {
|
|
35
|
+
this.reconnectAttempts = 0;
|
|
36
|
+
this.startPing();
|
|
37
|
+
if (!this.isFirstConnect) {
|
|
38
|
+
this.resubscribe();
|
|
39
|
+
}
|
|
40
|
+
this.isFirstConnect = false;
|
|
41
|
+
this.emit('connect');
|
|
42
|
+
if (this.debug)
|
|
43
|
+
console.log('WebSocket connected');
|
|
44
|
+
}
|
|
45
|
+
onMessage(data) {
|
|
46
|
+
if (data.length < 2)
|
|
47
|
+
return;
|
|
48
|
+
try {
|
|
49
|
+
// Try to parse as text first
|
|
50
|
+
const textData = data.toString('utf8');
|
|
51
|
+
if (textData.startsWith('{')) {
|
|
52
|
+
const jsonData = JSON.parse(textData);
|
|
53
|
+
this.parseTextMessage(jsonData);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// If not JSON, treat as binary
|
|
59
|
+
}
|
|
60
|
+
// Parse binary data
|
|
61
|
+
if (data.length > 4) {
|
|
62
|
+
const parsedData = this.parseBinary(data);
|
|
63
|
+
const convertedData = this.convertPrices(parsedData);
|
|
64
|
+
this.emit('ticks', convertedData);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
onClose(code, reason) {
|
|
68
|
+
this.stopPing();
|
|
69
|
+
this.emit('close', code, reason);
|
|
70
|
+
if (this.reconnect && this.reconnectAttempts < this.maxReconnectAttempts) {
|
|
71
|
+
this.reconnectAttempts++;
|
|
72
|
+
setTimeout(() => {
|
|
73
|
+
if (this.debug)
|
|
74
|
+
console.log(`Reconnecting... Attempt ${this.reconnectAttempts}`);
|
|
75
|
+
this.connect();
|
|
76
|
+
}, this.reconnectDelay);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
onError(error) {
|
|
80
|
+
this.emit('error', error);
|
|
81
|
+
if (this.debug)
|
|
82
|
+
console.error('WebSocket error:', error);
|
|
83
|
+
}
|
|
84
|
+
startPing() {
|
|
85
|
+
this.pingInterval = setInterval(() => {
|
|
86
|
+
if (this.ws?.readyState === ws_1.default.OPEN) {
|
|
87
|
+
this.ws.ping();
|
|
88
|
+
}
|
|
89
|
+
}, 2500);
|
|
90
|
+
}
|
|
91
|
+
stopPing() {
|
|
92
|
+
if (this.pingInterval) {
|
|
93
|
+
clearInterval(this.pingInterval);
|
|
94
|
+
this.pingInterval = null;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
sendLoginAfterConnect() {
|
|
98
|
+
if (this.ws?.readyState === ws_1.default.OPEN) {
|
|
99
|
+
this.ws.send(`LOGIN:${this.accessToken}`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
subscribe(exchangeType, instrumentTokens, mode) {
|
|
103
|
+
const subscriptionMode = mode ?? this.defaultMode;
|
|
104
|
+
const packet = {
|
|
105
|
+
correlationID: '',
|
|
106
|
+
action: MTicker.MESSAGE_SUBSCRIBE,
|
|
107
|
+
params: {
|
|
108
|
+
mode: subscriptionMode,
|
|
109
|
+
tokenList: [{
|
|
110
|
+
exchangeType: MTicker.EXCHANGE_TYPE[exchangeType.toLowerCase()] || 1,
|
|
111
|
+
tokens: instrumentTokens
|
|
112
|
+
}]
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
if (this.ws?.readyState === ws_1.default.OPEN) {
|
|
116
|
+
this.ws.send(JSON.stringify(packet));
|
|
117
|
+
instrumentTokens.forEach(token => {
|
|
118
|
+
this.subscribedTokens[token] = subscriptionMode;
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
unsubscribe(exchangeType, instrumentTokens) {
|
|
123
|
+
const packet = {
|
|
124
|
+
correlationID: '',
|
|
125
|
+
action: MTicker.MESSAGE_UNSUBSCRIBE,
|
|
126
|
+
params: {
|
|
127
|
+
mode: this.defaultMode,
|
|
128
|
+
tokenList: [{
|
|
129
|
+
exchangeType: MTicker.EXCHANGE_TYPE[exchangeType.toLowerCase()] || 1,
|
|
130
|
+
tokens: instrumentTokens
|
|
131
|
+
}]
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
if (this.ws?.readyState === ws_1.default.OPEN) {
|
|
135
|
+
this.ws.send(JSON.stringify(packet));
|
|
136
|
+
instrumentTokens.forEach(token => {
|
|
137
|
+
delete this.subscribedTokens[token];
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
resubscribe() {
|
|
142
|
+
const modes = {};
|
|
143
|
+
Object.keys(this.subscribedTokens).forEach(token => {
|
|
144
|
+
const mode = this.subscribedTokens[token];
|
|
145
|
+
if (!modes[mode])
|
|
146
|
+
modes[mode] = [];
|
|
147
|
+
modes[mode].push(token);
|
|
148
|
+
});
|
|
149
|
+
Object.keys(modes).forEach(mode => {
|
|
150
|
+
if (this.debug)
|
|
151
|
+
console.log(`Resubscribe mode: ${mode} - ${modes[+mode]}`);
|
|
152
|
+
// Note: This would need the exchange type to be stored with tokens for proper resubscription
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
parseTextMessage(data) {
|
|
156
|
+
if (data.order_status === 'order' && data.orderData) {
|
|
157
|
+
this.emit('order_update', data.orderData);
|
|
158
|
+
}
|
|
159
|
+
if (data.order_status === 'trade' && data.orderData) {
|
|
160
|
+
this.emit('trade_update', data.orderData);
|
|
161
|
+
}
|
|
162
|
+
if (data.type === 'error') {
|
|
163
|
+
this.emit('error', new Error(data.data));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
convertFromUnixTimestamp(timestamp, year = 1980) {
|
|
167
|
+
// Convert from custom epoch (1980) as per Python implementation
|
|
168
|
+
const origin = new Date(Date.UTC(year, 0, 1, 0, 0, 0, 0));
|
|
169
|
+
if (timestamp !== 0) {
|
|
170
|
+
return new Date(origin.getTime() + timestamp * 1000);
|
|
171
|
+
}
|
|
172
|
+
return origin;
|
|
173
|
+
}
|
|
174
|
+
convertPrices(tickData) {
|
|
175
|
+
return tickData.map(tick => {
|
|
176
|
+
// Convert prices
|
|
177
|
+
const ltp = tick.ltp / 100;
|
|
178
|
+
const atp = tick.avg_traded_price ? tick.avg_traded_price / 100 : undefined;
|
|
179
|
+
const open = tick.ohlc?.open ? tick.ohlc.open / 100 : undefined;
|
|
180
|
+
const high = tick.ohlc?.high ? tick.ohlc.high / 100 : undefined;
|
|
181
|
+
const low = tick.ohlc?.low ? tick.ohlc.low / 100 : undefined;
|
|
182
|
+
const close = tick.ohlc?.close ? tick.ohlc.close / 100 : undefined;
|
|
183
|
+
// Convert depth to flat array format (bid first, then ask)
|
|
184
|
+
const depthArray = [];
|
|
185
|
+
if (tick.depth) {
|
|
186
|
+
tick.depth.bid.forEach(item => {
|
|
187
|
+
depthArray.push({
|
|
188
|
+
BuySellFlag: item.buy_or_sell,
|
|
189
|
+
Quantity: item.quantity,
|
|
190
|
+
Price: item.price > 0 ? item.price / 100 : item.price,
|
|
191
|
+
NumberOfOrders: item.orders
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
tick.depth.ask.forEach(item => {
|
|
195
|
+
depthArray.push({
|
|
196
|
+
BuySellFlag: item.buy_or_sell,
|
|
197
|
+
Quantity: item.quantity,
|
|
198
|
+
Price: item.price > 0 ? item.price / 100 : item.price,
|
|
199
|
+
NumberOfOrders: item.orders
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
// Build output in exact sequence as expected
|
|
204
|
+
const output = {};
|
|
205
|
+
output.SubscriptionMode = tick.subscription_mode;
|
|
206
|
+
output.ExchangeType = tick.exchange_type;
|
|
207
|
+
output.Token = parseInt(tick.instrument_token);
|
|
208
|
+
output.SeqNumber = tick.sequence_no;
|
|
209
|
+
output.ExchangeTimestamp = tick.sequence_no;
|
|
210
|
+
output.LTP = ltp;
|
|
211
|
+
if (tick.last_traded_qty !== undefined)
|
|
212
|
+
output.LTQ = tick.last_traded_qty;
|
|
213
|
+
if (atp !== undefined)
|
|
214
|
+
output.ATP = atp;
|
|
215
|
+
if (tick.vol_traded_today !== undefined)
|
|
216
|
+
output.VTT = tick.vol_traded_today;
|
|
217
|
+
if (tick.tot_buy_qty !== undefined)
|
|
218
|
+
output.TotalBuyQty = tick.tot_buy_qty;
|
|
219
|
+
if (tick.tot_sell_qty !== undefined)
|
|
220
|
+
output.TotalSellQty = tick.tot_sell_qty;
|
|
221
|
+
if (open !== undefined)
|
|
222
|
+
output.Open = open;
|
|
223
|
+
if (high !== undefined)
|
|
224
|
+
output.High = high;
|
|
225
|
+
if (low !== undefined)
|
|
226
|
+
output.Low = low;
|
|
227
|
+
if (close !== undefined)
|
|
228
|
+
output.Close = close;
|
|
229
|
+
if (tick.last_traded_timestamp)
|
|
230
|
+
output.LTT = Math.floor(new Date(tick.last_traded_timestamp).getTime() / 1000);
|
|
231
|
+
if (tick.open_interest !== undefined)
|
|
232
|
+
output.OI = tick.open_interest;
|
|
233
|
+
if (tick.open_interest_percent !== undefined)
|
|
234
|
+
output.OIChange = tick.open_interest_percent;
|
|
235
|
+
if (depthArray.length > 0)
|
|
236
|
+
output.Depth = depthArray;
|
|
237
|
+
if (tick.upper_circuit_lmt !== undefined)
|
|
238
|
+
output.UpperCircuitLimit = tick.upper_circuit_lmt > 0 ? tick.upper_circuit_lmt / 100 : tick.upper_circuit_lmt;
|
|
239
|
+
if (tick.lower_circuit_lmt !== undefined)
|
|
240
|
+
output.LowerCircuitLimit = tick.lower_circuit_lmt > 0 ? tick.lower_circuit_lmt / 100 : tick.lower_circuit_lmt;
|
|
241
|
+
if (tick['52_wk_high'] !== undefined)
|
|
242
|
+
output.FiftyTwoWeekHigh = tick['52_wk_high'] > 0 ? tick['52_wk_high'] / 100 : tick['52_wk_high'];
|
|
243
|
+
if (tick['52_wk_low'] !== undefined)
|
|
244
|
+
output.FiftyTwoWeekLow = tick['52_wk_low'] > 0 ? tick['52_wk_low'] / 100 : tick['52_wk_low'];
|
|
245
|
+
return output;
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
parseBinary(buffer) {
|
|
249
|
+
try {
|
|
250
|
+
const data = [];
|
|
251
|
+
const subscriptionMode = buffer.readUInt8(0);
|
|
252
|
+
const exchangeType = buffer.readUInt8(1);
|
|
253
|
+
const instrumentToken = buffer.subarray(2, 27).toString('utf8').replace(/\0/g, ' ').trim();
|
|
254
|
+
const sequenceNo = this.readUInt64LE(buffer, 27);
|
|
255
|
+
const exTimestamp = this.convertFromUnixTimestamp(this.readUInt64LE(buffer, 35));
|
|
256
|
+
const ltp = this.readUInt64LE(buffer, 43);
|
|
257
|
+
const tickData = {
|
|
258
|
+
mode: this.defaultMode,
|
|
259
|
+
subscription_mode: subscriptionMode,
|
|
260
|
+
exchange_type: exchangeType,
|
|
261
|
+
instrument_token: instrumentToken,
|
|
262
|
+
sequence_no: sequenceNo,
|
|
263
|
+
ex_timestamp: exTimestamp.toISOString(),
|
|
264
|
+
ltp: ltp
|
|
265
|
+
};
|
|
266
|
+
// LTP Mode (51 bytes)
|
|
267
|
+
if (buffer.length === 51) {
|
|
268
|
+
data.push(tickData);
|
|
269
|
+
}
|
|
270
|
+
// Quote Mode (123 bytes) or Snap Mode (379 bytes)
|
|
271
|
+
else if (buffer.length === 123 || buffer.length === 379) {
|
|
272
|
+
tickData.mode = buffer.length === 123 ? MTicker.MODE_QUOTE : MTicker.MODE_SNAP;
|
|
273
|
+
tickData.last_traded_qty = this.readUInt64LE(buffer, 51);
|
|
274
|
+
tickData.avg_traded_price = this.readUInt64LE(buffer, 59);
|
|
275
|
+
tickData.vol_traded_today = this.readUInt64LE(buffer, 67);
|
|
276
|
+
tickData.tot_buy_qty = buffer.readDoubleLE(75);
|
|
277
|
+
tickData.tot_sell_qty = buffer.readDoubleLE(83);
|
|
278
|
+
// Read OHLC data - these should be dynamic values from server
|
|
279
|
+
const openPrice = this.readUInt64LE(buffer, 91);
|
|
280
|
+
const highPrice = this.readUInt64LE(buffer, 99);
|
|
281
|
+
const lowPrice = this.readUInt64LE(buffer, 107);
|
|
282
|
+
const closePrice = this.readUInt64LE(buffer, 115);
|
|
283
|
+
tickData.ohlc = {
|
|
284
|
+
open: openPrice,
|
|
285
|
+
high: highPrice,
|
|
286
|
+
low: lowPrice,
|
|
287
|
+
close: closePrice
|
|
288
|
+
};
|
|
289
|
+
if (buffer.length === 379) {
|
|
290
|
+
const timestamp = this.convertFromUnixTimestamp(this.readUInt64LE(buffer, 123));
|
|
291
|
+
tickData.last_traded_timestamp = timestamp.toISOString();
|
|
292
|
+
tickData.open_interest = this.readUInt64LE(buffer, 131);
|
|
293
|
+
tickData.open_interest_percent = buffer.readDoubleLE(139);
|
|
294
|
+
// Parse market depth data (200 bytes from 147 to 347)
|
|
295
|
+
const depth = { bid: [], ask: [] };
|
|
296
|
+
for (let i = 0, p = 147; i < 10 && p < 347; i++, p += 20) {
|
|
297
|
+
const buySellFlag = buffer.readInt16LE(p);
|
|
298
|
+
const quantity = this.readUInt64LE(buffer, p + 2);
|
|
299
|
+
const price = this.readUInt64LE(buffer, p + 10);
|
|
300
|
+
const orders = buffer.readInt16LE(p + 18);
|
|
301
|
+
const depthItem = {
|
|
302
|
+
buy_or_sell: buySellFlag,
|
|
303
|
+
quantity: quantity,
|
|
304
|
+
price: price,
|
|
305
|
+
orders: orders
|
|
306
|
+
};
|
|
307
|
+
if (i < 5) {
|
|
308
|
+
depth.bid.push(depthItem);
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
depth.ask.push(depthItem);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
tickData.depth = depth;
|
|
315
|
+
// Read circuit limits and 52-week data
|
|
316
|
+
tickData.upper_circuit_lmt = this.readUInt64LE(buffer, 347);
|
|
317
|
+
tickData.lower_circuit_lmt = this.readUInt64LE(buffer, 355);
|
|
318
|
+
tickData['52_wk_high'] = this.readUInt64LE(buffer, 363);
|
|
319
|
+
tickData['52_wk_low'] = this.readUInt64LE(buffer, 371);
|
|
320
|
+
}
|
|
321
|
+
data.push(tickData);
|
|
322
|
+
}
|
|
323
|
+
return data;
|
|
324
|
+
}
|
|
325
|
+
catch (error) {
|
|
326
|
+
if (this.debug)
|
|
327
|
+
console.error('Error parsing binary data:', error);
|
|
328
|
+
throw error;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
readUInt64LE(buffer, offset) {
|
|
332
|
+
// Read 8 bytes as little-endian and convert to number
|
|
333
|
+
// Using system byte order as per Python implementation
|
|
334
|
+
const low = buffer.readUInt32LE(offset);
|
|
335
|
+
const high = buffer.readUInt32LE(offset + 4);
|
|
336
|
+
return high * 0x100000000 + low;
|
|
337
|
+
}
|
|
338
|
+
close(code, reason) {
|
|
339
|
+
this.reconnect = false;
|
|
340
|
+
this.stopPing();
|
|
341
|
+
if (this.ws) {
|
|
342
|
+
this.ws.close(code, reason);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
isConnected() {
|
|
346
|
+
return this.ws?.readyState === ws_1.default.OPEN;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
exports.MTicker = MTicker;
|
|
350
|
+
MTicker.EXCHANGE_TYPE = {
|
|
351
|
+
nsecm: 1,
|
|
352
|
+
nsefo: 2,
|
|
353
|
+
bsecm: 3,
|
|
354
|
+
bsefo: 4,
|
|
355
|
+
nsecd: 13
|
|
356
|
+
};
|
|
357
|
+
MTicker.MODE_LTP = 1;
|
|
358
|
+
MTicker.MODE_QUOTE = 2;
|
|
359
|
+
MTicker.MODE_SNAP = 3;
|
|
360
|
+
MTicker.MESSAGE_SUBSCRIBE = 1;
|
|
361
|
+
MTicker.MESSAGE_UNSUBSCRIBE = 0;
|
|
362
|
+
//# sourceMappingURL=ticker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ticker.js","sourceRoot":"","sources":["../../lib/ticker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for TypeB SDK
|
|
3
|
+
*/
|
|
4
|
+
import { AxiosInstance } from 'axios';
|
|
5
|
+
import { HttpClientConfig } from '../types/config';
|
|
6
|
+
/**
|
|
7
|
+
* Replace route parameters in URL templates
|
|
8
|
+
* @param route - Route template with placeholders
|
|
9
|
+
* @param params - Object with parameter values
|
|
10
|
+
* @returns Formatted URL
|
|
11
|
+
*/
|
|
12
|
+
export declare function replaceRouteParams(route: string, params: Record<string, string | number>): string;
|
|
13
|
+
/**
|
|
14
|
+
* Create a configured HTTP client instance
|
|
15
|
+
* @param config - HTTP client configuration
|
|
16
|
+
* @returns Configured Axios instance
|
|
17
|
+
*/
|
|
18
|
+
export declare function createHttpClient(config: HttpClientConfig): AxiosInstance;
|
|
19
|
+
/**
|
|
20
|
+
* Utility class for WebSocket data processing
|
|
21
|
+
*/
|
|
22
|
+
export declare class Utils {
|
|
23
|
+
/**
|
|
24
|
+
* Get decimal divisor based on instrument token
|
|
25
|
+
* @param instrumentToken - The instrument token
|
|
26
|
+
* @returns Decimal divisor
|
|
27
|
+
*/
|
|
28
|
+
static getDecimalDivisor(instrumentToken: number): number;
|
|
29
|
+
/**
|
|
30
|
+
* Convert Unix timestamp to DateTime
|
|
31
|
+
* @param unixTimestamp - Unix timestamp
|
|
32
|
+
* @returns Date object
|
|
33
|
+
*/
|
|
34
|
+
static unixToDateTime(unixTimestamp: number): Date;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../lib/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAc,EAAE,aAAa,EAAsB,MAAM,OAAO,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAMjG;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,aAAa,CA6BxE;AAED;;GAEG;AACH,qBAAa,KAAK;IACd;;;;OAIG;IACH,MAAM,CAAC,iBAAiB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM;IAKzD;;;;OAIG;IACH,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;CAGrD"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Utility functions for TypeB SDK
|
|
4
|
+
*/
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.Utils = void 0;
|
|
10
|
+
exports.replaceRouteParams = replaceRouteParams;
|
|
11
|
+
exports.createHttpClient = createHttpClient;
|
|
12
|
+
const axios_1 = __importDefault(require("axios"));
|
|
13
|
+
/**
|
|
14
|
+
* Replace route parameters in URL templates
|
|
15
|
+
* @param route - Route template with placeholders
|
|
16
|
+
* @param params - Object with parameter values
|
|
17
|
+
* @returns Formatted URL
|
|
18
|
+
*/
|
|
19
|
+
function replaceRouteParams(route, params) {
|
|
20
|
+
let formattedRoute = route;
|
|
21
|
+
for (const [key, value] of Object.entries(params)) {
|
|
22
|
+
formattedRoute = formattedRoute.replace(`{${key}}`, String(value));
|
|
23
|
+
}
|
|
24
|
+
return formattedRoute;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Create a configured HTTP client instance
|
|
28
|
+
* @param config - HTTP client configuration
|
|
29
|
+
* @returns Configured Axios instance
|
|
30
|
+
*/
|
|
31
|
+
function createHttpClient(config) {
|
|
32
|
+
const client = axios_1.default.create({
|
|
33
|
+
baseURL: config.baseURL,
|
|
34
|
+
timeout: config.timeout,
|
|
35
|
+
headers: {
|
|
36
|
+
'Content-Type': 'application/json',
|
|
37
|
+
'Accept': 'application/json',
|
|
38
|
+
...config.headers,
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
// Add request interceptor for error handling
|
|
42
|
+
client.interceptors.request.use((request) => request, (error) => {
|
|
43
|
+
console.error('Request error:', error);
|
|
44
|
+
return Promise.reject(error);
|
|
45
|
+
});
|
|
46
|
+
client.interceptors.response.use((response) => response, (error) => {
|
|
47
|
+
console.error('Response error:', error);
|
|
48
|
+
return Promise.reject(error);
|
|
49
|
+
});
|
|
50
|
+
return client;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Utility class for WebSocket data processing
|
|
54
|
+
*/
|
|
55
|
+
class Utils {
|
|
56
|
+
/**
|
|
57
|
+
* Get decimal divisor based on instrument token
|
|
58
|
+
* @param instrumentToken - The instrument token
|
|
59
|
+
* @returns Decimal divisor
|
|
60
|
+
*/
|
|
61
|
+
static getDecimalDivisor(instrumentToken) {
|
|
62
|
+
// Default divisor logic - can be customized based on TypeB protocol
|
|
63
|
+
return 100;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Convert Unix timestamp to DateTime
|
|
67
|
+
* @param unixTimestamp - Unix timestamp
|
|
68
|
+
* @returns Date object
|
|
69
|
+
*/
|
|
70
|
+
static unixToDateTime(unixTimestamp) {
|
|
71
|
+
return new Date(unixTimestamp * 1000);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
exports.Utils = Utils;
|
|
75
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../lib/utils.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;AAWH,gDAMC;AAOD,4CA6BC;AAnDD,kDAAiE;AAGjE;;;;;GAKG;AACH,SAAgB,kBAAkB,CAAC,KAAa,EAAE,MAAuC;IACrF,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAChD,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,GAAG,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,cAAc,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,MAAwB;IACrD,MAAM,MAAM,GAAG,eAAK,CAAC,MAAM,CAAC;QACxB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE;YACL,cAAc,EAAE,kBAAkB;YAClC,QAAQ,EAAE,kBAAkB;YAC5B,GAAG,MAAM,CAAC,OAAO;SACpB;KACJ,CAAC,CAAC;IAEH,6CAA6C;IAC7C,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAC3B,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,EACpB,CAAC,KAAK,EAAE,EAAE;QACN,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QACvC,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC,CACJ,CAAC;IAEF,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAC5B,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EACtB,CAAC,KAAK,EAAE,EAAE;QACN,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QACxC,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC,CACJ,CAAC;IAEF,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAa,KAAK;IACd;;;;OAIG;IACH,MAAM,CAAC,iBAAiB,CAAC,eAAuB;QAC5C,oEAAoE;QACpE,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,cAAc,CAAC,aAAqB;QACvC,OAAO,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAC1C,CAAC;CACJ;AAnBD,sBAmBC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-websocket.d.ts","sourceRoot":"","sources":["../../test/test-websocket.ts"],"names":[],"mappings":""}
|