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.
- package/dist/shoonya-sdk.d.mts +138 -42
- package/dist/shoonya-sdk.d.ts +138 -42
- package/dist/shoonya-sdk.js +68 -12
- package/dist/shoonya-sdk.mjs +68 -12
- package/package.json +1 -1
package/dist/shoonya-sdk.d.mts
CHANGED
|
@@ -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<
|
|
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;
|
package/dist/shoonya-sdk.d.ts
CHANGED
|
@@ -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<
|
|
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;
|
package/dist/shoonya-sdk.js
CHANGED
|
@@ -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", {
|
|
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.
|
|
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) {
|
package/dist/shoonya-sdk.mjs
CHANGED
|
@@ -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", {
|
|
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.
|
|
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) {
|