shoonya-sdk 0.4.2 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,46 +1,5 @@
1
1
  import { EventEmitter } from 'events';
2
2
 
3
- declare const paths: {
4
- readonly login: "QuickAuth";
5
- readonly logout: "Logout";
6
- readonly forgotPassword: "ForgotPassword";
7
- readonly changePassword: "Changepwd";
8
- readonly watchlist: "MWList";
9
- readonly getWatchlist: "MarketWatch";
10
- readonly searchScrip: "SearchScrip";
11
- readonly userInfo: "UserDetails";
12
- readonly clientInfo: "ClientDetails";
13
- readonly quotes: "GetQuotes";
14
- readonly addScripToWL: "AddMultiScripsToMW";
15
- readonly removeScripFromWL: "DeleteMultiMWScrips";
16
- readonly securityInfo: "GetSecurityInfo";
17
- readonly placeOrder: "PlaceOrder";
18
- readonly modifyOrder: "ModifyOrder";
19
- readonly cancelOrder: "CancelOrder";
20
- readonly exitSNOOrder: "ExitSNOOrder";
21
- readonly historicData: "TPSeries";
22
- readonly optionChain: "GetOptionChain";
23
- readonly orderBook: "OrderBook";
24
- };
25
- type Path = keyof typeof paths;
26
-
27
- type LogType = "DEBUG" | "WARN" | "ERROR";
28
- declare class Logger {
29
- logPath: string;
30
- maxSize: number;
31
- fileName: string;
32
- /**
33
- *
34
- * @param logFileName name to prepend the logs file with
35
- * @param size max size of file (in bytes)
36
- */
37
- constructor(logFileName: string, size: number);
38
- log(msg: string, logType?: LogType): void;
39
- private checkLogSize;
40
- private deleteOldestFile;
41
- private checkPathExistance;
42
- }
43
-
44
3
  type RequestDataType = {
45
4
  [key: string]: string;
46
5
  };
@@ -203,6 +162,127 @@ interface OrderBookFail {
203
162
  emsg: string;
204
163
  }
205
164
  type OrderBook = OrderBookSuccess[] | OrderBookFail;
165
+ interface GetLimitsParam {
166
+ /**
167
+ * Product Name
168
+ * (Select from ‘prarr’ Array provided in User Details response, and if same is allowed for selected, exchange.
169
+ * Show product display name, for user to select, and send corresponding prd in API call)
170
+ *
171
+ * ```
172
+ * `C` : CNC
173
+ * `M` : NRML
174
+ * `I` : MIS
175
+ * `B` : Bracket Order
176
+ * `H` : Cover Order
177
+ * ```
178
+ */
179
+ prd?: "C" | "M" | "I" | "B" | "H";
180
+ seg?: "CM" | "FX" | "FO";
181
+ exch?: "NSE" | "NFO" | "BSE" | "MCX" | "CDS";
182
+ }
183
+ interface GetLimitsResponseFail {
184
+ stat: "Not_Ok";
185
+ emsg: string;
186
+ }
187
+ interface GetLimitsResponseSuccess {
188
+ request_time: string;
189
+ stat: "Ok";
190
+ prfname: string;
191
+ cash: number;
192
+ payin: number;
193
+ payout: number;
194
+ brkcollamt: number;
195
+ unclearedcash: number;
196
+ aux_daycash: number;
197
+ aux_brkcollamt: number;
198
+ aux_unclearedcash: number;
199
+ daycash: number;
200
+ turnoverlmt: number;
201
+ pendordvallmt: number;
202
+ remarks_amt: number;
203
+ remarks_text: string;
204
+ blk_amt: number;
205
+ }
206
+ interface GetSecurityInfoSuccess {
207
+ request_time: string;
208
+ stat: "Ok";
209
+ exch: "NFO" | "NSE" | "BSE" | "MCX" | "CDS";
210
+ tsym: string;
211
+ cname: string;
212
+ symname: string;
213
+ seg: string;
214
+ exd: string;
215
+ instname: string;
216
+ optt: "CE" | "PE";
217
+ und_exch: string;
218
+ und_tk: string;
219
+ pp: string;
220
+ prcftr: string;
221
+ ls: string;
222
+ ti: string;
223
+ mult: string;
224
+ weekly: string;
225
+ dname: string;
226
+ uc: string;
227
+ lc: string;
228
+ strprc: string;
229
+ prcftr_d: string;
230
+ exptime: string;
231
+ token: string;
232
+ frzqty: string;
233
+ delmrg: string;
234
+ varmrg: string;
235
+ expmrg: string;
236
+ }
237
+ interface GetSecurityInfoFail {
238
+ stat: "Not_Ok";
239
+ request_time: string;
240
+ emsg: string;
241
+ }
242
+ type GetSecurityInfoResponse = GetSecurityInfoSuccess | GetSecurityInfoFail;
243
+
244
+ declare const paths: {
245
+ readonly login: "QuickAuth";
246
+ readonly logout: "Logout";
247
+ readonly forgotPassword: "ForgotPassword";
248
+ readonly changePassword: "Changepwd";
249
+ readonly watchlist: "MWList";
250
+ readonly getWatchlist: "MarketWatch";
251
+ readonly searchScrip: "SearchScrip";
252
+ readonly userInfo: "UserDetails";
253
+ readonly clientInfo: "ClientDetails";
254
+ readonly quotes: "GetQuotes";
255
+ readonly addScripToWL: "AddMultiScripsToMW";
256
+ readonly removeScripFromWL: "DeleteMultiMWScrips";
257
+ readonly securityInfo: "GetSecurityInfo";
258
+ readonly placeOrder: "PlaceOrder";
259
+ readonly modifyOrder: "ModifyOrder";
260
+ readonly cancelOrder: "CancelOrder";
261
+ readonly exitSNOOrder: "ExitSNOOrder";
262
+ readonly historicData: "TPSeries";
263
+ readonly optionChain: "GetOptionChain";
264
+ readonly orderBook: "OrderBook";
265
+ readonly holding: "Holdings";
266
+ readonly limits: "Limits";
267
+ };
268
+ type Path = keyof typeof paths;
269
+
270
+ type LogType = "DEBUG" | "WARN" | "ERROR";
271
+ declare class Logger {
272
+ logPath: string;
273
+ maxSize: number;
274
+ fileName: string;
275
+ /**
276
+ *
277
+ * @param logFileName name to prepend the logs file with
278
+ * @param size max size of file (in bytes)
279
+ */
280
+ constructor(logFileName: string, size: number);
281
+ log(msg: string, logType?: LogType): void;
282
+ private checkLogSize;
283
+ private deleteOldestFile;
284
+ private checkPathExistance;
285
+ }
206
286
 
207
287
  type ShoonyaWSEvents = "connect" | "open" | "priceUpdate" | "orderUpdate" | "stopped" | "close" | "reconnect" | "error";
208
288
  declare interface Shoonya {
@@ -228,6 +308,7 @@ declare class Shoonya extends EventEmitter {
228
308
  private reconnectTimeout;
229
309
  private heartbeatTimeout;
230
310
  private lastWsMsgAt;
311
+ private autoReconnectTimeout;
231
312
  constructor(options?: {
232
313
  logging: boolean;
233
314
  /**
@@ -288,7 +369,7 @@ declare class Shoonya extends EventEmitter {
288
369
  * @returns
289
370
  */
290
371
  removeScripFromWatchList(listName: string, scrips: string[]): Promise<unknown>;
291
- getSecurityInfo(exchange: string, contractToken: string): Promise<unknown>;
372
+ getSecurityInfo(exchange: string, contractToken: string): Promise<GetSecurityInfoResponse>;
292
373
  placeOrder(details: OrderInput): Promise<PlaceOrder>;
293
374
  modifyOrder(orderDetail: MakeKeysRequired<Partial<OrderInput>, "exch" | "norenordno" | "tsym">): Promise<unknown>;
294
375
  cancelOrder(orderNo: string): Promise<unknown>;
@@ -337,6 +418,21 @@ declare class Shoonya extends EventEmitter {
337
418
  }>;
338
419
  private getFormattedExpiry;
339
420
  private getNextFormattedDates;
421
+ /**
422
+ * Product Name
423
+ * (Select from ‘prarr’ Array provided in User Details response, and if same is allowed for selected, exchange.
424
+ * Show product display name, for user to select, and send corresponding prd in API call)
425
+ *
426
+ * ```
427
+ * `C` : CNC
428
+ * `M` : NRML
429
+ * `I` : MIS
430
+ * `B` : Bracket Order
431
+ * `H` : Cover Order
432
+ * ```
433
+ */
434
+ getAccountHolding(productName: "C" | "M" | "I" | "B" | "H"): Promise<any>;
435
+ getAccountLimits(params?: GetLimitsParam): Promise<GetLimitsResponseSuccess | GetLimitsResponseFail>;
340
436
  getLastWSMessage(): Date;
341
437
  getWSState(): {
342
438
  OPEN: boolean;
@@ -1,46 +1,5 @@
1
1
  import { EventEmitter } from 'events';
2
2
 
3
- declare const paths: {
4
- readonly login: "QuickAuth";
5
- readonly logout: "Logout";
6
- readonly forgotPassword: "ForgotPassword";
7
- readonly changePassword: "Changepwd";
8
- readonly watchlist: "MWList";
9
- readonly getWatchlist: "MarketWatch";
10
- readonly searchScrip: "SearchScrip";
11
- readonly userInfo: "UserDetails";
12
- readonly clientInfo: "ClientDetails";
13
- readonly quotes: "GetQuotes";
14
- readonly addScripToWL: "AddMultiScripsToMW";
15
- readonly removeScripFromWL: "DeleteMultiMWScrips";
16
- readonly securityInfo: "GetSecurityInfo";
17
- readonly placeOrder: "PlaceOrder";
18
- readonly modifyOrder: "ModifyOrder";
19
- readonly cancelOrder: "CancelOrder";
20
- readonly exitSNOOrder: "ExitSNOOrder";
21
- readonly historicData: "TPSeries";
22
- readonly optionChain: "GetOptionChain";
23
- readonly orderBook: "OrderBook";
24
- };
25
- type Path = keyof typeof paths;
26
-
27
- type LogType = "DEBUG" | "WARN" | "ERROR";
28
- declare class Logger {
29
- logPath: string;
30
- maxSize: number;
31
- fileName: string;
32
- /**
33
- *
34
- * @param logFileName name to prepend the logs file with
35
- * @param size max size of file (in bytes)
36
- */
37
- constructor(logFileName: string, size: number);
38
- log(msg: string, logType?: LogType): void;
39
- private checkLogSize;
40
- private deleteOldestFile;
41
- private checkPathExistance;
42
- }
43
-
44
3
  type RequestDataType = {
45
4
  [key: string]: string;
46
5
  };
@@ -203,6 +162,127 @@ interface OrderBookFail {
203
162
  emsg: string;
204
163
  }
205
164
  type OrderBook = OrderBookSuccess[] | OrderBookFail;
165
+ interface GetLimitsParam {
166
+ /**
167
+ * Product Name
168
+ * (Select from ‘prarr’ Array provided in User Details response, and if same is allowed for selected, exchange.
169
+ * Show product display name, for user to select, and send corresponding prd in API call)
170
+ *
171
+ * ```
172
+ * `C` : CNC
173
+ * `M` : NRML
174
+ * `I` : MIS
175
+ * `B` : Bracket Order
176
+ * `H` : Cover Order
177
+ * ```
178
+ */
179
+ prd?: "C" | "M" | "I" | "B" | "H";
180
+ seg?: "CM" | "FX" | "FO";
181
+ exch?: "NSE" | "NFO" | "BSE" | "MCX" | "CDS";
182
+ }
183
+ interface GetLimitsResponseFail {
184
+ stat: "Not_Ok";
185
+ emsg: string;
186
+ }
187
+ interface GetLimitsResponseSuccess {
188
+ request_time: string;
189
+ stat: "Ok";
190
+ prfname: string;
191
+ cash: number;
192
+ payin: number;
193
+ payout: number;
194
+ brkcollamt: number;
195
+ unclearedcash: number;
196
+ aux_daycash: number;
197
+ aux_brkcollamt: number;
198
+ aux_unclearedcash: number;
199
+ daycash: number;
200
+ turnoverlmt: number;
201
+ pendordvallmt: number;
202
+ remarks_amt: number;
203
+ remarks_text: string;
204
+ blk_amt: number;
205
+ }
206
+ interface GetSecurityInfoSuccess {
207
+ request_time: string;
208
+ stat: "Ok";
209
+ exch: "NFO" | "NSE" | "BSE" | "MCX" | "CDS";
210
+ tsym: string;
211
+ cname: string;
212
+ symname: string;
213
+ seg: string;
214
+ exd: string;
215
+ instname: string;
216
+ optt: "CE" | "PE";
217
+ und_exch: string;
218
+ und_tk: string;
219
+ pp: string;
220
+ prcftr: string;
221
+ ls: string;
222
+ ti: string;
223
+ mult: string;
224
+ weekly: string;
225
+ dname: string;
226
+ uc: string;
227
+ lc: string;
228
+ strprc: string;
229
+ prcftr_d: string;
230
+ exptime: string;
231
+ token: string;
232
+ frzqty: string;
233
+ delmrg: string;
234
+ varmrg: string;
235
+ expmrg: string;
236
+ }
237
+ interface GetSecurityInfoFail {
238
+ stat: "Not_Ok";
239
+ request_time: string;
240
+ emsg: string;
241
+ }
242
+ type GetSecurityInfoResponse = GetSecurityInfoSuccess | GetSecurityInfoFail;
243
+
244
+ declare const paths: {
245
+ readonly login: "QuickAuth";
246
+ readonly logout: "Logout";
247
+ readonly forgotPassword: "ForgotPassword";
248
+ readonly changePassword: "Changepwd";
249
+ readonly watchlist: "MWList";
250
+ readonly getWatchlist: "MarketWatch";
251
+ readonly searchScrip: "SearchScrip";
252
+ readonly userInfo: "UserDetails";
253
+ readonly clientInfo: "ClientDetails";
254
+ readonly quotes: "GetQuotes";
255
+ readonly addScripToWL: "AddMultiScripsToMW";
256
+ readonly removeScripFromWL: "DeleteMultiMWScrips";
257
+ readonly securityInfo: "GetSecurityInfo";
258
+ readonly placeOrder: "PlaceOrder";
259
+ readonly modifyOrder: "ModifyOrder";
260
+ readonly cancelOrder: "CancelOrder";
261
+ readonly exitSNOOrder: "ExitSNOOrder";
262
+ readonly historicData: "TPSeries";
263
+ readonly optionChain: "GetOptionChain";
264
+ readonly orderBook: "OrderBook";
265
+ readonly holding: "Holdings";
266
+ readonly limits: "Limits";
267
+ };
268
+ type Path = keyof typeof paths;
269
+
270
+ type LogType = "DEBUG" | "WARN" | "ERROR";
271
+ declare class Logger {
272
+ logPath: string;
273
+ maxSize: number;
274
+ fileName: string;
275
+ /**
276
+ *
277
+ * @param logFileName name to prepend the logs file with
278
+ * @param size max size of file (in bytes)
279
+ */
280
+ constructor(logFileName: string, size: number);
281
+ log(msg: string, logType?: LogType): void;
282
+ private checkLogSize;
283
+ private deleteOldestFile;
284
+ private checkPathExistance;
285
+ }
206
286
 
207
287
  type ShoonyaWSEvents = "connect" | "open" | "priceUpdate" | "orderUpdate" | "stopped" | "close" | "reconnect" | "error";
208
288
  declare interface Shoonya {
@@ -228,6 +308,7 @@ declare class Shoonya extends EventEmitter {
228
308
  private reconnectTimeout;
229
309
  private heartbeatTimeout;
230
310
  private lastWsMsgAt;
311
+ private autoReconnectTimeout;
231
312
  constructor(options?: {
232
313
  logging: boolean;
233
314
  /**
@@ -288,7 +369,7 @@ declare class Shoonya extends EventEmitter {
288
369
  * @returns
289
370
  */
290
371
  removeScripFromWatchList(listName: string, scrips: string[]): Promise<unknown>;
291
- getSecurityInfo(exchange: string, contractToken: string): Promise<unknown>;
372
+ getSecurityInfo(exchange: string, contractToken: string): Promise<GetSecurityInfoResponse>;
292
373
  placeOrder(details: OrderInput): Promise<PlaceOrder>;
293
374
  modifyOrder(orderDetail: MakeKeysRequired<Partial<OrderInput>, "exch" | "norenordno" | "tsym">): Promise<unknown>;
294
375
  cancelOrder(orderNo: string): Promise<unknown>;
@@ -337,6 +418,21 @@ declare class Shoonya extends EventEmitter {
337
418
  }>;
338
419
  private getFormattedExpiry;
339
420
  private getNextFormattedDates;
421
+ /**
422
+ * Product Name
423
+ * (Select from ‘prarr’ Array provided in User Details response, and if same is allowed for selected, exchange.
424
+ * Show product display name, for user to select, and send corresponding prd in API call)
425
+ *
426
+ * ```
427
+ * `C` : CNC
428
+ * `M` : NRML
429
+ * `I` : MIS
430
+ * `B` : Bracket Order
431
+ * `H` : Cover Order
432
+ * ```
433
+ */
434
+ getAccountHolding(productName: "C" | "M" | "I" | "B" | "H"): Promise<any>;
435
+ getAccountLimits(params?: GetLimitsParam): Promise<GetLimitsResponseSuccess | GetLimitsResponseFail>;
340
436
  getLastWSMessage(): Date;
341
437
  getWSState(): {
342
438
  OPEN: boolean;
@@ -63,7 +63,9 @@ var paths = {
63
63
  exitSNOOrder: "ExitSNOOrder",
64
64
  historicData: "TPSeries",
65
65
  optionChain: "GetOptionChain",
66
- orderBook: "OrderBook"
66
+ orderBook: "OrderBook",
67
+ holding: "Holdings",
68
+ limits: "Limits"
67
69
  };
68
70
 
69
71
  // src/shoonya-sdk.ts
@@ -137,6 +139,25 @@ var Logger = class {
137
139
  };
138
140
  var logger_default = Logger;
139
141
 
142
+ // src/utils/parser.ts
143
+ var exampleObject = {
144
+ convertable: "57.3",
145
+ unconvertable: "So"
146
+ };
147
+ function parseKeysToNumber(obj) {
148
+ const newObj = {};
149
+ for (const key in obj) {
150
+ if (Number.isNaN(Number(obj[key]))) {
151
+ newObj[key] = String(obj[key]);
152
+ } else {
153
+ newObj[key] = Number(obj[key]);
154
+ }
155
+ }
156
+ return newObj;
157
+ }
158
+ __name(parseKeysToNumber, "parseKeysToNumber");
159
+ var parsedObj = parseKeysToNumber(exampleObject);
160
+
140
161
  // src/shoonya-sdk.ts
141
162
  var import_totp_generator = __toESM(require("totp-generator"));
142
163
  var Shoonya = class extends import_events.EventEmitter {
@@ -161,6 +182,7 @@ var Shoonya = class extends import_events.EventEmitter {
161
182
  reconnectTimeout;
162
183
  heartbeatTimeout;
163
184
  lastWsMsgAt;
185
+ autoReconnectTimeout = 1e3;
164
186
  constructor(options) {
165
187
  const {
166
188
  logging = false,
@@ -357,7 +379,10 @@ var Shoonya = class extends import_events.EventEmitter {
357
379
  exch: exchange,
358
380
  token: contractToken
359
381
  };
360
- return this.request("securityInfo", { data, key: this.accessToken });
382
+ return this.request("securityInfo", {
383
+ data,
384
+ key: this.accessToken
385
+ });
361
386
  }
362
387
  async placeOrder(details) {
363
388
  const data = {
@@ -496,6 +521,43 @@ var Shoonya = class extends import_events.EventEmitter {
496
521
  }
497
522
  return dates;
498
523
  }
524
+ /**
525
+ * Product Name
526
+ * (Select from ‘prarr’ Array provided in User Details response, and if same is allowed for selected, exchange.
527
+ * Show product display name, for user to select, and send corresponding prd in API call)
528
+ *
529
+ * ```
530
+ * `C` : CNC
531
+ * `M` : NRML
532
+ * `I` : MIS
533
+ * `B` : Bracket Order
534
+ * `H` : Cover Order
535
+ * ```
536
+ */
537
+ async getAccountHolding(productName) {
538
+ const data = {
539
+ uid: this.userId,
540
+ actid: this.accountId,
541
+ prd: productName
542
+ };
543
+ return await this.request("holding", { data, key: this.accessToken });
544
+ }
545
+ async getAccountLimits(params) {
546
+ const data = {
547
+ uid: this.userId,
548
+ actid: this.accountId,
549
+ ...params
550
+ };
551
+ const res = await this.request("limits", {
552
+ data,
553
+ key: this.accessToken
554
+ });
555
+ if (res.stat === "Not_Ok") {
556
+ return res;
557
+ }
558
+ const parsedObject = parseKeysToNumber(res);
559
+ return parsedObject;
560
+ }
499
561
  getLastWSMessage() {
500
562
  return this.lastWsMsgAt;
501
563
  }
@@ -537,23 +599,17 @@ var Shoonya = class extends import_events.EventEmitter {
537
599
  async () => {
538
600
  this.cronJobRunning = true;
539
601
  try {
602
+ this.disconnect();
603
+ const { setTimeout: setTimeout2 } = await import("timers/promises");
604
+ await setTimeout2(this.autoReconnectTimeout);
540
605
  const cred = {
541
606
  apiKey: this.apiKey,
542
607
  password: this.password,
543
608
  twoFa: this.twoFa,
544
609
  userId: this.userId
545
610
  };
546
- this.logger.log("Old access token: " + this.accessToken);
547
611
  await this.login(cred);
548
- this.logger.log("New access token: " + this.accessToken);
549
- let msg2 = {
550
- t: "c",
551
- uid: this.userId,
552
- actid: this.accountId,
553
- source: "API",
554
- susertoken: this.accessToken
555
- };
556
- this.ws.send(JSON.stringify(msg2));
612
+ this.connectWS();
557
613
  this.emit("open", "opened ws connection");
558
614
  this.logging && this.logger.log("Token Refreshed");
559
615
  } catch (err) {
@@ -30,7 +30,9 @@ var paths = {
30
30
  exitSNOOrder: "ExitSNOOrder",
31
31
  historicData: "TPSeries",
32
32
  optionChain: "GetOptionChain",
33
- orderBook: "OrderBook"
33
+ orderBook: "OrderBook",
34
+ holding: "Holdings",
35
+ limits: "Limits"
34
36
  };
35
37
 
36
38
  // src/shoonya-sdk.ts
@@ -111,6 +113,25 @@ var Logger = class {
111
113
  };
112
114
  var logger_default = Logger;
113
115
 
116
+ // src/utils/parser.ts
117
+ var exampleObject = {
118
+ convertable: "57.3",
119
+ unconvertable: "So"
120
+ };
121
+ function parseKeysToNumber(obj) {
122
+ const newObj = {};
123
+ for (const key in obj) {
124
+ if (Number.isNaN(Number(obj[key]))) {
125
+ newObj[key] = String(obj[key]);
126
+ } else {
127
+ newObj[key] = Number(obj[key]);
128
+ }
129
+ }
130
+ return newObj;
131
+ }
132
+ __name(parseKeysToNumber, "parseKeysToNumber");
133
+ var parsedObj = parseKeysToNumber(exampleObject);
134
+
114
135
  // src/shoonya-sdk.ts
115
136
  import totp from "totp-generator";
116
137
  var Shoonya = class extends EventEmitter {
@@ -135,6 +156,7 @@ var Shoonya = class extends EventEmitter {
135
156
  reconnectTimeout;
136
157
  heartbeatTimeout;
137
158
  lastWsMsgAt;
159
+ autoReconnectTimeout = 1e3;
138
160
  constructor(options) {
139
161
  const {
140
162
  logging = false,
@@ -331,7 +353,10 @@ var Shoonya = class extends EventEmitter {
331
353
  exch: exchange,
332
354
  token: contractToken
333
355
  };
334
- return this.request("securityInfo", { data, key: this.accessToken });
356
+ return this.request("securityInfo", {
357
+ data,
358
+ key: this.accessToken
359
+ });
335
360
  }
336
361
  async placeOrder(details) {
337
362
  const data = {
@@ -470,6 +495,43 @@ var Shoonya = class extends EventEmitter {
470
495
  }
471
496
  return dates;
472
497
  }
498
+ /**
499
+ * Product Name
500
+ * (Select from ‘prarr’ Array provided in User Details response, and if same is allowed for selected, exchange.
501
+ * Show product display name, for user to select, and send corresponding prd in API call)
502
+ *
503
+ * ```
504
+ * `C` : CNC
505
+ * `M` : NRML
506
+ * `I` : MIS
507
+ * `B` : Bracket Order
508
+ * `H` : Cover Order
509
+ * ```
510
+ */
511
+ async getAccountHolding(productName) {
512
+ const data = {
513
+ uid: this.userId,
514
+ actid: this.accountId,
515
+ prd: productName
516
+ };
517
+ return await this.request("holding", { data, key: this.accessToken });
518
+ }
519
+ async getAccountLimits(params) {
520
+ const data = {
521
+ uid: this.userId,
522
+ actid: this.accountId,
523
+ ...params
524
+ };
525
+ const res = await this.request("limits", {
526
+ data,
527
+ key: this.accessToken
528
+ });
529
+ if (res.stat === "Not_Ok") {
530
+ return res;
531
+ }
532
+ const parsedObject = parseKeysToNumber(res);
533
+ return parsedObject;
534
+ }
473
535
  getLastWSMessage() {
474
536
  return this.lastWsMsgAt;
475
537
  }
@@ -511,23 +573,17 @@ var Shoonya = class extends EventEmitter {
511
573
  async () => {
512
574
  this.cronJobRunning = true;
513
575
  try {
576
+ this.disconnect();
577
+ const { setTimeout: setTimeout2 } = await import("timers/promises");
578
+ await setTimeout2(this.autoReconnectTimeout);
514
579
  const cred = {
515
580
  apiKey: this.apiKey,
516
581
  password: this.password,
517
582
  twoFa: this.twoFa,
518
583
  userId: this.userId
519
584
  };
520
- this.logger.log("Old access token: " + this.accessToken);
521
585
  await this.login(cred);
522
- this.logger.log("New access token: " + this.accessToken);
523
- let msg2 = {
524
- t: "c",
525
- uid: this.userId,
526
- actid: this.accountId,
527
- source: "API",
528
- susertoken: this.accessToken
529
- };
530
- this.ws.send(JSON.stringify(msg2));
586
+ this.connectWS();
531
587
  this.emit("open", "opened ws connection");
532
588
  this.logging && this.logger.log("Token Refreshed");
533
589
  } catch (err) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shoonya-sdk",
3
- "version": "0.4.2",
3
+ "version": "0.4.3",
4
4
  "description": "Wrapper around Shoonya API",
5
5
  "main": "dist/shoonya-sdk.js",
6
6
  "module": "dist/shoonya-sdk.mjs",