extra-fyers
Version:
A Javascript interface for FYERS API.
1,693 lines (1,687 loc) • 59.8 kB
JavaScript
import https from 'https';
import { WebSocket } from 'ws';
function queryString(data) {
if (data == null)
return '';
var a = new URLSearchParams();
for (var k in data)
a.append(k, data[k]);
return '?' + a.toString();
}
function getHttpError(error) {
var a = error;
a.code = 0;
a.response = null;
return a;
}
function getHttpResponseError(error, code, response) {
var a = error;
a.code = code;
a.response = response;
return a;
}
function hasHeader(key, o) {
if (o.headers == null)
return false;
if (o.headers.hasOwnProperty(key))
return true;
if (o.headers.hasOwnProperty(key.toLowerCase()))
return true;
return false;
}
function setHeaders(headers, o) {
if (o.body != null && !hasHeader('Content-Type', o)) {
headers['content-type'] = 'application/json; charset=utf-8';
}
if (!hasHeader('Accept', o)) {
headers['accept'] = 'application/json, text/*';
}
}
function httpRequest(o) {
return new Promise((resolve, reject) => {
var { url, method, headers, timeout } = o;
setHeaders(headers, o);
var req = https.request(url, { method, headers, timeout }, res => {
var body = '';
res.setEncoding('utf8');
res.on('error', e => reject(getHttpResponseError(e, res.statusCode, body)));
res.on('data', chunk => body += chunk);
res.on('end', () => resolve(body));
});
req.on('error', e => reject(getHttpError(e)));
if (o.body != null) {
req.useChunkedEncodingByDefault = true;
req.write(JSON.stringify(o.body));
}
req.end();
});
}
function httpRequestText(options) {
return httpRequest(options);
}
async function httpRequestJson(options) {
var response = await httpRequest(options);
return JSON.parse(response);
}
const API_URL = 'https://api.fyers.in/api/v2/';
const DATA_URL = 'https://api.fyers.in/data-rest/v2/';
const SYMBOLS_URL = 'https://public.fyers.in/sym_details/';
function requestStep(auth, method, path, query, body) {
var url = path + queryString(query);
var headers = {};
if (auth != null)
headers['authorization'] = auth.app_id + ':' + auth.access_token;
return { url, method, headers, body };
}
function requestText(auth, method, path, query, body) {
return httpRequestText(requestStep(auth, method, path, query, body));
}
function requestJson(auth, method, path, query, body) {
return httpRequestJson(requestStep(auth, method, path, query, body));
}
function requestApi(auth, method, path, query, body) {
return requestJson(auth, method, API_URL + path, query, body);
}
function requestData(auth, method, path, query, body) {
return requestJson(auth, method, DATA_URL + path, query, body);
}
function requestSymbols(auth, method, path, query, body) {
return requestText(auth, method, SYMBOLS_URL + path, query, body);
}
function loginStep1$1(options) {
return requestStep(null, 'GET', API_URL + 'generate-authcode', options, null);
}
function loginStep2$1(options) {
return requestStep(null, 'POST', API_URL + 'validate-authcode', null, options);
}
function getProfile$1(auth) {
return requestApi(auth, 'GET', 'profile', null, null);
}
function getFunds$1(auth) {
return requestApi(auth, 'GET', 'funds', null, null);
}
function getHoldings$1(auth) {
return requestApi(auth, 'GET', 'holdings', null, null);
}
function getOrder$1(auth, options) {
return requestApi(auth, 'GET', 'orders', options, null);
}
function getOrders$1(auth) {
return requestApi(auth, 'GET', 'orders', null, null);
}
function getPositions$1(auth) {
return requestApi(auth, 'GET', 'positions', null, null);
}
function getTrades$1(auth) {
return requestApi(auth, 'GET', 'tradebook', null, null);
}
function placeOrder$1(auth, options) {
return requestApi(auth, 'POST', 'orders', null, options);
}
function placeOrders$1(auth, options) {
return requestApi(auth, 'POST', 'orders-multi', null, options);
}
function modifyOrder$1(auth, options) {
return requestApi(auth, 'PUT', 'orders', null, options);
}
function modifyOrders$1(auth, options) {
return requestApi(auth, 'PUT', 'orders-multi', null, options);
}
function cancelOrder$1(auth, options) {
return requestApi(auth, 'DELETE', 'orders', null, options);
}
function cancelOrders$1(auth, options) {
return requestApi(auth, 'DELETE', 'orders-multi', null, options);
}
function exitPosition$1(auth, options) {
return requestApi(auth, 'DELETE', 'positions', null, options);
}
function exitAllPositions$1(auth) {
return requestApi(auth, 'DELETE', 'positions', null, {});
}
function convertPosition$1(auth, options) {
return requestApi(auth, 'PUT', 'positions', null, options);
}
function getMarketStatus$1(auth) {
return requestApi(auth, 'GET', 'market-status', null, null);
}
function getMarketHistory$1(auth, options) {
return requestData(auth, 'GET', 'history/', options, null);
}
function getMarketQuotes$1(auth, options) {
return requestData(auth, 'GET', 'quotes/', options, null);
}
function getMarketDepth$1(auth, options) {
return requestData(auth, 'GET', 'depth/', options, null);
}
function getSymbolMaster$1(auth, options) {
var { exchange, segment } = options;
return requestSymbols(null, 'GET', exchange + '_' + segment + '.csv', null, null);
}
function generateEdisTpin$1(auth) {
return requestApi(auth, 'GET', 'tpin', null, null);
}
function getEdisTransactions$1(auth) {
return requestApi(auth, 'GET', 'details', null, null);
}
function submitEdisHoldingsStep$1(auth, options) {
return requestStep(auth, 'POST', 'index', null, options);
}
function inquireEdisTransaction$1(auth, options) {
return requestApi(auth, 'POST', 'inquiry', null, options);
}
var http = /*#__PURE__*/Object.freeze({
__proto__: null,
API_URL: API_URL,
DATA_URL: DATA_URL,
SYMBOLS_URL: SYMBOLS_URL,
cancelOrder: cancelOrder$1,
cancelOrders: cancelOrders$1,
convertPosition: convertPosition$1,
exitAllPositions: exitAllPositions$1,
exitPosition: exitPosition$1,
generateEdisTpin: generateEdisTpin$1,
getEdisTransactions: getEdisTransactions$1,
getFunds: getFunds$1,
getHoldings: getHoldings$1,
getMarketDepth: getMarketDepth$1,
getMarketHistory: getMarketHistory$1,
getMarketQuotes: getMarketQuotes$1,
getMarketStatus: getMarketStatus$1,
getOrder: getOrder$1,
getOrders: getOrders$1,
getPositions: getPositions$1,
getProfile: getProfile$1,
getSymbolMaster: getSymbolMaster$1,
getTrades: getTrades$1,
inquireEdisTransaction: inquireEdisTransaction$1,
loginStep1: loginStep1$1,
loginStep2: loginStep2$1,
modifyOrder: modifyOrder$1,
modifyOrders: modifyOrders$1,
placeOrder: placeOrder$1,
placeOrders: placeOrders$1,
submitEdisHoldingsStep: submitEdisHoldingsStep$1
});
const MARKET_DATA_URL = "wss://api.fyers.in/socket/v2/dataSock";
const ORDER_UPDATE_URL = "wss://api.fyers.in/socket/v2/orderSock";
const MARKET_DATA_QUERY = "user-agent=fyers-api&type=symbolUpdate";
const ORDER_UPDATE_QUERY = "user-agent=fyers-api&type=orderUpdate";
const PING_INTERVAL = 5000;
function writeHeader(a, x, i) {
a.token = x.getBigUint64(i + 0);
a.tt = x.getUint32(i + 8);
a.fyCode = x.getUint16(i + 12);
a.marketStat = x.getUint16(i + 14);
a.pktlen = x.getUint16(i + 16);
a.L2 = x.getUint8(i + 18);
}
function writeOiData(a, x, i) {
a.oi = BigInt(x.getUint32(i + 0));
a.pdoi = BigInt(x.getUint32(i + 4));
}
function writeCommonData(a, x, i, hasOi) {
a.price_conv = x.getUint32(i + 0);
a.ltp = x.getUint32(i + 4);
a.open_price = x.getUint32(i + 8);
a.high_price = x.getUint32(i + 12);
a.low_price = x.getUint32(i + 16);
a.prev_close_price = x.getUint32(i + 20);
a.o = x.getUint32(i + 24);
a.h = x.getUint32(i + 28);
a.l = x.getUint32(i + 32);
a.c = x.getUint32(i + 36);
a.v = x.getBigUint64(i + 40);
if (!hasOi)
return;
a.oi = x.getBigUint64(i + 48);
a.pdoi = x.getBigUint64(i + 56);
}
function writeL1Data(a, x, i, bidAsk) {
a.LTQ = x.getUint32(i + 0);
a.L2_LTT = x.getUint32(i + 4);
a.ATP = x.getUint32(i + 8);
a.volume = x.getUint32(i + 12);
a.tot_buy = x.getBigUint64(i + 16);
a.tot_sell = x.getBigUint64(i + 24);
if (!bidAsk)
return;
a.bid = x.getUint32(i + 32);
a.ask = x.getUint32(i + 36);
}
function toL2MarketOffer(x, i) {
return {
price: x.getUint32(i + 0),
volume: x.getUint32(i + 4),
ord: x.getUint32(i + 8),
};
}
function writeL2Data(a, x, i) {
var bids = [], asks = [];
for (var j = 0; j < 60; j += 12) {
bids.push(toL2MarketOffer(x, i + j));
asks.push(toL2MarketOffer(x, i + j + 60));
}
a.bids = bids;
a.asks = asks;
}
function writeMarketData(a, x, i) {
writeHeader(a, x, i + 0);
var hasOi = a.fyCode === 7202 || a.fyCode === 31038;
var l1Off = hasOi ? 88 : 72;
if (a.fyCode === 7202)
writeOiData(a, x, i + 24);
else
writeCommonData(a, x, i + 24, hasOi);
if (a.fyCode === 7208 || a.fyCode === 31038)
writeL1Data(a, x, i + l1Off, a.L2 !== 1);
if (a.L2 === 1)
writeL2Data(a, x, i + l1Off + 32);
}
function toMarketData(x, i) {
var a = {
token: BigInt(0),
tt: 0,
fyCode: 0,
marketStat: 0,
pktlen: 0,
L2: 0,
price_conv: 0,
ltp: 0,
open_price: 0,
high_price: 0,
low_price: 0,
prev_close_price: 0,
o: 0,
h: 0,
l: 0,
c: 0,
v: BigInt(0),
oi: BigInt(0),
pdoi: BigInt(0),
LTQ: 0,
L2_LTT: 0,
ATP: 0,
volume: 0,
tot_buy: BigInt(0),
tot_sell: BigInt(0),
bid: 0,
ask: 0,
bids: null,
asks: null,
};
writeMarketData(a, x, i);
return a;
}
class Connection extends WebSocket {
constructor() {
super(...arguments);
this.recievers = [];
}
}
function waitResponse(conn) {
return new Promise((resolve, reject) => conn.recievers.push({ resolve, reject }));
}
function connectOrderUpdate$1(auth, fn) {
return new Promise((resolve, reject) => {
var { app_id, access_token } = auth;
var query = `${ORDER_UPDATE_QUERY}&access_token=${app_id}:${access_token}`;
var conn = new Connection(`${ORDER_UPDATE_URL}?${query}`);
var ping = setInterval(() => {
if (conn.readyState !== WebSocket.OPEN)
return;
conn.send("ping");
}, PING_INTERVAL);
conn.binaryType = "arraybuffer";
conn.onerror = e => {
for (var r of conn.recievers)
r.reject(e.error);
clearInterval(ping);
reject(e.error);
};
conn.onopen = () => resolve(conn);
conn.onmessage = e => {
if (typeof e.data !== "string")
return;
if (e.data === "pong")
return;
var x = JSON.parse(e.data);
fn(x);
if (x.hasOwnProperty("d") || x.code === 0)
return;
if (conn.recievers.length > 0)
conn.recievers.shift().resolve(x);
};
});
}
function subscribeOrderUpdate$1(conn) {
var req = { T: "SUB_ORD", SLIST: ["orderUpdate"], SUB_T: 1 };
conn.send(JSON.stringify(req));
return waitResponse(conn);
}
function unsubscribeOrderUpdate$1(conn) {
var req = { T: "SUB_ORD", SLIST: ["orderUpdate"], SUB_T: 0 };
conn.send(JSON.stringify(req));
return waitResponse(conn);
}
function connectMarketData$1(auth, fn) {
return new Promise((resolve, reject) => {
var { app_id, access_token } = auth;
var query = `${MARKET_DATA_QUERY}&access_token=${app_id}:${access_token}`;
var conn = new Connection(`${MARKET_DATA_URL}?${query}`);
var ping = setInterval(() => {
if (conn.readyState !== WebSocket.OPEN)
return;
conn.send("ping");
}, PING_INTERVAL);
conn.binaryType = "arraybuffer";
conn.onerror = e => {
for (var r of conn.recievers)
r.reject(e.error);
clearInterval(ping);
reject(e.error);
};
conn.onopen = () => resolve(conn);
conn.onmessage = e => {
if (typeof e.data === "string") {
if (e.data === "pong")
return;
var x = JSON.parse(e.data);
fn(x);
if (x.hasOwnProperty("d") || x.code === 0)
return;
if (conn.recievers.length > 0)
conn.recievers.shift().resolve(x);
}
else {
var binary = new DataView(e.data);
fn({ s: "ok", d: toMarketData(binary, 0) });
}
};
});
}
function subscribeMarketQuote$1(conn, symbols) {
var req = { T: "SUB_DATA", TLIST: symbols, SUB_T: 1 };
conn.send(JSON.stringify(req));
return waitResponse(conn);
}
function subscribeMarketDepth$1(conn, symbols) {
var req = { T: "SUB_L2", L2LIST: symbols, SUB_T: 1 };
conn.send(JSON.stringify(req));
return waitResponse(conn);
}
function unsubscribeMarketQuote$1(conn, symbols) {
var req = { T: "SUB_DATA", TLIST: symbols, SUB_T: 0 };
conn.send(JSON.stringify(req));
return waitResponse(conn);
}
function unsubscribeMarketDepth$1(conn, symbols) {
var req = { T: "SUB_L2", L2LIST: symbols, SUB_T: 0 };
conn.send(JSON.stringify(req));
return waitResponse(conn);
}
var websocket = /*#__PURE__*/Object.freeze({
__proto__: null,
Connection: Connection,
MARKET_DATA_URL: MARKET_DATA_URL,
ORDER_UPDATE_URL: ORDER_UPDATE_URL,
connectMarketData: connectMarketData$1,
connectOrderUpdate: connectOrderUpdate$1,
subscribeMarketDepth: subscribeMarketDepth$1,
subscribeMarketQuote: subscribeMarketQuote$1,
subscribeOrderUpdate: subscribeOrderUpdate$1,
unsubscribeMarketDepth: unsubscribeMarketDepth$1,
unsubscribeMarketQuote: unsubscribeMarketQuote$1,
unsubscribeOrderUpdate: unsubscribeOrderUpdate$1
});
const TO_EXCHANGE = new Map([
[10, "NSE"],
[11, "MCX"],
[12, "BSE"],
]);
const EXCHANGE_DESCRIPTION = new Map([
["NSE", "National Stock Exchange"],
["MCX", "Multi Commodity Exchange"],
["BSE", "Bombay Stock Exchange"],
]);
function toExchange(x) {
return TO_EXCHANGE.get(x);
}
function exchangeDescription(code) {
return EXCHANGE_DESCRIPTION.get(code);
}
function exchange(desc) {
if (/bse|native|bombay|mumbai/i.test(desc))
return "BSE";
if (/\bcom\b|mcx|multi|commodit/i.test(desc))
return "MCX";
return "NSE";
}
const TO_SEGMENT = new Map([
[10, "CM"],
[11, "FO"],
[12, "CD"],
[20, "COM"],
]);
const SEGMENT_DESCRIPTION = new Map([
["CM", "Capital Market"],
["FO", "Equity Derivatives"],
["CD", "Currency Derivatives"],
["COM", "Commodity Derivatives"],
]);
function toSegment(x) {
return TO_SEGMENT.get(x);
}
function segmentDescription(code) {
return SEGMENT_DESCRIPTION.get(code);
}
function segment(desc) {
if (/\bcom\b|mcx|multi|commodit/i.test(desc))
return "COM";
if (/\bcd\b|currenc/i.test(desc))
return "CD";
if (/\bfn?o\b|fut|opt|deriv/i.test(desc))
return "FO";
return "CM";
}
const TO_POSITION_SIDE = new Map([
[1, "LONG"],
[-1, "SHORT"],
[0, "CLOSED"],
]);
const FROM_POSITION_SIDE = new Map([
["LONG", 1],
["SHORT", -1],
["CLOSED", 0],
]);
const POSITION_SIDE_DESCRIPTION = new Map([
["LONG", "Long position"],
["SHORT", "Short position"],
["CLOSED", "Closed position"],
]);
function toPositionSide(x) {
return TO_POSITION_SIDE.get(x);
}
function fromPositionSide(x) {
return FROM_POSITION_SIDE.get(x);
}
function positionSideDescription(code) {
return POSITION_SIDE_DESCRIPTION.get(code);
}
function positionSide(desc) {
if (/up|buy|long|rally/i.test(desc))
return "LONG";
if (/down|sell|short|crash/i.test(desc))
return "SHORT";
return "CLOSED";
}
const TO_ORDER_SIDE = new Map([
[1, "BUY"],
[-1, "SELL"],
]);
const FROM_ORDER_SIDE = new Map([
["BUY", 1],
["SELL", -1],
]);
const ORDER_SIDE_DESCRIPTION = new Map([
["BUY", "Buy"],
["SELL", "Sell"],
]);
function toOrderSide(x) {
return TO_ORDER_SIDE.get(x);
}
function fromOrderSide(x) {
return FROM_ORDER_SIDE.get(x);
}
function orderSideDescription(code) {
return ORDER_SIDE_DESCRIPTION.get(code);
}
function orderSide(desc) {
return /down|sell|short|crash/i.test(desc) ? "SELL" : "BUY";
}
const TO_ORDER_SOURCE = new Map([
["M", "MOBILE"],
["W", "WEB"],
["R", "ONE"],
["A", "ADMIN"],
["ITS", "API"],
]);
const ORDER_SOURCE_DESCRIPTION = new Map([
["MOBILE", "FYERS Mobile"],
["WEB", "FYERS Web"],
["ONE", "FYERS One"],
["ADMIN", "Admin"],
["API", "FYERS API"],
]);
function toOrderSource(x) {
return TO_ORDER_SOURCE.get(x);
}
function orderSourceDescription(code) {
return ORDER_SOURCE_DESCRIPTION.get(code);
}
function orderSource(desc) {
if (/its|api|sys/i.test(desc))
return "API";
if (/one|desk/i.test(desc))
return "ONE";
if (/mob|app/i.test(desc))
return "MOBILE";
if (/admin/i.test(desc))
return "ADMIN";
return "WEB";
}
const TO_ORDER_STATUS = new Map([
[1, "CANCELLED"],
[2, "TRADED"],
[4, "TRANSIT"],
[5, "REJECTED"],
[6, "PENDING"],
[7, "EXPIRED"],
]);
const ORDER_STATUS_DESCRIPTION = new Map([
["CANCELLED", "Cancelled"],
["TRADED", "Traded / Filled"],
["TRANSIT", "Transit"],
["REJECTED", "Rejected"],
["PENDING", "Pending"],
["EXPIRED", "Expired"],
]);
const ORDER_STATUS_CODE = new Map([
["C", "CANCELLED"],
["F", "TRADED"],
["T", "TRANSIT"],
["R", "REJECTED"],
["P", "PENDING"],
["E", "EXPIRED"],
]);
function toOrderStatus(x) {
return TO_ORDER_STATUS.get(x);
}
function orderStatusDescription(code) {
return ORDER_STATUS_DESCRIPTION.get(code);
}
function orderStatus(desc) {
var key = desc.charAt(0).toUpperCase();
if (/traded/i.test(desc))
key = "F";
return ORDER_STATUS_CODE.get(key);
}
const TO_ORDER_TYPE = new Map([
[1, "LIMIT"],
[2, "MARKET"],
[3, "SL_MARKET"],
[4, "SL_LIMIT"],
]);
const FROM_ORDER_TYPE = new Map([
["LIMIT", 1],
["MARKET", 2],
["SL_MARKET", 3],
["SL_LIMIT", 4],
]);
const ORDER_TYPE_DESCRIPTION = new Map([
["LIMIT", "Limit order"],
["MARKET", "Market order"],
["SL_MARKET", "Stop order (SL-M)"],
["SL_LIMIT", "Stoplimit order (SL-L)"],
]);
const ORDER_TYPE_CODE = new Map([
["L", "LIMIT"],
["M", "MARKET"],
["S", "SL_MARKET"],
["R", "SL_LIMIT"],
]);
function toOrderType(x) {
return TO_ORDER_TYPE.get(x);
}
function fromOrderType(x) {
return FROM_ORDER_TYPE.get(x);
}
function orderTypeDescription(code) {
return ORDER_TYPE_DESCRIPTION.get(code);
}
function orderType(desc) {
var key = desc.charAt(0).toUpperCase();
if (/s.+l(?!oss)/i.test(desc))
key = "R";
return ORDER_TYPE_CODE.get(key);
}
const ORDER_VALIDITY_DESCRIPTION = new Map([
["DAY", "End of day validity"],
["IOC", "Immediate or Cancel validity"],
]);
function toOrderValidity(x) {
return x;
}
function orderValidityDescription(code) {
return ORDER_VALIDITY_DESCRIPTION.get(code);
}
function orderValidity(desc) {
return /ioc|cancel|immediate/i.test(desc) ? "IOC" : "DAY";
}
const OPTION_TYPE_DESCRIPTION = new Map([
["CE", "Call option"],
["PE", "Put option"],
]);
function optionTypeDescription(code) {
return OPTION_TYPE_DESCRIPTION.get(code);
}
function optionType(desc) {
return /pe|put|sell/i.test(desc) ? "PE" : "CE";
}
const DERIVATIVE_TYPE_DESCRIPTION = new Map([
["FUT", "Future"],
["CE", "Call option"],
["PE", "Put option"],
]);
function derivativeTypeDescription(code) {
return DERIVATIVE_TYPE_DESCRIPTION.get(code);
}
function derivativeType(desc) {
return /fut|lat|buy/.test(desc) ? "FUT" : optionType(desc);
}
const HOLDING_TYPE_DESCRIPTION = new Map([
["T1", "The shares are purchased but not yet delivered to the demat account"],
["HLD", "The shares are purchased and are available in the demat account"],
]);
function toHoldingType(x) {
return x;
}
function holdingTypeDescription(code) {
return HOLDING_TYPE_DESCRIPTION.get(code);
}
function holdingType(desc) {
return /un|not|pend|t1/i.test(desc) ? "T1" : "HLD";
}
const PRODUCT_TYPE_DESCRIPTION = new Map([
["CNC", "Cash N Carry or Delivery Order, for equity only"],
["INTRADAY", "Intraday Order, applicable for all segments"],
["MARGIN", "Margin Order, applicable only for derivatives"],
["CO", "Cover Order"],
["BO", "Bracket Order"],
]);
const PRODUCT_TYPE_CODE = new Map([
["D", "CNC"],
["I", "INTRADAY"],
["M", "MARGIN"],
["C", "CO"],
["B", "BO"],
]);
function toProductType(x) {
return x;
}
function fromProductType(x) {
return x;
}
function productTypeDescription(code) {
return PRODUCT_TYPE_DESCRIPTION.get(code);
}
function productType(desc) {
var key = desc.charAt(0).toUpperCase();
if (/cnc|cash|carry|deliver/i.test(desc))
key = "D";
return PRODUCT_TYPE_CODE.get(key);
}
const TO_INSTRUMENT_TYPE = new Map([
[0, "EQ"],
[1, "PREFSHARES"],
[2, "DEBENTURES"],
[3, "WARRANTS"],
[4, "MISC"],
[10, "INDEX"],
[11, "FUTIDX"],
[12, "FUTIVX"],
[13, "FUTSTK"],
[14, "OPTIDX"],
[15, "OPTSTK"],
[16, "FUTCUR"],
[17, "FUTIRT"],
[18, "FUTIRC"],
[19, "OPTCUR"],
[20, "UNDCUR"],
[21, "UNDIRC"],
[22, "UNDIRT"],
[23, "UNDIRD"],
[24, "INDEX_CD"],
[25, "FUTIRD"],
[30, "FUTCOM"],
[31, "OPTFUT"],
[32, "OPTCOM"],
]);
const INSTRUMENT_TYPE_DESCRIPTION = new Map([
["EQ", "Equity Shares"],
["PREFSHARES", "Preference Shares"],
["DEBENTURES", "Collateral-free Debt"],
["WARRANTS", "Warrants on Stock"],
["MISC", "Miscellaneous"],
["INDEX", "Stock Market Index"],
["FUTIDX", "Futures on Index"],
["FUTIVX", "Futures on Volatility Index"],
["FUTSTK", "Futures on Stock"],
["OPTIDX", "Options on Index"],
["OPTSTK", "Options on Stock"],
["FUTCUR", "Futures on Currency"],
["FUTIRT", "Futures on Government of India Treasury Bills"],
["FUTIRC", "Futures on Government of India Bonds"],
["OPTCUR", "Options on Currency"],
["UNDCUR", "Underlying on Currency"],
["UNDIRC", "Underlying on Government of Bonds"],
["UNDIRT", "Underlying on Government of India Treasury Bills"],
["UNDIRD", "Underlying on 10 Year Notional coupon bearing GOI security"],
["INDEX_CD", "Market-indexed Certificate of deposit"],
["FUTIRD", "Futures on 10 Year Notional coupon bearing GOI security"],
["FUTCOM", "Futures on Commodity"],
["OPTFUT", "Options on Commodity Futures"],
["OPTCOM", "Options on Commodity"],
]);
function toInstrumentType(x) {
return TO_INSTRUMENT_TYPE.get(x);
}
function instrumentTypeDescription(code) {
return INSTRUMENT_TYPE_DESCRIPTION.get(code);
}
function instrumentType(desc) {
var fut = /fut|future/i.test(desc);
var opt = /opt|option/i.test(desc);
var idx = /idx|index/i.test(desc);
var und = /und|underlying/i.test(desc);
if (/com(\b|$)|commodit/i.test(desc)) {
if (opt)
return fut ? "OPTFUT" : "OPTCOM";
else if (idx)
return "FUTIDX";
else
return "FUTCOM";
}
else if (/(^|\b)und|cd(\b|$)|ir[cdt](\b|$)|cur|gov|bond|trea|coup/i.test(desc)) {
if (/irc(\b|$)|bond/i.test(desc))
return und ? "UNDIRC" : "FUTIRC";
else if (/ird(\b|$)|coup/i.test(desc))
return und ? "UNDIRD" : "FUTIRD";
else if (/irt(\b|$)|trea/i.test(desc))
return und ? "UNDIRT" : "FUTIRT";
else
return idx ? "INDEX_CD" : (opt ? "OPTCUR" : "FUTCUR");
}
else if (fut || opt) {
if (/ivx|volatil/i.test(desc))
return "FUTIVX";
else if (idx)
return opt ? "OPTIDX" : "FUTIDX";
else
return opt ? "OPTSTK" : "FUTSTK";
}
else {
if (idx)
return "INDEX";
else if (/misc/i.test(desc))
return "MISC";
else if (/warrant/i.test(desc))
return "WARRANTS";
else if (/deb/i.test(desc))
return "DEBENTURES";
else if (/pref/i.test(desc))
return "PREFSHARES";
}
return "EQ";
}
const 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$/;
function toSymbolDetails(row) {
var [token, description, , lotSize, , isin, , , , symbol] = row.split(',');
return { symbol, token, description, lotSize: parseInt(lotSize, 10), isin: isin || "" };
}
function symbolName(code) {
var m = RSYMBOL_NAME.exec(code);
return m[1] || m[2] || m[3] || m[4];
}
function symbolExchange(code) {
var i = code.indexOf(":");
return code.substring(0, i);
}
function symbolSeries(code) {
var i = code.lastIndexOf("-");
return i > 0 ? code.substring(i) : null;
}
function symbolOptionType(code) {
var a = code.substring(code.length - 2);
return a === "CE" || a === "PE" ? a : null;
}
function symbolDerivativeType(code) {
var m = /(?:FUT|CE|PE)$/.exec(code);
return m != null ? m[0] : null;
}
function symbolStrikePrice(code) {
var RSTRIKE = /([\d\.]+)[CP]E$/, m = RSTRIKE.exec(code);
return m != null ? parseFloat(m[1]) : 0;
}
function symbolToken(code, map) {
return map.get(code).token;
}
function symbolDescription(code, map) {
return map.get(code).description;
}
function symbolIsin(code, map) {
return map.get(code).isin;
}
function symbolLotSize(code, map) {
return map.get(code).lotSize;
}
function fromAuthorization(x) {
return {
app_id: x.appId,
access_token: x.accessToken,
};
}
function fromLoginStep1Request(x) {
return {
client_id: x.appId,
redirect_uri: x.redirectUrl,
response_type: "code",
state: x.state,
};
}
function fromLoginStep2Request(x) {
return {
grant_type: "authorization_code",
appIdHash: x.appHash,
code: x.authorizationCode,
};
}
function toProfile(x) {
var d = x.data;
return {
id: d.fy_id,
email: d.email_id,
name: d.name,
pan: d.PAN,
};
}
function toFunds(x) {
var e = {};
var c = {};
for (var l of x.fund_limit) {
switch (l.id) {
case 9 :
e.start = l.equityAmount;
c.start = l.commodityAmount;
break;
case 6 :
e.deposits = l.equityAmount;
c.deposits = l.commodityAmount;
break;
case 4 :
e.realizedReturns = l.equityAmount;
c.realizedReturns = l.commodityAmount;
break;
case 5 :
e.collaterals = l.equityAmount;
c.collaterals = l.commodityAmount;
break;
case 8 :
e.adhoc = l.equityAmount;
c.adhoc = l.commodityAmount;
break;
case 2 :
e.utilized = l.equityAmount;
c.utilized = l.commodityAmount;
break;
case 7 :
e.receivables = l.equityAmount;
c.receivables = l.commodityAmount;
break;
case 10 :
e.available = l.equityAmount;
c.available = l.commodityAmount;
break;
case 3 :
e.clear = l.equityAmount;
c.clear = l.commodityAmount;
break;
case 1 :
e.total = l.equityAmount;
c.total = l.commodityAmount;
break;
}
}
return { equity: e, commodity: c };
}
function toHolding(x) {
return {
isin: x.isin,
symbol: x.symbol,
token: x.fytoken,
exchange: toExchange(x.exchange),
type: toHoldingType(x.holdingType),
quantity: x.quantity,
remainingQuantity: x.remainingQuantity,
buyPrice: x.costPrice,
buyValue: x.costPrice * x.quantity,
currentPrice: x.ltp,
currentValue: x.marketVal,
returns: x.pl,
returnsPercent: x.pl / (x.costPrice * x.quantity),
};
}
function toHoldingsOverall(xs, x) {
var settledCount = 0;
for (var h of xs)
if (h.holdingType === "HLD")
settledCount++;
return {
count: x.count_total,
settledCount,
investedValue: x.total_investment,
currentValue: x.total_current_value,
returns: x.total_pl,
returnsPercent: x.pnl_perc,
};
}
function toHoldings(x) {
return {
details: x.holdings.map(toHolding),
overall: toHoldingsOverall(x.holdings, x.overall),
};
}
function toOrder(x) {
return {
id: x.id,
symbol: x.symbol,
token: x.fytoken,
name: x.ex_sym,
description: x.description,
segment: toSegment(x.segment),
instrument: toInstrumentType(x.instrument),
exchange: toExchange(x.exchange),
type: toOrderType(x.type),
side: toOrderSide(x.side),
productType: toProductType(x.productType),
source: toOrderSource(x.source) || null,
status: toOrderStatus(x.status),
offline: x.offlineOrder === "True",
limitPrice: x.limitPrice,
stopPrice: x.stopPrice,
quantity: x.qty,
remainingQuantity: x.remainingQuantity,
tradedQuantity: x.filledQty,
disclosedQuantity: x.discloseQty,
remainingDisclosedQuantity: x.dqQtyRem,
validity: toOrderValidity(x.orderValidity),
date: x.orderDateTime,
parentId: x.parentId || null,
priceChange: x.ch,
priceChangePercent: x.chp,
currentPrice: x.lp,
tradedPrice: x.tradedPrice,
message: x.message,
pan: x.pan || null,
clientId: x.clientId || null,
};
}
function toOrdersOverall(x) {
var a = {
count: 0,
openCount: 0,
closedCount: 0,
quantity: 0,
remainingQuantity: 0,
tradedQuantity: 0,
disclosedQuantity: 0,
remainingDisclosedQuantity: 0,
};
for (var o of x) {
a.count++;
a.openCount += o.status === 6 || o.status === 4 ? 1 : 0;
a.quantity += o.qty;
a.remainingQuantity += o.remainingQuantity;
a.tradedQuantity += o.filledQty;
a.disclosedQuantity += o.discloseQty;
a.remainingDisclosedQuantity += o.dqQtyRem;
}
a.closedCount = a.count - a.openCount;
return a;
}
function toOrders(x) {
return {
details: x.orderBook.map(toOrder),
overall: toOrdersOverall(x.orderBook),
};
}
function toPosition(x) {
return {
id: x.id,
symbol: x.symbol,
token: x.fytoken,
segment: toSegment(x.segment),
productType: toProductType(x.productType),
side: toPositionSide(x.side),
quantity: x.qty,
quantityMultiplier: x.qtyMulti_com,
buyPrice: x.buyAvg,
buyQuantity: x.buyQty,
buyValue: x.buyVal,
sellPrice: x.sellAvg,
sellQuantity: x.sellQty,
sellValue: x.sellVal,
netPrice: x.netAvg,
netQuantity: x.netQty,
returns: x.pl,
realizedReturns: x.realized_profit,
unrealizedReturns: x.unrealized_profit,
crossCurrency: x.crossCurrency === "Y",
rbiRefRate: x.rbiRefRate,
currentPrice: x.ltp,
};
}
function toPositionsOverall(xs, x) {
var buyValue = 0, sellValue = 0;
for (var p of xs) {
buyValue += p.buyVal;
sellValue += p.sellVal;
}
return {
count: x.count_total,
openCount: x.count_open,
closedCount: x.count_total - x.count_open,
buyValue,
sellValue,
returns: x.pl_total,
realizedReturns: x.pl_realized,
unrealizedReturns: x.pl_unrealized,
};
}
function toPositions(x) {
return {
details: x.netPositions.map(toPosition),
overall: toPositionsOverall(x.netPositions, x.overall),
};
}
function toTrade(x) {
return {
id: x.id,
orderId: x.orderNumber,
symbol: x.symbol,
token: x.fyToken,
segment: toSegment(x.segment),
exchange: toExchange(x.exchange),
side: toOrderSide(x.transactionType),
productType: toProductType(x.productType),
orderType: toOrderType(x.orderType),
orderDate: x.orderDateTime,
price: x.tradePrice,
quantity: x.tradedQty,
value: x.tradeValue,
clientId: x.clientId,
};
}
function toTradesOverall(x) {
var a = {
count: 0,
quantity: 0,
value: 0,
};
for (var t of x) {
a.count++;
a.quantity += t.tradedQty;
a.value += t.tradeValue;
}
return a;
}
function toTrades(x) {
return {
details: x.tradeBook.map(toTrade),
overall: toTradesOverall(x.tradeBook),
};
}
function fromPlaceOrder(x) {
return {
symbol: x.symbol,
type: fromOrderType(x.type || "MARKET"),
side: fromOrderSide(x.side || "BUY"),
productType: x.productType || "CNC",
limitPrice: x.limitPrice || 0,
stopPrice: x.stopPrice || 0,
qty: x.quantity,
disclosedQty: x.disclosedQuantity || 0,
validity: x.validity || "DAY",
offlineOrder: x.offline ? "True" : "False",
stopLoss: x.stopLoss || 0,
takeProfit: x.takeProfit || 0,
};
}
function fromModifyOrder(x) {
return {
id: x.id,
type: fromOrderType(x.type),
qty: x.quantity,
disclosedQty: x.disclosedQuantity,
limitPrice: x.limitPrice,
stopPrice: x.stopPrice,
};
}
function fromConvertPosition(x) {
return {
symbol: x.symbol,
positionSide: fromPositionSide(x.side || "LONG"),
convertQty: x.quantity,
convertFrom: fromProductType(x.fromProductType || "INTRADAY"),
convertTo: fromProductType(x.toProductType || "CNC"),
};
}
function toMarketStatus(x) {
return {
exchange: toExchange(x.exchange),
segment: toSegment(x.segment),
type: x.market_type,
status: x.status,
};
}
function toMarketsStatusOverall(x) {
var a = {
count: 0,
openCount: 0,
closedCount: 0,
};
for (var s of x) {
a.count++;
if (s.status === "OPEN")
a.openCount++;
else
a.closedCount++;
}
return a;
}
function toMarketsStatus(x) {
return {
details: x.marketStatus.map(toMarketStatus),
overall: toMarketsStatusOverall(x.marketStatus),
};
}
const CANDLE_RESOLUTIONS = [1, 2, 3, 5, 10, 15, 20, 30, 60, 120, 240, 1440];
function fromCandleResolution(x) {
var R = 1, D = Infinity;
for (var r of CANDLE_RESOLUTIONS) {
var d = Math.abs(x - r);
if (d < D) {
R = r;
D = d;
}
}
return R === 1440 ? "D" : R.toString();
}
function fromGetMarketHistory(x) {
return {
symbol: x.symbol,
resolution: fromCandleResolution(x.resolution),
date_format: 0,
range_from: x.fromDate.toString(),
range_to: x.toDate.toString(),
cont_flag: x.continuous ? "1" : "0",
};
}
function toCandleShort(x) {
return {
date: x[0 ],
openPrice: x[1 ],
highPrice: x[2 ],
lowPrice: x[3 ],
closePrice: x[4 ],
volume: x[5 ],
};
}
function toCandle(x) {
return {
date: x.t,
openPrice: x.o,
highPrice: x.h,
lowPrice: x.l,
closePrice: x.c,
volume: x.v,
};
}
function toMarketHistoryOverall(x) {
var a = {
fromDate: 0,
toDate: 0,
openPrice: 0,
highPrice: 0,
lowPrice: 0,
closePrice: 0,
volume: 0,
};
if (x.length === 0)
return a;
var l = x.length - 1;
a.fromDate = x[0][0 ];
a.toDate = x[l][0 ];
a.openPrice = x[0][1 ];
a.highPrice = x[0][2 ];
a.lowPrice = x[0][3 ];
a.closePrice = x[l][4 ];
for (var c of x) {
a.highPrice = Math.max(a.highPrice, c[2 ]);
a.lowPrice = Math.min(a.lowPrice, c[3 ]);
a.volume += c[5 ];
}
return a;
}
function toMarketHistory(x) {
return {
details: x.candles.map(toCandleShort),
overall: toMarketHistoryOverall(x.candles),
};
}
function toMarketQuote(x) {
var v = x.v;
return {
symbol: x.n,
token: v.fyToken,
name: v.short_name,
exchange: v.exchange,
description: v.description,
priceChange: v.ch,
priceChangePercent: v.chp,
currentPrice: v.lp,
priceSpread: v.spread,
askPrice: v.ask,
bidPrice: v.bid,
openPrice: v.open_price,
highPrice: v.high_price,
lowPrice: v.low_price,
closePrice: v.prev_close_price,
volume: v.volume,
date: v.tt,
candle: v.cmd ? toCandle(v.cmd) : null,
};
}
function toMarketOffer(x) {
return {
price: x.price,
volume: x.volume,
orders: x.ord,
};
}
function toMarketOfferL2(x, p) {
return {
price: x.price / p,
volume: x.volume,
orders: x.ord,
};
}
function toMarketDepth(x) {
var ks = Object.keys(x.d);
if (ks.length === 0)
return null;
var s = ks[0];
var v = x.d[s];
return {
symbol: s,
token: null,
name: symbolName(s),
exchange: symbolExchange(s),
expiryDate: v.expiry,
currentPrice: v.ltq,
lowerCircuitPrice: v.lower_ckt,
upperCircuitPrice: v.upper_ckt,
openPrice: v.o,
highPrice: v.h,
lowPrice: v.l,
closePrice: v.c,
volume: v.v,
priceChange: v.ch,
priceChangePercent: v.chp,
openInterest: v.oi,
previousOpenInterest: v.pdoi,
openInterestChangePercent: v.oipercent,
tradedQuantity: v.ltq,
tradedDate: v.ltt,
tradedPrice: v.atp,
bidQuantity: v.totalbuyqty,
askQuantity: v.totalsellqty,
bids: v.bids.map(toMarketOffer),
asks: v.ask.map(toMarketOffer),
};
}
function toEdisTransaction(x) {
return {
id: x.transactionId,
isin: x.isin,
quantity: x.qty,
remainingQuantity: x.qty - x.qtyUtlize,
entryDate: x.entryDate,
startDate: x.startDate,
endDate: x.endDate,
source: x.source,
status: x.status,
clientId: x.clientId,
errorCode: x.errCode,
errorCount: x.errorCount,
reason: x.reason,
};
}
function toEdisTransactionsOverall(x) {
var a = {
count: 0,
quantity: 0,
remainingQuantity: 0,
};
for (var t of x) {
a.count++;
a.quantity += t.qty;
a.remainingQuantity += t.qty - t.qtyUtlize;
}
return a;
}
function toEdisTransactions(x) {
var ts = x.data.length === 0 ? [] : x.data;
return {
details: ts.map(toEdisTransaction),
overall: toEdisTransactionsOverall(ts),
};
}
function fromEdisHolding(x) {
return {
isin_code: x.isin,
qty: x.quantity,
};
}
function toOrderUpdateNotification(x) {
var d = x.d;
return {
id: d.id,
symbol: d.symbol,
token: d.fyToken,
type: toOrderType(d.type),
side: toOrderSide(d.side),
productType: toProductType(d.productType),
status: toOrderStatus(d.status),
validity: toOrderValidity(d.orderValidity),
offline: d.offlineOrder,
quantity: d.qty,
remainingQuantity: d.remainingQuantity,
filledQuantity: d.filledQty,
disclosedQuantity: d.discloseQty,
remainingDisclosedQuantity: d.dqQtyRem,
limitPrice: d.limitPrice,
stopPrice: d.stopPrice,
date: d.orderDateTime,
parentId: d.parentId || null,
tradedPrice: d.tradedPrice,
message: d.message,
};
}
function toMarketDataNotification(x, map) {
var d = x.d;
var t = d.token.toString();
var p = d.price_conv || 1;
var s = map != null ? map.get(t) || null : null;
var priceChange = d.ltp - d.prev_close_price;
var bid = d.bids == null ? d.bid : d.bids[0].price;
var ask = d.asks == null ? d.ask : d.asks[0].price;
return {
symbol: s,
token: t,
name: s != null ? symbolName(s) : null,
exchange: s != null ? symbolExchange(s) : null,
date: d.tt,
marketStatus: d.marketStat,
currentPrice: d.ltp / p,
openPrice: d.open_price / p,
highPrice: d.high_price / p,
lowPrice: d.low_price / p,
closePrice: d.prev_close_price / p,
priceChange: priceChange / p,
priceChangePercent: priceChange / d.prev_close_price,
candle: {
date: d.tt,
openPrice: d.o / p,
highPrice: d.h / p,
lowPrice: d.l / p,
closePrice: d.c / p,
volume: Number(d.v),
},
openInterest: Number(d.oi),
previousOpenInterest: Number(d.pdoi),
tradedQuantity: d.LTQ,
tradedDate: d.L2_LTT,
tradedPrice: d.ATP / p,
volume: d.volume,
bidQuantity: Number(d.tot_buy),
askQuantity: Number(d.tot_sell),
bidPrice: bid / p,
askPrice: ask / p,
priceSpread: (ask - bid) / p,
bids: d.bids == null ? null : d.bids.map(x => toMarketOfferL2(x, p)),
asks: d.asks == null ? null : d.asks.map(x => toMarketOfferL2(x, p)),
};
}
function charge(x, p) {
return 0.01 * Math.round(x * p);
}
function equityDeliveryBuyCharges(x) {
var sttctt = charge(x, 0.10);
var gst = charge(sttctt, 18.0);
var exch = charge(x, 0.00325);
var stamp = charge(x, 0.015);
var sebi = charge(x, 0.0001);
return sttctt + gst + exch + stamp + sebi;
}
function equityDeliverySellCharges(x) {
var debit = 7.00 + 5.50;
return debit + equityDeliveryBuyCharges(x);
}
function equityDeliveryCharges(side, value) {
if (side === "BUY")
return equityDeliveryBuyCharges(value);
return equityDeliverySellCharges(value);
}
function equityIntradayBuyCharges(x) {
var broker = Math.min(20.00, charge(x, 0.03));
var gst = charge(broker, 18.0);
var exch = charge(x, 0.00325);
var stamp = charge(x, 0.003);
var sebi = charge(x, 0.0001);
return broker + gst + exch + stamp + sebi;
}
function equityIntradaySellCharges(x) {
var broker = Math.min(20.00, charge(x, 0.03));
var sttctt = charge(x, 0.025);
var gst = charge(broker + sttctt, 18.0);
var exch = charge(x, 0.00325);
var stamp = charge(x, 0.003);
var sebi = charge(x, 0.0001);
return broker + sttctt + gst + exch + stamp + sebi;
}
function equityIntradayCharges(side, value) {
if (side === "BUY")
return equityIntradayBuyCharges(value);
return equityIntradaySellCharges(value);
}
function equityFuturesBuyCharges(x) {
var broker = Math.min(20.00, charge(x, 0.03));
var gst = charge(broker, 18.0);
var exch = charge(x, 0.0019);
var clear = charge(x, 0.0005);
var stamp = charge(x, 0.002);
var sebi = charge(x, 0.0001);
return broker + gst + exch + clear + stamp + sebi;
}
function equityFuturesSellCharges(x) {
var broker = Math.min(20.00, charge(x, 0.03));
var sttctt = charge(x, 0.01);
var gst = charge(broker + sttctt, 18.0);
var exch = charge(x, 0.0019);
var clear = charge(x, 0.0005);
var stamp = charge(x, 0.002);
var sebi = charge(x, 0.0001);
return broker + sttctt + gst + exch + clear + stamp + sebi;
}
function equityFuturesCharges(side, value) {
if (side === "BUY")
return equityFuturesBuyCharges(value);
return equityFuturesSellCharges(value);
}
function equityOptionsBuyCharges(x) {
var broker = 20.00;
var gst = charge(broker, 18.0);
var exch = charge(x, 0.053);
var clear = charge(x, 0.009);
var stamp = charge(x, 0.003);
var sebi = charge(x, 0.0001);
return broker + gst + exch + clear + stamp + sebi;
}
function equityOptionsSellCharges(x) {
var broker = 20.00;
var sttctt = charge(x, 0.05);
var gst = charge(broker + sttctt, 18.0);
var exch = charge(x, 0.053);
var clear = charge(x, 0.009);
var stamp = charge(x, 0.003);
var sebi = charge(x, 0.0001);
return broker + sttctt + gst + exch + clear + stamp + sebi;
}
function equityOptionsCharges(side, value) {
if (side === "BUY")
return equityOptionsBuyCharges(value);
return equityOptionsSellCharges(value);
}
function currencyFuturesBuySellCharges(x) {
var broker = Math.min(20.00, charge(x, 0.03));
var gst = charge(broker, 18.0);
var exch = charge(x, 0.00115);
var clear = charge(x, 0.0005);
var stamp = charge(x, 0.0001);
var sebi = charge(x, 0.0001);
return broker + gst + exch + clear + stamp + sebi;
}
function currencyFuturesCharges(side, value) {
return currencyFuturesBuySellCharges(value);
}
function currencyOptionsBuySellCharges(x) {
var broker = 20.00;
var gst = charge(broker, 18.0);
var exch = charge(x, 0.04);
var clear = charge(x, 0.009);
var stamp = charge(x, 0.0001);
var sebi = charge(x, 0.0001);
return broker + gst + exch + clear + stamp + sebi;
}
function currencyOptionsCharges(side, value) {
return currencyOptionsBuySellCharges(value);
}
function commodityFuturesBuyCharges(x) {
var broker = Math.min(20.00, charge(x, 0.03));
var gst = charge(broker, 18.0);
var exch = charge(x, 0.0026);
var clear = charge(x, 0.0018);
var stamp = charge(x, 0.002);
var sebi = charge(x, 0.0001);
return broker + gst + exch + clear + stamp + sebi;
}
function commodityFuturesSellCharges(x) {
var broker = Math.min(20.00, charge(x, 0.03));
var sttctt = charge(x, 0.01);
var gst = charge(broker + sttctt, 18.0);
var exch = charge(x, 0.0026);
var clear = charge(x, 0.0018);
var stamp = charge(x, 0.002);
var sebi = charge(x, 0.0001);
return broker + sttctt + gst + exch + clear + stamp + sebi;
}
function commodityFuturesCharges(side, value) {
if (side === "BUY")
return commodityFuturesBuyCharges(value);
return commodityFuturesSellCharges(value);
}
function commodityOptionsBuyCharges(x) {
var broker = 20.00;
var gst = charge(broker, 18.0);
var clear = charge(x, 0.05);
var stamp = charge(x, 0.0003);
var sebi = charge(x, 0.0001);
return broker + gst + clear + stamp + sebi;
}
function commodityOptionsSellCharges(x) {
var broker = 20.00;
var sttctt = charge(x, 0.05);
var gst = charge(broker + sttctt, 18.0);
var clear = charge(x, 0.05);
var stamp = charge(x, 0.0003);
var sebi = charge(x, 0.0001);
return broker + sttctt + gst + clear + stamp + sebi;
}
function commodityOptionsCharges(side, value) {
if (side === "BUY")
return commodityOptionsBuyCharges(value);
return commodityOptionsSellCharges(value);
}
class ApiError extends Error {
constructor(code, message) {
super(message);
this.code = code;
this.name = this.constructor.name;
this.stack = (new Error(message)).stack;
}
}
function loginStep1(appId, redirectUrl, state = "default") {
return loginStep1$1(fromLoginStep1Request({ appId, redirectUrl, state }));
}
function loginStep2(appHash, authorizationCode) {
return loginStep2$1(fromLoginStep2Request({ appHash, authorizationCode }));
}
function validateApiStatus(x) {
if (x.s !== "ok")
throw new ApiError(x.code, x.message);
}
function validateApiOrder(x) {
if (x.id === "")
throw new ApiError(x.code, x.message);
}
async function getProfile(auth) {
var a = await getProfile$1(fromAuthorization(auth));
validateApiStatus(a);
return toProfile(a);
}
async function getFunds(auth) {
var a = await getFunds$1(fromAuthorization(auth));
validateApiStatus(a);
return toFunds(a);
}
async function getHoldings(auth) {
var a = await getHoldings$1(fromAuthorization(auth));
validateApiStatus(a);
return toHoldings(a);
}
async function getOrder(auth, id) {
var a = await getOrder$1(fromAuthorization(auth), { id });
validateApiStatus(a);
return toOrder(a.orderBook[0]);
}
async function getOrders(auth) {
var a = await getOrders$1(fromAuthorization(auth));
validateApiStatus(a);
return toOrders(a);
}
async function getPositions(auth) {
var a = await getPositions$1(fromAuthorization(auth));
validateApiStatus(a);
return toPositions(a);
}
async function getTrades(auth) {
var a = await getTrades$1(fromAuthorization(auth));
validateApiStatus(a);
return toTrades(a);
}
async function placeOrder(auth, order) {
var a = await placeOrder$1(fromAuthorization(auth), fromPlaceOrder(order));
validateApiOrder(a);
return a.id;
}
function placeOrders(auth, orders) {
var p = placeOrders$1(fromAuthorization(auth), orders.map(fromPlaceOrder));
return orders.map((_, i) => p.then(a => {
validateApiStatus(a);
validateApiOrder(a.data[i].body);
return a.data[i].body.id;
}));
}
async function modifyOrder(auth, order) {
var a = awa