UNPKG

59.8 kBJavaScriptView Raw
1import https from 'https';
2import { WebSocket } from 'ws';
3
4function queryString(data) {
5 if (data == null)
6 return '';
7 var a = new URLSearchParams();
8 for (var k in data)
9 a.append(k, data[k]);
10 return '?' + a.toString();
11}
12function getHttpError(error) {
13 var a = error;
14 a.code = 0;
15 a.response = null;
16 return a;
17}
18function getHttpResponseError(error, code, response) {
19 var a = error;
20 a.code = code;
21 a.response = response;
22 return a;
23}
24function hasHeader(key, o) {
25 if (o.headers == null)
26 return false;
27 if (o.headers.hasOwnProperty(key))
28 return true;
29 if (o.headers.hasOwnProperty(key.toLowerCase()))
30 return true;
31 return false;
32}
33function setHeaders(headers, o) {
34 if (o.body != null && !hasHeader('Content-Type', o)) {
35 headers['content-type'] = 'application/json; charset=utf-8';
36 }
37 if (!hasHeader('Accept', o)) {
38 headers['accept'] = 'application/json, text/*';
39 }
40}
41function httpRequest(o) {
42 return new Promise((resolve, reject) => {
43 var { url, method, headers, timeout } = o;
44 setHeaders(headers, o);
45 var req = https.request(url, { method, headers, timeout }, res => {
46 var body = '';
47 res.setEncoding('utf8');
48 res.on('error', e => reject(getHttpResponseError(e, res.statusCode, body)));
49 res.on('data', chunk => body += chunk);
50 res.on('end', () => resolve(body));
51 });
52 req.on('error', e => reject(getHttpError(e)));
53 if (o.body != null) {
54 req.useChunkedEncodingByDefault = true;
55 req.write(JSON.stringify(o.body));
56 }
57 req.end();
58 });
59}
60function httpRequestText(options) {
61 return httpRequest(options);
62}
63async function httpRequestJson(options) {
64 var response = await httpRequest(options);
65 return JSON.parse(response);
66}
67
68const API_URL = 'https://api.fyers.in/api/v2/';
69const DATA_URL = 'https://api.fyers.in/data-rest/v2/';
70const SYMBOLS_URL = 'https://public.fyers.in/sym_details/';
71function requestStep(auth, method, path, query, body) {
72 var url = path + queryString(query);
73 var headers = {};
74 if (auth != null)
75 headers['authorization'] = auth.app_id + ':' + auth.access_token;
76 return { url, method, headers, body };
77}
78function requestText(auth, method, path, query, body) {
79 return httpRequestText(requestStep(auth, method, path, query, body));
80}
81function requestJson(auth, method, path, query, body) {
82 return httpRequestJson(requestStep(auth, method, path, query, body));
83}
84function requestApi(auth, method, path, query, body) {
85 return requestJson(auth, method, API_URL + path, query, body);
86}
87function requestData(auth, method, path, query, body) {
88 return requestJson(auth, method, DATA_URL + path, query, body);
89}
90function requestSymbols(auth, method, path, query, body) {
91 return requestText(auth, method, SYMBOLS_URL + path, query, body);
92}
93function loginStep1$1(options) {
94 return requestStep(null, 'GET', API_URL + 'generate-authcode', options, null);
95}
96function loginStep2$1(options) {
97 return requestStep(null, 'POST', API_URL + 'validate-authcode', null, options);
98}
99function getProfile$1(auth) {
100 return requestApi(auth, 'GET', 'profile', null, null);
101}
102function getFunds$1(auth) {
103 return requestApi(auth, 'GET', 'funds', null, null);
104}
105function getHoldings$1(auth) {
106 return requestApi(auth, 'GET', 'holdings', null, null);
107}
108function getOrder$1(auth, options) {
109 return requestApi(auth, 'GET', 'orders', options, null);
110}
111function getOrders$1(auth) {
112 return requestApi(auth, 'GET', 'orders', null, null);
113}
114function getPositions$1(auth) {
115 return requestApi(auth, 'GET', 'positions', null, null);
116}
117function getTrades$1(auth) {
118 return requestApi(auth, 'GET', 'tradebook', null, null);
119}
120function placeOrder$1(auth, options) {
121 return requestApi(auth, 'POST', 'orders', null, options);
122}
123function placeOrders$1(auth, options) {
124 return requestApi(auth, 'POST', 'orders-multi', null, options);
125}
126function modifyOrder$1(auth, options) {
127 return requestApi(auth, 'PUT', 'orders', null, options);
128}
129function modifyOrders$1(auth, options) {
130 return requestApi(auth, 'PUT', 'orders-multi', null, options);
131}
132function cancelOrder$1(auth, options) {
133 return requestApi(auth, 'DELETE', 'orders', null, options);
134}
135function cancelOrders$1(auth, options) {
136 return requestApi(auth, 'DELETE', 'orders-multi', null, options);
137}
138function exitPosition$1(auth, options) {
139 return requestApi(auth, 'DELETE', 'positions', null, options);
140}
141function exitAllPositions$1(auth) {
142 return requestApi(auth, 'DELETE', 'positions', null, {});
143}
144function convertPosition$1(auth, options) {
145 return requestApi(auth, 'PUT', 'positions', null, options);
146}
147function getMarketStatus$1(auth) {
148 return requestApi(auth, 'GET', 'market-status', null, null);
149}
150function getMarketHistory$1(auth, options) {
151 return requestData(auth, 'GET', 'history/', options, null);
152}
153function getMarketQuotes$1(auth, options) {
154 return requestData(auth, 'GET', 'quotes/', options, null);
155}
156function getMarketDepth$1(auth, options) {
157 return requestData(auth, 'GET', 'depth/', options, null);
158}
159function getSymbolMaster$1(auth, options) {
160 var { exchange, segment } = options;
161 return requestSymbols(null, 'GET', exchange + '_' + segment + '.csv', null, null);
162}
163function generateEdisTpin$1(auth) {
164 return requestApi(auth, 'GET', 'tpin', null, null);
165}
166function getEdisTransactions$1(auth) {
167 return requestApi(auth, 'GET', 'details', null, null);
168}
169function submitEdisHoldingsStep$1(auth, options) {
170 return requestStep(auth, 'POST', 'index', null, options);
171}
172function inquireEdisTransaction$1(auth, options) {
173 return requestApi(auth, 'POST', 'inquiry', null, options);
174}
175
176var http = /*#__PURE__*/Object.freeze({
177 __proto__: null,
178 API_URL: API_URL,
179 DATA_URL: DATA_URL,
180 SYMBOLS_URL: SYMBOLS_URL,
181 loginStep1: loginStep1$1,
182 loginStep2: loginStep2$1,
183 getProfile: getProfile$1,
184 getFunds: getFunds$1,
185 getHoldings: getHoldings$1,
186 getOrder: getOrder$1,
187 getOrders: getOrders$1,
188 getPositions: getPositions$1,
189 getTrades: getTrades$1,
190 placeOrder: placeOrder$1,
191 placeOrders: placeOrders$1,
192 modifyOrder: modifyOrder$1,
193 modifyOrders: modifyOrders$1,
194 cancelOrder: cancelOrder$1,
195 cancelOrders: cancelOrders$1,
196 exitPosition: exitPosition$1,
197 exitAllPositions: exitAllPositions$1,
198 convertPosition: convertPosition$1,
199 getMarketStatus: getMarketStatus$1,
200 getMarketHistory: getMarketHistory$1,
201 getMarketQuotes: getMarketQuotes$1,
202 getMarketDepth: getMarketDepth$1,
203 getSymbolMaster: getSymbolMaster$1,
204 generateEdisTpin: generateEdisTpin$1,
205 getEdisTransactions: getEdisTransactions$1,
206 submitEdisHoldingsStep: submitEdisHoldingsStep$1,
207 inquireEdisTransaction: inquireEdisTransaction$1
208});
209
210const MARKET_DATA_URL = "wss://api.fyers.in/socket/v2/dataSock";
211const ORDER_UPDATE_URL = "wss://api.fyers.in/socket/v2/orderSock";
212const MARKET_DATA_QUERY = "user-agent=fyers-api&type=symbolUpdate";
213const ORDER_UPDATE_QUERY = "user-agent=fyers-api&type=orderUpdate";
214const PING_INTERVAL = 5000;
215function writeHeader(a, x, i) {
216 a.token = x.getBigUint64(i + 0);
217 a.tt = x.getUint32(i + 8);
218 a.fyCode = x.getUint16(i + 12);
219 a.marketStat = x.getUint16(i + 14);
220 a.pktlen = x.getUint16(i + 16);
221 a.L2 = x.getUint8(i + 18);
222}
223function writeOiData(a, x, i) {
224 a.oi = BigInt(x.getUint32(i + 0));
225 a.pdoi = BigInt(x.getUint32(i + 4));
226}
227function writeCommonData(a, x, i, hasOi) {
228 a.price_conv = x.getUint32(i + 0);
229 a.ltp = x.getUint32(i + 4);
230 a.open_price = x.getUint32(i + 8);
231 a.high_price = x.getUint32(i + 12);
232 a.low_price = x.getUint32(i + 16);
233 a.prev_close_price = x.getUint32(i + 20);
234 a.o = x.getUint32(i + 24);
235 a.h = x.getUint32(i + 28);
236 a.l = x.getUint32(i + 32);
237 a.c = x.getUint32(i + 36);
238 a.v = x.getBigUint64(i + 40);
239 if (!hasOi)
240 return;
241 a.oi = x.getBigUint64(i + 48);
242 a.pdoi = x.getBigUint64(i + 56);
243}
244function writeL1Data(a, x, i, bidAsk) {
245 a.LTQ = x.getUint32(i + 0);
246 a.L2_LTT = x.getUint32(i + 4);
247 a.ATP = x.getUint32(i + 8);
248 a.volume = x.getUint32(i + 12);
249 a.tot_buy = x.getBigUint64(i + 16);
250 a.tot_sell = x.getBigUint64(i + 24);
251 if (!bidAsk)
252 return;
253 a.bid = x.getUint32(i + 32);
254 a.ask = x.getUint32(i + 36);
255}
256function toL2MarketOffer(x, i) {
257 return {
258 price: x.getUint32(i + 0),
259 volume: x.getUint32(i + 4),
260 ord: x.getUint32(i + 8),
261 };
262}
263function writeL2Data(a, x, i) {
264 var bids = [], asks = [];
265 for (var j = 0; j < 60; j += 12) {
266 bids.push(toL2MarketOffer(x, i + j));
267 asks.push(toL2MarketOffer(x, i + j + 60));
268 }
269 a.bids = bids;
270 a.asks = asks;
271}
272function writeMarketData(a, x, i) {
273 writeHeader(a, x, i + 0);
274 var hasOi = a.fyCode === 7202 || a.fyCode === 31038;
275 var l1Off = hasOi ? 88 : 72;
276 if (a.fyCode === 7202)
277 writeOiData(a, x, i + 24);
278 else
279 writeCommonData(a, x, i + 24, hasOi);
280 if (a.fyCode === 7208 || a.fyCode === 31038)
281 writeL1Data(a, x, i + l1Off, a.L2 !== 1);
282 if (a.L2 === 1)
283 writeL2Data(a, x, i + l1Off + 32);
284}
285function toMarketData(x, i) {
286 var a = {
287 token: BigInt(0),
288 tt: 0,
289 fyCode: 0,
290 marketStat: 0,
291 pktlen: 0,
292 L2: 0,
293 price_conv: 0,
294 ltp: 0,
295 open_price: 0,
296 high_price: 0,
297 low_price: 0,
298 prev_close_price: 0,
299 o: 0,
300 h: 0,
301 l: 0,
302 c: 0,
303 v: BigInt(0),
304 oi: BigInt(0),
305 pdoi: BigInt(0),
306 LTQ: 0,
307 L2_LTT: 0,
308 ATP: 0,
309 volume: 0,
310 tot_buy: BigInt(0),
311 tot_sell: BigInt(0),
312 bid: 0,
313 ask: 0,
314 bids: null,
315 asks: null,
316 };
317 writeMarketData(a, x, i);
318 return a;
319}
320class Connection extends WebSocket {
321 constructor() {
322 super(...arguments);
323 this.recievers = [];
324 }
325}
326function waitResponse(conn) {
327 return new Promise((resolve, reject) => conn.recievers.push({ resolve, reject }));
328}
329function connectOrderUpdate$1(auth, fn) {
330 return new Promise((resolve, reject) => {
331 var { app_id, access_token } = auth;
332 var query = `${ORDER_UPDATE_QUERY}&access_token=${app_id}:${access_token}`;
333 var conn = new Connection(`${ORDER_UPDATE_URL}?${query}`);
334 var ping = setInterval(() => {
335 if (conn.readyState !== WebSocket.OPEN)
336 return;
337 conn.send("ping");
338 }, PING_INTERVAL);
339 conn.binaryType = "arraybuffer";
340 conn.onerror = e => {
341 for (var r of conn.recievers)
342 r.reject(e.error);
343 clearInterval(ping);
344 reject(e.error);
345 };
346 conn.onopen = () => resolve(conn);
347 conn.onmessage = e => {
348 if (typeof e.data !== "string")
349 return;
350 if (e.data === "pong")
351 return;
352 var x = JSON.parse(e.data);
353 fn(x);
354 if (x.hasOwnProperty("d") || x.code === 0)
355 return;
356 if (conn.recievers.length > 0)
357 conn.recievers.shift().resolve(x);
358 };
359 });
360}
361function subscribeOrderUpdate$1(conn) {
362 var req = { T: "SUB_ORD", SLIST: ["orderUpdate"], SUB_T: 1 };
363 conn.send(JSON.stringify(req));
364 return waitResponse(conn);
365}
366function unsubscribeOrderUpdate$1(conn) {
367 var req = { T: "SUB_ORD", SLIST: ["orderUpdate"], SUB_T: 0 };
368 conn.send(JSON.stringify(req));
369 return waitResponse(conn);
370}
371function connectMarketData$1(auth, fn) {
372 return new Promise((resolve, reject) => {
373 var { app_id, access_token } = auth;
374 var query = `${MARKET_DATA_QUERY}&access_token=${app_id}:${access_token}`;
375 var conn = new Connection(`${MARKET_DATA_URL}?${query}`);
376 var ping = setInterval(() => {
377 if (conn.readyState !== WebSocket.OPEN)
378 return;
379 conn.send("ping");
380 }, PING_INTERVAL);
381 conn.binaryType = "arraybuffer";
382 conn.onerror = e => {
383 for (var r of conn.recievers)
384 r.reject(e.error);
385 clearInterval(ping);
386 reject(e.error);
387 };
388 conn.onopen = () => resolve(conn);
389 conn.onmessage = e => {
390 if (typeof e.data === "string") {
391 if (e.data === "pong")
392 return;
393 var x = JSON.parse(e.data);
394 fn(x);
395 if (x.hasOwnProperty("d") || x.code === 0)
396 return;
397 if (conn.recievers.length > 0)
398 conn.recievers.shift().resolve(x);
399 }
400 else {
401 var binary = new DataView(e.data);
402 fn({ s: "ok", d: toMarketData(binary, 0) });
403 }
404 };
405 });
406}
407function subscribeMarketQuote$1(conn, symbols) {
408 var req = { T: "SUB_DATA", TLIST: symbols, SUB_T: 1 };
409 conn.send(JSON.stringify(req));
410 return waitResponse(conn);
411}
412function subscribeMarketDepth$1(conn, symbols) {
413 var req = { T: "SUB_L2", L2LIST: symbols, SUB_T: 1 };
414 conn.send(JSON.stringify(req));
415 return waitResponse(conn);
416}
417function unsubscribeMarketQuote$1(conn, symbols) {
418 var req = { T: "SUB_DATA", TLIST: symbols, SUB_T: 0 };
419 conn.send(JSON.stringify(req));
420 return waitResponse(conn);
421}
422function unsubscribeMarketDepth$1(conn, symbols) {
423 var req = { T: "SUB_L2", L2LIST: symbols, SUB_T: 0 };
424 conn.send(JSON.stringify(req));
425 return waitResponse(conn);
426}
427
428var websocket = /*#__PURE__*/Object.freeze({
429 __proto__: null,
430 MARKET_DATA_URL: MARKET_DATA_URL,
431 ORDER_UPDATE_URL: ORDER_UPDATE_URL,
432 Connection: Connection,
433 connectOrderUpdate: connectOrderUpdate$1,
434 subscribeOrderUpdate: subscribeOrderUpdate$1,
435 unsubscribeOrderUpdate: unsubscribeOrderUpdate$1,
436 connectMarketData: connectMarketData$1,
437 subscribeMarketQuote: subscribeMarketQuote$1,
438 subscribeMarketDepth: subscribeMarketDepth$1,
439 unsubscribeMarketQuote: unsubscribeMarketQuote$1,
440 unsubscribeMarketDepth: unsubscribeMarketDepth$1
441});
442
443const TO_EXCHANGE = new Map([
444 [10, "NSE"],
445 [11, "MCX"],
446 [12, "BSE"],
447]);
448const EXCHANGE_DESCRIPTION = new Map([
449 ["NSE", "National Stock Exchange"],
450 ["MCX", "Multi Commodity Exchange"],
451 ["BSE", "Bombay Stock Exchange"],
452]);
453function toExchange(x) {
454 return TO_EXCHANGE.get(x);
455}
456function exchangeDescription(code) {
457 return EXCHANGE_DESCRIPTION.get(code);
458}
459function exchange(desc) {
460 if (/bse|native|bombay|mumbai/i.test(desc))
461 return "BSE";
462 if (/\bcom\b|mcx|multi|commodit/i.test(desc))
463 return "MCX";
464 return "NSE";
465}
466const TO_SEGMENT = new Map([
467 [10, "CM"],
468 [11, "FO"],
469 [12, "CD"],
470 [20, "COM"],
471]);
472const SEGMENT_DESCRIPTION = new Map([
473 ["CM", "Capital Market"],
474 ["FO", "Equity Derivatives"],
475 ["CD", "Currency Derivatives"],
476 ["COM", "Commodity Derivatives"],
477]);
478function toSegment(x) {
479 return TO_SEGMENT.get(x);
480}
481function segmentDescription(code) {
482 return SEGMENT_DESCRIPTION.get(code);
483}
484function segment(desc) {
485 if (/\bcom\b|mcx|multi|commodit/i.test(desc))
486 return "COM";
487 if (/\bcd\b|currenc/i.test(desc))
488 return "CD";
489 if (/\bfn?o\b|fut|opt|deriv/i.test(desc))
490 return "FO";
491 return "CM";
492}
493const TO_POSITION_SIDE = new Map([
494 [1, "LONG"],
495 [-1, "SHORT"],
496 [0, "CLOSED"],
497]);
498const FROM_POSITION_SIDE = new Map([
499 ["LONG", 1],
500 ["SHORT", -1],
501 ["CLOSED", 0],
502]);
503const POSITION_SIDE_DESCRIPTION = new Map([
504 ["LONG", "Long position"],
505 ["SHORT", "Short position"],
506 ["CLOSED", "Closed position"],
507]);
508function toPositionSide(x) {
509 return TO_POSITION_SIDE.get(x);
510}
511function fromPositionSide(x) {
512 return FROM_POSITION_SIDE.get(x);
513}
514function positionSideDescription(code) {
515 return POSITION_SIDE_DESCRIPTION.get(code);
516}
517function positionSide(desc) {
518 if (/up|buy|long|rally/i.test(desc))
519 return "LONG";
520 if (/down|sell|short|crash/i.test(desc))
521 return "SHORT";
522 return "CLOSED";
523}
524const TO_ORDER_SIDE = new Map([
525 [1, "BUY"],
526 [-1, "SELL"],
527]);
528const FROM_ORDER_SIDE = new Map([
529 ["BUY", 1],
530 ["SELL", -1],
531]);
532const ORDER_SIDE_DESCRIPTION = new Map([
533 ["BUY", "Buy"],
534 ["SELL", "Sell"],
535]);
536function toOrderSide(x) {
537 return TO_ORDER_SIDE.get(x);
538}
539function fromOrderSide(x) {
540 return FROM_ORDER_SIDE.get(x);
541}
542function orderSideDescription(code) {
543 return ORDER_SIDE_DESCRIPTION.get(code);
544}
545function orderSide(desc) {
546 return /down|sell|short|crash/i.test(desc) ? "SELL" : "BUY";
547}
548const TO_ORDER_SOURCE = new Map([
549 ["M", "MOBILE"],
550 ["W", "WEB"],
551 ["R", "ONE"],
552 ["A", "ADMIN"],
553 ["ITS", "API"],
554]);
555const ORDER_SOURCE_DESCRIPTION = new Map([
556 ["MOBILE", "FYERS Mobile"],
557 ["WEB", "FYERS Web"],
558 ["ONE", "FYERS One"],
559 ["ADMIN", "Admin"],
560 ["API", "FYERS API"],
561]);
562function toOrderSource(x) {
563 return TO_ORDER_SOURCE.get(x);
564}
565function orderSourceDescription(code) {
566 return ORDER_SOURCE_DESCRIPTION.get(code);
567}
568function orderSource(desc) {
569 if (/its|api|sys/i.test(desc))
570 return "API";
571 if (/one|desk/i.test(desc))
572 return "ONE";
573 if (/mob|app/i.test(desc))
574 return "MOBILE";
575 if (/admin/i.test(desc))
576 return "ADMIN";
577 return "WEB";
578}
579const TO_ORDER_STATUS = new Map([
580 [1, "CANCELLED"],
581 [2, "TRADED"],
582 [4, "TRANSIT"],
583 [5, "REJECTED"],
584 [6, "PENDING"],
585 [7, "EXPIRED"],
586]);
587const ORDER_STATUS_DESCRIPTION = new Map([
588 ["CANCELLED", "Cancelled"],
589 ["TRADED", "Traded / Filled"],
590 ["TRANSIT", "Transit"],
591 ["REJECTED", "Rejected"],
592 ["PENDING", "Pending"],
593 ["EXPIRED", "Expired"],
594]);
595const ORDER_STATUS_CODE = new Map([
596 ["C", "CANCELLED"],
597 ["F", "TRADED"],
598 ["T", "TRANSIT"],
599 ["R", "REJECTED"],
600 ["P", "PENDING"],
601 ["E", "EXPIRED"],
602]);
603function toOrderStatus(x) {
604 return TO_ORDER_STATUS.get(x);
605}
606function orderStatusDescription(code) {
607 return ORDER_STATUS_DESCRIPTION.get(code);
608}
609function orderStatus(desc) {
610 var key = desc.charAt(0).toUpperCase();
611 if (/traded/i.test(desc))
612 key = "F";
613 return ORDER_STATUS_CODE.get(key);
614}
615const TO_ORDER_TYPE = new Map([
616 [1, "LIMIT"],
617 [2, "MARKET"],
618 [3, "SL_MARKET"],
619 [4, "SL_LIMIT"],
620]);
621const FROM_ORDER_TYPE = new Map([
622 ["LIMIT", 1],
623 ["MARKET", 2],
624 ["SL_MARKET", 3],
625 ["SL_LIMIT", 4],
626]);
627const ORDER_TYPE_DESCRIPTION = new Map([
628 ["LIMIT", "Limit order"],
629 ["MARKET", "Market order"],
630 ["SL_MARKET", "Stop order (SL-M)"],
631 ["SL_LIMIT", "Stoplimit order (SL-L)"],
632]);
633const ORDER_TYPE_CODE = new Map([
634 ["L", "LIMIT"],
635 ["M", "MARKET"],
636 ["S", "SL_MARKET"],
637 ["R", "SL_LIMIT"],
638]);
639function toOrderType(x) {
640 return TO_ORDER_TYPE.get(x);
641}
642function fromOrderType(x) {
643 return FROM_ORDER_TYPE.get(x);
644}
645function orderTypeDescription(code) {
646 return ORDER_TYPE_DESCRIPTION.get(code);
647}
648function orderType(desc) {
649 var key = desc.charAt(0).toUpperCase();
650 if (/s.+l(?!oss)/i.test(desc))
651 key = "R";
652 return ORDER_TYPE_CODE.get(key);
653}
654const ORDER_VALIDITY_DESCRIPTION = new Map([
655 ["DAY", "End of day validity"],
656 ["IOC", "Immediate or Cancel validity"],
657]);
658function toOrderValidity(x) {
659 return x;
660}
661function orderValidityDescription(code) {
662 return ORDER_VALIDITY_DESCRIPTION.get(code);
663}
664function orderValidity(desc) {
665 return /ioc|cancel|immediate/i.test(desc) ? "IOC" : "DAY";
666}
667const OPTION_TYPE_DESCRIPTION = new Map([
668 ["CE", "Call option"],
669 ["PE", "Put option"],
670]);
671function optionTypeDescription(code) {
672 return OPTION_TYPE_DESCRIPTION.get(code);
673}
674function optionType(desc) {
675 return /pe|put|sell/i.test(desc) ? "PE" : "CE";
676}
677const DERIVATIVE_TYPE_DESCRIPTION = new Map([
678 ["FUT", "Future"],
679 ["CE", "Call option"],
680 ["PE", "Put option"],
681]);
682function derivativeTypeDescription(code) {
683 return DERIVATIVE_TYPE_DESCRIPTION.get(code);
684}
685function derivativeType(desc) {
686 return /fut|lat|buy/.test(desc) ? "FUT" : optionType(desc);
687}
688const HOLDING_TYPE_DESCRIPTION = new Map([
689 ["T1", "The shares are purchased but not yet delivered to the demat account"],
690 ["HLD", "The shares are purchased and are available in the demat account"],
691]);
692function toHoldingType(x) {
693 return x;
694}
695function holdingTypeDescription(code) {
696 return HOLDING_TYPE_DESCRIPTION.get(code);
697}
698function holdingType(desc) {
699 return /un|not|pend|t1/i.test(desc) ? "T1" : "HLD";
700}
701const PRODUCT_TYPE_DESCRIPTION = new Map([
702 ["CNC", "Cash N Carry or Delivery Order, for equity only"],
703 ["INTRADAY", "Intraday Order, applicable for all segments"],
704 ["MARGIN", "Margin Order, applicable only for derivatives"],
705 ["CO", "Cover Order"],
706 ["BO", "Bracket Order"],
707]);
708const PRODUCT_TYPE_CODE = new Map([
709 ["D", "CNC"],
710 ["I", "INTRADAY"],
711 ["M", "MARGIN"],
712 ["C", "CO"],
713 ["B", "BO"],
714]);
715function toProductType(x) {
716 return x;
717}
718function fromProductType(x) {
719 return x;
720}
721function productTypeDescription(code) {
722 return PRODUCT_TYPE_DESCRIPTION.get(code);
723}
724function productType(desc) {
725 var key = desc.charAt(0).toUpperCase();
726 if (/cnc|cash|carry|deliver/i.test(desc))
727 key = "D";
728 return PRODUCT_TYPE_CODE.get(key);
729}
730const TO_INSTRUMENT_TYPE = new Map([
731 [0, "EQ"],
732 [1, "PREFSHARES"],
733 [2, "DEBENTURES"],
734 [3, "WARRANTS"],
735 [4, "MISC"],
736 [10, "INDEX"],
737 [11, "FUTIDX"],
738 [12, "FUTIVX"],
739 [13, "FUTSTK"],
740 [14, "OPTIDX"],
741 [15, "OPTSTK"],
742 [16, "FUTCUR"],
743 [17, "FUTIRT"],
744 [18, "FUTIRC"],
745 [19, "OPTCUR"],
746 [20, "UNDCUR"],
747 [21, "UNDIRC"],
748 [22, "UNDIRT"],
749 [23, "UNDIRD"],
750 [24, "INDEX_CD"],
751 [25, "FUTIRD"],
752 [30, "FUTCOM"],
753 [31, "OPTFUT"],
754 [32, "OPTCOM"],
755]);
756const INSTRUMENT_TYPE_DESCRIPTION = new Map([
757 ["EQ", "Equity Shares"],
758 ["PREFSHARES", "Preference Shares"],
759 ["DEBENTURES", "Collateral-free Debt"],
760 ["WARRANTS", "Warrants on Stock"],
761 ["MISC", "Miscellaneous"],
762 ["INDEX", "Stock Market Index"],
763 ["FUTIDX", "Futures on Index"],
764 ["FUTIVX", "Futures on Volatility Index"],
765 ["FUTSTK", "Futures on Stock"],
766 ["OPTIDX", "Options on Index"],
767 ["OPTSTK", "Options on Stock"],
768 ["FUTCUR", "Futures on Currency"],
769 ["FUTIRT", "Futures on Government of India Treasury Bills"],
770 ["FUTIRC", "Futures on Government of India Bonds"],
771 ["OPTCUR", "Options on Currency"],
772 ["UNDCUR", "Underlying on Currency"],
773 ["UNDIRC", "Underlying on Government of Bonds"],
774 ["UNDIRT", "Underlying on Government of India Treasury Bills"],
775 ["UNDIRD", "Underlying on 10 Year Notional coupon bearing GOI security"],
776 ["INDEX_CD", "Market-indexed Certificate of deposit"],
777 ["FUTIRD", "Futures on 10 Year Notional coupon bearing GOI security"],
778 ["FUTCOM", "Futures on Commodity"],
779 ["OPTFUT", "Options on Commodity Futures"],
780 ["OPTCOM", "Options on Commodity"],
781]);
782function toInstrumentType(x) {
783 return TO_INSTRUMENT_TYPE.get(x);
784}
785function instrumentTypeDescription(code) {
786 return INSTRUMENT_TYPE_DESCRIPTION.get(code);
787}
788function instrumentType(desc) {
789 var fut = /fut|future/i.test(desc);
790 var opt = /opt|option/i.test(desc);
791 var idx = /idx|index/i.test(desc);
792 var und = /und|underlying/i.test(desc);
793 if (/com(\b|$)|commodit/i.test(desc)) {
794 if (opt)
795 return fut ? "OPTFUT" : "OPTCOM";
796 else if (idx)
797 return "FUTIDX";
798 else
799 return "FUTCOM";
800 }
801 else if (/(^|\b)und|cd(\b|$)|ir[cdt](\b|$)|cur|gov|bond|trea|coup/i.test(desc)) {
802 if (/irc(\b|$)|bond/i.test(desc))
803 return und ? "UNDIRC" : "FUTIRC";
804 else if (/ird(\b|$)|coup/i.test(desc))
805 return und ? "UNDIRD" : "FUTIRD";
806 else if (/irt(\b|$)|trea/i.test(desc))
807 return und ? "UNDIRT" : "FUTIRT";
808 else
809 return idx ? "INDEX_CD" : (opt ? "OPTCUR" : "FUTCUR");
810 }
811 else if (fut || opt) {
812 if (/ivx|volatil/i.test(desc))
813 return "FUTIVX";
814 else if (idx)
815 return opt ? "OPTIDX" : "FUTIDX";
816 else
817 return opt ? "OPTSTK" : "FUTSTK";
818 }
819 else {
820 if (idx)
821 return "INDEX";
822 else if (/misc/i.test(desc))
823 return "MISC";
824 else if (/warrant/i.test(desc))
825 return "WARRANTS";
826 else if (/deb/i.test(desc))
827 return "DEBENTURES";
828 else if (/pref/i.test(desc))
829 return "PREFSHARES";
830 }
831 return "EQ";
832}
833const RSYMBOL_NAME = /^\w+:(.+?)-\w+$|^\w+:(.+?)\d{2}\w{3}FUT$|^\w+:(.+?)\d{2}\w{3}[\d\.]+[CP]E$|^\w+:(.+?)\d{2}\w{1}\d{2}[\d\.]+[CP]E$/;
834function toSymbolDetails(row) {
835 var [token, description, , lotSize, , isin, , , , symbol] = row.split(',');
836 return { symbol, token, description, lotSize: parseInt(lotSize, 10), isin: isin || "" };
837}
838function symbolName(code) {
839 var m = RSYMBOL_NAME.exec(code);
840 return m[1] || m[2] || m[3] || m[4];
841}
842function symbolExchange(code) {
843 var i = code.indexOf(":");
844 return code.substring(0, i);
845}
846function symbolSeries(code) {
847 var i = code.lastIndexOf("-");
848 return i > 0 ? code.substring(i) : null;
849}
850function symbolOptionType(code) {
851 var a = code.substring(code.length - 2);
852 return a === "CE" || a === "PE" ? a : null;
853}
854function symbolDerivativeType(code) {
855 var m = /(?:FUT|CE|PE)$/.exec(code);
856 return m != null ? m[0] : null;
857}
858function symbolStrikePrice(code) {
859 var RSTRIKE = /([\d\.]+)[CP]E$/, m = RSTRIKE.exec(code);
860 return m != null ? parseFloat(m[1]) : 0;
861}
862function symbolToken(code, map) {
863 return map.get(code).token;
864}
865function symbolDescription(code, map) {
866 return map.get(code).description;
867}
868function symbolIsin(code, map) {
869 return map.get(code).isin;
870}
871function symbolLotSize(code, map) {
872 return map.get(code).lotSize;
873}
874function fromAuthorization(x) {
875 return {
876 app_id: x.appId,
877 access_token: x.accessToken,
878 };
879}
880function fromLoginStep1Request(x) {
881 return {
882 client_id: x.appId,
883 redirect_uri: x.redirectUrl,
884 response_type: "code",
885 state: x.state,
886 };
887}
888function fromLoginStep2Request(x) {
889 return {
890 grant_type: "authorization_code",
891 appIdHash: x.appHash,
892 code: x.authorizationCode,
893 };
894}
895function toProfile(x) {
896 var d = x.data;
897 return {
898 id: d.fy_id,
899 email: d.email_id,
900 name: d.name,
901 pan: d.PAN,
902 };
903}
904function toFunds(x) {
905 var e = {};
906 var c = {};
907 for (var l of x.fund_limit) {
908 switch (l.id) {
909 case 9 :
910 e.start = l.equityAmount;
911 c.start = l.commodityAmount;
912 break;
913 case 6 :
914 e.deposits = l.equityAmount;
915 c.deposits = l.commodityAmount;
916 break;
917 case 4 :
918 e.realizedReturns = l.equityAmount;
919 c.realizedReturns = l.commodityAmount;
920 break;
921 case 5 :
922 e.collaterals = l.equityAmount;
923 c.collaterals = l.commodityAmount;
924 break;
925 case 8 :
926 e.adhoc = l.equityAmount;
927 c.adhoc = l.commodityAmount;
928 break;
929 case 2 :
930 e.utilized = l.equityAmount;
931 c.utilized = l.commodityAmount;
932 break;
933 case 7 :
934 e.receivables = l.equityAmount;
935 c.receivables = l.commodityAmount;
936 break;
937 case 10 :
938 e.available = l.equityAmount;
939 c.available = l.commodityAmount;
940 break;
941 case 3 :
942 e.clear = l.equityAmount;
943 c.clear = l.commodityAmount;
944 break;
945 case 1 :
946 e.total = l.equityAmount;
947 c.total = l.commodityAmount;
948 break;
949 }
950 }
951 return { equity: e, commodity: c };
952}
953function toHolding(x) {
954 return {
955 isin: x.isin,
956 symbol: x.symbol,
957 token: x.fytoken,
958 exchange: toExchange(x.exchange),
959 type: toHoldingType(x.holdingType),
960 quantity: x.quantity,
961 remainingQuantity: x.remainingQuantity,
962 buyPrice: x.costPrice,
963 buyValue: x.costPrice * x.quantity,
964 currentPrice: x.ltp,
965 currentValue: x.marketVal,
966 returns: x.pl,
967 returnsPercent: x.pl / (x.costPrice * x.quantity),
968 };
969}
970function toHoldingsOverall(xs, x) {
971 var settledCount = 0;
972 for (var h of xs)
973 if (h.holdingType === "HLD")
974 settledCount++;
975 return {
976 count: x.count_total,
977 settledCount,
978 investedValue: x.total_investment,
979 currentValue: x.total_current_value,
980 returns: x.total_pl,
981 returnsPercent: x.pnl_perc,
982 };
983}
984function toHoldings(x) {
985 return {
986 details: x.holdings.map(toHolding),
987 overall: toHoldingsOverall(x.holdings, x.overall),
988 };
989}
990function toOrder(x) {
991 return {
992 id: x.id,
993 symbol: x.symbol,
994 token: x.fytoken,
995 name: x.ex_sym,
996 description: x.description,
997 segment: toSegment(x.segment),
998 instrument: toInstrumentType(x.instrument),
999 exchange: toExchange(x.exchange),
1000 type: toOrderType(x.type),
1001 side: toOrderSide(x.side),
1002 productType: toProductType(x.productType),
1003 source: toOrderSource(x.source) || null,
1004 status: toOrderStatus(x.status),
1005 offline: x.offlineOrder === "True",
1006 limitPrice: x.limitPrice,
1007 stopPrice: x.stopPrice,
1008 quantity: x.qty,
1009 remainingQuantity: x.remainingQuantity,
1010 tradedQuantity: x.filledQty,
1011 disclosedQuantity: x.discloseQty,
1012 remainingDisclosedQuantity: x.dqQtyRem,
1013 validity: toOrderValidity(x.orderValidity),
1014 date: x.orderDateTime,
1015 parentId: x.parentId || null,
1016 priceChange: x.ch,
1017 priceChangePercent: x.chp,
1018 currentPrice: x.lp,
1019 tradedPrice: x.tradedPrice,
1020 message: x.message,
1021 pan: x.pan || null,
1022 clientId: x.clientId || null,
1023 };
1024}
1025function toOrdersOverall(x) {
1026 var a = {
1027 count: 0,
1028 openCount: 0,
1029 closedCount: 0,
1030 quantity: 0,
1031 remainingQuantity: 0,
1032 tradedQuantity: 0,
1033 disclosedQuantity: 0,
1034 remainingDisclosedQuantity: 0,
1035 };
1036 for (var o of x) {
1037 a.count++;
1038 a.openCount += o.status === 6 || o.status === 4 ? 1 : 0;
1039 a.quantity += o.qty;
1040 a.remainingQuantity += o.remainingQuantity;
1041 a.tradedQuantity += o.filledQty;
1042 a.disclosedQuantity += o.discloseQty;
1043 a.remainingDisclosedQuantity += o.dqQtyRem;
1044 }
1045 a.closedCount = a.count - a.openCount;
1046 return a;
1047}
1048function toOrders(x) {
1049 return {
1050 details: x.orderBook.map(toOrder),
1051 overall: toOrdersOverall(x.orderBook),
1052 };
1053}
1054function toPosition(x) {
1055 return {
1056 id: x.id,
1057 symbol: x.symbol,
1058 token: x.fytoken,
1059 segment: toSegment(x.segment),
1060 productType: toProductType(x.productType),
1061 side: toPositionSide(x.side),
1062 quantity: x.qty,
1063 quantityMultiplier: x.qtyMulti_com,
1064 buyPrice: x.buyAvg,
1065 buyQuantity: x.buyQty,
1066 buyValue: x.buyVal,
1067 sellPrice: x.sellAvg,
1068 sellQuantity: x.sellQty,
1069 sellValue: x.sellVal,
1070 netPrice: x.netAvg,
1071 netQuantity: x.netQty,
1072 returns: x.pl,
1073 realizedReturns: x.realized_profit,
1074 unrealizedReturns: x.unrealized_profit,
1075 crossCurrency: x.crossCurrency === "Y",
1076 rbiRefRate: x.rbiRefRate,
1077 currentPrice: x.ltp,
1078 };
1079}
1080function toPositionsOverall(xs, x) {
1081 var buyValue = 0, sellValue = 0;
1082 for (var p of xs) {
1083 buyValue += p.buyVal;
1084 sellValue += p.sellVal;
1085 }
1086 return {
1087 count: x.count_total,
1088 openCount: x.count_open,
1089 closedCount: x.count_total - x.count_open,
1090 buyValue,
1091 sellValue,
1092 returns: x.pl_total,
1093 realizedReturns: x.pl_realized,
1094 unrealizedReturns: x.pl_unrealized,
1095 };
1096}
1097function toPositions(x) {
1098 return {
1099 details: x.netPositions.map(toPosition),
1100 overall: toPositionsOverall(x.netPositions, x.overall),
1101 };
1102}
1103function toTrade(x) {
1104 return {
1105 id: x.id,
1106 orderId: x.orderNumber,
1107 symbol: x.symbol,
1108 token: x.fyToken,
1109 segment: toSegment(x.segment),
1110 exchange: toExchange(x.exchange),
1111 side: toOrderSide(x.transactionType),
1112 productType: toProductType(x.productType),
1113 orderType: toOrderType(x.orderType),
1114 orderDate: x.orderDateTime,
1115 price: x.tradePrice,
1116 quantity: x.tradedQty,
1117 value: x.tradeValue,
1118 clientId: x.clientId,
1119 };
1120}
1121function toTradesOverall(x) {
1122 var a = {
1123 count: 0,
1124 quantity: 0,
1125 value: 0,
1126 };
1127 for (var t of x) {
1128 a.count++;
1129 a.quantity += t.tradedQty;
1130 a.value += t.tradeValue;
1131 }
1132 return a;
1133}
1134function toTrades(x) {
1135 return {
1136 details: x.tradeBook.map(toTrade),
1137 overall: toTradesOverall(x.tradeBook),
1138 };
1139}
1140function fromPlaceOrder(x) {
1141 return {
1142 symbol: x.symbol,
1143 type: fromOrderType(x.type || "MARKET"),
1144 side: fromOrderSide(x.side || "BUY"),
1145 productType: x.productType || "CNC",
1146 limitPrice: x.limitPrice || 0,
1147 stopPrice: x.stopPrice || 0,
1148 qty: x.quantity,
1149 disclosedQty: x.disclosedQuantity || 0,
1150 validity: x.validity || "DAY",
1151 offlineOrder: x.offline ? "True" : "False",
1152 stopLoss: x.stopLoss || 0,
1153 takeProfit: x.takeProfit || 0,
1154 };
1155}
1156function fromModifyOrder(x) {
1157 return {
1158 id: x.id,
1159 type: fromOrderType(x.type),
1160 qty: x.quantity,
1161 disclosedQty: x.disclosedQuantity,
1162 limitPrice: x.limitPrice,
1163 stopPrice: x.stopPrice,
1164 };
1165}
1166function fromConvertPosition(x) {
1167 return {
1168 symbol: x.symbol,
1169 positionSide: fromPositionSide(x.side || "LONG"),
1170 convertQty: x.quantity,
1171 convertFrom: fromProductType(x.fromProductType || "INTRADAY"),
1172 convertTo: fromProductType(x.toProductType || "CNC"),
1173 };
1174}
1175function toMarketStatus(x) {
1176 return {
1177 exchange: toExchange(x.exchange),
1178 segment: toSegment(x.segment),
1179 type: x.market_type,
1180 status: x.status,
1181 };
1182}
1183function toMarketsStatusOverall(x) {
1184 var a = {
1185 count: 0,
1186 openCount: 0,
1187 closedCount: 0,
1188 };
1189 for (var s of x) {
1190 a.count++;
1191 if (s.status === "OPEN")
1192 a.openCount++;
1193 else
1194 a.closedCount++;
1195 }
1196 return a;
1197}
1198function toMarketsStatus(x) {
1199 return {
1200 details: x.marketStatus.map(toMarketStatus),
1201 overall: toMarketsStatusOverall(x.marketStatus),
1202 };
1203}
1204const CANDLE_RESOLUTIONS = [1, 2, 3, 5, 10, 15, 20, 30, 60, 120, 240, 1440];
1205function fromCandleResolution(x) {
1206 var R = 1, D = Infinity;
1207 for (var r of CANDLE_RESOLUTIONS) {
1208 var d = Math.abs(x - r);
1209 if (d < D) {
1210 R = r;
1211 D = d;
1212 }
1213 }
1214 return R === 1440 ? "D" : R.toString();
1215}
1216function fromGetMarketHistory(x) {
1217 return {
1218 symbol: x.symbol,
1219 resolution: fromCandleResolution(x.resolution),
1220 date_format: 0,
1221 range_from: x.fromDate.toString(),
1222 range_to: x.toDate.toString(),
1223 cont_flag: x.continuous ? "1" : "0",
1224 };
1225}
1226function toCandleShort(x) {
1227 return {
1228 date: x[0 ],
1229 openPrice: x[1 ],
1230 highPrice: x[2 ],
1231 lowPrice: x[3 ],
1232 closePrice: x[4 ],
1233 volume: x[5 ],
1234 };
1235}
1236function toCandle(x) {
1237 return {
1238 date: x.t,
1239 openPrice: x.o,
1240 highPrice: x.h,
1241 lowPrice: x.l,
1242 closePrice: x.c,
1243 volume: x.v,
1244 };
1245}
1246function toMarketHistoryOverall(x) {
1247 var a = {
1248 fromDate: 0,
1249 toDate: 0,
1250 openPrice: 0,
1251 highPrice: 0,
1252 lowPrice: 0,
1253 closePrice: 0,
1254 volume: 0,
1255 };
1256 if (x.length === 0)
1257 return a;
1258 var l = x.length - 1;
1259 a.fromDate = x[0][0 ];
1260 a.toDate = x[l][0 ];
1261 a.openPrice = x[0][1 ];
1262 a.highPrice = x[0][2 ];
1263 a.lowPrice = x[0][3 ];
1264 a.closePrice = x[l][4 ];
1265 for (var c of x) {
1266 a.highPrice = Math.max(a.highPrice, c[2 ]);
1267 a.lowPrice = Math.min(a.lowPrice, c[3 ]);
1268 a.volume += c[5 ];
1269 }
1270 return a;
1271}
1272function toMarketHistory(x) {
1273 return {
1274 details: x.candles.map(toCandleShort),
1275 overall: toMarketHistoryOverall(x.candles),
1276 };
1277}
1278function toMarketQuote(x) {
1279 var v = x.v;
1280 return {
1281 symbol: x.n,
1282 token: v.fyToken,
1283 name: v.short_name,
1284 exchange: v.exchange,
1285 description: v.description,
1286 priceChange: v.ch,
1287 priceChangePercent: v.chp,
1288 currentPrice: v.lp,
1289 priceSpread: v.spread,
1290 sellPrice: v.ask,
1291 buyPrice: v.bid,
1292 openPrice: v.open_price,
1293 highPrice: v.high_price,
1294 lowPrice: v.low_price,
1295 closePrice: v.prev_close_price,
1296 volume: v.volume,
1297 date: v.tt,
1298 candle: v.cmd ? toCandle(v.cmd) : null,
1299 };
1300}
1301function toMarketOffer(x) {
1302 return {
1303 price: x.price,
1304 volume: x.volume,
1305 orders: x.ord,
1306 };
1307}
1308function toMarketOfferL2(x, p) {
1309 return {
1310 price: x.price / p,
1311 volume: x.volume,
1312 orders: x.ord,
1313 };
1314}
1315function toMarketDepth(x) {
1316 var ks = Object.keys(x.d);
1317 if (ks.length === 0)
1318 return null;
1319 var s = ks[0];
1320 var v = x.d[s];
1321 return {
1322 symbol: s,
1323 token: null,
1324 name: symbolName(s),
1325 exchange: symbolExchange(s),
1326 expiryDate: v.expiry,
1327 currentPrice: v.ltq,
1328 lowerCircuitPrice: v.lower_ckt,
1329 upperCircuitPrice: v.upper_ckt,
1330 openPrice: v.o,
1331 highPrice: v.h,
1332 lowPrice: v.l,
1333 closePrice: v.c,
1334 volume: v.v,
1335 priceChange: v.ch,
1336 priceChangePercent: v.chp,
1337 openInterest: v.oi,
1338 previousOpenInterest: v.pdoi,
1339 openInterestChangePercent: v.oipercent,
1340 tradedQuantity: v.ltq,
1341 tradedDate: v.ltt,
1342 netPrice: v.atp,
1343 buyQuantity: v.totalbuyqty,
1344 sellQuantity: v.totalsellqty,
1345 buyOffers: v.bids.map(toMarketOffer),
1346 sellOffers: v.ask.map(toMarketOffer),
1347 };
1348}
1349function toEdisTransaction(x) {
1350 return {
1351 id: x.transactionId,
1352 isin: x.isin,
1353 quantity: x.qty,
1354 remainingQuantity: x.qty - x.qtyUtlize,
1355 entryDate: x.entryDate,
1356 startDate: x.startDate,
1357 endDate: x.endDate,
1358 source: x.source,
1359 status: x.status,
1360 clientId: x.clientId,
1361 errorCode: x.errCode,
1362 errorCount: x.errorCount,
1363 reason: x.reason,
1364 };
1365}
1366function toEdisTransactionsOverall(x) {
1367 var a = {
1368 count: 0,
1369 quantity: 0,
1370 remainingQuantity: 0,
1371 };
1372 for (var t of x) {
1373 a.count++;
1374 a.quantity += t.qty;
1375 a.remainingQuantity += t.qty - t.qtyUtlize;
1376 }
1377 return a;
1378}
1379function toEdisTransactions(x) {
1380 var ts = x.data.length === 0 ? [] : x.data;
1381 return {
1382 details: ts.map(toEdisTransaction),
1383 overall: toEdisTransactionsOverall(ts),
1384 };
1385}
1386function fromEdisHolding(x) {
1387 return {
1388 isin_code: x.isin,
1389 qty: x.quantity,
1390 };
1391}
1392function toOrderUpdateNotification(x) {
1393 var d = x.d;
1394 return {
1395 id: d.id,
1396 symbol: d.symbol,
1397 token: d.fyToken,
1398 type: toOrderType(d.type),
1399 side: toOrderSide(d.side),
1400 productType: toProductType(d.productType),
1401 status: toOrderStatus(d.status),
1402 validity: toOrderValidity(d.orderValidity),
1403 offline: d.offlineOrder,
1404 quantity: d.qty,
1405 remainingQuantity: d.remainingQuantity,
1406 filledQuantity: d.filledQty,
1407 disclosedQuantity: d.discloseQty,
1408 remainingDisclosedQuantity: d.dqQtyRem,
1409 limitPrice: d.limitPrice,
1410 stopPrice: d.stopPrice,
1411 date: d.orderDateTime,
1412 parentId: d.parentId || null,
1413 tradedPrice: d.tradedPrice,
1414 message: d.message,
1415 };
1416}
1417function toMarketDataNotification(x, map) {
1418 var d = x.d;
1419 var t = d.token.toString();
1420 var p = d.price_conv || 1;
1421 var s = map != null ? map.get(t) || null : null;
1422 var priceChange = d.ltp - d.prev_close_price;
1423 var bid = d.bids == null ? d.bid : d.bids[0].price;
1424 var ask = d.asks == null ? d.ask : d.asks[0].price;
1425 return {
1426 symbol: s,
1427 token: t,
1428 name: s != null ? symbolName(s) : null,
1429 exchange: s != null ? symbolExchange(s) : null,
1430 date: d.tt,
1431 marketStatus: d.marketStat,
1432 currentPrice: d.ltp / p,
1433 openPrice: d.open_price / p,
1434 highPrice: d.high_price / p,
1435 lowPrice: d.low_price / p,
1436 closePrice: d.prev_close_price / p,
1437 priceChange: priceChange / p,
1438 priceChangePercent: priceChange / d.prev_close_price,
1439 candle: {
1440 date: d.tt,
1441 openPrice: d.o / p,
1442 highPrice: d.h / p,
1443 lowPrice: d.l / p,
1444 closePrice: d.c / p,
1445 volume: Number(d.v),
1446 },
1447 openInterest: Number(d.oi),
1448 previousOpenInterest: Number(d.pdoi),
1449 tradedQuantity: d.LTQ,
1450 tradedDate: d.L2_LTT,
1451 tradedPrice: d.ATP / p,
1452 volume: d.volume,
1453 buyQuantity: Number(d.tot_buy),
1454 sellQuantity: Number(d.tot_sell),
1455 buyPrice: bid / p,
1456 sellPrice: ask / p,
1457 priceSpread: (ask - bid) / p,
1458 buyOffers: d.bids == null ? null : d.bids.map(x => toMarketOfferL2(x, p)),
1459 sellOffers: d.asks == null ? null : d.asks.map(x => toMarketOfferL2(x, p)),
1460 };
1461}
1462function charge(x, p) {
1463 return 0.01 * Math.round(x * p);
1464}
1465function equityDeliveryBuyCharges(x) {
1466 var sttctt = charge(x, 0.10);
1467 var gst = charge(sttctt, 18.0);
1468 var exch = charge(x, 0.00325);
1469 var stamp = charge(x, 0.015);
1470 var sebi = charge(x, 0.0001);
1471 return sttctt + gst + exch + stamp + sebi;
1472}
1473function equityDeliverySellCharges(x) {
1474 var debit = 7.00 + 5.50;
1475 return debit + equityDeliveryBuyCharges(x);
1476}
1477function equityDeliveryCharges(side, value) {
1478 if (side === "BUY")
1479 return equityDeliveryBuyCharges(value);
1480 return equityDeliverySellCharges(value);
1481}
1482function equityIntradayBuyCharges(x) {
1483 var broker = Math.min(20.00, charge(x, 0.03));
1484 var gst = charge(broker, 18.0);
1485 var exch = charge(x, 0.00325);
1486 var stamp = charge(x, 0.003);
1487 var sebi = charge(x, 0.0001);
1488 return broker + gst + exch + stamp + sebi;
1489}
1490function equityIntradaySellCharges(x) {
1491 var broker = Math.min(20.00, charge(x, 0.03));
1492 var sttctt = charge(x, 0.025);
1493 var gst = charge(broker + sttctt, 18.0);
1494 var exch = charge(x, 0.00325);
1495 var stamp = charge(x, 0.003);
1496 var sebi = charge(x, 0.0001);
1497 return broker + sttctt + gst + exch + stamp + sebi;
1498}
1499function equityIntradayCharges(side, value) {
1500 if (side === "BUY")
1501 return equityIntradayBuyCharges(value);
1502 return equityIntradaySellCharges(value);
1503}
1504function equityFuturesBuyCharges(x) {
1505 var broker = Math.min(20.00, charge(x, 0.03));
1506 var gst = charge(broker, 18.0);
1507 var exch = charge(x, 0.0019);
1508 var clear = charge(x, 0.0005);
1509 var stamp = charge(x, 0.002);
1510 var sebi = charge(x, 0.0001);
1511 return broker + gst + exch + clear + stamp + sebi;
1512}
1513function equityFuturesSellCharges(x) {
1514 var broker = Math.min(20.00, charge(x, 0.03));
1515 var sttctt = charge(x, 0.01);
1516 var gst = charge(broker + sttctt, 18.0);
1517 var exch = charge(x, 0.0019);
1518 var clear = charge(x, 0.0005);
1519 var stamp = charge(x, 0.002);
1520 var sebi = charge(x, 0.0001);
1521 return broker + sttctt + gst + exch + clear + stamp + sebi;
1522}
1523function equityFuturesCharges(side, value) {
1524 if (side === "BUY")
1525 return equityFuturesBuyCharges(value);
1526 return equityFuturesSellCharges(value);
1527}
1528function equityOptionsBuyCharges(x) {
1529 var broker = 20.00;
1530 var gst = charge(broker, 18.0);
1531 var exch = charge(x, 0.053);
1532 var clear = charge(x, 0.009);
1533 var stamp = charge(x, 0.003);
1534 var sebi = charge(x, 0.0001);
1535 return broker + gst + exch + clear + stamp + sebi;
1536}
1537function equityOptionsSellCharges(x) {
1538 var broker = 20.00;
1539 var sttctt = charge(x, 0.05);
1540 var gst = charge(broker + sttctt, 18.0);
1541 var exch = charge(x, 0.053);
1542 var clear = charge(x, 0.009);
1543 var stamp = charge(x, 0.003);
1544 var sebi = charge(x, 0.0001);
1545 return broker + sttctt + gst + exch + clear + stamp + sebi;
1546}
1547function equityOptionsCharges(side, value) {
1548 if (side === "BUY")
1549 return equityOptionsBuyCharges(value);
1550 return equityOptionsSellCharges(value);
1551}
1552function currencyFuturesBuySellCharges(x) {
1553 var broker = Math.min(20.00, charge(x, 0.03));
1554 var gst = charge(broker, 18.0);
1555 var exch = charge(x, 0.00115);
1556 var clear = charge(x, 0.0005);
1557 var stamp = charge(x, 0.0001);
1558 var sebi = charge(x, 0.0001);
1559 return broker + gst + exch + clear + stamp + sebi;
1560}
1561function currencyFuturesCharges(side, value) {
1562 return currencyFuturesBuySellCharges(value);
1563}
1564function currencyOptionsBuySellCharges(x) {
1565 var broker = 20.00;
1566 var gst = charge(broker, 18.0);
1567 var exch = charge(x, 0.04);
1568 var clear = charge(x, 0.009);
1569 var stamp = charge(x, 0.0001);
1570 var sebi = charge(x, 0.0001);
1571 return broker + gst + exch + clear + stamp + sebi;
1572}
1573function currencyOptionsCharges(side, value) {
1574 return currencyOptionsBuySellCharges(value);
1575}
1576function commodityFuturesBuyCharges(x) {
1577 var broker = Math.min(20.00, charge(x, 0.03));
1578 var gst = charge(broker, 18.0);
1579 var exch = charge(x, 0.0026);
1580 var clear = charge(x, 0.0018);
1581 var stamp = charge(x, 0.002);
1582 var sebi = charge(x, 0.0001);
1583 return broker + gst + exch + clear + stamp + sebi;
1584}
1585function commodityFuturesSellCharges(x) {
1586 var broker = Math.min(20.00, charge(x, 0.03));
1587 var sttctt = charge(x, 0.01);
1588 var gst = charge(broker + sttctt, 18.0);
1589 var exch = charge(x, 0.0026);
1590 var clear = charge(x, 0.0018);
1591 var stamp = charge(x, 0.002);
1592 var sebi = charge(x, 0.0001);
1593 return broker + sttctt + gst + exch + clear + stamp + sebi;
1594}
1595function commodityFuturesCharges(side, value) {
1596 if (side === "BUY")
1597 return commodityFuturesBuyCharges(value);
1598 return commodityFuturesSellCharges(value);
1599}
1600function commodityOptionsBuyCharges(x) {
1601 var broker = 20.00;
1602 var gst = charge(broker, 18.0);
1603 var clear = charge(x, 0.05);
1604 var stamp = charge(x, 0.0003);
1605 var sebi = charge(x, 0.0001);
1606 return broker + gst + clear + stamp + sebi;
1607}
1608function commodityOptionsSellCharges(x) {
1609 var broker = 20.00;
1610 var sttctt = charge(x, 0.05);
1611 var gst = charge(broker + sttctt, 18.0);
1612 var clear = charge(x, 0.05);
1613 var stamp = charge(x, 0.0003);
1614 var sebi = charge(x, 0.0001);
1615 return broker + sttctt + gst + clear + stamp + sebi;
1616}
1617function commodityOptionsCharges(side, value) {
1618 if (side === "BUY")
1619 return commodityOptionsBuyCharges(value);
1620 return commodityOptionsSellCharges(value);
1621}
1622class ApiError extends Error {
1623 constructor(code, message) {
1624 super(message);
1625 this.code = code;
1626 this.name = this.constructor.name;
1627 this.stack = (new Error(message)).stack;
1628 }
1629}
1630function loginStep1(appId, redirectUrl, state = "default") {
1631 return loginStep1$1(fromLoginStep1Request({ appId, redirectUrl, state }));
1632}
1633function loginStep2(appHash, authorizationCode) {
1634 return loginStep2$1(fromLoginStep2Request({ appHash, authorizationCode }));
1635}
1636function validateApiStatus(x) {
1637 if (x.s !== "ok")
1638 throw new ApiError(x.code, x.message);
1639}
1640function validateApiOrder(x) {
1641 if (x.id === "")
1642 throw new ApiError(x.code, x.message);
1643}
1644async function getProfile(auth) {
1645 var a = await getProfile$1(fromAuthorization(auth));
1646 validateApiStatus(a);
1647 return toProfile(a);
1648}
1649async function getFunds(auth) {
1650 var a = await getFunds$1(fromAuthorization(auth));
1651 validateApiStatus(a);
1652 return toFunds(a);
1653}
1654async function getHoldings(auth) {
1655 var a = await getHoldings$1(fromAuthorization(auth));
1656 validateApiStatus(a);
1657 return toHoldings(a);
1658}
1659async function getOrder(auth, id) {
1660 var a = await getOrder$1(fromAuthorization(auth), { id });
1661 validateApiStatus(a);
1662 return toOrder(a.orderBook[0]);
1663}
1664async function getOrders(auth) {
1665 var a = await getOrders$1(fromAuthorization(auth));
1666 validateApiStatus(a);
1667 return toOrders(a);
1668}
1669async function getPositions(auth) {
1670 var a = await getPositions$1(fromAuthorization(auth));
1671 validateApiStatus(a);
1672 return toPositions(a);
1673}
1674async function getTrades(auth) {
1675 var a = await getTrades$1(fromAuthorization(auth));
1676 validateApiStatus(a);
1677 return toTrades(a);
1678}
1679async function placeOrder(auth, order) {
1680 var a = await placeOrder$1(fromAuthorization(auth), fromPlaceOrder(order));
1681 validateApiOrder(a);
1682 return a.id;
1683}
1684function placeOrders(auth, orders) {
1685 var p = placeOrders$1(fromAuthorization(auth), orders.map(fromPlaceOrder));
1686 return orders.map((_, i) => p.then(a => {
1687 validateApiStatus(a);
1688 validateApiOrder(a.data[i].body);
1689 return a.data[i].body.id;
1690 }));
1691}
1692async function modifyOrder(auth, order) {
1693 var a = await modifyOrder$1(fromAuthorization(auth), fromModifyOrder(order));
1694 validateApiStatus(a);
1695 return a.id;
1696}
1697function modifyOrders(auth, orders) {
1698 var p = modifyOrders$1(fromAuthorization(auth), orders.map(fromModifyOrder));
1699 return orders.map((_, i) => p.then(a => {
1700 validateApiStatus(a);
1701 validateApiOrder(a.data[i].body);
1702 }));
1703}
1704async function cancelOrder(auth, id) {
1705 var a = await cancelOrder$1(fromAuthorization(auth), { id });
1706 validateApiStatus(a);
1707}
1708function cancelOrders(auth, ids) {
1709 var p = cancelOrders$1(fromAuthorization(auth), ids.map(id => ({ id })));
1710 return ids.map((_, i) => p.then(a => {
1711 validateApiStatus(a);
1712 validateApiOrder(a.data[i].body);
1713 }));
1714}
1715async function exitPosition(auth, id) {
1716 var a = await exitPosition$1(fromAuthorization(auth), { id });
1717 validateApiStatus(a);
1718}
1719async function exitAllPositions(auth) {
1720 var a = await exitAllPositions$1(fromAuthorization(auth));
1721 validateApiStatus(a);
1722}
1723async function convertPosition(auth, conversion) {
1724 var a = await convertPosition$1(fromAuthorization(auth), fromConvertPosition(conversion));
1725 validateApiStatus(a);
1726}
1727async function getMarketStatus(auth) {
1728 var a = await getMarketStatus$1(fromAuthorization(auth));
1729 validateApiStatus(a);
1730 return toMarketsStatus(a);
1731}
1732async function getMarketHistory(auth, market) {
1733 var a = await getMarketHistory$1(fromAuthorization(auth), fromGetMarketHistory(market));
1734 validateApiStatus(a);
1735 return toMarketHistory(a);
1736}
1737async function getMarketQuotes(auth, symbols) {
1738 var a = await getMarketQuotes$1(fromAuthorization(auth), { symbols: symbols.join() });
1739 validateApiStatus(a);
1740 return a.d.map(toMarketQuote);
1741}
1742async function getMarketDepth(auth, symbol) {
1743 var a = await getMarketDepth$1(fromAuthorization(auth), { symbol, ohlcv_flag: 1 });
1744 validateApiStatus(a);
1745 return toMarketDepth(a);
1746}
1747function getSymbolMaster(auth, exchange, segment) {
1748 return getSymbolMaster$1(null, { exchange, segment });
1749}
1750function processSymbolMaster(csv) {
1751 var a = [];
1752 var RLINE = /[^\n]+/g, m = null;
1753 while ((m = RLINE.exec(csv)) != null)
1754 a.push(toSymbolDetails(m[0]));
1755 return a;
1756}
1757async function loadSymbolMaster(auth, exchange, segment) {
1758 var csv = await getSymbolMaster(null, exchange, segment);
1759 return processSymbolMaster(csv);
1760}
1761async function generateEdisTpin(auth) {
1762 var a = await generateEdisTpin$1(fromAuthorization(auth));
1763 validateApiStatus(a);
1764}
1765async function getEdisTransactions(auth) {
1766 var a = await getEdisTransactions$1(fromAuthorization(auth));
1767 validateApiStatus(a);
1768 return toEdisTransactions(a);
1769}
1770function submitEdisHoldingsStep(auth, holdings) {
1771 return submitEdisHoldingsStep$1(fromAuthorization(auth), { recordLst: holdings.map(fromEdisHolding) });
1772}
1773async function inquireEdisTransaction(auth, id) {
1774 var a = await inquireEdisTransaction$1(fromAuthorization(auth), { transactionId: id });
1775 validateApiStatus(a);
1776 return a.data.FAILED_CNT > 0 ? -a.data.FAILED_CNT : a.data.SUCEESS_CNT;
1777}
1778function connectOrderUpdate(auth, fn) {
1779 return connectOrderUpdate$1(fromAuthorization(auth), x => {
1780 if (x.d)
1781 fn(toOrderUpdateNotification(x));
1782 });
1783}
1784async function subscribeOrderUpdate(conn) {
1785 var a = await subscribeOrderUpdate$1(conn);
1786 if (a.code < 0)
1787 throw new ApiError(a.code, a.message);
1788}
1789async function unsubscribeOrderUpdate(conn) {
1790 var a = await unsubscribeOrderUpdate$1(conn);
1791 if (a.code < 0)
1792 throw new ApiError(a.code, a.message);
1793}
1794function connectMarketData(auth, fn, map = null) {
1795 return connectMarketData$1(fromAuthorization(auth), x => {
1796 if (x.d)
1797 fn(toMarketDataNotification(x, map));
1798 });
1799}
1800async function subscribeMarketQuote(conn, symbols) {
1801 var a = await subscribeMarketQuote$1(conn, symbols);
1802 if (a.code < 0)
1803 throw new ApiError(a.code, a.message);
1804}
1805async function subscribeMarketDepth(conn, symbols) {
1806 var a = await subscribeMarketDepth$1(conn, symbols);
1807 if (a.code < 0)
1808 throw new ApiError(a.code, a.message);
1809}
1810async function unsubscribeMarketQuote(conn, symbols) {
1811 var a = await unsubscribeMarketQuote$1(conn, symbols);
1812 if (a.code < 0)
1813 throw new ApiError(a.code, a.message);
1814}
1815async function unsubscribeMarketDepth(conn, symbols) {
1816 var a = await unsubscribeMarketDepth$1(conn, symbols);
1817 if (a.code < 0)
1818 throw new ApiError(a.code, a.message);
1819}
1820class Api {
1821 constructor(appId, accessToken) {
1822 this.appId = appId;
1823 this.accessToken = accessToken;
1824 this.symbolDetails = new Map();
1825 this.tokenSymbol = new Map();
1826 this.orderUpdateConnection = null;
1827 this.marketDataConnection = null;
1828 }
1829 static loginStep1(appId, redirectUrl, state = "default") {
1830 return loginStep1(appId, redirectUrl, state);
1831 }
1832 static loginStep2(appHash, authorizationCode) {
1833 return loginStep2(appHash, authorizationCode);
1834 }
1835 static getSymbolMaster(exchange, segment) { return getSymbolMaster(null, exchange, segment); }
1836 getProfile() { return getProfile(this); }
1837 getFunds() { return getFunds(this); }
1838 getHoldings() { return getHoldings(this); }
1839 getOrder(id) { return getOrder(this, id); }
1840 getOrders() { return getOrders(this); }
1841 getPositions() { return getPositions(this); }
1842 getTrades() { return getTrades(this); }
1843 placeOrder(order) { return placeOrder(this, order); }
1844 placeOrders(orders) { return placeOrders(this, orders); }
1845 modifyOrder(order) { return modifyOrder(this, order); }
1846 modifyOrders(orders) { return modifyOrders(this, orders); }
1847 cancelOrder(id) { return cancelOrder(this, id); }
1848 cancelOrders(ids) { return cancelOrders(this, ids); }
1849 exitPosition(id) { return exitPosition(this, id); }
1850 exitAllPositions() { return exitAllPositions(this); }
1851 convertPosition(conversion) { return convertPosition(this, conversion); }
1852 getMarketStatus() { return getMarketStatus(this); }
1853 getMarketHistory(market) { return getMarketHistory(this, market); }
1854 getMarketQuotes(symbols) { return getMarketQuotes(this, symbols); }
1855 getMarketDepth(symbol) { return getMarketDepth(this, symbol); }
1856 processSymbolMaster(csv) {
1857 var rs = processSymbolMaster(csv);
1858 for (var r of rs) {
1859 this.symbolDetails.set(r.symbol, r);
1860 this.tokenSymbol.set(r.token, r.symbol);
1861 }
1862 return rs;
1863 }
1864 async loadSymbolMaster(exchange, segment) {
1865 var rs = await loadSymbolMaster(null, exchange, segment);
1866 for (var r of rs) {
1867 this.symbolDetails.set(r.symbol, r);
1868 this.tokenSymbol.set(r.token, r.symbol);
1869 }
1870 return rs;
1871 }
1872 generateEdisTpin() { return generateEdisTpin(this); }
1873 getEdisTransactions() { return getEdisTransactions(this); }
1874 submitEdisHoldingsStep(holdings) { return submitEdisHoldingsStep(this, holdings); }
1875 inquireEdisTransaction(id) { return inquireEdisTransaction(this, id); }
1876 connectOrderUpdate(fn) {
1877 if (this.orderUpdateConnection != null)
1878 this.orderUpdateConnection.then(c => c.close());
1879 return this.orderUpdateConnection = connectOrderUpdate(this, fn);
1880 }
1881 async subscribeOrderUpdate() {
1882 return subscribeOrderUpdate(await this.orderUpdateConnection);
1883 }
1884 async unsubscribeOrderUpdate() {
1885 return unsubscribeOrderUpdate(await this.orderUpdateConnection);
1886 }
1887 async connectMarketData(fn) {
1888 if (this.marketDataConnection != null)
1889 this.marketDataConnection.then(c => c.close());
1890 return this.marketDataConnection = connectMarketData(this, fn, this.tokenSymbol);
1891 }
1892 async subscribeMarketQuote(symbols) {
1893 return subscribeMarketQuote(await this.marketDataConnection, symbols);
1894 }
1895 async subscribeMarketDepth(symbols) {
1896 return subscribeMarketDepth(await this.marketDataConnection, symbols);
1897 }
1898 async unsubscribeMarketQuote(symbols) {
1899 return unsubscribeMarketQuote(await this.marketDataConnection, symbols);
1900 }
1901 async unsubscribeMarketDepth(symbols) {
1902 return unsubscribeMarketDepth(await this.marketDataConnection, symbols);
1903 }
1904}
1905
1906export { Api, cancelOrder, cancelOrders, commodityFuturesCharges, commodityOptionsCharges, connectMarketData, connectOrderUpdate, convertPosition, currencyFuturesCharges, currencyOptionsCharges, derivativeType, derivativeTypeDescription, equityDeliveryCharges, equityFuturesCharges, equityIntradayCharges, equityOptionsCharges, exchange, exchangeDescription, exitAllPositions, exitPosition, generateEdisTpin, getEdisTransactions, getFunds, getHoldings, getMarketDepth, getMarketHistory, getMarketQuotes, getMarketStatus, getOrder, getOrders, getPositions, getProfile, getSymbolMaster, getTrades, holdingType, holdingTypeDescription, http, inquireEdisTransaction, instrumentType, instrumentTypeDescription, loadSymbolMaster, loginStep1, loginStep2, modifyOrder, modifyOrders, optionType, optionTypeDescription, orderSide, orderSideDescription, orderSource, orderSourceDescription, orderStatus, orderStatusDescription, orderType, orderTypeDescription, orderValidity, orderValidityDescription, placeOrder, placeOrders, positionSide, positionSideDescription, processSymbolMaster, productType, productTypeDescription, segment, segmentDescription, submitEdisHoldingsStep, subscribeMarketDepth, subscribeMarketQuote, subscribeOrderUpdate, symbolDerivativeType, symbolDescription, symbolExchange, symbolIsin, symbolLotSize, symbolName, symbolOptionType, symbolSeries, symbolStrikePrice, symbolToken, unsubscribeMarketDepth, unsubscribeMarketQuote, unsubscribeOrderUpdate, websocket };